forked from purescript-react/purescript-react-basic
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCompat.purs
More file actions
52 lines (47 loc) · 1.76 KB
/
Compat.purs
File metadata and controls
52 lines (47 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
-- | This module is deprecated and may be removed in the next
-- | major version.
module React.Basic.Compat
( Component
, component
, stateless
, module CompatibleTypes
) where
import Prelude
import Effect (Effect)
import React.Basic (ReactComponent, StateUpdate(..), createComponent, send, toReactComponent)
import React.Basic (JSX, element, elementKeyed, empty, fragment, keyed) as CompatibleTypes
type Component = ReactComponent
-- | Supports a common subset of the v2 API to ease the upgrade process
component
:: forall props state
. { displayName :: String
, initialState :: { | state }
, receiveProps :: { props :: { | props }, state :: { | state }, setState :: ({ | state } -> { | state }) -> Effect Unit } -> Effect Unit
, render :: { props :: { | props }, state :: { | state }, setState :: ({ | state } -> { | state }) -> Effect Unit } -> CompatibleTypes.JSX
}
-> ReactComponent { | props }
component { displayName, initialState, receiveProps, render } =
toReactComponent identity (createComponent displayName)
{ initialState: initialState
, didMount: receiveProps <<< selfToLegacySelf
, didUpdate: const <<< receiveProps <<< selfToLegacySelf
, update: \self stateUpdate -> Update (stateUpdate self.state)
, render: render <<< selfToLegacySelf
}
where
selfToLegacySelf self@{ props, state } =
{ props
, state
, setState: send self
}
-- | Supports a common subset of the v2 API to ease the upgrade process
stateless
:: forall props
. { displayName :: String
, render :: { | props } -> CompatibleTypes.JSX
}
-> ReactComponent { | props }
stateless { displayName, render } =
toReactComponent identity (createComponent displayName)
{ render: \self -> render self.props
}