Skip to content

Commit

Permalink
perf: 连续粘贴优化(#70
Browse files Browse the repository at this point in the history
  • Loading branch information
pipipi-pikachu committed Sep 10, 2023
1 parent d2ca9af commit 32212a9
Showing 1 changed file with 30 additions and 8 deletions.
38 changes: 30 additions & 8 deletions src/hooks/useAddSlidesOrElements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand All @@ -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]
}
Expand Down

0 comments on commit 32212a9

Please sign in to comment.