diff --git a/packages/builder/src/pages/builder/portal/apps/[appId]/index.svelte b/packages/builder/src/pages/builder/portal/apps/[appId]/index.svelte
index a08189a400..d7e0e35289 100644
--- a/packages/builder/src/pages/builder/portal/apps/[appId]/index.svelte
+++ b/packages/builder/src/pages/builder/portal/apps/[appId]/index.svelte
@@ -20,7 +20,7 @@
import { sdk } from "@budibase/shared-core"
import { API } from "api"
import ErrorSVG from "./ErrorSVG.svelte"
- import { ClientAppSkeleton } from "@budibase/frontend-core"
+ import { getBaseTheme, ClientAppSkeleton } from "@budibase/frontend-core"
$: app = $enrichedApps.find(app => app.appId === $params.appId)
$: iframeUrl = getIframeURL(app)
@@ -137,7 +137,9 @@
class:hide={!loading || !app?.features?.skeletonLoader}
class="loading"
>
-
+
{
})
const syncAppTheme = app => {
- store.update(state => ({
- ...state,
- theme: app.theme || "spectrum--light",
- customTheme: app.customTheme,
- }))
+ store.update(state => {
+ const theme = app.theme || "spectrum--light"
+ return {
+ ...state,
+ theme,
+ baseTheme: getBaseTheme(theme),
+ customTheme: app.customTheme,
+ }
+ })
}
const save = async (theme, appId) => {
diff --git a/packages/client/src/stores/theme.js b/packages/client/src/stores/theme.js
index 8877556f0c..50dad12fa4 100644
--- a/packages/client/src/stores/theme.js
+++ b/packages/client/src/stores/theme.js
@@ -1,7 +1,7 @@
import { derived } from "svelte/store"
import { appStore } from "./app"
import { builderStore } from "./builder"
-import { Constants } from "@budibase/frontend-core"
+import { getBaseTheme } from "@budibase/frontend-core"
// This is the good old acorn bug where having the word "g l o b a l" makes it
// think that this is not ES6 compatible and starts throwing errors when using
@@ -29,13 +29,6 @@ const createThemeStore = () => {
// Ensure theme is set
theme = theme || defaultTheme
- // Get base theme
- let base =
- Constants.Themes.find(x => `spectrum--${x.class}` === theme)?.base || ""
- if (base) {
- base = `spectrum--${base}`
- }
-
// Delete and nullish keys from the custom theme
if (customTheme) {
Object.entries(customTheme).forEach(([key, value]) => {
@@ -59,7 +52,7 @@ const createThemeStore = () => {
return {
theme,
- baseTheme: base,
+ baseTheme: getBaseTheme(theme),
customTheme,
customThemeCss,
}
diff --git a/packages/frontend-core/src/utils/index.js b/packages/frontend-core/src/utils/index.js
index 98998b7f0e..6b79e1d040 100644
--- a/packages/frontend-core/src/utils/index.js
+++ b/packages/frontend-core/src/utils/index.js
@@ -7,3 +7,4 @@ export * as RowUtils from "./rows"
export { memo, derivedMemo } from "./memo"
export { createWebsocket } from "./websocket"
export * from "./download"
+export * from "./theme"
diff --git a/packages/frontend-core/src/utils/theme.js b/packages/frontend-core/src/utils/theme.js
new file mode 100644
index 0000000000..165f7c9782
--- /dev/null
+++ b/packages/frontend-core/src/utils/theme.js
@@ -0,0 +1,12 @@
+import { Themes } from "../constants.js"
+
+export const getBaseTheme = theme => {
+ if (!theme) {
+ return ""
+ }
+ let base = Themes.find(x => `spectrum--${x.class}` === theme)?.base || ""
+ if (base) {
+ base = `spectrum--${base}`
+ }
+ return base
+}