|  | @@ -61,15 +61,14 @@
 | 
	
		
			
				|  |  |  ;; Helper fns
 | 
	
		
			
				|  |  |  ;; ==========
 | 
	
		
			
				|  |  |  (defn validate-property-value
 | 
	
		
			
				|  |  | -  "Validates the property value in a property tuple. The property value can be
 | 
	
		
			
				|  |  | -  one or many of a value to validated. validate-fn is a fn that is called
 | 
	
		
			
				|  |  | -  directly on each value to return a truthy value. validate-fn varies by
 | 
	
		
			
				|  |  | -  property type"
 | 
	
		
			
				|  |  | +  "Validates the property value in a property tuple. The property value is
 | 
	
		
			
				|  |  | +  expected to be a coll if the property has a :many cardinality. validate-fn is
 | 
	
		
			
				|  |  | +  a fn that is called directly on each value to return a truthy value.
 | 
	
		
			
				|  |  | +  validate-fn varies by property type"
 | 
	
		
			
				|  |  |    [db validate-fn [{:block/keys [schema] :as property} property-val] & {:keys [new-closed-value?]}]
 | 
	
		
			
				|  |  |    ;; For debugging
 | 
	
		
			
				|  |  |    ;; (when (not= "logseq.property" (namespace (:db/ident property))) (prn :validate-val (dissoc property :property/closed-values) property-val))
 | 
	
		
			
				|  |  | -  (let [property (d/entity db (:db/ident property))
 | 
	
		
			
				|  |  | -        validate-fn' (if (db-property-type/property-types-with-db (:type schema)) (partial validate-fn db) validate-fn)
 | 
	
		
			
				|  |  | +  (let [validate-fn' (if (db-property-type/property-types-with-db (:type schema)) (partial validate-fn db) validate-fn)
 | 
	
		
			
				|  |  |          validate-fn'' (if (and (db-property-type/closed-value-property-types (:type schema))
 | 
	
		
			
				|  |  |                                 ;; new closed values aren't associated with the property yet
 | 
	
		
			
				|  |  |                                 (not new-closed-value?)
 | 
	
	
		
			
				|  | @@ -79,10 +78,9 @@
 | 
	
		
			
				|  |  |                                 (contains? (set (map :db/id (:property/closed-values property))) val)))
 | 
	
		
			
				|  |  |                          validate-fn')]
 | 
	
		
			
				|  |  |      (if (db-property/many? property)
 | 
	
		
			
				|  |  | -      (if (coll? property-val)
 | 
	
		
			
				|  |  | -        (every? validate-fn'' property-val)
 | 
	
		
			
				|  |  | -        (validate-fn'' property-val))
 | 
	
		
			
				|  |  | +      (every? validate-fn'' property-val)
 | 
	
		
			
				|  |  |        (or (validate-fn'' property-val)
 | 
	
		
			
				|  |  | +          ;; also valid if value is empty-placeholder
 | 
	
		
			
				|  |  |            (if (= :db.type/ref (:db/valueType property))
 | 
	
		
			
				|  |  |              (and (integer? property-val)
 | 
	
		
			
				|  |  |                   (= :logseq.property/empty-placeholder (:db/ident (d/entity db property-val))))
 | 
	
	
		
			
				|  | @@ -105,7 +103,7 @@
 | 
	
		
			
				|  |  |                 (if-let [property (and (db-property/property? k)
 | 
	
		
			
				|  |  |                                        (d/entity db k))]
 | 
	
		
			
				|  |  |                   (update m :block/properties (fnil conj [])
 | 
	
		
			
				|  |  | -                         [(assoc (select-keys property [:db/ident :db/valueType])
 | 
	
		
			
				|  |  | +                         [(assoc (select-keys property [:db/ident :db/valueType :db/cardinality])
 | 
	
		
			
				|  |  |                                   :block/schema
 | 
	
		
			
				|  |  |                                   (select-keys (:block/schema property) [:type])
 | 
	
		
			
				|  |  |                                   :property/closed-values
 |