90 lines
3.1 KiB
JavaScript
90 lines
3.1 KiB
JavaScript
'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 }
|
|
}
|