erp-platform/ui/src/views/form/FormDevExpress.tsx

119 lines
4.4 KiB
TypeScript
Raw Normal View History

2025-05-06 06:45:49 +00:00
import { DX_CLASSNAMES } from '@/constants/app.constant'
import {
Form as FormDx,
GroupItem as GroupItemDx,
Label as LabelDx,
SimpleItem as SimpleItemDx,
} from 'devextreme-react/form'
import { FieldDataChangedEvent, GroupItem } from 'devextreme/ui/form'
import { Dispatch, RefObject } from 'react'
import { GridBoxEditorComponent } from './editors/GridBoxEditorComponent'
import { TagBoxEditorComponent } from './editors/TagBoxEditorComponent'
import { RowMode, SimpleItemWithColData } from './types'
import { PlatformEditorTypes } from '@/proxy/form/models'
2025-05-06 06:45:49 +00:00
const FormDevExpress = (props: {
2025-09-21 20:05:13 +00:00
listFormCode: string
isSubForm?: boolean
2025-05-06 06:45:49 +00:00
mode: RowMode
refForm: RefObject<FormDx>
formData: any
formItems: GroupItem[]
setFormData: Dispatch<any>
}) => {
2025-09-21 20:05:13 +00:00
const { listFormCode, isSubForm, mode, refForm, formData, formItems, setFormData } = props
2025-05-06 06:45:49 +00:00
return (
2025-09-23 19:52:08 +00:00
<form className={`${DX_CLASSNAMES} ${!isSubForm ? 'px-2' : ''} pb-2`}>
2025-05-06 06:45:49 +00:00
<FormDx
ref={refForm}
formData={formData}
onFieldDataChanged={(e: FieldDataChangedEvent) => {
setFormData({ ...formData, [e.dataField!]: e.value })
}}
2025-09-19 14:06:48 +00:00
onContentReady={(e) => {
const firstItem = formItems?.flatMap((g) => g.items || []).find((it) => !!it.name)
if (firstItem?.name) {
const editor = e.component.getEditor(firstItem.name as string)
editor?.focus()
}
}}
2025-05-06 06:45:49 +00:00
>
{formItems.map((formGroupItem, i) => {
return (
<GroupItemDx
2025-09-23 19:52:08 +00:00
2025-05-06 06:45:49 +00:00
key={'formGroupItem-' + i}
colCount={formGroupItem.colCount}
colSpan={formGroupItem.colSpan}
caption={formGroupItem.caption}
>
{(formGroupItem.items as SimpleItemWithColData[])?.map((formItem, i) => {
return formItem.editorType2 === PlatformEditorTypes.dxTagBox ? (
<SimpleItemDx
key={'formItem-' + i}
{...formItem}
render={() => (
<TagBoxEditorComponent
value={formData[formItem.dataField!] || []}
setDefaultValue={false}
values={formData}
options={formItem.tagBoxOptions}
col={formItem.colData}
onValueChanged={(e: any) => {
setFormData({ ...formData, [formItem.dataField!]: e })
}}
editorOptions={{
...formItem.editorOptions,
...(mode === 'view' ? { readOnly: true } : {}),
}}
></TagBoxEditorComponent>
)}
>
<LabelDx text={formItem.name} />
</SimpleItemDx>
) : formItem.editorType2 === PlatformEditorTypes.dxGridBox ? (
<SimpleItemDx
key={'formItem-' + i}
{...formItem}
render={() => (
<GridBoxEditorComponent
value={formData[formItem.dataField!] || []}
values={formData}
options={formItem.gridBoxOptions}
col={formItem.colData}
onValueChanged={(e: any) => {
setFormData({ ...formData, [formItem.dataField!]: e })
}}
editorOptions={{
...formItem.editorOptions,
...(mode === 'view' ? { readOnly: true } : {}),
}}
></GridBoxEditorComponent>
)}
>
<LabelDx text={formItem.name} />
</SimpleItemDx>
) : (
<SimpleItemDx
2025-09-23 19:52:08 +00:00
cssClass='font-semibold'
2025-05-06 06:45:49 +00:00
key={'formItem-' + i}
{...formItem}
editorOptions={{
...formItem.editorOptions,
2025-09-19 14:06:48 +00:00
...(mode === 'view' ? { readOnly: true } : { autoFocus: i === 1 }),
2025-05-06 06:45:49 +00:00
}}
/>
)
})}
</GroupItemDx>
)
})}
</FormDx>
</form>
)
}
export default FormDevExpress