module Glazier.React.Command
( basicRenderCmd
) where
import Control.Lens
import Control.Monad.State.Strict
import qualified GHCJS.Types as J
import qualified JavaScript.Extras as JE
basicRenderCmd :: MonadState sm m =>
Lens' sm Int
-> Getter sm J.JSVal
-> (sm -> [JE.Property] -> J.JSVal -> cmd)
-> m cmd
basicRenderCmd frameNum componentRef fcmd = do
frameNum %= (\i -> (i `mod` JE.maxSafeInteger) + 1)
i <- JE.toJS <$> use frameNum
r <- use componentRef
sm <- get
pure $ fcmd sm [("frameNum", i)] r