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 { useRecoilState } from 'recoil' import { Fragment, useEffect, useState } from 'react' import { canvasSettingState } from '@/store/canvasAtom' import { useMessage } from '@/hooks/useMessage' import { useAxios } from '@/hooks/useAxios' import { useSwal } from '@/hooks/useSwal' import { usePopup } from '@/hooks/usePopup' import { basicSettingState } from '@/store/settingAtom' import useRefFiles from '@/hooks/common/useRefFiles' export default function PlacementShapeSetting({ id, pos = { x: 50, y: 180 }, setShowPlaceShapeModal }) { const [objectNo, setObjectNo] = useState('test123241008001') // 후에 삭제 필요 const [showSizeGuideModal, setShowSizeGuidModal] = useState(false) const [showMaterialGuideModal, setShowMaterialGuidModal] = useState(false) const [selectedRoofMaterial, setSelectedRoofMaterial] = useState(1) const [canvasSetting, setCanvasSetting] = useRecoilState(canvasSettingState) const { closePopup } = usePopup() const [basicSetting, setBasicSettings] = useRecoilState(basicSettingState) const { refImage, setRefImage } = useRefFiles() const { getMessage } = useMessage() const { get, post } = useAxios() const { swalFire } = useSwal() // 데이터를 최초 한 번만 조회 useEffect(() => { console.log('PlacementShapeSetting useEffect 실행') fetchSettings() }, [objectNo]) // PlacementShapeSetting 조회 및 초기화 const fetchSettings = async () => { try { await get({ url: `/api/canvas-management/canvas-basic-settings/by-object/${objectNo}` }).then((res) => { if (res.length == 0) return // 'roofs' 배열을 생성하여 각 항목을 추가 const roofsRow = res.map((item) => { return { roofSizeSet: item.roofSizeSet, roofAngleSet: item.roofAngleSet, } }) const roofsArray = res.some((item) => !item.roofSeq) ? //최초 지붕재 추가 정보의 경우 roofsArray를 초기화 설정 res.map(() => ({ roofApply: true, roofSeq: 1, roofType: 1, roofWidth: 200, roofHeight: 200, roofHajebichi: 200, roofGap: 0, roofLayout: 'parallel', })) : res.map((item) => ({ roofApply: item.roofApply === '' || item.roofApply === false ? false : true, roofSeq: item.roofSeq, roofType: item.roofType, roofWidth: item.roofWidth, roofHeight: item.roofHeight, roofHajebichi: item.roofHajebichi, roofGap: item.roofGap, roofLayout: item.roofLayout, })) console.log('roofsArray ', roofsArray) // 나머지 데이터와 함께 'roofs' 배열을 patternData에 넣음 const patternData = { roofSizeSet: roofsRow[0].roofSizeSet, // 첫 번째 항목의 값을 사용 roofAngleSet: roofsRow[0].roofAngleSet, // 첫 번째 항목의 값을 사용 roofs: roofsArray, // 만들어진 roofs 배열 } // 데이터 설정 setBasicSettings({ ...patternData }) }) } catch (error) { console.error('Data fetching error:', error) } if (!(Object.keys(canvasSetting).length === 0 && canvasSetting.constructor === Object)) { setBasicSettings({ ...canvasSetting }) } } const submitCanvasConfig = async () => { try { const patternData = { objectNo, roofSizeSet: basicSetting.roofSizeSet, roofAngleSet: basicSetting.roofAngleSet, roofMaterialsAddList: basicSetting.roofs, } await post({ url: `/api/canvas-management/canvas-basic-settings`, data: patternData }).then((res) => { swalFire({ text: getMessage(res.returnMessage) }) }) //Recoil 설정 setCanvasSetting({ ...basicSetting }) } catch (error) { swalFire({ text: getMessage(res.returnMessage), icon: 'error' }) } } // Function to update the roofType and corresponding values const handleRoofTypeChange = (index, value) => { const updatedRoofs = [...basicSetting.roofs] const roofType = parseInt(value, 10) // Reset other values based on the selected roofType if (roofType === 1) { updatedRoofs[index] = { ...updatedRoofs[index], roofType: 1, roofWidth: 265, roofHeight: 235, roofGap: 455, hajebichi: 0, } } else if (roofType === 2) { updatedRoofs[index] = { ...updatedRoofs[index], roofType: 2, roofGap: 265, roofHajebichi: 265, roofWidth: 0, roofHeight: 0, } } else if (roofType === 3) { updatedRoofs[index] = { ...updatedRoofs[index], roofType: 3, roofHajebichi: 265, roofGap: 0, roofWidth: 0, roofHeight: 0, } } else if (roofType === 4) { updatedRoofs[index] = { ...updatedRoofs[index], roofType: 4, roofHeight: 265, roofGap: 265, roofHajebichi: 0, roofWidth: 0, } } setBasicSettings({ ...basicSetting, roofs: updatedRoofs, }) } 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')}
setBasicSettings({ ...basicSetting, roofSizeSet: e.target.value })} // 상태 업데이트 />
setBasicSettings({ ...basicSetting, roofSizeSet: e.target.value })} // 상태 업데이트 />
setBasicSettings({ ...basicSetting, roofSizeSet: e.target.value })} // 상태 업데이트 />
{getMessage('modal.placement.initial.setting.roof.angle.setting')}
setBasicSettings({ ...basicSetting, roofAngleSet: e.target.value })} // 상태 업데이트 />
setBasicSettings({ ...basicSetting, roofAngleSet: e.target.value })} // 상태 업데이트 />
{getMessage('modal.placement.initial.setting.roof.material')}
{basicSetting.roofs[0].roofType === 1 ? ( <>
W
L
{getMessage('modal.placement.initial.setting.rafter')}
) : basicSetting.roofs[0].roofType === 2 ? ( <>
{getMessage('hajebichi')}
{getMessage('modal.placement.initial.setting.rafter')}
) : basicSetting.roofs[0].roofType === 3 ? ( <>
{getMessage('hajebichi')}
) : basicSetting.roofs[0].roofType === 4 ? ( <>
L
{getMessage('modal.placement.initial.setting.rafter')}
) : ( '' )}
{getMessage('common.input.file')}
setRefImage(e.target.files[0])} />
{refImage && }
{showSizeGuideModal && } {showMaterialGuideModal && }
) }