import { useEffect, useRef, useState } from 'react' import { useMessage } from '@/hooks/useMessage' import { usePopup } from '@/hooks/usePopup' import SizeGuide from '@/components/floor-plan/modal/placementShape/SizeGuide' import MaterialGuide from '@/components/floor-plan/modal/placementShape/MaterialGuide' import WithDraggable from '@/components/common/draggable/WithDraggable' import { useCanvasSetting } from '@/hooks/option/useCanvasSetting' import { useRecoilState, useRecoilValue } from 'recoil' import { addedRoofsState, roofMaterialsAtom } from '@/store/settingAtom' import { useCommonCode } from '@/hooks/common/useCommonCode' import QSelectBox from '@/components/common/select/QSelectBox' import { globalLocaleStore } from '@/store/localeAtom' import { onlyNumberInputChange } from '@/util/input-utils' export const ROOF_MATERIAL_LAYOUT = { PARALLEL: 'P', STAIRS: 'S', } export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, setShowPlaceShapeModal }) { const [showSizeGuideModal, setShowSizeGuidModal] = useState(false) const [showMaterialGuideModal, setShowMaterialGuidModal] = useState(false) const { closePopup } = usePopup() const { getMessage } = useMessage() const roofMaterials = useRecoilValue(roofMaterialsAtom) const globalLocale = useRecoilValue(globalLocaleStore) const { basicSetting, setBasicSettings, basicSettingSave } = useCanvasSetting() const [addedRoofs, setAddedRoofs] = useRecoilState(addedRoofsState) const { findCommonCode } = useCommonCode() const [raftCodes, setRaftCodes] = useState([]) // 서까래 정보 const [currentRoof, setCurrentRoof] = useState(null) // 현재 선택된 지붕재 정보 const roofRef = { roofCd: useRef(null), width: useRef(null), length: useRef(null), rafter: useRef(null), hajebichi: useRef(null), } //치수 입력방법(복시도입력/실측값입력/육지붕) const roofSizeSetArray = [ { id: 'ra01', name: 'roofSizeSet', value: '1', message: 'modal.placement.initial.setting.size.roof' }, { id: 'ra02', name: 'roofSizeSet', value: '2', message: 'modal.placement.initial.setting.size.actual' }, { id: 'ra03', name: 'roofSizeSet', value: '3', message: 'modal.placement.initial.setting.size.none.pitch' }, ] //지붕각도 설정(경사/각도) const roofAngleSetArray = [ { id: 'ra04', name: 'roofAngleSet', value: 'slope', message: 'modal.placement.initial.setting.roof.pitch' }, { id: 'ra05', name: 'roofAngleSet', value: 'flat', message: 'modal.placement.initial.setting.roof.angle' }, ] const defaultRoofSettings = { roofSizeSet: '1', // 기본 치수 입력 방법 roofAngleSet: 'slope', // 기본 지붕 각도 설정 angle: 21.8, hajebichi: '', id: 'ROOF_ID_WA_53A', index: 0, layout: ROOF_MATERIAL_LAYOUT.PARALLEL, lenAuth: 'R', lenBase: '235.000', length: '235', name: '일본기와 A', nameJp: '和瓦A', pitch: 4, raft: '', raftAuth: 'C', raftBaseCd: 'HEI_455', roofAngleSet: 'slope', roofCd: '', roofMatlCd: 'ROOF_ID_WA_53A', roofMatlNm: '일본기와 A', roofMatlNmJp: '和瓦A', roofPchAuth: null, roofPchBase: null, roofSizeSet: '1', selected: true, widAuth: 'R', widBase: '265.000', width: '265', } useEffect(() => { if (addedRoofs.length > 0) { const raftCodeList = findCommonCode('203800') setRaftCodes(raftCodeList) // 데이터 설정 확인 후 데이터가 없으면 기본 데이터 설정 if (addedRoofs.length > 0) { setCurrentRoof({ ...addedRoofs[0] }) } else { setCurrentRoof(defaultRoofSettings) } } }, [addedRoofs]) useEffect(() => { //console.log('🚀 ~ fetchBasicSettings ~ currentRoof :', currentRoof) if (!currentRoof) return setBasicSettings({ ...basicSetting, roofSizeSet: String(currentRoof.roofSizeSet), roofAngleSet: currentRoof.roofAngleSet, roofsData: { roofApply: true, roofSeq: 0, roofMatlCd: currentRoof.roofMatlCd, roofWidth: currentRoof.width, roofHeight: currentRoof.length, roofHajebichi: currentRoof.hajebichi, roofGap: currentRoof.raft, roofLayout: currentRoof.layout, roofPitch: currentRoof.pitch, roofAngle: currentRoof.angle, }, }) }, [currentRoof]) const handleRoofSizeSetChange = (value) => { setCurrentRoof({ ...currentRoof, roofSizeSet: value }) } const handleRoofAngleSetChange = (value) => { setCurrentRoof({ ...currentRoof, roofAngleSet: value }) } // Function to update the roofType and corresponding values const handleRoofTypeChange = (value) => { const selectedRoofMaterial = roofMaterials.find((roof) => roof.roofMatlCd === value) setCurrentRoof({ ...selectedRoofMaterial, index: 0, roofSizeSet: String(currentRoof.roofSizeSet), roofAngleSet: currentRoof.roofAngleSet }) } const changeInput = (value, e) => { const { name } = e.target setCurrentRoof({ ...currentRoof, [name]: Number(value) }) } const handleRafterChange = (value) => { setCurrentRoof({ ...currentRoof, raft: value }) } const handleRoofLayoutChange = (value) => { setCurrentRoof({ ...currentRoof, layout: value }) } const handleSaveBtn = () => { const roofInfo = { ...currentRoof, roofCd: roofRef.roofCd.current?.value, width: roofRef.width.current?.value, length: roofRef.length.current?.value, hajebichi: roofRef.hajebichi.current?.value, raft: roofRef.rafter.current?.value, selected: true, layout: currentRoof.layout, index: 0, } const newAddedRoofs = [...addedRoofs] newAddedRoofs[0] = { ...roofInfo } setAddedRoofs(newAddedRoofs) console.log('save Info', { ...basicSetting, selectedRoofMaterial: { // 선택된 지붕재 정보 roofInfo, }, }) // 배치면초기설정 저장 basicSettingSave({ ...basicSetting, selectedRoofMaterial: { // 선택된 지붕재 정보 roofInfo, }, }) } return (

{getMessage('plan.menu.placement.surface.initial.setting')}

{getMessage('modal.placement.initial.setting.plan.drawing')} {getMessage('modal.placement.initial.setting.plan.drawing.size.stuff')}
{getMessage('modal.placement.initial.setting.size')}
{currentRoof && roofSizeSetArray.map((item) => (
setCurrentRoof({ ...currentRoof, roofSizeSet: e.target.value })} />
))}
{getMessage('modal.placement.initial.setting.roof.angle.setting')}
{currentRoof && roofAngleSetArray.map((item, index) => (
setCurrentRoof({ ...currentRoof, roofAngleSet: e.target.value })} />
index === 0 ? setCurrentRoof({ ...currentRoof, pitch: e.target.value }) : setCurrentRoof({ ...currentRoof, angle: e.target.value }) } />
{index === 0 ? '寸' : '度'}
))}
{getMessage('modal.placement.initial.setting.roof.material')}
{ return { ...roof, name: globalLocale === 'ko' ? roof.roofMatlNm : roof.roofMatlNmJp } })} value={currentRoof?.roofSizeSet === '3' ? null : currentRoof?.roofMatlCd} onChange={(e) => handleRoofTypeChange(e.roofMatlCd)} sourceKey="id" targetKey="id" showKey="name" disabled={currentRoof?.roofSizeSet === '3'} /> {/* */}
{currentRoof && ['R', 'C'].includes(currentRoof.widAuth) && (
W
onlyNumberInputChange(e, changeInput)} readOnly={currentRoof?.widAuth === 'R'} disabled={currentRoof?.roofSizeSet === '3'} />
{/*
*/}
)} {currentRoof && ['R', 'C'].includes(currentRoof.lenAuth) && (
L
onlyNumberInputChange(e, changeInput)} readOnly={currentRoof?.lenAuth === 'R'} disabled={currentRoof?.roofSizeSet === '3'} />
{/*
*/}
)} {currentRoof && ['C', 'R'].includes(currentRoof.raftAuth) && (
{getMessage('modal.placement.initial.setting.rafter')} {raftCodes?.length > 0 && (
r.clCode === (currentRoof?.raft === undefined ? currentRoof?.raftBaseCd : currentRoof?.raft)) .clCodeNm } value={currentRoof?.raft === undefined ? currentRoof?.raftBaseCd : currentRoof?.raft} onChange={(e) => handleRafterChange(e.clCode)} sourceKey="clCode" targetKey={currentRoof?.raft ? 'raft' : 'raftBaseCd'} showKey="clCodeNm" disabled={currentRoof?.roofSizeSet === '3'} /> {/* */}
)}
)} {currentRoof && ['C', 'R'].includes(currentRoof?.roofPchAuth) && (
{getMessage('hajebichi')}
onlyNumberInputChange(e, changeInput)} readOnly={currentRoof?.roofPchAuth === 'R'} disabled={currentRoof?.roofSizeSet === '3'} />
)}
{currentRoof && (
)}
{showSizeGuideModal && } {showMaterialGuideModal && }
) }