FormNew deki hatalar düzeltildi.
This commit is contained in:
parent
ea37ef0682
commit
83855034df
3 changed files with 120 additions and 46 deletions
|
|
@ -94,7 +94,7 @@ const FormButtons = (props: {
|
|||
}
|
||||
toast.push(
|
||||
<Notification type="success" duration={2000}>
|
||||
{translate('::ListForms.FormBilgileriSilindi')}
|
||||
{translate('::KayitSilindi')}
|
||||
</Notification>,
|
||||
{
|
||||
placement: 'top-end',
|
||||
|
|
|
|||
|
|
@ -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<URLSearchParams>(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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue