'use client' import { useRecoilState, useRecoilValue } from 'recoil' import useSWRMutation from 'swr/mutation' import { useAxios } from '../useAxios' import { unescapeString } from '@/util/common-utils' import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' import { compasDegAtom } from '@/store/orientationAtom' import { canvasState, currentCanvasPlanState } from '@/store/canvasAtom' import { POLYGON_TYPE } from '@/common/common' /** * 캔버스 팝업 상태 관리 * @param {*} param * @returns */ export function useCanvasPopupStatusController(param = 1) { const popupType = parseInt(param) const [compasDeg, setCompasDeg] = useRecoilState(compasDegAtom) const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) const { get, promiseGet, getFetcher, postFetcher } = useAxios() const canvas = useRecoilValue(canvasState) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) /** * 팝업 상태 조회 * @param {number} popupTypeParam * @returns */ const getModuleSelection = async (popupTypeParam) => { const result = await promiseGet({ url: `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`, }) .then((res) => { return res }) .catch((err) => { console.log('🚀 ~ getModuleSelection ~ err:', err) return null }) return result.data } /** * 전체 팝업 상태 조회 * 조회 후 전체 데이터 recoil에 저장 */ const handleModuleSelectionTotal = async () => { for (let i = 1; i < 3; i++) { const result = await getModuleSelection(i) console.log('🚀 ~ handleModuleSelectionTotal ~ result:', result) if (!result.objectNo) return if (i === 1) { setCompasDeg(result.popupStatus) } else if (i === 2) { const data = JSON.parse(unescapeString(result.popupStatus)) setModuleSelectionDataStore(data) if (data.module) setSelectedModules(data.module) const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) roofSurfaceList.forEach((surface) => { surface.modules = modules.filter((module) => module.surfaceId === surface.id) }) } } } /** * 팝업 상태 저장 */ const { trigger, isMutating } = useSWRMutation( `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupType}`, (url, { arg }) => { const params = { objectNo: currentCanvasPlan.objectNo, planNo: parseInt(currentCanvasPlan.planNo), popupType: popupType.toString(), popupStatus: popupType === 1 ? arg : JSON.stringify(arg).replace(/"/g, '\"'), } postFetcher(`/api/v1/canvas-popup-status`, params) }, ) return { handleModuleSelectionTotal, trigger } }