瀏覽代碼

fix: do not deselect shapes

Peng Xiao 3 年之前
父節點
當前提交
e9d71cc217

+ 1 - 1
tldraw/demo/src/App.jsx

@@ -145,7 +145,7 @@ export default function App() {
   React.useEffect(() => {
     const interval = setInterval(() => {
       setModel(onLoad())
-    }, 5000)
+    }, 2000)
 
     return () => {
       clearInterval(interval)

+ 0 - 10
tldraw/demo/vite.config.js

@@ -33,16 +33,6 @@ export default defineConfig({
         find: 'tldraw-logseq',
         replacement: bases.tldrawLogseq,
       },
-      {
-        find: /~(.*)/,
-        replacement: '$1',
-        customResolver: (id, importer) => {
-          if (id) {
-            const base = Object.values(bases).find(value => importer.startsWith(value))
-            return base ? path.join('/@fs', base, id) : null
-          }
-        },
-      },
       {
         find: '@tldraw/core',
         replacement: bases.core,

+ 3 - 4
tldraw/packages/core/src/lib/TLHistory.ts

@@ -1,6 +1,6 @@
 import { computed, makeObservable, transaction } from 'mobx'
 import type { TLEventMap } from '../types'
-import { deepEqual } from '../utils'
+import { dedupe, deepEqual } from '../utils'
 import type { TLShape } from './shapes'
 import type { TLApp, TLDocumentModel } from './TLApp'
 import { TLPage } from './TLPage'
@@ -94,12 +94,11 @@ export class TLHistory<S extends TLShape = TLShape, K extends TLEventMap = TLEve
 
   deserialize = (snapshot: TLDocumentModel) => {
     transaction(() => {
-      const { currentPageId, selectedIds, pages } = snapshot
+      const { selectedIds, pages } = snapshot
       const wasPaused = this.isPaused
       this.pause()
 
-      const newSelectedIds =
-        selectedIds.length === 0 ? Array.from(this.app.selectedIds) : selectedIds
+      const newSelectedIds = dedupe([...this.app.selectedIds, ...selectedIds])
 
       try {
         const pagesMap = new Map(this.app.pages)

+ 1 - 0
tldraw/packages/core/src/lib/TLPage/TLPage.ts

@@ -70,6 +70,7 @@ export class TLPage<S extends TLShape = TLShape, E extends TLEventMap = TLEventM
         .map(s => toJS(s)),
       bindings: deepCopy(this.bindings),
       nonce: this.nonce,
+      selectedIds: deepCopy(this.app.selectedIds),
     }
   }
 

+ 4 - 0
tldraw/packages/core/src/utils/index.ts

@@ -58,6 +58,10 @@ export function debounce<T extends (...args: any[]) => void>(
   }
 }
 
+export function dedupe<T>(arr: T[]) {
+  return [...new Set(arr)]
+}
+
 /** Linear interpolate between two values. */
 export function lerp(a: number, b: number, t: number) {
   return a + (b - a) * t