From 944e7a0343d2e3c2b287c9f48c4d4d9d3a5c398d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Wed, 27 Apr 2022 11:36:47 +0100 Subject: [PATCH] Add ability to set home screens and fix issue with sorting screens --- .../src/builderStore/store/frontend.js | 25 +++++++++++++++++++ .../_components/ScreenNavigationPanel.svelte | 4 +-- .../_components/ScreenSettingsPanel.svelte | 6 +++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/builder/src/builderStore/store/frontend.js b/packages/builder/src/builderStore/store/frontend.js index 3c76d391db..2b47a43c0b 100644 --- a/packages/builder/src/builderStore/store/frontend.js +++ b/packages/builder/src/builderStore/store/frontend.js @@ -225,6 +225,31 @@ export const getFrontendStore = () => { // Refresh routes await store.actions.routing.fetch() }, + updateHomeScreen: async (screen, makeHomeScreen = true) => { + let promises = [] + + // Find any existing home screen for this role so we can remove it, + // if we are setting this to be the new home screen + if (makeHomeScreen) { + const roleId = screen.routing.roleId + let existingHomeScreen = get(store).screens.find(s => { + return ( + s.routing.roleId === roleId && + s.routing.homeScreen && + s._id !== screen._id + ) + }) + if (existingHomeScreen) { + existingHomeScreen.routing.homeScreen = false + promises.push(store.actions.screens.save(existingHomeScreen)) + } + } + + // Update the passed in screen + screen.routing.homeScreen = makeHomeScreen + promises.push(store.actions.screens.save(screen)) + return await Promise.all(promises) + }, }, preview: { saveSelected: async () => { diff --git a/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenNavigationPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenNavigationPanel.svelte index cf97b65712..e172012bdd 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenNavigationPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenNavigationPanel.svelte @@ -34,8 +34,8 @@ return roleA > roleB ? -1 : 1 } // Then put home screens first - const homeA = a.routing.homeScreen - const homeB = b.routing.homeScreen + const homeA = !!a.routing.homeScreen + const homeB = !!b.routing.homeScreen if (homeA !== homeB) { return homeA ? -1 : 1 } diff --git a/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenSettingsPanel.svelte b/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenSettingsPanel.svelte index 6b1d05bc2e..f6d47e888d 100644 --- a/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenSettingsPanel.svelte +++ b/packages/builder/src/pages/builder/app/[application]/design/screens/_components/ScreenSettingsPanel.svelte @@ -61,6 +61,12 @@ } } + // Home screen changes need to be handled manually + if (key === "routing.homeScreen") { + store.actions.screens.updateHomeScreen(get(selectedScreen), value) + return + } + // Update screen object in store store.update(state => { setWith(get(selectedScreen), key.split("."), value, Object)