module ComponentHelpers where
import Data.Typeable
import Data.Bifunctor
import Events
import Component (Purview (..), Attributes (..))
handler
:: ( Typeable event
, Show state
, Eq state
, Typeable state
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler :: forall event state parentEvent (m :: * -> *).
(Typeable event, Show state, Eq state, Typeable state) =>
[DirectedEvent parentEvent event]
-> state
-> (event
-> state -> (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent parentEvent event]
-> state
-> (event
-> state -> (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
Handler ParentIdentifier
forall a. Maybe a
Nothing ParentIdentifier
forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont
handler'
:: ( Typeable event
, Show state
, Eq state
, Typeable state
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler' :: forall event state parentEvent (m :: * -> *).
(Typeable event, Show state, Eq state, Typeable state) =>
[DirectedEvent parentEvent event]
-> state
-> (event -> state -> (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler' [DirectedEvent parentEvent event]
initEvents state
state event -> state -> (state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent parentEvent event]
-> state
-> (event
-> state -> (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
Handler ParentIdentifier
forall a. Maybe a
Nothing ParentIdentifier
forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state ((event -> state -> (state, [DirectedEvent parentEvent event]))
-> event
-> state
-> (state -> state, [DirectedEvent parentEvent event])
forall {p} {p} {a} {b} {b}.
(p -> p -> (a, b)) -> p -> p -> (b -> a, b)
constReducer event -> state -> (state, [DirectedEvent parentEvent event])
reducer) state -> Purview event m
cont
where constReducer :: (p -> p -> (a, b)) -> p -> p -> (b -> a, b)
constReducer p -> p -> (a, b)
reducer p
event p
state =
let (a
newState, b
events) = p -> p -> (a, b)
reducer p
event p
state
in (a -> b -> a
forall a b. a -> b -> a
const a
newState, b
events)
effectHandler
:: ( Typeable event
, Show state
, Eq state
, Typeable state
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> m (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler :: forall event state parentEvent (m :: * -> *).
(Typeable event, Show state, Eq state, Typeable state) =>
[DirectedEvent parentEvent event]
-> state
-> (event
-> state -> m (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> m (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent parentEvent event]
-> state
-> (event
-> state -> m (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> m (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
EffectHandler ParentIdentifier
forall a. Maybe a
Nothing ParentIdentifier
forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> m (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont
effectHandler'
:: ( Typeable event
, Show state
, Eq state
, Typeable state
, Functor m
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> m (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler' :: forall event state (m :: * -> *) parentEvent.
(Typeable event, Show state, Eq state, Typeable state,
Functor m) =>
[DirectedEvent parentEvent event]
-> state
-> (event -> state -> m (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler' [DirectedEvent parentEvent event]
initEvents state
state event -> state -> m (state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent parentEvent event]
-> state
-> (event
-> state -> m (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> m (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
EffectHandler ParentIdentifier
forall a. Maybe a
Nothing ParentIdentifier
forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state ((event -> state -> m (state, [DirectedEvent parentEvent event]))
-> event
-> state
-> m (state -> state, [DirectedEvent parentEvent event])
forall {f :: * -> *} {p :: * -> * -> *} {t} {t} {a} {c} {b}.
(Functor f, Bifunctor p) =>
(t -> t -> f (p a c)) -> t -> t -> f (p (b -> a) c)
constReducer event -> state -> m (state, [DirectedEvent parentEvent event])
reducer) state -> Purview event m
cont
where constReducer :: (t -> t -> f (p a c)) -> t -> t -> f (p (b -> a) c)
constReducer t -> t -> f (p a c)
reducer t
event t
state = (p a c -> p (b -> a) c) -> f (p a c) -> f (p (b -> a) c)
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> b -> a) -> p a c -> p (b -> a) c
forall a b c. (a -> b) -> p a c -> p b c
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
Data.Bifunctor.first a -> b -> a
forall a b. a -> b -> a
const) (t -> t -> f (p a c)
reducer t
event t
state)
receiver
:: ( Show event
, Eq event
, Typeable event
)
=> String -> (Maybe String -> event) -> (state -> Purview event m) -> state -> Purview event m
receiver :: forall event state (m :: * -> *).
(Show event, Eq event, Typeable event) =>
String
-> (Maybe String -> event)
-> (state -> Purview event m)
-> state
-> Purview event m
receiver String
name Maybe String -> event
eventParser state -> Purview event m
child state
state = ParentIdentifier
-> ParentIdentifier
-> String
-> (Maybe String -> event)
-> (state -> Purview event m)
-> state
-> Purview event m
forall event state (m :: * -> *).
(Show event, Eq event, Typeable event) =>
ParentIdentifier
-> ParentIdentifier
-> String
-> (Maybe String -> event)
-> (state -> Purview event m)
-> state
-> Purview event m
Receiver ParentIdentifier
forall a. Maybe a
Nothing ParentIdentifier
forall a. Maybe a
Nothing String
name Maybe String -> event
eventParser state -> Purview event m
child state
state
div :: [Purview event m] -> Purview event m
div :: forall event (m :: * -> *). [Purview event m] -> Purview event m
div = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"div"
span :: [Purview event m] -> Purview event m
span :: forall event (m :: * -> *). [Purview event m] -> Purview event m
span = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"span"
h1 :: [Purview event m] -> Purview event m
h1 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h1 = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h1"
h2 :: [Purview event m] -> Purview event m
h2 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h2 = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h2"
h3 :: [Purview event m] -> Purview event m
h3 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h3 = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h3"
h4 :: [Purview event m] -> Purview event m
h4 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h4 = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h4"
p :: [Purview event m] -> Purview event m
p :: forall event (m :: * -> *). [Purview event m] -> Purview event m
p = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"p"
a :: [Purview event m] -> Purview event m
a :: forall event (m :: * -> *). [Purview event m] -> Purview event m
a = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"a"
ul :: [Purview event m] -> Purview event m
ul :: forall event (m :: * -> *). [Purview event m] -> Purview event m
ul = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"ul"
li :: [Purview event m] -> Purview event m
li :: forall event (m :: * -> *). [Purview event m] -> Purview event m
li = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"li"
button :: [Purview event m] -> Purview event m
button :: forall event (m :: * -> *). [Purview event m] -> Purview event m
button = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"button"
form :: [Purview event m] -> Purview event m
form :: forall event (m :: * -> *). [Purview event m] -> Purview event m
form = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"form"
input :: [Purview event m] -> Purview event m
input :: forall event (m :: * -> *). [Purview event m] -> Purview event m
input = String -> [Purview event m] -> Purview event m
forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"input"
text :: String -> Purview event m
text :: forall event (m :: * -> *). String -> Purview event m
text = String -> Purview event m
forall event (m :: * -> *). String -> Purview event m
Text
id' :: String -> Purview event m -> Purview event m
id' :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
id' = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> (String -> Attributes event)
-> String
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> Attributes event
forall event. String -> String -> Attributes event
Generic String
"id"
class' :: String -> Purview event m -> Purview event m
class' :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
class' = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> (String -> Attributes event)
-> String
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> Attributes event
forall event. String -> String -> Attributes event
Generic String
"class"
classes :: [String] -> Purview event m -> Purview event m
classes :: forall event (m :: * -> *).
[String] -> Purview event m -> Purview event m
classes [String]
xs = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> (String -> Attributes event)
-> String
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> Attributes event
forall event. String -> String -> Attributes event
Generic String
"class" (String -> Purview event m -> Purview event m)
-> String -> Purview event m -> Purview event m
forall a b. (a -> b) -> a -> b
$ [String] -> String
unwords [String]
xs
href :: String -> Purview event m -> Purview event m
href :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
href = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> (String -> Attributes event)
-> String
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> Attributes event
forall event. String -> String -> Attributes event
Generic String
"href"
istyle :: String -> Purview event m -> Purview event m
istyle :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
istyle String
str = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> Attributes event -> Purview event m -> Purview event m
forall a b. (a -> b) -> a -> b
$ (String, String) -> Attributes event
forall event. (String, String) -> Attributes event
Style (String
"-1", String
str)
onClick :: (Typeable event, Eq event, Show event) => event -> Purview event m -> Purview event m
onClick :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
event -> Purview event m -> Purview event m
onClick = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> (event -> Attributes event)
-> event
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"click" ParentIdentifier
forall a. Maybe a
Nothing ((Maybe String -> event) -> Attributes event)
-> (event -> Maybe String -> event) -> event -> Attributes event
forall b c a. (b -> c) -> (a -> b) -> a -> c
. event -> Maybe String -> event
forall a b. a -> b -> a
const
onSubmit :: (Typeable event, Eq event, Show event) => (Maybe String -> event) -> Purview event m -> Purview event m
onSubmit :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
(Maybe String -> event) -> Purview event m -> Purview event m
onSubmit = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> ((Maybe String -> event) -> Attributes event)
-> (Maybe String -> event)
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"submit" ParentIdentifier
forall a. Maybe a
Nothing
onBlur :: (Typeable event, Eq event, Show event) => (Maybe String -> event) -> Purview event m -> Purview event m
onBlur :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
(Maybe String -> event) -> Purview event m -> Purview event m
onBlur = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> ((Maybe String -> event) -> Attributes event)
-> (Maybe String -> event)
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"focusout" ParentIdentifier
forall a. Maybe a
Nothing
onChange :: (Typeable event, Eq event, Show event) => (Maybe String -> event) -> Purview event m -> Purview event m
onChange :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
(Maybe String -> event) -> Purview event m -> Purview event m
onChange = Attributes event -> Purview event m -> Purview event m
forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute (Attributes event -> Purview event m -> Purview event m)
-> ((Maybe String -> event) -> Attributes event)
-> (Maybe String -> event)
-> Purview event m
-> Purview event m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"change" ParentIdentifier
forall a. Maybe a
Nothing