Show custom field summary above results

This commit is contained in:
Eike Kettner 2020-12-16 21:34:53 +01:00
parent b66738b4c3
commit 8d7b3c7d74
4 changed files with 91 additions and 19 deletions

View File

@ -45,7 +45,7 @@ concat l0 l1 =
suff = suff =
List.drop 1 l1.groups List.drop 1 l1.groups
in in
ItemLightList (prev ++ [ ng ] ++ suff) ItemLightList (prev ++ (ng :: suff))
else else
ItemLightList (l0.groups ++ l1.groups) ItemLightList (l0.groups ++ l1.groups)

View File

@ -53,6 +53,7 @@ type alias Model =
, lastSearchType : SearchType , lastSearchType : SearchType
, dragDropData : DD.DragDropData , dragDropData : DD.DragDropData
, scrollToCard : Maybe String , scrollToCard : Maybe String
, searchStats : SearchStats
} }
@ -117,6 +118,7 @@ init flags viewMode =
DD.DragDropData DD.init Nothing DD.DragDropData DD.init Nothing
, scrollToCard = Nothing , scrollToCard = Nothing
, viewMode = viewMode , viewMode = viewMode
, searchStats = Api.Model.SearchStats.empty
} }

View File

@ -554,8 +554,11 @@ update mId key flags settings msg model =
let let
lm = lm =
SearchMenuMsg (Comp.SearchMenu.GetStatsResp result) SearchMenuMsg (Comp.SearchMenu.GetStatsResp result)
stats =
Result.withDefault model.searchStats result
in in
update mId key flags settings lm model update mId key flags settings lm { model | searchStats = stats }

View File

@ -7,7 +7,9 @@ import Comp.ItemDetail.EditMenu
import Comp.SearchMenu import Comp.SearchMenu
import Comp.YesNoDimmer import Comp.YesNoDimmer
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.Icons as Icons
import Data.ItemSelection import Data.ItemSelection
import Data.Money
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
import Html.Attributes exposing (..) import Html.Attributes exposing (..)
@ -110,20 +112,25 @@ view flags settings model =
, ( "item-card-list", True ) , ( "item-card-list", True )
] ]
] ]
[ viewBar flags model (List.concat
, case model.viewMode of [ viewBar flags model
SelectView svm -> , case model.viewMode of
Html.map DeleteSelectedConfirmMsg SelectView svm ->
(Comp.YesNoDimmer.view2 (selectAction == DeleteSelected) [ Html.map DeleteSelectedConfirmMsg
deleteAllDimmer (Comp.YesNoDimmer.view2 (selectAction == DeleteSelected)
svm.deleteAllConfirm deleteAllDimmer
) svm.deleteAllConfirm
)
]
_ -> _ ->
span [ class "invisible" ] [] []
, Html.map ItemCardListMsg , viewStats flags model
(Comp.ItemCardList.view itemViewCfg settings model.itemListModel) , [ Html.map ItemCardListMsg
] (Comp.ItemCardList.view itemViewCfg settings model.itemListModel)
]
]
)
, div , div
[ classList [ classList
[ ( "sixteen wide column", True ) [ ( "sixteen wide column", True )
@ -157,6 +164,66 @@ view flags settings model =
] ]
viewStats : Flags -> Model -> List (Html Msg)
viewStats _ model =
let
stats =
model.searchStats
isNumField f =
f.sum > 0
statValues f =
tr [ class "center aligned" ]
[ td [ class "left aligned" ]
[ div [ class "ui basic label" ]
[ Icons.customFieldTypeIconString "" f.ftype
, text (Maybe.withDefault f.name f.label)
]
]
, td []
[ f.count |> String.fromInt |> text
]
, td []
[ f.sum |> Data.Money.format |> text
]
, td []
[ f.avg |> Data.Money.format |> text
]
, td []
[ f.min |> Data.Money.format |> text
]
, td []
[ f.max |> Data.Money.format |> text
]
]
fields =
List.filter isNumField stats.fieldStats
in
if List.isEmpty fields then
[]
else
[ div [ class "ui container" ]
[ table [ class "ui very basic tiny six column table" ]
[ thead []
[ tr [ class "center aligned" ]
[ th [] []
, th [] [ text "Count" ]
, th [] [ text "Sum" ]
, th [] [ text "Avg" ]
, th [] [ text "Min" ]
, th [] [ text "Max" ]
]
]
, tbody []
(List.map statValues fields)
]
]
]
viewLeftMenu : Flags -> UiSettings -> Model -> List (Html Msg) viewLeftMenu : Flags -> UiSettings -> Model -> List (Html Msg)
viewLeftMenu flags settings model = viewLeftMenu flags settings model =
let let
@ -206,17 +273,17 @@ viewLeftMenu flags settings model =
searchMenu searchMenu
viewBar : Flags -> Model -> Html Msg viewBar : Flags -> Model -> List (Html Msg)
viewBar flags model = viewBar flags model =
case model.viewMode of case model.viewMode of
SimpleView -> SimpleView ->
viewSearchBar flags model [ viewSearchBar flags model ]
SearchView -> SearchView ->
div [ class "hidden invisible" ] [] []
SelectView svm -> SelectView svm ->
viewActionBar flags svm model [ viewActionBar flags svm model ]
viewActionBar : Flags -> SelectViewModel -> Model -> Html Msg viewActionBar : Flags -> SelectViewModel -> Model -> Html Msg