'use client'; import { useState } from 'react'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { ChevronDown, ChevronUp } from 'lucide-react'; import { validateNumberField } from '@documenso/lib/advanced-fields-validation/validate-number'; import { type TNumberFieldMeta as NumberFieldMeta } 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'; import { numberFormatValues } from './constants'; type NumberFieldAdvancedSettingsProps = { fieldState: NumberFieldMeta; handleFieldChange: (key: keyof NumberFieldMeta, value: string | boolean) => void; handleErrors: (errors: string[]) => void; }; export const NumberFieldAdvancedSettings = ({ fieldState, handleFieldChange, handleErrors, }: NumberFieldAdvancedSettingsProps) => { const { _ } = useLingui(); const [showValidation, setShowValidation] = useState(false); const handleInput = (field: keyof NumberFieldMeta, value: string | boolean) => { const userValue = field === 'value' ? value : fieldState.value || 0; const userMinValue = field === 'minValue' ? Number(value) : Number(fieldState.minValue || 0); const userMaxValue = field === 'maxValue' ? Number(value) : Number(fieldState.maxValue || 0); const readOnly = field === 'readOnly' ? Boolean(value) : Boolean(fieldState.readOnly); const required = field === 'required' ? Boolean(value) : Boolean(fieldState.required); const numberFormat = field === 'numberFormat' ? String(value) : fieldState.numberFormat || ''; const valueErrors = validateNumberField(String(userValue), { minValue: userMinValue, maxValue: userMaxValue, readOnly, required, numberFormat, }); handleErrors(valueErrors); handleFieldChange(field, value); }; return (
handleFieldChange('label', e.target.value)} />
handleFieldChange('placeholder', e.target.value)} />
handleInput('value', e.target.value)} />
handleInput('required', checked)} />
handleInput('readOnly', checked)} />
{showValidation && (
handleInput('minValue', e.target.value)} />
handleInput('maxValue', e.target.value)} />
)}
); };