diff --git a/ui/src/views/form/FormButtons.tsx b/ui/src/views/form/FormButtons.tsx
index 0bff0f70..c6d41ab2 100644
--- a/ui/src/views/form/FormButtons.tsx
+++ b/ui/src/views/form/FormButtons.tsx
@@ -94,7 +94,7 @@ const FormButtons = (props: {
}
toast.push(
- {translate('::ListForms.FormBilgileriSilindi')}
+ {translate('::KayitSilindi')}
,
{
placement: 'top-end',
diff --git a/ui/src/views/form/FormNew.tsx b/ui/src/views/form/FormNew.tsx
index b6cfd41a..e6e87286 100644
--- a/ui/src/views/form/FormNew.tsx
+++ b/ui/src/views/form/FormNew.tsx
@@ -4,7 +4,7 @@ import { DataType } from 'devextreme/common'
import { SimpleItem } from 'devextreme/ui/form'
import { useEffect, useState } from 'react'
import { Helmet } from 'react-helmet'
-import { useParams, useSearchParams } from 'react-router-dom'
+import { useNavigate, useParams, useSearchParams } from 'react-router-dom'
import FormButtons from './FormButtons'
import FormDevExpress from './FormDevExpress'
import { FormProps } from './types'
@@ -24,8 +24,10 @@ const FormNew = (
const [searchParams] = useSearchParams()
const { translate } = useLocalization()
const MenuIcon = useCurrentMenuIcon('w-5 h-5')
+ const navigate = useNavigate()
const {
+ fetchData,
setFormData,
loading,
handleSubmit,
@@ -41,7 +43,7 @@ const FormNew = (
listFormCode,
level,
isSubForm,
- onSubmitAction: props?.onActionView,
+ onSubmitAction: (props?.onActionView),
})
const [newParams, setNewParams] = useState(new URLSearchParams())
@@ -59,8 +61,89 @@ const FormNew = (
return
}
- setFormData(createInitialFormData())
- }, [formItems, newParams])
+ // 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 = {}
@@ -80,55 +163,18 @@ const FormNew = (
}
if (!gridDto?.columnFormats) {
- return
+ return data
}
+
+ // Grid'den gelen columnFormat'ları kullanarak default değerleri set et
for (const colFormat of gridDto?.columnFormats) {
if (!colFormat.fieldName) {
continue
}
- // Grid'den gelen columnFormat'ları kullanarak default değerleri set et
if (colFormat.defaultValue != null) {
data[colFormat.fieldName] = colFormat.defaultValue
}
-
- // URL'den veya Component Prop'dan gelen parametreleri set et
- if (newParams.has(colFormat.fieldName)) {
- const dType = colFormat.dataType as DataType
- switch (dType) {
- case 'date':
- case 'datetime':
- data[colFormat.fieldName] = new Date(newParams.get(colFormat.fieldName)!)
- break
- case 'number':
- data[colFormat.fieldName] = Number(newParams.get(colFormat.fieldName))
- break
- case 'boolean':
- if (newParams.get(colFormat.fieldName) === 'true') {
- data[colFormat.fieldName] = true
- } else if (newParams.get(colFormat.fieldName) === 'false') {
- data[colFormat.fieldName] = false
- }
- break
- case 'object':
- try {
- data[colFormat.fieldName] = JSON.parse(newParams.get(colFormat.fieldName) as string)
- } catch (error) {}
- break
- default:
- data[colFormat.fieldName] = newParams.get(colFormat.fieldName)
- break
- }
-
- // Eğer default value varsa, 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 }
- }
- })
- })
- }
}
return data
diff --git a/ui/src/views/form/useGridData.tsx b/ui/src/views/form/useGridData.tsx
index 066ecc3a..709c9f00 100644
--- a/ui/src/views/form/useGridData.tsx
+++ b/ui/src/views/form/useGridData.tsx
@@ -289,7 +289,35 @@ const useGridData = (props: {
})
setFormItems(items)
setGridReady(true)
- }, [gridDto, formData])
+ }, [gridDto])
+
+ // formData değiştiğinde sadece lookup datasource'ları güncelle
+ useEffect(() => {
+ if (!gridDto || !formData || !formItems.length) {
+ return
+ }
+
+ const updatedItems = formItems.map((groupItem) => ({
+ ...groupItem,
+ items: (groupItem.items as SimpleItemWithColData[])?.map((item) => {
+ const colData = gridDto.columnFormats.find((x) => x.fieldName === item.dataField)
+ if (colData?.lookupDto?.dataSourceType) {
+ return {
+ ...item,
+ editorOptions: {
+ ...item.editorOptions,
+ dataSource: getLookupDataSource(colData?.editorOptions, colData, formData),
+ valueExpr: colData?.lookupDto?.valueExpr?.toLowerCase(),
+ displayExpr: colData?.lookupDto?.displayExpr?.toLowerCase(),
+ },
+ }
+ }
+ return item
+ }),
+ }))
+
+ setFormItems(updatedItems)
+ }, [formData])
useEffect(() => {
if (!gridReady) {