mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-05 16:32:06 +00:00
37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
|
|
import { defaultsForRole } from "@/app/(protected)/team-members/_components/team-member-permissions";
|
||
|
|
import type { TeamMemberRole } from "@/domain/team-members/types/team-member";
|
||
|
|
import { useAuthContext } from "@/providers/auth-context";
|
||
|
|
|
||
|
|
const TEAM_ROLES: readonly TeamMemberRole[] = ["Admin", "Scheduler", "Dispatcher"];
|
||
|
|
|
||
|
|
export interface CompletionTemplatePermissions {
|
||
|
|
canCreate: boolean;
|
||
|
|
canEdit: boolean;
|
||
|
|
canDelete: boolean;
|
||
|
|
}
|
||
|
|
|
||
|
|
function teamRoles(userRoles: string | null | undefined): TeamMemberRole[] {
|
||
|
|
const names = (userRoles ?? "").split(",").map((role) => role.trim().toLowerCase());
|
||
|
|
return TEAM_ROLES.filter((role) => names.includes(role.toLowerCase()));
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* The signed-in user's session carries roles, not per-user permission overrides, so each key
|
||
|
|
* resolves to the role default the Team Members screen and the server policy start from.
|
||
|
|
*/
|
||
|
|
export function completionTemplatePermissions(
|
||
|
|
userRoles: string | null | undefined,
|
||
|
|
): CompletionTemplatePermissions {
|
||
|
|
const granted = new Set(teamRoles(userRoles).flatMap((role) => [...defaultsForRole(role)]));
|
||
|
|
return {
|
||
|
|
canCreate: granted.has("createCompletionDocTemplates"),
|
||
|
|
canEdit: granted.has("editCompletionDocTemplates"),
|
||
|
|
canDelete: granted.has("deleteCompletionDocTemplates"),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useCompletionTemplatePermissions(): CompletionTemplatePermissions {
|
||
|
|
const { user } = useAuthContext();
|
||
|
|
return completionTemplatePermissions(user?.userRoles);
|
||
|
|
}
|