refactor: canvas plan 저장 시 데이터 동기화 로직 수정
This commit is contained in:
parent
0c6bd17710
commit
c9ae8f87e0
@ -7,15 +7,15 @@ import { useMessage } from '@/hooks/useMessage'
|
|||||||
import { useSwal } from '@/hooks/useSwal'
|
import { useSwal } from '@/hooks/useSwal'
|
||||||
import { usePlan } from '@/hooks/usePlan'
|
import { usePlan } from '@/hooks/usePlan'
|
||||||
import { globalLocaleStore } from '@/store/localeAtom'
|
import { globalLocaleStore } from '@/store/localeAtom'
|
||||||
import { currentCanvasPlanState, initCanvasPlansState } from '@/store/canvasAtom'
|
import { currentCanvasPlanState, initCanvasPlansState, plansState } from '@/store/canvasAtom'
|
||||||
import { sessionStore } from '@/store/commonAtom'
|
import { sessionStore } from '@/store/commonAtom'
|
||||||
|
|
||||||
export default function CanvasLayout() {
|
export default function CanvasLayout() {
|
||||||
const [objectNo, setObjectNo] = useState('test123240822001') // 이후 삭제 필요
|
const [objectNo, setObjectNo] = useState('test123240822001') // 이후 삭제 필요
|
||||||
const [plans, setPlans] = useState([])
|
|
||||||
const [planNum, setPlanNum] = useState(0)
|
const [planNum, setPlanNum] = useState(0)
|
||||||
const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
|
const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
|
||||||
const [initCanvasPlans, setInitCanvasPlans] = useRecoilState(initCanvasPlansState)
|
const [initCanvasPlans, setInitCanvasPlans] = useRecoilState(initCanvasPlansState)
|
||||||
|
const [plans, setPlans] = useRecoilState(plansState)
|
||||||
const globalLocaleState = useRecoilValue(globalLocaleStore)
|
const globalLocaleState = useRecoilValue(globalLocaleStore)
|
||||||
const sessionState = useRecoilValue(sessionStore)
|
const sessionState = useRecoilValue(sessionStore)
|
||||||
|
|
||||||
@ -32,40 +32,25 @@ export default function CanvasLayout() {
|
|||||||
html: getMessage('common.message.confirm.save') + `</br>${currentCanvasPlan.name}`,
|
html: getMessage('common.message.confirm.save') + `</br>${currentCanvasPlan.name}`,
|
||||||
type: 'confirm',
|
type: 'confirm',
|
||||||
confirmFn: async () => {
|
confirmFn: async () => {
|
||||||
saveCanvas(sessionState.userId)
|
await saveCanvas(sessionState.userId)
|
||||||
/**
|
updateCurrentPlan(newCurrentId)
|
||||||
* TODO: 신규 canvas plan 저장 시 id, name 등 데이터 동기화 필요 (40~51Line)
|
|
||||||
*/
|
|
||||||
initCanvasPlans.map((initPlan) => {
|
|
||||||
if ('isNew' in initPlan) {
|
|
||||||
// console.log('================ isNew initPlan: ', initPlan)
|
|
||||||
setPlans((plans) =>
|
|
||||||
plans.map((plan) => {
|
|
||||||
initPlan.isNew === plan.id
|
|
||||||
? { ...plan, id: initPlan.id, name: initPlan.name, canvasStatus: initPlan.canvasStatus, isCurrent: plan.id === newCurrentId }
|
|
||||||
: { ...plan, isCurrent: plan.id === newCurrentId }
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
denyFn: () => {
|
denyFn: () => {
|
||||||
setPlans((plans) =>
|
updateCurrentPlan(newCurrentId)
|
||||||
plans.map((plan) => {
|
|
||||||
return { ...plan, isCurrent: plan.id === newCurrentId }
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
setPlans((plans) =>
|
updateCurrentPlan(newCurrentId)
|
||||||
plans.map((plan) => {
|
|
||||||
return { ...plan, isCurrent: plan.id === newCurrentId }
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const updateCurrentPlan = (newCurrentId) => {
|
||||||
|
setPlans((plans) =>
|
||||||
|
plans.map((plan) => {
|
||||||
|
return { ...plan, isCurrent: plan.id === newCurrentId }
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setCurrentCanvasPlan(plans.find((plan) => plan.isCurrent) || null)
|
setCurrentCanvasPlan(plans.find((plan) => plan.isCurrent) || null)
|
||||||
}, [plans])
|
}, [plans])
|
||||||
@ -86,7 +71,7 @@ export default function CanvasLayout() {
|
|||||||
// console.error('[DELETE] canvas-statuses res error :::::::: %o', error)
|
// console.error('[DELETE] canvas-statuses res error :::::::: %o', error)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
setPlans(plans.filter((plan) => plan.id !== id))
|
setPlans((plans) => plans.filter((plan) => plan.id !== id))
|
||||||
swalFire({ text: getMessage('common.message.delete') })
|
swalFire({ text: getMessage('common.message.delete') })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { useRecoilState } from 'recoil'
|
import { useRecoilState } from 'recoil'
|
||||||
import { canvasState, currentCanvasPlanState, initCanvasPlansState } from '@/store/canvasAtom'
|
import { canvasState, currentCanvasPlanState, initCanvasPlansState, plansState } from '@/store/canvasAtom'
|
||||||
import { useAxios } from '@/hooks/useAxios'
|
import { useAxios } from '@/hooks/useAxios'
|
||||||
import { useMessage } from '@/hooks/useMessage'
|
import { useMessage } from '@/hooks/useMessage'
|
||||||
import { useSwal } from '@/hooks/useSwal'
|
import { useSwal } from '@/hooks/useSwal'
|
||||||
@ -8,6 +8,7 @@ export function usePlan() {
|
|||||||
const [canvas, setCanvas] = useRecoilState(canvasState)
|
const [canvas, setCanvas] = useRecoilState(canvasState)
|
||||||
const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
|
const [currentCanvasPlan, setCurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
|
||||||
const [initCanvasPlans, setInitCanvasPlans] = useRecoilState(initCanvasPlansState)
|
const [initCanvasPlans, setInitCanvasPlans] = useRecoilState(initCanvasPlansState)
|
||||||
|
const [plans, setPlans] = useRecoilState(plansState)
|
||||||
const { swalFire } = useSwal()
|
const { swalFire } = useSwal()
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
const { get, promisePost, promisePut, promiseDel } = useAxios()
|
const { get, promisePost, promisePut, promiseDel } = useAxios()
|
||||||
@ -77,11 +78,12 @@ export function usePlan() {
|
|||||||
removeMouseLines()
|
removeMouseLines()
|
||||||
const canvasStr = addCanvas()
|
const canvasStr = addCanvas()
|
||||||
const canvasStatus = dbToCanvasFormat(canvasToDbFormat(canvasStr))
|
const canvasStatus = dbToCanvasFormat(canvasToDbFormat(canvasStr))
|
||||||
if (JSON.parse(canvasStr).objects.length === 0 && currentCanvasPlan.canvasStatus === undefined) {
|
const initPlanData = initCanvasPlans.find((plan) => plan.id === currentCanvasPlan.id)
|
||||||
// 빈 캔버스
|
if (JSON.parse(canvasStr).objects.length === 0 && initPlanData === undefined) {
|
||||||
|
// 저장 안 된 빈 캔버스
|
||||||
return false
|
return false
|
||||||
} else if (canvasStatus === currentCanvasPlan.canvasStatus) {
|
} else if (initPlanData && canvasStatus === initPlanData.canvasStatus) {
|
||||||
// 변경사항 없는 캔버스
|
// 저장 되어있고 변경사항 없는 캔버스
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
return true
|
return true
|
||||||
@ -121,13 +123,16 @@ export function usePlan() {
|
|||||||
canvasStatus: canvasToDbFormat(canvasStatus),
|
canvasStatus: canvasToDbFormat(canvasStatus),
|
||||||
}
|
}
|
||||||
|
|
||||||
await promisePut({ url: '/api/canvas-management/canvas-statuses', data: planData })
|
return await promisePut({ url: '/api/canvas-management/canvas-statuses', data: planData })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
swalFire({ text: getMessage('common.message.save') })
|
swalFire({ text: getMessage('common.message.save') })
|
||||||
// console.log('[PUT] canvas-statuses res :::::::: %o', res)
|
// console.log('[PUT] canvas-statuses res :::::::: %o', res)
|
||||||
setInitCanvasPlans((initCanvasPlans) =>
|
setInitCanvasPlans((initCanvasPlans) =>
|
||||||
initCanvasPlans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan)),
|
initCanvasPlans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan)),
|
||||||
)
|
)
|
||||||
|
setPlans((plans) =>
|
||||||
|
plans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan)),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
swalFire({ text: error.message, icon: 'error' })
|
swalFire({ text: error.message, icon: 'error' })
|
||||||
@ -142,14 +147,34 @@ export function usePlan() {
|
|||||||
canvasStatus: canvasToDbFormat(canvasStatus),
|
canvasStatus: canvasToDbFormat(canvasStatus),
|
||||||
}
|
}
|
||||||
|
|
||||||
await promisePost({ url: '/api/canvas-management/canvas-statuses', data: planData })
|
return await promisePost({ url: '/api/canvas-management/canvas-statuses', data: planData })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
swalFire({ text: getMessage('common.message.save') })
|
swalFire({ text: getMessage('common.message.save') })
|
||||||
setInitCanvasPlans([
|
|
||||||
...initCanvasPlans,
|
|
||||||
{ id: res.data, name: currentCanvasPlan.objectNo + '-' + res.data, userId: userId, canvasStatus: canvasStatus, isNew: currentCanvasPlan.id },
|
|
||||||
])
|
|
||||||
// console.log('[POST] canvas-statuses response :::::::: %o', res)
|
// console.log('[POST] canvas-statuses response :::::::: %o', res)
|
||||||
|
setInitCanvasPlans((initCanvasPlans) => [
|
||||||
|
...initCanvasPlans,
|
||||||
|
{
|
||||||
|
id: res.data,
|
||||||
|
name: currentCanvasPlan.objectNo + '-' + res.data,
|
||||||
|
userId: userId,
|
||||||
|
canvasStatus: canvasStatus,
|
||||||
|
isNew: currentCanvasPlan.id,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
setPlans((plans) =>
|
||||||
|
plans.map((plan) =>
|
||||||
|
plan.id === currentCanvasPlan.id
|
||||||
|
? {
|
||||||
|
...plan,
|
||||||
|
id: res.data,
|
||||||
|
name: currentCanvasPlan.objectNo + '-' + res.data,
|
||||||
|
userId: userId,
|
||||||
|
canvasStatus: canvasStatus,
|
||||||
|
isNew: currentCanvasPlan.id,
|
||||||
|
}
|
||||||
|
: plan,
|
||||||
|
),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
swalFire({ text: error.message, icon: 'error' })
|
swalFire({ text: error.message, icon: 'error' })
|
||||||
|
|||||||
@ -264,6 +264,12 @@ export const currentCanvasPlanState = atom({
|
|||||||
default: {},
|
default: {},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 전체 canvas plan
|
||||||
|
export const plansState = atom({
|
||||||
|
key: 'plan',
|
||||||
|
default: [],
|
||||||
|
})
|
||||||
|
|
||||||
export const tempGridModeState = atom({
|
export const tempGridModeState = atom({
|
||||||
key: 'tempGridModeState',
|
key: 'tempGridModeState',
|
||||||
default: false,
|
default: false,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user