Move tailwind function into Utils module

Instead of accepting `List (String, Int)`, accept `List Strategy` where
`Strategy` defines whether or not the string of selectors should be applied to
the element.

I'm also renaming it `class` so I can just use `Utils.class`; `tailwind` has
little to do with the function itself.
This commit is contained in:
William Carroll 2020-10-11 14:59:42 +01:00
parent 1c8a8f5d2c
commit 5684608fed
2 changed files with 63 additions and 17 deletions

View file

@ -8,6 +8,7 @@ import Set
import State
import Time exposing (Weekday(..))
import UI
import Utils exposing (Strategy(..))
morning : List State.Habit
@ -201,14 +202,6 @@ habitsFor weekday =
toHabit saturday
Sun ->
tailwind : List ( String, Bool ) -> Attribute msg
tailwind classes =
classes
|> List.filter (\( k, v ) -> v)
|> List.map (\( k, v ) -> k)
|> String.join " "
|> class
toHabit sunday
@ -220,8 +213,10 @@ render { today, visibleDayOfWeek, completed } =
Just weekday ->
div
[ class "container mx-auto py-6 px-6"
, tailwind [ ( "pt-20", today /= visibleDayOfWeek ) ]
[ Utils.class
[ Always "container mx-auto py-6 px-6"
, When (today /= visibleDayOfWeek) "pt-20"
]
]
[ header []
[ if today /= visibleDayOfWeek then
@ -256,25 +251,39 @@ render { today, visibleDayOfWeek, completed } =
(weekday
|> habitsFor
|> List.indexedMap
(\i x ->
(\i { label, minutesDuration } ->
let
isCompleted =
Set.member i completed
in
li [ class "text-xl list-disc ml-6" ]
[ if today == visibleDayOfWeek then
UI.button
[ class "py-5 px-3"
, tailwind
[ ( "line-through", Set.member i completed )
, ( "text-gray-400", Set.member i completed )
]
, onClick (State.ToggleHabit i)
]
[ text x ]
[ span
[ Utils.class
[ Always "text-white pt-1 px-2 rounded"
, If isCompleted "bg-gray-400" "bg-blue-500"
]
]
[ text (String.fromInt minutesDuration ++ " mins") ]
, p
[ Utils.class
[ Always "inline pl-3"
, When isCompleted "line-through text-gray-400"
]
]
[ text label ]
]
else
UI.button
[ class "py-5 px-3 cursor-not-allowed"
, onClick State.DoNothing
]
[ text x ]
[ text label ]
]
)
)

View file

@ -0,0 +1,37 @@
module Utils exposing (..)
import Html exposing (..)
import Html.Attributes exposing (..)
import Maybe.Extra
type Strategy
= Always String
| When Bool String
| If Bool String String
class : List Strategy -> Attribute msg
class classes =
classes
|> List.map
(\strategy ->
case strategy of
Always x ->
Just x
When True x ->
Just x
When False _ ->
Nothing
If True x _ ->
Just x
If False _ x ->
Just x
)
|> Maybe.Extra.values
|> String.join " "
|> Html.Attributes.class