'use client' import { useEffect, useState } from 'react' import { useRecoilState, useRecoilValue } from 'recoil' import CanvasFrame from './CanvasFrame' import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' import { usePlan } from '@/hooks/usePlan' import { globalLocaleStore } from '@/store/localeAtom' import { currentCanvasPlanState, initCanvasPlansState, plansState } from '@/store/canvasAtom' import { sessionStore } from '@/store/commonAtom' export default function CanvasLayout() { const [objectNo, setObjectNo] = useState('test123240822001') // 이후 삭제 필요 const [planNum, setPlanNum] = useState(0) const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState) const [initCanvasPlans, setInitCanvasPlans] = useRecoilState(initCanvasPlansState) const [plans, setPlans] = useRecoilState(plansState) const globalLocaleState = useRecoilValue(globalLocaleStore) const sessionState = useRecoilValue(sessionStore) const { getMessage } = useMessage() const { swalFire } = useSwal() const { getCanvasByObjectNo, delCanvasById, checkModifiedCanvasPlan, saveCanvas } = usePlan() const handleCurrentPlan = (newCurrentId) => { // console.log('currentPlan newCurrentId: ', newCurrentId) if (!currentCanvasPlan || currentCanvasPlan.id !== newCurrentId) { if (currentCanvasPlan?.id && checkModifiedCanvasPlan()) { swalFire({ html: getMessage('common.message.confirm.save') + `
${currentCanvasPlan.name}`, type: 'confirm', confirmFn: async () => { await saveCanvas(sessionState.userId) updateCurrentPlan(newCurrentId) }, denyFn: () => { updateCurrentPlan(newCurrentId) }, }) } else { updateCurrentPlan(newCurrentId) } } } const updateCurrentPlan = (newCurrentId) => { setPlans((plans) => plans.map((plan) => { return { ...plan, isCurrent: plan.id === newCurrentId } }), ) } useEffect(() => { setCurrentCanvasPlan(plans.find((plan) => plan.isCurrent) || null) }, [plans]) const handleDeletePlan = (e, id) => { e.stopPropagation() // 이벤트 버블링 방지 if (initCanvasPlans.some((plan) => plan.id === id)) { delCanvasById(id) .then((res) => { swalFire({ text: getMessage('common.message.delete') }) // console.log('[DELETE] canvas-statuses res :::::::: %o', res) setInitCanvasPlans((initCanvasPlans) => initCanvasPlans.filter((plan) => plan.id !== id)) setPlans((plans) => plans.filter((plan) => plan.id !== id)) }) .catch((error) => { swalFire({ text: error.message, icon: 'error' }) // console.error('[DELETE] canvas-statuses res error :::::::: %o', error) }) } else { setPlans((plans) => plans.filter((plan) => plan.id !== id)) swalFire({ text: getMessage('common.message.delete') }) } // 삭제 후 last 데이터에 포커싱 const lastPlan = plans.filter((plan) => plan.id !== id).at(-1) if (!lastPlan) { setPlanNum(0) setCurrentCanvasPlan(null) } else if (id !== lastPlan.id) { handleCurrentPlan(lastPlan.id) } } const addNewPlan = () => { setPlans([...plans, { id: planNum, name: `Plan ${planNum + 1}`, objectNo: `${objectNo}` }]) handleCurrentPlan(planNum) setPlanNum(planNum + 1) } useEffect(() => { if (!currentCanvasPlan) { getCanvasByObjectNo(sessionState.userId, objectNo).then((res) => { // console.log('canvas 목록 ', res) if (res.length > 0) { setInitCanvasPlans(res) setPlans(res) handleCurrentPlan(res.at(-1).id) // last 데이터에 포커싱 setPlanNum(res.length) } else { addNewPlan() } }) } }, []) return (
{plans.map((plan) => ( ))}
plan.isCurrent === true)} />
) }