diff --git a/deps/db/src/logseq/db/frontend/malli_schema.cljs b/deps/db/src/logseq/db/frontend/malli_schema.cljs index b1a2dabda..afe376064 100644 --- a/deps/db/src/logseq/db/frontend/malli_schema.cljs +++ b/deps/db/src/logseq/db/frontend/malli_schema.cljs @@ -79,7 +79,7 @@ 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)) + ;; (when (not (string/starts-with? (namespace (:db/ident property)) "logseq.")) (prn :validate-val (dissoc property :property/closed-values) property-val)) (let [validate-fn' (if (db-property-type/property-types-with-db (:type schema)) (fn [value] (validate-fn db value {:new-closed-value? new-closed-value?})) diff --git a/deps/outliner/src/logseq/outliner/property.cljs b/deps/outliner/src/logseq/outliner/property.cljs index dca8a8c87..18594a6c7 100644 --- a/deps/outliner/src/logseq/outliner/property.cljs +++ b/deps/outliner/src/logseq/outliner/property.cljs @@ -221,8 +221,10 @@ [conn property-id v property-type] (if (and (integer? v) (or (not= property-type :number) - ;; Allows :number property to use number as a ref (for closed value) or value. Number value maybe only used in tests - (and (= property-type :number) (= property-id (:db/ident (:logseq.property/created-from-property (d/entity @conn v))))))) + ;; Allows :number property to use number as a ref (for closed value) or value + (and (= property-type :number) + (or (= property-id (:db/ident (:logseq.property/created-from-property (d/entity @conn v)))) + (= :logseq.property/empty-placeholder (:db/ident (d/entity @conn v))))))) v ;; only value-ref-property types should call this (find-or-create-property-value conn property-id v))) diff --git a/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj b/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj index 47cd64b9c..68a5d3b44 100644 --- a/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj +++ b/scripts/src/logseq/tasks/dev/db_and_file_graphs.clj @@ -16,7 +16,8 @@ "electron.db" "frontend.handler.db-based." "frontend.worker.handler.page.db-based" - "frontend.components.property" "frontend.components.class" "frontend.components.db-based"])) + "frontend.components.property" "frontend.components.class" "frontend.components.db-based" + "frontend.components.objects"])) (def file-graph-ns "Namespaces or parent namespaces _only_ for file graphs" @@ -38,6 +39,7 @@ "src/main/frontend/components/class.cljs" "src/main/frontend/components/property.cljs" "src/main/frontend/components/property" + "src/main/frontend/components/objects.cljs" "src/main/frontend/components/db_based" "src/electron/electron/db.cljs"]) diff --git a/src/main/frontend/components/objects.cljs b/src/main/frontend/components/objects.cljs index 9f51e7b73..ee34996c0 100644 --- a/src/main/frontend/components/objects.cljs +++ b/src/main/frontend/components/objects.cljs @@ -1,5 +1,5 @@ (ns frontend.components.objects - "Tagged objects" + "Provides table views for class objects and property related objects" (:require [frontend.components.views :as views] [frontend.db :as db] [logseq.db :as ldb] @@ -15,29 +15,29 @@ [frontend.modules.outliner.ui :as ui-outliner-tx] [frontend.modules.outliner.op :as outliner-op])) -(defn- get-all-objects +(defn- get-class-objects [class] (->> (db-model/get-class-objects (state/get-current-repo) (:db/id class)) (map (fn [row] (assoc row :id (:db/id row)))))) -(defn- add-new-object! +(defn- add-new-class-object! [class set-data!] (p/let [block (editor-handler/api-insert-new-block! "" {:page (:block/uuid class) :properties {:block/tags (:db/id class)} :edit-block? false}) - _ (set-data! (get-all-objects class))] + _ (set-data! (get-class-objects class))] (editor-handler/edit-block! (db/entity [:block/uuid (:block/uuid block)]) 0 :unknown-container))) (defn- get-views - [class] - (let [class (db/entity (:db/id class))] + [ent] + (let [class (db/entity (:db/id ent))] (-> (filter (fn [b] (= (:db/ident class) (:logseq.property/view-for b))) (:block/_parent class)) (ldb/sort-by-order)))) -(rum/defc objects-inner < rum/static +(rum/defc class-objects-inner < rum/static [config class objects properties] (let [[loading? set-loading?] (rum/use-state nil) [view-entity set-view-entity!] (rum/use-state nil) @@ -57,7 +57,7 @@ (when-let [view (first views)] (set-view-entity! view)) (p/let [_result (db-async/> (db-model/sub-class-objects repo (:db/id class)) (map (fn [row] (assoc row :id (:db/id row)))))] [:div.ml-2 - (objects-inner config class objects properties)]))) + (class-objects-inner config class objects properties)]))) + +(defn- get-property-related-objects [repo property] + (->> (db-model/get-property-related-objects repo (:db/id property)) + (map (fn [row] (assoc row :id (:db/id row)))))) + +(defn- add-new-property-object! + [property set-data!] + (p/let [block (editor-handler/api-insert-new-block! "" + {:page (:block/uuid property) + :properties {(:db/ident property) (:db/id (db/entity :logseq.property/empty-placeholder))} + :edit-block? false}) + _ (set-data! (get-property-related-objects (state/get-current-repo) property))] + (editor-handler/edit-block! (db/entity [:block/uuid (:block/uuid block)]) 0 :unknown-container))) + +(rum/defc property-related-objects-inner < rum/static + [config property objects properties] + (let [[loading? set-loading?] (rum/use-state nil) + [view-entity set-view-entity!] (rum/use-state nil) + [data set-data!] (rum/use-state objects) + columns (views/build-columns config properties)] + + (rum/use-effect! + (fn [] + (set-data! objects)) + [objects]) + + (rum/use-effect! + (fn [] + (set-loading? true) + (p/let [_result (db-async/> (d/q '[:find [?objects ...] + :in $ ?prop + :where [?objects ?prop]] + (conn/get-db repo) + (:db/ident property)) + (map #(db-utils/entity repo %))))) (defn get-all-namespace-relation [repo]