Improve form

This commit is contained in:
Eike Kettner
2020-04-20 22:53:08 +02:00
parent 5a2e28415a
commit 3a90d874a5
10 changed files with 297 additions and 132 deletions

View File

@ -0,0 +1,107 @@
module Data.CalEvent exposing
( CalEvent
, everyMonth
, fromEvent
, makeEvent
)
import Util.Maybe
type alias CalEvent =
{ weekday : Maybe String
, year : String
, month : String
, day : String
, hour : String
, minute : String
}
everyMonth : CalEvent
everyMonth =
CalEvent Nothing "*" "*" "01" "00" "00"
makeEvent : CalEvent -> String
makeEvent ev =
let
datetime =
ev.year
++ "-"
++ ev.month
++ "-"
++ ev.day
++ " "
++ ev.hour
++ ":"
++ ev.minute
in
case ev.weekday of
Just wd ->
wd ++ " " ++ datetime
Nothing ->
datetime
fromEvent : String -> Maybe CalEvent
fromEvent str =
let
init =
everyMonth
parts =
String.split " " str
in
case parts of
wd :: date :: time :: [] ->
Maybe.andThen
(fromDate date)
(fromTime time init)
|> Maybe.map (withWeekday wd)
date :: time :: [] ->
Maybe.andThen
(fromDate date)
(fromTime time init)
_ ->
Nothing
fromDate : String -> CalEvent -> Maybe CalEvent
fromDate date ev =
let
parts =
String.split "-" date
in
case parts of
y :: m :: d :: [] ->
Just
{ ev
| year = y
, month = m
, day = d
}
_ ->
Nothing
fromTime : String -> CalEvent -> Maybe CalEvent
fromTime time ev =
case String.split ":" time of
h :: m :: _ :: [] ->
Just { ev | hour = h, minute = m }
h :: m :: [] ->
Just { ev | hour = h, minute = m }
_ ->
Nothing
withWeekday : String -> CalEvent -> CalEvent
withWeekday wd ev =
{ ev | weekday = Util.Maybe.fromString wd }

View File

@ -0,0 +1,20 @@
module Data.Validated exposing (Validated(..), value)
type Validated a
= Valid a
| Invalid a
| Unknown a
value : Validated a -> a
value va =
case va of
Valid a ->
a
Invalid a ->
a
Unknown a ->
a