import clsx from 'clsx'; import { FormikErrors } from 'formik'; import { FormSection } from '@@/form-components/FormSection'; import { InputList } from '@@/form-components/InputList'; import { ItemProps } from '@@/form-components/InputList/InputList'; import { isErrorType } from '@@/form-components/formikUtils'; import { FormError } from '@@/form-components/FormError'; import { InputGroup } from '@@/form-components/InputGroup'; import { Badge } from '@@/Badge'; import { NodeLabel } from './types'; import { createNewLabel } from './nodeFormUtils'; interface Props { labels: NodeLabel[]; errors: FormikErrors; onChangeLabels: (labels: NodeLabel[]) => void; hasNodeWriteAccess: boolean; } export function NodeLabels({ labels, onChangeLabels, errors, hasNodeWriteAccess, }: Props) { return ( value={labels} onChange={onChangeLabels} data-cy="node-labels-input" item={NodeLabelItem} addLabel="Add label" canUndoDelete itemBuilder={createNewLabel} errors={errors} readOnly={!hasNodeWriteAccess} /> ); } function NodeLabelItem({ onChange, item, error, disabled, readOnly, index, }: ItemProps) { const formikError = isErrorType(error) ? error : undefined; return (
Name handleChange('key', e.target.value)} disabled={disabled || item.isSystem} readOnly={readOnly} type="text" data-cy={`node-label-key-input_${index}`} /> {!!formikError?.key && {formikError.key}}
Value handleChange('value', e.target.value)} disabled={disabled || item.isSystem} readOnly={readOnly} type="text" data-cy={`node-label-value-input_${index}`} /> {!!formikError?.value && {formikError.value}}
{item.isSystem && (
System
)}
); function handleChange(key: keyof NodeLabel, value: string | number) { onChange({ ...item, [key]: value, isChanged: true }); } }