/* * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ import { create } from 'zustand'; type Edition = 'enterprise' | 'community' | 'oss'; interface AccountState { permissions: string[]; edition: Edition; locale: string; setAccountInfo: (permissions: string[], edition: Edition, locale: string) => void; hasPermission: (perm: string) => boolean; hasObjectPermission: (prefix: string, action: 'Get' | 'Query' | 'Create' | 'Update' | 'Destroy') => boolean; } export const useAccountStore = create()((set, get) => ({ permissions: [], edition: 'community', locale: 'en', setAccountInfo: (permissions, edition, locale) => { set({ permissions, edition, locale }); }, hasPermission: (perm) => { return get().permissions.includes(perm); }, hasObjectPermission: (prefix, action) => { return get().permissions.includes(`${prefix}${action}`); }, }));