-
Notifications
You must be signed in to change notification settings - Fork 31
/
ResetToken.purs
38 lines (30 loc) · 1.05 KB
/
ResetToken.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
module React.Basic.Hooks.ResetToken
( UseResetToken
, ResetToken
, useResetToken
) where
import Prelude
import Effect (Effect)
import Effect.Unsafe (unsafePerformEffect)
import React.Basic.Hooks (Hook, UseState, type (/\), useState, (/\))
import React.Basic.Hooks as React
import Unsafe.Coerce (unsafeCoerce)
import Unsafe.Reference (unsafeRefEq)
type UseResetToken = UseState ResetToken
-- Useful for resetting effects or component state in place of a
-- real key, i.e. a "reset" or "force rerender" button.
useResetToken :: Hook UseResetToken (ResetToken /\ (Effect Unit))
useResetToken = React.do
resetToken /\ setResetToken <- useState initialResetToken
let
reset = do
resetToken' <- createResetToken
setResetToken \_ -> resetToken'
pure (resetToken /\ reset)
foreign import data ResetToken :: Type
instance eqResetToken :: Eq ResetToken where
eq = unsafeRefEq
createResetToken :: Effect ResetToken
createResetToken = unsafeCoerce \_ -> {}
initialResetToken :: ResetToken
initialResetToken = unsafePerformEffect createResetToken