From 857a1536ef9edee5605ca87d35c4f35d4b2a5b66 Mon Sep 17 00:00:00 2001 From: Bryce Date: Thu, 21 May 2026 07:33:15 -0700 Subject: [PATCH] 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. --- src/clj/auto_ap/ssr/transaction/edit.clj | 53 ++++++++++++++---------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/src/clj/auto_ap/ssr/transaction/edit.clj b/src/clj/auto_ap/ssr/transaction/edit.clj index 1441176d..f21b2ff8 100644 --- a/src/clj/auto_ap/ssr/transaction/edit.clj +++ b/src/clj/auto_ap/ssr/transaction/edit.clj @@ -23,6 +23,7 @@ [auto-ap.ssr.grid-page-helper :as helper] [auto-ap.ssr.transaction.common :refer [grid-page]] [auto-ap.ssr.components.multi-modal :as mm] + [auto-ap.cursor :as cursor] [auto-ap.ssr.form-cursor :as fc] [auto-ap.ssr.hx :as hx] [auto-ap.ssr.svg :as svg] @@ -297,19 +298,19 @@ (defn account-grid-body* [request] (let [snapshot (-> request :multi-form-state :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-header {:class "w-32"} "Location") (com/data-grid-header {:class "w-16"} - (com/radio-card {:options [{:value "$" :content "$"} - {:value "%" :content "%"}] - :value amount-mode - :name "step-params[amount-mode]" - :orientation :horizontal - :hx-post (bidi/path-for ssr-routes/only-routes ::route/toggle-amount-mode) - :hx-target "#account-grid-body" - :hx-swap "outerHTML" - :hx-include "closest form"})) + (com/radio-card {:options [{:value "$" :content "$"} + {:value "%" :content "%"}] + :value amount-mode + :name "step-params[amount-mode]" + :orientation :horizontal + :hx-post (bidi/path-for ssr-routes/only-routes ::route/toggle-amount-mode) + :hx-target "#account-grid-body" + :hx-swap "outerHTML" + :hx-include "closest form"})) (com/data-grid-header {:class "w-16"})]} (fc/cursor-map #(transaction-account-row* {:value % :client-id (-> request :entity :transaction/client :db/id) @@ -358,13 +359,19 @@ (let [snapshot (-> request :multi-form-state :snapshot) old-mode (or (:amount-mode snapshot) "$") new-mode (or (get-in request [:form-params :amount-mode]) "$") - total (Math/abs (:transaction/amount snapshot)) - accounts (convert-accounts-mode (:transaction/accounts snapshot) old-mode new-mode total)] - (html-response - [:div#account-grid-body - (account-grid-body* (-> request - (assoc-in [:multi-form-state :snapshot :transaction/accounts] accounts) - (assoc-in [:multi-form-state :snapshot :amount-mode] new-mode)))]))) + total (Math/abs (or (:transaction/amount snapshot) 0.0)) + accounts (convert-accounts-mode (:transaction/accounts snapshot) old-mode new-mode total) + updated-request (-> request + (assoc-in [:multi-form-state :snapshot :transaction/accounts] accounts) + (assoc-in [:multi-form-state :snapshot :amount-mode] new-mode)) + mfs-cursor (cursor/cursor (:multi-form-state updated-request)) + 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] mm/ModalWizardStep @@ -1316,12 +1323,12 @@ (fn render [cursor request] (let [snapshot (-> request :multi-form-state :snapshot) amount-mode (or (:amount-mode snapshot) "$") - total (Math/abs (or (:transaction/amount snapshot) 0.0))] - (transaction-account-row* - {:value cursor - :client-id (:client-id (:query-params request)) - :amount-mode amount-mode - :total total}))) + total (Math/abs (or (:transaction/amount snapshot) 0.0))] + (transaction-account-row* + {:value cursor + :client-id (:client-id (:query-params request)) + :amount-mode amount-mode + :total total}))) (fn build-new-row [base _] (assoc base :transaction-account/location "Shared"))) (wrap-schema-enforce :query-schema [:map