Browse Source

fix: fold persist (#820)

Shuyoou 4 months ago
parent
commit
f03005cd4a
2 changed files with 28 additions and 13 deletions
  1. 25 13
      client/src/pages/play/language/extensions/fold.ts
  2. 3 0
      client/vite.config.mts

+ 25 - 13
client/src/pages/play/language/extensions/fold.ts

@@ -50,19 +50,31 @@ export const customFoldGutter = () => {
 
 export const persistFoldState = () => {
   return EditorView.updateListener.of(update => {
-    for (const tr of update.transactions) {
-      for (const effect of tr.effects) {
-        if (effect.is(foldEffect) || effect.is(unfoldEffect)) {
-          const view = update.view;
-          const folded = view.state.field(foldState);
-          const lineRanges: Array<{ from: number; to: number }> = [];
-          folded.between(0, view.state.doc.length, (from, to) => {
-            lineRanges.push({ from, to });
-          });
-          localStorage.setItem(
-            ATTU_PLAY_FOLD_STATE,
-            JSON.stringify(lineRanges)
-          );
+    if (update.docChanged) {
+      // Handle document changes
+      const view = update.view;
+      const folded = view.state.field(foldState);
+      const lineRanges: Array<{ from: number; to: number }> = [];
+      folded.between(0, view.state.doc.length, (from, to) => {
+        lineRanges.push({ from, to });
+      });
+      localStorage.setItem(ATTU_PLAY_FOLD_STATE, JSON.stringify(lineRanges));
+    } else {
+      // Handle fold/unfold effects
+      for (const tr of update.transactions) {
+        for (const effect of tr.effects) {
+          if (effect.is(foldEffect) || effect.is(unfoldEffect)) {
+            const view = update.view;
+            const folded = view.state.field(foldState);
+            const lineRanges: Array<{ from: number; to: number }> = [];
+            folded.between(0, view.state.doc.length, (from, to) => {
+              lineRanges.push({ from, to });
+            });
+            localStorage.setItem(
+              ATTU_PLAY_FOLD_STATE,
+              JSON.stringify(lineRanges)
+            );
+          }
         }
       }
     }

+ 3 - 0
client/vite.config.mts

@@ -24,6 +24,9 @@ export default defineConfig({
       },
     },
   },
+  optimizeDeps: {
+    include: ['@emotion/react', '@emotion/styled'],
+  },
   plugins: [
     react(),
     svgr({