{-# LANGUAGE
ScopedTypeVariables
, TypeFamilies
#-}
-- | This module provides helper functions for HTML input elements. These helper functions are not specific to any particular web framework or html library.
--
-- For unnamed (enumerated) formlets, see @Ditto.Generalized.Unnamed@
module Ditto.Generalized.Named
( G.Choice(..)
, input
, inputMaybe
, inputNoData
, inputFile
, inputMulti
, inputChoice
, inputList
, label
, errors
, childErrors
, withErrors
, G.withChildErrors
, ireq
, iopt
) where
import Ditto.Backend
import Ditto.Core
import Ditto.Types
import Data.Text (Text)
import Data.List.NonEmpty (NonEmpty(..))
import qualified Ditto.Generalized.Internal as G
-- | used for constructing elements like @\@, which pure a single input value.
input :: (Environment m input, FormError input err)
=> Text
-> (input -> Either err a)
-> (FormId -> a -> view)
-> a
-> Form m input err view a
input name = G.input (getNamedFormId name)
-- | used for elements like @\@ which are not always present in the form submission data.
inputMaybe :: (Environment m input, FormError input err)
=> Text
-> (input -> Either err a)
-> (FormId -> Maybe a -> view)
-> Maybe a
-> Form m input err view (Maybe a)
inputMaybe name = G.inputMaybe (getNamedFormId name)
-- | used for elements like @\@ which take a value, but are never present in the form data set.
inputNoData :: (Environment m input)
=> Text
-> (FormId -> view)
-> Form m input err view ()
inputNoData name = G.inputNoData (getNamedFormId name)
-- | used for @\@
inputFile :: forall m input err view ft. (Environment m input, FormInput input, FormError input err, ft ~ FileType input, Monoid ft)
=> Text
-> (FormId -> view)
-> Form m input err view (FileType input)
inputFile name = G.inputFile (getNamedFormId name)
-- | used for groups of checkboxes, @\