1+ module AffEx where
2+
3+ import Prelude
4+
5+ import Data.Either (Either (..))
6+ import Data.Maybe (Maybe (..))
7+ import Effect.Aff (Aff , Milliseconds (..), delay , error , message , throwError )
8+ import React.Basic.DOM as R
9+ import React.Basic.Events (handler_ )
10+ import React.Basic.Hooks (CreateComponent , component , fragment , (/\))
11+ import React.Basic.Hooks as React
12+ import React.Basic.Hooks.Aff (useAff )
13+ import React.Basic.Hooks.ResetToken (useResetToken )
14+
15+ mkAffEx :: CreateComponent { }
16+ mkAffEx = do
17+ component " AffEx" \props -> React .do
18+ resetToken /\ reset <- useResetToken
19+ r1 <- useAff resetToken delayedSuccess
20+ r2 <- useAff resetToken delayedFailure
21+
22+ pure $ fragment
23+ [ R .button
24+ { onClick: handler_ reset
25+ , children: [ R .text " Reset" ]
26+ }
27+ , showResult 1 r1
28+ , showResult 2 r2
29+ ]
30+ where
31+ showResult n r =
32+ R .div_
33+ [ R .text $ " Request " <> show n <> " : " <> case r of
34+ Nothing -> " loading..."
35+ Just (Left err) -> message err
36+ Just (Right msg) -> msg
37+ ]
38+
39+ delayedSuccess :: Aff String
40+ delayedSuccess = do
41+ delay $ Milliseconds 1000.0
42+ pure " Success!"
43+
44+ delayedFailure :: Aff String
45+ delayedFailure = do
46+ delay $ Milliseconds 2000.0
47+ throwError $ error " Failure!"
0 commit comments