import { FormProvider, useForm } from "react-hook-form"; import { faPlus, faSave } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { Button, Modal, ModalContent, ModalTrigger } from "@app/components/v2"; import { ProjectPermissionSub, useWorkspace } from "@app/context"; import { usePopUp } from "@app/hooks"; import { useGetProjectRoleBySlug, useUpdateProjectRole } from "@app/hooks/api"; import { GeneralPermissionOptions } from "./components/GeneralPermissionOptions"; import { NewPermissionRule } from "./components/NewPermissionRule"; import { SecretPermissionConditions } from "./components/SecretPermissionConditions"; import { PermissionEmptyState } from "./PermissionEmptyState"; import { formRolePermission2API, formSchema, PROJECT_PERMISSION_OBJECT, rolePermission2Form, TFormSchema } from "./ProjectRoleModifySection.utils"; type Props = { roleSlug: string; isDisabled?: boolean; }; export const RolePermissionsSection = ({ roleSlug, isDisabled }: Props) => { const { currentWorkspace } = useWorkspace(); const { popUp, handlePopUpToggle } = usePopUp(["createPolicy"] as const); const projectSlug = currentWorkspace?.slug || ""; const { data: role, isLoading } = useGetProjectRoleBySlug( currentWorkspace?.slug ?? "", roleSlug as string ); const form = useForm({ values: role ? { ...role, permissions: rolePermission2Form(role.permissions) } : undefined, resolver: zodResolver(formSchema) }); const { handleSubmit, formState: { isDirty, isSubmitting }, reset } = form; const { mutateAsync: updateRole } = useUpdateProjectRole(); const onSubmit = async (el: TFormSchema) => { try { if (!projectSlug || !role?.id) return; await updateRole({ id: role?.id as string, projectSlug, ...el, permissions: formRolePermission2API(el.permissions) }); createNotification({ type: "success", text: "Successfully updated role" }); } catch (err) { console.log(err); createNotification({ type: "error", text: "Failed to update role" }); } }; const isCustomRole = !["admin", "member", "viewer", "no-access"].includes(role?.slug ?? ""); return (

Policies

{isCustomRole && ( <> {isDirty && ( )}
handlePopUpToggle("createPolicy", isOpen)} > handlePopUpToggle("createPolicy")} />
)}
{!isLoading && } {(Object.keys(PROJECT_PERMISSION_OBJECT) as ProjectPermissionSub[]).map((subject) => ( {subject === ProjectPermissionSub.Secrets ? ( ) : undefined} ))}
); };