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

198 lines
6 KiB
TypeScript
Raw Normal View History

2025-05-06 06:45:49 +00:00
import { Tabs } from '@/components/ui'
import TabContent from '@/components/ui/Tabs/TabContent'
import TabList from '@/components/ui/Tabs/TabList'
import TabNav from '@/components/ui/Tabs/TabNav'
import { useEffect, useState } from 'react'
import { FaChartBar, FaList } from 'react-icons/fa'
2025-05-06 06:45:49 +00:00
import { useLocation, useNavigate } from 'react-router-dom'
import Grid from '../list/Grid'
2025-08-12 09:39:09 +00:00
import Chart from '../chart/Chart'
import { GridDto, SubFormDto, SubFormTabTypeEnum } from '@/proxy/form/models'
2025-05-06 06:45:49 +00:00
import FormEdit from './FormEdit'
import FormNew from './FormNew'
import FormView from './FormView'
2025-09-23 19:52:08 +00:00
import { getList } from '@/services/form.service'
2025-05-06 06:45:49 +00:00
const SubForms = (props: {
gridDto: GridDto
formData: any
level: number
refreshData?: () => Promise<void>
}) => {
const { gridDto, formData, level, refreshData } = props
const { hash } = useLocation()
const [currentTab, setCurrentTab] = useState<string>()
const [subForms, setSubForms] = useState<SubFormDto[]>()
const navigate = useNavigate()
useEffect(() => {
if (hash && level === 0) {
setCurrentTab(hash.replace('#', ''))
} else if (gridDto?.gridOptions?.subFormsDto?.length) {
setCurrentTab(gridDto?.gridOptions?.subFormsDto[0].code)
} else {
setCurrentTab(undefined)
}
}, [hash, gridDto])
useEffect(() => {
if (!gridDto?.gridOptions?.subFormsDto?.length) {
return
}
for (const subForm of gridDto.gridOptions.subFormsDto) {
if (formData && subForm.relation?.length) {
// sadece ilk eşleşmeyi al
const rel = subForm.relation.find((a) => formData?.[a.parentFieldName])
if (rel) {
const filter: [string, string, string] = [
rel.childFieldName,
'=',
formData[rel.parentFieldName],
]
subForm.searchParams = new URLSearchParams({
filter: JSON.stringify(filter),
})
subForm.id = formData[rel.parentFieldName]
}
2025-05-06 06:45:49 +00:00
}
}
setSubForms([...gridDto.gridOptions.subFormsDto])
}, [gridDto, formData])
if (!formData || !subForms?.length) {
return <></>
}
return (
<Tabs
value={currentTab}
onChange={(val: string) => {
if (subForms.some((a) => a.code === val)) {
setCurrentTab(val)
if (level === 0) {
navigate(`#${val}`)
}
}
}}
2025-09-23 19:52:08 +00:00
className="mt-2"
2025-05-06 06:45:49 +00:00
>
<TabList>
{subForms.map((subForm, i) => {
return (
<TabNav
key={subForm.code}
value={subForm.code}
2025-08-16 21:17:18 +00:00
icon={subForm.tabType == SubFormTabTypeEnum.List ? <FaList /> : <FaChartBar />}
2025-05-06 06:45:49 +00:00
>
{subForm.tabTitle}
</TabNav>
)
})}
</TabList>
{subForms.map((subForm, i) => {
return (
<TabContent key={subForm.code} value={subForm.code} className="pt-1">
{subForm.tabType == SubFormTabTypeEnum.List && (
<Grid
listFormCode={subForm.code}
searchParams={subForm.searchParams}
isSubForm={true}
level={level + 1}
refreshData={refreshData}
/>
)}
{subForm.tabType == SubFormTabTypeEnum.Form &&
(subForm.tabMode == 'edit' ? (
<FormEdit
onActionNew={() => {
setSubForms(
subForms.map((a) => {
if (a.code == subForm.code) {
a.tabMode = 'new'
}
return a
}),
)
}}
onActionView={() => {
setSubForms(
subForms.map((a) => {
if (a.code == subForm.code) {
a.tabMode = 'view'
}
return a
}),
)
}}
listFormCode={subForm.code}
id={subForm.id}
level={level + 1}
isSubForm={true}
/>
) : subForm.tabMode == 'new' ? (
<FormNew
listFormCode={subForm.code}
sParams={subForm.searchParams}
level={level + 1}
isSubForm={true}
onActionView={() => {
setSubForms(
subForms.map((a) => {
if (a.code == subForm.code) {
a.tabMode = 'view'
}
return a
}),
)
}}
/>
) : (
<FormView
onActionNew={() => {
setSubForms(
subForms.map((a) => {
if (a.code == subForm.code) {
a.tabMode = 'new'
}
return a
}),
)
}}
onActionEdit={() => {
setSubForms(
subForms.map((a) => {
if (a.code == subForm.code) {
a.tabMode = 'edit'
}
return a
}),
)
}}
listFormCode={subForm.code}
id={subForm.id}
level={level + 1}
isSubForm={true}
/>
))}
{subForm.tabType == SubFormTabTypeEnum.Chart && (
<Chart
2025-09-26 20:34:03 +00:00
listFormCode={subForm.code}
2025-05-06 06:45:49 +00:00
isSubForm={true}
level={level + 1}
refreshData={refreshData}
/>
)}
</TabContent>
)
})}
</Tabs>
)
}
export default SubForms