| 
					
				 | 
			
			
				@@ -2,19 +2,22 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Builds core property concepts" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (:require [logseq.db.sqlite.util :as sqlite-util] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             [logseq.db.frontend.order :as db-order] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            [datascript.core :as d])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            [datascript.core :as d] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            [logseq.db.frontend.property.type :as db-property-type])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defn- closed-value-new-block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   [block-id value property] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (let [property-id (:db/ident property)] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    {:block/type #{"closed value"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :block/format :markdown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :block/uuid block-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :block/page property-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :block/content (str value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :block/closed-value-property property-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :logseq.property/created-from-property property-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     :block/parent property-id})) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (merge {:block/type #{"closed value"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :block/format :markdown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :block/uuid block-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :block/page property-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :block/closed-value-property property-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :logseq.property/created-from-property property-id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :block/parent property-id} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (if (db-property-type/original-value-ref-property-types (get-in property [:block/schema :type])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             {:property/value value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             {:block/content value})))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defn build-closed-value-block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Builds a closed value block to be transacted" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,19 +65,23 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Builds a property value entity given a block map/entity, a property entity or 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ident and its property value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   [block property value] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (-> {:block/uuid (d/squuid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       :block/format :markdown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       :block/content value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       :block/page (if (:block/page block) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     (:db/id (:block/page block)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (-> (merge 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       {:block/uuid (d/squuid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :block/format :markdown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :block/page (if (:block/page block) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      (:db/id (:block/page block)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      ;; page block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     (:db/id block)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       :block/parent (:db/id block) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       :logseq.property/created-from-property (or (:db/id property) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                  (when (keyword? property) {:db/ident property})) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       :block/order (db-order/gen-key)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      (:db/id block)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :block/parent (:db/id block) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :logseq.property/created-from-property (or (:db/id property) (:db/ident property)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :block/order (db-order/gen-key)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       (if (db-property-type/original-value-ref-property-types (get-in property [:block/schema :type])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         {:property/value value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         {:block/content value})) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       sqlite-util/block-with-timestamps)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+;; TODO: Add support for types besides :default when needed by getting property types 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+;; and passing them to build-property-value-block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defn build-property-values-tx-m 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Builds a map of property names to their property value blocks to be transacted, given a block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    and a properties map with raw property values" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -85,8 +92,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          (map (fn [[k v]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 [k 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  (if (set? v) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   (set (map #(build-property-value-block block' k %) v)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                   (build-property-value-block block' k v))])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (set (map #(build-property-value-block block' {:db/ident k} %) v)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (build-property-value-block block' {:db/ident k} v))])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          (into {})))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defn build-properties-with-ref-values 
			 |