budibase/packages/builder/src/stores/backend/roles.js

48 lines
1.1 KiB
JavaScript
Raw Normal View History

import { writable } from "svelte/store"
import { API } from "api"
2022-05-10 15:02:00 +02:00
import { RoleUtils } from "@budibase/frontend-core"
export function createRolesStore() {
2021-03-29 18:23:53 +02:00
const { subscribe, update, set } = writable([])
function setRoles(roles) {
set(
roles.sort((a, b) => {
const priorityA = RoleUtils.getRolePriority(a._id)
const priorityB = RoleUtils.getRolePriority(b._id)
return priorityA > priorityB ? -1 : 1
})
)
}
const actions = {
fetch: async () => {
const roles = await API.getRoles()
setRoles(roles)
},
fetchByAppId: async appId => {
const { roles } = await API.getRolesForApp(appId)
setRoles(roles)
},
2021-05-04 12:32:22 +02:00
delete: async role => {
await API.deleteRole({
roleId: role?._id,
roleRev: role?._rev,
})
2021-05-04 12:32:22 +02:00
update(state => state.filter(existing => existing._id !== role._id))
},
2021-05-04 12:32:22 +02:00
save: async role => {
const savedRole = await API.saveRole(role)
await actions.fetch()
return savedRole
},
}
return {
subscribe,
...actions,
}
}
export const roles = createRolesStore()