From 4d59ce60f061f96ce293b6378a9bf3e405891c99 Mon Sep 17 00:00:00 2001 From: Jeffrey Wong Date: Wed, 24 Jul 2024 10:46:56 -0400 Subject: [PATCH] Display warnings and errors for entities. --- .../document-management-components.js | 42 ++++++++++++++++--- src/styles/document-management.css | 4 ++ 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/client/components/document-management-components.js b/src/client/components/document-management-components.js index 17fb25ae..a1b427a4 100644 --- a/src/client/components/document-management-components.js +++ b/src/client/components/document-management-components.js @@ -19,8 +19,11 @@ import { const DOCUMENT_STATUS_FIELDS = Document.statusFields(); -const hasIssues = doc => _.values( doc.issues() ).some( i => !_.isNull( i ) ); -const hasIssue = ( doc, key ) => _.has( doc.issues(), key ) && !_.isNull( _.get( doc.issues(), key ) ); +const issuesPresent = e => _.values( e.issues() ).some( i => !_.isNull( i ) ); +const hasEntityIssues = doc => doc.entities().some( issuesPresent ); +const hasDocIssues = doc => issuesPresent( doc ); +const hasIssues = doc => hasEntityIssues( doc ) || hasDocIssues( doc ); +const hasIssue = ( e, key ) => _.has( e.issues(), key ) && !_.isNull( _.get( e.issues(), key ) ); /** * sendMail @@ -351,9 +354,7 @@ class DocumentManagementDocumentComponent extends React.Component { if( hasIssue( doc, 'paperId' ) ){ const { paperId: paperIdIssue } = doc.issues(); - const err = h( 'div', { - className: makeClassList({ 'issue': true }) - }, `${paperIdIssue.error.name}: ${paperIdIssue.message}` ); + const err = h( 'div', `${paperIdIssue.error.name}: ${paperIdIssue.message}` ); items.push( err ); } @@ -390,6 +391,34 @@ class DocumentManagementDocumentComponent extends React.Component { ]); }; + // Entities + const getEntityInfo = doc => { + const numEntities = doc.entities().length; + let items = [ h('div', { key: 'total' }, `Total: ${numEntities}`)]; + const mixedOrganisms = doc.organisms().length > 1; + const hasIssue = hasEntityIssues( doc ); + const hasWarning = mixedOrganisms; // orphaned nodes + + if( hasIssue ){ + const issues = doc.entities().filter( issuesPresent ).map( e => e.issues() ); + const errors = _.flatten( issues ).map( i => i.error.name ); + const errorTypes = _.toPairs( _.countBy( errors ) ).map( ([ error, count ], key) => h('div', { key }, `${error}: ${count}`) ); + items.push( errorTypes ); + } + if( hasWarning ){ + if( mixedOrganisms ) items.push( h('div', { key: 'organism' }, 'Mixed organisms' ) ); + } + + return h( 'div.document-management-document-section', [ + h( 'div.document-management-document-section-label', { + className: makeClassList({'issue': hasIssue, 'warning': hasWarning}) + },[ + h( 'div.document-management-document-section-label-text', 'Entities') + ]), + h( 'div.document-management-document-section-items', items ) + ]); + }; + // Correspondence const getVerified = doc => { let radios = []; @@ -466,7 +495,7 @@ class DocumentManagementDocumentComponent extends React.Component { return h( 'div.document-management-document-section', [ h( 'div.document-management-document-section-label', { className: makeClassList({ 'issue': hasIssue( doc, 'authorEmail' ) }) - }, 'Correspondence:' ), + }, 'Correspondence' ), content ]); }; @@ -529,6 +558,7 @@ class DocumentManagementDocumentComponent extends React.Component { getDocumentHeader( doc ), getDocumentArticle( doc ), getDocumentInfo( doc ), + getEntityInfo( doc ), getDocumentCorrespondence( doc ), getDocumentStats( doc ) ]); diff --git a/src/styles/document-management.css b/src/styles/document-management.css index cd0ad59d..fb706c84 100644 --- a/src/styles/document-management.css +++ b/src/styles/document-management.css @@ -29,6 +29,10 @@ & .issue { color: var(--invalidColor); } + + & .warning { + color: var(--brandColorDark); + } } .document-management-hidden {