From 8e2523d5553481dc64b73a5dc04d6e987eb8392b Mon Sep 17 00:00:00 2001 From: "Leon.Schmidt" Date: Thu, 20 Aug 2026 20:52:36 +0200 Subject: [PATCH] ENH - rebuild admin panel as standalone editor --- frontend/src/App.vue | 33 +- frontend/src/assets/img/app-icons/admin.svg | 22 - frontend/src/assets/main.css | 13 - .../components/AdminPanel.contract.test.ts | 133 + frontend/src/components/AdminPanel.vue | 2167 +++++++++++++++++ frontend/src/config/apps.ts | 16 - frontend/src/stores/admin.ts | 14 +- frontend/src/stores/app-store.test.ts | 10 +- frontend/src/stores/app-store.ts | 20 +- frontend/src/stores/phone.ts | 278 ++- frontend/src/types/admin.ts | 1 + frontend/src/types/apps.ts | 1 - frontend/src/types/device.ts | 3 - frontend/src/utils/appStorePreviewImages.ts | 10 +- frontend/src/utils/appStorePreviews.ts | 2 +- frontend/src/utils/preferences.ts | 1 - frontend/src/views/PhoneAppWindow.vue | 2 +- .../src/views/apps/AdminApp.contract.test.ts | 117 - frontend/src/views/apps/AdminApp.vue | 1352 ---------- frontend/src/views/apps/SettingsApp.vue | 2 +- frontend/testserver/index.cjs | 31 +- sky_phone/config/locales/de.lua | 27 +- sky_phone/config/locales/en.lua | 27 +- sky_phone/source/client/focus.lua | 20 + sky_phone/source/client/main.lua | 70 +- sky_phone/source/client/nui_server_bridge.lua | 2 +- sky_phone/source/server/admin.lua | 138 +- sky_phone/source/server/phone.lua | 35 - 28 files changed, 2786 insertions(+), 1761 deletions(-) delete mode 100644 frontend/src/assets/img/app-icons/admin.svg create mode 100644 frontend/src/components/AdminPanel.contract.test.ts create mode 100644 frontend/src/components/AdminPanel.vue delete mode 100644 frontend/src/views/apps/AdminApp.contract.test.ts delete mode 100644 frontend/src/views/apps/AdminApp.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index fb24a2e..f82ba7c 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -11,6 +11,7 @@ import { import { useRoute, useRouter } from 'vue-router' import { SkyProvider } from '@/ui' +import AdminPanel from '@/components/AdminPanel.vue' import PhoneHomeIndicator from '@/components/PhoneHomeIndicator.vue' import PhoneControlCenter from '@/components/PhoneControlCenter.vue' import PhoneDynamicIsland from '@/components/PhoneDynamicIsland.vue' @@ -114,8 +115,13 @@ type AppMessage = { | CustomAppCatalogEventData | CustomAppEventData | NavigationEventData + | AdminPanelOpenPayload } +type AdminPanelOpenPayload = Required< + Pick +> + type CustomAppCatalogEventData = { apps?: unknown } @@ -355,6 +361,9 @@ const appTransitionName = computed(() => route.query.transition === 'app-switch' ? 'app-switch' : 'app-window', ) const isLocked = ref(false) +const adminPanelOpen = ref( + isDevelopment && developmentParameters.has('adminPanel'), +) const springboardEditing = ref(false) const isUnlocking = ref(false) const passcodeBusy = ref(false) @@ -518,10 +527,7 @@ function hydratePhone(payload: PhoneOpenPayload): void { clock.hydrate(payload.device?.data.alarms?.payload) games.hydrate(payload.device?.data.games?.payload) media.hydrate(payload.device?.data.media?.payload) - appStore.hydrate( - payload.device?.data.apps?.payload, - phone.permissions.adminPanel, - ) + appStore.hydrate(payload.device?.data.apps?.payload) widgets.hydrate(payload.device?.data.widgets?.payload) } @@ -723,7 +729,15 @@ function openDevelopmentPayphonePreview(): void { function onMessage(event: MessageEvent): void { if (!isTrustedRootMessageSource(event.source, window)) return - if (event.data?.type === 'custom-apps:catalog') { + if (event.data?.type === 'admin:open') { + const data = event.data.data as AdminPanelOpenPayload | undefined + if (data?.lang && data.locales && data.fallbackLocales) { + phone.setLocale(data.lang, data.locales, data.fallbackLocales) + } + adminPanelOpen.value = true + } else if (event.data?.type === 'admin:close') { + adminPanelOpen.value = false + } else if (event.data?.type === 'custom-apps:catalog') { appCatalog.replaceCatalog(event.data.data) const catalogPayload = event.data.data as | { apps?: unknown; debug?: unknown } @@ -1736,6 +1750,15 @@ onBeforeUnmount(() => {