'use client' import { useServey } from '@/hooks/useSurvey' import { SurveyBasicRequest } from '@/types/Survey' import { useRouter, useSearchParams } from 'next/navigation' import { useState, useEffect } from 'react' import { useSurveySaleTabState } from '@/store/surveySaleTabState' import { usePopupController } from '@/store/popupController' import { useAddressStore } from '@/store/addressStore' import { useSessionStore } from '@/store/session' import { useUserType } from '@/hooks/useUserType' const defaultBasicInfoForm: SurveyBasicRequest = { representative: '', store: null, construction_point: null, investigation_date: new Date().toLocaleDateString('en-CA'), building_name: null, customer_name: null, post_code: null, address: null, address_detail: null, submission_status: false, submission_date: null, } const REQUIRED_FIELDS: (keyof SurveyBasicRequest)[] = ['representative', 'building_name', 'customer_name'] export default function BasicForm() { const searchParams = useSearchParams() const id = searchParams.get('id') const router = useRouter() const { setBasicInfoSelected } = useSurveySaleTabState() const { surveyDetail, createSurvey, isCreatingSurvey, updateSurvey, isUpdatingSurvey } = useServey(Number(id)) const [basicInfoData, setBasicInfoData] = useState(defaultBasicInfoForm) const { addressData } = useAddressStore() const { userType, store, construction_point } = useUserType() const { session } = useSessionStore() const popupController = usePopupController() useEffect(() => { if (surveyDetail) { const { id, updated_at, created_at, detail_info, ...rest } = surveyDetail setBasicInfoData(rest) } if (addressData) { setBasicInfoData({ ...basicInfoData, post_code: addressData.post_code, address: addressData.address, address_detail: addressData.address_detail, }) } if (session?.isLoggedIn) { setBasicInfoData((prev) => ({ ...prev, representative: session?.userNm ?? '', })) } setBasicInfoSelected() }, [surveyDetail, addressData, session?.isLoggedIn, session?.userNm]) const focusInput = (input: keyof SurveyBasicRequest) => { const inputElement = document.getElementById(input) if (inputElement) { inputElement.focus() } } const validateSurvey = (basicInfoData: SurveyBasicRequest) => { const emptyField = REQUIRED_FIELDS.find((field) => !basicInfoData[field]) if (emptyField) { focusInput(emptyField) return false } return true } const handleChange = (key: keyof SurveyBasicRequest, value: string) => { setBasicInfoData({ ...basicInfoData, [key]: value }) } const handleSave = async (isTemporary: boolean) => { if (id) { updateSurvey(basicInfoData) alert('保存しました。') router.push(`/survey-sale/${id}?tab=basic-info`) } if (isTemporary) { const saveId = await createSurvey(basicInfoData) alert('一時保存されました。') router.push(`/survey-sale/${saveId}?tab=basic-info`) } else { if (validateSurvey(basicInfoData)) { const saveId = await createSurvey(basicInfoData) alert('保存しました。 登録番号: ' + saveId) router.push(`/survey-sale/${saveId}?tab=basic-info`) } } } if (isCreatingSurvey || isUpdatingSurvey) { return
Loading...
} return ( <>
担当者名
handleChange('representative', e.target.value)} />
{(userType === 'musubi' || userType === 'order' || userType?.includes('musubi')) && ( <>
販売店
handleChange('store', e.target.value)} />
)} {(userType === 'partner' || userType === 'musubi_con') && (
施工店
handleChange('construction_point', e.target.value)} />
)}
現地調査日
handleChange('investigation_date', e.target.value)} />
建物名
handleChange('building_name', e.target.value)} />
顧客名
handleChange('customer_name', e.target.value)} />
建物の住所
handleChange('post_code', e.target.value)} />
市区町村名, 以後の住所
handleChange('address_detail', e.target.value)} />
) }