Kyoo/front/src/providers/account-context.tsx
2025-06-15 13:22:33 +02:00

35 lines
1012 B
TypeScript

import { createContext, useContext } from "react";
import { ServerInfoP, type Account, type Token } from "~/models";
import { useFetch } from "~/query";
export const AccountContext = createContext<{
apiUrl: string;
authToken: Token | null;
selectedAccount: Account | null;
accounts: (Account & { select: () => void; remove: () => void })[];
}>({ apiUrl: "api", authToken: null, selectedAccount: null, accounts: [] });
export const useAccount = () => {
const { selectedAccount } = useContext(AccountContext);
return selectedAccount;
};
export const useAccounts = () => {
const { accounts } = useContext(AccountContext);
return accounts;
};
export const useHasPermission = (perms?: string[]) => {
const account = useAccount();
const { data } = useFetch({
path: ["info"],
parser: ServerInfoP,
});
if (!perms || !perms[0]) return true;
const available = account?.permissions ?? data?.guestPermissions;
if (!available) return false;
return perms.every((perm) => available.includes(perm));
};