Render time remaining in UI

Show the number of minutes remaining before completing all of the tasks.
This commit is contained in:
William Carroll 2020-10-11 15:17:20 +01:00
parent 5684608fed
commit 79cf42abd5

View file

@ -4,7 +4,7 @@ import Browser
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
import Html.Events exposing (..) import Html.Events exposing (..)
import Set import Set exposing (Set)
import State import State
import Time exposing (Weekday(..)) import Time exposing (Weekday(..))
import UI import UI
@ -205,6 +205,20 @@ habitsFor weekday =
toHabit sunday toHabit sunday
timeRemaining : Set Int -> List State.Habit -> Int
timeRemaining completed habits =
habits
|> List.indexedMap
(\i { minutesDuration } ->
if Set.member i completed then
0
else
minutesDuration
)
|> List.sum
render : State.Model -> Html State.Msg render : State.Model -> Html State.Msg
render { today, visibleDayOfWeek, completed } = render { today, visibleDayOfWeek, completed } =
case visibleDayOfWeek of case visibleDayOfWeek of
@ -247,7 +261,29 @@ render { today, visibleDayOfWeek, completed } =
[ text "next " ] [ text "next " ]
] ]
] ]
, ul [ class "pt-6" ] , if today == visibleDayOfWeek then
p [ class "text-center" ]
[ let
t =
timeRemaining completed (habitsFor weekday)
in
if t == 0 then
text "Nothing to do!"
else
text
((weekday
|> habitsFor
|> timeRemaining completed
|> String.fromInt
)
++ " minutes remaining"
)
]
else
text ""
, ul []
(weekday (weekday
|> habitsFor |> habitsFor
|> List.indexedMap |> List.indexedMap