1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-30 10:29:48 +02:00

transform.delete and transform.insertFragment performance optimize (#5137)

* feat: transform.delete and transform.insertFragment performance optimize

* feat: add changeset

* feat: optimize code

Co-authored-by: mainhanu <chijun89@gmail.com>
This commit is contained in:
mainhanu
2022-10-19 20:38:34 +08:00
committed by GitHub
parent c19ab7853f
commit a2184d8657
3 changed files with 118 additions and 113 deletions

View File

@@ -0,0 +1,5 @@
---
'slate': minor
---
transform.delete and transform.insertFragment performance optimize

View File

@@ -1,4 +1,3 @@
import { produce } from 'immer'
import { Operation } from '..'
import { TextDirection } from './types'
@@ -373,16 +372,15 @@ export const Path: PathInterface = {
operation: Operation,
options: PathTransformOptions = {}
): Path | null {
return produce(path, p => {
if (!path) return null
// PERF: use destructing instead of immer
const p = [...path]
const { affinity = 'forward' } = options
// PERF: Exit early if the operation is guaranteed not to have an effect.
if (!path || path?.length === 0) {
return
}
if (p === null) {
return null
if (path.length === 0) {
return p
}
switch (operation.type) {
@@ -451,7 +449,7 @@ export const Path: PathInterface = {
// If the old and new path are the same, it's a no-op.
if (Path.equals(op, onp)) {
return
return p
}
if (Path.isAncestor(op, p) || Path.equals(op, p)) {
@@ -492,6 +490,7 @@ export const Path: PathInterface = {
break
}
}
})
return p
},
}

View File

@@ -187,10 +187,11 @@ export const TextTransforms: TextTransforms = {
}
}
for (const pathRef of pathRefs) {
const path = pathRef.unref()!
Transforms.removeNodes(editor, { at: path, voids })
}
pathRefs
.reverse()
.map(r => r.unref())
.filter((r): r is Path => r !== null)
.forEach(p => Transforms.removeNodes(editor, { at: p, voids }))
if (!endVoid) {
const point = endRef.current!