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 { MdBarChart, MdList } from 'react-icons/md' import { useLocation, useNavigate } from 'react-router-dom' import Grid from '../list/Grid' import Chart from '../chart/Chart' import { GridDto, SubFormDto, SubFormTabTypeEnum } from '@/proxy/form/models' import FormEdit from './FormEdit' import FormNew from './FormNew' import FormView from './FormView' const SubForms = (props: { gridDto: GridDto formData: any level: number refreshData?: () => Promise }) => { const { gridDto, formData, level, refreshData } = props const { hash } = useLocation() const [currentTab, setCurrentTab] = useState() const [subForms, setSubForms] = useState() 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) { subForm.searchParams = new URLSearchParams( subForm.relation.reduce( (acc, a) => { if (formData?.[a.parentFieldName]) { acc[a.childFieldName] = formData[a.parentFieldName] } return acc }, {} as Record, ), ) subForm.id = formData[subForm.relation[0].parentFieldName] } } setSubForms([...gridDto.gridOptions.subFormsDto]) }, [gridDto, formData]) if (!formData || !subForms?.length) { return <> } return ( { if (subForms.some((a) => a.code === val)) { setCurrentTab(val) if (level === 0) { navigate(`#${val}`) } } }} > {subForms.map((subForm, i) => { return ( : } > {subForm.tabTitle} ) })} {subForms.map((subForm, i) => { return ( {subForm.tabType == SubFormTabTypeEnum.List && ( )} {subForm.tabType == SubFormTabTypeEnum.Form && (subForm.tabMode == 'edit' ? ( { 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' ? ( { setSubForms( subForms.map((a) => { if (a.code == subForm.code) { a.tabMode = 'view' } return a }), ) }} /> ) : ( { 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 && ( )} ) })} ) } export default SubForms