fix: export/import missing refill history, prescription, and bottle fields (#227)
- Add refill history export/import with medication reference mapping - Include totalPills (bottle type capacity) in inventory export - Include dismissedUntil field for past dose dismissal state - Add expiryWarningDays and shareStockStatus to settings export - Bump export version to 1.1 - Add refill count to import result reporting - Update i18n import success details to include refill count Closes #224
This commit is contained in:
@@ -175,8 +175,20 @@ export interface AppContextValue {
|
||||
setShowImportConfirm: React.Dispatch<React.SetStateAction<boolean>>;
|
||||
pendingImportData: unknown;
|
||||
setPendingImportData: React.Dispatch<React.SetStateAction<unknown>>;
|
||||
importResult: { medications: number; doses: number; shares: number } | null;
|
||||
setImportResult: React.Dispatch<React.SetStateAction<{ medications: number; doses: number; shares: number } | null>>;
|
||||
importResult: {
|
||||
medications: number;
|
||||
doses: number;
|
||||
refills: number;
|
||||
shares: number;
|
||||
} | null;
|
||||
setImportResult: React.Dispatch<
|
||||
React.SetStateAction<{
|
||||
medications: number;
|
||||
doses: number;
|
||||
refills: number;
|
||||
shares: number;
|
||||
} | null>
|
||||
>;
|
||||
handleExport: (includeImages?: boolean) => Promise<void>;
|
||||
handleImportFileSelect: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
||||
handleImportConfirm: () => Promise<void>;
|
||||
@@ -237,7 +249,12 @@ export function AppProvider({ children }: { children: React.ReactNode }) {
|
||||
const [showExportModal, setShowExportModal] = useState(false);
|
||||
const [showImportConfirm, setShowImportConfirm] = useState(false);
|
||||
const [pendingImportData, setPendingImportData] = useState<unknown>(null);
|
||||
const [importResult, setImportResult] = useState<{ medications: number; doses: number; shares: number } | null>(null);
|
||||
const [importResult, setImportResult] = useState<{
|
||||
medications: number;
|
||||
doses: number;
|
||||
refills: number;
|
||||
shares: number;
|
||||
} | null>(null);
|
||||
|
||||
// Load user-specific scheduleDays when user changes
|
||||
useEffect(() => {
|
||||
@@ -581,6 +598,7 @@ export function AppProvider({ children }: { children: React.ReactNode }) {
|
||||
setImportResult({
|
||||
medications: data.imported?.medications || 0,
|
||||
doses: data.imported?.doseHistory || 0,
|
||||
refills: data.imported?.refillHistory || 0,
|
||||
shares: data.imported?.shareLinks || 0,
|
||||
});
|
||||
|
||||
|
||||
@@ -501,7 +501,7 @@
|
||||
"cancelButton": "Abbrechen",
|
||||
"exportSuccess": "Daten erfolgreich exportiert",
|
||||
"importSuccess": "Daten erfolgreich importiert",
|
||||
"importSuccessDetails": "Importiert: {{medications}} Medikamente, {{doses}} Dosen, {{shares}} Teilen-Links",
|
||||
"importSuccessDetails": "Importiert: {{medications}} Medikamente, {{doses}} Dosen, {{refills}} Nachfüllungen, {{shares}} Teilen-Links",
|
||||
"importError": "Daten konnten nicht importiert werden",
|
||||
"invalidFile": "Ungültiges Dateiformat. Bitte wähle eine gültige MedAssist-ng-Exportdatei.",
|
||||
"downloadFilename": "medassist-export"
|
||||
|
||||
@@ -501,7 +501,7 @@
|
||||
"cancelButton": "Cancel",
|
||||
"exportSuccess": "Data exported successfully",
|
||||
"importSuccess": "Data imported successfully",
|
||||
"importSuccessDetails": "Imported: {{medications}} medications, {{doses}} doses, {{shares}} share links",
|
||||
"importSuccessDetails": "Imported: {{medications}} medications, {{doses}} doses, {{refills}} refills, {{shares}} share links",
|
||||
"importError": "Failed to import data",
|
||||
"invalidFile": "Invalid file format. Please select a valid MedAssist-ng export file.",
|
||||
"downloadFilename": "medassist-export"
|
||||
|
||||
@@ -256,7 +256,7 @@ describe("useAppContext", () => {
|
||||
(global.fetch as ReturnType<typeof vi.fn>).mockResolvedValue({
|
||||
ok: true,
|
||||
json: () => Promise.resolve({}),
|
||||
text: () => Promise.resolve('{"imported":{"medications":1,"doseHistory":2,"shareLinks":3}}'),
|
||||
text: () => Promise.resolve('{"imported":{"medications":1,"doseHistory":2,"refillHistory":4,"shareLinks":3}}'),
|
||||
});
|
||||
});
|
||||
|
||||
@@ -364,7 +364,7 @@ describe("useAppContext", () => {
|
||||
expect(mockUseMedications().loadMeds).toHaveBeenCalled();
|
||||
expect(mockUseSettings().loadSettings).toHaveBeenCalled();
|
||||
expect(mockUseDoses().loadTakenDoses).toHaveBeenCalled();
|
||||
expect(result.current.importResult).toEqual({ medications: 1, doses: 2, shares: 3 });
|
||||
expect(result.current.importResult).toEqual({ medications: 1, doses: 2, refills: 4, shares: 3 });
|
||||
});
|
||||
|
||||
it("exports data and triggers JSON download", async () => {
|
||||
|
||||
Reference in New Issue
Block a user