From dfc9ecf7789fadd0379b206585d0686d760ff5f7 Mon Sep 17 00:00:00 2001 From: Michael Trotter Date: Wed, 21 Mar 2018 12:13:59 -0600 Subject: [PATCH] Require state to be a record Fixes #19 --- examples/component/src/Container.purs | 8 +++----- generated-docs/React/Basic.md | 2 +- src/React/Basic.purs | 16 ++++++++-------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/examples/component/src/Container.purs b/examples/component/src/Container.purs index 05f3d92..4e64ba6 100644 --- a/examples/component/src/Container.purs +++ b/examples/component/src/Container.purs @@ -2,16 +2,14 @@ module Container where import Prelude -import React.Basic (ReactComponent, createElement, react) +import React.Basic (ReactComponent, createElement, stateless) import React.Basic.DOM as R import ToggleButton as ToggleButton component :: ReactComponent Unit -component = react +component = stateless { displayName: "Container" - , initialState: unit - , receiveProps: \_ _ _ -> pure unit - , render: \_ _ setState -> + , render: \_ -> R.div { children: [ createElement ToggleButton.component { on: true } , createElement ToggleButton.component { on: false } ] diff --git a/generated-docs/React/Basic.md b/generated-docs/React/Basic.md index 60b5495..8a71233 100644 --- a/generated-docs/React/Basic.md +++ b/generated-docs/React/Basic.md @@ -3,7 +3,7 @@ #### `react` ``` purescript -react :: forall props state fx. { displayName :: String, initialState :: state, receiveProps :: props -> state -> (SetState state fx) -> Eff (react :: ReactFX | fx) Unit, render :: props -> state -> (SetState state fx) -> JSX } -> ReactComponent props +react :: forall props state fx. { displayName :: String, initialState :: { | state }, receiveProps :: props -> { | state } -> (SetState state fx) -> Eff (react :: ReactFX | fx) Unit, render :: props -> { | state } -> (SetState state fx) -> JSX } -> ReactComponent props ``` Create a React component from a _specification_ of that component. diff --git a/src/React/Basic.purs b/src/React/Basic.purs index d914210..81f9ea2 100644 --- a/src/React/Basic.purs +++ b/src/React/Basic.purs @@ -28,9 +28,9 @@ import React.Basic.Types as React.Basic.Types react :: forall props state fx . { displayName :: String - , initialState :: state - , receiveProps :: props -> state -> (SetState state fx) -> Eff (react :: ReactFX | fx) Unit - , render :: props -> state -> (SetState state fx) -> JSX + , initialState :: { | state } + , receiveProps :: props -> { | state } -> (SetState state fx) -> Eff (react :: ReactFX | fx) Unit + , render :: props -> { | state } -> (SetState state fx) -> JSX } -> ReactComponent props react { displayName, initialState, receiveProps, render } = @@ -54,13 +54,13 @@ stateless stateless { displayName, render } = react { displayName - , initialState: unit + , initialState: {} , receiveProps: \_ _ _ -> pure unit , render: \props _ _ -> render props } -- | SetState uses an update function to modify the current state. -type SetState state fx = (state -> state) -> Eff (react :: ReactFX | fx) Unit +type SetState state fx = ({ | state } -> { | state }) -> Eff (react :: ReactFX | fx) Unit -- | Create a `JSX` node from a React component, by providing the props. createElement @@ -94,9 +94,9 @@ fragmentKeyed = runFn2 fragmentKeyed_ foreign import component_ :: forall props state fx . { displayName :: String - , initialState :: state - , receiveProps :: EffFn3 (react :: ReactFX | fx) props state (SetState state fx) Unit - , render :: Fn3 props state (SetState state fx) JSX + , initialState :: { | state } + , receiveProps :: EffFn3 (react :: ReactFX | fx) props { | state } (SetState state fx) Unit + , render :: Fn3 props { | state } (SetState state fx) JSX } -> ReactComponent props