From bb42ede8d0e4330f15fc63381d02314f758809bf Mon Sep 17 00:00:00 2001 From: defclass Date: Thu, 18 Mar 2021 16:43:48 +0800 Subject: [PATCH] refactor(outliner): remove feature that one position as a atom --- src/main/frontend/components/journal1.cljs | 210 --------- src/main/frontend/modules/outliner/core.cljs | 19 +- src/main/frontend/modules/outliner/state.cljs | 123 ----- src/main/frontend/routes.cljs | 5 - src/test/frontend/fixtures.cljs | 10 +- .../frontend/modules/outliner/tree_test.cljs | 437 +++++++++--------- 6 files changed, 232 insertions(+), 572 deletions(-) delete mode 100644 src/main/frontend/components/journal1.cljs delete mode 100644 src/main/frontend/modules/outliner/state.cljs diff --git a/src/main/frontend/components/journal1.cljs b/src/main/frontend/components/journal1.cljs deleted file mode 100644 index c4310e53fd..0000000000 --- a/src/main/frontend/components/journal1.cljs +++ /dev/null @@ -1,210 +0,0 @@ -(ns frontend.components.journal1 - (:require [frontend.modules.journal.core :as journal-core] - [rum.core :as rum] - [frontend.ui :as ui] - [frontend.db-mixins :as db-mixins] - [frontend.modules.outliner.core :as outliner-core] - [frontend.modules.outliner.tree :as tree] - [frontend.modules.outliner.state :as outliner-state] - [frontend.util :as util] - [frontend.modules.outliner.generator :as tg] - [frontend.modules.outliner.tree-test :as tt] - [cljs-time.core :as t] - [cljs-time.coerce :as tc])) - -(def enter-key-code 13) -(def tab-key-code 9) -(def up-key-code 38) -(def down-key-code 40) - -(defonce state - (atom {:editor/current-node nil - :outliner/node-number 10})) - -(defn sub - [ks] - (if (coll? ks) - (util/react (rum/cursor-in state ks)) - (util/react (rum/cursor state ks)))) - -(defn update-node-num - [num] - (swap! state assoc :outliner/node-number num)) - -;;; helpers -(defn textarea-focus! - [block-id] - (.focus - (.querySelector js/document - (str "[data-bid='" block-id "'] > textarea")))) - -;;; handlers -(defn set-current-node - [node] - (swap! state assoc :editor/current-node node)) - -(defn on-bullet-zoom - "zoom in/out bullet" - [node] - (js/console.log "[zoom in/out] " (:data node))) - -(defn on-block-focus! - ([delta] (on-block-focus! (:editor/current-node @state) delta)) - ([node delta] - ;; TODO: should get up/down block id by tree API ! - (when-let [bid (:block/id (:data node))] - (let [js-bids (.map (.from js/Array (.querySelectorAll js/document "[data-bid]")) #(.. ^js % -dataset -bid)) - current-index-of (.indexOf js-bids (.toString bid))] - (when-not (= -1 current-index-of) - (if-let [bid (aget js-bids (+ delta current-index-of))] - (textarea-focus! bid))))))) - -(defn block-save-with-content - [block content] - (let [new-block (-> (assoc block :block/content content) - (outliner-core/block))] - (tree/-save new-block))) - -(defn block-indent - [block-node] - (let [parent-node (tree/-get-left block-node)] - (tree/move-subtree block-node parent-node nil))) - -(defn block-new - [block-node] - (let [left-id (tree/-get-id block-node) - parent-id (tree/-get-parent-id block-node) - new-node-id (outliner-core/gen-block-id) - new-node - (outliner-core/block - {:block/id new-node-id - :block/left-id [:block/id left-id] - :block/parent-id [:block/id parent-id] - :block/content ""})] - (tree/insert-node-as-sibling new-node block-node) - (set-current-node new-node))) - -;;; components -(rum/defc current-node-observer - [current-node] - (rum/use-effect! - (fn [] - (when-let [block (:data current-node)] - (js/setTimeout - #(textarea-focus! (:block/id block)) - 16) - #())) - [current-node]) - [:span {:key 0}]) - -;;; FIXME: node should be associated with block Atom data -;;; FIXME: for reactivity ? -(defn node-render - [node] - (let [old-block (:data node) - bid (:block/id old-block) - content (:block/content old-block)] - [:div.block-node {:key bid :data-bid bid} - [:span.bullet {:on-click #(on-bullet-zoom node)}] - [:textarea - {:on-key-down (fn [^js/MouseEvent e] - (let [pressed-code (.-keyCode e)] - (cond - ;; create - (= enter-key-code pressed-code) - (do - (.blur (.-target e)) - (block-new node) - (.preventDefault e)) - - ;; update - (= tab-key-code pressed-code) - (do (.blur (.-target e)) - (block-indent node)) - - ;; up - (= up-key-code pressed-code) - (on-block-focus! -1) - - ;; down - (= down-key-code pressed-code) - (on-block-focus! 1) - - :else - (js/console.debug "[KEY]" pressed-code)))) - :on-focus #(set-current-node node) - :on-blur #(let [value (util/evalue %)] - (set-current-node nil) - (block-save-with-content old-block value)) - :default-value content}]])) - -(defn down-render - [node children] - (if (some? children) - [:div.blocks - (node-render node) - [:div.children children]] - - [:div.blocks - (node-render node)])) - -(def root-parent-id 1) -(def root-left-id 1) - -(declare render) - -(rum/defc down-component - < rum/static - [number node] - (let [down (tree/-get-down node)] - (if (and (tree/satisfied-inode? down) - (pos? @number)) - (do (swap! number dec) - (down-render node (render number down))) - (down-render node nil)))) - -(rum/defc right-component - < rum/static - [number node] - (let [right (tree/-get-right node)] - (when (and (tree/satisfied-inode? right) - (pos? @number)) - (do (swap! number dec) - (render number right))))) - -(defn render - [number node] - (when (tree/satisfied-inode? node) - (let [node-tree (rum/with-key - (down-component number node) - (str "down-" (tree/-get-id node)))] - [node-tree (rum/with-key - (right-component number node) - (str "right-" (tree/-get-id node)))]))) - -(rum/defcs render-react-tree* < - {:did-mount (fn [state] - (let [[init-node] (:rum/args state)] - (js/setTimeout #(set-current-node init-node) 10)) - state)} - rum/reactive - [state init-node] - (let [num (sub :outliner/node-number) - current-node (sub :editor/current-node) - number (atom num)] - [:div.page - (rum/with-key (current-node-observer current-node) - (str "current-" (tree/-get-id init-node))) - (render number init-node)])) - -(rum/defc all-journals < rum/reactive db-mixins/query - [] - (do - ;(tg/generate-random-tree 1000) - ;(tg/generate-random-block 10e4) - (tt/build-db-records tt/node-tree) - (let [init-node (outliner-state/get-block-and-ensure-position - "1" "1")] - [:div.journal1 - (rum/with-key (render-react-tree* init-node) - (str "id-" (tree/-get-id init-node)))]))) \ No newline at end of file diff --git a/src/main/frontend/modules/outliner/core.cljs b/src/main/frontend/modules/outliner/core.cljs index 108950689b..0634f17484 100644 --- a/src/main/frontend/modules/outliner/core.cljs +++ b/src/main/frontend/modules/outliner/core.cljs @@ -1,6 +1,5 @@ (ns frontend.modules.outliner.core (:require [frontend.modules.outliner.tree :as tree] - [frontend.modules.outliner.state :as state] [frontend.db.outliner :as db-outliner] [frontend.db.conn :as conn] [frontend.util :as util] @@ -19,6 +18,15 @@ [m] (outliner-u/->Block m)) +(defn get-by-parent-&-left + [parent-id left-id] + (some-> + (db-outliner/get-by-parent-&-left + conn/outliner-db + [:block/id parent-id] + [:block/id left-id]) + (block))) + ;; -get-id, -get-parent-id, -get-left-id return block-id ;; the :block/parent-id, :block/left-id should be datascript lookup ref @@ -55,22 +63,21 @@ (-get-right [this] (let [left-id (tree/-get-id this) parent-id (tree/-get-parent-id this)] - (state/get-block-and-ensure-position parent-id left-id))) + (get-by-parent-&-left parent-id left-id))) (-get-down [this] (let [parent-id (tree/-get-id this)] - (state/get-block-and-ensure-position parent-id parent-id))) + (get-by-parent-&-left parent-id parent-id))) (-save [this] (let [conn (conn/get-outliner-conn) data (:data this)] - (state/save-&-revise-positions this) - (db-outliner/save-block conn data))) + (db-outliner/save-block conn data) + this)) (-del [this] (let [conn (conn/get-outliner-conn) block-id (tree/-get-id this)] - (state/reset-the-position this) (db-outliner/del-block conn [:block/id block-id]))) (-get-children [this] diff --git a/src/main/frontend/modules/outliner/state.cljs b/src/main/frontend/modules/outliner/state.cljs deleted file mode 100644 index 02b94201ea..0000000000 --- a/src/main/frontend/modules/outliner/state.cljs +++ /dev/null @@ -1,123 +0,0 @@ -(ns frontend.modules.outliner.state - "A state management implement for outliner blocks." - (:require [frontend.modules.outliner.tree :as tree] - [frontend.db.conn :as conn] - [frontend.db.outliner :as db-outliner] - [frontend.modules.outliner.utils :as outliner-u] - [frontend.react-impls :as r])) - -(defonce position-state (atom {})) - -(defn- fill-block-into-position - ([block] - {:pre [(tree/satisfied-inode? block)]} - (let [parent-id (tree/-get-parent-id block) - left-id (tree/-get-left-id block)] - (fill-block-into-position parent-id left-id block))) - ([parent-id left-id block-value] - (let [ref-key [parent-id left-id]] - (if-let [ref-atom (get @position-state ref-key)] - (do (reset! ref-atom {:block block-value - :parent-id parent-id - :left-id left-id}) - ref-atom) - (let [block-ref (atom {:block block-value - :parent-id parent-id - :left-id left-id})] - (swap! position-state assoc ref-key block-ref) - block-ref))))) - -(defn- reset-position-as-empty - ([block] - {:pre [(tree/satisfied-inode? block)]} - (let [parent-id (tree/-get-parent-id block) - left-id (tree/-get-left-id block)] - (reset-position-as-empty parent-id left-id))) - ([parent-id left-id] - (let [ref-key [parent-id left-id]] - (when-let [ref-atom (get @position-state ref-key)] - (reset! ref-atom {:block nil - :parent-id parent-id - :left-id left-id}))))) - -(defn- get-block-by-position - ([block] - {:pre [(tree/satisfied-inode? block)]} - (let [parent-id (tree/-get-parent-id block) - left-id (tree/-get-left-id block)] - (get-block-by-position parent-id left-id))) - ([parent-id left-id] - (let [ref-key [parent-id left-id]] - (when-let [ref (get @position-state ref-key)] - (assert - (instance? cljs.core/Atom (atom nil)) - "block-react-ref should be atom.") - ref)))) - -(defn- position-changed? - [old-block new-block] - (let [old-parent-id (tree/-get-parent-id old-block) - old-left-id (tree/-get-left-id old-block) - new-parent-id (tree/-get-parent-id new-block) - new-left-id (tree/-get-left-id new-block) - the-same-position - (and - (= old-parent-id new-parent-id) - (= old-left-id new-left-id))] - (not the-same-position))) - -(defn- position-taken? - [block block-in-cache] - (not= (tree/-get-id block) - (tree/-get-id block-in-cache))) - -(defn save-&-revise-positions - [block] - (let [block-id (tree/-get-id block) - block-in-datascript (outliner-u/get-block-by-id block-id)] - (cond - ;; no legacy state need to process, save directly. - (not block-in-datascript) - (fill-block-into-position block) - - :else - (if (position-changed? block-in-datascript block) - (do - (fill-block-into-position block) - (let [block-from-position - (some-> (get-block-by-position block-in-datascript) deref :block)] - (when (and block-from-position - (not (position-taken? block block-from-position))) - (reset-position-as-empty block-in-datascript)))) - (let [block-in-cache - (some-> (get-block-by-position block-in-datascript) deref :block)] - (if (and block-in-cache - (position-taken? block block-in-cache)) - (throw (js/Error. "Other node should not take my seat.")) - (fill-block-into-position block))))))) - -(defn reset-the-position - [block] - (let [block-id (tree/-get-id block)] - (when-let [old-block (outliner-u/get-block-by-id block-id)] - (when-let [data (some-> (get-block-by-position old-block) - (deref) - :block)] - (when-not (position-taken? block data) - (reset-position-as-empty old-block)))))) - -(defn get-block-and-ensure-position - [parent-id left-id] - (let [block-ref - (if-let [block-ref (get-block-by-position parent-id left-id)] - block-ref - (let [c (conn/get-outliner-conn) - r (db-outliner/get-by-parent-&-left - c - (outliner-u/->block-lookup-ref parent-id) - (outliner-u/->block-lookup-ref left-id)) - block (when r (outliner-u/->Block r)) - block-ref (fill-block-into-position parent-id left-id block)] - block-ref))] - (-> (@r/react block-ref) - :block))) \ No newline at end of file diff --git a/src/main/frontend/routes.cljs b/src/main/frontend/routes.cljs index f204c9b885..640f0d288c 100644 --- a/src/main/frontend/routes.cljs +++ b/src/main/frontend/routes.cljs @@ -5,7 +5,6 @@ [frontend.components.page :as page] [frontend.components.diff :as diff] [frontend.components.journal :as journal] - [frontend.components.journal1 :as journal1] [frontend.components.settings :as settings] [frontend.components.external :as external] [frontend.components.publishing :as publishing])) @@ -64,10 +63,6 @@ {:name :all-journals :view journal/all-journals}] - ["/all-journals1" - {:name :all-journals1 - :view journal1/all-journals}] - ["/my-publishing" {:name :my-publishing :view publishing/my-publishing}]]) diff --git a/src/test/frontend/fixtures.cljs b/src/test/frontend/fixtures.cljs index 11ea3ce258..162385b230 100644 --- a/src/test/frontend/fixtures.cljs +++ b/src/test/frontend/fixtures.cljs @@ -1,6 +1,5 @@ (ns frontend.fixtures (:require [cljs.test :refer [deftest is are testing use-fixtures run-tests]] - [frontend.modules.outliner.state :as outliner-state] [frontend.react-impls :as react-impls] [frontend.react :as react-test] [frontend.db.conn :as conn] @@ -13,19 +12,12 @@ (reset! react-test/react-components {}) r)) -(defn outliner-position-state - [f] - (reset! outliner-state/position-state {}) - (let [r (f)] - (reset! outliner-state/position-state {}) - r)) - (defn outliner-db [f] (let [fresh-db (conn/create-outliner-db)] (reset! conn/outliner-db @fresh-db) (let [r (f)] - (reset! outliner-state/position-state @fresh-db) r))) + (reset! conn/outliner-db @fresh-db) r))) (defn react-impl [f] diff --git a/src/test/frontend/modules/outliner/tree_test.cljs b/src/test/frontend/modules/outliner/tree_test.cljs index 3718ef9f90..84ce09741b 100644 --- a/src/test/frontend/modules/outliner/tree_test.cljs +++ b/src/test/frontend/modules/outliner/tree_test.cljs @@ -7,12 +7,11 @@ [frontend.modules.outliner.utils :as outliner-u] [frontend.modules.outliner.core] [frontend.fixtures :as fixtures] - [nano-id.core :as nano])) + [cljs-run-test :refer [run-test]])) (use-fixtures :each fixtures/react-impl fixtures/react-components - fixtures/outliner-position-state fixtures/outliner-db) (defn build-block @@ -171,220 +170,220 @@ (is (= [6 9] old-parent's-children)) (is (= [13 14 3 15] new-parent's-children))))) -(defn- get-block-id - [block] - (get-in block [:data :block/id])) - -(defn sibling-nodes - [acc new-sibling] - (if (empty? acc) - [new-sibling] - (conj acc new-sibling))) - -(declare render) - -(r/defc down-component - [number node] - (let [down (tree/-get-down node)] - (if (and - (tree/satisfied-inode? down) - (pos? @number)) - (do (swap! number dec) - [(get-block-id node) - (->> (render number down nil) - (r/with-key (str (tree/-get-id down) "-children")) - (deref))]) - [(get-block-id node)]))) - -(r/defc right-component - [number node children node-tree] - (let [right (tree/-get-right node) - new-children (sibling-nodes children node-tree)] - (if (and - (tree/satisfied-inode? right) - (pos? @number)) - (do (swap! number dec) - (->> (render number right new-children) - (r/with-key (str (tree/-get-id right) "-find-right")) - (deref))) - new-children))) - -(r/defc render - [number node children] - (let [node-tree (->> (down-component number node) - (r/with-key (str (tree/-get-id node) "-render-find-down")) - (deref))] - (->> (right-component number node children node-tree) - (r/with-key (str (tree/-get-id node) "-render-find-right")) - (deref)))) - -(r/defc render-react-tree - [init-node node-number] - (let [num-react (r/react node-number) - number (atom (dec num-react))] - (->> (render number init-node nil) - (r/with-key (str "render-react-tree-" (tree/-get-id init-node))) - (deref)))) - -(deftest test-react-for-update-paginate-number - " - [1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10] - [11]]]]] - [12 [[13] - [14] - [15]]] - [16 [[17]]]]] - " - (build-db-records node-tree) - (let [root (build-block 1 nil nil) - number (atom 10) - result (->> (render-react-tree root number) - (r/with-key (str "root-" (tree/-get-id root))))] - (is (= [[1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10]]]]]]]] - @result)) - (do (reset! number 12) - (is (= [[1 [[2 [[3 [[4] [5]]] - [6 [[7 [[8]]]]] - [9 [[10] [11]]]]] - [12]]]] - @result))))) - -(deftest test-react-for-insert-node-as-sibling - " - [1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10] - [11]]]]] - [12 [[13] - [14] - [15]]] - [16 [[17]]]]] - " - (build-db-records node-tree) - (let [root (build-block 1 nil nil) - number (atom 10) - result (->> (render-react-tree root number) - (r/with-key (str "root-" (tree/-get-id root))))] - (is (= [[1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10]]]]]]]] - @result)) - (let [new-node (build-block 18 nil nil) - left-node (build-block 3 2 2)] - (tree/insert-node-as-sibling new-node left-node) - (is (= [[1 [[2 [[3 [[4] - [5]]] - [18] - [6 [[7 [[8]]]]] - [9]]]]]] - @result))))) - - -(deftest test-react-insert-node-as-first-child - " - [1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10] - [11]]]]] - [12 [[13] - [14] - [15]]] - [16 [[17]]]]] - " - (build-db-records node-tree) - (let [root (build-block 1 nil nil) - number (atom 10) - result (->> (render-react-tree root number) - (r/with-key (str "root-" (tree/-get-id root))))] - (is (= [[1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10]]]]]]]] - @result)) - (let [new-node (build-block 18 nil nil) - parent-node (build-block 2 1 1)] - (tree/insert-node-as-first-child new-node parent-node) - (is (= [[1 [[2 [[18] - [3 [[4] [5]]] - [6 [[7 [[8]]]]] - [9]]]]]] - @result))))) - -(deftest test-react-for-delete-node - " - [1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10] - [11]]]]] - [12 [[13] - [14] - [15]]] - [16 [[17]]]]] - " - (build-db-records node-tree) - (let [root (build-block 1 nil nil) - number (atom 10) - result (->> (render-react-tree root number) - (r/with-key (str "root-" (tree/-get-id root))))] - (is (= [[1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10]]]]]]]] - @result)) - (let [node (build-block 6 2 3)] - (tree/delete-node node) - (is (= [[1 [[2 [[3 [[4] [5]]] - [9 [[10] [11]]]]] - [12 [[13]]]]]] - @result))))) - -(deftest test-react-for-move-subtree - " - [1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10] - [11]]]]] - [12 [[13] - [14] - [15]]] - [16 [[17]]]]] - " - (build-db-records node-tree) - (let [root (build-block 1 nil nil) - number (atom 20) - result (->> (render-react-tree root number) - (r/with-key (str "root-" (tree/-get-id root))))] - (is (= [[1 [[2 [[3 [[4] - [5]]] - [6 [[7 [[8]]]]] - [9 [[10] - [11]]]]] - [12 [[13] - [14] - [15]]] - [16 [[17]]]]]] - @result)) - (let [node (build-block 3 2 2) - new-parent (build-block 12 1 2) - new-left (build-block 14 12 13)] - (tree/move-subtree node new-parent new-left) - (is (= [[1 [[2 [[6 [[7 [[8]]]]] - [9 [[10] [11]]]]] - [12 [[13] - [14] - [3 [[4] - [5]]] - [15]]] - [16 [[17]]]]]] - @result))))) +;(defn- get-block-id +; [block] +; (get-in block [:data :block/id])) +; +;(defn sibling-nodes +; [acc new-sibling] +; (if (empty? acc) +; [new-sibling] +; (conj acc new-sibling))) +; +;(declare render) +; +;(r/defc down-component +; [number node] +; (let [down (tree/-get-down node)] +; (if (and +; (tree/satisfied-inode? down) +; (pos? @number)) +; (do (swap! number dec) +; [(get-block-id node) +; (->> (render number down nil) +; (r/with-key (str (tree/-get-id down) "-children")) +; (deref))]) +; [(get-block-id node)]))) +; +;(r/defc right-component +; [number node children node-tree] +; (let [right (tree/-get-right node) +; new-children (sibling-nodes children node-tree)] +; (if (and +; (tree/satisfied-inode? right) +; (pos? @number)) +; (do (swap! number dec) +; (->> (render number right new-children) +; (r/with-key (str (tree/-get-id right) "-find-right")) +; (deref))) +; new-children))) +; +;(r/defc render +; [number node children] +; (let [node-tree (->> (down-component number node) +; (r/with-key (str (tree/-get-id node) "-render-find-down")) +; (deref))] +; (->> (right-component number node children node-tree) +; (r/with-key (str (tree/-get-id node) "-render-find-right")) +; (deref)))) +; +;(r/defc render-react-tree +; [init-node node-number] +; (let [num-react (r/react node-number) +; number (atom (dec num-react))] +; (->> (render number init-node nil) +; (r/with-key (str "render-react-tree-" (tree/-get-id init-node))) +; (deref)))) +; +;(deftest test-react-for-update-paginate-number +; " +; [1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] +; [11]]]]] +; [12 [[13] +; [14] +; [15]]] +; [16 [[17]]]]] +; " +; (build-db-records node-tree) +; (let [root (build-block 1 nil nil) +; number (atom 10) +; result (->> (render-react-tree root number) +; (r/with-key (str "root-" (tree/-get-id root))))] +; (is (= [[1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10]]]]]]]] +; @result)) +; (do (reset! number 12) +; (is (= [[1 [[2 [[3 [[4] [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] [11]]]]] +; [12]]]] +; @result))))) +; +;(deftest test-react-for-insert-node-as-sibling +; " +; [1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] +; [11]]]]] +; [12 [[13] +; [14] +; [15]]] +; [16 [[17]]]]] +; " +; (build-db-records node-tree) +; (let [root (build-block 1 nil nil) +; number (atom 10) +; result (->> (render-react-tree root number) +; (r/with-key (str "root-" (tree/-get-id root))))] +; (is (= [[1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10]]]]]]]] +; @result)) +; (let [new-node (build-block 18 nil nil) +; left-node (build-block 3 2 2)] +; (tree/insert-node-as-sibling new-node left-node) +; (is (= [[1 [[2 [[3 [[4] +; [5]]] +; [18] +; [6 [[7 [[8]]]]] +; [9]]]]]] +; @result))))) +; +; +;(deftest test-react-insert-node-as-first-child +; " +; [1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] +; [11]]]]] +; [12 [[13] +; [14] +; [15]]] +; [16 [[17]]]]] +; " +; (build-db-records node-tree) +; (let [root (build-block 1 nil nil) +; number (atom 10) +; result (->> (render-react-tree root number) +; (r/with-key (str "root-" (tree/-get-id root))))] +; (is (= [[1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10]]]]]]]] +; @result)) +; (let [new-node (build-block 18 nil nil) +; parent-node (build-block 2 1 1)] +; (tree/insert-node-as-first-child new-node parent-node) +; (is (= [[1 [[2 [[18] +; [3 [[4] [5]]] +; [6 [[7 [[8]]]]] +; [9]]]]]] +; @result))))) +; +;(deftest test-react-for-delete-node +; " +; [1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] +; [11]]]]] +; [12 [[13] +; [14] +; [15]]] +; [16 [[17]]]]] +; " +; (build-db-records node-tree) +; (let [root (build-block 1 nil nil) +; number (atom 10) +; result (->> (render-react-tree root number) +; (r/with-key (str "root-" (tree/-get-id root))))] +; (is (= [[1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10]]]]]]]] +; @result)) +; (let [node (build-block 6 2 3)] +; (tree/delete-node node) +; (is (= [[1 [[2 [[3 [[4] [5]]] +; [9 [[10] [11]]]]] +; [12 [[13]]]]]] +; @result))))) +; +;(deftest test-react-for-move-subtree +; " +; [1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] +; [11]]]]] +; [12 [[13] +; [14] +; [15]]] +; [16 [[17]]]]] +; " +; (build-db-records node-tree) +; (let [root (build-block 1 nil nil) +; number (atom 20) +; result (->> (render-react-tree root number) +; (r/with-key (str "root-" (tree/-get-id root))))] +; (is (= [[1 [[2 [[3 [[4] +; [5]]] +; [6 [[7 [[8]]]]] +; [9 [[10] +; [11]]]]] +; [12 [[13] +; [14] +; [15]]] +; [16 [[17]]]]]] +; @result)) +; (let [node (build-block 3 2 2) +; new-parent (build-block 12 1 2) +; new-left (build-block 14 12 13)] +; (tree/move-subtree node new-parent new-left) +; (is (= [[1 [[2 [[6 [[7 [[8]]]]] +; [9 [[10] [11]]]]] +; [12 [[13] +; [14] +; [3 [[4] +; [5]]] +; [15]]] +; [16 [[17]]]]]] +; @result)))))