2021-03-22 10:55:23 +01:00
|
|
|
import { writable } from "svelte/store"
|
2022-01-24 13:37:22 +01:00
|
|
|
import { API } from "api"
|
2022-05-10 15:02:00 +02:00
|
|
|
import { RoleUtils } from "@budibase/frontend-core"
|
2021-03-22 10:55:23 +01:00
|
|
|
|
2021-03-26 09:50:37 +01:00
|
|
|
export function createRolesStore() {
|
2021-03-29 18:23:53 +02:00
|
|
|
const { subscribe, update, set } = writable([])
|
2021-03-22 10:55:23 +01:00
|
|
|
|
2022-09-26 18:54:00 +02:00
|
|
|
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
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2022-01-24 13:37:22 +01:00
|
|
|
const actions = {
|
2021-03-22 10:55:23 +01:00
|
|
|
fetch: async () => {
|
2022-01-24 13:37:22 +01:00
|
|
|
const roles = await API.getRoles()
|
2022-09-26 18:54:00 +02:00
|
|
|
setRoles(roles)
|
|
|
|
},
|
|
|
|
fetchByAppId: async appId => {
|
|
|
|
const { roles } = await API.getRolesForApp(appId)
|
|
|
|
setRoles(roles)
|
2021-03-22 10:55:23 +01:00
|
|
|
},
|
2021-05-04 12:32:22 +02:00
|
|
|
delete: async role => {
|
2022-01-24 13:37:22 +01:00
|
|
|
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-03-22 10:55:23 +01:00
|
|
|
},
|
2021-05-04 12:32:22 +02:00
|
|
|
save: async role => {
|
2022-01-24 13:37:22 +01:00
|
|
|
const savedRole = await API.saveRole(role)
|
|
|
|
await actions.fetch()
|
|
|
|
return savedRole
|
2021-03-22 10:55:23 +01:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2022-01-24 13:37:22 +01:00
|
|
|
return {
|
|
|
|
subscribe,
|
|
|
|
...actions,
|
|
|
|
}
|
2021-03-22 10:55:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export const roles = createRolesStore()
|