From 5bd57d8fa3ddff0622bc61ee401b08ee12e1f9b1 Mon Sep 17 00:00:00 2001 From: Maciej Rapacz Date: Thu, 28 Dec 2017 18:03:46 +0100 Subject: [PATCH] enhancement(elm): Introduce time subscriptions for progress bar (#208) --- aion/web/elm/src/App.elm | 2 ++ aion/web/elm/src/Msgs.elm | 2 +- aion/web/elm/src/Room/Constants.elm | 10 -------- aion/web/elm/src/Room/Subscriptions.elm | 16 ++++++++++++ aion/web/elm/src/Update.elm | 33 +++++++++---------------- 5 files changed, 30 insertions(+), 33 deletions(-) create mode 100644 aion/web/elm/src/Room/Subscriptions.elm diff --git a/aion/web/elm/src/App.elm b/aion/web/elm/src/App.elm index 7604d86..0f9a5a2 100644 --- a/aion/web/elm/src/App.elm +++ b/aion/web/elm/src/App.elm @@ -8,6 +8,7 @@ import Navigation exposing (Location, modifyUrl) import Panel.Api exposing (fetchCategories) import Phoenix.Socket import Room.Api exposing (fetchRooms) +import Room.Subscriptions import Routing import Update exposing (setHomeUrl, update) import User.Api exposing (fetchCurrentUser) @@ -43,6 +44,7 @@ subscriptions model = [ Phoenix.Socket.listen model.socket Msgs.PhoenixMsg , Navbar.subscriptions model.navbarState NavbarMsg , Sub.map Msgs.MultiselectMsg <| Multiselect.subscriptions model.panelData.categoryMultiSelect + , Room.Subscriptions.subscriptions model ] diff --git a/aion/web/elm/src/Msgs.elm b/aion/web/elm/src/Msgs.elm index fd66e78..a31e6fa 100644 --- a/aion/web/elm/src/Msgs.elm +++ b/aion/web/elm/src/Msgs.elm @@ -60,7 +60,7 @@ type Msg | ReceiveUserList Encode.Value | ReceiveQuestionSummary Encode.Value | LeaveRoom - | Tick + | Tick Time | OnTime Time | OnInitialTime Time | OnRankingCategoryChange String diff --git a/aion/web/elm/src/Room/Constants.elm b/aion/web/elm/src/Room/Constants.elm index 5416051..a84d900 100644 --- a/aion/web/elm/src/Room/Constants.elm +++ b/aion/web/elm/src/Room/Constants.elm @@ -31,13 +31,3 @@ answerInputFieldId = progressBarTimeout : Float progressBarTimeout = 10000 - - -progressBarTicks : Float -progressBarTicks = - 1000 - - -progressBarDelay : Float -progressBarDelay = - progressBarTimeout / progressBarTicks diff --git a/aion/web/elm/src/Room/Subscriptions.elm b/aion/web/elm/src/Room/Subscriptions.elm new file mode 100644 index 0000000..f6ce13d --- /dev/null +++ b/aion/web/elm/src/Room/Subscriptions.elm @@ -0,0 +1,16 @@ +module Room.Subscriptions exposing (..) + +import General.Models exposing (Model) +import Msgs +import Room.Models exposing (RoomState(QuestionBreak, QuestionDisplayed)) +import Time + + +subscriptions : Model -> Sub Msgs.Msg +subscriptions model = + case model.roomState of + QuestionDisplayed -> + Time.every (20 * Time.millisecond) Msgs.Tick + + QuestionBreak -> + Sub.none diff --git a/aion/web/elm/src/Update.elm b/aion/web/elm/src/Update.elm index d6b2f49..c1b9f81 100644 --- a/aion/web/elm/src/Update.elm +++ b/aion/web/elm/src/Update.elm @@ -3,7 +3,6 @@ module Update exposing (..) import Auth.Api exposing (registerUser, submitCredentials) import Auth.Models exposing (Token, UnauthenticatedViewToggle(LoginView, RegisterView)) import Auth.Notifications exposing (loginErrorToast, registrationErrorToast) -import Delay import Dom exposing (focus) import Forms import General.Constants exposing (loginFormMsg, registerFormMsg) @@ -20,7 +19,7 @@ import Ports exposing (check) import Ranking.Api exposing (fetchRanking) import RemoteData import Room.Api exposing (fetchRooms) -import Room.Constants exposing (answerInputFieldId, enterKeyCode, progressBarDelay, progressBarTimeout) +import Room.Constants exposing (answerInputFieldId, enterKeyCode, progressBarTimeout) import Room.Decoders exposing (answerFeedbackDecoder, questionDecoder, questionSummaryDecoder, userJoinedInfoDecoder, userLeftDecoder, userListMessageDecoder) import Room.Models exposing (Event(MkQuestionSummaryLog, MkUserJoinedLog, MkUserLeftLog), EventLog, ProgressBarState(Running, Stopped, Uninitialized), RoomState(QuestionBreak, QuestionDisplayed), asLogIn, withProgress, withRunning, withStart) import Room.Notifications exposing (..) @@ -529,7 +528,7 @@ update msg model = | roomState = QuestionDisplayed , progressBar = model.progressBar |> withProgress 0 |> withRunning Uninitialized |> withStart 0 } - ! [ Delay.after progressBarDelay millisecond Tick ] + ! [] ReceiveQuestionBreak raw -> { model @@ -709,20 +708,16 @@ update msg model = ! [] |> roomFormValidationErrorToast - Tick -> - let - cmd = - case model.progressBar.running of - Uninitialized -> - [ Task.perform OnInitialTime Time.now ] + Tick time -> + case model.progressBar.running of + Uninitialized -> + update (OnInitialTime time) model - Running -> - [ Task.perform OnTime Time.now ] + Running -> + update (OnTime time) model - Stopped -> - [] - in - model ! cmd + Stopped -> + model ! [] OnInitialTime time -> update @@ -743,13 +738,7 @@ update msg model = _ -> model.progressBar in - (progressBar |> asProgressBarIn model) - ! case progressBar.running of - Running -> - [ Delay.after progressBarDelay millisecond Tick ] - - _ -> - [] + (progressBar |> asProgressBarIn model) ! [] MultiselectMsg subMsg -> let