diff --git a/packages/builder/src/components/upgrade/UpgradeModal.svelte b/packages/builder/src/components/upgrade/UpgradeModal.svelte new file mode 100644 index 0000000000..f73dcf335f --- /dev/null +++ b/packages/builder/src/components/upgrade/UpgradeModal.svelte @@ -0,0 +1,32 @@ + + +
+ +
+ + + Upgrade to Budibase self-hosting for free, and get SSO, unlimited apps, + and more - and it only takes a few minutes! + + diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte index 7b0d09844f..a7626370e0 100644 --- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte @@ -7,14 +7,14 @@ import VersionModal from "components/deploy/VersionModal.svelte" import NPSFeedbackForm from "components/feedback/NPSFeedbackForm.svelte" import { get } from "builderStore/api" - import { auth } from "stores/portal" + import { auth, admin } from "stores/portal" import { isActive, goto, layout } from "@roxi/routify" import Logo from "assets/bb-emblem.svg" import { capitalise } from "helpers" + import UpgradeModal from "../../../../components/upgrade/UpgradeModal.svelte" // Get Package and set store export let application - let promise = getPackage() $: selected = capitalise( $layout.children.find(layout => $isActive(layout.path))?.title ?? "data" @@ -92,6 +92,9 @@
+ {#if $admin.sandbox} + + {/if} diff --git a/packages/builder/src/stores/portal/admin.js b/packages/builder/src/stores/portal/admin.js index 0699daf8dc..25688ac70c 100644 --- a/packages/builder/src/stores/portal/admin.js +++ b/packages/builder/src/stores/portal/admin.js @@ -3,9 +3,15 @@ import api from "builderStore/api" import { auth } from "stores/portal" export function createAdminStore() { - const admin = writable({ + const DEFAULT_CONFIG = { loaded: false, - }) + multiTenancy: false, + sandbox: false, + onboardingProgress: 0, + checklist: { apps: 0, smtp: false, adminUser: false, sso: false }, + } + + const admin = writable(DEFAULT_CONFIG) async function init() { try { @@ -22,7 +28,7 @@ export function createAdminStore() { 0 ) - await multiTenancyEnabled() + await getFlags() admin.update(store => { store.loaded = true store.checklist = json @@ -38,20 +44,22 @@ export function createAdminStore() { } } - async function multiTenancyEnabled() { - let enabled = false + async function getFlags() { + let multiTenancyEnabled = false + let sandbox = false try { const response = await api.get(`/api/system/flags`) const json = await response.json() - enabled = json.multiTenancy + multiTenancyEnabled = json.multiTenancy + sandbox = json.sandbox } catch (err) { // just let it stay disabled } admin.update(store => { - store.multiTenancy = enabled + store.multiTenancy = multiTenancyEnabled + store.sandbox = sandbox return store }) - return enabled } function unload() { diff --git a/packages/worker/src/api/controllers/system/flags.js b/packages/worker/src/api/controllers/system/flags.js index fdfc49afad..b439c9ee3a 100644 --- a/packages/worker/src/api/controllers/system/flags.js +++ b/packages/worker/src/api/controllers/system/flags.js @@ -3,5 +3,6 @@ const env = require("../../../environment") exports.fetch = async ctx => { ctx.body = { multiTenancy: !!env.MULTI_TENANCY, + sandbox: !!env.SANDBOX, } } diff --git a/packages/worker/src/environment.js b/packages/worker/src/environment.js index c42bc087e8..07549331ea 100644 --- a/packages/worker/src/environment.js +++ b/packages/worker/src/environment.js @@ -32,6 +32,7 @@ module.exports = { REDIS_PASSWORD: process.env.REDIS_PASSWORD, INTERNAL_API_KEY: process.env.INTERNAL_API_KEY, MULTI_TENANCY: process.env.MULTI_TENANCY, + SANDBOX: process.env.SANDBOX, _set(key, value) { process.env[key] = value module.exports[key] = value