208 lines
8.2 KiB
TypeScript

'use client'
import { useEffect, useState } from 'react'
import type { SurveyBasicRequest } from '@/types/Survey'
import type { Mode } from 'fs'
import { usePopupController } from '@/store/popupController'
import { useAddressStore } from '@/store/addressStore'
import { SessionData } from '@/types/Auth'
interface BasicFormProps {
basicInfo: SurveyBasicRequest
setBasicInfo: (basicInfo: SurveyBasicRequest) => void
mode: Mode
session: SessionData
}
export default function BasicForm({ basicInfo, setBasicInfo, mode, session }: BasicFormProps) {
const [isFlip, setIsFlip] = useState<boolean>(true)
const { addressData, resetAddressData } = useAddressStore()
const popupController = usePopupController()
useEffect(() => {
if (!addressData) return
setBasicInfo({
...basicInfo,
postCode: addressData.post_code.slice(0, 3) + '-' + addressData.post_code.slice(3),
address: addressData.address,
addressDetail: addressData.address_detail,
})
resetAddressData()
}, [addressData])
const handleAddressInitiate = () => {
setBasicInfo({
...basicInfo,
postCode: null,
address: null,
addressDetail: null,
})
}
return (
<>
<div className={`sale-detail-toggle-bx ${isFlip ? 'act' : ''}`}>
<div className="sale-detail-toggle-head" onClick={() => setIsFlip(!isFlip)}>
<div className="sale-detail-toggle-name"></div>
<div className="sale-detail-toggle-btn-wrap">
<button className="sale-detail-toggle-btn"></button>
</div>
</div>
<div className="sale-detail-toggle-cont">
<div className="sale-frame">
<div className="data-form-wrap">
<div className="data-input-form-bx">
<div className="data-input-form-tit"></div>
<input
type="text"
className="input-frame"
readOnly
value={basicInfo?.representative ?? ''}
onChange={(e) => setBasicInfo({ ...basicInfo, representative: e.target.value })}
/>
</div>
{/* 페이지 모드 별, 권한 별 판매점, 시공점 입력 여부 처리 */}
{mode === 'CREATE' &&
(session?.role === 'Builder' ? (
<>
{storeInput(basicInfo, setBasicInfo, mode)}
{builderInput(basicInfo, setBasicInfo, mode, session)}
</>
) : session?.role === 'Partner' ? (
<>{builderInput(basicInfo, setBasicInfo, mode, session)}</>
) : (
<>{storeInput(basicInfo, setBasicInfo, mode)}</>
))}
{(mode === 'READ' || mode === 'EDIT') && (
<>
{basicInfo?.store && storeInput(basicInfo, setBasicInfo, mode)}
{(basicInfo?.constructionPoint || (session?.role === 'Builder' && mode === 'EDIT')) &&
builderInput(basicInfo, setBasicInfo, mode, session)}
</>
)}
</div>
</div>
<div className="sale-frame">
<div className="data-form-wrap">
<div className="data-input-form-bx">
{/* 현지 조사일*/}
<div className="data-input-form-tit">調</div>
{['CREATE', 'EDIT'].includes(mode as 'CREATE' | 'EDIT') ? (
<div className="date-input">
<button className="date-btn">
<i className="date-icon"></i>
</button>
<input
id="investigationDate"
type="date"
className="date-frame"
value={basicInfo?.investigationDate?.toString()}
onChange={(e) => setBasicInfo({ ...basicInfo, investigationDate: e.target.value })}
/>
</div>
) : (
<input type="text" className="input-frame" readOnly value={basicInfo?.investigationDate?.toString() ?? ''} />
)}
</div>
<div className="data-input-form-bx">
{/* 건물명 */}
<div className="data-input-form-tit"></div>
<input
type="text"
className="input-frame"
readOnly={mode === 'READ'}
value={basicInfo?.buildingName ?? ''}
onChange={(e) => setBasicInfo({ ...basicInfo, buildingName: e.target.value })}
/>
</div>
<div className="data-input-form-bx">
{/* 고객명 */}
<div className="data-input-form-tit"></div>
<input
type="text"
className="input-frame"
readOnly={mode === 'READ'}
value={basicInfo?.customerName ?? ''}
onChange={(e) => setBasicInfo({ ...basicInfo, customerName: e.target.value })}
/>
</div>
<div className="data-input-form-bx">
<div className="data-input-form-tit">便/</div>
<div className="form-flex">
{/* 우편번호 */}
<div className="form-bx">
<input type="text" className="input-frame" readOnly={true} value={basicInfo?.postCode ?? ''} />
</div>
{/* 도도부현 */}
<div className="form-bx">
<input
type="text"
className="input-frame"
readOnly={mode === 'READ'}
value={basicInfo?.address ?? ''}
onChange={(e) => setBasicInfo({ ...basicInfo, address: e.target.value })}
/>
</div>
</div>
{/* 주소 */}
{mode !== 'READ' && (
<div className="form-flex mt5">
<button className="btn-frame n-blue icon" onClick={() => popupController.setZipCodePopup(true)}>
便<i className="btn-arr"></i>
</button>
<button className="btn-frame red reset" onClick={() => handleAddressInitiate()}></button>
</div>
)}
</div>
<div className="data-input-form-bx">
<div className="data-input-form-tit">, </div>
<input
type="text"
className="input-frame"
value={basicInfo?.addressDetail ?? ''}
readOnly={mode === 'READ'}
onChange={(e) => setBasicInfo({ ...basicInfo, addressDetail: e.target.value })}
/>
</div>
</div>
</div>
</div>
</div>
</>
)
}
/** 판매점 입력 창 */
const storeInput = (basicInfo: SurveyBasicRequest, setBasicInfo: (basicInfo: SurveyBasicRequest) => void, mode: Mode) => {
return (
<div className="data-input-form-bx">
<div className="data-input-form-tit"></div>
<input
type="text"
className="input-frame"
readOnly
value={basicInfo?.store ?? ''}
onChange={(e) => setBasicInfo({ ...basicInfo, store: e.target.value })}
/>
</div>
)
}
/** 시공점 입력 창 - 2차점 시공권한 유저이지만(Builder) 시공점ID가 없는 경우에만 작성 가능 */
const builderInput = (basicInfo: SurveyBasicRequest, setBasicInfo: (basicInfo: SurveyBasicRequest) => void, mode: Mode, session: SessionData) => {
const isWriteable = mode !== 'READ' && session?.role === 'Builder' && session?.builderId === null
return (
<div className="data-input-form-bx">
<div className="data-input-form-tit"></div>
<input
type="text"
className="input-frame"
readOnly={!isWriteable}
value={basicInfo?.constructionPoint ?? ''}
onChange={(e) => setBasicInfo({ ...basicInfo, constructionPoint: e.target.value })}
/>
</div>
)
}