import type { ReactNode } from 'react'; import { memo } from 'react'; import isEqual from 'react-fast-compare'; import { usePermissions } from '@/plugins/usePermissions'; interface Props { action: string | string[]; matchAny?: boolean; renderOnError?: ReactNode | null; children: ReactNode; } function Can({ action, matchAny = false, renderOnError, children }: Props) { const can = usePermissions(action); return ( <> {(matchAny && can.filter(p => p).length > 0) || (!matchAny && can.every(p => p)) ? children : renderOnError} ); } const MemoizedCan = memo(Can, isEqual); export default MemoizedCan;