diff --git a/src/main/frontend/components/property.cljs b/src/main/frontend/components/property.cljs index 4011591057..1a0386ed62 100644 --- a/src/main/frontend/components/property.cljs +++ b/src/main/frontend/components/property.cljs @@ -320,9 +320,38 @@ (inline-text {} :markdown (str value)))))]))))) +(defn- get-property-from-db [name] + (when-not (string/blank? name) + (db/entity [:block/name (util/page-name-sanity-lc name)]))) + +(defn- add-property-from-dropdown + "Adds an existing or new property from dropdown. Used from a block or page context. + For pages, used to add both schema properties or properties for a page" + [entity property-name {:keys [class-schema? blocks-container-id]}] + (let [repo (state/get-current-repo)] + (if-let [property (get-property-from-db property-name)] + (if (contains? gp-property/db-hidden-built-in-properties (keyword property-name)) + (do (notification/show! "This is a built-in property that can't be used." :error) + (exit-edit-property)) + (if (= "class" (:block/type entity)) + (add-property! entity property-name "" {:class-schema? class-schema?}) + (let [editor-id (str "ls-property-" blocks-container-id (:db/id entity) "-" (:db/id property))] + (set-editing! property editor-id "" "")))) + ;; new property + (if (gp-property/valid-property-name? (str ":" property-name)) + (if (= "class" (:block/type entity)) + (add-property! entity property-name "" {:class-schema? class-schema?}) + (do + (db-property/upsert-property! repo property-name {:type :default} {}) + ;; configure new property + (when-let [property (get-property-from-db property-name)] + (state/set-sub-modal! #(property-config repo property))))) + (do (notification/show! "This is an invalid property name. A property name cannot start with non-alphanumeric characters e.g. '#' or '[['." :error) + (exit-edit-property)))))) + (rum/defcs property-input < rum/reactive shortcut/disable-all-shortcuts - [state entity *property-key *property-value {:keys [blocks-container-id class-schema?] + [state entity *property-key *property-value {:keys [class-schema?] :as opts}] (let [entity-properties (->> (keys (:block/properties entity)) (map #(:block/original-name (db/entity [:block/uuid %]))) @@ -331,13 +360,9 @@ (remove entity-properties) (remove (->> gp-property/db-hidden-built-in-properties (map name) - set))) - get-property-f (fn [name] - (when-not (string/blank? name) - (db/entity [:block/name (util/page-name-sanity-lc name)]))) - repo (state/get-current-repo)] + set)))] (if @*property-key - (let [property (get-property-f @*property-key)] + (let [property (get-property-from-db @*property-key)] [:div.ls-property-add.grid.grid-cols-4.gap-1.flex.flex-row.items-center [:div.col-span-1 @*property-key] [:div.col-span-3.flex.flex-row @@ -353,22 +378,8 @@ :input-default-placeholder "Add a property" :on-chosen (fn [{:keys [value]}] (reset! *property-key value) - (if-let [property (get-property-f value)] - (if (contains? gp-property/db-hidden-built-in-properties (keyword value)) - (do (notification/show! "This is a built-in property that can't be used." :error) - (reset! *property-key nil) - (exit-edit-property)) - (let [editor-id (str "ls-property-" blocks-container-id (:db/id entity) "-" (:db/id property))] - (set-editing! property editor-id "" ""))) - (if (gp-property/valid-property-name? (str ":" value)) - (do - (db-property/upsert-property! repo value {:type :default} {}) - ;; configure new property - (when-let [property (get-property-f value)] - (state/set-sub-modal! #(property-config repo property)))) - (do (notification/show! "This is an invalid property name. A property name cannot start with non-alphanumeric characters e.g. '#' or '[['." :error) - (reset! *property-key nil) - (exit-edit-property)))))})]))) + ;; property already exists? + (add-property-from-dropdown entity value opts))})]))) (rum/defcs new-property < rum/reactive (rum/local nil ::property-key)