mirror of
https://github.com/logseq/logseq.git
synced 2026-02-01 22:47:36 +00:00
fix: available choices still shows other tags' scoped choices
This commit is contained in:
29
deps/db/src/logseq/db/frontend/property.cljs
vendored
29
deps/db/src/logseq/db/frontend/property.cljs
vendored
@@ -8,6 +8,7 @@
|
||||
[logseq.common.uuid :as common-uuid]
|
||||
[logseq.db.common.order :as db-order]
|
||||
[logseq.db.frontend.db-ident :as db-ident]
|
||||
[logseq.db.frontend.entity-util :as entity-util]
|
||||
[logseq.db.frontend.property.type :as db-property-type]))
|
||||
|
||||
(def ^:private property-ignore-rtc
|
||||
@@ -841,3 +842,31 @@
|
||||
[db-ident]
|
||||
(contains? db-property-type/value-ref-property-types
|
||||
(get-in built-in-properties [db-ident :schema :type])))
|
||||
|
||||
(defn- normalize-choice-ids
|
||||
[values]
|
||||
(set (keep :db/id values)))
|
||||
|
||||
(defn scoped-closed-values
|
||||
"Get scoped closed values for a given block"
|
||||
[property block & {:keys [values]}]
|
||||
(let [values (or values (:property/closed-values property))
|
||||
classes (:block/tags block)
|
||||
class-ids* (set (keep :db/id classes))
|
||||
class-ids (if (entity-util/class? block)
|
||||
(conj class-ids* (:db/id block))
|
||||
class-ids*)
|
||||
excluded-ids (normalize-choice-ids
|
||||
(mapcat :logseq.property/choice-exclusions classes))]
|
||||
(filter (fn [value]
|
||||
(let [scope-ids (set (keep :db/id (:logseq.property/choice-classes value)))]
|
||||
(cond
|
||||
(empty? scope-ids)
|
||||
(not (contains? excluded-ids (:db/id value)))
|
||||
|
||||
(seq class-ids)
|
||||
(seq (set/intersection scope-ids class-ids))
|
||||
|
||||
:else
|
||||
false)))
|
||||
values)))
|
||||
|
||||
@@ -417,21 +417,18 @@
|
||||
values (:property/closed-values property)
|
||||
choices (->> values
|
||||
(keep (fn [value]
|
||||
(db/sub-block (:db/id value))))
|
||||
(filter (fn [block]
|
||||
(let [classes (set (map :db/id (:logseq.property/choice-classes block)))]
|
||||
(if (and (seq classes) (ldb/class? owner-block))
|
||||
(contains? classes (:db/id owner-block))
|
||||
true)))))
|
||||
(db/sub-block (:db/id value)))))
|
||||
scoped-choices (db-property/scoped-closed-values property owner-block {:values choices})
|
||||
|
||||
excluded-ids (set (keep :db/id (:logseq.property/choice-exclusions owner-block)))
|
||||
hidden-choices (filter (fn [block]
|
||||
(and (empty? (:logseq.property/choice-classes block))
|
||||
(contains? excluded-ids (:db/id block))))
|
||||
choices)
|
||||
scoped-choices)
|
||||
visible-choices (remove (fn [block]
|
||||
(and (empty? (:logseq.property/choice-classes block))
|
||||
(contains? excluded-ids (:db/id block))))
|
||||
choices)
|
||||
scoped-choices)
|
||||
list-choices (if @*show-hidden?
|
||||
(concat visible-choices hidden-choices)
|
||||
visible-choices)
|
||||
@@ -445,7 +442,7 @@
|
||||
list-choices)]
|
||||
|
||||
[:div.ls-property-dropdown.ls-property-choices-sub-pane
|
||||
(when (seq choices)
|
||||
(when (seq scoped-choices)
|
||||
[:<>
|
||||
(when (and (seq hidden-choices) (ldb/class? owner-block))
|
||||
(shui/button
|
||||
|
||||
@@ -595,30 +595,6 @@
|
||||
:else
|
||||
id)))
|
||||
|
||||
(defn- normalize-choice-ids
|
||||
[values]
|
||||
(set (keep :db/id values)))
|
||||
|
||||
(defn- scoped-closed-values
|
||||
[property block]
|
||||
(let [values (:property/closed-values property)
|
||||
classes (:block/tags block)
|
||||
class-ids (set (keep :db/id classes))
|
||||
excluded-ids (normalize-choice-ids
|
||||
(mapcat :logseq.property/choice-exclusions classes))]
|
||||
(filter (fn [value]
|
||||
(let [scope-ids (set (keep :db/id (:logseq.property/choice-classes value)))]
|
||||
(cond
|
||||
(empty? scope-ids)
|
||||
(not (contains? excluded-ids (:db/id value)))
|
||||
|
||||
(seq class-ids)
|
||||
(seq (set/intersection scope-ids class-ids))
|
||||
|
||||
:else
|
||||
false)))
|
||||
values)))
|
||||
|
||||
(defn- sort-select-items
|
||||
[property selected-choices items]
|
||||
(if (:property/closed-values property)
|
||||
@@ -959,7 +935,7 @@
|
||||
(let [date? (and
|
||||
(= (:db/ident property) :logseq.property.repeat/recur-unit)
|
||||
(= :date (:logseq.property/type (:property opts))))
|
||||
values (cond->> (scoped-closed-values property block)
|
||||
values (cond->> (db-property/scoped-closed-values property block)
|
||||
date?
|
||||
(remove (fn [b] (contains? #{:logseq.property.repeat/recur-unit.minute :logseq.property.repeat/recur-unit.hour} (:db/ident b)))))]
|
||||
(keep (fn [block]
|
||||
|
||||
Reference in New Issue
Block a user