mirror of
https://github.com/logseq/logseq.git
synced 2026-06-01 19:01:22 +00:00
enhance(ux): block collapse state should be isolated in container
This commit is contained in:
@@ -1744,6 +1744,7 @@
|
||||
doc-mode? (state/sub :document/mode?)
|
||||
control-show? (util/react *control-show?)
|
||||
ref? (:ref? config)
|
||||
container-id (:container-id config)
|
||||
empty-content? (block-content-empty? block)
|
||||
fold-button-right? (state/enable-fold-button-right?)
|
||||
own-number-list? (:own-order-number-list? config)
|
||||
@@ -1774,9 +1775,10 @@
|
||||
:on-click (fn [event]
|
||||
(util/stop event)
|
||||
(state/clear-edit!)
|
||||
(state/set-state! :editor/container-id container-id)
|
||||
(p/do!
|
||||
(if ref?
|
||||
(state/toggle-collapsed-block! uuid)
|
||||
(state/toggle-collapsed-block! uuid container-id)
|
||||
(if collapsed?
|
||||
(editor-handler/expand-block! uuid)
|
||||
(editor-handler/collapse-block! uuid)))
|
||||
@@ -2984,7 +2986,7 @@
|
||||
(:view? config)
|
||||
(root-block? config block)
|
||||
(and (or (ldb/class? block) (ldb/property? block)) (:page-title? config)))
|
||||
(state/sub-block-collapsed uuid)
|
||||
(state/sub-block-collapsed uuid container-id)
|
||||
|
||||
:else
|
||||
db-collapsed?)
|
||||
@@ -3244,10 +3246,12 @@
|
||||
(boolean result)))
|
||||
|
||||
(defn- set-collapsed-block!
|
||||
[block-id v]
|
||||
[block-id v container-id]
|
||||
(if (false? v)
|
||||
(editor-handler/expand-block! block-id {:skip-db-collpsing? true})
|
||||
(state/set-collapsed-block! block-id v)))
|
||||
(do
|
||||
(editor-handler/expand-block! block-id {:skip-db-collpsing? true})
|
||||
(state/set-collapsed-block! block-id v container-id))
|
||||
(state/set-collapsed-block! block-id v container-id)))
|
||||
|
||||
(rum/defcs loaded-block-container < rum/reactive db-mixins/query
|
||||
(rum/local false ::show-block-left-menu?)
|
||||
@@ -3257,19 +3261,23 @@
|
||||
(let [[config block] (:rum/args state)
|
||||
block-id (:block/uuid block)
|
||||
linked-block? (or (:block/link block)
|
||||
(:original-block config))]
|
||||
(:original-block config))
|
||||
container-id (if (or linked-block? (nil? (:container-id config)))
|
||||
(state/get-next-container-id)
|
||||
(:container-id config))]
|
||||
(when-not (:property-block? config)
|
||||
(cond
|
||||
(and (:page-title? config) (or (ldb/class? block) (ldb/property? block)) (not config/publishing?))
|
||||
(let [collapsed? (state/get-block-collapsed block-id)]
|
||||
(set-collapsed-block! block-id (if (some? collapsed?) collapsed? true)))
|
||||
(let [collapsed? (state/get-block-collapsed block-id container-id)]
|
||||
(set-collapsed-block! block-id (if (some? collapsed?) collapsed? true) container-id))
|
||||
|
||||
(root-block? config block)
|
||||
(set-collapsed-block! block-id false)
|
||||
(set-collapsed-block! block-id false container-id)
|
||||
|
||||
(or (:view? config) (:ref? config) (:custom-query? config))
|
||||
(set-collapsed-block! block-id
|
||||
(boolean (editor-handler/block-default-collapsed? block config)))
|
||||
(boolean (editor-handler/block-default-collapsed? block config))
|
||||
container-id)
|
||||
|
||||
:else
|
||||
nil))
|
||||
@@ -3277,14 +3285,15 @@
|
||||
(assoc state
|
||||
::control-show? (atom false)
|
||||
::navigating-block (atom (:block/uuid block)))
|
||||
(or linked-block? (nil? (:container-id config)))
|
||||
(assoc ::container-id (state/get-next-container-id)))))
|
||||
(and container-id (or linked-block? (nil? (:container-id config))))
|
||||
(assoc ::container-id container-id))))
|
||||
:will-unmount (fn [state]
|
||||
;; restore root block's collapsed state
|
||||
(let [[config block] (:rum/args state)
|
||||
block-id (:block/uuid block)]
|
||||
block-id (:block/uuid block)
|
||||
container-id (or (:container-id config) (::container-id state))]
|
||||
(when (root-block? config block)
|
||||
(set-collapsed-block! block-id nil)))
|
||||
(set-collapsed-block! block-id nil container-id)))
|
||||
state)}
|
||||
[state config block & {:as opts}]
|
||||
(let [repo (state/get-current-repo)
|
||||
@@ -3318,7 +3327,8 @@
|
||||
(p/let [block (db-async/<get-block (state/get-current-repo)
|
||||
id
|
||||
{:children? (not
|
||||
(if-some [result (state/get-block-collapsed (:block/uuid block))]
|
||||
(if-some [result (state/get-block-collapsed (:block/uuid block)
|
||||
(:container-id config))]
|
||||
result
|
||||
(:block/collapsed? block)))
|
||||
:skip-refresh? false})]
|
||||
|
||||
@@ -111,8 +111,8 @@
|
||||
(str result-count (if (> result-count 1) " results" " result"))])]))
|
||||
|
||||
(defn- calculate-collapsed?
|
||||
[current-block current-block-uuid {:keys [collapsed?]}]
|
||||
(let [temp-collapsed? (state/sub-block-collapsed current-block-uuid)
|
||||
[current-block current-block-uuid {:keys [collapsed? container-id]}]
|
||||
(let [temp-collapsed? (state/sub-block-collapsed current-block-uuid container-id)
|
||||
collapsed?' (if (some? temp-collapsed?)
|
||||
temp-collapsed?
|
||||
(or collapsed?
|
||||
@@ -185,7 +185,9 @@
|
||||
(:block/uuid config))
|
||||
current-block (db/entity [:block/uuid current-block-uuid])
|
||||
;; Get query result
|
||||
collapsed?' (calculate-collapsed? current-block current-block-uuid {:collapsed? false})
|
||||
collapsed?' (calculate-collapsed? current-block current-block-uuid
|
||||
{:collapsed? false
|
||||
:container-id (:container-id config)})
|
||||
built-in-collapsed? (and collapsed? built-in-query?)
|
||||
config' (assoc config
|
||||
:current-block current-block
|
||||
|
||||
@@ -1649,9 +1649,10 @@
|
||||
(when (and (get-in table [:data-fns :add-new-object!]) (or (empty? rows) items-rendered?))
|
||||
(shui/table-footer (add-new-row (:view-entity option) table)))]]))))
|
||||
|
||||
(rum/defc list-view < rum/static
|
||||
[{:keys [config ref-matched-children-ids disable-virtualized?] :as option} view-entity {:keys [rows]} *scroller-ref]
|
||||
(let [lazy-item-render (fn [rows idx]
|
||||
(rum/defcs list-view < rum/static mixins/container-id
|
||||
[state {:keys [config ref-matched-children-ids disable-virtualized?] :as option} view-entity {:keys [rows]} *scroller-ref]
|
||||
(let [config (assoc config :container-id (:container-id state))
|
||||
lazy-item-render (fn [rows idx]
|
||||
(lazy-item rows idx (assoc option :list-view? true)
|
||||
(fn [block]
|
||||
(let [config' (cond->
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
;; 2. zoom-in view
|
||||
;; 3. queries
|
||||
;; 4. references
|
||||
;; graph => {:block-id bool}
|
||||
;; graph => {container-id {:block-id bool}}
|
||||
:ui/collapsed-blocks {}
|
||||
:ui/sidebar-collapsed-blocks {}
|
||||
:ui/root-component nil
|
||||
@@ -1924,23 +1924,39 @@ Similar to re-frame subscriptions"
|
||||
(->> (sub :sidebar/blocks)
|
||||
(filter #(= (first %) current-repo)))))
|
||||
|
||||
(defn get-current-editor-container-id
|
||||
[]
|
||||
@(:editor/container-id @state))
|
||||
|
||||
(defn- resolve-container-id
|
||||
[container-id]
|
||||
(or container-id (get-current-editor-container-id) :unknown-container))
|
||||
|
||||
(defn toggle-collapsed-block!
|
||||
[block-id]
|
||||
(let [current-repo (get-current-repo)]
|
||||
(update-state! [:ui/collapsed-blocks current-repo block-id] not)))
|
||||
([block-id] (toggle-collapsed-block! block-id nil))
|
||||
([block-id container-id]
|
||||
(let [current-repo (get-current-repo)
|
||||
container-id (resolve-container-id container-id)]
|
||||
(update-state! [:ui/collapsed-blocks current-repo container-id block-id] not))))
|
||||
|
||||
(defn set-collapsed-block!
|
||||
[block-id value]
|
||||
(let [current-repo (get-current-repo)]
|
||||
(set-state! [:ui/collapsed-blocks current-repo block-id] value)))
|
||||
([block-id value] (set-collapsed-block! block-id value nil))
|
||||
([block-id value container-id]
|
||||
(when (nil? container-id)
|
||||
(js/console.trace))
|
||||
(let [current-repo (get-current-repo)
|
||||
container-id (resolve-container-id container-id)]
|
||||
(set-state! [:ui/collapsed-blocks current-repo container-id block-id] value))))
|
||||
|
||||
(defn sub-block-collapsed
|
||||
[block-id]
|
||||
(sub [:ui/collapsed-blocks (get-current-repo) block-id]))
|
||||
([block-id] (sub-block-collapsed block-id nil))
|
||||
([block-id container-id]
|
||||
(sub [:ui/collapsed-blocks (get-current-repo) (resolve-container-id container-id) block-id])))
|
||||
|
||||
(defn get-block-collapsed
|
||||
[block-id]
|
||||
(get-in @state [:ui/collapsed-blocks (get-current-repo) block-id]))
|
||||
([block-id] (get-block-collapsed block-id nil))
|
||||
([block-id container-id]
|
||||
(get-in @state [:ui/collapsed-blocks (get-current-repo) (resolve-container-id container-id) block-id])))
|
||||
|
||||
(defn get-modal-id
|
||||
[]
|
||||
@@ -2048,10 +2064,6 @@ Similar to re-frame subscriptions"
|
||||
id))
|
||||
(get-next-container-id)))
|
||||
|
||||
(defn get-current-editor-container-id
|
||||
[]
|
||||
@(:editor/container-id @state))
|
||||
|
||||
(comment
|
||||
(defn remove-container-key!
|
||||
[key]
|
||||
|
||||
Reference in New Issue
Block a user