'use client'; import { useEffect, useState } from 'react'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { ChevronDown, ChevronUp, Trash } from 'lucide-react'; import { validateDropdownField } from '@documenso/lib/advanced-fields-validation/validate-dropdown'; import { type TDropdownFieldMeta as DropdownFieldMeta } from '@documenso/lib/types/field-meta'; import { Button } from '@documenso/ui/primitives/button'; 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'; type DropdownFieldAdvancedSettingsProps = { fieldState: DropdownFieldMeta; handleFieldChange: ( key: keyof DropdownFieldMeta, value: string | { value: string }[] | boolean, ) => void; handleErrors: (errors: string[]) => void; }; export const DropdownFieldAdvancedSettings = ({ fieldState, handleFieldChange, handleErrors, }: DropdownFieldAdvancedSettingsProps) => { const { _ } = useLingui(); const [showValidation, setShowValidation] = useState(false); const [values, setValues] = useState(fieldState.values ?? [{ value: 'Option 1' }]); const [readOnly, setReadOnly] = useState(fieldState.readOnly ?? false); const [required, setRequired] = useState(fieldState.required ?? false); const [defaultValue, setDefaultValue] = useState(fieldState.defaultValue ?? 'Option 1'); const addValue = () => { setValues([...values, { value: 'New option' }]); handleFieldChange('values', [...values, { value: 'New option' }]); }; const removeValue = (index: number) => { if (values.length === 1) return; const newValues = [...values]; newValues.splice(index, 1); setValues(newValues); handleFieldChange('values', newValues); }; const handleToggleChange = (field: keyof DropdownFieldMeta, value: string | boolean) => { const readOnly = field === 'readOnly' ? Boolean(value) : Boolean(fieldState.readOnly); const required = field === 'required' ? Boolean(value) : Boolean(fieldState.required); setReadOnly(readOnly); setRequired(required); const errors = validateDropdownField(undefined, { readOnly, required, values, type: 'dropdown', }); handleErrors(errors); handleFieldChange(field, value); }; const handleValueChange = (index: number, newValue: string) => { const updatedValues = [...values]; updatedValues[index].value = newValue; setValues(updatedValues); handleFieldChange('values', updatedValues); }; useEffect(() => { const errors = validateDropdownField(undefined, { readOnly, required, values, type: 'dropdown', }); handleErrors(errors); }, [values]); useEffect(() => { setValues(fieldState.values ?? [{ value: 'Option 1' }]); }, [fieldState.values]); useEffect(() => { setDefaultValue(fieldState.defaultValue ?? 'Option 1'); }, [fieldState.defaultValue]); return (