From 6b9160ad5482ec1267710298251612a113991070 Mon Sep 17 00:00:00 2001 From: Arthur Xavier Date: Thu, 28 May 2020 13:43:38 -0300 Subject: [PATCH 1/3] Add default renderer for form's Forest structure --- src/Lumi/Components/Form.purs | 59 +++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/Lumi/Components/Form.purs b/src/Lumi/Components/Form.purs index 6535a507..85064795 100644 --- a/src/Lumi/Components/Form.purs +++ b/src/Lumi/Components/Form.purs @@ -5,6 +5,7 @@ module Lumi.Components.Form , build , build' , defaultRenderForm + , defaultRenderForest , useForm , useForm' , formState @@ -166,7 +167,7 @@ defaultRenderForm } -> Forest -> JSX -defaultRenderForm { inlineTable, forceTopLabels } { readonly } forest = +defaultRenderForm renderProps@{ inlineTable, forceTopLabels } { readonly } forest = element (R.unsafeCreateDOMComponent "lumi-form") { class: String.joinWith " " $ fold @@ -174,34 +175,44 @@ defaultRenderForm { inlineTable, forceTopLabels } { readonly } forest = , guard readonly ["readonly"] ] , children: - surround fieldDivider (map toRow (Array.mapMaybe pruneTree forest)) + surround fieldDivider + $ defaultRenderForest { forceTopLabels } + $ Array.mapMaybe pruneTree + $ forest } where fieldDivider = R.hr { className: "lumi field-divider" } - toRow :: Tree -> JSX - toRow = case _ of - Child { key, child } -> - maybe identity keyed key $ child - Wrapper { key, wrap: f, children } -> - maybe identity keyed key - $ f - $ intercalate [fieldDivider] - $ map (pure <<< toRow) - $ children - Node { label, key, required, validationError, children } -> - maybe identity keyed key $ - labeledField - { label: text body - { children = [ label ] - , className = toNullable (pure "field-label") - } - , value: intercalate fieldDivider (map toRow children) - , validationError - , required - , forceTopLabel: forceTopLabels - , style: R.css {} +defaultRenderForest + :: { forceTopLabels :: Boolean + } + -> Forest + -> Array JSX +defaultRenderForest renderProps@{ forceTopLabels } = map case _ of + Child { key, child } -> + maybe identity keyed key $ child + Wrapper { key, wrap: f, children } -> + maybe identity keyed key + $ f + $ intercalate [fieldDivider] + $ map pure + $ defaultRenderForest renderProps + $ children + Node { label, key, required, validationError, children } -> + maybe identity keyed key $ + labeledField + { label: text body + { children = [ label ] + , className = toNullable (pure "field-label") } + , value: intercalate fieldDivider (defaultRenderForest renderProps children) + , validationError + , required + , forceTopLabel: forceTopLabels + , style: R.css {} + } + where + fieldDivider = R.hr { className: "lumi field-divider" } -- | Render a form with state managed automatically. useForm From d9a05548a3b34162f2392dda79fa608dc2c31869 Mon Sep 17 00:00:00 2001 From: Arthur Xavier Date: Thu, 28 May 2020 15:01:26 -0300 Subject: [PATCH 2/3] Update purescript-numbers --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 9b980afd..62c3a3eb 100644 --- a/bower.json +++ b/bower.json @@ -25,7 +25,7 @@ "purescript-integers": "^4.0.0", "purescript-maybe": "^4.0.0", "purescript-nullable": "^4.0.0", - "purescript-numbers": "^6.0.0", + "purescript-numbers": "^7.0.0", "purescript-prelude": "^4.0.1", "purescript-profunctor-lenses": ">=4.0.0 <7.0.0", "purescript-random": "^4.0.0", From 77c7ca74d94f68aad8146fe347ed5678df6d53bc Mon Sep 17 00:00:00 2001 From: Arthur Xavier Date: Tue, 2 Jun 2020 11:33:56 -0300 Subject: [PATCH 3/3] Export Forest constructors from Lumi.Components.Form --- src/Lumi/Components/Form.purs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Lumi/Components/Form.purs b/src/Lumi/Components/Form.purs index 85064795..7d218173 100644 --- a/src/Lumi/Components/Form.purs +++ b/src/Lumi/Components/Form.purs @@ -81,7 +81,7 @@ import Lumi.Components.Column (column) import Lumi.Components.FetchCache as FetchCache import Lumi.Components.Form.Defaults (formDefaults) as Defaults import Lumi.Components.Form.Internal (Forest, FormBuilder'(..), FormBuilder, SeqFormBuilder, Tree(..), formBuilder, formBuilder_, invalidate, pruneTree, sequential) -import Lumi.Components.Form.Internal (Forest, FormBuilder', FormBuilder, SeqFormBuilder', SeqFormBuilder, formBuilder, formBuilder_, invalidate, listen, parallel, revalidate, sequential) as Internal +import Lumi.Components.Form.Internal (Forest(..), FormBuilder', FormBuilder, SeqFormBuilder', SeqFormBuilder, formBuilder, formBuilder_, invalidate, listen, parallel, revalidate, sequential) as Internal import Lumi.Components.Form.Validation (setModified) import Lumi.Components.Form.Validation (Validated(..), Validator, _Validated, fromValidated, mustBe, mustEqual, nonEmpty, nonEmptyArray, nonNull, validNumber, validInt, validDate, optional, setFresh, setModified, validated, warn) as Validation import Lumi.Components.Input (alignToInput)