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 { ConditionalProjectPermissionSubject, PermissionConditionOperators } from "@app/context/ProjectPermissionContext/types"; import { getConditionOperatorHelperInfo, renderOperatorSelectItems } from "./PermissionConditionHelpers"; import { TFormSchema } from "./ProjectRoleModifySection.utils"; export const ConditionsFields = ({ isDisabled, subject, position, selectOptions }: { isDisabled: boolean | undefined; subject: ConditionalProjectPermissionSubject; position: number; selectOptions: [{ value: string; label: string }, ...{ value: string; label: string }[]]; }) => { const { control, watch, setValue, formState: { errors } } = useFormContext(); const items = useFieldArray({ control, name: `permissions.${subject}.${position}.conditions` as const }); const conditionErrorMessage = (errors?.permissions as any)?.[subject]?.[position]?.conditions?.message || (errors?.permissions as any)?.[subject]?.[position]?.conditions?.root?.message; 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.

} >
{Boolean(items.fields.length) && items.fields.map((el, index) => { const condition = (watch(`permissions.${subject}.${position}.conditions.${index}` as const) as { lhs: string; rhs: string; operator: string; }) || {}; return (
( )} />
( )} />
( )} />
items.remove(index)} >
); })}
{conditionErrorMessage && (
{conditionErrorMessage}
)}
); };