fix: duplicate closed value validation

c65958f5ec didn't fix it correctly
for the "closed value" values
pull/10544/head
Gabriel Horner 2023-11-20 16:07:53 -05:00
parent 6749577105
commit c69c22c716
2 changed files with 15 additions and 10 deletions

View File

@ -645,9 +645,8 @@
(nil? resolved-value) (nil? resolved-value)
nil nil
(some (fn [b] (and (if (contains? (get-in b [:block/schema :type]) "closed value") (some (fn [b] (and (= resolved-value (or (db-pu/property-value-when-closed b)
(= resolved-value (get-in b [:block/schema :value])) (:block/uuid b)))
(= resolved-value (:block/uuid b)))
(not= id (:block/uuid b)))) block-values) (not= id (:block/uuid b)))) block-values)
(do (do
(notification/show! "Choice already exists" :warning) (notification/show! "Choice already exists" :warning)

View File

@ -1,6 +1,6 @@
(ns frontend.handler.db-based.property.util (ns frontend.handler.db-based.property.util
"DB-graph only utility fns for properties" "DB-graph only utility fns for properties"
(:require [frontend.db :as db] (:require [frontend.db.utils :as db-utils]
[frontend.state :as state] [frontend.state :as state]
[logseq.db.frontend.property :as db-property] [logseq.db.frontend.property :as db-property]
[logseq.graph-parser.util :as gp-util] [logseq.graph-parser.util :as gp-util]
@ -9,19 +9,19 @@
(defn get-property-name (defn get-property-name
"Get a property's name given its uuid" "Get a property's name given its uuid"
[uuid] [uuid]
(:block/original-name (db/entity [:block/uuid uuid]))) (:block/original-name (db-utils/entity [:block/uuid uuid])))
(defn get-built-in-property-uuid (defn get-built-in-property-uuid
"Get a built-in property's uuid given its name" "Get a built-in property's uuid given its name"
([property-name] (get-built-in-property-uuid (state/get-current-repo) property-name)) ([property-name] (get-built-in-property-uuid (state/get-current-repo) property-name))
([repo property-name] ([repo property-name]
(:block/uuid (db/entity repo [:block/name (name property-name)])))) (:block/uuid (db-utils/entity repo [:block/name (name property-name)]))))
(defn get-user-property-uuid (defn get-user-property-uuid
"Get a user property's uuid given its unsanitized name" "Get a user property's uuid given its unsanitized name"
([property-name] (get-user-property-uuid (state/get-current-repo) property-name)) ([property-name] (get-user-property-uuid (state/get-current-repo) property-name))
([repo property-name] ([repo property-name]
(:block/uuid (db/entity repo [:block/name (gp-util/page-name-sanity-lc (name property-name))])))) (:block/uuid (db-utils/entity repo [:block/name (gp-util/page-name-sanity-lc (name property-name))]))))
(defonce *hidden-built-in-properties (atom #{})) (defonce *hidden-built-in-properties (atom #{}))
@ -42,11 +42,17 @@
[properties] [properties]
(->> properties (->> properties
(map (fn [[k v]] (map (fn [[k v]]
(let [prop-ent (db/entity [:block/uuid k])] (let [prop-ent (db-utils/entity [:block/uuid k])]
[(-> prop-ent :block/name keyword) [(-> prop-ent :block/name keyword)
(if (seq (get-in prop-ent [:block/schema :values])) ; closed values (if (seq (get-in prop-ent [:block/schema :values])) ; closed values
(when-let [block (db/entity [:block/uuid v])] (when-let [block (db-utils/entity [:block/uuid v])]
(or (:block/original-name block) (or (:block/original-name block)
(get-in block [:block/schema :value]))) (get-in block [:block/schema :value])))
v)]))) v)])))
(into {}))) (into {})))
(defn property-value-when-closed
"Returns property value if the given entity is type 'closed value' or nil"
[ent]
(when (contains? (:block/type ent) "closed value")
(get-in ent [:block/schema :value])))