Merge branch 'feat/db' into feat/capacitor-new

This commit is contained in:
charlie
2025-05-21 10:52:54 +08:00
11 changed files with 111 additions and 80 deletions

View File

@@ -393,3 +393,19 @@ return: [{:id 3} {:id 2 :depend-on 3} {:id 1 :depend-on 2}]"
(str nn "/" (name x))
(name x))
x))
(defn by-sorting
[sorting]
(let [get-value+cmp
(map
(fn [{:keys [get-value asc?]}]
[get-value
(if asc? compare #(compare %2 %1))])
sorting)]
(fn [a b]
(reduce
(fn [order [get-value cmp]]
(if (zero? order)
(cmp (get-value a) (get-value b))
(reduced order)))
0 get-value+cmp))))

View File

@@ -467,29 +467,7 @@
(when (seq ref-ids)
(d/pull-many db '[*] ref-ids))))
(defn hidden-ref?
"Whether ref-block (for block with the `id`) should be hidden."
[db ref-block id]
(let [db-based? (entity-plus/db-based-graph? db)]
(if db-based?
(let [entity (d/entity db id)]
(or
(= (:db/id ref-block) id)
(= id (:db/id (:block/page ref-block)))
(hidden? (:block/page ref-block))
(hidden? ref-block)
(contains? (set (map :db/id (:block/tags ref-block))) (:db/id entity))
(some? (get ref-block (:db/ident entity)))))
(or
(= (:db/id ref-block) id)
(= id (:db/id (:block/page ref-block)))))))
(defn get-block-refs-count
[db id]
(some->> (d/entity db id)
:block/_refs
(remove (fn [ref-block] (hidden-ref? db ref-block id)))
count))
(def get-block-refs-count common-initial-data/get-block-refs-count)
(defn hidden-or-internal-tag?
[e]

View File

@@ -154,6 +154,32 @@
(with-raw-title entity)
(assoc :db/id (:db/id entity))))
(defn hidden-ref?
"Whether ref-block (for block with the `id`) should be hidden."
[db ref-block id]
(let [db-based? (entity-plus/db-based-graph? db)]
(if db-based?
(let [entity (d/entity db id)]
(or
(= (:db/id ref-block) id)
(= id (:db/id (:block/page ref-block)))
(entity-util/hidden? (:block/page ref-block))
(entity-util/hidden? ref-block)
(contains? (set (map :db/id (:block/tags ref-block))) (:db/id entity))
(some? (get ref-block (:db/ident entity)))))
(or
(= (:db/id ref-block) id)
(= id (:db/id (:block/page ref-block)))))))
(defn get-block-refs-count
[db id]
(or
(some->> (d/entity db id)
:block/_refs
(remove (fn [ref-block] (hidden-ref? db ref-block id)))
count)
0))
(defn ^:large-vars/cleanup-todo get-block-and-children
[db id {:keys [children? children-only? nested-children? properties children-props]}]
(let [block (d/entity db (if (uuid? id)
@@ -211,7 +237,7 @@
:else
v)))
block-refs-count?
(assoc :block.temp/refs-count (count (:block/_refs block))))]
(assoc :block.temp/refs-count (get-block-refs-count db (:db/id block))))]
(cond->
{:block block'}
children?

View File

@@ -9,6 +9,7 @@
[logseq.common.util :as common-util]
[logseq.db :as ldb]
[logseq.db.common.entity-plus :as entity-plus]
[logseq.db.common.initial-data :as common-initial-data]
[logseq.db.frontend.class :as db-class]
[logseq.db.frontend.entity-util :as entity-util]
[logseq.db.frontend.property :as db-property]
@@ -60,22 +61,6 @@
(when (valid-type-for-sort? v)
v))))))
(defn- by-sorting
[sorting]
(let [get-value+cmp
(map
(fn [{:keys [get-value asc?]}]
[get-value
(if asc? compare #(compare %2 %1))])
sorting)]
(fn [a b]
(reduce
(fn [order [get-value cmp]]
(if (zero? order)
(cmp (get-value a) (get-value b))
(reduced order)))
0 get-value+cmp))))
(defn- by-one-sorting
[{:keys [asc? get-value]}]
(let [cmp (if asc? compare #(compare %2 %1))]
@@ -102,7 +87,7 @@
reverse)
(not (ldb/db-based-graph? db)) ; file graph properties don't support index
(sort (by-sorting
(sort (common-util/by-sorting
[{:get-value get-value-fn
:asc? asc?}]) entities)
@@ -137,7 +122,7 @@
{:asc? asc?
:get-value (memoize (get-value-for-sort property))}))
minor-sorting)
sort-cmp (by-sorting sorting)]
sort-cmp (common-util/by-sorting sorting)]
(mapcat (fn [entities] (sort sort-cmp entities)) partitioned-entities-by-major-sorting)))
(defn sort-entities
@@ -325,7 +310,7 @@
refs (mapcat (fn [id] (:block/_refs (d/entity db id))) ids)
page-filters (get-filters db entity)
full-ref-blocks (->> refs
(remove (fn [block] (ldb/hidden-ref? db block id)))
(remove (fn [block] (common-initial-data/hidden-ref? db block id)))
(common-util/distinct-by :db/id))
ref-blocks (cond->> full-ref-blocks
(seq page-filters)
@@ -386,7 +371,7 @@
(entity-util/built-in? e)))
(cond-> e
refs-count?
(assoc :block.temp/refs-count (count (:block/_refs e)))))))
(assoc :block.temp/refs-count (ldb/get-block-refs-count db (:db/id e)))))))
(d/datoms db :avet property-ident))))
(defn- get-entities

View File

@@ -172,21 +172,23 @@
([ent]
(recur-replace-uuid-in-block-title ent 10))
([ent max-depth]
(let [ref-set (loop [result-refs (:block/refs ent)
current-refs (:block/refs ent)
depth 0]
(if (or (>= depth max-depth) (empty? current-refs))
result-refs
(let [next-refs (set (mapcat :block/refs current-refs))
result-refs' (apply conj result-refs next-refs)]
(if (= (count result-refs') (count result-refs))
result-refs
(recur (apply conj result-refs next-refs) next-refs (inc depth))))))
opts {:replace-block-id? true}]
(loop [result (id-ref->title-ref (:block/title ent) ref-set opts)
last-result nil
depth 0]
(if (or (>= depth max-depth)
(= last-result result))
result
(recur (id-ref->title-ref result ref-set opts) result (inc depth)))))))
(if (some->> (:block/title ent) (re-find id-ref-pattern))
(let [ref-set (loop [result-refs (:block/refs ent)
current-refs (:block/refs ent)
depth 0]
(if (or (>= depth max-depth) (empty? current-refs))
result-refs
(let [next-refs (set (mapcat :block/refs current-refs))
result-refs' (apply conj result-refs next-refs)]
(if (= (count result-refs') (count result-refs))
result-refs
(recur (apply conj result-refs next-refs) next-refs (inc depth))))))
opts {:replace-block-id? true}]
(loop [result (id-ref->title-ref (:block/title ent) ref-set opts)
last-result nil
depth 0]
(if (or (>= depth max-depth)
(= last-result result))
result
(recur (id-ref->title-ref result ref-set opts) result (inc depth)))))
(:block/title ent))))

View File

@@ -460,6 +460,7 @@
(def property-value-placeholder
[:map
[:db/ident [:= :logseq.property/empty-placeholder]]
[:block/uuid :uuid]
[:block/tx-id {:optional true} :int]])
(defn entity-dispatch-key [db ent]
@@ -486,10 +487,10 @@
:closed-value-block
(and (:logseq.property/created-from-property d) (:logseq.property/value d))
:property-value-block
(:block/uuid d)
:block
(= (:db/ident d) :logseq.property/empty-placeholder)
:property-value-placeholder
(:block/uuid d)
:block
(:db/ident d)
:db-ident-key-value)]
dispatch-key))

View File

@@ -2691,10 +2691,14 @@
(rum/local false ::hover-container?)
[state block tag config popup-opts]
(let [*hover? (::hover? state)
*hover-container? (::hover-container? state)]
*hover-container? (::hover-container? state)
private-tag? (ldb/private-tags (:db/ident tag))]
[:div.block-tag.items-center.relative
{:key (str "tag-" (:db/id tag))
:class (if @*hover? "bg-gray-03 rounded pr-1" "px-1")
:class (if @*hover?
(str "bg-gray-03 rounded "
(if private-tag? "px-1" "pr-1"))
"pl-2 pr-1")
:on-mouse-over #(reset! *hover-container? true)
:on-mouse-out #(reset! *hover-container? false)}
[:div.flex.items-center
@@ -2722,10 +2726,12 @@
:on-click #(db-property-handler/delete-property-value! (:db/id block) :block/tags (:db/id tag))}
"Remove tag"))])
popup-opts))}
(if (and @*hover? (not (ldb/private-tags (:db/ident tag))))
(if (and @*hover? (not private-tag?))
[:a.inline-flex.text-muted-foreground
{:title "Remove this tag"
:style {:margin-top 1}
:style {:margin-top 1
:padding-left 2
:margin-right 2}
:on-pointer-down
(fn [e]
(util/stop e)

View File

@@ -29,9 +29,10 @@
opts (dissoc opts :color?)
item (cond
(and (= :emoji (:type icon')) (:id icon'))
[:em-emoji (merge {:id (:id icon')
:style {:line-height 1}}
opts)]
[:span.ui__icon
[:em-emoji (merge {:id (:id icon')
:style {:line-height 1}}
opts)]]
(and (= :tabler-icon (:type icon')) (:id icon'))
(ui/icon (:id icon') opts))]

View File

@@ -614,20 +614,26 @@
:else
id)))
(defn- select-aux
(defn- sort-select-items
[property selected-choices items]
(if (:property/closed-values property)
items ; sorted by order
(sort-by
(juxt (fn [item] (not (selected-choices (:db/id item))))
db-property/property-value-content)
items)))
(rum/defc select-aux
[block property {:keys [items selected-choices multiple-choices?] :as opts}]
(let [selected-choices (->> selected-choices
(remove nil?)
(remove #(= :logseq.property/empty-placeholder %)))
(remove #(= :logseq.property/empty-placeholder %))
set)
clear-value (str "No " (:block/title property))
clear-value-label [:div.flex.flex-row.items-center.gap-1.text-sm
(ui/icon "x" {:size 14})
[:div clear-value]]
items (if (:property/closed-values property)
items ; sorted by order
(sort-by (fn [item]
(db-property/property-value-content item))
items))
[items _] (hooks/use-state (sort-select-items property selected-choices items))
items' (->>
(if (and (seq selected-choices)
(not multiple-choices?)

View File

@@ -2,7 +2,6 @@
(:require [clojure.set :as set]
[clojure.string :as string]
[clojure.walk :as w]
[dommy.core :as d]
[dommy.core :as dom]
[electron.ipc :as ipc]
[frontend.commands :as commands]
@@ -1255,7 +1254,7 @@
(when-let [timeout @*action-bar-timeout]
(js/clearTimeout timeout))
(state/pub-event! [:editor/hide-action-bar])
(when (seq (remove (fn [b] (d/has-class? b "ls-table-cell"))
(when (seq (remove (fn [b] (dom/has-class? b "ls-table-cell"))
(state/get-selection-blocks)))
(let [timeout (js/setTimeout #(state/pub-event! [:editor/show-action-bar]) delay)]
(reset! *action-bar-timeout timeout)))))

View File

@@ -275,6 +275,17 @@ html.is-mobile {
display: inline-block;
}
.ui__icon svg {
filter: brightness(0.8);
transition: filter .15s;
will-change: filter;
}
.ui__icon:hover svg {
filter: brightness(1);
transition-duration: .15s;
}
.type-icon {
@apply text-base text-center flex items-center justify-center rounded border mr-2 relative;