feat(frontend): add intake journal and shared note flows (#648)

* feat(backend): add intake journal APIs and share note support

* feat(frontend): add intake journal and shared note flows
This commit is contained in:
Daniel Volz
2026-05-24 14:00:30 +02:00
committed by GitHub
parent e4a1b449c6
commit c78fc43083
67 changed files with 5414 additions and 580 deletions
+113 -1
View File
@@ -102,6 +102,64 @@
"needsRefill": "Needs refill"
}
},
"journal": {
"actions": {
"note": "Note",
"noteTakenOnly": "Notes are only available for taken or skipped doses.",
"history": "Journal history",
"historyShort": "Journal"
},
"editor": {
"addTitle": "Add journal note",
"editTitle": "Edit journal note",
"description": "Capture what happened for this intake without changing the existing take or skip status.",
"loading": "Loading journal entry...",
"noteLabel": "Journal note",
"notePlaceholder": "What should you remember about this intake?",
"saving": "Saving...",
"deleting": "Deleting..."
},
"history": {
"title": "Journal history",
"description": "Browse saved intake notes by medication or date, then reopen an entry in edit mode.",
"loading": "Loading journal history...",
"empty": "No journal entries match the current filters.",
"noNote": "No note saved.",
"reload": "Reload",
"resetFilters": "Reset filters",
"reopen": "Reopen note",
"updatedAt": "Updated {{date}}",
"filters": {
"medication": "Medication",
"allMedications": "All medications",
"from": "From",
"to": "To",
"fromPlaceholder": "Start date",
"toPlaceholder": "End date"
}
},
"context": {
"scheduledFor": "Scheduled for",
"takenAt": "Taken at",
"markedBy": "Marked by",
"source": "Marked via",
"sourceOwnerApp": "Main app",
"sourceSharedLink": "Shared intake link",
"sourceAutomaticReminder": "Automatic reminder logic",
"statusTaken": "Taken",
"statusSkipped": "Skipped",
"notRecorded": "Not recorded",
"self": "You"
},
"errors": {
"loadFailed": "Journal entry could not be loaded.",
"historyFailed": "Journal history could not be loaded.",
"saveFailed": "Journal note could not be saved.",
"deleteFailed": "Journal note could not be deleted.",
"emptySharedNote": "Shared links cannot clear journal notes. Enter a note or close the dialog.",
"noEventSelected": "No journal entry is selected."
}
},
"table": {
"name": "Name",
"pills": "Pills",
@@ -604,10 +662,16 @@
"deleteAccount": "Delete Account",
"deleteAccountConfirmTitle": "Delete Account?",
"deleteAccountConfirmText": "This will permanently delete your account and all your data (medications, settings, history). This action cannot be undone.",
"deleteAccountButton": "Yes, delete my account"
"deleteAccountButton": "Yes, delete my account",
"connectionErrorTitle": "Connection Error",
"connectionErrorHelp": "Please check if the server is running and try again.",
"sessionExpiredTitle": "Session expired",
"sessionExpiredHelp": "Please sign in again to continue your owner session."
},
"common": {
"loading": "Loading...",
"initializing": "Initializing...",
"retry": "Retry",
"sending": "Sending...",
"sent": "Sent!",
"sendFailed": "Failed to send",
@@ -632,6 +696,7 @@
"back": "Back",
"cancel": "Cancel",
"close": "Close",
"hide": "Hide",
"edit": "Edit",
"view": "View",
"delete": "Delete",
@@ -676,6 +741,13 @@
"allPeople": "Everyone",
"selectPerson": "Select person",
"selectPeriod": "Select time period",
"selectExpiry": "Link expiry",
"allowJournalNotes": "Allow this shared link to view and edit journal notes",
"journalNotesEnabled": "Journal view/edit enabled",
"expiryNever": "Never expires",
"expiry7Days": "Expires in 7 days",
"expiry30Days": "Expires in 30 days",
"expiry90Days": "Expires in 90 days",
"generateLink": "Generate Link",
"generating": "Generating...",
"generateAnother": "Generate another link",
@@ -685,9 +757,21 @@
"copyLink": "Copy Link",
"copyOverviewLink": "Copy Overview Link",
"copied": "Copied to clipboard!",
"activeLinksTitle": "Active share links",
"loadingActiveLinks": "Loading active share links...",
"noActiveLinks": "No active share links yet.",
"manageLinksSummary": "Manage active share links",
"generateFailed": "Failed to generate share link",
"revokeFailed": "Failed to revoke share link",
"activeLinkMeta": "{{days}} days, created {{createdAt}}",
"activeLinkMetaWithExpiry": "{{days}} days, created {{createdAt}}, expires {{expiresAt}}",
"revoke": "Revoke",
"revoking": "Revoking...",
"revokeConfirm": "Revoke the active share link for {{person}}?",
"noPeople": "No medications with 'Taken by' assigned. Add a person to a medication first.",
"scheduleFor": "Schedule for",
"period": "Period",
"publicAccessHelp": "This shared link only exposes the selected schedule and shared dose actions. Owner settings and full account access stay in the main app.",
"noSchedule": "No scheduled doses found.",
"generatedBy": "Generated by",
"notFound": "Share link not found",
@@ -755,6 +839,24 @@
"confirmImportEmpty": "Import Data?",
"confirmImportEmptyMessage": "This will import all medications, dose history, settings, and share links from the selected file.",
"confirmButtonEmpty": "Import",
"reviewDescription": "Review the validated backup contents before replacing your current installation data.",
"reviewDescriptionEmpty": "Review the validated backup contents before importing them into this installation.",
"incomingData": "Import file",
"currentData": "Current data",
"summaryCounts": "{{medications}} medications, {{doses}} doses, {{refills}} refills, {{shares}} share links",
"formatVersion": "Format version: {{version}}",
"exportedAt": "Exported at: {{date}}",
"settingsIncluded": "Settings included",
"settingsConfigured": "Settings currently configured",
"journalEntries": "{{count}} journal entries",
"imageCount": "{{count}} embedded images",
"warningListTitle": "Warnings",
"warningReplaceData": "Your current medications, dose history, settings, and share links will be replaced.",
"warningShareLinks": "Imported share links will get new tokens during restore for security.",
"warningImages": "Embedded images increase import size and may take longer to restore.",
"warningSensitive": "This backup includes sensitive notification data.",
"backupFirst": "Download current backup first",
"backupHint": "Recommended: export your current data before confirming the import.",
"cancelButton": "Cancel",
"exportSuccess": "Data exported successfully",
"importSuccess": "Data imported successfully",
@@ -836,6 +938,9 @@
"button": "Report",
"title": "Medication Report",
"description": "Generate a document with detailed medication information for your doctor or personal records.",
"dateRange": "Date range",
"from": "From",
"until": "Until",
"selectAll": "Select all",
"deselectAll": "Deselect all",
"activeMeds": "Active Medications",
@@ -845,12 +950,19 @@
"formatMd": "Markdown (.md)",
"formatPdf": "PDF (Print)",
"generate": "Generate",
"regenerate": "Refresh preview",
"generating": "Generating...",
"download": "Download",
"preview": "Preview",
"previewDescription": "Review the generated report before exporting it.",
"invalidDateRange": "Choose a valid date range.",
"error": "Could not generate the report. Please try again.",
"noSelection": "Select at least one medication",
"filterByPerson": "Report for",
"allPeople": "Everyone",
"docTitle": "Medication Report",
"docGenerated": "Generated on",
"docRange": "Report range",
"docGeneral": "General",
"docCommercialName": "Commercial Name",
"docGenericName": "Generic Name",