import { useCallback } from 'react'; import * as React from 'react'; import type { FormDataType, FormFieldValue, NumberRecordFieldValue, NumberRecordFormField, PartialFormDataType, RecordArrayFieldValue, RecordArrayFormField, ScalarFieldValue } from '@douglasneuroinformatics/libui-form-types'; import { match } from 'ts-pattern'; import { NumberRecordField } from './NumberRecordField.tsx'; import { RecordArrayField } from './RecordArrayField.tsx'; import { ScalarField } from './ScalarField.tsx'; import type { ScalarFieldProps } from './ScalarField.tsx'; import type { FieldError, FormErrors } from './types.ts'; export type StaticFieldProps = { errors: FormErrors; field: NumberRecordFormField | RecordArrayFormField | ScalarFieldProps['field']; name: string; readOnly?: boolean; setErrors: React.Dispatch>>; setValues: React.Dispatch>>; values: PartialFormDataType; }; export const StaticField = ({ errors, field, name, readOnly, setErrors, setValues, values }: StaticFieldProps) => { const setError = useCallback( (error: FieldError) => { return setErrors((prevErrors) => ({ ...prevErrors, [name]: error })); }, [setErrors] ); const setValue = useCallback( (value: TValue) => { return setValues((prevValues) => ({ ...prevValues, [name]: value })); }, [setValues] ); return match(field) .with({ kind: 'record-array' }, (field) => ( )) .with({ kind: 'number-record' }, (field) => ( )) .otherwise((field) => ( )); };