diff --git a/src/cljs/orcpub/character_builder.cljs b/src/cljs/orcpub/character_builder.cljs index c49864cd..f57bf2fb 100644 --- a/src/cljs/orcpub/character_builder.cljs +++ b/src/cljs/orcpub/character_builder.cljs @@ -148,8 +148,17 @@ (js/console.warn "NO PREREQ_FN" (::t/name option) prereq))) (::t/prereqs option)))) +(defn ->keyword + "Converts a value to a keyword, handling both string and keyword inputs. + Strings like \":weapon\" are parsed correctly to :weapon. + Keywords like :weapon are returned as-is." + [v] + (if (keyword? v) + v + (reader/read-string v))) + (defn set-class-fn [i options-map] - (fn [e] (let [new-key (keyword (.. e -target -value))] + (fn [e] (let [new-key (->keyword (.. e -target -value))] (dispatch [:set-class new-key i options-map])))) (def set-class (memoize set-class-fn)) diff --git a/src/cljs/orcpub/dnd/e5/events.cljs b/src/cljs/orcpub/dnd/e5/events.cljs index 687655c6..7f5f7bbc 100644 --- a/src/cljs/orcpub/dnd/e5/events.cljs +++ b/src/cljs/orcpub/dnd/e5/events.cljs @@ -2959,6 +2959,15 @@ ;;;; Item Builder +(defn ->keyword + "Converts a value to a keyword, handling both string and keyword inputs. + Strings like \":weapon\" are parsed correctly to :weapon. + Keywords like :weapon are returned as-is." + [v] + (if (keyword? v) + v + (reader/read-string v))) + (reg-event-db ::mi/set-item-description item-interceptors @@ -2970,26 +2979,26 @@ item-interceptors (fn [item [_ item-type-str]] (-> item - (assoc ::mi/type (keyword item-type-str)) + (assoc ::mi/type (->keyword item-type-str)) (dissoc ::mi/subtypes)))) (reg-event-db ::mi/set-item-weapon-type item-interceptors (fn [item [_ item-type-str]] - (assoc item ::weapons/type (keyword item-type-str)))) + (assoc item ::weapons/type (->keyword item-type-str)))) (reg-event-db ::mi/set-item-damage-type item-interceptors (fn [item [_ item-type-str]] - (assoc item ::weapons/damage-type (keyword item-type-str)))) + (assoc item ::weapons/damage-type (->keyword item-type-str)))) (reg-event-db ::mi/set-item-melee-ranged item-interceptors (fn [item [_ item-type-str]] - (let [kw (keyword item-type-str)] + (let [kw (->keyword item-type-str)] (assoc item ::weapons/melee? (= kw :melee) ::weapons/ranged? (= kw :ranged))))) @@ -3089,7 +3098,7 @@ ::mi/set-item-rarity item-interceptors (fn [item [_ item-type-str]] - (assoc item ::mi/rarity (keyword item-type-str)))) + (assoc item ::mi/rarity (->keyword item-type-str)))) (reg-event-db ::mi/set-item-damage-bonus @@ -3694,7 +3703,7 @@ :ability ability-kw :type] - (keyword type)))) + (->keyword type)))) (defn set-mod-value [item mods-path mod-key value] (if value @@ -3726,7 +3735,7 @@ [::mi/internal-modifiers speed-type-kw :type] - (keyword mod-type)))) + (->keyword mod-type)))) (reg-event-db ::mi/set-speed-mod-value