Added Phase‑1 continuation work across deep links, offline moderation queue, and admin push.
resources/js/admin/mobile/lib.
- Admin push is end‑to‑end: new backend model/migration/service/job + API endpoints, admin runtime config, push‑aware
service worker, and a settings toggle via useAdminPushSubscription. Notifications now auto‑refresh on push.
- New PHP/JS tests: admin push API feature test and queue/haptics unit tests
Added admin-specific PWA icon assets and wired them into the admin manifest, service worker, and admin shell, plus a
new “Device & permissions” card in mobile Settings with a persistent storage action and translations.
Details: public/manifest.json, public/admin-sw.js, resources/views/admin.blade.php, new icons in public/; new hook
resources/js/admin/mobile/hooks/useDevicePermissions.ts, helpers/tests in resources/js/admin/mobile/lib/
devicePermissions.ts + resources/js/admin/mobile/lib/devicePermissions.test.ts, and Settings UI updates in resources/
js/admin/mobile/SettingsPage.tsx with copy in resources/js/admin/i18n/locales/en/management.json and resources/js/
admin/i18n/locales/de/management.json.
This commit is contained in:
@@ -1955,7 +1955,14 @@
|
||||
"unfeatureSuccess": "Highlight entfernt",
|
||||
"featureFailed": "Highlight konnte nicht geändert werden.",
|
||||
"approveSuccess": "Foto freigegeben",
|
||||
"approveFailed": "Freigabe fehlgeschlagen."
|
||||
"approveFailed": "Freigabe fehlgeschlagen.",
|
||||
"queued": "Aktion gespeichert. Wird synchronisiert, sobald du online bist.",
|
||||
"queueTitle": "Änderungen warten auf Sync",
|
||||
"queueOnline": "{{count}} Aktionen bereit zur Synchronisierung.",
|
||||
"queueOffline": "{{count}} Aktionen gespeichert – offline.",
|
||||
"queueSync": "Sync",
|
||||
"queueWaiting": "Offline",
|
||||
"syncFailed": "Synchronisierung fehlgeschlagen. Bitte später erneut versuchen."
|
||||
},
|
||||
"mobileProfile": {
|
||||
"title": "Profil",
|
||||
@@ -1976,6 +1983,39 @@
|
||||
"tenantBadge": "Tenant #{{id}}",
|
||||
"notificationsTitle": "Benachrichtigungen",
|
||||
"notificationsLoading": "Lade Einstellungen ...",
|
||||
"pushTitle": "App Push",
|
||||
"pushUnsupported": "Push-Benachrichtigungen werden auf diesem Gerät nicht unterstützt.",
|
||||
"pushDenied": "Benachrichtigungen sind im Browser blockiert.",
|
||||
"pushActive": "Push aktiv",
|
||||
"pushInactive": "Push deaktiviert",
|
||||
"pushLoading": "Lädt ...",
|
||||
"deviceTitle": "Gerät & Berechtigungen",
|
||||
"deviceDescription": "Halte die Admin-App schnell, offline-bereit und für Benachrichtigungen freigeschaltet.",
|
||||
"deviceLoading": "Gerätestatus wird geprüft ...",
|
||||
"deviceStorageAction": "Offline-Schutz aktivieren",
|
||||
"deviceStorageError": "Offline-Schutz konnte nicht aktiviert werden.",
|
||||
"deviceStatusValues": {
|
||||
"granted": "Erlaubt",
|
||||
"denied": "Blockiert",
|
||||
"prompt": "Berechtigung nötig",
|
||||
"unsupported": "Nicht unterstützt",
|
||||
"persisted": "Geschützt",
|
||||
"available": "Nicht geschützt"
|
||||
},
|
||||
"deviceStatus": {
|
||||
"notifications": {
|
||||
"label": "Benachrichtigungen",
|
||||
"description": "Erlaubt Warnungen und Admin-Updates."
|
||||
},
|
||||
"camera": {
|
||||
"label": "Kamera",
|
||||
"description": "Für QR-Scans und schnelle Aufnahmen."
|
||||
},
|
||||
"storage": {
|
||||
"label": "Offline-Speicher",
|
||||
"description": "Schützt zwischengespeicherte Daten vor Löschung."
|
||||
}
|
||||
},
|
||||
"pref": {}
|
||||
},
|
||||
"events": {
|
||||
|
||||
@@ -1975,7 +1975,14 @@
|
||||
"unfeatureSuccess": "Highlight removed",
|
||||
"featureFailed": "Highlight could not be changed",
|
||||
"approveSuccess": "Photo approved",
|
||||
"approveFailed": "Approval failed."
|
||||
"approveFailed": "Approval failed.",
|
||||
"queued": "Action saved. Syncs when you are back online.",
|
||||
"queueTitle": "Changes waiting to sync",
|
||||
"queueOnline": "{{count}} actions ready to sync.",
|
||||
"queueOffline": "{{count}} actions saved offline.",
|
||||
"queueSync": "Sync",
|
||||
"queueWaiting": "Offline",
|
||||
"syncFailed": "Sync failed. Please try again later."
|
||||
},
|
||||
"mobileProfile": {
|
||||
"title": "Profile",
|
||||
@@ -1996,6 +2003,39 @@
|
||||
"tenantBadge": "Tenant #{{id}}",
|
||||
"notificationsTitle": "Notifications",
|
||||
"notificationsLoading": "Loading settings ...",
|
||||
"pushTitle": "App Push",
|
||||
"pushUnsupported": "Push notifications are not supported on this device.",
|
||||
"pushDenied": "Notifications are blocked in your browser.",
|
||||
"pushActive": "Push active",
|
||||
"pushInactive": "Push disabled",
|
||||
"pushLoading": "Loading ...",
|
||||
"deviceTitle": "Device & permissions",
|
||||
"deviceDescription": "Keep the admin app fast, offline-ready, and allowed to send alerts.",
|
||||
"deviceLoading": "Checking device status ...",
|
||||
"deviceStorageAction": "Enable offline protection",
|
||||
"deviceStorageError": "Offline storage could not be enabled.",
|
||||
"deviceStatusValues": {
|
||||
"granted": "Allowed",
|
||||
"denied": "Blocked",
|
||||
"prompt": "Needs permission",
|
||||
"unsupported": "Not supported",
|
||||
"persisted": "Protected",
|
||||
"available": "Not protected"
|
||||
},
|
||||
"deviceStatus": {
|
||||
"notifications": {
|
||||
"label": "Notifications",
|
||||
"description": "Allow alerts and admin updates."
|
||||
},
|
||||
"camera": {
|
||||
"label": "Camera",
|
||||
"description": "Needed for QR scans and quick capture."
|
||||
},
|
||||
"storage": {
|
||||
"label": "Offline storage",
|
||||
"description": "Protect cached data from eviction."
|
||||
}
|
||||
},
|
||||
"pref": {}
|
||||
},
|
||||
"events": {
|
||||
|
||||
Reference in New Issue
Block a user