Lumi.Components.Form
- Package
- purescript-lumi-components
- Repository
- lumihq/purescript-lumi-components
#build Source
build :: forall result unvalidated props. FormBuilder { readonly :: Boolean | props } unvalidated result -> { forceTopLabels :: Boolean, formProps :: { readonly :: Boolean | props }, inlineTable :: Boolean, onChange :: (unvalidated -> unvalidated) -> Effect Unit, value :: unvalidated } -> JSXCreate a React component for a form from a FormBuilder.
Note: this function should be fully applied, to avoid remounting the component on each render.
#build' Source
build' :: forall result unvalidated formProps renderProps ui. (Record renderProps -> formProps -> ui -> JSX) -> FormBuilder' ui formProps unvalidated result -> { formProps :: formProps, onChange :: (unvalidated -> unvalidated) -> Effect Unit, value :: unvalidated | renderProps } -> JSXCreate a React component for a form from a FormBuilder' and a custom
rendering function.
Note: this function should be fully applied, to avoid remounting the component on each render.
#useForm Source
useForm :: forall result unvalidated props. FormBuilder { readonly :: Boolean | props } unvalidated result -> { forceTopLabels :: Boolean, formProps :: { readonly :: Boolean | props }, initialState :: unvalidated, inlineTable :: Boolean } -> Hook (UseState unvalidated) { form :: JSX, formData :: unvalidated, reset :: Effect Unit, setFormData :: (unvalidated -> unvalidated) -> Effect Unit, setModified :: Effect Unit, validated :: Maybe result }Render a form with state managed automatically.
#useForm' Source
useForm' :: forall result unvalidated props ui. FormBuilder' ui props unvalidated result -> unvalidated -> props -> Hook (UseState unvalidated) { form :: ui, formData :: unvalidated, reset :: Effect Unit, setFormData :: (unvalidated -> unvalidated) -> Effect Unit, setModified :: Effect Unit, validated :: Maybe result }Like useForm, but allows an alternative render implementation
to be provided as an additional argument.
#formState Source
formState :: forall result unvalidated props. ReactComponent { forceTopLabels :: Boolean, form :: FormBuilder { readonly :: Boolean | props } unvalidated result, formProps :: { readonly :: Boolean | props }, initialState :: unvalidated, inlineTable :: Boolean, render :: { form :: JSX, formData :: unvalidated, reset :: Effect Unit, setFormData :: (unvalidated -> unvalidated) -> Effect Unit, setModified :: Effect Unit, validated :: Maybe result } -> JSX }Consume useForm as a render-prop component. Useful when useForm
would be preferred but you don't want to migrate an entire component
to React's hooks API.
Note: this function should be fully applied, to avoid remounting the component on each render.
#static Source
static :: forall value props. JSX -> FormBuilder props value UnitCreate an always-valid FormBuilder that renders the supplied JSX.
#section Source
section :: forall value props. String -> FormBuilder props value UnitA formatted section header used to visually separate the parts of a form
#inputBox Source
inputBox :: forall props. InputProps -> FormBuilder { readonly :: Boolean | props } String StringA configurable input box makes a FormBuilder for strings
#textbox Source
textbox :: forall props. FormBuilder { readonly :: Boolean | props } String StringA simple text box makes a FormBuilder for strings
#passwordBox Source
passwordBox :: forall props. FormBuilder { readonly :: Boolean | props } String StringA simple password box makes a FormBuilder for strings
#textarea Source
textarea :: forall props. FormBuilder { readonly :: Boolean | props } String StringA simple text box makes a FormBuilder for strings
#switch Source
switch :: forall props. FormBuilder { readonly :: Boolean | props } Boolean BooleanA switch is an editor for booleans which displays Yes or No.
#radioGroup Source
radioGroup :: forall a props. Eq a => Orientation -> Array { label :: JSX, value :: a } -> FormBuilder { readonly :: Boolean | props } (Maybe a) (Maybe a)A form that edits an optional structure represented by group of radio buttons, visually oriented in either horizontal or vertical fashion.
This is similar to select, but displays radio buttons instead.
#file Source
file :: forall props. { backend :: UploadBackend, variant :: UploadVariant } -> FormBuilder { readonly :: Boolean | props } (Array FileId) (Array FileId)A editor consisting of a file picker.
#genericSelect Source
genericSelect :: forall rep a props. Generic a rep => GenericSelect rep => Array { label :: String, value :: a } -> FormBuilder { readonly :: Boolean | props } (Maybe a) (Maybe a)given values which are composed from a sum-type, generate a select dropdown from its elements
data Yup = One | Two genericSelect [{label: "1st", value: One}, {label: "2nd", value: Two}] This would serialize to- and from select options automatically
#GenericSelect Source
class GenericSelect rep whereMembers
fromString :: String -> Maybe reptoString :: rep -> String
Instances
(GenericSelect a, GenericSelect b) => GenericSelect (Sum a b)(IsSymbol name) => GenericSelect (Constructor name NoArguments)
#multiSelect Source
multiSelect :: forall a props. (a -> String) -> Array { label :: String, value :: a } -> FormBuilder { readonly :: Boolean | props } (Array a) (Array a)An editor consisting of a multi-select dropdown.
#asyncSelect Source
asyncSelect :: forall a props. (String -> Aff (Array a)) -> (a -> SelectOption) -> (a -> JSX) -> FormBuilder { readonly :: Boolean | props } (Maybe a) (Maybe a)An editor which uses an API call to populate a single-select drop-down.
#asyncSelectByKey Source
asyncSelectByKey :: forall a id props. (id -> Aff a) -> (String -> Aff (Array a)) -> (id -> String) -> (String -> id) -> (a -> SelectOption) -> (a -> JSX) -> FormBuilder { readonly :: Boolean | props } (Maybe id) (Maybe id)Similar to asyncSelect but allows the current value to be specified using only its key.
#number Source
number :: forall props. { max :: Maybe Number, min :: Maybe Number, step :: InputStep } -> FormBuilder { readonly :: Boolean | props } String StringA form which edits a number. The form produces a string as a result in order to allow more control over validation (e.g. to allow special handling of the empty string, or to distinguish 1, 1.0, and 1.00000 from each other).
See also validNumber from the Validation module.
#array Source
array :: forall a u props. { addLabel :: String, defaultValue :: u, editor :: FormBuilder { readonly :: Boolean | props } u a, label :: String } -> FormBuilder { readonly :: Boolean | props } (Array u) (Array a)Edit an Array of values.
This FormBuilder displays a removable section for each array element,
along with an "Add..." button in the final row.
#fixedSizeArray Source
fixedSizeArray :: forall a u props. { editor :: FormBuilder { readonly :: Boolean | props } u a, label :: String } -> FormBuilder { readonly :: Boolean | props } (Array u) (Array a)Edit an Array of values without letting the user add or remove entries.
#arrayModal Source
arrayModal :: forall a componentProps props. Union componentProps (onChange :: a -> Effect Unit, value :: a) (onChange :: a -> Effect Unit, value :: a | componentProps) => Nub (onChange :: a -> Effect Unit, value :: a | componentProps) (onChange :: a -> Effect Unit, value :: a | componentProps) => { addLabel :: String, component :: { onChange :: a -> Effect Unit, value :: a | componentProps } -> JSX, componentProps :: Record componentProps, defaultValue :: a, label :: String, summary :: { readonly :: Boolean | props } -> a -> JSX } -> FormBuilder { readonly :: Boolean | props } (Array a) (Array a)Edit an Array of values.
Unlike array, this FormBuilder uses a modal popup for adding and
editing array elements.
Note: arrayModal does not support validation, in the sense that the
component inside the modal popup cannot reject its form state when the
use clicks the save button.
#asyncEffect Source
asyncEffect :: forall a props. String -> JSX -> Aff (a -> a) -> FormBuilder props a aA dummy form that, whenever the specified key changes, performs an asynchronous effect. It displays the specified JSX while the effect is not complete, sets the form data to the result of the effect and returns it.
#effect Source
effect :: forall a props. String -> Effect (a -> a) -> FormBuilder props a aA dummy form that, whenever the specified key changes, performs an effect. It sets the form data to the result of the effect and returns it.
#initializer Source
initializer :: forall value props. Nub (initialized :: Boolean | value) (initialized :: Boolean | value) => JSX -> (props -> Record value -> Aff ({ initialized :: Boolean | value } -> { initialized :: Boolean | value })) -> SeqFormBuilder props { initialized :: Boolean | value } UnitSequential SeqFormBuilder used for asynchronously initializing some
piece of form data, invalidating the form and preventing the rendering of
subsequent fields while the supplied Aff is not completed.
For example:
myForm = parallel do
initializer mempty \props value -> do
foo <- fetchDefaultFoo
pure $ value
{ foo = foo
, bar = props.bar
}
sequential ado
foo <- focus (SProxy :: SProxy "foo") textbox
bar <- focus (SProxy :: SProxy "bar") switch
in { foo, bar }
#via Source
via :: forall result a s props ui. Iso' s a -> FormBuilder' ui props a result -> FormBuilder' ui props s resultModify a FormBuilder using a (partial) Iso.
Technically, we don't require to (from s) = s, but we do require
from (to a) = a for the form to act sensibly. Since there's no
PartialIso in profunctor-lenses, we use Iso here.
Caveat emptor, you get what you pay for if you pass in a dodgy
Iso here.
#focus Source
focus :: forall result a s props ui. Lens' s a -> FormBuilder' ui props a result -> FormBuilder' ui props s resultFocus a FormBuilder on a smaller piece of state, using a Lens.
#match Source
match :: forall a t s result props ui. Monoid ui => Prism s s a a -> Prism s t a result -> FormBuilder' ui props a result -> FormBuilder' ui props s tFocus a FormBuilder on a possible type of state, using a Prism.
We need two Prisms in order to change the result type for
validation purposes.
#match_ Source
match_ :: forall a s props ui. Monoid ui => Prism' s a -> FormBuilder' ui props a a -> FormBuilder' ui props s sFocus a FormBuilder on a possible type of state, using a Prism,
ignoring validation.
#withProps Source
withProps :: forall result unvalidated props ui. (props -> FormBuilder' ui props unvalidated result) -> FormBuilder' ui props unvalidated resultMake the props available. This allows for changing the structure of a form builder based on the current props.
#withValue Source
withValue :: forall result unvalidated props ui. (unvalidated -> FormBuilder' ui props unvalidated result) -> FormBuilder' ui props unvalidated resultMake the value available. This allows for changing the structure of a form builder based on the current value.
#mapProps Source
mapProps :: forall a u q p ui. (q -> p) -> FormBuilder' ui p u a -> FormBuilder' ui q u aChange the props type.
#mapUI Source
mapUI :: forall result value props ui' ui. (props -> value -> Maybe result -> ui -> ui') -> FormBuilder' ui props value result -> FormBuilder' ui' props value resultChange the UI type of a form based on the props, the current value and the validated result.
#mapUI_ Source
mapUI_ :: forall result value props ui' ui. (ui -> ui') -> FormBuilder' ui props value result -> FormBuilder' ui' props value resultChange the UI type of a form.
#indent Source
indent :: forall a u props. String -> RequiredField -> FormBuilder props u a -> FormBuilder props u aIndent a Forest of editors by one level, providing a label.
#wrap Source
wrap :: forall a u props. (Array JSX -> JSX) -> FormBuilder props u a -> FormBuilder props u a#filterWithProps Source
filterWithProps :: forall a u props ui. Monoid ui => (props -> u -> Boolean) -> FormBuilder' ui props u a -> FormBuilder' ui props u aFilter parts of the form based on the current value (and the props).
#withKey Source
withKey :: forall a u props. String -> FormBuilder props u a -> FormBuilder props u aTODO: document
Re-exports from Lumi.Components.Form.Defaults
#formDefaults Source
formDefaults :: forall a. FormDefaults a => aRe-exports from Lumi.Components.Form.Internal
#SeqFormBuilder' Source
newtype SeqFormBuilder' ui props unvalidated resultA form builder where each field depends on the validity of the previous ones.
That is, every field is only displayed if all the previous ones are valid.
Forms can be turned into components using the build function.
Instances
(Warn (Above (Text "The `Parallel` instance to `FormBuilder` is deprecated.") (Text "Prefer using `Form.parallel` and `Form.sequential` instead."))) => Parallel (FormBuilder' (Array Tree) props unvalidated) (SeqFormBuilder' (Array Tree) props unvalidated)Newtype (SeqFormBuilder' ui props unvalidated result) _Functor (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Apply (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Applicative (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Bind (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Monad (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Alt (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Plus (SeqFormBuilder' ui props unvalidated)(Monoid ui) => Alternative (SeqFormBuilder' ui props unvalidated)(Monoid ui) => MonadZero (SeqFormBuilder' ui props unvalidated)
#SeqFormBuilder Source
type SeqFormBuilder props unvalidated result = SeqFormBuilder' Forest props unvalidated result#FormBuilder' Source
newtype FormBuilder' ui props unvalidated resultAn applicative functor which can be used to build forms.
Forms can be turned into components using the build function.
Instances
Newtype (FormBuilder' ui props unvalidated result) _Functor (FormBuilder' ui props unvalidated)(Semigroup ui) => Apply (FormBuilder' ui props unvalidated)(Monoid ui) => Applicative (FormBuilder' ui props unvalidated)(Warn (Above (Text "The `Parallel` instance to `FormBuilder` is deprecated.") (Text "Prefer using `Form.parallel` and `Form.sequential` instead."))) => Parallel (FormBuilder' (Array Tree) props unvalidated) (SeqFormBuilder' (Array Tree) props unvalidated)
#FormBuilder Source
type FormBuilder props unvalidated result = FormBuilder' Forest props unvalidated result#sequential Source
sequential :: forall value props. String -> (FormBuilder props value) ~> (SeqFormBuilder props value)#revalidate Source
revalidate :: forall result unvalidated props ui. FormBuilder' ui props unvalidated result -> props -> unvalidated -> Maybe resultRevalidate the form, in order to display error messages or create a validated result.
#parallel Source
parallel :: forall value props. String -> (SeqFormBuilder props value) ~> (FormBuilder props value)#listen Source
listen :: forall result unvalidated props ui. (unvalidated -> Aff (unvalidated -> unvalidated)) -> FormBuilder' ui props unvalidated result -> FormBuilder' ui props unvalidated resultListens for changes in a form's value and allows for performing asynchronous effects and additional value changes.
#invalidate Source
invalidate :: forall b a unvalidated props ui. FormBuilder' ui props unvalidated a -> FormBuilder' ui props unvalidated bInvalidate a form, keeping its user interface but discarding the result and possibly changing its type.
#formBuilder_ Source
formBuilder_ :: forall a props. (props -> a -> (a -> Effect Unit) -> JSX) -> FormBuilder props a aThe simplest way to create a FormBuilder. Create a FormBuilder
provided a function that, given the current value and a change callback,
renders a form element as JSX.
#formBuilder Source
formBuilder :: forall a unvalidated props. (props -> unvalidated -> { edit :: ((unvalidated -> unvalidated) -> Effect Unit) -> JSX, validate :: Maybe a }) -> FormBuilder props unvalidated aCreate a FormBuilder from a function which produces a form
element as JSX and a validated result.
Re-exports from Lumi.Components.Form.Validation
#Validated Source
data Validated aThe Validated type describes the state of a validated form field. This
state may be used to modify the way this form field or its validation
messages are displayed.
TODO: maybe convert this type to a record? Possible extensions to this
type (as a record) could be a field valid :: Boolean to display an
indicator that the field is valid, or a field
validating :: Maybe (Canceler a) to control form fields with asynchronous
validation.
Constructors
Instances
#fromValidated Source
fromValidated :: forall u v. CanValidate u v => Validated v -> u#warn Source
warn :: forall result validated unvalidated props. CanValidate unvalidated validated => WarningValidator result -> FormBuilder { readonly :: Boolean | props } unvalidated result -> FormBuilder { readonly :: Boolean | props } (Validated validated) resultAttach a validation function to a FormBuilder p u a, producing a new
FormBuilder that takes a Validated u as form state and displays a
warning message if its form data triggers a warning, while still allowing
the form to proceed.
#validated Source
validated :: forall result_ result validated unvalidated props. CanValidate unvalidated validated => Validator result_ result -> FormBuilder { readonly :: Boolean | props } unvalidated result_ -> FormBuilder { readonly :: Boolean | props } (Validated validated) resultAttach a validation function to a FormBuilder p u a, producing a new
FormBuilder that takes a Validated u as form state and displays an
error message if its form data is invalid.
This Validated data type describes a form field as either Fresh or
Modified, so that validation messages are only displayed if the field
is Modified.
#validNumber Source
validNumber :: String -> Validator String NumberA Validator which verifies that its input can be parsed as a number.
#setModified Source
setModified :: forall value. Mapping ModifyValidated value value => value -> valueSets all Validated fields in a record to Modified, showing all
validation messages.
#setFresh Source
setFresh :: forall value. Mapping ModifyValidated value value => value -> valueSets all Validated fields in a record to Fresh, hiding all validation
messages.
#nonEmptyArray Source
nonEmptyArray :: forall a. String -> Validator (Array a) (NonEmptyArray a)A Validator which verifies that an input array is non-empty.
#nonEmpty Source
nonEmpty :: String -> Validator String NonEmptyStringA Validator which verifies that an input string is non-empty.
- Modules
- JSS
- Lumi.
Components. Badge - Lumi.
Components. Border - Lumi.
Components. Breadcrumb - Lumi.
Components. Button - Lumi.
Components. ButtonGroup - Lumi.
Components. Card - Lumi.
Components. CardGrid - Lumi.
Components. Color - Lumi.
Components. Column - Lumi.
Components. Details - Lumi.
Components. Divider - Lumi.
Components. DropdownButton - Lumi.
Components. EditableTable - Lumi.
Components. FetchCache - Lumi.
Components. FixedPrecisionInput - Lumi.
Components. Form - Lumi.
Components. Form. Defaults - Lumi.
Components. Form. Internal - Lumi.
Components. Form. Table - Lumi.
Components. Form. Validation - Lumi.
Components. Icon - Lumi.
Components. Images - Lumi.
Components. Input - Lumi.
Components. InputGroup - Lumi.
Components. LabeledField - Lumi.
Components. Layouts - Lumi.
Components. Layouts. Centered - Lumi.
Components. Layouts. OneColumnWithHeader - Lumi.
Components. Layouts. Tabs - Lumi.
Components. Link - Lumi.
Components. List - Lumi.
Components. Loader - Lumi.
Components. Lockup - Lumi.
Components. Modal - Lumi.
Components. NativeSelect - Lumi.
Components. Navigation - Lumi.
Components. Orientation - Lumi.
Components. Pagination - Lumi.
Components. Pill - Lumi.
Components. Progress - Lumi.
Components. Responsive - Lumi.
Components. Row - Lumi.
Components. Select - Lumi.
Components. Select. Backend - Lumi.
Components. Size - Lumi.
Components. Slider - Lumi.
Components. Spacing - Lumi.
Components. Status - Lumi.
Components. StatusSlat - Lumi.
Components. Styles - Lumi.
Components. Svg - Lumi.
Components. Tab - Lumi.
Components. Table - Lumi.
Components. Table. FilterDropdown - Lumi.
Components. Text - Lumi.
Components. Textarea - Lumi.
Components. Toast - Lumi.
Components. Tooltip - Lumi.
Components. Upload - Lumi.
Components. Utility. ReactRouter - Lumi.
Components. Wizard - Lumi.
Components. ZIndex