Fix toggle-amount-mode: set up form cursor context for grid re-render

The toggle-amount-mode handler was failing because account-grid-body*
uses fc/cursor-map which requires the form cursor context to be set up.
Added manual cursor binding in toggle-amount-mode to create a cursor
pointing to the transaction/accounts vector and bind it to fc/*current*
before rendering the grid.
This commit is contained in:
2026-05-21 07:33:15 -07:00
parent 535ef4d113
commit 857a1536ef

View File

@@ -23,6 +23,7 @@
[auto-ap.ssr.grid-page-helper :as helper] [auto-ap.ssr.grid-page-helper :as helper]
[auto-ap.ssr.transaction.common :refer [grid-page]] [auto-ap.ssr.transaction.common :refer [grid-page]]
[auto-ap.ssr.components.multi-modal :as mm] [auto-ap.ssr.components.multi-modal :as mm]
[auto-ap.cursor :as cursor]
[auto-ap.ssr.form-cursor :as fc] [auto-ap.ssr.form-cursor :as fc]
[auto-ap.ssr.hx :as hx] [auto-ap.ssr.hx :as hx]
[auto-ap.ssr.svg :as svg] [auto-ap.ssr.svg :as svg]
@@ -297,19 +298,19 @@
(defn account-grid-body* [request] (defn account-grid-body* [request]
(let [snapshot (-> request :multi-form-state :snapshot) (let [snapshot (-> request :multi-form-state :snapshot)
amount-mode (or (:amount-mode snapshot) "$") amount-mode (or (:amount-mode snapshot) "$")
total (Math/abs (or (:transaction/amount snapshot) 0.0))] total (Math/abs (or (:transaction/amount snapshot) 0.0))]
(com/data-grid {:headers [(com/data-grid-header {} "Account") (com/data-grid {:headers [(com/data-grid-header {} "Account")
(com/data-grid-header {:class "w-32"} "Location") (com/data-grid-header {:class "w-32"} "Location")
(com/data-grid-header {:class "w-16"} (com/data-grid-header {:class "w-16"}
(com/radio-card {:options [{:value "$" :content "$"} (com/radio-card {:options [{:value "$" :content "$"}
{:value "%" :content "%"}] {:value "%" :content "%"}]
:value amount-mode :value amount-mode
:name "step-params[amount-mode]" :name "step-params[amount-mode]"
:orientation :horizontal :orientation :horizontal
:hx-post (bidi/path-for ssr-routes/only-routes ::route/toggle-amount-mode) :hx-post (bidi/path-for ssr-routes/only-routes ::route/toggle-amount-mode)
:hx-target "#account-grid-body" :hx-target "#account-grid-body"
:hx-swap "outerHTML" :hx-swap "outerHTML"
:hx-include "closest form"})) :hx-include "closest form"}))
(com/data-grid-header {:class "w-16"})]} (com/data-grid-header {:class "w-16"})]}
(fc/cursor-map #(transaction-account-row* {:value % (fc/cursor-map #(transaction-account-row* {:value %
:client-id (-> request :entity :transaction/client :db/id) :client-id (-> request :entity :transaction/client :db/id)
@@ -358,13 +359,19 @@
(let [snapshot (-> request :multi-form-state :snapshot) (let [snapshot (-> request :multi-form-state :snapshot)
old-mode (or (:amount-mode snapshot) "$") old-mode (or (:amount-mode snapshot) "$")
new-mode (or (get-in request [:form-params :amount-mode]) "$") new-mode (or (get-in request [:form-params :amount-mode]) "$")
total (Math/abs (:transaction/amount snapshot)) total (Math/abs (or (:transaction/amount snapshot) 0.0))
accounts (convert-accounts-mode (:transaction/accounts snapshot) old-mode new-mode total)] accounts (convert-accounts-mode (:transaction/accounts snapshot) old-mode new-mode total)
(html-response updated-request (-> request
[:div#account-grid-body (assoc-in [:multi-form-state :snapshot :transaction/accounts] accounts)
(account-grid-body* (-> request (assoc-in [:multi-form-state :snapshot :amount-mode] new-mode))
(assoc-in [:multi-form-state :snapshot :transaction/accounts] accounts) mfs-cursor (cursor/cursor (:multi-form-state updated-request))
(assoc-in [:multi-form-state :snapshot :amount-mode] new-mode)))]))) accounts-cursor (get (get (get mfs-cursor :snapshot) :step-params) :transaction/accounts)]
(binding [fc/*form-data* (:multi-form-state updated-request)
fc/*form-errors* {}
fc/*current* accounts-cursor]
(html-response
[:div#account-grid-body
(account-grid-body* updated-request)]))))
(defrecord BasicDetailsStep [linear-wizard] (defrecord BasicDetailsStep [linear-wizard]
mm/ModalWizardStep mm/ModalWizardStep
@@ -1316,12 +1323,12 @@
(fn render [cursor request] (fn render [cursor request]
(let [snapshot (-> request :multi-form-state :snapshot) (let [snapshot (-> request :multi-form-state :snapshot)
amount-mode (or (:amount-mode snapshot) "$") amount-mode (or (:amount-mode snapshot) "$")
total (Math/abs (or (:transaction/amount snapshot) 0.0))] total (Math/abs (or (:transaction/amount snapshot) 0.0))]
(transaction-account-row* (transaction-account-row*
{:value cursor {:value cursor
:client-id (:client-id (:query-params request)) :client-id (:client-id (:query-params request))
:amount-mode amount-mode :amount-mode amount-mode
:total total}))) :total total})))
(fn build-new-row [base _] (fn build-new-row [base _]
(assoc base :transaction-account/location "Shared"))) (assoc base :transaction-account/location "Shared")))
(wrap-schema-enforce :query-schema [:map (wrap-schema-enforce :query-schema [:map