mirror of
https://github.com/logseq/logseq.git
synced 2026-05-24 20:54:09 +00:00
Merge branch 'feat/db' into feat/capacitor-new
This commit is contained in:
16
deps/common/src/logseq/common/util.cljs
vendored
16
deps/common/src/logseq/common/util.cljs
vendored
@@ -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))))
|
||||
|
||||
24
deps/db/src/logseq/db.cljs
vendored
24
deps/db/src/logseq/db.cljs
vendored
@@ -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]
|
||||
|
||||
28
deps/db/src/logseq/db/common/initial_data.cljs
vendored
28
deps/db/src/logseq/db/common/initial_data.cljs
vendored
@@ -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?
|
||||
|
||||
25
deps/db/src/logseq/db/common/view.cljs
vendored
25
deps/db/src/logseq/db/common/view.cljs
vendored
@@ -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
|
||||
|
||||
38
deps/db/src/logseq/db/frontend/content.cljs
vendored
38
deps/db/src/logseq/db/frontend/content.cljs
vendored
@@ -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))))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))]
|
||||
|
||||
@@ -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?)
|
||||
|
||||
@@ -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)))))
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user