From 32212a992f5f605004340a1ae7b4e4900d648305 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Sun, 10 Sep 2023 21:18:03 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=BF=9E=E7=BB=AD=E7=B2=98=E8=B4=B4?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=88#70=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useAddSlidesOrElements.ts | 38 +++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/hooks/useAddSlidesOrElements.ts b/src/hooks/useAddSlidesOrElements.ts index 598d9fcd..1e7fcd65 100644 --- a/src/hooks/useAddSlidesOrElements.ts +++ b/src/hooks/useAddSlidesOrElements.ts @@ -3,7 +3,7 @@ import { storeToRefs } from 'pinia' import { nanoid } from 'nanoid' import { useSlidesStore, useMainStore } from '@/store' import type { PPTElement, Slide } from '@/types/slides' -import { createSlideIdMap, createElementIdMap } from '@/utils/element' +import { createSlideIdMap, createElementIdMap, getElementRange } from '@/utils/element' import useHistorySnapshot from '@/hooks/useHistorySnapshot' export default () => { @@ -19,17 +19,39 @@ export default () => { */ const addElementsFromData = (elements: PPTElement[]) => { const { groupIdMap, elIdMap } = createElementIdMap(elements) - const currentSlideElementIdList = currentSlide.value.elements.map(el => el.id) + + const firstElement = elements[0] + let offset = 0 + let lastSameElement: PPTElement | undefined + + do { + lastSameElement = currentSlide.value.elements.find(el => { + if (el.type !== firstElement.type) return false + + const { minX: oMinX, maxX: oMaxX, minY: oMinY, maxY: oMaxY } = getElementRange(el) + const { minX: nMinX, maxX: nMaxX, minY: nMinY, maxY: nMaxY } = getElementRange({ + ...firstElement, + left: firstElement.left + offset, + top: firstElement.top + offset + }) + if ( + oMinX === nMinX && + oMaxX === nMaxX && + oMinY === nMinY && + oMaxY === nMaxY + ) return true + + return false + }) + if (lastSameElement) offset += 10 + + } while (lastSameElement) for (const element of elements) { - const inCurrentSlide = currentSlideElementIdList.includes(element.id) - element.id = elIdMap[element.id] - if (inCurrentSlide) { - element.left = element.left + 10 - element.top = element.top + 10 - } + element.left = element.left + offset + element.top = element.top + offset if (element.groupId) element.groupId = groupIdMap[element.groupId] }