Skip to content

Commit 22ee469

Browse files
authored
Show local time in Time* examples (#179)
* Fix TimeReactHooks example Partially addresses #167 * Fix TimeHalogenHooks example Partially addresses #167 * Remove unused dependencies
1 parent 8149f55 commit 22ee469

File tree

4 files changed

+28
-27
lines changed

4 files changed

+28
-27
lines changed

recipes/TimeHalogenHooks/spago.dhall

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
[ "console"
44
, "effect"
55
, "halogen-hooks"
6+
, "js-date"
67
, "interpolate"
78
, "psci-support"
89
]

recipes/TimeHalogenHooks/src/Main.purs

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

55
import Control.Monad.Rec.Class (forever)
6-
import Data.Enum (fromEnum)
6+
import Data.Int (floor)
77
import Data.Interpolate (i)
8+
import Data.JSDate as JSDate
89
import Data.Maybe (Maybe(..))
9-
import Data.Time (Time(..))
1010
import Data.Tuple.Nested ((/\))
1111
import Effect (Effect)
1212
import Effect.Aff (Milliseconds(..), error)
1313
import Effect.Aff as Aff
1414
import Effect.Aff.Class (class MonadAff)
15-
import Effect.Now (nowTime)
1615
import Halogen (liftEffect)
1716
import Halogen as H
1817
import Halogen.Aff as HA
@@ -57,10 +56,9 @@ hookComponent = Hooks.component \_ _ -> Hooks.do
5756
HH.h1_ [ HH.text $ i hour":"minute":"second ]
5857

5958
where
60-
getTime = do
61-
Time h m s _ <- liftEffect $ nowTime
62-
let
63-
hour = fromEnum h
64-
minute = fromEnum m
65-
second = fromEnum s
59+
getTime = liftEffect do
60+
now <- JSDate.now
61+
hour <- floor <$> JSDate.getHours now
62+
minute <- floor <$> JSDate.getMinutes now
63+
second <- floor <$> JSDate.getSeconds now
6664
pure { hour, minute, second }

recipes/TimeReactHooks/spago.dhall

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
{ name = "TimeReactHooks"
22
, dependencies =
33
[ "console"
4-
, "datetime"
54
, "effect"
5+
, "js-date"
66
, "js-timers"
7-
, "now"
87
, "psci-support"
98
, "react-basic-hooks"
109
]

recipes/TimeReactHooks/src/Main.purs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ module TimeReactHooks.Main where
22

33
import Prelude
44
import Data.Array (intercalate)
5-
import Data.Enum (fromEnum)
5+
import Data.Int (floor)
6+
import Data.JSDate (JSDate)
7+
import Data.JSDate as JSDate
68
import Data.Maybe (Maybe(..))
79
import Data.Newtype (class Newtype)
8-
import Data.Time (Time)
9-
import Data.Time as Time
1010
import Effect (Effect)
1111
import Effect.Exception (throw)
12-
import Effect.Now (nowTime)
1312
import Effect.Timer (clearInterval, setInterval)
1413
import React.Basic.DOM (render)
1514
import React.Basic.DOM as R
@@ -20,6 +19,9 @@ import Web.HTML (window)
2019
import Web.HTML.HTMLDocument (toNonElementParentNode)
2120
import Web.HTML.Window (document)
2221

22+
type Time
23+
= { hours :: Int, minutes :: Int, seconds :: Int }
24+
2325
main :: Effect Unit
2426
main = do
2527
container <- getElementById "root" =<< map toNonElementParentNode (document =<< window)
@@ -31,22 +33,16 @@ main = do
3133

3234
mkTime :: Component {}
3335
mkTime = do
34-
now <- nowTime
36+
now <- JSDate.now >>= getTime
3537
component "Time" \_ -> React.do
36-
currentTime <- useCurrentTime now
37-
let
38-
hour = fromEnum (Time.hour currentTime)
39-
40-
minute = fromEnum (Time.minute currentTime)
41-
42-
second = fromEnum (Time.second currentTime)
38+
{ hours, minutes, seconds } <- useCurrentTime now
4339
pure
4440
$ R.h1_
4541
[ R.text
4642
$ intercalate ":"
47-
[ show hour
48-
, show minute
49-
, show second
43+
[ show hours
44+
, show minutes
45+
, show seconds
5046
]
5147
]
5248

@@ -60,6 +56,13 @@ useCurrentTime initialTime =
6056
coerceHook React.do
6157
currentTime /\ setCurrentTime <- useState' initialTime
6258
useEffectOnce do
63-
intervalId <- setInterval 1000 (nowTime >>= setCurrentTime)
59+
intervalId <- setInterval 1000 (JSDate.now >>= getTime >>= setCurrentTime)
6460
pure (clearInterval intervalId)
6561
pure currentTime
62+
63+
getTime :: JSDate -> Effect Time
64+
getTime date = ado
65+
hours <- floor <$> JSDate.getHours date
66+
minutes <- floor <$> JSDate.getMinutes date
67+
seconds <- floor <$> JSDate.getSeconds date
68+
in { hours, minutes, seconds }

0 commit comments

Comments
 (0)