Create UI module for common components
Create UI.elm to house components like `button`, which is a simple HTML button with `focus:outline-none` applied as a `class`, which is an accessibility feature that I don't need for this touch-screen application. I like this pattern more than my more opinionated patterns for UI modules in Elm where I'd define all of the arguments as a record type (i.e. kwargs).
This commit is contained in:
parent
106457de4b
commit
0a15ea7366
2 changed files with 26 additions and 16 deletions
|
@ -7,6 +7,7 @@ import Html.Events exposing (..)
|
|||
import Set
|
||||
import State
|
||||
import Time exposing (Weekday(..))
|
||||
import UI
|
||||
|
||||
|
||||
morning : List State.Habit
|
||||
|
@ -154,7 +155,7 @@ render { today, visibleDayOfWeek, completed } =
|
|||
div [ class "text-center w-full bg-blue-600 text-white fixed top-0 left-0 px-3 py-4" ]
|
||||
[ p [ class "py-2 inline pr-5" ]
|
||||
[ text "As you are not viewing today's habits, the UI is in read-only mode" ]
|
||||
, button
|
||||
, UI.button
|
||||
[ class "bg-blue-200 px-4 py-2 rounded text-blue-600 text-xs font-bold"
|
||||
, onClick State.ViewToday
|
||||
]
|
||||
|
@ -164,40 +165,40 @@ render { today, visibleDayOfWeek, completed } =
|
|||
else
|
||||
text ""
|
||||
, div [ class "flex center" ]
|
||||
[ button
|
||||
[ UI.button
|
||||
[ class "w-1/4 text-gray-500"
|
||||
, onClick State.ViewPrevious
|
||||
]
|
||||
[ text "‹ previous" ]
|
||||
, h1 [ class "font-bold text-gray-500 text-3xl text-center w-full" ]
|
||||
[ text (weekdayName weekday) ]
|
||||
, button
|
||||
, UI.button
|
||||
[ class "w-1/4 text-gray-500"
|
||||
, onClick State.ViewNext
|
||||
]
|
||||
[ text "next ›" ]
|
||||
]
|
||||
]
|
||||
, ul []
|
||||
, ul [ class "pt-6" ]
|
||||
(weekday
|
||||
|> habitsFor
|
||||
|> List.indexedMap
|
||||
(\i x ->
|
||||
li [ class "text-xl list-disc ml-6" ]
|
||||
[ button
|
||||
[ class "py-5 px-3"
|
||||
, tailwind
|
||||
[ ( "line-through", today == visibleDayOfWeek && Set.member i completed )
|
||||
[ if today == visibleDayOfWeek then
|
||||
UI.button
|
||||
[ class "py-5 px-3"
|
||||
, tailwind [ ( "line-through", Set.member i completed ) ]
|
||||
, onClick (State.ToggleHabit i)
|
||||
]
|
||||
, onClick
|
||||
(if today /= visibleDayOfWeek then
|
||||
State.DoNothing
|
||||
[ text x ]
|
||||
|
||||
else
|
||||
State.ToggleHabit i
|
||||
)
|
||||
]
|
||||
[ text x ]
|
||||
else
|
||||
UI.button
|
||||
[ class "py-5 px-3 cursor-not-allowed"
|
||||
, onClick State.DoNothing
|
||||
]
|
||||
[ text x ]
|
||||
]
|
||||
)
|
||||
)
|
||||
|
|
9
scratch/habit-screens/client/src/UI.elm
Normal file
9
scratch/habit-screens/client/src/UI.elm
Normal file
|
@ -0,0 +1,9 @@
|
|||
module UI exposing (..)
|
||||
|
||||
import Html exposing (..)
|
||||
import Html.Attributes exposing (..)
|
||||
|
||||
|
||||
button : List (Attribute msg) -> List (Html msg) -> Html msg
|
||||
button attrs children =
|
||||
Html.button ([ class "focus:outline-none" ] ++ attrs) children
|
Loading…
Reference in a new issue