a059c32403
This is a temporary solution. Ideally I would like to handle this with the following: - Show the flashcard for a chord shortly after beginning a practice session - Display a small 3...2...1... countdown timer immediately after beginning a practice session I need to dig more deeply into Elm's Time module and subscriptions to better understand how to properly solve this problem. In the meantime, please tolerate this short-term solution.
61 lines
1.6 KiB
Elm
61 lines
1.6 KiB
Elm
module Practice exposing (render)
|
|
|
|
import FlashCard
|
|
import Html exposing (..)
|
|
import Html.Attributes exposing (..)
|
|
import Html.Events exposing (..)
|
|
import Icon
|
|
import Piano
|
|
import State
|
|
import Tailwind
|
|
import Theory
|
|
import UI
|
|
|
|
|
|
openPreferences : Html State.Msg
|
|
openPreferences =
|
|
button
|
|
[ class "w-48 h-48 absolute left-0 top-0 z-50"
|
|
, onClick (State.SetView State.Preferences)
|
|
]
|
|
[ Icon.cog ]
|
|
|
|
|
|
render : State.Model -> Html State.Msg
|
|
render model =
|
|
let
|
|
( handleClick, buttonText ) =
|
|
if model.isPaused then
|
|
( State.Play, "Tap to practice" )
|
|
|
|
else
|
|
( State.Pause, "" )
|
|
in
|
|
div []
|
|
[ openPreferences
|
|
, case model.selectedChord of
|
|
Just chord ->
|
|
FlashCard.render
|
|
{ chord = chord
|
|
, visible = model.showFlashCard
|
|
}
|
|
|
|
Nothing ->
|
|
-- Here I'm abusing the overlayButton component to render text
|
|
-- horizontally. I should support a UI component for this.
|
|
UI.overlayButton
|
|
{ label = "Get ready..."
|
|
, handleClick = State.DoNothing
|
|
, isVisible = True
|
|
}
|
|
, UI.overlayButton
|
|
{ label = buttonText
|
|
, handleClick = handleClick
|
|
, isVisible = model.isPaused
|
|
}
|
|
, Piano.render
|
|
{ chord = model.selectedChord
|
|
, firstNote = model.firstNote
|
|
, lastNote = model.lastNote
|
|
}
|
|
]
|