packages feed

glazier-react-widget 0.4.0.0 → 0.5.0.0

raw patch · 4 files changed

+174/−139 lines, 4 filesdep ~disposabledep ~glazier-reactPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: disposable, glazier-react

API changes (from Hackage documentation)

- Glazier.React.Widgets.Input: Model :: JSString -> JSVal -> JSString -> JSString -> Model
- 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: data Model
- Glazier.React.Widgets.Input: gadget :: GadgetT Action (SuperModel Model Plan) Identity (DList Command)
- Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasModel (Glazier.React.Model.Design Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
- Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasModel (Glazier.React.Model.SuperModel Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
- Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasModel Glazier.React.Widgets.Input.Model
- Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasPlan (Glazier.React.Model.Design Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
- Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasPlan (Glazier.React.Model.SuperModel Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
- Glazier.React.Widgets.Input: mkPlan :: Frame Model Plan -> F (Maker Action) Plan
- Glazier.React.Widgets.Input: model :: HasModel c_aqht => Lens' c_aqht Model
- Glazier.React.Widgets.Input: type Design = Design Model Plan
- Glazier.React.Widgets.Input: type Frame = Frame Model Plan
- Glazier.React.Widgets.Input: type SuperModel = SuperModel Model Plan
- Glazier.React.Widgets.Input: window :: WindowT (Design Model Plan) (ReactMlT Identity) ()
- 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: [_className] :: Model k itemWidget -> JSString
- Glazier.React.Widgets.List: [_componentRef] :: Model k itemWidget -> JSVal
- Glazier.React.Widgets.List: [_component] :: Plan -> ReactComponent
- Glazier.React.Widgets.List: [_deferredDisposables] :: Model k itemWidget -> DList SomeDisposable
- Glazier.React.Widgets.List: [_frameNum] :: Model k itemWidget -> Int
- Glazier.React.Widgets.List: [_itemKey] :: Model k itemWidget -> k
- Glazier.React.Widgets.List: [_itemsFilter] :: Model k itemWidget -> SuperModelOf itemWidget -> Bool
- Glazier.React.Widgets.List: [_itemsModel] :: Model k itemWidget -> Map k (SuperModelOf itemWidget)
- Glazier.React.Widgets.List: [_key] :: Model k itemWidget -> JSString
- Glazier.React.Widgets.List: [_onComponentDidUpdate] :: Plan -> Callback (JSVal -> IO ())
- Glazier.React.Widgets.List: [_onComponentRef] :: Plan -> Callback (JSVal -> IO ())
- Glazier.React.Widgets.List: [_onRender] :: Plan -> Callback (JSVal -> IO JSVal)
- 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: data Model k 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: 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.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: itemKey :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY k_a9xs
- 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 k itemWidget) Plan -> F (Maker (Action k itemWidget)) Plan
- Glazier.React.Widgets.List: model :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (Model k_a9xs itemWidget_a9xt)
- Glazier.React.Widgets.List: type Design k itemWidget = Design (Model k itemWidget) Plan
- Glazier.React.Widgets.List: type Frame k itemWidget = Frame (Model k itemWidget) Plan
- Glazier.React.Widgets.List: type SuperModel k itemWidget = SuperModel (Model k itemWidget) Plan
- Glazier.React.Widgets.List: window :: WindowT (Design (Model k itemWidget) Plan) (ReactMlT Identity) ()
+ Glazier.React.Widgets.Input: Schema :: JSString -> JSString -> Schema
+ Glazier.React.Widgets.Input: class HasSchema c_aqVD where className = (.) schema className placeholder = (.) schema placeholder
+ Glazier.React.Widgets.Input: data Schema
+ Glazier.React.Widgets.Input: instance Glazier.React.Model.ToOutline Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Outline
+ Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasPlan (Glazier.React.Model.Gizmo Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
+ Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasPlan (Glazier.React.Model.Scene Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
+ Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasSchema (Glazier.React.Model.Gizmo Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
+ Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasSchema (Glazier.React.Model.Scene Glazier.React.Widgets.Input.Model Glazier.React.Widgets.Input.Plan)
+ Glazier.React.Widgets.Input: instance Glazier.React.Widgets.Input.HasSchema Glazier.React.Widgets.Input.Schema
+ Glazier.React.Widgets.Input: schema :: HasSchema c_aqVD => Lens' c_aqVD Schema
+ Glazier.React.Widgets.Input: type Model = Schema
+ Glazier.React.Widgets.Input: type Outline = Schema
+ Glazier.React.Widgets.List: Schema :: JSString -> k -> Map k (SchemaType t itemWidget) -> (OutlineOf itemWidget -> Bool) -> Schema k itemWidget t
+ Glazier.React.Widgets.List: class HasSchema c_acTs k_a9yW itemWidget_a9yX t_a9yY | c_acTs -> k_a9yW itemWidget_a9yX t_a9yY where className = (.) schema className idx = (.) schema idx items = (.) schema items itemsFilter = (.) schema itemsFilter
+ Glazier.React.Widgets.List: data Schema k itemWidget t
+ Glazier.React.Widgets.List: idx :: HasSchema c_acTs k_a9yW itemWidget_a9yX t_a9yY => Lens' c_acTs k_a9yW
+ Glazier.React.Widgets.List: instance Control.Disposable.Disposing (Glazier.React.Widget.GizmoOf itemWidget) => Control.Disposable.Disposing (Glazier.React.Widgets.List.Model k itemWidget)
+ Glazier.React.Widgets.List: instance Glazier.React.Widget.IsWidget itemWidget => Glazier.React.Model.ToOutline (Glazier.React.Widgets.List.Model k itemWidget) (Glazier.React.Widgets.List.Outline k itemWidget)
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasPlan (Glazier.React.Model.Gizmo (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.Scene (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan)
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasSchema (Glazier.React.Model.Gizmo (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan) k itemWidget Glazier.React.Widget.WithGizmo
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasSchema (Glazier.React.Model.Scene (Glazier.React.Widgets.List.Model k itemWidget) Glazier.React.Widgets.List.Plan) k itemWidget Glazier.React.Widget.WithGizmo
+ Glazier.React.Widgets.List: instance Glazier.React.Widgets.List.HasSchema (Glazier.React.Widgets.List.Schema k0 itemWidget0 t0) k0 itemWidget0 t0
+ Glazier.React.Widgets.List: items :: HasSchema c_acTs k_a9yW itemWidget_a9yX t_a9yY => Lens' c_acTs (Map k_a9yW (SchemaType t_a9yY itemWidget_a9yX))
+ Glazier.React.Widgets.List: schema :: HasSchema c_acTs k_a9yW itemWidget_a9yX t_a9yY => Lens' c_acTs (Schema k_a9yW itemWidget_a9yX t_a9yY)
+ Glazier.React.Widgets.List: type Model k itemWidget = Schema k itemWidget WithGizmo
+ Glazier.React.Widgets.List: type Outline k itemWidget = Schema k itemWidget WithOutline
- Glazier.React.Widgets.Input: Plan :: ReactComponent -> Callback (JSVal -> IO JSVal) -> Callback (JSVal -> IO ()) -> Callback (JSVal -> IO ()) -> Plan
+ Glazier.React.Widgets.Input: Plan :: ReactComponent -> JSString -> JSVal -> Callback (JSVal -> IO JSVal) -> Callback (JSVal -> IO ()) -> Callback (JSVal -> IO ()) -> Plan
- Glazier.React.Widgets.Input: [_className] :: Model -> JSString
+ Glazier.React.Widgets.Input: [_className] :: Schema -> JSString
- Glazier.React.Widgets.Input: [_inputRef] :: Model -> JSVal
+ Glazier.React.Widgets.Input: [_inputRef] :: Plan -> JSVal
- Glazier.React.Widgets.Input: [_key] :: Model -> JSString
+ Glazier.React.Widgets.Input: [_key] :: Plan -> JSString
- Glazier.React.Widgets.Input: [_placeholder] :: Model -> JSString
+ Glazier.React.Widgets.Input: [_placeholder] :: Schema -> JSString
- Glazier.React.Widgets.Input: _Action :: AsAction r_aq9f => Prism' r_aq9f Action
+ Glazier.React.Widgets.Input: _Action :: AsAction r_aqLD => Prism' r_aqLD Action
- Glazier.React.Widgets.Input: _InputRefAction :: AsAction r_aq9f => Prism' r_aq9f JSVal
+ Glazier.React.Widgets.Input: _InputRefAction :: AsAction r_aqLD => Prism' r_aqLD JSVal
- Glazier.React.Widgets.Input: _SendCommandsAction :: AsAction r_aq9f => Prism' r_aq9f [Command]
+ Glazier.React.Widgets.Input: _SendCommandsAction :: AsAction r_aqLD => Prism' r_aqLD [Command]
- Glazier.React.Widgets.Input: _SubmitAction :: AsAction r_aq9f => Prism' r_aq9f JSString
+ Glazier.React.Widgets.Input: _SubmitAction :: AsAction r_aqLD => Prism' r_aqLD JSString
- Glazier.React.Widgets.Input: class AsAction r_aq9f where _SendCommandsAction = (.) _Action _SendCommandsAction _SubmitAction = (.) _Action _SubmitAction _InputRefAction = (.) _Action _InputRefAction
+ Glazier.React.Widgets.Input: class AsAction r_aqLD where _SendCommandsAction = (.) _Action _SendCommandsAction _SubmitAction = (.) _Action _SubmitAction _InputRefAction = (.) _Action _InputRefAction
- 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: class HasPlan c_aqPP where component = (.) plan component inputRef = (.) plan inputRef key = (.) plan key onInputRef = (.) plan onInputRef onKeyDown = (.) plan onKeyDown onRender = (.) plan onRender
- Glazier.React.Widgets.Input: className :: HasModel c_aqht => Lens' c_aqht JSString
+ Glazier.React.Widgets.Input: className :: HasSchema c_aqVD => Lens' c_aqVD JSString
- Glazier.React.Widgets.Input: component :: HasPlan c_aqdr => Lens' c_aqdr ReactComponent
+ Glazier.React.Widgets.Input: component :: HasPlan c_aqPP => Lens' c_aqPP ReactComponent
- Glazier.React.Widgets.Input: inputRef :: HasModel c_aqht => Lens' c_aqht JSVal
+ Glazier.React.Widgets.Input: inputRef :: HasPlan c_aqPP => Lens' c_aqPP JSVal
- Glazier.React.Widgets.Input: key :: HasModel c_aqht => Lens' c_aqht JSString
+ Glazier.React.Widgets.Input: key :: HasPlan c_aqPP => Lens' c_aqPP JSString
- Glazier.React.Widgets.Input: onInputRef :: HasPlan c_aqdr => Lens' c_aqdr (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.Input: onInputRef :: HasPlan c_aqPP => Lens' c_aqPP (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.Input: onKeyDown :: HasPlan c_aqdr => Lens' c_aqdr (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.Input: onKeyDown :: HasPlan c_aqPP => Lens' c_aqPP (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.Input: onRender :: HasPlan c_aqdr => Lens' c_aqdr (Callback (JSVal -> IO JSVal))
+ Glazier.React.Widgets.Input: onRender :: HasPlan c_aqPP => Lens' c_aqPP (Callback (JSVal -> IO JSVal))
- Glazier.React.Widgets.Input: placeholder :: HasModel c_aqht => Lens' c_aqht JSString
+ Glazier.React.Widgets.Input: placeholder :: HasSchema c_aqVD => Lens' c_aqVD JSString
- Glazier.React.Widgets.Input: plan :: HasPlan c_aqdr => Lens' c_aqdr Plan
+ Glazier.React.Widgets.Input: plan :: HasPlan c_aqPP => Lens' c_aqPP Plan
- Glazier.React.Widgets.Input: type Widget = Widget Command Action Model Plan
+ Glazier.React.Widgets.Input: type Widget = Widget Command Action Outline Model Plan
- Glazier.React.Widgets.Input: widget :: Widget Command Action Model Plan
+ Glazier.React.Widgets.Input: widget :: Widget
- Glazier.React.Widgets.List: AddItemAction :: k -> (SuperModelOf itemWidget) -> Action k itemWidget
+ Glazier.React.Widgets.List: AddItemAction :: k -> (GizmoOf itemWidget) -> Action k itemWidget
- Glazier.React.Widgets.List: Plan :: ReactComponent -> Callback (JSVal -> IO JSVal) -> Callback (JSVal -> IO ()) -> Callback (JSVal -> IO ()) -> Plan
+ Glazier.React.Widgets.List: Plan :: ReactComponent -> JSString -> Int -> JSVal -> DList SomeDisposable -> Callback (JSVal -> IO JSVal) -> Callback (JSVal -> IO ()) -> Callback (JSVal -> IO ()) -> Plan
- Glazier.React.Widgets.List: RenderCommand :: (SuperModel (Model k itemWidget) Plan) -> [Property] -> JSVal -> Command k itemWidget
+ Glazier.React.Widgets.List: RenderCommand :: (Gizmo (Model k itemWidget) Plan) -> [Property] -> JSVal -> Command k itemWidget
- Glazier.React.Widgets.List: SetFilterAction :: (SuperModelOf itemWidget -> Bool) -> Action k itemWidget
+ Glazier.React.Widgets.List: SetFilterAction :: (OutlineOf itemWidget -> Bool) -> Action k itemWidget
- Glazier.React.Widgets.List: _Action :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (Action k_a9Fz itemWidget_a9FA)
+ Glazier.React.Widgets.List: _Action :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL (Action k_a9Gw itemWidget_a9Gx)
- Glazier.React.Widgets.List: _AddItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (k_a9Fz, SuperModelOf itemWidget_a9FA)
+ Glazier.React.Widgets.List: _AddItemAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL (k_a9Gw, GizmoOf itemWidget_a9Gx)
- Glazier.React.Widgets.List: _ComponentDidUpdateAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst ()
+ Glazier.React.Widgets.List: _ComponentDidUpdateAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL ()
- Glazier.React.Widgets.List: _ComponentRefAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst JSVal
+ Glazier.React.Widgets.List: _ComponentRefAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL JSVal
- Glazier.React.Widgets.List: _DestroyItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst k_a9Fz
+ Glazier.React.Widgets.List: _DestroyItemAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL k_a9Gw
- Glazier.React.Widgets.List: _ItemAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (k_a9Fz, ActionOf itemWidget_a9FA)
+ Glazier.React.Widgets.List: _ItemAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL (k_a9Gw, ActionOf itemWidget_a9Gx)
- 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: _MakeItemAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL (k_a9Gw -> k_a9Gw, k_a9Gw -> F (Maker (ActionOf itemWidget_a9Gx)) (ModelOf itemWidget_a9Gx))
- Glazier.React.Widgets.List: _RenderAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst ()
+ Glazier.React.Widgets.List: _RenderAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL ()
- Glazier.React.Widgets.List: _SetFilterAction :: AsAction r_acst k_a9Fz itemWidget_a9FA => Prism' r_acst (SuperModelOf itemWidget_a9FA -> Bool)
+ Glazier.React.Widgets.List: _SetFilterAction :: AsAction r_acyL k_a9Gw itemWidget_a9Gx => Prism' r_acyL (OutlineOf itemWidget_a9Gx -> Bool)
- 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 AsAction r_acyL k_a9Gw itemWidget_a9Gx | r_acyL -> k_a9Gw itemWidget_a9Gx 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 HasPlan c_acNJ where component = (.) plan component onComponentDidUpdate = (.) plan onComponentDidUpdate onComponentRef = (.) plan onComponentRef onRender = (.) plan onRender
+ Glazier.React.Widgets.List: class HasPlan c_acZs where component = (.) plan component componentRef = (.) plan componentRef deferredDisposables = (.) plan deferredDisposables frameNum = (.) plan frameNum key = (.) plan key onComponentDidUpdate = (.) plan onComponentDidUpdate onComponentRef = (.) plan onComponentRef onRender = (.) plan onRender
- Glazier.React.Widgets.List: className :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY JSString
+ Glazier.React.Widgets.List: className :: HasSchema c_acTs k_a9yW itemWidget_a9yX t_a9yY => Lens' c_acTs JSString
- Glazier.React.Widgets.List: component :: HasPlan c_acNJ => Lens' c_acNJ ReactComponent
+ Glazier.React.Widgets.List: component :: HasPlan c_acZs => Lens' c_acZs ReactComponent
- Glazier.React.Widgets.List: componentRef :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY JSVal
+ Glazier.React.Widgets.List: componentRef :: HasPlan c_acZs => Lens' c_acZs JSVal
- Glazier.React.Widgets.List: deferredDisposables :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (DList SomeDisposable)
+ Glazier.React.Widgets.List: deferredDisposables :: HasPlan c_acZs => Lens' c_acZs (DList SomeDisposable)
- Glazier.React.Widgets.List: frameNum :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY Int
+ Glazier.React.Widgets.List: frameNum :: HasPlan c_acZs => Lens' c_acZs Int
- Glazier.React.Widgets.List: itemsFilter :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY (SuperModelOf itemWidget_a9xt -> Bool)
+ Glazier.React.Widgets.List: itemsFilter :: HasSchema c_acTs k_a9yW itemWidget_a9yX t_a9yY => Lens' c_acTs (OutlineOf itemWidget_a9yX -> Bool)
- Glazier.React.Widgets.List: key :: HasModel c_acRY k_a9xs itemWidget_a9xt => Lens' c_acRY JSString
+ Glazier.React.Widgets.List: key :: HasPlan c_acZs => Lens' c_acZs JSString
- Glazier.React.Widgets.List: onComponentDidUpdate :: HasPlan c_acNJ => Lens' c_acNJ (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.List: onComponentDidUpdate :: HasPlan c_acZs => Lens' c_acZs (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.List: onComponentRef :: HasPlan c_acNJ => Lens' c_acNJ (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.List: onComponentRef :: HasPlan c_acZs => Lens' c_acZs (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.List: onRender :: HasPlan c_acNJ => Lens' c_acNJ (Callback (JSVal -> IO JSVal))
+ Glazier.React.Widgets.List: onRender :: HasPlan c_acZs => Lens' c_acZs (Callback (JSVal -> IO JSVal))
- Glazier.React.Widgets.List: plan :: HasPlan c_acNJ => Lens' c_acNJ Plan
+ Glazier.React.Widgets.List: plan :: HasPlan c_acZs => Lens' c_acZs Plan
- Glazier.React.Widgets.List: type Widget k itemWidget = Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan
+ Glazier.React.Widgets.List: type Widget k itemWidget = Widget (Command k itemWidget) (Action k itemWidget) (Outline k itemWidget) (Model k 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: widget :: (IsWidget itemWidget, Ord k) => ReactMlT Identity () -> itemWidget -> Widget k itemWidget

Files

README.md view
@@ -22,18 +22,14 @@     ( Command(..)     , Action(..)     , AsAction(..)+    , Design(..)+    , HasDesign(..)     , Plan(..)     , HasPlan(..)-    , mkPlan-    , Model(..)-    , HasModel(..)-    , Design-    , Frame-    , SuperModel+    , Outline+    , Model     , Widget     , widget-    , window-    , gadget     ) where ``` This provides a consistent way to interact and use every widget.@@ -99,20 +95,60 @@  This action is generated by the [`componentDidUpdate`](https://facebook.github.io/react/docs/react-component.html#componentdidupdate) event listener. This event is usually used to generate the `DisposeCommand` to dispose callbacks from removed widgets. -## Model-This contains the pure data for state processing logic and rendering (the nouns).+## Design+This contains the template for pure data for state processing logic (the nouns). ```haskell-data Model = Model-    { _key :: J.JSString-    , _componentRef :: J.JSVal-    , _frameNum :: Int-    , _deferredCommands :: D.DList (Command key itemWidget)+data Design = Design+    { _blah :: Foo     }-makeClassy ''Model+makeClassy ''Design+type Model = Design+type Outline = Design+instance R.ToOutline Model Outline where outline = id++mkModel :: Outline -> F (R.Maker Action) Model+mkModel = pure ```-`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).+`Design`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+If the `Design` contains child widgets, then it should have use a type parameter and `DesignType` to allow specializations of `Model` and `Outline`+```haskell+data Design t = Design+    { _input :: R.DesignType t W.Input.Widget+    , _todos :: R.DesignType t (W.List.Widget TodosKey TD.Todo.Widget)+    , _footer :: R.DesignType t TD.Footer.Widget+    }++type Model = Design R.WithGizmo+type Outline = Design R.WithOutline+instance R.ToOutline Model Outline where+    outline (Design a b c) = Design (R.outline a) (R.outline b) (R.outline c)++mkModel :: R.ReactMlT Identity () -> Outline -> F (R.Maker Action) Model+mkModel separator (Design a b c) = Design+    <$> (R.hoistWithAction InputAction (R.mkGizmo' W.Input.widget a))+    <*> (R.hoistWithAction TodosAction (R.mkGizmo' (W.List.widget separator TD.Todo.widget) b))+    <*> (R.hoistWithAction FooterAction (R.mkGizmo' TD.Footer.widget c))+```++## 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).++```haskell+data Plan = Plan+    { _component :: R.ReactComponent+    , _key :: J.JSString+    , _frameNum :: Int+    , _componentRef :: J.JSVal+    , _deferredDisposables :: D.DList CD.SomeDisposable+    , _onRender :: J.Callback (J.JSVal -> IO J.JSVal)+    , _onComponentRef :: J.Callback (J.JSVal -> IO ())+    , _onComponentDidUpdate :: J.Callback (J.JSVal -> IO ())   makeClassy ''Plan+```+`Plan`s should have [`makeClassy`](https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-TH.html#v:makeClassy) generated to allow consistent usage of lens to access `Model` and `Plan` fields.++Some common `Plan` fields are+ ### key ```haskell _key :: JSString@@ -137,20 +173,6 @@ ``` `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).--```haskell-data Plan = Plan-    { _component :: R.ReactComponent-    , _onRender :: J.Callback (J.JSVal -> IO J.JSVal)-    , _onComponentRef :: J.Callback (J.JSVal -> IO ())-    , _onComponentDidUpdate :: J.Callback (J.JSVal -> IO ())   makeClassy ''Plan-```-`Plan`s should have [`makeClassy`](https://hackage.haskell.org/package/lens-4.15.1/docs/Control-Lens-TH.html#v:makeClassy) generated to allow consistent usage of lens to access `Model` and `Plan` fields.--Some common `Plan` fields are- ### _component ```haskell _component :: ReactComponent@@ -183,7 +205,11 @@ ```haskell mkPlan :: Frame Model Plan -> F (Maker Action) Plan mkPlan frm = Plan-    <$> getComponent+    <$> R.getComponent+    <*> R.mkKey+    <*> pure 0+    <*> pure J.nullRef+    <*> pure mempty     <*> (mkRenderer frm $ const render)     <*> (mkHandler $ pure . pure . InputRefAction)     <*> (mkHandler $ pure . pure . ComponentRefAction)@@ -204,29 +230,23 @@ Link `Glazier.React.Model`'s genericHasPlan/HasModel with this widget's specific `HasPlan`/`HasModel` from generated from `makeClassy`  ```haskell-instance HasPlan (R.Design Model Plan) where+instance HasPlan (R.Scene Model Plan) where     plan = R.plan-instance HasModel (R.Design Model Plan) where-    model = R.model-instance HasPlan (R.SuperModel Model Plan) where-    plan = R.design . plan-instance HasModel (R.SuperModel Model Plan) where-    model = R.design . model-```--### Synonums to Design, Frame, and SuperModel-```haskell-type Design = R.Design Model Plan-type Frame = R.Frame Model Plan-type SuperModel = R.SuperModel Model Plan+instance HasDesign (R.Scene Model Plan) where+    design = R.model+instance HasPlan (R.Gizmo Model Plan) where+    plan = R.scene . plan+instance HasDesign (R.Gizmo Model Plan) where+    design = R.scene . design ```  ### Widget definitions `widget` is a record of functions of the essential functions required to make, render and interact with the widget. By convention, `mkPlan`, `window`, and `gadget` is exported, but sometimes it's convenient to have all three grouped together in a record. ```haskell type Widget = Widget Command Action Model Plan-widget :: Widget Command Action Model Plan-widget = Widget+widget :: Widget+widget = R.Widget+    mkModel     mkPlan     window     gadget
glazier-react-widget.cabal view
@@ -1,5 +1,5 @@ name:                glazier-react-widget-version:             0.4.0.0+version:             0.5.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,11 +21,11 @@                        Glazier.React.Widgets.List.Run   build-depends:       base >= 4.7 && < 5                      , containers >= 0.5 && < 0.6-                     , disposable >= 0.2.0.3 && < 1+                     , disposable >= 0.2.0.4 && < 1                      , dlist >= 0.8 && < 0.9                      , free >= 4.12 && < 5                      , glazier >= 0.10 && < 1-                     , glazier-react >= 0.4 && < 1+                     , glazier-react >= 0.5 && < 1                      , javascript-extras >= 0.2.0.2 && < 1                      , lens >= 4 && < 5                      , mmorph >= 1 && < 2@@ -34,6 +34,7 @@                      , stm >= 2.4 && < 3                      , transformers >= 0.4 && < 0.6   default-language:    Haskell2010+  default-extensions:  ApplicativeDo   ghc-options:         -Wall   if impl(ghcjs)     build-depends: ghcjs-base
src/Glazier/React/Widgets/Input.hs view
@@ -12,18 +12,14 @@     ( Command(..)     , Action(..)     , AsAction(..)+    , Schema(..)+    , HasSchema(..)     , Plan(..)     , HasPlan(..)-    , mkPlan-    , Model(..)-    , HasModel(..)-    , Design-    , Frame-    , SuperModel+    , Outline+    , Model     , Widget     , widget-    , window-    , gadget     , whenKeyDown     ) where @@ -55,15 +51,22 @@     | SubmitAction J.JSString     | InputRefAction J.JSVal -data Model = Model-    { _key :: J.JSString-    , _inputRef :: J.JSVal-    , _placeholder :: J.JSString+data Schema = Schema+    { _placeholder :: J.JSString     , _className :: J.JSString     } +type Model = Schema+type Outline = Schema+instance R.ToOutline Model Outline where outline = id++mkModel :: Outline -> F (R.Maker Action) Model+mkModel = pure+ data Plan = Plan     { _component :: R.ReactComponent+    , _key :: J.JSString+    , _inputRef :: J.JSVal     , _onRender :: J.Callback (J.JSVal -> IO J.JSVal)     , _onInputRef :: J.Callback (J.JSVal -> IO ())     , _onKeyDown :: J.Callback (J.JSVal -> IO ())@@ -71,11 +74,13 @@  makeClassyPrisms ''Action makeClassy ''Plan-makeClassy ''Model+makeClassy ''Schema  mkPlan :: R.Frame Model Plan -> F (R.Maker Action) Plan mkPlan frm = Plan     <$> R.getComponent+    <*> R.mkKey+    <*> pure J.nullRef     <*> (R.mkRenderer frm $ const render)     <*> (R.mkHandler $ pure . pure . InputRefAction)     <*> (R.mkHandler onKeyDown')@@ -85,28 +90,25 @@     disposing _ = CD.DisposeNone  -- Link Glazier.React.Model's HasPlan/HasModel with this widget's HasPlan/HasModel from makeClassy-instance HasPlan (R.Design Model Plan) where+instance HasPlan (R.Scene Model Plan) where     plan = R.plan-instance HasModel (R.Design Model Plan) where-    model = R.model-instance HasPlan (R.SuperModel Model Plan) where-    plan = R.design . plan-instance HasModel (R.SuperModel Model Plan) where-    model = R.design . model--type Design = R.Design Model Plan-type Frame = R.Frame Model Plan-type SuperModel = R.SuperModel Model Plan+instance HasSchema (R.Scene Model Plan) where+    schema = R.model+instance HasPlan (R.Gizmo Model Plan) where+    plan = R.scene . plan+instance HasSchema (R.Gizmo Model Plan) where+    schema = R.scene . schema -type Widget = R.Widget Command Action Model Plan-widget :: R.Widget Command Action Model Plan+type Widget = R.Widget Command Action Outline Model Plan+widget :: Widget widget = R.Widget+    mkModel     mkPlan     window     gadget  -- | Exposed to parent components to render this component-window :: G.WindowT (R.Design Model Plan) (R.ReactMlT Identity) ()+window :: G.WindowT (R.Scene Model Plan) (R.ReactMlT Identity) () window = do     s <- ask     lift $ R.lf (s ^. component . to JE.toJS)@@ -115,7 +117,7 @@         ]  -- | Internal rendering used by the React render callback-render :: G.WindowT (R.Design Model Plan) (R.ReactMlT Identity) ()+render :: G.WindowT (R.Scene Model Plan) (R.ReactMlT Identity) () render = do     s <- ask     lift $ R.lf (JE.strJS "input")@@ -155,7 +157,7 @@ -- The best practice is to leave this in general Monad m (eg, not MonadIO). -- This allows gadget to use STM as the base monad which allows for combining concurrently -- with other stateful STM effects and still maintain a single source of truth.-gadget :: G.GadgetT Action (R.SuperModel Model Plan) Identity (D.DList Command)+gadget :: G.GadgetT Action (R.Gizmo Model Plan) Identity (D.DList Command) gadget = do     a <- ask     case a of
src/Glazier/React/Widgets/List.hs view
@@ -9,23 +9,20 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE DuplicateRecordFields #-}  module Glazier.React.Widgets.List     ( Command(..)     , Action(..)     , AsAction(..)+    , Schema(..)+    , HasSchema(..)     , Plan(..)     , HasPlan(..)-    , mkPlan-    , Model(..)-    , HasModel(..)-    , Design-    , Frame-    , SuperModel+    , Outline+    , Model     , Widget     , widget-    , window-    , gadget     ) where  import qualified Control.Disposable as CD@@ -52,7 +49,7 @@ import qualified JavaScript.Extras as JE  data Command k itemWidget-    = RenderCommand (R.SuperModel (Model k itemWidget) Plan) [JE.Property] J.JSVal+    = RenderCommand (R.Gizmo (Model k itemWidget) Plan) [JE.Property] J.JSVal     | DisposeCommand CD.SomeDisposable     | MakerCommand (F (R.Maker (Action k itemWidget)) (Action k itemWidget))     | ItemCommand k (R.CommandOf itemWidget)@@ -63,75 +60,90 @@     | ComponentDidUpdateAction     | DestroyItemAction k     | MakeItemAction (k -> k) (k -> F (R.Maker (R.ActionOf itemWidget)) (R.ModelOf itemWidget))-    | AddItemAction k (R.SuperModelOf itemWidget)+    | AddItemAction k (R.GizmoOf itemWidget)     | ItemAction k (R.ActionOf itemWidget)-    | SetFilterAction (R.SuperModelOf itemWidget -> Bool)+    | SetFilterAction (R.OutlineOf itemWidget -> Bool) -data Model k itemWidget = Model-    { _key :: J.JSString-    , _componentRef :: J.JSVal-    , _frameNum :: Int-    , _deferredDisposables :: D.DList CD.SomeDisposable-    , _className ::J.JSString-    , _itemKey :: k-    , _itemsModel :: M.Map k (R.SuperModelOf itemWidget)-    , _itemsFilter :: R.SuperModelOf itemWidget -> Bool+data Schema k itemWidget t = Schema+    { _className :: J.JSString+    , _idx :: k+    , _items :: M.Map k (R.SchemaType t itemWidget)+    , _itemsFilter :: R.OutlineOf itemWidget -> Bool     } +type Model k itemWidget = Schema k itemWidget R.WithGizmo+type Outline k itemWidget = Schema k itemWidget R.WithOutline+instance R.IsWidget itemWidget => R.ToOutline (Model k itemWidget) (Outline k itemWidget) where+    outline (Schema a b c d) = Schema a b (R.outline <$> c) d++mkModel :: R.IsWidget itemWidget => itemWidget -> Outline k itemWidget -> F (R.Maker (Action k itemWidget)) (Model k itemWidget)+mkModel w (Schema a b c d) = Schema+    <$> pure a+    <*> pure b+    <*> M.traverseWithKey (\k i -> R.hoistWithAction (ItemAction k) (R.mkGizmo' w i)) c+    <*> pure d+ data Plan = Plan     { _component :: R.ReactComponent+    , _key :: J.JSString+    , _frameNum :: Int+    , _componentRef :: J.JSVal+    , _deferredDisposables :: D.DList CD.SomeDisposable     , _onRender ::  J.Callback (J.JSVal -> IO J.JSVal)     , _onComponentRef :: J.Callback (J.JSVal -> IO ())     , _onComponentDidUpdate :: J.Callback (J.JSVal -> IO ())     } deriving (G.Generic)  makeClassyPrisms ''Action+makeClassy ''Schema makeClassy ''Plan-makeClassy ''Model  mkPlan-    :: R.ReactMlT Identity ()-    -> G.WindowT (R.DesignOf itemWidget) (R.ReactMlT Identity) ()+    :: R.IsWidget itemWidget => R.ReactMlT Identity ()+    -> G.WindowT (R.SceneOf itemWidget) (R.ReactMlT Identity) ()     -> R.Frame (Model k itemWidget) Plan     -> F (R.Maker (Action k itemWidget)) Plan mkPlan separator itemWindow frm = Plan     <$> R.getComponent+    <*> R.mkKey+    <*> pure 0+    <*> pure J.nullRef+    <*> pure mempty     <*> (R.mkRenderer frm $ const (render separator itemWindow))     <*> (R.mkHandler $ pure . pure . ComponentRefAction)     <*> (R.mkHandler $ pure . pure . const ComponentDidUpdateAction)  instance CD.Disposing Plan-instance (CD.Disposing (R.SuperModelOf itemWidget)) =>+-- | Undecidable instances because itemWidget appears more often in the constraint+-- but this is safe because @R.GizmoOf itemWidget@ is smaller than @Model k itemWidget@+instance (CD.Disposing (R.GizmoOf itemWidget)) =>          CD.Disposing (Model k itemWidget) where-    disposing s = CD.DisposeList $ foldr ((:) . CD.disposing) [] (_itemsModel s)+    disposing s = CD.DisposeList $ foldr ((:) . CD.disposing) [] (s ^. items)  -- Link Glazier.React.Model's HasPlan/HasModel with this widget's HasPlan/HasModel from makeClassy-instance HasPlan (R.Design (Model k itemWidget) Plan) where+instance HasPlan (R.Scene (Model k itemWidget) Plan) where     plan = R.plan-instance HasModel (R.Design (Model k itemWidget) Plan) k itemWidget where-    model = R.model-instance HasPlan (R.SuperModel (Model k itemWidget) Plan) where-    plan = R.design . plan-instance HasModel (R.SuperModel (Model k itemWidget) Plan) k itemWidget where-    model = R.design . model--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+instance HasSchema (R.Scene (Model k itemWidget) Plan) k itemWidget R.WithGizmo where+    schema = R.model+instance HasPlan (R.Gizmo (Model k itemWidget) Plan) where+    plan = R.scene . plan+instance HasSchema (R.Gizmo (Model k itemWidget) Plan) k itemWidget R.WithGizmo where+    schema = R.scene . schema -type Widget k itemWidget = R.Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan+type Widget k itemWidget = R.Widget (Command k itemWidget) (Action k itemWidget) (Outline k itemWidget) (Model k itemWidget) Plan widget     :: (R.IsWidget itemWidget, Ord k)     => R.ReactMlT Identity ()     -> itemWidget-    -> R.Widget (Command k itemWidget) (Action k itemWidget) (Model k itemWidget) Plan+    -> Widget k itemWidget widget separator itemWidget = R.Widget+    (mkModel itemWidget)     (mkPlan separator (R.window itemWidget))     window-    (gadget (R.mkSuperModel itemWidget) (R.gadget itemWidget))+    (gadget (R.mkGizmo itemWidget) (R.gadget itemWidget))  -- | Exposed to parent components to render this component-window :: G.WindowT (R.Design (Model k itemWidget) Plan) (R.ReactMlT Identity) ()+window :: G.WindowT (R.Scene (Model k itemWidget) Plan) (R.ReactMlT Identity) () window = do     s <- ask     lift $ R.lf (s ^. component . to JE.toJS)@@ -143,25 +155,25 @@  -- | Internal rendering used by the React render callback render-    :: R.ReactMlT Identity ()-    -> G.WindowT (R.DesignOf itemWidget) (R.ReactMlT Identity) ()-    -> G.WindowT (R.Design (Model k itemWidget) Plan) (R.ReactMlT Identity) ()+    :: R.IsWidget itemWidget => R.ReactMlT Identity ()+    -> G.WindowT (R.SceneOf itemWidget) (R.ReactMlT Identity) ()+    -> G.WindowT (R.Scene (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+    xs <- fmap (view R.scene) . filter ((s ^. itemsFilter) . R.outline . view R.model) . fmap snd .  M.toList <$> view items     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+        let itemsWindows = (view G._WindowT itemWindow) <$> xs             separatedWindows = DL.intersperse separator itemsWindows         sequenceA_ separatedWindows  gadget     :: (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 k itemWidget) (R.SuperModel (Model k itemWidget) Plan) Identity (D.DList (Command k itemWidget))-gadget mkItemSuperModel itemGadget = do+    => (R.ModelOf itemWidget -> F (R.Maker (R.ActionOf itemWidget)) (R.GizmoOf itemWidget))+    -> G.GadgetT (R.ActionOf itemWidget) (R.GizmoOf itemWidget) Identity (D.DList (R.CommandOf itemWidget))+    -> G.GadgetT (Action k itemWidget) (R.Gizmo (Model k itemWidget) Plan) Identity (D.DList (Command k itemWidget))+gadget mkItemGizmo itemGadget = do     a <- ask     case a of         ComponentRefAction node -> do@@ -181,29 +193,29 @@         DestroyItemAction k -> do             -- queue up callbacks to be released after rerendering             ret <- runMaybeT $ do-                itemSuperModel <- MaybeT $ use (itemsModel . at k)-                deferredDisposables %= (`D.snoc` CD.disposing itemSuperModel)+                itemGizmo <- MaybeT $ use (items . at k)+                deferredDisposables %= (`D.snoc` CD.disposing itemGizmo)                 -- Remove the todo from the model-                itemsModel %= M.delete k+                items %= M.delete k                 -- on re-render the todo Shim will not get rendered and will be removed by react                 D.singleton <$> (R.basicRenderCmd frameNum componentRef RenderCommand)             maybe (pure mempty) pure ret          MakeItemAction keyMaker itemModelMaker -> do-            n <- keyMaker <$> use itemKey-            itemKey .= n+            n <- keyMaker <$> use idx+            idx .= n             pure $ D.singleton $ MakerCommand $ do-                sm <- hoistF (R.mapAction $ \act -> ItemAction n act) (-                    itemModelMaker n >>= mkItemSuperModel)+                sm <- R.hoistWithAction (ItemAction n) (+                    itemModelMaker n >>= mkItemGizmo)                 pure $ AddItemAction n sm          AddItemAction n v -> do-            itemsModel %= M.insert n v+            items %= M.insert n v             D.singleton <$> (R.basicRenderCmd frameNum componentRef RenderCommand)          ItemAction k _ -> fmap (ItemCommand k) <$>             (magnify (_ItemAction . to snd)-            (zoom (itemsModel . at k . _Just) itemGadget))+            (zoom (items . at k . _Just) itemGadget))          SetFilterAction ftr -> do             itemsFilter .= ftr