import { Controller, useFieldArray, useFormContext } from "react-hook-form"; import { faInfoCircle, faPlus, faTrash, faWarning } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Button, FormControl, IconButton, Input, Select, SelectItem, Tooltip } from "@app/components/v2"; import { PermissionConditionOperators, ProjectPermissionSub } from "@app/context/ProjectPermissionContext/types"; import { getConditionOperatorHelperInfo, renderOperatorSelectItems } from "./PermissionConditionHelpers"; import { TFormSchema } from "./ProjectRoleModifySection.utils"; type Props = { position?: number; isDisabled?: boolean; type: | ProjectPermissionSub.DynamicSecrets | ProjectPermissionSub.SecretFolders | ProjectPermissionSub.SecretImports | ProjectPermissionSub.SecretRotation; }; export const GeneralPermissionConditions = ({ position = 0, isDisabled, type }: Props) => { const { control, watch, formState: { errors } } = useFormContext(); const items = useFieldArray({ control, name: `permissions.${type}.${position}.conditions` }); return (

Conditions

Conditions determine when a policy will be applied (always if no conditions are present).

All conditions must evaluate to true for the policy to take effect.

{items.fields.map((el, index) => { const condition = (watch(`permissions.${type}.${position}.conditions.${index}`) as { lhs: string; rhs: string; operator: string; }) || {}; return (
( )} />
( )} />
( )} />
items.remove(index)} >
); })}
{errors?.permissions?.[type]?.[position]?.conditions?.message && (
{errors?.permissions?.[type]?.[position]?.conditions?.message}
)}
{}
); };