refactor: canvas plan 변경사항 확인하는 함수 수정, canvas와 db간 저장포맷 수정
This commit is contained in:
parent
df335960e7
commit
fd1bbe46d4
@ -54,6 +54,7 @@ export function usePlan() {
|
|||||||
'y2',
|
'y2',
|
||||||
'attributes',
|
'attributes',
|
||||||
'stickeyPoint',
|
'stickeyPoint',
|
||||||
|
'text',
|
||||||
])
|
])
|
||||||
|
|
||||||
const str = JSON.stringify(objs)
|
const str = JSON.stringify(objs)
|
||||||
@ -76,32 +77,49 @@ export function usePlan() {
|
|||||||
*/
|
*/
|
||||||
const checkModifiedCanvasPlan = () => {
|
const checkModifiedCanvasPlan = () => {
|
||||||
removeMouseLines()
|
removeMouseLines()
|
||||||
const canvasStr = addCanvas()
|
const canvasStatus = addCanvas()
|
||||||
const canvasStatus = dbToCanvasFormat(canvasToDbFormat(canvasStr))
|
|
||||||
const initPlanData = initCanvasPlans.find((plan) => plan.id === currentCanvasPlan.id)
|
const initPlanData = initCanvasPlans.find((plan) => plan.id === currentCanvasPlan.id)
|
||||||
if (JSON.parse(canvasStr).objects.length === 0 && initPlanData === undefined) {
|
|
||||||
// 저장 안 된 빈 캔버스
|
if (!initPlanData) {
|
||||||
return false
|
// 새로운 캔버스
|
||||||
} else if (initPlanData && canvasStatus === initPlanData.canvasStatus) {
|
return JSON.parse(canvasStatus).objects.length > 0
|
||||||
// 저장 되어있고 변경사항 없는 캔버스
|
|
||||||
return false
|
|
||||||
} else {
|
} else {
|
||||||
return true
|
// 저장된 캔버스
|
||||||
|
if (canvasStatus === initPlanData.canvasStatus) {
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
// 각각 object들의 id 목록을 추출하여 비교
|
||||||
|
const canvasObjsIds = getObjectIds(JSON.parse(canvasStatus).objects)
|
||||||
|
const dbObjsIds = getObjectIds(JSON.parse(initPlanData.canvasStatus).objects)
|
||||||
|
|
||||||
|
return canvasObjsIds.length !== dbObjsIds.length || !canvasObjsIds.every((id, index) => id === dbObjsIds[index])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const getObjectIds = (objects) => {
|
||||||
|
return objects
|
||||||
|
.filter((obj) => obj.hasOwnProperty('id'))
|
||||||
|
.map((obj) => obj.id)
|
||||||
|
.sort()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DB에 저장된 데이터를 canvas에서 사용할 수 있도록 포맷화
|
* DB에 저장된 데이터를 canvas에서 사용할 수 있도록 포맷화
|
||||||
*/
|
*/
|
||||||
const dbToCanvasFormat = (cs) => {
|
const dbToCanvasFormat = (cs) => {
|
||||||
return JSON.stringify(cs.replace(/##/g, '"').replace(/\\/g, '').slice(1, -1))
|
// return JSON.stringify(cs.replace(/##/g, '"')) //.replace(/\\/g, ''))//.slice(1, -1))
|
||||||
|
// JSON.stringify()를 사용하면 "가 \"로 바뀐다. 따라서, JSON.stringify를 제거
|
||||||
|
// canvasToDbFormat()에서 \\의 상황을 없앴으므로 replace(/\\/g, '')를 제거
|
||||||
|
return cs.replace(/##/g, '"')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* canvas의 데이터를 DB에 저장할 수 있도록 포맷화
|
* canvas의 데이터를 DB에 저장할 수 있도록 포맷화
|
||||||
*/
|
*/
|
||||||
const canvasToDbFormat = (cs) => {
|
const canvasToDbFormat = (cs) => {
|
||||||
return JSON.stringify(cs).replace(/"/g, '##')
|
// return JSON.stringify(cs).replace(/"/g, '##')
|
||||||
|
// addCanvas()에서 JSON.stringify()를 거쳐서 나오는데, 또 감싸버려서 \가 \\로 된다. 따라서, JSON.stringify를 제거
|
||||||
|
return cs.replace(/"/g, '##')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -130,9 +148,7 @@ export function usePlan() {
|
|||||||
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) =>
|
setPlans((plans) => plans.map((plan) => (plan.id === currentCanvasPlan.id ? { ...plan, canvasStatus: canvasStatus } : plan)))
|
||||||
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' })
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user