Skip to content

Commit fa0425b

Browse files
authored
Restore broken Components*HalogenHooks recipes (#283)
* Restore broken Components*HalogenHooks recipes * Add missing deps
1 parent 47fcee3 commit fa0425b

File tree

20 files changed

+60
-44
lines changed

20 files changed

+60
-44
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ Running a web-compatible recipe:
9999
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/CatGifsHalogenHooks/src/Main.purs)) | [CatGifsHalogenHooks](recipes/CatGifsHalogenHooks) | A Halogen port of the ["HTTP - Cat GIFs" Elm Example](https://elm-lang.org/examples/cat-gifs). |
100100
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/CatGifsReactHooks/src/Main.purs)) | [CatGifsReactHooks](recipes/CatGifsReactHooks) | A React port of the ["HTTP - Cat GIFs" Elm Example](https://elm-lang.org/examples/cat-gifs). |
101101
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ClockReactHooks/src/Main.purs)) | [ClockReactHooks](recipes/ClockReactHooks) | A React port of the ["User Interface - Clock" Elm Example](https://elm-lang.org/examples/clock). |
102+
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ComponentsHalogenHooks/src/Main.purs)) | [ComponentsHalogenHooks](recipes/ComponentsHalogenHooks) | Demonstrates how to nest one Halogen-Hooks-based component inside another and send/receive queries between the two. |
103+
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ComponentsInputHalogenHooks/src/Main.purs)) | [ComponentsInputHalogenHooks](recipes/ComponentsInputHalogenHooks) | Each time a parent re-renders, it will pass a new input value into the child, and the child will update accordingly. |
102104
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ComponentsInputReactHooks/src/Main.purs)) | [ComponentsInputReactHooks](recipes/ComponentsInputReactHooks) | Each time the parent's state updates, it will pass a new prop value into the child, and the child will update accordingly. |
105+
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ComponentsMultiTypeHalogenHooks/src/Main.purs)) | [ComponentsMultiTypeHalogenHooks](recipes/ComponentsMultiTypeHalogenHooks) | Demonstrates a component that can communicate with its children that have differing types. |
103106
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ComponentsMultiTypeReactHooks/src/Main.purs)) | [ComponentsMultiTypeReactHooks](recipes/ComponentsMultiTypeReactHooks) | Demonstrates a parent component with several children components, each with different prop types. |
104107
| | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/ComponentsReactHooks/src/Main.purs)) | [ComponentsReactHooks](recipes/ComponentsReactHooks) | Demonstrates how to nest one React Hooks-based component inside another and send props from the parent to the child component. |
105108
| :heavy_check_mark: | :heavy_check_mark: ([try](https://try.ps.ai/?github=JordanMartinez/purescript-cookbook/master/recipes/DateTimeBasicsLog/src/Main.purs)) | [DateTimeBasicsLog](recipes/DateTimeBasicsLog) | This recipe shows how to use `purescript-datetime` library to create `Time`, `Date`, and `DateTime` values and adjust/diff them. |

broken/ComponentsHalogenHooks/spago.dhall

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{ name = "ComponentsHalogenHooks"
2+
, dependencies =
3+
[ "console"
4+
, "effect"
5+
, "halogen"
6+
, "halogen-hooks"
7+
, "maybe"
8+
, "prelude"
9+
, "psci-support"
10+
, "refs"
11+
, "tuples"
12+
]
13+
, packages = ../../packages.dhall
14+
, sources = [ "recipes/ComponentsHalogenHooks/src/**/*.purs" ]
15+
}

broken/ComponentsHalogenHooks/src/Main.purs renamed to recipes/ComponentsHalogenHooks/src/Main.purs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module ComponentsHalogenHooks.Main where
33
import Prelude hiding (top)
44

55
import Data.Maybe (Maybe(..), maybe)
6-
import Data.Symbol (SProxy(..))
76
import Data.Tuple.Nested ((/\))
87
import Effect (Effect)
98
import Effect.Class (class MonadEffect)
@@ -14,18 +13,19 @@ import Halogen.Aff as HA
1413
import Halogen.HTML as HH
1514
import Halogen.HTML.Events as HE
1615
import Halogen.HTML.Properties as HP
17-
import Halogen.Hooks (Hooked, UseEffect, UseRef)
16+
import Halogen.Hooks (type (<>), Hook, UseEffect, UseRef)
1817
import Halogen.Hooks as Hooks
1918
import Halogen.VDom.Driver (runUI)
19+
import Type.Proxy (Proxy(..))
2020

2121
main :: Effect Unit
2222
main =
2323
HA.runHalogenAff do
2424
body <- HA.awaitBody
2525
void $ runUI containerComponent unit body
2626

27-
_button :: SProxy "button"
28-
_button = SProxy
27+
_button :: Proxy "button"
28+
_button = Proxy
2929

3030
containerComponent
3131
:: forall unusedQuery unusedInput unusedOutput anyMonad
@@ -37,7 +37,7 @@ containerComponent = Hooks.component \rec _ -> Hooks.do
3737
buttonState /\ buttonStateIdx <- Hooks.useState (Nothing :: Maybe Boolean)
3838
Hooks.pure $
3939
HH.div_
40-
[ HH.slot _button unit buttonComponent unit \_ -> Just do
40+
[ HH.slot _button unit buttonComponent unit \_ -> do
4141
Hooks.modify_ toggleCountIdx (_ + 1)
4242
, HH.p_
4343
[ HH.text ("Button has been toggled " <> show toggleCount <> " time(s)") ]
@@ -47,8 +47,8 @@ containerComponent = Hooks.component \rec _ -> Hooks.do
4747
<> (maybe "(not checked yet)" (if _ then "on" else "off") buttonState)
4848
<> ". "
4949
, HH.button
50-
[ HE.onClick \_ -> Just do
51-
mbBtnState <- Hooks.query rec.slotToken _button unit $ H.request IsOn
50+
[ HE.onClick \_ -> do
51+
mbBtnState <- Hooks.query rec.slotToken _button unit $ H.mkRequest IsOn
5252
Hooks.put buttonStateIdx mbBtnState
5353
]
5454
[ HH.text "Check now" ]
@@ -73,7 +73,7 @@ buttonComponent = Hooks.component \rec _ -> Hooks.do
7373
Hooks.pure $
7474
HH.button
7575
[ HP.title label
76-
, HE.onClick \_ -> Just do
76+
, HE.onClick \_ -> do
7777
newState <- Hooks.modify enabledIdx not
7878
Hooks.raise rec.outputToken $ Toggled newState
7979
]
@@ -82,7 +82,7 @@ buttonComponent = Hooks.component \rec _ -> Hooks.do
8282
useRenderCount
8383
:: forall m a
8484
. MonadEffect m
85-
=> Hooked m a (UseEffect (UseRef Int a)) Int
85+
=> Hook m (UseRef Int <> UseEffect <> a) Int
8686
useRenderCount = Hooks.do
8787
renders /\ rendersRef <- Hooks.useRef 1
8888
Hooks.captures {} Hooks.useTickEffect do

broken/ComponentsInputHalogenHooks/spago.dhall renamed to recipes/ComponentsInputHalogenHooks/spago.dhall

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
22
, dependencies =
33
[ "console"
44
, "effect"
5+
, "halogen"
56
, "halogen-hooks"
7+
, "maybe"
8+
, "prelude"
69
, "psci-support"
10+
, "refs"
11+
, "tuples"
712
]
813
, packages = ../../packages.dhall
914
, sources = [ "recipes/ComponentsInputHalogenHooks/src/**/*.purs" ]

broken/ComponentsInputHalogenHooks/src/Main.purs renamed to recipes/ComponentsInputHalogenHooks/src/Main.purs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ module ComponentsInputHalogenHooks.Main where
22

33
import Prelude hiding (top)
44

5-
import Data.Maybe (Maybe(..))
6-
import Data.Symbol (SProxy(..))
75
import Data.Tuple.Nested ((/\))
86
import Effect (Effect)
97
import Effect.Class (class MonadEffect, liftEffect)
@@ -12,18 +10,19 @@ import Halogen as H
1210
import Halogen.Aff as HA
1311
import Halogen.HTML as HH
1412
import Halogen.HTML.Events as HE
15-
import Halogen.Hooks (Hooked, UseEffect, UseRef)
13+
import Halogen.Hooks (type (<>), Hook, UseEffect, UseRef)
1614
import Halogen.Hooks as Hooks
1715
import Halogen.VDom.Driver (runUI)
16+
import Type.Proxy (Proxy(..))
1817

1918
main :: Effect Unit
2019
main =
2120
HA.runHalogenAff do
2221
body <- HA.awaitBody
2322
void $ runUI containerComponent unit body
2423

25-
_button :: SProxy "button"
26-
_button = SProxy
24+
_button :: Proxy "button"
25+
_button = Proxy
2726

2827
containerComponent
2928
:: forall unusedQuery unusedInput unusedOutput anyMonad
@@ -42,16 +41,16 @@ containerComponent = Hooks.component \_ _ -> Hooks.do
4241
, HH.slot _display 5 displayComponent (state * state) absurd
4342
]
4443
, HH.button
45-
[ HE.onClick \_ -> Just $ Hooks.modify_ stateIdx (_ + 1) ]
44+
[ HE.onClick \_ -> Hooks.modify_ stateIdx (_ + 1) ]
4645
[ HH.text "+1"]
4746
, HH.button
48-
[ HE.onClick \_ -> Just $ Hooks.modify_ stateIdx (_ - 1) ]
47+
[ HE.onClick \_ -> Hooks.modify_ stateIdx (_ - 1) ]
4948
[ HH.text "-1"]
5049
, HH.p_
5150
[ HH.text ("Parent has been rendered " <> show parentRenders <> " time(s)") ]
5251
]
5352

54-
_display = SProxy :: SProxy "display"
53+
_display = Proxy :: Proxy "display"
5554

5655
displayComponent
5756
:: forall unusedQuery unusedOutput anyMonad
@@ -67,7 +66,7 @@ displayComponent = Hooks.component \_ input -> Hooks.do
6766
useRenderCount
6867
:: forall m a
6968
. MonadEffect m
70-
=> Hooked m a (UseEffect (UseRef Int a)) Int
69+
=> Hook m (UseRef Int <> UseEffect <> a) Int
7170
useRenderCount = Hooks.do
7271
renders /\ rendersRef <- Hooks.useRef 1
7372
Hooks.captures {} Hooks.useTickEffect do

broken/ComponentsMultiTypeHalogenHooks/spago.dhall renamed to recipes/ComponentsMultiTypeHalogenHooks/spago.dhall

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
22
, dependencies =
33
[ "console"
44
, "effect"
5+
, "halogen"
56
, "halogen-hooks"
7+
, "maybe"
8+
, "prelude"
69
, "psci-support"
10+
, "refs"
11+
, "tuples"
712
]
813
, packages = ../../packages.dhall
914
, sources = [ "recipes/ComponentsMultiTypeHalogenHooks/src/**/*.purs" ]

broken/ComponentsMultiTypeHalogenHooks/src/Main.purs renamed to recipes/ComponentsMultiTypeHalogenHooks/src/Main.purs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module ComponentsMultiTypeHalogenHooks.Main where
33
import Prelude
44

55
import Data.Maybe (Maybe(..))
6-
import Data.Symbol (SProxy(..))
76
import Data.Tuple.Nested ((/\))
87
import Effect (Effect)
98
import Effect.Class (class MonadEffect, liftEffect)
@@ -13,18 +12,19 @@ import Halogen.Aff as HA
1312
import Halogen.HTML as HH
1413
import Halogen.HTML.Events as HE
1514
import Halogen.HTML.Properties as HP
16-
import Halogen.Hooks (Hooked, UseEffect, UseRef)
15+
import Halogen.Hooks (type (<>), Hook, UseEffect, UseRef)
1716
import Halogen.Hooks as Hooks
1817
import Halogen.VDom.Driver (runUI)
18+
import Type.Proxy (Proxy(..))
1919

2020
main :: Effect Unit
2121
main =
2222
HA.runHalogenAff do
2323
body <- HA.awaitBody
2424
void $ runUI containerComponent unit body
2525

26-
_button :: SProxy "button"
27-
_button = SProxy
26+
_button :: Proxy "button"
27+
_button = Proxy
2828

2929
containerComponent
3030
:: forall unusedQuery unusedInput unusedOutput anyMonad
@@ -34,9 +34,9 @@ containerComponent = Hooks.component \rec _ -> Hooks.do
3434
parentRenders <- useRenderCount
3535
state /\ stateIdx <- Hooks.useState { a: Nothing, b: Nothing, c: Nothing }
3636
let
37-
_a = SProxy :: SProxy "a"
38-
_b = SProxy :: SProxy "b"
39-
_c = SProxy :: SProxy "c"
37+
_a = Proxy :: Proxy "a"
38+
_b = Proxy :: Proxy "b"
39+
_c = Proxy :: Proxy "c"
4040

4141
Hooks.pure $
4242
HH.div_
@@ -63,10 +63,10 @@ containerComponent = Hooks.component \rec _ -> Hooks.do
6363
, HH.li_ [ HH.text ("Component C: " <> show state.c) ]
6464
]
6565
, HH.button
66-
[ HE.onClick \_ -> Just do
67-
a <- Hooks.query rec.slotToken _a unit (H.request IsOn)
68-
b <- Hooks.query rec.slotToken _b unit (H.request GetCount)
69-
c <- Hooks.query rec.slotToken _c unit (H.request GetValue)
66+
[ HE.onClick \_ -> do
67+
a <- Hooks.query rec.slotToken _a unit (H.mkRequest IsOn)
68+
b <- Hooks.query rec.slotToken _b unit (H.mkRequest GetCount)
69+
c <- Hooks.query rec.slotToken _c unit (H.mkRequest GetValue)
7070
Hooks.put stateIdx { a, b, c }
7171
]
7272
[ HH.text "Check states now" ]
@@ -89,7 +89,7 @@ componentA = Hooks.component \rec _ -> Hooks.do
8989
HH.div_
9090
[ HH.p_ [ HH.text "Toggle me!" ]
9191
, HH.button
92-
[ HE.onClick \_ -> Just do
92+
[ HE.onClick \_ -> do
9393
Hooks.modify_ enabledIdx not ]
9494
[ HH.text (if enabled then "On" else "Off") ]
9595
]
@@ -112,7 +112,7 @@ componentB = Hooks.component \rec _ -> Hooks.do
112112
, HH.strong_ [ HH.text (show count) ]
113113
]
114114
, HH.button
115-
[ HE.onClick \_ -> Just $ Hooks.modify_ countIdx (_ + 1) ]
115+
[ HE.onClick \_ -> Hooks.modify_ countIdx (_ + 1) ]
116116
[ HH.text ("Increment") ]
117117
]
118118

@@ -132,14 +132,14 @@ componentC = Hooks.component \rec _ -> Hooks.do
132132
[ HH.p_ [ HH.text "What do you have to say?" ]
133133
, HH.input
134134
[ HP.value state
135-
, HE.onValueInput (Just <<< Hooks.put stateIdx)
135+
, HE.onValueInput (Hooks.put stateIdx)
136136
]
137137
]
138138

139139
useRenderCount
140140
:: forall m a
141141
. MonadEffect m
142-
=> Hooked m a (UseEffect (UseRef Int a)) Int
142+
=> Hook m (UseRef Int <> UseEffect <> a) Int
143143
useRenderCount = Hooks.do
144144
renders /\ rendersRef <- Hooks.useRef 1
145145
Hooks.captures {} Hooks.useTickEffect do

0 commit comments

Comments
 (0)