glazier-react-widget 0.3.0.1 → 0.4.0.0
raw patch · 5 files changed
+64/−63 lines, 5 filesdep ~disposabledep ~glazier-reactdep ~javascript-extrasPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: disposable, glazier-react, javascript-extras
API changes (from Hackage documentation)
- Glazier.React.Widgets.Input: [_uid] :: Model -> JSString
- Glazier.React.Widgets.Input: uid :: HasModel c_aqdO => Lens' c_aqdO JSString
- Glazier.React.Widgets.List: [_deferredCommands] :: Model key itemWidget -> DList (Command key itemWidget)
- Glazier.React.Widgets.List: [_uid] :: Model key itemWidget -> JSString
- Glazier.React.Widgets.List: deferredCommands :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv (DList (Command key_agYg itemWidget_agYh))
- Glazier.React.Widgets.List: instance Control.Disposable.Disposing (Glazier.React.Widget.SuperModelOf itemWidget) => Control.Disposable.Disposing (Glazier.React.Widgets.List.Model key itemWidget)
- Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.AsAction (Glazier.React.Widgets.List.Action key0 itemWidget0) key0 itemWidget0
- Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasModel (Glazier.React.Model.Design (Glazier.React.Widgets.List.Model key itemWidget) Glazier.React.Widgets.List.Plan) key itemWidget
- Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasModel (Glazier.React.Model.SuperModel (Glazier.React.Widgets.List.Model key itemWidget) Glazier.React.Widgets.List.Plan) key itemWidget
- Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasModel (Glazier.React.Widgets.List.Model key0 itemWidget0) key0 itemWidget0
- Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasPlan (Glazier.React.Model.Design (Glazier.React.Widgets.List.Model key itemWidget) Glazier.React.Widgets.List.Plan)
- Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasPlan (Glazier.React.Model.SuperModel (Glazier.React.Widgets.List.Model key itemWidget) Glazier.React.Widgets.List.Plan)
- Glazier.React.Widgets.List: uid :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv JSString
+ Glazier.React.Widgets.Input: [_key] :: Model -> JSString
+ Glazier.React.Widgets.Input: key :: HasModel c_aqht => Lens' c_aqht JSString
+ Glazier.React.Widgets.List: [_deferredDisposables] :: Model k itemWidget -> DList SomeDisposable
+ Glazier.React.Widgets.List: [_key] :: Model k itemWidget -> JSString
+ Glazier.React.Widgets.List: deferredDisposables :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (DList SomeDisposable)
+ Glazier.React.Widgets.List: instance Control.Disposable.Disposing (Glazier.React.Widget.SuperModelOf itemWidget) => Control.Disposable.Disposing (Glazier.React.Widgets.List.Model k itemWidget)
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.AsAction (Glazier.React.Widgets.List.Action k0 itemWidget0) k0 itemWidget0
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasModel (Glazier.React.Model.Design (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan) k itemWidget
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasModel (Glazier.React.Model.SuperModel (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan) k itemWidget
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasModel (Glazier.React.Widgets.List.Model k0 itemWidget0) k0 itemWidget0
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasPlan (Glazier.React.Model.Design (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan)
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasPlan (Glazier.React.Model.SuperModel (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan)
+ Glazier.React.Widgets.List: key :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY JSString
- Glazier.React.Widgets.Input: _Action :: AsAction r_aq5A => Prism' r_aq5A Action
+ Glazier.React.Widgets.Input: _Action :: AsAction r_aq9f => Prism' r_aq9f Action
- Glazier.React.Widgets.Input: _InputRefAction :: AsAction r_aq5A => Prism' r_aq5A JSVal
+ Glazier.React.Widgets.Input: _InputRefAction :: AsAction r_aq9f => Prism' r_aq9f JSVal
- Glazier.React.Widgets.Input: _SendCommandsAction :: AsAction r_aq5A => Prism' r_aq5A [Command]
+ Glazier.React.Widgets.Input: _SendCommandsAction :: AsAction r_aq9f => Prism' r_aq9f [Command]
- Glazier.React.Widgets.Input: _SubmitAction :: AsAction r_aq5A => Prism' r_aq5A JSString
+ Glazier.React.Widgets.Input: _SubmitAction :: AsAction r_aq9f => Prism' r_aq9f JSString
- Glazier.React.Widgets.Input: class AsAction r_aq5A where _SendCommandsAction = (.) _Action _SendCommandsAction _SubmitAction = (.) _Action _SubmitAction _InputRefAction = (.) _Action _InputRefAction
+ Glazier.React.Widgets.Input: class AsAction r_aq9f where _SendCommandsAction = (.) _Action _SendCommandsAction _SubmitAction = (.) _Action _SubmitAction _InputRefAction = (.) _Action _InputRefAction
- Glazier.React.Widgets.Input: class HasModel c_aqdO where className = (.) model className inputRef = (.) model inputRef placeholder = (.) model placeholder uid = (.) model uid
+ Glazier.React.Widgets.Input: class HasModel c_aqht where className = (.) model className inputRef = (.) model inputRef key = (.) model key placeholder = (.) model placeholder
- Glazier.React.Widgets.Input: class HasPlan c_aq9M where component = (.) plan component onInputRef = (.) plan onInputRef onKeyDown = (.) plan onKeyDown onRender = (.) plan onRender
+ Glazier.React.Widgets.Input: class HasPlan c_aqdr where component = (.) plan component onInputRef = (.) plan onInputRef onKeyDown = (.) plan onKeyDown onRender = (.) plan onRender
- Glazier.React.Widgets.Input: className :: HasModel c_aqdO => Lens' c_aqdO JSString
+ Glazier.React.Widgets.Input: className :: HasModel c_aqht => Lens' c_aqht JSString
- Glazier.React.Widgets.Input: component :: HasPlan c_aq9M => Lens' c_aq9M ReactComponent
+ Glazier.React.Widgets.Input: component :: HasPlan c_aqdr => Lens' c_aqdr ReactComponent
- Glazier.React.Widgets.Input: inputRef :: HasModel c_aqdO => Lens' c_aqdO JSVal
+ Glazier.React.Widgets.Input: inputRef :: HasModel c_aqht => Lens' c_aqht JSVal
- Glazier.React.Widgets.Input: model :: HasModel c_aqdO => Lens' c_aqdO Model
+ Glazier.React.Widgets.Input: model :: HasModel c_aqht => Lens' c_aqht Model
- Glazier.React.Widgets.Input: onInputRef :: HasPlan c_aq9M => Lens' c_aq9M (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.Input: onInputRef :: HasPlan c_aqdr => Lens' c_aqdr (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.Input: onKeyDown :: HasPlan c_aq9M => Lens' c_aq9M (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.Input: onKeyDown :: HasPlan c_aqdr => Lens' c_aqdr (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.Input: onRender :: HasPlan c_aq9M => Lens' c_aq9M (Callback (JSVal -> IO JSVal))
+ Glazier.React.Widgets.Input: onRender :: HasPlan c_aqdr => Lens' c_aqdr (Callback (JSVal -> IO JSVal))
- Glazier.React.Widgets.Input: placeholder :: HasModel c_aqdO => Lens' c_aqdO JSString
+ Glazier.React.Widgets.Input: placeholder :: HasModel c_aqht => Lens' c_aqht JSString
- Glazier.React.Widgets.Input: plan :: HasPlan c_aq9M => Lens' c_aq9M Plan
+ Glazier.React.Widgets.Input: plan :: HasPlan c_aqdr => Lens' c_aqdr Plan
- Glazier.React.Widgets.List: AddItemAction :: key -> (SuperModelOf itemWidget) -> Action key itemWidget
+ Glazier.React.Widgets.List: AddItemAction :: k -> (SuperModelOf itemWidget) -> Action k itemWidget
- Glazier.React.Widgets.List: ComponentDidUpdateAction :: Action key itemWidget
+ Glazier.React.Widgets.List: ComponentDidUpdateAction :: Action k itemWidget
- Glazier.React.Widgets.List: ComponentRefAction :: JSVal -> Action key itemWidget
+ Glazier.React.Widgets.List: ComponentRefAction :: JSVal -> Action k itemWidget
- Glazier.React.Widgets.List: DestroyItemAction :: key -> Action key itemWidget
+ Glazier.React.Widgets.List: DestroyItemAction :: k -> Action k itemWidget
- Glazier.React.Widgets.List: DisposeCommand :: SomeDisposable -> Command key itemWidget
+ Glazier.React.Widgets.List: DisposeCommand :: SomeDisposable -> Command k itemWidget
- Glazier.React.Widgets.List: ItemAction :: key -> (ActionOf itemWidget) -> Action key itemWidget
+ Glazier.React.Widgets.List: ItemAction :: k -> (ActionOf itemWidget) -> Action k itemWidget
- Glazier.React.Widgets.List: ItemCommand :: key -> (CommandOf itemWidget) -> Command key itemWidget
+ Glazier.React.Widgets.List: ItemCommand :: k -> (CommandOf itemWidget) -> Command k itemWidget
- Glazier.React.Widgets.List: MakeItemAction :: (key -> key) -> (key -> F (Maker (ActionOf itemWidget)) (ModelOf itemWidget)) -> Action key itemWidget
+ Glazier.React.Widgets.List: MakeItemAction :: (k -> k) -> (k -> F (Maker (ActionOf itemWidget)) (ModelOf itemWidget)) -> Action k itemWidget
- Glazier.React.Widgets.List: MakerCommand :: (F (Maker (Action key itemWidget)) (Action key itemWidget)) -> Command key itemWidget
+ Glazier.React.Widgets.List: MakerCommand :: (F (Maker (Action k itemWidget)) (Action k itemWidget)) -> Command k itemWidget
- Glazier.React.Widgets.List: Model :: JSString -> JSVal -> Int -> DList (Command key itemWidget) -> JSString -> key -> Map key (SuperModelOf itemWidget) -> (SuperModelOf itemWidget -> Bool) -> Model key itemWidget
+ Glazier.React.Widgets.List: Model :: JSString -> JSVal -> Int -> DList SomeDisposable -> JSString -> k -> Map k (SuperModelOf itemWidget) -> (SuperModelOf itemWidget -> Bool) -> Model k itemWidget
- Glazier.React.Widgets.List: RenderAction :: Action key itemWidget
+ Glazier.React.Widgets.List: RenderAction :: Action k itemWidget
- Glazier.React.Widgets.List: RenderCommand :: (SuperModel (Model key itemWidget) Plan) -> [Property] -> JSVal -> Command key itemWidget
+ Glazier.React.Widgets.List: RenderCommand :: (SuperModel (Model k itemWidget) Plan) -> [Property] -> JSVal -> Command k itemWidget
- Glazier.React.Widgets.List: SetFilterAction :: (SuperModelOf itemWidget -> Bool) -> Action key itemWidget
+ Glazier.React.Widgets.List: SetFilterAction :: (SuperModelOf itemWidget -> Bool) -> Action k itemWidget
- Glazier.React.Widgets.List: [_className] :: Model key itemWidget -> JSString
+ Glazier.React.Widgets.List: [_className] :: Model k itemWidget -> JSString
- Glazier.React.Widgets.List: [_componentRef] :: Model key itemWidget -> JSVal
+ Glazier.React.Widgets.List: [_componentRef] :: Model k itemWidget -> JSVal
- Glazier.React.Widgets.List: [_frameNum] :: Model key itemWidget -> Int
+ Glazier.React.Widgets.List: [_frameNum] :: Model k itemWidget -> Int
- Glazier.React.Widgets.List: [_itemKey] :: Model key itemWidget -> key
+ Glazier.React.Widgets.List: [_itemKey] :: Model k itemWidget -> k
- Glazier.React.Widgets.List: [_itemsFilter] :: Model key itemWidget -> SuperModelOf itemWidget -> Bool
+ Glazier.React.Widgets.List: [_itemsFilter] :: Model k itemWidget -> SuperModelOf itemWidget -> Bool
- Glazier.React.Widgets.List: [_itemsModel] :: Model key itemWidget -> Map key (SuperModelOf itemWidget)
+ Glazier.React.Widgets.List: [_itemsModel] :: Model k itemWidget -> Map k (SuperModelOf itemWidget)
- Glazier.React.Widgets.List: _Action :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (Action key_agYQ itemWidget_agYR)
+ Glazier.React.Widgets.List: _Action :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (Action k_a9Fz itemWidget_a9FA)
- Glazier.React.Widgets.List: _AddItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (key_agYQ, SuperModelOf itemWidget_agYR)
+ Glazier.React.Widgets.List: _AddItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (k_a9Fz, SuperModelOf itemWidget_a9FA)
- Glazier.React.Widgets.List: _ComponentDidUpdateAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 ()
+ Glazier.React.Widgets.List: _ComponentDidUpdateAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst ()
- Glazier.React.Widgets.List: _ComponentRefAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 JSVal
+ Glazier.React.Widgets.List: _ComponentRefAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst JSVal
- Glazier.React.Widgets.List: _DestroyItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 key_agYQ
+ Glazier.React.Widgets.List: _DestroyItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst k_a9Fz
- Glazier.React.Widgets.List: _ItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (key_agYQ, ActionOf itemWidget_agYR)
+ Glazier.React.Widgets.List: _ItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (k_a9Fz, ActionOf itemWidget_a9FA)
- Glazier.React.Widgets.List: _MakeItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (key_agYQ -> key_agYQ, key_agYQ -> F (Maker (ActionOf itemWidget_agYR)) (ModelOf itemWidget_agYR))
+ Glazier.React.Widgets.List: _MakeItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (k_a9Fz -> k_a9Fz, k_a9Fz -> F (Maker (ActionOf itemWidget_a9FA)) (ModelOf itemWidget_a9FA))
- Glazier.React.Widgets.List: _RenderAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 ()
+ Glazier.React.Widgets.List: _RenderAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst ()
- Glazier.React.Widgets.List: _SetFilterAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (SuperModelOf itemWidget_agYR -> Bool)
+ Glazier.React.Widgets.List: _SetFilterAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (SuperModelOf itemWidget_a9FA -> Bool)
- Glazier.React.Widgets.List: class AsAction r_ahq6 key_agYQ itemWidget_agYR | r_ahq6 -> key_agYQ itemWidget_agYR where _ComponentRefAction = (.) _Action _ComponentRefAction _RenderAction = (.) _Action _RenderAction _ComponentDidUpdateAction = (.) _Action _ComponentDidUpdateAction _DestroyItemAction = (.) _Action _DestroyItemAction _MakeItemAction = (.) _Action _MakeItemAction _AddItemAction = (.) _Action _AddItemAction _ItemAction = (.) _Action _ItemAction _SetFilterAction = (.) _Action _SetFilterAction
+ Glazier.React.Widgets.List: class AsAction r_acst k_a9Fz itemWidget_a9FA | r_acst -> k_a9Fz itemWidget_a9FA where _ComponentRefAction = (.) _Action _ComponentRefAction _RenderAction = (.) _Action _RenderAction _ComponentDidUpdateAction = (.) _Action _ComponentDidUpdateAction _DestroyItemAction = (.) _Action _DestroyItemAction _MakeItemAction = (.) _Action _MakeItemAction _AddItemAction = (.) _Action _AddItemAction _ItemAction = (.) _Action _ItemAction _SetFilterAction = (.) _Action _SetFilterAction
- Glazier.React.Widgets.List: class HasModel c_ahNv key_agYg itemWidget_agYh | c_ahNv -> key_agYg itemWidget_agYh where className = (.) model className componentRef = (.) model componentRef deferredCommands = (.) model deferredCommands frameNum = (.) model frameNum itemKey = (.) model itemKey itemsFilter = (.) model itemsFilter itemsModel = (.) model itemsModel uid = (.) model uid
+ Glazier.React.Widgets.List: class HasModel c_acRY k_a9xs itemWidget_a9xt | c_acRY -> k_a9xs itemWidget_a9xt where className = (.) model className componentRef = (.) model componentRef deferredDisposables = (.) model deferredDisposables frameNum = (.) model frameNum itemKey = (.) model itemKey itemsFilter = (.) model itemsFilter itemsModel = (.) model itemsModel key = (.) model key
- Glazier.React.Widgets.List: class HasPlan c_ahJg where component = (.) plan component onComponentDidUpdate = (.) plan onComponentDidUpdate onComponentRef = (.) plan onComponentRef onRender = (.) plan onRender
+ Glazier.React.Widgets.List: class HasPlan c_acNJ where component = (.) plan component onComponentDidUpdate = (.) plan onComponentDidUpdate onComponentRef = (.) plan onComponentRef onRender = (.) plan onRender
- Glazier.React.Widgets.List: className :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv JSString
+ Glazier.React.Widgets.List: className :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY JSString
- Glazier.React.Widgets.List: component :: HasPlan c_ahJg => Lens' c_ahJg ReactComponent
+ Glazier.React.Widgets.List: component :: HasPlan c_acNJ => Lens' c_acNJ ReactComponent
- Glazier.React.Widgets.List: componentRef :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv JSVal
+ Glazier.React.Widgets.List: componentRef :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY JSVal
- Glazier.React.Widgets.List: data Action key itemWidget
+ Glazier.React.Widgets.List: data Action k itemWidget
- Glazier.React.Widgets.List: data Command key itemWidget
+ Glazier.React.Widgets.List: data Command k itemWidget
- Glazier.React.Widgets.List: data Model key itemWidget
+ Glazier.React.Widgets.List: data Model k itemWidget
- Glazier.React.Widgets.List: frameNum :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv Int
+ Glazier.React.Widgets.List: frameNum :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY Int
- Glazier.React.Widgets.List: gadget :: (Ord key, Disposing (ModelOf itemWidget), Disposing (PlanOf itemWidget)) => (ModelOf itemWidget -> F (Maker (ActionOf itemWidget)) (SuperModelOf itemWidget)) -> GadgetT (ActionOf itemWidget) (SuperModelOf itemWidget) Identity (DList (CommandOf itemWidget)) -> GadgetT (Action key itemWidget) (SuperModel (Model key itemWidget) Plan) Identity (DList (Command key itemWidget))
+ Glazier.React.Widgets.List: gadget :: (Ord k, IsWidget itemWidget) => (ModelOf itemWidget -> F (Maker (ActionOf itemWidget)) (SuperModelOf itemWidget)) -> GadgetT (ActionOf itemWidget) (SuperModelOf itemWidget) Identity (DList (CommandOf itemWidget)) -> GadgetT (Action k itemWidget) (SuperModel (Model k itemWidget) Plan) Identity (DList (Command k itemWidget))
- Glazier.React.Widgets.List: itemKey :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv key_agYg
+ Glazier.React.Widgets.List: itemKey :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY k_a9xs
- Glazier.React.Widgets.List: itemsFilter :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv (SuperModelOf itemWidget_agYh -> Bool)
+ Glazier.React.Widgets.List: itemsFilter :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (SuperModelOf itemWidget_a9xt -> Bool)
- Glazier.React.Widgets.List: itemsModel :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv (Map key_agYg (SuperModelOf itemWidget_agYh))
+ Glazier.React.Widgets.List: itemsModel :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (Map k_a9xs (SuperModelOf itemWidget_a9xt))
- Glazier.React.Widgets.List: mkPlan :: ReactMlT Identity () -> WindowT (DesignOf itemWidget) (ReactMlT Identity) () -> Frame (Model key itemWidget) Plan -> F (Maker (Action key itemWidget)) Plan
+ Glazier.React.Widgets.List: mkPlan :: ReactMlT Identity () -> WindowT (DesignOf itemWidget) (ReactMlT Identity) () -> Frame (Model k itemWidget) Plan -> F (Maker (Action k itemWidget)) Plan
- Glazier.React.Widgets.List: model :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv (Model key_agYg itemWidget_agYh)
+ Glazier.React.Widgets.List: model :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (Model k_a9xs itemWidget_a9xt)
- Glazier.React.Widgets.List: onComponentDidUpdate :: HasPlan c_ahJg => Lens' c_ahJg (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.List: onComponentDidUpdate :: HasPlan c_acNJ => Lens' c_acNJ (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.List: onComponentRef :: HasPlan c_ahJg => Lens' c_ahJg (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.List: onComponentRef :: HasPlan c_acNJ => Lens' c_acNJ (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.List: onRender :: HasPlan c_ahJg => Lens' c_ahJg (Callback (JSVal -> IO JSVal))
+ Glazier.React.Widgets.List: onRender :: HasPlan c_acNJ => Lens' c_acNJ (Callback (JSVal -> IO JSVal))
- Glazier.React.Widgets.List: plan :: HasPlan c_ahJg => Lens' c_ahJg Plan
+ Glazier.React.Widgets.List: plan :: HasPlan c_acNJ => Lens' c_acNJ Plan
- Glazier.React.Widgets.List: type Design key itemWidget = Design (Model key itemWidget) Plan
+ Glazier.React.Widgets.List: type Design k itemWidget = Design (Model k itemWidget) Plan
- Glazier.React.Widgets.List: type Frame key itemWidget = Frame (Model key itemWidget) Plan
+ Glazier.React.Widgets.List: type Frame k itemWidget = Frame (Model k itemWidget) Plan
- Glazier.React.Widgets.List: type SuperModel key itemWidget = SuperModel (Model key itemWidget) Plan
+ Glazier.React.Widgets.List: type SuperModel k itemWidget = SuperModel (Model k itemWidget) Plan
- Glazier.React.Widgets.List: type Widget key itemWidget = Widget (Command key itemWidget) (Action key itemWidget) (Model key itemWidget) Plan
+ Glazier.React.Widgets.List: type Widget k itemWidget = Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan
- Glazier.React.Widgets.List: widget :: (IsWidget itemWidget, Ord key) => ReactMlT Identity () -> itemWidget -> Widget (Command key itemWidget) (Action key itemWidget) (Model key itemWidget) Plan
+ Glazier.React.Widgets.List: widget :: (IsWidget itemWidget, Ord k) => ReactMlT Identity () -> itemWidget -> Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan
- Glazier.React.Widgets.List: window :: WindowT (Design (Model key itemWidget) Plan) (ReactMlT Identity) ()
+ Glazier.React.Widgets.List: window :: WindowT (Design (Model k itemWidget) Plan) (ReactMlT Identity) ()
- Glazier.React.Widgets.List.Run: run :: (key -> CommandOf itemWidget -> IO ()) -> ReactComponent -> Output (Action key itemWidget) -> Command key itemWidget -> IO ()
+ Glazier.React.Widgets.List.Run: run :: (k -> CommandOf itemWidget -> IO ()) -> MVar Int -> ReactComponent -> Output (Action k itemWidget) -> Command k itemWidget -> IO ()
Files
- README.md +8/−8
- glazier-react-widget.cabal +4/−4
- src/Glazier/React/Widgets/Input.hs +3/−3
- src/Glazier/React/Widgets/List.hs +39/−40
- src/Glazier/React/Widgets/List/Run.hs +10/−8
README.md view
@@ -103,7 +103,7 @@ This contains the pure data for state processing logic and rendering (the nouns). ```haskell data Model = Model- { _uid :: J.JSString+ { _key :: J.JSString , _componentRef :: J.JSVal , _frameNum :: Int , _deferredCommands :: D.DList (Command key itemWidget)@@ -113,11 +113,11 @@ `Model`s should have [`makeClassy`](https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-TH.html#v:makeClassy) generated to facilitate embedding it in larger widget with [`magnify`](https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-Zoom.html#v:magnify) and [`zoom`](https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-Zoom.html#v:zoom). Some common Model fields are-### uid+### key ```haskell-_uid :: JSString+_key :: JSString ```-`uid` is used to ensure a unique [key](https://facebook.github.io/react/docs/lists-and-keys.html) for React's efficient rendering of a list.+`key` is used to ensure a unique [key](https://facebook.github.io/react/docs/lists-and-keys.html) for React's efficient rendering of a list. ### componentRef ```haskell@@ -131,11 +131,11 @@ ``` `frameNum` is the sequence number used in `RenderCommand`. -### _deferredCommands+### _deferredDisposables ```haskell-_deferredCommands :: DList Command+_deferredDisposables :: DList SomeDisposable ```-`deferredCommands` keep the list of commands to run at the next `ComponentDidUpdateAction`. It usually contains `DisposeCommand`.+`deferredDisposables` keep the list of disposables to dispose at the next `ComponentDidUpdateAction`. ## Plan The `Plan` contains the callbacks for integrating with React (the verbs). It also contains a javascript reference to the instance of shim component used for the widget. This reference is used to trigger rendering with [`setState`](https://facebook.github.io/react/docs/react-component.html#setstate).@@ -243,7 +243,7 @@ window = do s <- ask lift $ lf (s ^. component . to toJS)- [ ("key", s ^. uid . to toJS)+ [ ("key", s ^. key . to toJS) , ("render", s ^. onRender . to toJS) , ("ref", s ^. onComponentRef . to toJS) , ("componentDidUpdate", s ^. onComponentDidUpdate . to toJS)
glazier-react-widget.cabal view
@@ -1,5 +1,5 @@ name: glazier-react-widget-version: 0.3.0.1+version: 0.4.0.0 synopsis: Generic widget library using glazier-react description: Generic widget library using glazier-react homepage: https://github.com/louispan/glazier-react-widget#readme@@ -21,12 +21,12 @@ Glazier.React.Widgets.List.Run build-depends: base >= 4.7 && < 5 , containers >= 0.5 && < 0.6- , disposable >= 0.2.0.2 && < 1+ , disposable >= 0.2.0.3 && < 1 , dlist >= 0.8 && < 0.9 , free >= 4.12 && < 5 , glazier >= 0.10 && < 1- , glazier-react >= 0.3 && < 1- , javascript-extras >= 0.2 && < 1+ , glazier-react >= 0.4 && < 1+ , javascript-extras >= 0.2.0.2 && < 1 , lens >= 4 && < 5 , mmorph >= 1 && < 2 , mtl >= 2 && < 3
src/Glazier/React/Widgets/Input.hs view
@@ -56,7 +56,7 @@ | InputRefAction J.JSVal data Model = Model- { _uid :: J.JSString+ { _key :: J.JSString , _inputRef :: J.JSVal , _placeholder :: J.JSString , _className :: J.JSString@@ -110,7 +110,7 @@ window = do s <- ask lift $ R.lf (s ^. component . to JE.toJS)- [ ("key", s ^. uid . to JE.toJS)+ [ ("key", s ^. key . to JE.toJS) , ("render", s ^. onRender . to JE.toJS) ] @@ -119,7 +119,7 @@ render = do s <- ask lift $ R.lf (JE.strJS "input")- [ ("key", s ^. uid . to JE.toJS)+ [ ("key", s ^. key . to JE.toJS) , ("className", s ^. className . to JE.toJS) , ("placeholder", s ^. placeholder . to JE.toJS) , ("autoFocus", JE.toJS True)
src/Glazier/React/Widgets/List.hs view
@@ -51,30 +51,30 @@ import qualified Glazier.React.Widget as R import qualified JavaScript.Extras as JE -data Command key itemWidget- = RenderCommand (R.SuperModel (Model key itemWidget) Plan) [JE.Property] J.JSVal+data Command k itemWidget+ = RenderCommand (R.SuperModel (Model k itemWidget) Plan) [JE.Property] J.JSVal | DisposeCommand CD.SomeDisposable- | MakerCommand (F (R.Maker (Action key itemWidget)) (Action key itemWidget))- | ItemCommand key (R.CommandOf itemWidget)+ | MakerCommand (F (R.Maker (Action k itemWidget)) (Action k itemWidget))+ | ItemCommand k (R.CommandOf itemWidget) -data Action key itemWidget+data Action k itemWidget = ComponentRefAction J.JSVal | RenderAction | ComponentDidUpdateAction- | DestroyItemAction key- | MakeItemAction (key -> key) (key -> F (R.Maker (R.ActionOf itemWidget)) (R.ModelOf itemWidget))- | AddItemAction key (R.SuperModelOf itemWidget)- | ItemAction key (R.ActionOf itemWidget)+ | DestroyItemAction k+ | MakeItemAction (k -> k) (k -> F (R.Maker (R.ActionOf itemWidget)) (R.ModelOf itemWidget))+ | AddItemAction k (R.SuperModelOf itemWidget)+ | ItemAction k (R.ActionOf itemWidget) | SetFilterAction (R.SuperModelOf itemWidget -> Bool) -data Model key itemWidget = Model- { _uid :: J.JSString+data Model k itemWidget = Model+ { _key :: J.JSString , _componentRef :: J.JSVal , _frameNum :: Int- , _deferredCommands :: D.DList (Command key itemWidget)+ , _deferredDisposables :: D.DList CD.SomeDisposable , _className ::J.JSString- , _itemKey :: key- , _itemsModel :: M.Map key (R.SuperModelOf itemWidget)+ , _itemKey :: k+ , _itemsModel :: M.Map k (R.SuperModelOf itemWidget) , _itemsFilter :: R.SuperModelOf itemWidget -> Bool } @@ -92,8 +92,8 @@ mkPlan :: R.ReactMlT Identity () -> G.WindowT (R.DesignOf itemWidget) (R.ReactMlT Identity) ()- -> R.Frame (Model key itemWidget) Plan- -> F (R.Maker (Action key itemWidget)) Plan+ -> R.Frame (Model k itemWidget) Plan+ -> F (R.Maker (Action k itemWidget)) Plan mkPlan separator itemWindow frm = Plan <$> R.getComponent <*> (R.mkRenderer frm $ const (render separator itemWindow))@@ -102,40 +102,40 @@ instance CD.Disposing Plan instance (CD.Disposing (R.SuperModelOf itemWidget)) =>- CD.Disposing (Model key itemWidget) where+ CD.Disposing (Model k itemWidget) where disposing s = CD.DisposeList $ foldr ((:) . CD.disposing) [] (_itemsModel s) -- Link Glazier.React.Model's HasPlan/HasModel with this widget's HasPlan/HasModel from makeClassy-instance HasPlan (R.Design (Model key itemWidget) Plan) where+instance HasPlan (R.Design (Model k itemWidget) Plan) where plan = R.plan-instance HasModel (R.Design (Model key itemWidget) Plan) key itemWidget where+instance HasModel (R.Design (Model k itemWidget) Plan) k itemWidget where model = R.model-instance HasPlan (R.SuperModel (Model key itemWidget) Plan) where+instance HasPlan (R.SuperModel (Model k itemWidget) Plan) where plan = R.design . plan-instance HasModel (R.SuperModel (Model key itemWidget) Plan) key itemWidget where+instance HasModel (R.SuperModel (Model k itemWidget) Plan) k itemWidget where model = R.design . model -type Design key itemWidget = R.Design (Model key itemWidget) Plan-type Frame key itemWidget = R.Frame (Model key itemWidget) Plan-type SuperModel key itemWidget = R.SuperModel (Model key itemWidget) Plan+type Design k itemWidget = R.Design (Model k itemWidget) Plan+type Frame k itemWidget = R.Frame (Model k itemWidget) Plan+type SuperModel k itemWidget = R.SuperModel (Model k itemWidget) Plan -type Widget key itemWidget = R.Widget (Command key itemWidget) (Action key itemWidget) (Model key itemWidget) Plan+type Widget k itemWidget = R.Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan widget- :: (R.IsWidget itemWidget, Ord key)+ :: (R.IsWidget itemWidget, Ord k) => R.ReactMlT Identity () -> itemWidget- -> R.Widget (Command key itemWidget) (Action key itemWidget) (Model key itemWidget) Plan+ -> R.Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan widget separator itemWidget = R.Widget (mkPlan separator (R.window itemWidget)) window (gadget (R.mkSuperModel itemWidget) (R.gadget itemWidget)) -- | Exposed to parent components to render this component-window :: G.WindowT (R.Design (Model key itemWidget) Plan) (R.ReactMlT Identity) ()+window :: G.WindowT (R.Design (Model k itemWidget) Plan) (R.ReactMlT Identity) () window = do s <- ask lift $ R.lf (s ^. component . to JE.toJS)- [ ("key", s ^. uid . to JE.toJS)+ [ ("key", s ^. key . to JE.toJS) , ("render", s ^. onRender . to JE.toJS) , ("ref", s ^. onComponentRef . to JE.toJS) , ("componentDidUpdate", s ^. onComponentDidUpdate . to JE.toJS)@@ -145,11 +145,11 @@ render :: R.ReactMlT Identity () -> G.WindowT (R.DesignOf itemWidget) (R.ReactMlT Identity) ()- -> G.WindowT (R.Design (Model key itemWidget) Plan) (R.ReactMlT Identity) ()+ -> G.WindowT (R.Design (Model k itemWidget) Plan) (R.ReactMlT Identity) () render separator itemWindow = do s <- ask items <- fmap (view R.design) . filter (s ^. itemsFilter) . fmap snd . M.toList <$> view itemsModel- lift $ R.bh (JE.strJS "ul") [ ("key", s ^. uid . to JE.toJS)+ lift $ R.bh (JE.strJS "ul") [ ("key", s ^. key . to JE.toJS) , ("className", s ^. className . to JE.toJS) ] $ do let itemsWindows = (view G._WindowT itemWindow) <$> items@@ -157,10 +157,10 @@ sequenceA_ separatedWindows gadget- :: (Ord key, CD.Disposing (R.ModelOf itemWidget), CD.Disposing (R.PlanOf itemWidget))+ :: (Ord k, R.IsWidget itemWidget) => (R.ModelOf itemWidget -> F (R.Maker (R.ActionOf itemWidget)) (R.SuperModelOf itemWidget)) -> G.GadgetT (R.ActionOf itemWidget) (R.SuperModelOf itemWidget) Identity (D.DList (R.CommandOf itemWidget))- -> G.GadgetT (Action key itemWidget) (R.SuperModel (Model key itemWidget) Plan) Identity (D.DList (Command key itemWidget))+ -> G.GadgetT (Action k itemWidget) (R.SuperModel (Model k itemWidget) Plan) Identity (D.DList (Command k itemWidget)) gadget mkItemSuperModel itemGadget = do a <- ask case a of@@ -174,16 +174,15 @@ ComponentDidUpdateAction -> do -- Run delayed commands that need to wait until frame is re-rendered -- Eg focusing after other rendering changes- cmds <- use deferredCommands- deferredCommands .= mempty- pure cmds+ ds <- use deferredDisposables+ deferredDisposables .= mempty+ pure . D.singleton . DisposeCommand . CD.DisposeList $ D.toList ds DestroyItemAction k -> do -- queue up callbacks to be released after rerendering ret <- runMaybeT $ do itemSuperModel <- MaybeT $ use (itemsModel . at k)- let junk = CD.disposing itemSuperModel- deferredCommands %= (`D.snoc` DisposeCommand junk)+ deferredDisposables %= (`D.snoc` CD.disposing itemSuperModel) -- Remove the todo from the model itemsModel %= M.delete k -- on re-render the todo Shim will not get rendered and will be removed by react@@ -202,9 +201,9 @@ itemsModel %= M.insert n v D.singleton <$> (R.basicRenderCmd frameNum componentRef RenderCommand) - ItemAction key _ -> fmap (ItemCommand key) <$>+ ItemAction k _ -> fmap (ItemCommand k) <$> (magnify (_ItemAction . to snd)- (zoom (itemsModel . at key . _Just) itemGadget))+ (zoom (itemsModel . at k . _Just) itemGadget)) SetFilterAction ftr -> do itemsFilter .= ftr
src/Glazier/React/Widgets/List/Run.hs view
@@ -8,6 +8,7 @@ ( run ) where +import Control.Concurrent.MVar import Control.Concurrent.STM import qualified Control.Disposable as CD import Control.Monad@@ -20,18 +21,19 @@ import qualified Pipes.Concurrent as PC run- :: (key -> R.CommandOf itemWidget -> IO ()) -- command runner for the items+ :: (k -> R.CommandOf itemWidget -> IO ()) -- command runner for the items+ -> MVar Int -> R.ReactComponent -- for Maker- -> PC.Output (Action key itemWidget)- -> Command key itemWidget+ -> PC.Output (Action k itemWidget)+ -> Command k itemWidget -> IO () -run _ _ _ (RenderCommand sm props j) = R.componentSetState sm props j+run _ _ _ _ (RenderCommand sm props j) = R.componentSetState sm props j -run _ _ _ (DisposeCommand x) = CD.dispose x+run _ _ _ _ (DisposeCommand x) = CD.dispose x -run _ comp output (MakerCommand mks) = do- act <- iterM (R.Maker.run comp output) mks+run _ muid comp output (MakerCommand mks) = do+ act <- iterM (R.Maker.run muid comp output) mks void $ atomically $ PC.send output act -run itemCmdRun _ _ (ItemCommand key itemCmd) = itemCmdRun key itemCmd+run itemCmdRun _ _ _ (ItemCommand k itemCmd) = itemCmdRun k itemCmd