RocketChat/Rocket.Chat

View on GitHub
packages/ui-contexts/src/hooks/usePermission.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { ObjectId } from 'mongodb';
import { useContext, useMemo } from 'react';
import { useSyncExternalStore } from 'use-sync-external-store/shim';

import { AuthorizationContext } from '../AuthorizationContext';

export const usePermission = (permission: string | ObjectId, scope?: string | ObjectId): boolean => {
    const { queryPermission } = useContext(AuthorizationContext);
    const [subscribe, getSnapshot] = useMemo(() => queryPermission(permission, scope), [queryPermission, permission, scope]);
    return useSyncExternalStore(subscribe, getSnapshot);
};