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'
|
2025-08-12 08:39:06 +00:00
|
|
|
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
|
2025-09-21 15:11:12 +00:00
|
|
|
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
|