mirror of
https://github.com/logseq/logseq.git
synced 2026-05-19 10:22:37 +00:00
fix: multiple views created
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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!
|
||||
|
||||
Reference in New Issue
Block a user