From f82bbb52752d115942624e3e18cfbce77f161049 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Fri, 16 Jun 2023 21:43:43 -0400 Subject: [PATCH] Refactored hairy block component by breaking out logical fns --- src/main/frontend/components/block.cljs | 65 +++++++++++-------- .../frontend/components/query/result.cljs | 2 +- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index dd0bdb884..4b2cce3f6 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -2705,16 +2705,27 @@ (= (:id config) (str (:block/uuid block))))) -(rum/defc ^:large-vars/cleanup-todo block-container-inner < rum/reactive db-mixins/query - [state repo config block] - (let [ref? (:ref? config) - custom-query? (boolean (:custom-query? config)) - ref-or-custom-query? (or ref? custom-query?) - *navigating-block (get state ::navigating-block) - navigating-block (rum/react *navigating-block) - navigated? (and (not= (:block/uuid block) navigating-block) navigating-block) - block (if (or (and custom-query? - (empty? (:block/children block)) +(defn- build-config [config block {:keys [navigating-block navigated?]}] + (cond-> config + navigated? + (assoc :id (str navigating-block)) + + true + (update :block merge block) + + ;; Each block might have multiple queries, but we store only the first query's result. + ;; This :query-result atom is used by the query function feature to share results between + ;; the parent's query block and the children blocks. This works because config is shared + ;; between parent and children blocks + (nil? (:query-result config)) + (assoc :query-result (atom nil)) + + (:ref? config) + (block-handler/attach-order-list-state block))) + +(defn- build-block [repo config block* {:keys [navigating-block navigated?]}] + (let [block (if (or (and (:custom-query? config) + (empty? (:block/children block*)) (not (and (:dsl-query? config) (string/includes? (:query config) "not")))) navigated?) @@ -2723,24 +2734,26 @@ {:scoped-block-id (:db/id block)}) tree (tree/blocks->vec-tree blocks (:block/uuid (first blocks)))] (first tree)) - block) - block (if ref? - (merge block (db/sub-block (:db/id block))) - block) - {:block/keys [uuid children pre-block? refs level format content properties]} block + block*) + {:block/keys [pre-block? format content] :as block'} + (if (:ref? config) + (merge block (db/sub-block (:db/id block))) + block)] + (merge block' (block/parse-title-and-body uuid format pre-block? content)))) + +(rum/defc ^:large-vars/cleanup-todo block-container-inner < rum/reactive db-mixins/query + [state repo config* block*] + (let [ref? (:ref? config*) + custom-query? (boolean (:custom-query? config*)) + ref-or-custom-query? (or ref? custom-query?) + *navigating-block (get state ::navigating-block) + navigating-block (rum/react *navigating-block) + navigated? (and (not= (:block/uuid block*) navigating-block) navigating-block) + block (build-block repo config* block* {:navigating-block navigating-block :navigated? navigated?}) + {:block/keys [uuid children pre-block? refs level content properties]} block {:block.temp/keys [top?]} block - config (if navigated? (assoc config :id (str navigating-block)) config) - block (merge block (block/parse-title-and-body uuid format pre-block? content)) + config (build-config config* block {:navigated? navigated? :navigating-block navigating-block}) blocks-container-id (:blocks-container-id config) - config (update config :block merge block) - ;; Each block might have multiple queries, but we store only the first query's result. - ;; This :query-result atom is used by the query function feature to share results between - ;; the parent's query block and the children blocks. This works because config is shared - ;; between parent and children blocks - config (if (nil? (:query-result config)) - (assoc config :query-result (atom nil)) - config) - config (if ref? (block-handler/attach-order-list-state config block) config) heading? (:heading properties) *control-show? (get state ::control-show?) db-collapsed? (util/collapsed? block) diff --git a/src/main/frontend/components/query/result.cljs b/src/main/frontend/components/query/result.cljs index f5bb67e67..ad8cea3ef 100644 --- a/src/main/frontend/components/query/result.cljs +++ b/src/main/frontend/components/query/result.cljs @@ -84,4 +84,4 @@ (when-let [query-result (:query-result config)] (reset! query-result result)) (when query-atom - (util/safe-with-meta result (meta @query-atom))))) + (util/safe-with-meta result (meta @query-atom))))) \ No newline at end of file