fix: multiple views created

This commit is contained in:
Tienson Qin
2025-02-19 21:59:39 +08:00
parent a838edd0e4
commit 030fbff1c3
2 changed files with 79 additions and 81 deletions

View File

@@ -79,47 +79,45 @@
(set-loading? false))))
[])
(if loading?
(ui/skeleton)
(views/view {:config config
:data data
:set-data! set-data!
:view-parent class
:view-identity :class-objects
:columns columns
:add-new-object! (fn [{:keys [properties]}]
(if (= :logseq.class/Asset (:db/ident class))
(shui/dialog-open!
(fn []
[:div.flex.flex-col.gap-2
[:div.font-medium "Add assets"]
(filepicker/picker
{:on-change (fn [_e files]
(p/do!
(editor-handler/upload-asset! nil files :markdown editor-handler/*asset-uploading? true)
(set-data! (get-class-objects class))
(shui/dialog-close!)))})]))
(add-new-class-object! class set-data! properties)))
:show-add-property? true
:add-property! (fn []
(state/pub-event! [:editor/new-property {:block class
:class-schema? true}]))
:on-delete-rows (fn [table selected-rows]
(views/view {:config config
:data data
:set-data! set-data!
:view-parent class
:view-identity :class-objects
:columns columns
:add-new-object! (fn [{:keys [properties]}]
(if (= :logseq.class/Asset (:db/ident class))
(shui/dialog-open!
(fn []
[:div.flex.flex-col.gap-2
[:div.font-medium "Add assets"]
(filepicker/picker
{:on-change (fn [_e files]
(p/do!
(editor-handler/upload-asset! nil files :markdown editor-handler/*asset-uploading? true)
(set-data! (get-class-objects class))
(shui/dialog-close!)))})]))
(add-new-class-object! class set-data! properties)))
:show-add-property? true
:add-property! (fn []
(state/pub-event! [:editor/new-property {:block class
:class-schema? true}]))
:on-delete-rows (fn [table selected-rows]
;; Built-in objects must not be deleted e.g. Tag, Property and Root
(let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?))
blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))]
(p/do!
(when-let [f (get-in table [:data-fns :set-row-selection!])]
(f {}))
(ui-outliner-tx/transact!
{:outliner-op :delete-blocks}
(when (seq blocks)
(outliner-op/delete-blocks! blocks nil))
(let [page-ids (map :db/id pages)
tx-data (map (fn [pid] [:db/retract pid :block/tags (:db/id class)]) page-ids)]
(when (seq tx-data)
(outliner-op/transact! tx-data {:outliner-op :save-block}))))
(set-data! (get-class-objects class)))))}))))
(let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?))
blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))]
(p/do!
(when-let [f (get-in table [:data-fns :set-row-selection!])]
(f {}))
(ui-outliner-tx/transact!
{:outliner-op :delete-blocks}
(when (seq blocks)
(outliner-op/delete-blocks! blocks nil))
(let [page-ids (map :db/id pages)
tx-data (map (fn [pid] [:db/retract pid :block/tags (:db/id class)]) page-ids)]
(when (seq tx-data)
(outliner-op/transact! tx-data {:outliner-op :save-block}))))
(set-data! (get-class-objects class)))))})))
(rum/defcs class-objects < rum/reactive db-mixins/query mixins/container-id
[state class {:keys [current-page? sidebar?]}]
@@ -167,34 +165,33 @@
(set-loading? false)))
[])
(when (false? loading?)
(views/view {:config config
:data data
:view-parent property
:view-identity :property-objects
:set-data! set-data!
:columns columns
:add-new-object! (fn [{:keys [properties]}]
(add-new-property-object! property set-data! properties))
;; TODO: Add support for adding column
:show-add-property? false
;; Relationships with built-in properties must not be deleted e.g. built-in? or parent
:on-delete-rows (when-not (:logseq.property/built-in? property)
(fn [table selected-rows]
(let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?))
blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))]
(p/do!
(set-data! (get-property-related-objects (state/get-current-repo) property))
(when-let [f (get-in table [:data-fns :set-row-selection!])]
(f {}))
(ui-outliner-tx/transact!
{:outliner-op :delete-blocks}
(when (seq blocks)
(outliner-op/delete-blocks! blocks nil))
(let [page-ids (map :db/id pages)
tx-data (map (fn [pid] [:db/retract pid (:db/ident property)]) page-ids)]
(when (seq tx-data)
(outliner-op/transact! tx-data {:outliner-op :save-block}))))))))}))))
(views/view {:config config
:data data
:view-parent property
:view-identity :property-objects
:set-data! set-data!
:columns columns
:add-new-object! (fn [{:keys [properties]}]
(add-new-property-object! property set-data! properties))
;; TODO: Add support for adding column
:show-add-property? false
;; Relationships with built-in properties must not be deleted e.g. built-in? or parent
:on-delete-rows (when-not (:logseq.property/built-in? property)
(fn [table selected-rows]
(let [pages (->> selected-rows (filter ldb/page?) (remove :logseq.property/built-in?))
blocks (->> selected-rows (remove ldb/page?) (remove :logseq.property/built-in?))]
(p/do!
(set-data! (get-property-related-objects (state/get-current-repo) property))
(when-let [f (get-in table [:data-fns :set-row-selection!])]
(f {}))
(ui-outliner-tx/transact!
{:outliner-op :delete-blocks}
(when (seq blocks)
(outliner-op/delete-blocks! blocks nil))
(let [page-ids (map :db/id pages)
tx-data (map (fn [pid] [:db/retract pid (:db/ident property)]) page-ids)]
(when (seq tx-data)
(outliner-op/transact! tx-data {:outliner-op :save-block}))))))))})))
;; Show all nodes containing the given property
(rum/defcs property-related-objects < rum/reactive db-mixins/query mixins/container-id

View File

@@ -1686,21 +1686,22 @@
(rum/defc view < rum/static
[{:keys [view-parent view-identity view-entity] :as option}]
(let [[view-entity set-view-entity!] (rum/use-state view-entity)
[views set-views!] (rum/use-state nil)]
(let [[view-entity set-view-entity!] (hooks/use-state view-entity)
[views set-views!] (hooks/use-state nil)]
(hooks/use-effect!
(fn []
(p/let [_result (db-async/<get-views (state/get-current-repo) (:db/id view-parent) view-identity)
views (get-views view-parent view-identity)]
(if-let [v (first views)]
(do
(when-not view-entity (set-view-entity! v))
(set-views! views))
(when (and view-parent view-identity (not view-entity))
(p/let [new-view (create-view! view-parent view-identity)]
(set-view-entity! new-view)
(set-views! (concat views [new-view])))))))
[(:db/id view-parent)])
(let [repo (state/get-current-repo)]
(p/let [_result (db-async/<get-views repo (:db/id view-parent) view-identity)
views (get-views view-parent view-identity)]
(if-let [v (first views)]
(do
(when-not view-entity (set-view-entity! v))
(set-views! views))
(when (and view-parent view-identity (not view-entity))
(p/let [new-view (create-view! view-parent view-identity)]
(set-view-entity! new-view)
(set-views! (concat views [new-view]))))))))
[])
(view-container view-entity (assoc option
:views views
:set-views! set-views!