From 3f7f0a0aafe6ce05efc75546afbafbcd6c7505ed Mon Sep 17 00:00:00 2001 From: Bryce Date: Fri, 3 Nov 2023 16:29:46 -0700 Subject: [PATCH] vendors walkthrough works good --- src/clj/auto_ap/ssr/admin/vendors.clj | 98 ++++++++++++---------- src/clj/auto_ap/ssr/components/buttons.clj | 2 +- 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/src/clj/auto_ap/ssr/admin/vendors.clj b/src/clj/auto_ap/ssr/admin/vendors.clj index df4d4acc..57ea0def 100644 --- a/src/clj/auto_ap/ssr/admin/vendors.clj +++ b/src/clj/auto_ap/ssr/admin/vendors.clj @@ -42,10 +42,11 @@ [bidi.bidi :as bidi] [clojure.string :as str] [datomic.api :as dc] + [hiccup.util :as hu] [malli.core :as mc] [malli.util :as mut] - [com.brunobonacci.mulog :as mu] - [hiccup.util :as hu])) + [slingshot.slingshot :refer [try+]] + [malli.error :as me])) (defn filters [request] [:form {"hx-trigger" "change delay:500ms, keyup changed from:.hot-filter delay:1000ms" @@ -265,9 +266,11 @@ n))))) (defn info-modal [{:keys [form-params form-errors entity]}] + (println "FORM ERRORS" form-errors) (com/stacked-modal-card-2 0 - {"@keydown.enter.prevent.stop" "$refs.next.click()"} + {"@keydown.enter.prevent.stop" "$refs.next.click()" + "hx-target" "this"} (com/modal-header {} [:div.flex [:div.p-2 "Basic Info"] [:p.ml-2.rounded.bg-gray-200.p-2.dark:bg-gray-600 [:span {:x-text "vendorName"}]]]) @@ -317,6 +320,7 @@ [:div.flex.justify-end (com/form-errors {:errors (:errors fc/*form-errors*)}) [:div.flex.items-baseline.gap-x-4 + (println "HERE" form-errors) (com/validated-save-button {:errors (seq form-errors) :x-ref "next" :class "w-48" @@ -398,7 +402,8 @@ (defn terms-modal [{:keys [form-errors entity form-params]}] (com/stacked-modal-card-2 1 - {"@keydown.enter.prevent.stop" "$refs.next.click()"} + {"@keydown.enter.prevent.stop" "$refs.next.click()" + "hx-target" "this"} (com/modal-header {} [:div.flex [:div.p-2 "Vendor Terms"] @@ -441,6 +446,7 @@ :hx-get (bidi/path-for ssr-routes/only-routes ::route/new-automatic-payment) :index (count (fc/field-value))} "New automatic payment for client"))))]) + (println "errors" (seq form-errors)) (com/modal-footer {} [:div.flex.justify-end @@ -517,7 +523,8 @@ (defn account-modal [{:keys [form-errors entity form-params]}] (com/stacked-modal-card-2 2 - {"@keydown.enter.prevent.stop" "$refs.next.click()"} + {"@keydown.enter.prevent.stop" "$refs.next.click()" + "hx-target" "this"} (com/modal-header {} [:div.flex @@ -568,7 +575,8 @@ (defn address-modal [{:keys [form-errors entity form-params]}] (com/stacked-modal-card-2 3 - {"@keydown.enter.prevent.stop" "$refs.next.click()"} + {"@keydown.enter.prevent.stop" "$refs.next.click()" + "hx-target" "this"} (com/modal-header {} [:div.flex ;; TODO standardize how these headers are built @@ -728,7 +736,7 @@ "printAs" (:vendor/print-as form-params)}) :class "w-full h-full"} [:form#my-form (-> {:hx-ext "response-targets" - :hx-swap "outerHTML swap:300ms" + :hx-swap "outerHTML" :hx-target-400 "#form-errors .error-content" :hx-trigger "submit" :class "h-full w-full"} @@ -822,43 +830,28 @@ [] (account-override-row fc/*current*)))) -(defn validate [request] - (cond (= (:step (:query-params request)) - "Info") - (schema-enforce-request request - :form-schema (mut/select-keys form-schema #{:vendor/name :vendor/print-as})) - - (= (:step (:query-params request)) - "Terms") - (schema-enforce-request request - :form-schema (mut/select-keys form-schema #{:vendor/terms :vendor/terms-overrides :vendor/automatically-paid-when-due})) - - (= (:step (:query-params request)) - "Account") - (schema-enforce-request request - :form-schema (mut/select-keys form-schema #{:vendor/default-account :vendor/account-overrides})) - - (= (:step (:query-params request)) - "Address") - (schema-enforce-request request - :form-schema (mut/select-keys form-schema #{:vendor/address})) - - (= (:step (:query-params request)) - "Legal") - (schema-enforce-request request - :form-schema form-schema) - - :else nil) +(defn modal-next [{:keys [form-params form-errors] :as request}] (html-response [:div] - :headers {"hx-trigger-after-settle" "modalnext" - "hx-reswap" "none"})) - -#_(defn validate-failed [request] - (d) - (html-response () :headers {"hx-trigger-after-settle" "modalnext" "hx-reswap" "none"})) +(defn single-modal [which {:keys [form-params form-errors] :as request}] + (println "ERRORS ARE" form-errors) + (fc/start-form form-params form-errors + (html-response (which request)))) + +(defn branch-handler [f & {:as matches}] + (fn branch-handler* [request] + (let [c (f request)] + (println matches) + (some->> matches + (filter (fn [[matching-key matching-handler]] + (= c matching-key))) + first + seq + ((fn [[_ matching-handler]] + (matching-handler request))))))) + (defn account-typeahead [{{:keys [name value client-id] :as qp} :query-params}] (html-response (account-typeahead* {:name name :value value @@ -871,12 +864,29 @@ {::route/page (helper/page-route grid-page) ::route/table (helper/table-route grid-page) ::route/new dialog - ::route/validate (-> validate + ::route/validate (-> (branch-handler (comp :step :query-params) + "Info" (-> modal-next + (wrap-schema-enforce :form-schema (mut/select-keys form-schema #{:vendor/name :vendor/print-as})) + (wrap-form-4xx-2 (partial single-modal info-modal))) + "Terms" (-> modal-next + (wrap-schema-enforce :form-schema + (mut/select-keys form-schema #{:vendor/terms :vendor/terms-overrides :vendor/automatically-paid-when-due})) + (wrap-form-4xx-2 (partial single-modal terms-modal))) + "Account" (-> modal-next + (wrap-schema-enforce :form-schema + (mut/select-keys form-schema #{:vendor/default-account :vendor/account-overrides})) + (wrap-form-4xx-2 (partial single-modal account-modal))) + "Address" + (-> modal-next + (wrap-schema-enforce :form-schema + (mut/select-keys form-schema #{:vendor/address})) + (wrap-form-4xx-2 (partial single-modal address-modal)))) (wrap-schema-enforce :query-schema [:map [:step :string]]) + (wrap-schema-decode :form-schema form-schema) (wrap-nested-form-params) - (wrap-form-4xx-2 (-> dialog - (wrap-schema-decode :form-schema form-schema) - (wrap-entity [:form-params :db/id] default-read)))) + #_(wrap-form-4xx-2 (-> dialog + (wrap-entity [:form-params :db/id] default-read))) + ) ::route/save (-> save (wrap-entity [:form-params :db/id] default-read) (wrap-schema-enforce :form-schema form-schema) diff --git a/src/clj/auto_ap/ssr/components/buttons.clj b/src/clj/auto_ap/ssr/components/buttons.clj index c8b8d00c..90d664ba 100644 --- a/src/clj/auto_ap/ssr/components/buttons.clj +++ b/src/clj/auto_ap/ssr/components/buttons.clj @@ -180,7 +180,7 @@ :type "submit" :class (cond-> (or class "") true (hh/add-class "w-32") (seq errors) (hh/add-class "animate-shake"))} - (merge params) + (merge (dissoc params :class)) (dissoc :errors)) (if (seq children) children