Quellcode durchsuchen

Add card sorting

Cadel Watson vor 4 Monaten
Ursprung
Commit
a869a6334d
1 geänderte Dateien mit 54 neuen und 3 gelöschten Zeilen
  1. 54 3
      src/Main.elm

+ 54 - 3
src/Main.elm

@@ -54,6 +54,12 @@ type FocusStat
     | FocusIWD
 
 
+type SortOrder
+    = SortOrderDefault
+    | SortOrderRarity
+    | SortOrderName
+
+
 type alias ToolboxAccordion =
     { cmc : Bool, signals : Bool, signalsDelta : Bool, deckList : Bool }
 
@@ -89,6 +95,7 @@ type alias CardExplorerModel =
     , highlighted : Maybe CardData
     , flipHighlighted : Bool
     , performanceDistributions : CardPerformanceDistributions
+    , sortOrder : SortOrder
     }
 
 
@@ -126,6 +133,7 @@ type Msg
     | Highlight String
     | FlipHighlightedCard
     | SetFocusStat FocusStat
+    | SetSortOrder SortOrder
     | SetDeckProgress DeckProgress
     | ToggleCMCChart
     | ToggleSignalsChart
@@ -174,6 +182,7 @@ openCardExplorer initFlags database =
         , performanceDistributions = calculatePerformanceDistributions (Database.getAll database)
         , highlighted = Nothing
         , flipHighlighted = False
+        , sortOrder = SortOrderDefault
         }
     , Cmd.none
     )
@@ -285,6 +294,9 @@ update msg model =
                 SetFocusStat stat ->
                     ( Ready { mdl | focusStat = stat }, Cmd.none )
 
+                SetSortOrder _ ->
+                    ( Ready mdl, Cmd.none )
+
                 SetDeckProgress progress ->
                     ( Ready { mdl | deckProgress = progress }, Cmd.none )
 
@@ -348,6 +360,9 @@ update msg model =
                     , Cmd.none
                     )
 
+                SetSortOrder sortOrder ->
+                    ( CardExplorer { mdl | sortOrder = sortOrder }, Cmd.none )
+
                 _ ->
                     ( CardExplorer mdl, Cmd.none )
 
@@ -753,9 +768,28 @@ viewDraft model =
         ]
 
 
+getCardSortFn : SortOrder -> (CardData -> String)
+getCardSortFn sortOrder =
+    case sortOrder of
+        SortOrderDefault ->
+            \c -> c.details.name
+
+        SortOrderRarity ->
+            \c -> c.details.name
+
+        -- todo
+        SortOrderName ->
+            \c -> c.details.name
+
+
 viewAllCards : CardExplorerModel -> Html Msg
 viewAllCards model =
     let
+        allCards : List CardData
+        allCards =
+            Database.getAll model.database
+                |> List.sortBy (getCardSortFn model.sortOrder)
+
         viewCard : CardData -> ( String, Html Msg )
         viewCard card =
             ( card.details.name
@@ -768,11 +802,28 @@ viewAllCards model =
                 [ img [ src card.details.imageUrl, alt card.details.name ] []
                 ]
             )
+
+        viewSortOrderButton name sortOrder =
+            button
+                [ onClick (SetSortOrder sortOrder)
+                , classList
+                    [ ( "rounded text-white font-medium p-2 shadow mr-2 mb-2", True )
+                    , ( "bg-slate-300 text-slate-900 shadow-inset", model.sortOrder == sortOrder )
+                    , ( "bg-slate-900", model.sortOrder /= sortOrder )
+                    ]
+                ]
+                [ text name
+                ]
     in
     div [ class "col-span-10 shadow-xl bg-slate-600 p-6 h-full overflow-y-scroll" ]
-        -- Making this a keyed node forces Elm to recreate each card when the card name changes,
-        -- so the old image doesn't hang around during loading of the new card image
-        [ div [ class "flex flex-col space-between col-span-8 " ]
+        [ div []
+            [ viewSortOrderButton "Sort: default" SortOrderDefault
+            , viewSortOrderButton "Sort: rarity" SortOrderRarity
+            , viewSortOrderButton "Sort: name" SortOrderName
+            ]
+        , -- Making this a keyed node forces Elm to recreate each card when the card name changes,
+          -- so the old image doesn't hang around during loading of the new card image
+          div [ class "flex flex-col space-between col-span-8 " ]
             [ Keyed.node "div"
                 [ class "flex-grow grid grid-cols-8 auto-rows-min gap-6 p-6" ]
                 (List.map viewCard (Database.getAll model.database))