diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index 77f5b9b7..00c480c8 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -1,6 +1,6 @@ 'use client' -import { useContext, useEffect, useState } from 'react' +import { useContext, useEffect, useRef, useState } from 'react' import { usePathname, useRouter } from 'next/navigation' import { useRecoilState, useResetRecoilState, useSetRecoilState } from 'recoil' @@ -475,13 +475,19 @@ export function usePlan(params = {}) { } } + // usePlan() 인스턴스가 새로 mount 될 때 clearStacks 가 실수로 호출되지 않도록 + // 직전 플랜 id 를 ref 로 보관하고, 실제 id 변경이 일어났을 때만 스택을 비운다. + const prevPlanIdRef = useRef(currentCanvasPlan?.id) useEffect(() => { setSelectedPlan(currentCanvasPlan) handleCurrentPlanUrl() // resetCurrentObject() resetModuleSetupSurface() - // 플랜 전환 시 이전 플랜의 undo/redo 히스토리는 의미가 없으므로 초기화한다. - clearStacks() + // 플랜 ID가 실제로 바뀐 경우에만 undo/redo 히스토리를 초기화한다. + if (prevPlanIdRef.current !== currentCanvasPlan?.id) { + clearStacks() + prevPlanIdRef.current = currentCanvasPlan?.id + } }, [currentCanvasPlan]) /**