From eb05f830fe9289c8ae4985860d186d1a6523cb03 Mon Sep 17 00:00:00 2001 From: LandaMm Date: Sun, 29 Jun 2025 23:20:50 +0200 Subject: [PATCH] feat: roles & group state --- web/src/store/admin/rolesGroups.ts | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 web/src/store/admin/rolesGroups.ts diff --git a/web/src/store/admin/rolesGroups.ts b/web/src/store/admin/rolesGroups.ts new file mode 100644 index 0000000..760aa8f --- /dev/null +++ b/web/src/store/admin/rolesGroups.ts @@ -0,0 +1,36 @@ +import { getRolesApi } from "@/api/admin/roles"; +import type { AppPermission, AppRole } from "@/types"; +import { create } from "zustand"; + +export type RolesMap = Record< + string, + (AppRole & { permissions: AppPermission[] })[] +>; + +export interface IRolesGroups { + roles: RolesMap; + + fetching: boolean; + + fetch: () => Promise; +} + +export const useRoles = create((set) => ({ + roles: {}, + fetching: false, + + fetch: async () => { + set({ fetching: true }); + + try { + const response = await getRolesApi(); + set({ + roles: Object.fromEntries(response.map((r) => [r.scope, r.roles])), + }); + } catch (err) { + console.log("ERR: Failed to fetch admin roles:", err); + } finally { + set({ fetching: false }); + } + }, +}));