From db0c4cd24c5ad5c14fb232107f9c8b8b87cec948 Mon Sep 17 00:00:00 2001 From: eric thul Date: Thu, 24 Sep 2015 21:54:06 -0400 Subject: [PATCH] Adding type synonyms for lifecycle functions --- docs/React.md | 68 ++++++++++++++++++++- src/React.purs | 160 +++++++++++++++++++++++++++++-------------------- 2 files changed, 162 insertions(+), 66 deletions(-) diff --git a/docs/React.md b/docs/React.md index a021423..518696a 100644 --- a/docs/React.md +++ b/docs/React.md @@ -150,12 +150,76 @@ A function which handles events. type Render props state eff = ReactThis props state -> Eff (props :: ReactProps props, refs :: ReactRefs Disallowed, state :: ReactState ReadOnly state | eff) ReactElement ``` -A rendering function. +A render function. + +#### `GetInitialState` + +``` purescript +type GetInitialState props state eff = ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState Disallowed state, refs :: ReactRefs Disallowed | eff) state +``` + +A get initial state function. + +#### `ComponentWillMount` + +``` purescript +type ComponentWillMount props state eff = ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs Disallowed | eff) Unit +``` + +A component will mount function. + +#### `ComponentDidMount` + +``` purescript +type ComponentDidMount props state eff = ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit +``` + +A component did mount function. + +#### `ComponentWillReceiveProps` + +``` purescript +type ComponentWillReceiveProps props state eff = ReactThis props state -> props -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit +``` + +A component will receive props function. + +#### `ShouldComponentUpdate` + +``` purescript +type ShouldComponentUpdate props state eff = ReactThis props state -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Boolean +``` + +A should component update function. + +#### `ComponentWillUpdate` + +``` purescript +type ComponentWillUpdate props state eff = ReactThis props state -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit +``` + +A component will update function. + +#### `ComponentDidUpdate` + +``` purescript +type ComponentDidUpdate props state eff = ReactThis props state -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit +``` + +A component did update function. + +#### `ComponentWillUnmount` + +``` purescript +type ComponentWillUnmount props state eff = ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit +``` + +A component will unmount function. #### `ReactSpec` ``` purescript -type ReactSpec props state eff = { render :: Render props state eff, displayName :: String, getInitialState :: ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState Disallowed state, refs :: ReactRefs Disallowed | eff) state, componentWillMount :: ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs Disallowed | eff) Unit, componentDidMount :: ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, componentWillReceiveProps :: ReactThis props state -> props -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, shouldComponentUpdate :: ReactThis props state -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Boolean, componentWillUpdate :: ReactThis props state -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, componentDidUpdate :: ReactThis props state -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit, componentWillUnmount :: ReactThis props state -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit } +type ReactSpec props state eff = { render :: Render props state eff, displayName :: String, getInitialState :: GetInitialState props state eff, componentWillMount :: ComponentWillMount props state eff, componentDidMount :: ComponentDidMount props state eff, componentWillReceiveProps :: ComponentWillReceiveProps props state eff, shouldComponentUpdate :: ShouldComponentUpdate props state eff, componentWillUpdate :: ComponentWillUpdate props state eff, componentDidUpdate :: ComponentDidUpdate props state eff, componentWillUnmount :: ComponentWillUnmount props state eff } ``` A specification of a component. diff --git a/src/React.purs b/src/React.purs index 20add3a..a3c3841 100644 --- a/src/React.purs +++ b/src/React.purs @@ -20,6 +20,14 @@ module React , Refs() , Render() + , GetInitialState() + , ComponentWillMount() + , ComponentDidMount() + , ComponentWillReceiveProps() + , ShouldComponentUpdate() + , ComponentWillUpdate() + , ComponentDidUpdate() + , ComponentWillUnmount() , ReactSpec() , ReactClass() @@ -134,7 +142,7 @@ type EventHandlerContext eff props state result = | eff ) result --- | A rendering function. +-- | A render function. type Render props state eff = ReactThis props state -> Eff ( props :: ReactProps props @@ -143,73 +151,97 @@ type Render props state eff = | eff ) ReactElement +-- | A get initial state function. +type GetInitialState props state eff = + ReactThis props state -> + Eff ( props :: ReactProps props + , state :: ReactState Disallowed state + , refs :: ReactRefs Disallowed + | eff + ) state + +-- | A component will mount function. +type ComponentWillMount props state eff = + ReactThis props state -> + Eff ( props :: ReactProps props + , state :: ReactState ReadWrite state + , refs :: ReactRefs Disallowed + | eff + ) Unit + +-- | A component did mount function. +type ComponentDidMount props state eff = + ReactThis props state -> + Eff ( props :: ReactProps props + , state :: ReactState ReadWrite state + , refs :: ReactRefs ReadOnly + | eff + ) Unit + +-- | A component will receive props function. +type ComponentWillReceiveProps props state eff = + ReactThis props state -> + props -> + Eff ( props :: ReactProps props + , state :: ReactState ReadWrite state + , refs :: ReactRefs ReadOnly + | eff + ) Unit + +-- | A should component update function. +type ShouldComponentUpdate props state eff = + ReactThis props state -> + props -> + state -> + Eff ( props :: ReactProps props + , state :: ReactState ReadWrite state + , refs :: ReactRefs ReadOnly + | eff + ) Boolean + +-- | A component will update function. +type ComponentWillUpdate props state eff = + ReactThis props state -> + props -> + state -> + Eff ( props :: ReactProps props + , state :: ReactState ReadWrite state + , refs :: ReactRefs ReadOnly + | eff + ) Unit + +-- | A component did update function. +type ComponentDidUpdate props state eff = + ReactThis props state -> + props -> + state -> + Eff ( props :: ReactProps props + , state :: ReactState ReadOnly state + , refs :: ReactRefs ReadOnly + | eff + ) Unit + +-- | A component will unmount function. +type ComponentWillUnmount props state eff = + ReactThis props state -> + Eff ( props :: ReactProps props + , state :: ReactState ReadOnly state + , refs :: ReactRefs ReadOnly + | eff + ) Unit + -- | A specification of a component. type ReactSpec props state eff = { render :: Render props state eff , displayName :: String - , getInitialState - :: ReactThis props state -> - Eff ( props :: ReactProps props - , state :: ReactState Disallowed state - , refs :: ReactRefs Disallowed - | eff - ) state - , componentWillMount - :: ReactThis props state -> - Eff ( props :: ReactProps props - , state :: ReactState ReadWrite state - , refs :: ReactRefs Disallowed - | eff - ) Unit - , componentDidMount - :: ReactThis props state -> - Eff ( props :: ReactProps props - , state :: ReactState ReadWrite state - , refs :: ReactRefs ReadOnly - | eff - ) Unit - , componentWillReceiveProps - :: ReactThis props state -> - props -> - Eff ( props :: ReactProps props - , state :: ReactState ReadWrite state - , refs :: ReactRefs ReadOnly - | eff - ) Unit - , shouldComponentUpdate - :: ReactThis props state -> - props -> - state -> - Eff ( props :: ReactProps props - , state :: ReactState ReadWrite state - , refs :: ReactRefs ReadOnly - | eff - ) Boolean - , componentWillUpdate - :: ReactThis props state -> - props -> - state -> - Eff ( props :: ReactProps props - , state :: ReactState ReadWrite state - , refs :: ReactRefs ReadOnly - | eff - ) Unit - , componentDidUpdate - :: ReactThis props state -> - props -> - state -> - Eff ( props :: ReactProps props - , state :: ReactState ReadOnly state - , refs :: ReactRefs ReadOnly - | eff - ) Unit - , componentWillUnmount - :: ReactThis props state -> - Eff ( props :: ReactProps props - , state :: ReactState ReadOnly state - , refs :: ReactRefs ReadOnly - | eff - ) Unit + , getInitialState :: GetInitialState props state eff + , componentWillMount :: ComponentWillMount props state eff + , componentDidMount :: ComponentDidMount props state eff + , componentWillReceiveProps :: ComponentWillReceiveProps props state eff + , shouldComponentUpdate :: ShouldComponentUpdate props state eff + , componentWillUpdate :: ComponentWillUpdate props state eff + , componentDidUpdate :: ComponentDidUpdate props state eff + , componentWillUnmount :: ComponentWillUnmount props state eff } -- | Create a component specification.