uses cursors instead, much clearer experience.

This commit is contained in:
2023-10-20 08:54:00 -07:00
parent ce8fa027b2
commit e3443a3dd8
5 changed files with 161 additions and 119 deletions

View File

@@ -151,8 +151,7 @@
(defn field-validation-error [m path & {:as data}]
(throw+ (ex-info m (merge data {:type :field-validation
:field-validation-errors [{:path path
:message [m]}]}))))
:form-errors (assoc-in {} path [m])}))))
(defn form-validation-error [m & {:as data}]
(throw+ (ex-info m (merge data {:type :form-validation
@@ -164,7 +163,8 @@
(mt2/key-transformer {:encode keyword->str :decode str->keyword})
mt2/string-transformer
mt2/json-transformer
(mt2/transformer {:name :arbitrary})))
(mt2/transformer {:name :arbitrary})
mt2/default-value-transformer))
(defn wrap-schema-decode [handler & {:keys [form-schema query-schema route-schema params-schema]}]
(fn [{:keys [form-params query-params params] :as request}]
@@ -290,18 +290,20 @@
(:errors (:explain (:error e))))]
(alog/warn ::form-4xx :errors errors)
(form-handler (assoc request
:last-form (assoc-errors-into-meta (:decoded e) errors)
:field-validation-errors errors)))
:last-form (:decoded e)
:field-validation-errors errors
:form-errors humanized)))
#_(html-response [:span.error-content.text-red-500 (:message &throw-context)]
:status 400))
(catch [:type :field-validation] e
(form-handler (assoc request
:last-form (assoc-errors-into-meta (:form e) (:field-validation-errors e))
:field-validation-errors (:field-validation-errors e))))
:last-form (:form e)
:form-errors (:form-errors e))))
(catch [:type :form-validation] e
(form-handler (assoc request
:last-form (with-meta (:form e) {:errors (:form-validation-errors e)})
:form-validation-errors (:form-validation-errors e)))))))
:last-form (:form e)
:form-validation-errors (:form-validation-errors e)
:form-errors {:errors (:form-validation-errors e)}))))))
(defn apply-middleware-to-all-handlers [key->handler f]