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 } from "./PermissionConditionHelpers"; import { TFormSchema } from "./ProjectRoleModifySection.utils"; type Props = { position?: number; isDisabled?: boolean; }; export const SshHostPermissionConditions = ({ position = 0, isDisabled }: Props) => { const { control, watch, formState: { errors } } = useFormContext(); const permissionSubject = ProjectPermissionSub.SshHosts; const items = useFieldArray({ control, name: `permissions.${permissionSubject}.${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.${permissionSubject}.${position}.conditions.${index}`) as { lhs: string; rhs: string; operator: string; }) || {}; return (
( )} />
( )} />
( field.onChange(e.target.value.trim())} /> )} />
items.remove(index)} >
); })}
{errors?.permissions?.[permissionSubject]?.[position]?.conditions?.message && (
{errors?.permissions?.[permissionSubject]?.[position]?.conditions?.message}
)}
); };