diff --git a/src/App.jsx b/src/App.jsx index 992b93b..c01faaf 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -3,6 +3,7 @@ import JSZip from 'jszip'; import { MetadataForm } from './components/MetadataForm.jsx'; import { normalizeMetadata } from './metadata/normalizeMetadata.js'; import { importGithubMetadata } from './services/githubImporter.js'; +import { importReviewHeadline } from './services/importReviewHeadline.js'; import { pickPreferredOrcidCandidate, searchOrcidCandidates } from './services/orcidSearch.js'; import { toCitationCff } from './services/citation.js'; import { validateCitationCffText } from './services/citationValidation.js'; @@ -244,10 +245,7 @@ function buildImportReviewSummary(importStatus) { const uniqueWarnings = [...new Set(warnings)].filter(Boolean); const uniqueRecommendations = [...new Set(recommendations)].filter(Boolean); - const healthy = uniqueWarnings.length === 0 && (importStatus.errors || []).length === 0; - return { - healthy, warningCount: uniqueWarnings.length, warnings: uniqueWarnings, recommendations: uniqueRecommendations, @@ -403,7 +401,7 @@ export default function App() { const [orcidSuggestions, setOrcidSuggestions] = useState({}); const [exportNotice, setExportNotice] = useState({ kind: '', message: '', details: [] }); const [touchedFields, setTouchedFields] = useState({}); - const [hasImportedMetadata, setHasImportedMetadata] = useState(false); + const [showValidationErrors, setShowValidationErrors] = useState(false); const [theme, setTheme] = useState(() => { if (typeof window === 'undefined') { return 'dark'; @@ -500,6 +498,7 @@ export default function App() { }, [normalizedForm.repositoryCode, hasMetadataCore, hasValidationErrors]); function showValidationNotice(errors) { + setShowValidationErrors(true); const details = formatValidationSummary(errors); const missingFields = getValidationMissingFields(errors); setExportNotice({ @@ -768,18 +767,6 @@ export default function App() { return; } - if (!importedMeaningfulMetadata) { - setTouchedFields((current) => ({ - ...current, - title: true, - authors: true, - license: true, - version: true, - typeOfWork: true, - publicationDate: true, - })); - } - setImportStatus({ loading: false, warnings: result.warnings, @@ -789,9 +776,10 @@ export default function App() { comparisons: importedMeaningfulMetadata ? (Array.isArray(result.comparisons) ? result.comparisons : []) : [], }); - setHasImportedMetadata(importedMeaningfulMetadata); - if (result.errors.length === 0) { + setTouchedFields({}); + setShowValidationErrors(false); + clearExportNotice(); setForm(nextForm); setOrcidSuggestions(nextSuggestions); } @@ -1158,9 +1146,9 @@ export default function App() {
Reviewed metadata loaded in editor.
)} @@ -1253,9 +1241,7 @@ export default function App() {
Citation Review

- {importReviewSummary.healthy - ? '✓ Repository metadata looks healthy' - : `Warnings (${importReviewSummary.warningCount})`} + {importReviewHeadline(importStatus, importReviewSummary.warningCount)}

{importReviewSummary.warnings.length > 0 && (