/
ErrorBoundary.purs
41 lines (38 loc) · 1 KB
/
ErrorBoundary.purs
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
module React.Basic.Hooks.ErrorBoundary
( mkErrorBoundary
) where
import Prelude
import Data.Maybe (Maybe)
import Data.Nullable (Nullable, toMaybe)
import Effect (Effect)
import Effect.Aff (Error)
import React.Basic.Hooks (JSX, ReactComponent, element)
-- | Create a React error boundary with the given name. The resulting
-- | component takes a render callback which exposes the error if one
-- | exists and an effect for dismissing the error.
mkErrorBoundary ::
String ->
Effect
( ({ error :: Maybe Error, dismissError :: Effect Unit } -> JSX) ->
JSX
)
mkErrorBoundary name = do
c <- errorBoundary_ name
pure $ element c <<< mapProps
where
mapProps render =
{ render:
\{ error, dismissError } ->
render { error: toMaybe error, dismissError }
}
foreign import errorBoundary_ ::
String ->
Effect
( ReactComponent
{ render ::
{ error :: Nullable Error
, dismissError :: Effect Unit
} ->
JSX
}
)