Browse Source

fix: collapsed state not persisted in their files

Tienson Qin 3 years ago
parent
commit
4c8d852947
1 changed files with 26 additions and 16 deletions
  1. 26 16
      src/main/frontend/modules/file/core.cljs

+ 26 - 16
src/main/frontend/modules/file/core.cljs

@@ -7,15 +7,28 @@
             [frontend.db.utils :as db-utils]
             [frontend.state :as state]
             [frontend.util :as util]
-            [frontend.debug :as debug]))
+            [frontend.debug :as debug]
+            [frontend.util.property :as property]))
 
 (defn- indented-block-content
   [content spaces-tabs]
   (let [lines (string/split-lines content)]
     (string/join (str "\n" spaces-tabs) lines)))
 
+(defn- content-with-collapsed-state
+  [format content collapsed? properties]
+  (cond
+    collapsed?
+    (property/insert-property format content :collapsed true)
+
+    (and (:collapsed properties) (false? collapsed?))
+    (property/remove-property format :collapsed content)
+
+    :else
+    content))
+
 (defn transform-content
-  [{:block/keys [format pre-block? unordered content heading-level left page parent]} level {:keys [heading-to-list?]}]
+  [{:block/keys [collapsed? format pre-block? unordered content heading-level left page parent properties]} level {:keys [heading-to-list?]}]
   (let [content (or content "")
         first-block? (= left page)
         pre-block? (and first-block? pre-block?)
@@ -60,7 +73,7 @@
                               ""
                               " ")]
                     (str prefix sep new-content)))]
-    content))
+    (content-with-collapsed-state format content collapsed? properties)))
 
 (defn tree->file-content
   [tree {:keys [init-level]
@@ -68,19 +81,16 @@
   (loop [block-contents []
          [f & r] tree
          level init-level]
-    (let [f (if (:block/collapsed? f)
-              (assoc-in f [:block/properties :collapsed] true)
-              f)]
-      (if (nil? f)
-        (string/join "\n" block-contents)
-        (let [page? (nil? (:block/page f))
-              content (if page? nil (transform-content f level opts))
-              new-content
-              (->> (if-let [children (seq (:block/children f))]
-                     [content (tree->file-content children {:init-level (inc level)})]
-                     [content])
-                   (remove nil?))]
-          (recur (into block-contents new-content) r level))))))
+    (if (nil? f)
+      (string/join "\n" block-contents)
+      (let [page? (nil? (:block/page f))
+            content (if page? nil (transform-content f level opts))
+            new-content
+            (->> (if-let [children (seq (:block/children f))]
+                   [content (tree->file-content children {:init-level (inc level)})]
+                   [content])
+                 (remove nil?))]
+        (recur (into block-contents new-content) r level)))))
 
 (def init-level 1)