Michiel, Thanks for an excellent example and further explanation on how to get validation to work! I've tossed away my makeshift implementation and started to put my wizard step components inside your wizard implementation wrapper.
Looks like with some extra polishing it can be extracted as a reusable component that noobies like me can use to get the job done. Thanks! On Sun, Oct 5, 2014 at 5:42 AM, Michiel Borkent <[email protected]> wrote: > Of course the wizard-state map should be wrapped in an atom. And :callback > can just be foo-valid? if called with no arguments. Maybe :validator is a > better name, because it's not really a callback. > > On Sunday, October 5, 2014 2:37:52 PM UTC+2, Michiel Borkent wrote: > > > 1. How to enable/disable Steps (and prev/next buttons) depending on > validation results of the form in a current step? Particularly, I'm trying > to understand if it's possible to bind a validation function to step > enablement property > > > > A possible approach: keep the "valid-state" of each component in a map, > along with data which view is currently showing. > > > > Atom for a specific wizard instance: > > (def wizard-state {:showing :foo > > :panel-states {:foo false > > :bar false}} > > > > Then each component can provide a callback by which the wizard can > determine the validity of the currently showing component: > > > > [wizard menu-state > > {:id :foo :title "Foo" :component [foo-panel] :callback (fn [] > (foo-valid?))} > > {:id :bar :title "Bar" :component [bar-panel] :callback (fn [] > (bar-valid?)}] > > > > foo-valid? would be a specific function for the foo panel, like > > (and (seq (-> @foo-state :field1)) (seq (-> @foo-state :field2))) > > > > > 2. How to bind "next/previous" buttons state to "steps" state? For > example, for the 1st step "Previous" button should not be visible. > > > > This logic should be encoded in the wizard, if the wizard is responsible > for showing the previous or next button. It it is rendering the first > element, disable previous. If the current showing panel is not valid > (according to callback) or if showing the last panel, disable next. > > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to the Google Groups > "ClojureScript" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/clojurescript. > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
