glazier-react 0.1.0.0 → 0.2.0.0
raw patch · 5 files changed
+65/−65 lines, 5 files
Files
- glazier-react.cabal +1/−1
- src/Glazier/React/Command/Run.hs +4/−4
- src/Glazier/React/Maker.hs +20/−20
- src/Glazier/React/Maker/Run.hs +2/−2
- src/Glazier/React/Widget.hs +38/−38
glazier-react.cabal view
@@ -1,5 +1,5 @@ name: glazier-react-version: 0.1.0.0+version: 0.2.0.0 synopsis: ReactJS binding using Glazier and Pipes.Fluid description: ReactJS binding using Glazier and Pipes.Fluid, which is more functional and composable than Elm/Flux.
src/Glazier/React/Command/Run.hs view
@@ -14,11 +14,11 @@ import qualified JavaScript.Extras as JE import qualified JavaScript.Object as JO -componentSetState :: R.HasSuperModel sm g m => sm -> [JE.Property] -> J.JSVal -> IO ()+componentSetState :: R.HasSuperModel sm mdl pln => sm -> [JE.Property] -> J.JSVal -> IO () componentSetState sm props j = do- let gm = sm ^. R.gModel- mm = sm ^. R.mModel- void $ swapMVar mm gm+ let dsn = sm ^. R.design+ rep = sm ^. R.replica+ void $ swapMVar rep dsn js_componentSetState (JE.fromProperties props) j #ifdef __GHCJS__
src/Glazier/React/Maker.hs view
@@ -25,17 +25,17 @@ :: (J.JSVal -> MaybeT IO [act]) -> (J.Callback (J.JSVal -> IO ()) -> nxt) -> Maker act nxt- MkEmptyMModel- :: (R.MModel gsk mdl -> nxt)+ MkEmptyReplica+ :: (R.Replica mdl pln -> nxt) -> Maker act nxt MkRenderer- :: R.MModel gsk mdl- -> (J.JSVal -> G.WindowT (R.GModel gsk mdl) (R.ReactMl) ())+ :: R.Replica mdl pln+ -> (J.JSVal -> G.WindowT (R.Design mdl pln) (R.ReactMl) ()) -> (J.Callback (J.JSVal -> IO J.JSVal) -> nxt) -> Maker act nxt- PutMModel- :: R.MModel gsk mdl- -> R.GModel gsk mdl+ PutReplica+ :: R.Replica mdl pln+ -> R.Design mdl pln -> nxt -> Maker act nxt GetComponent@@ -44,9 +44,9 @@ instance Functor (Maker act) where fmap f (MkHandler handler g) = MkHandler handler (f . g)- fmap f (MkEmptyMModel g) = MkEmptyMModel (f . g)+ fmap f (MkEmptyReplica g) = MkEmptyReplica (f . g) fmap f (MkRenderer ms render g) = MkRenderer ms render (f . g)- fmap f (PutMModel ms s x) = PutMModel ms s (f x)+ fmap f (PutReplica rep dsn x) = PutReplica rep dsn (f x) fmap f (GetComponent g) = GetComponent (f . g) makeFree ''Maker@@ -54,19 +54,19 @@ -- | Allows changing the action type of Maker mapAction :: (act -> act') -> Maker act a -> Maker act' a mapAction f (MkHandler handler g) = MkHandler (\v -> fmap f <$> handler v) g-mapAction _ (MkEmptyMModel g) = MkEmptyMModel g+mapAction _ (MkEmptyReplica g) = MkEmptyReplica g mapAction _ (MkRenderer ms render g) = MkRenderer ms render g-mapAction _ (PutMModel ms s x) = PutMModel ms s x+mapAction _ (PutReplica ms s x) = PutReplica ms s x mapAction _ (GetComponent g) = GetComponent g mkSuperModel :: MonadFree (Maker act) m- => (R.MModel gsk mdl -> m gsk)- -> (gsk -> R.GModel gsk mdl)- -> m (R.SuperModel gsk mdl)-mkSuperModel makeGasket createGModel = do- mm <- mkEmptyMModel- g <- makeGasket mm- let gm = createGModel g- putMModel mm gm- pure (R.SuperModel mm gm)+ => (R.Replica mdl pln -> m pln)+ -> (pln -> R.Design mdl pln)+ -> m (R.SuperModel mdl pln)+mkSuperModel makePlan toDesign = do+ rep <- mkEmptyReplica+ pln <- makePlan rep+ let dsn = toDesign pln+ putReplica rep dsn+ pure (R.SuperModel dsn rep)
src/Glazier/React/Maker/Run.hs view
@@ -35,12 +35,12 @@ run :: R.ReactComponent -> PC.Output act -> R.Maker act (IO a) -> IO a run _ output (R.MkHandler handler g) = mkActionCallback output handler >>= g -run _ _ (R.MkEmptyMModel g) = newEmptyMVar >>= g+run _ _ (R.MkEmptyReplica g) = newEmptyMVar >>= g run _ _ (R.MkRenderer ms render g) = J.syncCallback1' (onRender ms render') >>= g where render' v = hoist (hoist generalize) (render v) -run _ _ (R.PutMModel ms s g) = putMVar ms s >> g+run _ _ (R.PutReplica rep dsn g) = putMVar rep dsn >> g run component _ (R.GetComponent g) = g component
src/Glazier/React/Widget.hs view
@@ -13,62 +13,62 @@ import Control.Lens import qualified GHC.Generics as G -class HasWidgetGasket c gsk | c -> gsk where- widgetGasket :: Lens' c gsk+class HasWidgetPlan c pln | c -> pln where+ widgetPlan :: Lens' c pln class HasWidgetModel c mdl | c -> mdl where widgetModel :: Lens' c mdl -data GModel gsk mdl = GModel- { _widgetGasket :: gsk- , _widgetModel :: mdl+data Design mdl pln = Design+ { _widgetModel :: mdl+ , _widgetPlan :: pln } deriving (G.Generic) -instance (CD.Disposing gsk, CD.Disposing mdl) => CD.Disposing (GModel gsk mdl)+instance (CD.Disposing pln, CD.Disposing mdl) => CD.Disposing (Design mdl pln) -instance HasWidgetGasket (GModel gsk mdl) gsk where- widgetGasket f (GModel gsk mdl) = fmap (\gsk' -> GModel gsk' mdl) (f gsk)- {-# INLINE widgetGasket #-}+instance HasWidgetPlan (Design mdl pln) pln where+ widgetPlan f (Design mdl pln) = fmap (\pln' -> Design mdl pln') (f pln)+ {-# INLINE widgetPlan #-} -instance HasWidgetModel (GModel gsk mdl) mdl where- widgetModel f (GModel gsk mdl) = fmap (\mdl' -> GModel gsk mdl') (f mdl)+instance HasWidgetModel (Design mdl pln) mdl where+ widgetModel f (Design mdl pln) = fmap (\mdl' -> Design mdl' pln) (f mdl) {-# INLINE widgetModel #-} -class HasGModel c gsk mdl | c -> gsk mdl where- gModel :: Lens' c (GModel gsk mdl)+class HasDesign c mdl pln | c -> mdl pln where+ design :: Lens' c (Design mdl pln) -instance HasGModel (GModel gsk mdl) gsk mdl where- gModel = id+instance HasDesign (Design mdl pln) mdl pln where+ design = id -type MModel gsk mdl = MVar (GModel gsk mdl)+type Replica mdl pln = MVar (Design mdl pln) -class HasMModel c gsk mdl | c -> gsk mdl where- mModel :: Lens' c (MModel gsk mdl)+class HasReplica c mdl pln | c -> mdl pln where+ replica :: Lens' c (Replica mdl pln) -instance HasMModel (MModel gsk mdl) gsk mdl where- mModel = id+instance HasReplica (Replica mdl pln) mdl pln where+ replica = id -data SuperModel gsk mdl = SuperModel- { _mModel :: MModel gsk mdl- , _gModel :: GModel gsk mdl+data SuperModel mdl pln = SuperModel+ { _design :: Design mdl pln+ , _replica :: Replica mdl pln } deriving (G.Generic) -instance CD.Disposing (GModel gsk mdl) => CD.Disposing (SuperModel gsk mdl) where- disposing s = CD.disposing $ s ^. gModel+instance CD.Disposing (Design mdl pln) => CD.Disposing (SuperModel mdl pln) where+ disposing s = CD.disposing $ s ^. design -class (HasMModel c gsk mdl, HasGModel c gsk mdl) => HasSuperModel c gsk mdl | c -> gsk mdl where- superModel :: Lens' c (SuperModel gsk mdl)+class (HasDesign c mdl pln, HasReplica c mdl pln) => HasSuperModel c mdl pln | c -> mdl pln where+ superModel :: Lens' c (SuperModel mdl pln) -instance HasSuperModel (SuperModel gsk mdl) gsk mdl where+instance HasSuperModel (SuperModel mdl pln) mdl pln where superModel = id -instance HasMModel (SuperModel gsk mdl) gsk mdl where- mModel f (SuperModel mm gm) = fmap (\mm' -> SuperModel mm' gm) (f mm)- {-# INLINE mModel #-}+instance HasReplica (SuperModel mdl pln) mdl pln where+ replica f (SuperModel dsn rep) = fmap (\rep' -> SuperModel dsn rep') (f rep)+ {-# INLINE replica #-} -instance HasGModel (SuperModel gsk mdl) gsk mdl where- gModel f (SuperModel mm gm) = fmap (\gm' -> SuperModel mm gm') (f gm)- {-# INLINE gModel #-}+instance HasDesign (SuperModel mdl pln) mdl pln where+ design f (SuperModel dsn rep) = fmap (\dsn' -> SuperModel dsn' rep) (f dsn)+ {-# INLINE design #-} class IsWidget w where -- The input to Gadget@@ -81,8 +81,8 @@ type WidgetModel w :: * -- Callbacks and data required for interfacing with react.- type WidgetGasket w :: *+ type WidgetPlan w :: * -type WidgetGModel w = GModel (WidgetGasket w) (WidgetModel w)-type WidgetMModel w = MModel (WidgetGasket w) (WidgetModel w)-type WidgetSuperModel w = SuperModel (WidgetGasket w) (WidgetModel w)+type WidgetDesign w = Design (WidgetModel w) (WidgetPlan w)+type WidgetReplica w = Replica (WidgetModel w) (WidgetPlan w)+type WidgetSuperModel w = SuperModel (WidgetModel w) (WidgetPlan w)