glazier-react-widget 0.3.0.0 → 0.3.0.1
raw patch · 2 files changed
+30/−30 lines, 2 filesdep ~disposablePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: disposable
API changes (from Hackage documentation)
- Glazier.React.Widgets.Input: _Action :: AsAction r_aq5M => Prism' r_aq5M Action
+ Glazier.React.Widgets.Input: _Action :: AsAction r_aq5A => Prism' r_aq5A Action
- Glazier.React.Widgets.Input: _InputRefAction :: AsAction r_aq5M => Prism' r_aq5M JSVal
+ Glazier.React.Widgets.Input: _InputRefAction :: AsAction r_aq5A => Prism' r_aq5A JSVal
- Glazier.React.Widgets.Input: _SendCommandsAction :: AsAction r_aq5M => Prism' r_aq5M [Command]
+ Glazier.React.Widgets.Input: _SendCommandsAction :: AsAction r_aq5A => Prism' r_aq5A [Command]
- Glazier.React.Widgets.Input: _SubmitAction :: AsAction r_aq5M => Prism' r_aq5M JSString
+ Glazier.React.Widgets.Input: _SubmitAction :: AsAction r_aq5A => Prism' r_aq5A JSString
- Glazier.React.Widgets.Input: class AsAction r_aq5M where _SendCommandsAction = (.) _Action _SendCommandsAction _SubmitAction = (.) _Action _SubmitAction _InputRefAction = (.) _Action _InputRefAction
+ Glazier.React.Widgets.Input: class AsAction r_aq5A where _SendCommandsAction = (.) _Action _SendCommandsAction _SubmitAction = (.) _Action _SubmitAction _InputRefAction = (.) _Action _InputRefAction
- Glazier.React.Widgets.Input: class HasModel c_aqe0 where className = (.) model className inputRef = (.) model inputRef placeholder = (.) model placeholder uid = (.) model uid
+ 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 HasPlan c_aq9Y where component = (.) plan component onInputRef = (.) plan onInputRef onKeyDown = (.) plan onKeyDown onRender = (.) plan onRender
+ 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: className :: HasModel c_aqe0 => Lens' c_aqe0 JSString
+ Glazier.React.Widgets.Input: className :: HasModel c_aqdO => Lens' c_aqdO JSString
- Glazier.React.Widgets.Input: component :: HasPlan c_aq9Y => Lens' c_aq9Y ReactComponent
+ Glazier.React.Widgets.Input: component :: HasPlan c_aq9M => Lens' c_aq9M ReactComponent
- Glazier.React.Widgets.Input: inputRef :: HasModel c_aqe0 => Lens' c_aqe0 JSVal
+ Glazier.React.Widgets.Input: inputRef :: HasModel c_aqdO => Lens' c_aqdO JSVal
- Glazier.React.Widgets.Input: model :: HasModel c_aqe0 => Lens' c_aqe0 Model
+ Glazier.React.Widgets.Input: model :: HasModel c_aqdO => Lens' c_aqdO Model
- Glazier.React.Widgets.Input: onInputRef :: HasPlan c_aq9Y => Lens' c_aq9Y (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.Input: onInputRef :: HasPlan c_aq9M => Lens' c_aq9M (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.Input: onKeyDown :: HasPlan c_aq9Y => Lens' c_aq9Y (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.Input: onKeyDown :: HasPlan c_aq9M => Lens' c_aq9M (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.Input: onRender :: HasPlan c_aq9Y => Lens' c_aq9Y (Callback (JSVal -> IO JSVal))
+ Glazier.React.Widgets.Input: onRender :: HasPlan c_aq9M => Lens' c_aq9M (Callback (JSVal -> IO JSVal))
- Glazier.React.Widgets.Input: placeholder :: HasModel c_aqe0 => Lens' c_aqe0 JSString
+ Glazier.React.Widgets.Input: placeholder :: HasModel c_aqdO => Lens' c_aqdO JSString
- Glazier.React.Widgets.Input: plan :: HasPlan c_aq9Y => Lens' c_aq9Y Plan
+ Glazier.React.Widgets.Input: plan :: HasPlan c_aq9M => Lens' c_aq9M Plan
- Glazier.React.Widgets.Input: uid :: HasModel c_aqe0 => Lens' c_aqe0 JSString
+ Glazier.React.Widgets.Input: uid :: HasModel c_aqdO => Lens' c_aqdO JSString
- Glazier.React.Widgets.List: _Action :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 (Action key_agXR itemWidget_agXS)
+ Glazier.React.Widgets.List: _Action :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (Action key_agYQ itemWidget_agYR)
- Glazier.React.Widgets.List: _AddItemAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 (key_agXR, SuperModelOf itemWidget_agXS)
+ Glazier.React.Widgets.List: _AddItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (key_agYQ, SuperModelOf itemWidget_agYR)
- Glazier.React.Widgets.List: _ComponentDidUpdateAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 ()
+ Glazier.React.Widgets.List: _ComponentDidUpdateAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 ()
- Glazier.React.Widgets.List: _ComponentRefAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 JSVal
+ Glazier.React.Widgets.List: _ComponentRefAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 JSVal
- Glazier.React.Widgets.List: _DestroyItemAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 key_agXR
+ Glazier.React.Widgets.List: _DestroyItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 key_agYQ
- Glazier.React.Widgets.List: _ItemAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 (key_agXR, ActionOf itemWidget_agXS)
+ Glazier.React.Widgets.List: _ItemAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (key_agYQ, ActionOf itemWidget_agYR)
- Glazier.React.Widgets.List: _MakeItemAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 (key_agXR -> key_agXR, key_agXR -> F (Maker (ActionOf itemWidget_agXS)) (ModelOf itemWidget_agXS))
+ 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: _RenderAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 ()
+ Glazier.React.Widgets.List: _RenderAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 ()
- Glazier.React.Widgets.List: _SetFilterAction :: AsAction r_ahp7 key_agXR itemWidget_agXS => Prism' r_ahp7 (SuperModelOf itemWidget_agXS -> Bool)
+ Glazier.React.Widgets.List: _SetFilterAction :: AsAction r_ahq6 key_agYQ itemWidget_agYR => Prism' r_ahq6 (SuperModelOf itemWidget_agYR -> Bool)
- Glazier.React.Widgets.List: class AsAction r_ahp7 key_agXR itemWidget_agXS | r_ahp7 -> key_agXR itemWidget_agXS 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_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 HasModel c_ahMw key_agXh itemWidget_agXi | c_ahMw -> key_agXh itemWidget_agXi 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_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 HasPlan c_ahIh where component = (.) plan component onComponentDidUpdate = (.) plan onComponentDidUpdate onComponentRef = (.) plan onComponentRef onRender = (.) plan onRender
+ 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: className :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw JSString
+ Glazier.React.Widgets.List: className :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv JSString
- Glazier.React.Widgets.List: component :: HasPlan c_ahIh => Lens' c_ahIh ReactComponent
+ Glazier.React.Widgets.List: component :: HasPlan c_ahJg => Lens' c_ahJg ReactComponent
- Glazier.React.Widgets.List: componentRef :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw JSVal
+ Glazier.React.Widgets.List: componentRef :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv JSVal
- Glazier.React.Widgets.List: deferredCommands :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw (DList (Command key_agXh itemWidget_agXi))
+ 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: frameNum :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw Int
+ Glazier.React.Widgets.List: frameNum :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv Int
- Glazier.React.Widgets.List: itemKey :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw key_agXh
+ Glazier.React.Widgets.List: itemKey :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv key_agYg
- Glazier.React.Widgets.List: itemsFilter :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw (SuperModelOf itemWidget_agXi -> Bool)
+ Glazier.React.Widgets.List: itemsFilter :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv (SuperModelOf itemWidget_agYh -> Bool)
- Glazier.React.Widgets.List: itemsModel :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw (Map key_agXh (SuperModelOf itemWidget_agXi))
+ 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: model :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw (Model key_agXh itemWidget_agXi)
+ Glazier.React.Widgets.List: model :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv (Model key_agYg itemWidget_agYh)
- Glazier.React.Widgets.List: onComponentDidUpdate :: HasPlan c_ahIh => Lens' c_ahIh (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.List: onComponentDidUpdate :: HasPlan c_ahJg => Lens' c_ahJg (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.List: onComponentRef :: HasPlan c_ahIh => Lens' c_ahIh (Callback (JSVal -> IO ()))
+ Glazier.React.Widgets.List: onComponentRef :: HasPlan c_ahJg => Lens' c_ahJg (Callback (JSVal -> IO ()))
- Glazier.React.Widgets.List: onRender :: HasPlan c_ahIh => Lens' c_ahIh (Callback (JSVal -> IO JSVal))
+ Glazier.React.Widgets.List: onRender :: HasPlan c_ahJg => Lens' c_ahJg (Callback (JSVal -> IO JSVal))
- Glazier.React.Widgets.List: plan :: HasPlan c_ahIh => Lens' c_ahIh Plan
+ Glazier.React.Widgets.List: plan :: HasPlan c_ahJg => Lens' c_ahJg Plan
- Glazier.React.Widgets.List: uid :: HasModel c_ahMw key_agXh itemWidget_agXi => Lens' c_ahMw JSString
+ Glazier.React.Widgets.List: uid :: HasModel c_ahNv key_agYg itemWidget_agYh => Lens' c_ahNv JSString
Files
- README.md +27/−27
- glazier-react-widget.cabal +3/−3
README.md view
@@ -17,7 +17,7 @@ ## Exports All widgets should export at the minimum the following:-```+```haskell module Glazier.React.Widgets.Input ( Command(..) , Action(..)@@ -42,7 +42,7 @@ ## Command `Command`s are the result of the `Gadget` stateful processing of `Action`. It is a pure value that is interpreted effectfully.-```+```haskell data Command = RenderCommand (SuperModel Model Plan) [Property] JSVal | DisposeCommand SomeDisposable@@ -51,26 +51,26 @@ Some common commands are: ### RenderCommand-```+```haskell RenderCommand (SuperModel Model Plan) [Property] JSVal ``` This is send by `Gadget` when the re-rendering is required. It contains the`SuperModel` of the widget (to swap the latest `Design` into the `Frame`), the new React component state as a list of properties (usually just a sequence number), and the javascript reference to the javascript component. ### DisposeCommand-```+```haskell DisposeCommand SomeDisposable ``` This contains the list of callbacks to dispose after the next render frame (after [`componentDidUpdate`](https://facebook.github.io/react/docs/react-component.html#componentdidupdate) is called. ### MakerCommand-```+```haskell MakerCommand (F (Maker Action) Action) ``` This is the command to run the `Maker` instruction in the `Maker` interpreter which results in an `Action` to dispatch back tot he gadget. ## Action This contains the events that the widget `Gadget` processes.-```+```haskell data Action = ComponentRefAction JSVal | RenderAction@@ -81,19 +81,19 @@ Some common `Action`s are: ### ComponentRefAction-```+```haskell ComponentRefAction JSVal ``` This action is generated by the [`ref`](https://facebook.github.io/react/docs/refs-and-the-dom.html) event listener and contains a javascript reference to the react component. This ref is used in the `RenderCommand`. ### RenderAction-```+```haskell RenderAction ``` You can generate this action to force a widget to return the `RenderCommand` to force a re-render. ### ComponentDidUpdateAction-```+```haskell ComponentDidUpdateAction JSVal ``` @@ -101,7 +101,7 @@ ## Model This contains the pure data for state processing logic and rendering (the nouns).-```+```haskell data Model = Model { _uid :: J.JSString , _componentRef :: J.JSVal@@ -114,25 +114,25 @@ Some common Model fields are ### uid-```+```haskell _uid :: 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. ### componentRef-```+```haskell _componentRef :: JSVal ``` `componentRef` is used to store the reference to the instance of the React shim component from the `ComponentRefAction` and used in the `RenderCommand` ### frameNum-```+```haskell _frameNum :: Int ``` `frameNum` is the sequence number used in `RenderCommand`. ### _deferredCommands-```+```haskell _deferredCommands :: DList Command ``` `deferredCommands` keep the list of commands to run at the next `ComponentDidUpdateAction`. It usually contains `DisposeCommand`.@@ -140,7 +140,7 @@ ## 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)@@ -152,25 +152,25 @@ Some common `Plan` fields are ### _component-```+```haskell _component :: ReactComponent ``` This contains the reference to the shim `React.PureComponent` class that is used to start the rendering. ### _onRender-```+```haskell _onRender :: Callback (JSVal -> IO JSVal) ``` The is the callback from the shim component's [`render`](https://facebook.github.io/react/docs/react-component.html#render) handler. It contains a javascript reference to the shim component's state, which is currently not used, but might be in the future. ### _onComponentRef-```+```haskell _onComponentRef :: Callback (JSVal -> IO ()) ``` The is the callback from the shim component's [`ref`](https://facebook.github.io/react/docs/refs-and-the-dom.html) event listener. The callback is expected to generate the `ComponentRefAction`. ### _onComponentDidUpdate-```+```haskell _onComponentDidUpdate :: Callback (JSVal -> IO ()) ``` The is the callback from the shim component's [`componentDidUpdate`](https://facebook.github.io/react/docs/react-component.html#componentdidupdate) event listener. The callback is expected to generate the `ComponentDidUpdateAction`.@@ -180,7 +180,7 @@ It contains the code to create a widget's `Plan` using the `Maker` DSL. The `Applicative` typeclass makes this easy to define.-```+```haskell mkPlan :: Frame Model Plan -> F (Maker Action) Plan mkPlan frm = Plan <$> getComponent@@ -194,7 +194,7 @@ All widgets should have implementation of the following ### Disposing Model and Plan-```+```haskell instance Disposing Plan instance Disposing Model where disposing _ = DisposeNone@@ -203,7 +203,7 @@ ### Link HasPlan and HasModel 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 plan = R.plan instance HasModel (R.Design Model Plan) where@@ -215,7 +215,7 @@ ``` ### 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@@ -223,7 +223,7 @@ ### 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@@ -238,7 +238,7 @@ ## window This is the starting rendering function to start the rendering. It always only renders the shim React component with the specific callbacks: -```+```haskell window :: WindowT (Design Model Plan) (ReactMlT Identity) () window = do s <- ask@@ -255,14 +255,14 @@ This is the inner rendering function. React will render the shim component from `window` above, and then call the `Plan`'s `onRender` callback of the shim component, which triggers this rendering function. This contains the widget specific rendering instructions.-```+```haskell render :: WindowT (Design Model Plan) (ReactMlT Identity) () ``` This a a monad transformer stack over `Identity`. This ensures only pure effects are allowed. ## gadget This contains the state update logic:-```+```haskell gadget :: G.GadgetT Action (R.SuperModel Model Plan) Identity (DList Command) ``` This a a monad transformer stack over `Identity`. This ensures only pure effects are allowed.
glazier-react-widget.cabal view
@@ -1,5 +1,5 @@ name: glazier-react-widget-version: 0.3.0.0+version: 0.3.0.1 synopsis: Generic widget library using glazier-react description: Generic widget library using glazier-react homepage: https://github.com/louispan/glazier-react-widget#readme@@ -8,7 +8,7 @@ author: Louis Pan maintainer: louis@pan.me copyright: 2017 Louis Pan-category: Web+category: Web, GUI build-type: Simple extra-source-files: README.md cabal-version: >=1.10@@ -21,7 +21,7 @@ Glazier.React.Widgets.List.Run build-depends: base >= 4.7 && < 5 , containers >= 0.5 && < 0.6- , disposable >= 0.2 && < 1+ , disposable >= 0.2.0.2 && < 1 , dlist >= 0.8 && < 0.9 , free >= 4.12 && < 5 , glazier >= 0.10 && < 1