diff --git a/src/components/data-management-modal.tsx b/src/components/data-management-modal.tsx index 89eed93..f0f34fc 100644 --- a/src/components/data-management-modal.tsx +++ b/src/components/data-management-modal.tsx @@ -112,6 +112,7 @@ const DataManagementModal: React.FC = ({ const [jsonValidationMessage, setJsonValidationMessage] = useState<{ type: 'success' | 'error' | null; message: string; + warnings?: string[]; }>({ type: null, message: '' }); // Clipboard feedback @@ -119,30 +120,31 @@ const DataManagementModal: React.FC = ({ // Reset editor when modal opens/closes React.useEffect(() => { - if (isOpen) { - // Load current app data into editor when opening - const appState = { - pkParams, - days, - therapeuticRange, - doseIncrement, - uiSettings, - steadyStateConfig: { daysOnMedication: pkParams.advanced.steadyStateDays }, - }; - const exportData = exportSettings(appState, exportOptions, APP_VERSION); - const jsonString = JSON.stringify(exportData, null, 2); - setJsonEditorContent(jsonString); - setJsonEditorExpanded(true); - validateJsonContent(jsonString); - } else { - // Clear editor when closing - setJsonEditorContent(''); - setJsonEditorExpanded(false); - setJsonValidationMessage({ type: null, message: '' }); - setSelectedFile(null); - if (fileInputRef.current) { + // TODO nice to have: use can decide behavior via checkbox (near editor) + // if (isOpen) { + // // Load current app data into editor when opening + // const appState = { + // pkParams, + // days, + // therapeuticRange, + // doseIncrement, + // uiSettings, + // steadyStateConfig: { daysOnMedication: pkParams.advanced.steadyStateDays }, + // }; + // const exportData = exportSettings(appState, exportOptions, APP_VERSION); + // const jsonString = JSON.stringify(exportData, null, 2); + // setJsonEditorContent(jsonString); + // setJsonEditorExpanded(true); + // validateJsonContent(jsonString); + // } else { + + // Clear/collapse editor and clear upload file ref when opening/closing + setJsonEditorContent(''); + setJsonEditorExpanded(false); + setJsonValidationMessage({ type: null, message: '' }); + setSelectedFile(null); + if (fileInputRef.current) { fileInputRef.current.value = ''; - } } }, [isOpen]); @@ -300,9 +302,11 @@ const DataManagementModal: React.FC = ({ } if (validation.warnings.length > 0) { + // Show success with warnings - warnings will be displayed separately setJsonValidationMessage({ type: 'success', - message: t('jsonValidationSuccess') + ' ⚠️ ' + validation.warnings.length + ' warnings', + message: t('jsonValidationSuccess'), + warnings: validation.warnings, }); return; } @@ -734,19 +738,33 @@ const DataManagementModal: React.FC = ({ /> {jsonValidationMessage.type && ( -
- {jsonValidationMessage.type === 'success' ? ( - - ) : ( - +
+
+ {jsonValidationMessage.type === 'success' ? ( + + ) : ( + + )} + {jsonValidationMessage.message} +
+ {jsonValidationMessage.warnings && jsonValidationMessage.warnings.length > 0 && ( +
+ {jsonValidationMessage.warnings.map((warning, index) => ( +
+ {warning} +
+ ))} +
)} - {jsonValidationMessage.message}
)} diff --git a/src/utils/exportImport.ts b/src/utils/exportImport.ts index a42a0fa..b55bf8a 100644 --- a/src/utils/exportImport.ts +++ b/src/utils/exportImport.ts @@ -219,7 +219,7 @@ export const validateImportData = (data: any): ImportValidationResult => { // Validate advanced settings if (importData.advancedSettings !== undefined) { - const validCategories = ['standardVd', 'weightBasedVd', 'foodEffect', 'urinePh', 'fOral', 'steadyStateDays']; + const validCategories = ['standardVd', 'weightBasedVd', 'foodEffect', 'urinePh', 'fOral', 'steadyStateDays', 'ageGroup', 'renalFunction']; const importedCategories = Object.keys(importData.advancedSettings); const unknownCategories = importedCategories.filter(c => !validCategories.includes(c)); if (unknownCategories.length > 0) {