From 464a3ccd53d6ae59ed2e50b48dbe2647c5e959b1 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Mon, 25 Nov 2024 15:55:44 +0400 Subject: [PATCH] Update AccessPolicyModal.tsx --- .../components/AccessPolicyModal.tsx | 129 +++++++++++------- 1 file changed, 81 insertions(+), 48 deletions(-) diff --git a/frontend/src/views/SecretApprovalPage/components/ApprovalPolicyList/components/AccessPolicyModal.tsx b/frontend/src/views/SecretApprovalPage/components/ApprovalPolicyList/components/AccessPolicyModal.tsx index 37ba6abf2..e96cd3e2d 100644 --- a/frontend/src/views/SecretApprovalPage/components/ApprovalPolicyList/components/AccessPolicyModal.tsx +++ b/frontend/src/views/SecretApprovalPage/components/ApprovalPolicyList/components/AccessPolicyModal.tsx @@ -22,7 +22,11 @@ import { } from "@app/components/v2"; import { useWorkspace } from "@app/context"; import { policyDetails } from "@app/helpers/policies"; -import { useCreateSecretApprovalPolicy, useListWorkspaceGroups, useUpdateSecretApprovalPolicy } from "@app/hooks/api"; +import { + useCreateSecretApprovalPolicy, + useListWorkspaceGroups, + useUpdateSecretApprovalPolicy +} from "@app/hooks/api"; import { useCreateAccessApprovalPolicy, useUpdateAccessApprovalPolicy @@ -46,7 +50,11 @@ const formSchema = z name: z.string().optional(), secretPath: z.string().optional(), approvals: z.number().min(1), - approvers: z.object({type: z.nativeEnum(ApproverType), id: z.string()}).array().min(1).default([]), + approvers: z + .object({ type: z.nativeEnum(ApproverType), id: z.string() }) + .array() + .min(1) + .default([]), policyType: z.nativeEnum(PolicyType), enforcementLevel: z.nativeEnum(EnforcementLevel) }) @@ -100,6 +108,8 @@ export const AccessPolicyForm = ({ const policyName = policyDetails[watch("policyType")]?.name || "Policy"; + const approversRequired = watch("approvals") || 1; + const handleCreatePolicy = async (data: TFormSchema) => { if (!projectId) return; @@ -169,12 +179,6 @@ export const AccessPolicyForm = ({ } }; - const formatEnforcementLevel = (level: EnforcementLevel) => { - if (level === EnforcementLevel.Hard) return "Hard"; - if (level === EnforcementLevel.Soft) return "Soft"; - return level; - }; - return ( @@ -257,14 +261,15 @@ export const AccessPolicyForm = ({ name="secretPath" render={({ field, fieldState: { error } }) => ( )} - /> + /> + {field.value === EnforcementLevel.Hard + ? `Hard enforcement requires at least ${approversRequired} approver(s) to approve the request.` + : `At least ${approversRequired} approver(s) must approve the request; however, the requester can bypass approval requirements in emergencies.`} + } > e.type=== ApproverType.User).length ? `${value.filter((e) => e.type=== ApproverType.User).length} selected` : "None"} + value={ + value?.filter((e) => e.type === ApproverType.User).length + ? `${value.filter((e) => e.type === ApproverType.User).length} selected` + : "None" + } className="text-left" /> @@ -347,15 +359,22 @@ export const AccessPolicyForm = ({ {members.map(({ user }) => { const { id: userId } = user; - const isChecked = value?.filter((el: {id: string, type: ApproverType}) => el.id === userId && el.type === ApproverType.User).length > 0; + const isChecked = + value?.filter( + (el: { id: string; type: ApproverType }) => + el.id === userId && el.type === ApproverType.User + ).length > 0; return ( { evt.preventDefault(); onChange( isChecked - ? value?.filter((el: {id: string, type: ApproverType}) => el.id !== userId && el.type !== ApproverType.User) - : [...(value || []), {id:userId, type: ApproverType.User}] + ? value?.filter( + (el: { id: string; type: ApproverType }) => + el.id !== userId && el.type !== ApproverType.User + ) + : [...(value || []), { id: userId, type: ApproverType.User }] ); }} key={`create-policy-members-${userId}`} @@ -384,7 +403,13 @@ export const AccessPolicyForm = ({ e.type=== ApproverType.Group).length ? `${value?.filter((e) => e.type=== ApproverType.Group).length} selected` : "None"} + value={ + value?.filter((e) => e.type === ApproverType.Group).length + ? `${ + value?.filter((e) => e.type === ApproverType.Group).length + } selected` + : "None" + } className="text-left" /> @@ -395,28 +420,36 @@ export const AccessPolicyForm = ({ Select groups that are allowed to approve requests - {groups && groups.map(({ group }) => { - const { id } = group; - const isChecked = value?.filter((el: {id: string, type: ApproverType}) => el.id === id && el.type === ApproverType.Group).length > 0; + {groups && + groups.map(({ group }) => { + const { id } = group; + const isChecked = + value?.filter( + (el: { id: string; type: ApproverType }) => + el.id === id && el.type === ApproverType.Group + ).length > 0; - return ( - { - evt.preventDefault(); - onChange( - isChecked - ? value?.filter((el: {id: string, type: ApproverType}) => el.id !== id && el.type !== ApproverType.Group) - : [...(value || []), {id, type: ApproverType.Group}] - ); - }} - key={`create-policy-members-${id}`} - iconPos="right" - icon={isChecked && } - > - {group.name} - - ); - })} + return ( + { + evt.preventDefault(); + onChange( + isChecked + ? value?.filter( + (el: { id: string; type: ApproverType }) => + el.id !== id && el.type !== ApproverType.Group + ) + : [...(value || []), { id, type: ApproverType.Group }] + ); + }} + key={`create-policy-members-${id}`} + iconPos="right" + icon={isChecked && } + > + {group.name} + + ); + })}