Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type AsReactor cmd = (AsFacet [cmd] cmd, AsFacet (ReactorCmd cmd) cmd)
- type MonadReactor p s cmd m = (AsReactor cmd, MonadReader (Entity p s) m, MonadCommand cmd m)
- data ReactorCmd cmd where
- MkReactId :: JSString -> (ReactId -> cmd) -> ReactorCmd cmd
- SetRender :: Subject s -> Window s () -> ReactorCmd cmd
- MkSubject :: Widget cmd s s () -> s -> (Subject s -> cmd) -> ReactorCmd cmd
- BookSubjectCleanup :: Subject s -> ReactorCmd cmd
- GetModel :: Subject s -> (s -> cmd) -> ReactorCmd cmd
- GetElementalRef :: Subject s -> ReactId -> (EventTarget -> cmd) -> ReactorCmd cmd
- Rerender :: Subject s -> ReactorCmd cmd
- TickModel :: Subject s -> ModelState s cmd -> ReactorCmd cmd
- RegisterDOMListener :: NFData a => Subject s -> JSRep -> JSString -> (JSRep -> MaybeT IO a) -> (a -> cmd) -> ReactorCmd cmd
- RegisterReactListener :: NFData a => Subject s -> ReactId -> JSString -> (JSRep -> MaybeT IO a) -> (a -> cmd) -> ReactorCmd cmd
- RegisterMountedListener :: Subject s -> cmd -> ReactorCmd cmd
- RegisterRenderedListener :: Subject s -> cmd -> ReactorCmd cmd
- RegisterNextRenderedListener :: Subject s -> cmd -> ReactorCmd cmd
- RegisterTickedListener :: Subject s -> cmd -> ReactorCmd cmd
- type ModelState s = StateT s ReadIORef
- mkReactId :: (AsReactor cmd, MonadCommand cmd m) => JSString -> m ReactId
- setRender :: (AsReactor cmd, MonadCommand cmd m) => Subject s -> Window s () -> m ()
- mkSubject :: (AsReactor cmd, MonadCommand cmd m) => Widget cmd s s a -> s -> m (Either a (Subject s))
- mkSubject' :: (AsReactor cmd, MonadCommand cmd m) => Widget cmd s s () -> s -> m (Subject s)
- withMkSubject :: (AsReactor cmd, MonadCommand cmd m) => Widget cmd s s a -> s -> (Subject s -> m ()) -> m a
- bookSubjectCleanup :: MonadReactor p allS cmd m => Subject s -> m ()
- getModel :: MonadReactor p s cmd m => m s
- getElementalRef :: MonadReactor p s cmd m => ReactId -> m EventTarget
- rerender :: MonadReactor p s cmd m => m ()
- tickModel :: MonadReactor p s cmd m => ModelState s () -> m ()
- tickModelThen :: (Also m a, MonadReactor p s cmd m) => ModelState s (m a) -> m a
- domTrigger :: (NFData a, MonadReactor p s cmd m) => JSRep -> JSString -> (JSRep -> MaybeT IO a) -> m a
- domTrigger_ :: MonadReactor p s cmd m => JSRep -> JSString -> a -> m a
- trigger :: (NFData a, MonadReactor p s cmd m) => ReactId -> JSString -> (Notice -> MaybeT IO a) -> m a
- trigger_ :: MonadReactor p s cmd m => ReactId -> JSString -> a -> m a
- onMounted :: MonadReactor p s cmd m => m a -> m a
- onRendered :: MonadReactor p s cmd m => m a -> m a
- onNextRendered :: MonadReactor p s cmd m => m a -> m a
- onTicked :: MonadReactor p s cmd m => m a -> m a
Documentation
type MonadReactor p s cmd m = (AsReactor cmd, MonadReader (Entity p s) m, MonadCommand cmd m) Source #
data ReactorCmd cmd where Source #
NB. ReactorCmd
is not a functor because of the Widget cmd
in MkSubject
MkReactId :: JSString -> (ReactId -> cmd) -> ReactorCmd cmd | Make a unique named id |
SetRender :: Subject s -> Window s () -> ReactorCmd cmd | the the rendering function in a Subject, replace any existing render callback |
MkSubject :: Widget cmd s s () -> s -> (Subject s -> cmd) -> ReactorCmd cmd | Make a fully initialized subject (with ShimCallbacks) from a widget spec and state |
BookSubjectCleanup :: Subject s -> ReactorCmd cmd | Keep subject alive until the next rerender |
GetModel :: Subject s -> (s -> cmd) -> ReactorCmd cmd | Generate a list of commands from reading the model. |
GetElementalRef :: Subject s -> ReactId -> (EventTarget -> cmd) -> ReactorCmd cmd | |
Rerender :: Subject s -> ReactorCmd cmd | Rerender a ShimComponent using the given state. |
TickModel :: Subject s -> ModelState s cmd -> ReactorCmd cmd | Update and rerender. |
RegisterDOMListener :: NFData a => Subject s -> JSRep -> JSString -> (JSRep -> MaybeT IO a) -> (a -> cmd) -> ReactorCmd cmd | Create and register a dom callback |
RegisterReactListener :: NFData a => Subject s -> ReactId -> JSString -> (JSRep -> MaybeT IO a) -> (a -> cmd) -> ReactorCmd cmd | Create and register a react callback
If the callback is for "ref", then an listener to update |
RegisterMountedListener :: Subject s -> cmd -> ReactorCmd cmd | Create and register a callback for the mounted event |
RegisterRenderedListener :: Subject s -> cmd -> ReactorCmd cmd | Create and register a callback for the rendered event |
RegisterNextRenderedListener :: Subject s -> cmd -> ReactorCmd cmd | Create and register a callback for the rendered event |
RegisterTickedListener :: Subject s -> cmd -> ReactorCmd cmd | Create and register a callback for the state updated event |
Instances
Show (ReactorCmd cmd) Source # | |
Defined in Glazier.React.Reactor showsPrec :: Int -> ReactorCmd cmd -> ShowS # show :: ReactorCmd cmd -> String # showList :: [ReactorCmd cmd] -> ShowS # |
type ModelState s = StateT s ReadIORef Source #
mkReactId :: (AsReactor cmd, MonadCommand cmd m) => JSString -> m ReactId Source #
Make a unique named id
mkSubject :: (AsReactor cmd, MonadCommand cmd m) => Widget cmd s s a -> s -> m (Either a (Subject s)) Source #
mkSubject' :: (AsReactor cmd, MonadCommand cmd m) => Widget cmd s s () -> s -> m (Subject s) Source #
withMkSubject :: (AsReactor cmd, MonadCommand cmd m) => Widget cmd s s a -> s -> (Subject s -> m ()) -> m a Source #
bookSubjectCleanup :: MonadReactor p allS cmd m => Subject s -> m () Source #
Schedule cleanup of the callbacks when the parent widget is rerendered.
getModel :: MonadReactor p s cmd m => m s Source #
Get the Model
and exec actions, using the current Entity
context
getElementalRef :: MonadReactor p s cmd m => ReactId -> m EventTarget Source #
Get the event target
If a "ref" callback to update elementalRef
has not been added;
then add it, rerender, then return the EventTarget.
rerender :: MonadReactor p s cmd m => m () Source #
Rerender the ShimComponent using the current Entity
context
tickModel :: MonadReactor p s cmd m => ModelState s () -> m () Source #
Update the Model
using the current Entity
context
tickModelThen :: (Also m a, MonadReactor p s cmd m) => ModelState s (m a) -> m a Source #
Update the Scene
using the current Entity
context,
and also return the next action to execute.
domTrigger :: (NFData a, MonadReactor p s cmd m) => JSRep -> JSString -> (JSRep -> MaybeT IO a) -> m a Source #
Create a callback for a JSRep
and add it to this elementals's dlist of listeners.
domTrigger_ :: MonadReactor p s cmd m => JSRep -> JSString -> a -> m a Source #
A variation of trigger which ignores the event but fires the given arg instead.
trigger :: (NFData a, MonadReactor p s cmd m) => ReactId -> JSString -> (Notice -> MaybeT IO a) -> m a Source #
Create a callback for a Notice
and add it to this elementals's dlist of listeners.
trigger_ :: MonadReactor p s cmd m => ReactId -> JSString -> a -> m a Source #
A variation of trigger which ignores the event but fires the given arg instead.
onMounted :: MonadReactor p s cmd m => m a -> m a Source #
Register actions to execute after a render.
It is safe to postCmd'
a TickScene
or Rerender
. These command will not
trigger another rendered event.
NB. This is trigged by react componentDidMount
See jsbits/react.js hgr$shimComponent.
These callbacks are called after the ref callback by React
See https://reactjs.org/docs/refs-and-the-dom.html.
onRendered :: MonadReactor p s cmd m => m a -> m a Source #
Register actions to execute after a render.
It is safe to postCmd'
a TickScene
or Rerender
. These command will not
trigger another rendered event.
NB. This is trigged by react componentDidUpdate
and componentDidMount
so it is also called for the initial render.
See jsbits/react.js hgr$shimComponent.
These callbacks are called after the ref callback by React
See https://reactjs.org/docs/refs-and-the-dom.html.
onNextRendered :: MonadReactor p s cmd m => m a -> m a Source #
onTicked :: MonadReactor p s cmd m => m a -> m a Source #
Register actions to execute after the state has been updated with TickState.
It is safe to postCmd'
another TickScene
, another onRendered event will
not be generated.
NB. This is trigged by react componentDidUpdate
and componentDidMount
so it is also called for the initial render.
See jsbits/react.js hgr$shimComponent.
These callbacks are called after the ref callback by React
See https://reactjs.org/docs/refs-and-the-dom.html.