import { Container, Loading } from '@/components/shared' import { useLocalization } from '@/utils/hooks/useLocalization' import { DataType } from 'devextreme/common' import { SimpleItem } from 'devextreme/ui/form' import { useEffect, useState } from 'react' import { Helmet } from 'react-helmet' import { useNavigate, useParams, useSearchParams } from 'react-router-dom' import FormButtons from './FormButtons' import FormDevExpress from './FormDevExpress' import { FormProps } from './types' import { useGridData } from './useGridData' import { useCurrentMenuIcon } from '@/utils/hooks/useCurrentMenuIcon' import { Badge } from '@/components/ui' const FormNew = ( props: FormProps = { isSubForm: false, }, ) => { const mode = 'new' const { isSubForm, level, sParams } = props const params = useParams() const listFormCode = props?.listFormCode ?? params?.listFormCode ?? '' const [searchParams] = useSearchParams() const { translate } = useLocalization() const MenuIcon = useCurrentMenuIcon('w-5 h-5') const navigate = useNavigate() const { fetchData, setFormData, loading, handleSubmit, gridDto, dataSource, commandColumnData, formData, formItems, refForm, permissionResults, } = useGridData({ mode, listFormCode, level, isSubForm, onSubmitAction: (props?.onActionView), }) const [newParams, setNewParams] = useState(new URLSearchParams()) useEffect(() => { setNewParams( new URLSearchParams({ ...Object.fromEntries(searchParams), ...Object.fromEntries(sParams ?? []), }), ) }, [searchParams, sParams]) useEffect(() => { if (!formItems) { return } // Sadece formData yoksa (ilk yüklemede) initial data oluştur // Kullanıcının girdiği bilgileri korumak için mevcut formData varsa setleme if (!formData) { setFormData(createInitialFormData()) } }, [formItems]) // newParams değiştiğinde sadece newParams'tan gelen alanları güncelle useEffect(() => { if (!formItems || !formData || !gridDto?.columnFormats) { return } const updatedData = { ...formData } let hasChanges = false for (const colFormat of gridDto.columnFormats) { if (!colFormat.fieldName || !newParams.has(colFormat.fieldName)) { continue } const dType = colFormat.dataType as DataType let newValue: any switch (dType) { case 'date': case 'datetime': newValue = new Date(newParams.get(colFormat.fieldName)!) break case 'number': newValue = Number(newParams.get(colFormat.fieldName)) break case 'boolean': if (newParams.get(colFormat.fieldName) === 'true') { newValue = true } else if (newParams.get(colFormat.fieldName) === 'false') { newValue = false } break case 'object': try { newValue = JSON.parse(newParams.get(colFormat.fieldName) as string) } catch (error) { newValue = updatedData[colFormat.fieldName] } break default: newValue = newParams.get(colFormat.fieldName) break } if (updatedData[colFormat.fieldName] !== newValue) { updatedData[colFormat.fieldName] = newValue hasChanges = true } } if (hasChanges) { setFormData(updatedData) } }, [newParams, gridDto?.columnFormats]) // newParams'tan gelen alanları readonly yap useEffect(() => { if (!formItems || !gridDto?.columnFormats || !newParams) { return } for (const colFormat of gridDto.columnFormats) { if (!colFormat.fieldName || !newParams.has(colFormat.fieldName)) { continue } // Eğer URL'den değer geliyorsa, bu editörü readonly yapıyoruz formItems.forEach((form) => { form?.items?.forEach((item: SimpleItem) => { if (item.dataField === colFormat.fieldName) { item.editorOptions = { ...item.editorOptions, readOnly: true } } }) }) } }, [formItems, newParams, gridDto?.columnFormats]) function createInitialFormData() { const data: any = {} if (!formItems?.length) { return data } // Default tüm alanlar undefined olsun for (const formGroupItem of formItems) { if (formGroupItem.items) { //SimpleItem for (const formItem of formGroupItem.items) { const f = formItem as SimpleItem data[f.dataField!] = undefined } } } if (!gridDto?.columnFormats) { return data } // Grid'den gelen columnFormat'ları kullanarak default değerleri set et for (const colFormat of gridDto?.columnFormats) { if (!colFormat.fieldName) { continue } if (colFormat.defaultValue != null) { data[colFormat.fieldName] = colFormat.defaultValue } } return data } if (!listFormCode) { return <> } if (loading) { return } if (!formData) { return <>{translate('::Error:0002')} } return ( {!isSubForm && ( )}
{MenuIcon} {!isSubForm && ( <>

{translate('::' + gridDto?.gridOptions?.title)}

)}
{permissionResults && ( {}} getSelectedRowKeys={() => []} getSelectedRowsData={() => [formData]} getFilter={() => []} onActionView={props?.onActionView} /> )}
) } export default FormNew