From 80371fb8e7d43ea05de49e3448a0eb0913cd641c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:39:33 +0000 Subject: [PATCH 1/4] Initial plan From 6008f0294066c1494aa23ee271d3c64801200974 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:48:41 +0000 Subject: [PATCH 2/4] Fix dropdown menus in custom item builder by using reader/read-string for keyword conversion Co-authored-by: codeGlaze <11318451+codeGlaze@users.noreply.github.com> --- src/cljs/orcpub/dnd/e5/events.cljs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cljs/orcpub/dnd/e5/events.cljs b/src/cljs/orcpub/dnd/e5/events.cljs index 687655c6..86bdac0c 100644 --- a/src/cljs/orcpub/dnd/e5/events.cljs +++ b/src/cljs/orcpub/dnd/e5/events.cljs @@ -2970,26 +2970,26 @@ item-interceptors (fn [item [_ item-type-str]] (-> item - (assoc ::mi/type (keyword item-type-str)) + (assoc ::mi/type (reader/read-string 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 (reader/read-string 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 (reader/read-string 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 (reader/read-string item-type-str)] (assoc item ::weapons/melee? (= kw :melee) ::weapons/ranged? (= kw :ranged))))) @@ -3089,7 +3089,7 @@ ::mi/set-item-rarity item-interceptors (fn [item [_ item-type-str]] - (assoc item ::mi/rarity (keyword item-type-str)))) + (assoc item ::mi/rarity (reader/read-string item-type-str)))) (reg-event-db ::mi/set-item-damage-bonus @@ -3694,7 +3694,7 @@ :ability ability-kw :type] - (keyword type)))) + (reader/read-string type)))) (defn set-mod-value [item mods-path mod-key value] (if value @@ -3726,7 +3726,7 @@ [::mi/internal-modifiers speed-type-kw :type] - (keyword mod-type)))) + (reader/read-string mod-type)))) (reg-event-db ::mi/set-speed-mod-value From df7dbbb15bc7811f8c2007df38a9597d95cd5a6a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 13:52:04 +0000 Subject: [PATCH 3/4] Fix class selector dropdown to use reader/read-string Co-authored-by: codeGlaze <11318451+codeGlaze@users.noreply.github.com> --- src/cljs/orcpub/character_builder.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cljs/orcpub/character_builder.cljs b/src/cljs/orcpub/character_builder.cljs index c49864cd..9891431c 100644 --- a/src/cljs/orcpub/character_builder.cljs +++ b/src/cljs/orcpub/character_builder.cljs @@ -149,7 +149,7 @@ (::t/prereqs option)))) (defn set-class-fn [i options-map] - (fn [e] (let [new-key (keyword (.. e -target -value))] + (fn [e] (let [new-key (reader/read-string (.. e -target -value))] (dispatch [:set-class new-key i options-map])))) (def set-class (memoize set-class-fn)) From 07b0492f05c62ba96573f50d32df3461d01465fa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 30 Sep 2025 15:28:39 +0000 Subject: [PATCH 4/4] Fix dropdown menus by properly handling both keyword and string inputs Co-authored-by: codeGlaze <11318451+codeGlaze@users.noreply.github.com> --- src/cljs/orcpub/character_builder.cljs | 11 ++++++++++- src/cljs/orcpub/dnd/e5/events.cljs | 23 ++++++++++++++++------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/cljs/orcpub/character_builder.cljs b/src/cljs/orcpub/character_builder.cljs index 9891431c..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 (reader/read-string (.. 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 86bdac0c..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 (reader/read-string 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 (reader/read-string 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 (reader/read-string 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 (reader/read-string 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 (reader/read-string 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] - (reader/read-string 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] - (reader/read-string mod-type)))) + (->keyword mod-type)))) (reg-event-db ::mi/set-speed-mod-value