36 lines
868 B
TypeScript
36 lines
868 B
TypeScript
'use client';
|
|
|
|
import { ReactNode } from 'react';
|
|
import { useCapability } from '@/hooks/useCapability';
|
|
import { useInject } from '@/lib/di/hooks/useInject';
|
|
import { POLICY_SERVICE_TOKEN } from '@/lib/di/tokens';
|
|
|
|
type CapabilityGateProps = {
|
|
capabilityKey: string;
|
|
children: ReactNode;
|
|
fallback?: ReactNode;
|
|
comingSoon?: ReactNode;
|
|
};
|
|
|
|
export function CapabilityGate({
|
|
capabilityKey,
|
|
children,
|
|
fallback = null,
|
|
comingSoon = null,
|
|
}: CapabilityGateProps) {
|
|
const policyService = useInject(POLICY_SERVICE_TOKEN);
|
|
const { isLoading, isError, data: snapshot } = useCapability(capabilityKey);
|
|
|
|
// Use PolicyService to centralize the evaluation logic
|
|
const content = policyService.getCapabilityContent(
|
|
snapshot || null,
|
|
capabilityKey,
|
|
isLoading,
|
|
isError,
|
|
children,
|
|
fallback,
|
|
comingSoon
|
|
);
|
|
|
|
return <>{content}</>;
|
|
} |