36 lines
977 B
Haskell
36 lines
977 B
Haskell
module Form.Input
|
|
( input,
|
|
)
|
|
where
|
|
|
|
import Data.Text qualified as T
|
|
import Form.Internal
|
|
import Miso
|
|
import Miso.String (fromMisoString, toMisoString)
|
|
|
|
input :: String -> Form T.Text T.Text
|
|
input label =
|
|
let parse :: T.Text -> Either String T.Text
|
|
parse i =
|
|
let i' = T.strip i
|
|
in if T.null i' then Left "required" else Right i'
|
|
in Form
|
|
{ view = \i ->
|
|
[ div_ [] $
|
|
[ label_ [] $
|
|
[ text (toMisoString label),
|
|
div_ [] $
|
|
[ input_
|
|
[ type_ "text",
|
|
value_ (toMisoString i),
|
|
onInput fromMisoString
|
|
],
|
|
div_ [] $
|
|
[either (text . toMisoString) (\_ -> text "") (parse i)]
|
|
]
|
|
]
|
|
]
|
|
],
|
|
fill = parse
|
|
}
|