From 088c7123e6592b8595199002d3de9a1c5cc3647a Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 10 May 2022 13:32:34 +0100 Subject: [PATCH] Centrally sort screens to allow consistency across design UI --- packages/builder/src/builderStore/index.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/builder/src/builderStore/index.js b/packages/builder/src/builderStore/index.js index 3a9b84b2c5..3eb5a89a85 100644 --- a/packages/builder/src/builderStore/index.js +++ b/packages/builder/src/builderStore/index.js @@ -4,6 +4,7 @@ import { getThemeStore } from "./store/theme" import { derived, writable } from "svelte/store" import { LAYOUT_NAMES } from "../constants" import { findComponent, findComponentPath } from "./componentUtils" +import { RoleUtils } from "@budibase/frontend-core" export const store = getFrontendStore() export const automationStore = getAutomationStore() @@ -13,6 +14,25 @@ export const selectedScreen = derived(store, $store => { return $store.screens.find(screen => screen._id === $store.selectedScreenId) }) +export const sortedScreens = derived(store, $store => { + return $store.screens.slice().sort((a, b) => { + // Sort by role first + const roleA = RoleUtils.getRolePriority(a.routing.roleId) + const roleB = RoleUtils.getRolePriority(b.routing.roleId) + if (roleA !== roleB) { + return roleA > roleB ? -1 : 1 + } + // Then put home screens first + const homeA = !!a.routing.homeScreen + const homeB = !!b.routing.homeScreen + if (homeA !== homeB) { + return homeA ? -1 : 1 + } + // Finally sort alphabetically by route + return a.routing.route < b.routing.route ? -1 : 1 + }) +}) + export const selectedComponent = derived( [store, selectedScreen], ([$store, $selectedScreen]) => {