'use client' import type { Mode, SurveyBasicRequest, SurveyDetailRequest } from '@/types/Survey' import { useEffect, useState } from 'react' import ButtonForm from './ButtonForm' import BasicForm from './BasicForm' import RoofForm from './RoofForm' import { useParams, useRouter, useSearchParams, usePathname } from 'next/navigation' import { useSurvey } from '@/hooks/useSurvey' import { useSessionStore } from '@/store/session' import DataTable from './DataTable' import { usePopupController } from '@/store/popupController' const roofInfoForm: SurveyDetailRequest = { contractCapacity: null, retailCompany: null, supplementaryFacilities: null, supplementaryFacilitiesEtc: null, installationSystem: null, installationSystemEtc: null, constructionYear: null, constructionYearEtc: null, roofMaterial: null, roofMaterialEtc: null, roofShape: null, roofShapeEtc: null, roofSlope: null, houseStructure: '1', houseStructureEtc: null, rafterMaterial: '1', rafterMaterialEtc: null, rafterSize: null, rafterSizeEtc: null, rafterPitch: null, rafterPitchEtc: null, rafterDirection: '1', openFieldPlateKind: null, openFieldPlateKindEtc: null, openFieldPlateThickness: null, leakTrace: false, waterproofMaterial: null, waterproofMaterialEtc: null, insulationPresence: '1', insulationPresenceEtc: null, structureOrder: null, structureOrderEtc: null, installationAvailability: null, installationAvailabilityEtc: null, memo: null, } const basicInfoForm: SurveyBasicRequest = { representative: '', representativeId: null, store: null, storeId: null, constructionPoint: null, constructionPointId: null, investigationDate: new Date().toLocaleDateString('en-CA'), buildingName: null, customerName: null, postCode: null, address: null, addressDetail: null, submissionStatus: false, submissionDate: null, submissionTargetId: null, submissionTargetNm: null, srlNo: null, } export default function DetailForm() { const id = useParams().id const modeset = !Number.isNaN(Number(id)) ? 'READ' : 'CREATE' const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id), false) const { session } = useSessionStore() const searchParams = useSearchParams() const popupController = usePopupController() const router = useRouter() const pathname = usePathname() const [mode, setMode] = useState(modeset) const [basicInfoData, setBasicInfoData] = useState(() => ({ ...basicInfoForm, representative: session?.userNm ?? '', representativeId: session?.userId ?? null, store: session?.storeNm ?? null, storeId: session?.storeId ?? null, constructionPoint: session?.builderNm ?? null, constructionPointId: session?.builderId ?? null, })) const [roofInfoData, setRoofInfoData] = useState(roofInfoForm) /** route 에러 처리 - 잘못된 URL 접근 시 생성 페이지로 리다이렉트 */ useEffect(() => { if (modeset === 'CREATE' && pathname !== '/survey-sale/regist') { router.replace('/survey-sale/regist') } return }, [modeset, id, pathname]) /** 세션 데이터가 변경될 때 기본 정보 업데이트 */ useEffect(() => { if (!session?.isLoggedIn) return setBasicInfoData((prev) => ({ ...prev, representative: session.userNm ?? '', representativeId: session.userId ?? null, store: session.storeNm ?? null, storeId: session.storeId ?? null, constructionPoint: session.builderNm ?? null, constructionPointId: session.builderId ?? null, })) }, [session?.isLoggedIn]) /** 조사매물 상세 데이터 업데이트 */ useEffect(() => { if (!isLoadingSurveyDetail && surveyDetail && (mode === 'EDIT' || mode === 'READ')) { const { id, uptDt, regDt, detailInfo, ...rest } = surveyDetail setBasicInfoData((prev) => ({ ...prev, ...rest, })) if (detailInfo) { const { id, uptDt, regDt, basicInfoId, ...rest } = detailInfo setRoofInfoData(rest) } } }, [mode, isLoadingSurveyDetail, surveyDetail]) const data = { basic: basicInfoData, roof: roofInfoData, } const buttonFormProps = { mode, setMode, data } return ( <> {mode === 'READ' && surveyDetail && }
) }