From d0028f403c58d47d085f4099a68c35ae32f37643 Mon Sep 17 00:00:00 2001 From: Bryce Date: Wed, 17 Jun 2026 13:32:30 -0700 Subject: [PATCH] fix(ssr): allow picking bank account when editing a transaction rule The bank-account filter rendered "Please select a client" even when a client was set on the rule. Two causes: - Inside (fc/with-field :transaction-rule/bank-account ...) the cursor is rebound to the bank-account field, so (:transaction-rule/client (fc/field-value)) read the nil bank-account value and the server rendered the placeholder. The clientId watcher only fires on change, so when editing (client preset, unchanged) the htmx swap never corrected it. Read the client from the form root before entering the field. - The clientId-change swap used innerHTML, nesting a fresh typeahead inside the stale one and breaking its Alpine refs. Use outerHTML so the typeahead is replaced in place. Co-Authored-By: Claude Opus 4.8 --- .../auto_ap/ssr/admin/transaction_rules.clj | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/clj/auto_ap/ssr/admin/transaction_rules.clj b/src/clj/auto_ap/ssr/admin/transaction_rules.clj index 803e709b..3da9c20a 100644 --- a/src/clj/auto_ap/ssr/admin/transaction_rules.clj +++ b/src/clj/auto_ap/ssr/admin/transaction_rules.clj @@ -722,25 +722,26 @@ :class "w-24" :placeholder "NTG" :value (fc/field-value)})])) - (fc/with-field :transaction-rule/bank-account - (com/validated-field - (-> {:label "Bank Account" - :errors (fc/field-errors) - :x-show "bankAccountFilter"} - hx/alpine-appear) - [:div.w-96 - [:div#bank-account-changer {:hx-get (bidi/path-for ssr-routes/only-routes :bank-account-typeahead) - :hx-trigger "changed" - :hx-target "next *" - :hx-include "#bank-account-changer" - :hx-swap "innerHTML" + (let [rule-client (fc/field-value (:transaction-rule/client fc/*current*))] + (fc/with-field :transaction-rule/bank-account + (com/validated-field + (-> {:label "Bank Account" + :errors (fc/field-errors) + :x-show "bankAccountFilter"} + hx/alpine-appear) + [:div.w-96 + [:div#bank-account-changer {:hx-get (bidi/path-for ssr-routes/only-routes :bank-account-typeahead) + :hx-trigger "changed" + :hx-target "next *" + :hx-include "#bank-account-changer" + :hx-swap "outerHTML" - :hx-vals (format "js:{name: '%s', 'client-id': event.detail.clientId}" (fc/field-name)) - :x-init "$watch('clientId', cid => $dispatch('changed', $data))"}] + :hx-vals (format "js:{name: '%s', 'client-id': event.detail.clientId}" (fc/field-name)) + :x-init "$watch('clientId', cid => $dispatch('changed', $data))"}] - (bank-account-typeahead* {:client-id (:transaction-rule/client (fc/field-value)) - :name (fc/field-name) - :value (fc/field-value)})])) + (bank-account-typeahead* {:client-id (or (:db/id rule-client) rule-client) + :name (fc/field-name) + :value (fc/field-value)})]))) (com/field (-> {:label "Amount" :x-show "amountFilter"}