budibase/packages/builder/src/stores/portal/admin.js

85 lines
1.9 KiB
JavaScript

import { writable, get } from "svelte/store"
import api from "builderStore/api"
import { auth } from "stores/portal"
export function createAdminStore() {
const DEFAULT_CONFIG = {
loaded: false,
multiTenancy: false,
sandbox: false,
onboardingProgress: 0,
checklist: {
apps: { checked: false },
smtp: { checked: false },
adminUser: { checked: false },
sso: { checked: false },
},
}
const admin = writable(DEFAULT_CONFIG)
async function init() {
try {
const tenantId = get(auth).tenantId
const response = await api.get(
`/api/global/configs/checklist?tenantId=${tenantId}`
)
const json = await response.json()
const onboardingSteps = Object.keys(json)
const stepsComplete = onboardingSteps.reduce(
(score, step) => (score + step.checked ? 1 : 0),
0
)
await getFlags()
admin.update(store => {
store.loaded = true
store.checklist = json
store.onboardingProgress =
(stepsComplete / onboardingSteps.length) * 100
return store
})
} catch (err) {
admin.update(store => {
store.checklist = null
return store
})
}
}
async function getFlags() {
let multiTenancyEnabled = false
let sandbox = false
try {
const response = await api.get(`/api/system/flags`)
const json = await response.json()
multiTenancyEnabled = json.multiTenancy
sandbox = json.sandbox
} catch (err) {
// just let it stay disabled
}
admin.update(store => {
store.multiTenancy = multiTenancyEnabled
store.sandbox = sandbox
return store
})
}
function unload() {
admin.update(store => {
store.loaded = false
return store
})
}
return {
subscribe: admin.subscribe,
init,
unload,
}
}
export const admin = createAdminStore()