import { useCallback, useEffect, useState } from 'react'; import { PERMISSIONS_UPDATED_EVENT, readPermissionState } from '../auth/permission-store'; export function usePermission() { const [state, setState] = useState(readPermissionState); useEffect(() => { const refresh = () => setState(readPermissionState()); window.addEventListener(PERMISSIONS_UPDATED_EVENT, refresh); return () => { window.removeEventListener(PERMISSIONS_UPDATED_EVENT, refresh); }; }, []); const permissions = state.permissions; const permissionsReady = state.status === 'ready'; const hasPermission = useCallback( (code: string): boolean => permissionsReady && permissions.includes(code), [permissions, permissionsReady], ); const hasAnyPermission = useCallback( (...codes: string[]): boolean => permissionsReady && codes.some((code) => permissions.includes(code)), [permissions, permissionsReady], ); const hasAllPermissions = useCallback( (...codes: string[]): boolean => permissionsReady && codes.every((code) => permissions.includes(code)), [permissions, permissionsReady], ); return { permissions, permissionStatus: state.status, permissionsReady, hasPermission, hasAnyPermission, hasAllPermissions, }; }