Skip to content

Commit 7d04847

Browse files
committed
Fix docs
1 parent 213d7a4 commit 7d04847

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

test/ExampleRace.purs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
module Test.ExampleRace where
2+
3+
import Prelude
4+
5+
import Control.Monad.State (get, modify, put)
6+
import Data.Array (replicate)
7+
import Data.Foldable (sequence_)
8+
import Data.Generic.Rep (class Generic)
9+
import Data.Maybe (Maybe, maybe)
10+
import Data.Show.Generic (genericShow)
11+
import Effect (Effect)
12+
import Effect.Aff (Aff, Milliseconds(..), delay)
13+
import Effect.Aff as Aff
14+
import Effect.Aff.Class (liftAff)
15+
import Effect.Class.Console (log, logShow)
16+
import Effect.Exception (throw)
17+
import Marionette.Controllers.Monadic (MarionetteT, sendMsg)
18+
import Marionette.Controllers.Monadic as Monadic
19+
import Marionette.ReactBasic (useMarionette)
20+
import React.Basic.DOM (text)
21+
import React.Basic.DOM.Client (createRoot, renderRoot)
22+
import React.Basic.DOM.Simplified.Generated as R
23+
import React.Basic.Events (handler_)
24+
import React.Basic.Hooks (Component, component, (/\))
25+
import React.Basic.Hooks as React
26+
import Web.DOM (Element)
27+
import Web.DOM.NonElementParentNode (getElementById)
28+
import Web.HTML (window)
29+
import Web.HTML.HTMLDocument (toNonElementParentNode)
30+
import Web.HTML.Window (document)
31+
32+
type State = Int
33+
34+
data Msg = Tick | User
35+
36+
control :: Msg -> MarionetteT Msg State Aff Unit
37+
control = case _ of
38+
Tick -> do
39+
log "start"
40+
( get >>= \x -> do
41+
liftAff $ delay (Milliseconds 1.0)
42+
log $ show x
43+
)
44+
# replicate 10000
45+
# sequence_
46+
47+
User -> put 100
48+
49+
mkApp :: Component {}
50+
mkApp = component "App" \_ -> React.do
51+
state /\ act <- useMarionette
52+
{ initialState: 0
53+
, controller: Monadic.mkController control
54+
}
55+
56+
pure $ R.div {}
57+
[ R.div {}
58+
[ text $ show state
59+
]
60+
, R.button { onClick: handler_ $ act Tick }
61+
[ text "tick"
62+
]
63+
, R.button { onClick: handler_ $ act User }
64+
[ text "user"
65+
]
66+
]
67+
68+
main :: Effect Unit
69+
main = do
70+
elem <- elemById "root"
71+
>>= maybe (throw "Could not find container element") pure
72+
73+
reactRoot <- createRoot elem
74+
app <- mkApp
75+
renderRoot reactRoot (app {})
76+
77+
elemById :: String -> Effect (Maybe Element)
78+
elemById id = do
79+
doc <- document =<< window
80+
getElementById id $ toNonElementParentNode doc

0 commit comments

Comments
 (0)