about summary refs log tree commit diff
path: root/website/sandbox/learnpianochords/src/Practice.elm
blob: 5d87bcee501e2e06cda8c09582b754a283429d02 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
            }
        ]