fix: all pages view

This commit is contained in:
Tienson Qin
2025-02-17 18:14:09 +08:00
parent fbb9c2498b
commit 6a5555bfaf
5 changed files with 50 additions and 42 deletions

View File

@@ -611,12 +611,6 @@
(let [class-parent-ids (set (map :db/id (get-classes-parents tags)))]
(contains? (set/union class-parent-ids tags-ids) (:db/id class))))))
(defn get-all-pages-views
[db]
(when (db-based-graph? db)
(when-let [page (get-page db common-config/views-page-name)]
(:logseq.property/_view-for page))))
(defn inline-tag?
[block-raw-title tag]
(assert (string? block-raw-title) "block-raw-title should be a string")

View File

@@ -177,14 +177,6 @@
:block/title common-config/views-page-name
:block/tags [:logseq.class/Page]
:logseq.property/hide? true
:logseq.property/built-in? true})
(sqlite-util/block-with-timestamps
{:block/uuid (common-uuid/gen-uuid)
:block/title "All Pages Default View"
:block/parent [:block/uuid page-id]
:block/order (db-order/gen-key nil)
:block/page [:block/uuid page-id]
:logseq.property/view-for [:block/uuid page-id]
:logseq.property/built-in? true})]))
(defn- build-favorites-page

View File

@@ -10,6 +10,7 @@
[frontend.hooks :as hooks]
[frontend.state :as state]
[frontend.ui :as ui]
[logseq.common.config :as common-config]
[logseq.db :as ldb]
[logseq.shui.ui :as shui]
[promesa.core :as p]
@@ -55,9 +56,7 @@
[loading? set-loading!] (rum/use-state true)
columns' (views/build-columns {} (columns)
{:with-object-name? false
:with-id? false})
;; view-entity (first (ldb/get-all-pages-views db))
]
:with-id? false})]
(hooks/use-effect!
(fn []
(when-let [^js worker @state/*db-worker]
@@ -73,7 +72,7 @@
(ui/skeleton)
(views/view {:data data
:set-data! set-data!
:view-parent nil
:view-parent (db/get-page common-config/views-page-name)
:view-identity :all-pages
:columns columns'
:on-delete-rows (fn [table selected-rows]

View File

@@ -1417,6 +1417,14 @@
(table-view table option row-selection *scroller-ref)))
(defn- get-views
[ent view-identity]
(let [entity (db/entity (:db/id ent))
views (->> (:logseq.property/_view-for entity)
(filter (fn [view]
(= view-identity (:logseq.property.view/identity view)))))]
(ldb/sort-by-order views)))
(defn- create-view!
[view-parent view-identity]
(when-let [page (db/get-case-page common-config/views-page-name)]
@@ -1425,8 +1433,24 @@
:logseq.property.view/identity view-identity}
(contains? #{:linked-references :unlinked-references} view-identity)
(assoc :logseq.property.view/type (:db/id (db/entity :logseq.property.view/type.list))))
result (editor-handler/api-insert-new-block! "" {:page (:block/uuid page)
:properties properties})]
view-exists? (seq (get-views view-parent view-identity))
view-title (if view-exists?
""
(case view-identity
:linked-references
"Linked references"
:unlinked-references
"Unlinked references"
:class-objects
"All"
:property-objects
"All"
:all-pages
"All pages"
""))
result (editor-handler/api-insert-new-block! view-title
{:page (:block/uuid page)
:properties properties})]
(db/entity [:block/uuid (:block/uuid result)]))))
(rum/defc views-tab < rum/reactive db-mixins/query
@@ -1469,17 +1493,17 @@
:logseq.property.view/type.table)]
(when-let [icon (:logseq.property/icon (db/entity display-type))]
(icon-component/icon icon {:color? true})))
(if (= (:db/id view) (:db/id view-parent))
"All"
(let [title (:block/title view)]
(if (= title "")
"New view"
title))))))
(let [title (:block/title view)]
(if (= title "")
"New view"
title)))))
(shui/button
{:variant :text
:size :sm
:class "!px-1 text-muted-foreground hover:text-foreground"
:on-click (fn [] (create-view! view-parent view-identity))}
:on-click (fn []
(p/let [view (create-view! view-parent view-identity)]
(set-views! (concat views [view]))))}
(ui/icon "plus" {}))])
(rum/defc ^:large-vars/cleanup-todo view-inner < rum/static
@@ -1646,15 +1670,6 @@
(::scroller-ref state))
(str "view-" (:db/id view-entity')))))
(defn- get-views
[ent]
(let [class (db/entity (:db/id ent))]
(->> (:logseq.property/_view-for class)
(remove (fn [view]
(contains? #{:linked-references :unlinked-references}
(:logseq.property.view/identity view))))
(ldb/sort-by-order))))
(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)
@@ -1662,7 +1677,7 @@
(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)]
views (get-views view-parent view-identity)]
(if-let [v (first views)]
(do
(when-not view-entity (set-view-entity! v))
@@ -1671,7 +1686,7 @@
(p/let [new-view (create-view! view-parent view-identity)]
(set-view-entity! new-view)
(set-views! (concat views [new-view])))))))
[])
[view-entity views])
(view-container view-entity (assoc option
:views views
:set-views! set-views!

View File

@@ -15,25 +15,33 @@
#_{:clj-kondo/ignore [:discouraged-var]}
(defn use-memo
[f deps & {:keys [equal-fn]}]
(rum/use-memo f #js[(memo-deps equal-fn deps)]))
(rum/use-memo f (if (empty? deps)
deps
#js[(memo-deps equal-fn deps)])))
#_{:clj-kondo/ignore [:discouraged-var]}
(defn use-effect!
"setup-fn will be invoked every render of component when no deps arg provided"
([setup-fn] (rum/use-effect! setup-fn))
([setup-fn deps & {:keys [equal-fn]}]
(rum/use-effect! setup-fn #js[(memo-deps equal-fn deps)])))
(rum/use-effect! setup-fn (if (empty? deps)
deps
#js[(memo-deps equal-fn deps)]))))
#_{:clj-kondo/ignore [:discouraged-var]}
(defn use-layout-effect!
([setup-fn] (rum/use-layout-effect! setup-fn))
([setup-fn deps & {:keys [equal-fn]}]
(rum/use-layout-effect! setup-fn #js[(memo-deps equal-fn deps)])))
(rum/use-layout-effect! setup-fn (if (empty? deps)
deps
#js[(memo-deps equal-fn deps)]))))
#_{:clj-kondo/ignore [:discouraged-var]}
(defn use-callback
[callback deps & {:keys [equal-fn]}]
(rum/use-callback callback #js[(memo-deps equal-fn deps)]))
(rum/use-callback callback (if (empty? deps)
deps
#js[(memo-deps equal-fn deps)])))
;;; unchanged hooks, link to rum/use-xxx directly
(def use-ref rum/use-ref)