import { FormContext, FormDisplayerProps, useFieldContainer, useForm } from 'onekijs-framework'; import React, { FC } from 'react'; import styled from 'styled-components'; import { titlelize } from '../../utils/misc'; import FieldDisplayer from '../field/FieldDisplayer'; import FieldLayout from '../field/FieldLayout'; import useFieldLayout from '../field/hooks/useFieldLayout'; import FormTableComponent from './components/FormTableComponent'; import FormTableValueDisplayer from './displayers/FormTableValueDisplayer'; import { tableStyle } from './style'; import { FormTableProps, TableItem } from './typings'; const StyledFormTableComponent = styled(FormTableComponent)` ${tableStyle} `; const FormTable: FC>> = React.memo((props) => { let defaultValue = props.defaultValue; if (defaultValue === undefined) { let minLength = (props.minLength ?? props.min) || 0; if (props.required && minLength < 1) { minLength = 1; } const isSingleColumnTable = props.controller.columns.find((c) => c.id === ''); defaultValue = minLength > 0 ? Array(minLength).fill(isSingleColumnTable ? undefined : {}) : []; } const [fieldLayoutProps, fieldComponentProps] = useFieldLayout>>( Object.assign( { defaultValue, Displayer: (displayerProps: FormDisplayerProps) => { const form = useForm(); let value = form.getValue(displayerProps.name) ?? []; const ValueDisplayer = props.ValueDisplayer ?? FormTableValueDisplayer; return ( } format={displayerProps.format} /> ); }, }, props, ), ); const fieldContainer = useFieldContainer({ container: props.name, }); const Component = props.FieldComponent || StyledFormTableComponent; return ( ); }); FormTable.displayName = 'FormTable'; export default FormTable;