import { createContext, ReactNode, useContext } from "react"; import { useGetUserProjectPermissions } from "@app/hooks/api"; import { TProjectMembership } from "@app/hooks/api/users/types"; import { useWorkspace } from "../WorkspaceContext"; import { TProjectPermission } from "./types"; type Props = { children: ReactNode; }; const ProjectPermissionContext = createContext(null); export const ProjectPermissionProvider = ({ children }: Props): JSX.Element => { const { currentWorkspace, isLoading: isWsLoading } = useWorkspace(); const workspaceId = currentWorkspace?.id || ""; const { data: permission, isLoading } = useGetUserProjectPermissions({ workspaceId }); if ((isLoading && currentWorkspace) || isWsLoading) { return (
infisical loading indicator
); } if (!permission && currentWorkspace) { return (
Failed to load user permissions
); } return ( {children} ); }; export const useProjectPermission = () => { const ctx = useContext(ProjectPermissionContext); if (!ctx) { throw new Error("useProjectPermission to be used within "); } const hasProjectRole = (role: string) => ctx?.membership?.roles?.includes(role) || false; return { ...ctx, hasProjectRole }; };