refactor(frontend): modularize App.tsx into components, pages, hooks, and context (#60)

- Extract App.tsx from 764 lines to ~404 lines
- Create reusable components: MedDetailModal, MobileEditModal, ShareDialog, etc.
- Add AppContext for global state management
- Split pages: DashboardPage, MedicationsPage, SchedulePage, SettingsPage, PlannerPage
- Create custom hooks: useAuth, useMedications, useSettings, useDoses, useSchedule
- Add utility functions in separate modules
- Fix stock status logic (>30 days = green/normal)
- Fix reminder threshold calculation (use reminderDaysBefore not lowStockDays)
- Fix takenBy validation (send [] instead of null)
- Fix datetime format for blister start times (add Z suffix)
- Style 'All OK' status as green/bold

BREAKING: None - all existing functionality preserved
This commit is contained in:
Daniel Volz
2026-01-22 05:38:34 +01:00
committed by GitHub
parent 89edd74de3
commit 8718311876
44 changed files with 7448 additions and 5139 deletions
+4 -3
View File
@@ -50,8 +50,9 @@
"reminders": {
"active": "Automatische Erinnerungen aktiv",
"allStockOk": "Bestand OK",
"allOk": "Alles OK",
"allOk": "Alles OK",
"lastReminder": "Letzte Erinnerung",
"next": "Nächste",
"nextIn": "Nächste",
"inDays": "in {{days}} Tagen",
"noRemindersNeeded": "keine Erinnerungen nötig",
@@ -243,8 +244,8 @@
"highStock": "Hoch",
"noSchedule": "Kein Zeitplan",
"enough": "Ausreichend",
"noPillsLeft": "Keine Tabletten mehr",
"stockOk": "Bestand OK"
"noPillsLeft": "Keine Tabletten mehr",
"stockOk": "Bestand OK"
},
"tooltips": {
"intakeReminders": "Einnahme-Erinnerungen aktiviert",
+4 -3
View File
@@ -52,8 +52,9 @@
"reminders": {
"active": "Automatic reminders active",
"allStockOk": "All stock OK",
"allOk": "All OK",
"allOk": "All OK",
"lastReminder": "Last reminder",
"next": "Next",
"nextIn": "Next",
"inDays": "in {{days}} days",
"noRemindersNeeded": "no reminders needed",
@@ -245,8 +246,8 @@
"highStock": "High",
"noSchedule": "No Schedule",
"enough": "Enough",
"noPillsLeft": "No pills left",
"stockOk": "Stock OK"
"noPillsLeft": "No pills left",
"stockOk": "Stock OK"
},
"tooltips": {
"intakeReminders": "Intake reminders enabled",