import { useEffect, useState } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { ChevronDown, ChevronUp, Trash } from 'lucide-react'; import { validateCheckboxField } from '@documenso/lib/advanced-fields-validation/validate-checkbox'; import { type TCheckboxFieldMeta as CheckboxFieldMeta } from '@documenso/lib/types/field-meta'; import { Button } from '@documenso/ui/primitives/button'; import { Checkbox } from '@documenso/ui/primitives/checkbox'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@documenso/ui/primitives/select'; import { Switch } from '@documenso/ui/primitives/switch'; import { checkboxValidationLength, checkboxValidationRules } from './constants'; type CheckboxFieldAdvancedSettingsProps = { fieldState: CheckboxFieldMeta; handleFieldChange: ( key: keyof CheckboxFieldMeta, value: string | { checked: boolean; value: string }[] | boolean, ) => void; handleErrors: (errors: string[]) => void; }; export const CheckboxFieldAdvancedSettings = ({ fieldState, handleFieldChange, handleErrors, }: CheckboxFieldAdvancedSettingsProps) => { const { _ } = useLingui(); const [showValidation, setShowValidation] = useState(false); const [values, setValues] = useState(fieldState.values ?? [{ id: 1, checked: false, value: '' }]); const [readOnly, setReadOnly] = useState(fieldState.readOnly ?? false); const [required, setRequired] = useState(fieldState.required ?? false); const [validationLength, setValidationLength] = useState(fieldState.validationLength ?? 0); const [validationRule, setValidationRule] = useState(fieldState.validationRule ?? ''); const handleToggleChange = (field: keyof CheckboxFieldMeta, value: string | boolean) => { const readOnly = field === 'readOnly' ? Boolean(value) : Boolean(fieldState.readOnly); const required = field === 'required' ? Boolean(value) : Boolean(fieldState.required); const validationRule = field === 'validationRule' ? String(value) : String(fieldState.validationRule); const validationLength = field === 'validationLength' ? Number(value) : Number(fieldState.validationLength); setReadOnly(readOnly); setRequired(required); setValidationRule(validationRule); setValidationLength(validationLength); const errors = validateCheckboxField( values.map((item) => item.value), { readOnly, required, validationRule, validationLength, type: 'checkbox', }, ); handleErrors(errors); handleFieldChange(field, value); }; const addValue = () => { const newId = values.length > 0 ? Math.max(...values.map((val) => val.id)) + 1 : 1; setValues([...values, { id: newId, checked: false, value: '' }]); }; useEffect(() => { const errors = validateCheckboxField( values.map((item) => item.value), { readOnly, required, validationRule, validationLength, type: 'checkbox', }, ); handleErrors(errors); handleFieldChange('values', values); }, [values]); const removeValue = (index: number) => { if (values.length === 1) return; const newValues = [...values]; newValues.splice(index, 1); setValues(newValues); handleFieldChange('values', newValues); }; const handleCheckboxValue = ( index: number, property: 'value' | 'checked', newValue: string | boolean, ) => { const newValues = [...values]; if (property === 'checked') { newValues[index].checked = Boolean(newValue); } else if (property === 'value') { newValues[index].value = String(newValue); } setValues(newValues); handleFieldChange('values', newValues); }; useEffect(() => { setValues(fieldState.values ?? [{ id: 1, checked: false, value: '' }]); }, [fieldState.values]); return (