more migrating onto v2
This commit is contained in:
@@ -41,27 +41,29 @@
|
||||
(apply f (for [field fields]
|
||||
(aget consumed field)))))])
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::blurred
|
||||
(fn [_ [_ schema id field]]
|
||||
{:dispatch-n [[::forms/check-problems id schema]
|
||||
[::forms/visited id]]}))
|
||||
|
||||
(defn builder [{:keys [value on-change can-submit data-sub error-messages change-event submit-event id fullwidth? schema validation-error-string]}]
|
||||
(when (and change-event on-change)
|
||||
(throw "Either the form is to be managed by ::forms, or it should have value and on-change passed in"))
|
||||
(let [data-sub (or data-sub [::forms/form id])
|
||||
change-event (when-not on-change
|
||||
(or change-event [::forms/change id]))
|
||||
{:keys [data visited attempted-submit?] form-key :id} @(re-frame/subscribe data-sub)
|
||||
{:keys [data visited attempted-submit? problems] form-key :id} @(re-frame/subscribe data-sub)
|
||||
data (or value data)
|
||||
status @(re-frame/subscribe [::status/single id])
|
||||
can-submit (if can-submit @(re-frame/subscribe can-submit)
|
||||
true)
|
||||
;; TODO ONLY validate on blur
|
||||
problems (when schema
|
||||
|
||||
(m/explain schema data))]
|
||||
true)]
|
||||
(r/create-element Provider #js {:value #js {:can-submit can-submit
|
||||
:error-messages (or error-messages
|
||||
nil)
|
||||
:on-change on-change
|
||||
:change-event change-event
|
||||
:blur-event [::forms/visited id]
|
||||
:blur-event [::blurred schema id]
|
||||
:visited visited
|
||||
:submit-event submit-event
|
||||
:problems problems
|
||||
@@ -92,17 +94,14 @@
|
||||
(let [key (r/atom (random-uuid))]
|
||||
(fn [{:keys [value on-change can-submit error-messages fullwidth? schema]}]
|
||||
(let [data-sub [::forms/form @key]
|
||||
{:keys [data error visited]} @(re-frame/subscribe data-sub)
|
||||
data (or value data)
|
||||
problems (when schema
|
||||
(m/explain schema data))]
|
||||
{:keys [data error problems visited]} @(re-frame/subscribe data-sub)
|
||||
data (or value data)]
|
||||
(r/create-element Provider #js {:value #js {:can-submit can-submit
|
||||
:error-messages (or error-messages
|
||||
nil)
|
||||
:on-change on-change
|
||||
:blur-event [::forms/visited @key]
|
||||
:blur-event [::blurred schema @key]
|
||||
:visited visited
|
||||
:problems problems
|
||||
:error error
|
||||
:id @key
|
||||
:data data
|
||||
@@ -148,7 +147,10 @@
|
||||
event-or-value))
|
||||
data))
|
||||
|
||||
(defn blur-handler [path re-frame-blur-event _]
|
||||
(defn blur-handler [path re-frame-blur-event original-on-blur e]
|
||||
(when original-on-blur
|
||||
(original-on-blur e))
|
||||
|
||||
(re-frame/dispatch (-> re-frame-blur-event
|
||||
(conj path))))
|
||||
|
||||
@@ -159,7 +161,8 @@
|
||||
(consume FormScopeConsumer
|
||||
["scope"]
|
||||
(fn [scope]
|
||||
(let [full-field-path (cond
|
||||
(let [scope (or scope [])
|
||||
full-field-path (cond
|
||||
(sequential? field)
|
||||
(into scope field)
|
||||
|
||||
@@ -186,7 +189,7 @@
|
||||
["scope"]
|
||||
(fn [scope]
|
||||
(update child 1 (fn [child-props]
|
||||
(let [
|
||||
(let [scope (or scope [])
|
||||
full-field-path (cond
|
||||
(sequential? field)
|
||||
(into scope field)
|
||||
@@ -203,7 +206,7 @@
|
||||
(if on-change
|
||||
(partial form-change-handler data full-field-path on-change)
|
||||
(partial change-handler full-field-path change-event))
|
||||
:on-blur (partial blur-handler full-field-path blur-event)
|
||||
:on-blur (partial blur-handler full-field-path blur-event (:on-blur child-props))
|
||||
:value value)
|
||||
(update :class (fn [class]
|
||||
(str class
|
||||
|
||||
Reference in New Issue
Block a user