import React, { useCallback } from 'react'; import { observer } from 'mobx-react-lite'; import { Cell, Layout } from '@wix/design-system'; import { CustomField, CustomFieldType } from '@wix/bex-core'; import { EDITABLE_INPUT_ELEMENTS, FormFieldInput } from '../FormFieldInput'; import { CustomFieldsFormState } from '../../state'; import { CustomFieldsFormContextProvider } from '../CustomFieldsFormContext'; import { OnCustomFieldChange } from '../CustomFieldsWidget/OnCustomFieldChange'; export interface CustomFieldsFormProps { state: CustomFieldsFormState; onChange?: OnCustomFieldChange; } const toCellSpan = (type?: CustomFieldType) => { switch (type) { case 'longText': case 'checkbox': case 'shortText': case 'url': case 'dateTime': return 12; default: return 6; } }; const _CustomFieldsForm = ({ state, onChange }: CustomFieldsFormProps) => { const { _namespace } = state; const renderFieldInput = useCallback((field: CustomField) => { if (!field) { return null; } if (!EDITABLE_INPUT_ELEMENTS.hasOwnProperty(field.type)) { return null; } const span = toCellSpan(field.type); return ( state.setValue({ id: field.id, value: newValue, onChange }) } inputRef={(inputRef) => { state.setInputRef(field.id, inputRef); }} /> {span !== 12 && } ); }, []); const { writeableFields } = state; return ( {writeableFields.map(renderFieldInput)} ); }; export const CustomFieldsForm = observer(_CustomFieldsForm);