mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
ui: Refactor Timer into it's own module.
This commit is contained in:
@@ -41,6 +41,7 @@ import Modal
|
|||||||
import Process
|
import Process
|
||||||
import Route exposing (Route)
|
import Route exposing (Route)
|
||||||
import Task
|
import Task
|
||||||
|
import Timer exposing (Timer)
|
||||||
|
|
||||||
|
|
||||||
{-| Used to highlight current page in navbar.
|
{-| Used to highlight current page in navbar.
|
||||||
@@ -61,41 +62,12 @@ type alias Model msg =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
type Timer
|
|
||||||
= New
|
|
||||||
| Idle Int
|
|
||||||
| Timer Int
|
|
||||||
|
|
||||||
|
|
||||||
replaceTimer : Timer -> Timer
|
|
||||||
replaceTimer previous =
|
|
||||||
case previous of
|
|
||||||
New ->
|
|
||||||
Timer 0
|
|
||||||
|
|
||||||
Idle index ->
|
|
||||||
Timer (index + 1)
|
|
||||||
|
|
||||||
Timer index ->
|
|
||||||
Timer (index + 1)
|
|
||||||
|
|
||||||
|
|
||||||
cancelTimer : Timer -> Timer
|
|
||||||
cancelTimer previous =
|
|
||||||
case previous of
|
|
||||||
Timer index ->
|
|
||||||
Idle (index + 1)
|
|
||||||
|
|
||||||
_ ->
|
|
||||||
previous
|
|
||||||
|
|
||||||
|
|
||||||
init : (Msg -> msg) -> Model msg
|
init : (Msg -> msg) -> Model msg
|
||||||
init mapMsg =
|
init mapMsg =
|
||||||
{ mapMsg = mapMsg
|
{ mapMsg = mapMsg
|
||||||
, mainMenuVisible = False
|
, mainMenuVisible = False
|
||||||
, recentMenuVisible = False
|
, recentMenuVisible = False
|
||||||
, recentMenuTimer = New
|
, recentMenuTimer = Timer.empty
|
||||||
, mailboxName = ""
|
, mailboxName = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +79,7 @@ reset model =
|
|||||||
{ model
|
{ model
|
||||||
| mainMenuVisible = False
|
| mainMenuVisible = False
|
||||||
, recentMenuVisible = False
|
, recentMenuVisible = False
|
||||||
, recentMenuTimer = cancelTimer model.recentMenuTimer
|
, recentMenuTimer = Timer.cancel model.recentMenuTimer
|
||||||
, mailboxName = ""
|
, mailboxName = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,7 +140,7 @@ update msg model session =
|
|||||||
RecentMenuMouseOver ->
|
RecentMenuMouseOver ->
|
||||||
( { model
|
( { model
|
||||||
| recentMenuVisible = True
|
| recentMenuVisible = True
|
||||||
, recentMenuTimer = cancelTimer model.recentMenuTimer
|
, recentMenuTimer = Timer.cancel model.recentMenuTimer
|
||||||
}
|
}
|
||||||
, session
|
, session
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@@ -177,7 +149,7 @@ update msg model session =
|
|||||||
RecentMenuMouseOut ->
|
RecentMenuMouseOut ->
|
||||||
let
|
let
|
||||||
newTimer =
|
newTimer =
|
||||||
replaceTimer model.recentMenuTimer
|
Timer.replace model.recentMenuTimer
|
||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| recentMenuTimer = newTimer
|
| recentMenuTimer = newTimer
|
||||||
@@ -190,7 +162,7 @@ update msg model session =
|
|||||||
if timer == model.recentMenuTimer then
|
if timer == model.recentMenuTimer then
|
||||||
( { model
|
( { model
|
||||||
| recentMenuVisible = False
|
| recentMenuVisible = False
|
||||||
, recentMenuTimer = cancelTimer timer
|
, recentMenuTimer = Timer.cancel timer
|
||||||
}
|
}
|
||||||
, session
|
, session
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
|
|||||||
51
ui/src/Timer.elm
Normal file
51
ui/src/Timer.elm
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
module Timer exposing (Timer, cancel, empty, replace)
|
||||||
|
|
||||||
|
{-| Implements an identity to track an asynchronous timer.
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
type Timer
|
||||||
|
= Empty
|
||||||
|
| Idle Int
|
||||||
|
| Timer Int
|
||||||
|
|
||||||
|
|
||||||
|
empty : Timer
|
||||||
|
empty =
|
||||||
|
Empty
|
||||||
|
|
||||||
|
|
||||||
|
{-| Replaces the provided timer with a newly created one.
|
||||||
|
-}
|
||||||
|
replace : Timer -> Timer
|
||||||
|
replace previous =
|
||||||
|
case previous of
|
||||||
|
Empty ->
|
||||||
|
Timer 0
|
||||||
|
|
||||||
|
Idle index ->
|
||||||
|
Timer (next index)
|
||||||
|
|
||||||
|
Timer index ->
|
||||||
|
Timer (next index)
|
||||||
|
|
||||||
|
|
||||||
|
{-| Cancels the provided timer without creating a replacement.
|
||||||
|
-}
|
||||||
|
cancel : Timer -> Timer
|
||||||
|
cancel previous =
|
||||||
|
case previous of
|
||||||
|
Timer index ->
|
||||||
|
Idle index
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
previous
|
||||||
|
|
||||||
|
|
||||||
|
next : Int -> Int
|
||||||
|
next index =
|
||||||
|
if index > 2 ^ 30 then
|
||||||
|
0
|
||||||
|
|
||||||
|
else
|
||||||
|
index + 1
|
||||||
Reference in New Issue
Block a user