refactor(db): with-dummy-block

This commit is contained in:
defclass
2020-12-17 11:13:36 +08:00
parent 15e1eeb81a
commit bf44d9e593
5 changed files with 53 additions and 48 deletions

View File

@@ -3,7 +3,10 @@
[clojure.walk :as walk]
[frontend.db :as db]
[frontend.state :as state]
[frontend.format.mldoc :as mldoc]))
[frontend.format.mldoc :as mldoc]
[frontend.date :as date]
[frontend.config :as config]
[datascript.core :as d]))
(defn blocks->vec-tree [col]
(let [col (map (fn [h] (cond->
@@ -134,3 +137,45 @@
(every? (fn [[[typ break-lines]] _]
(and (= typ "Paragraph")
(every? #(= % ["Break_Line"]) break-lines))) (rest ast))))))))
(defn with-dummy-block
([blocks format]
(with-dummy-block blocks format {} {}))
([blocks format default-option {:keys [journal? page-name]
:or {journal? false}}]
(let [format (or format (state/get-preferred-format) :markdown)
blocks (if (and journal?
(seq blocks)
(when-let [title (second (first (:block/title (first blocks))))]
(date/valid-journal-title? title)))
(rest blocks)
blocks)
blocks (vec blocks)]
(cond
(and (seq blocks)
(or (and (> (count blocks) 1)
(:block/pre-block? (first blocks)))
(and (>= (count blocks) 1)
(not (:block/pre-block? (first blocks))))))
blocks
:else
(let [last-block (last blocks)
end-pos (get-in last-block [:block/meta :end-pos] 0)
dummy (merge last-block
(let [uuid (d/squuid)]
{:block/uuid uuid
:block/title ""
:block/content (config/default-empty-block format)
:block/format format
:block/level 2
:block/priority nil
:block/anchor (str uuid)
:block/meta {:start-pos end-pos
:end-pos end-pos}
:block/body nil
:block/dummy? true
:block/marker nil
:block/pre-block? false})
default-option)]
(conj blocks dummy))))))