From 70983f115ccd9faf868632610c7c93ca8b3d27dc Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Sat, 2 Jan 2021 09:55:12 +0100 Subject: [PATCH 1/3] Fix custom field summary table for mobile view --- modules/webapp/src/main/elm/Page/Home/View.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/webapp/src/main/elm/Page/Home/View.elm b/modules/webapp/src/main/elm/Page/Home/View.elm index 435aa293..05c7d90a 100644 --- a/modules/webapp/src/main/elm/Page/Home/View.elm +++ b/modules/webapp/src/main/elm/Page/Home/View.elm @@ -202,7 +202,7 @@ viewStats _ model = List.filter isNumField stats.fieldStats in [ div [ class "ui container" ] - [ div [ class "ui middle aligned grid" ] + [ div [ class "ui middle aligned stackable grid" ] [ div [ class "three wide center aligned column" ] [ div [ class "ui small statistic" ] [ div [ class "value" ] From ae57881f2d89b404fd928b570299ca3766960b4a Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Sat, 2 Jan 2021 10:09:05 +0100 Subject: [PATCH 2/3] Sort custom fields in views --- modules/webapp/src/main/elm/Comp/ItemCard.elm | 3 +- .../src/main/elm/Comp/SearchStatsView.elm | 90 +++++++++++++++++++ .../webapp/src/main/elm/Page/Home/View.elm | 70 +-------------- .../webapp/src/main/elm/Util/CustomField.elm | 9 +- 4 files changed, 101 insertions(+), 71 deletions(-) create mode 100644 modules/webapp/src/main/elm/Comp/SearchStatsView.elm diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index e5eb1295..ac6da75f 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -400,7 +400,8 @@ mainTagsAndFields settings item = [] else - List.map showField item.customfields + List.sortBy Util.CustomField.nameOrLabel item.customfields + |> List.map showField renderTags = if hideTags then diff --git a/modules/webapp/src/main/elm/Comp/SearchStatsView.elm b/modules/webapp/src/main/elm/Comp/SearchStatsView.elm new file mode 100644 index 00000000..3d337fa0 --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/SearchStatsView.elm @@ -0,0 +1,90 @@ +module Comp.SearchStatsView exposing + ( nameOrLabel + , sortFields + , view + ) + +import Api.Model.FieldStats exposing (FieldStats) +import Api.Model.SearchStats exposing (SearchStats) +import Data.Icons as Icons +import Data.Money +import Html exposing (..) +import Html.Attributes exposing (..) + + +nameOrLabel : FieldStats -> String +nameOrLabel f = + Maybe.withDefault f.name f.label + + +view : SearchStats -> List (Html msg) +view stats = + let + 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 (nameOrLabel f) + ] + ] + , 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 + |> sortFields + in + [ div [ class "ui container" ] + [ div [ class "ui middle aligned stackable grid" ] + [ div [ class "three wide center aligned column" ] + [ div [ class "ui small statistic" ] + [ div [ class "value" ] + [ String.fromInt stats.count |> text + ] + , div [ class "label" ] + [ text "Items" + ] + ] + ] + , div [ class "thirteen wide column" ] + [ 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) + ] + ] + ] + ] + ] + + +sortFields : List FieldStats -> List FieldStats +sortFields fields = + List.sortBy nameOrLabel fields diff --git a/modules/webapp/src/main/elm/Page/Home/View.elm b/modules/webapp/src/main/elm/Page/Home/View.elm index 05c7d90a..7ac48fa2 100644 --- a/modules/webapp/src/main/elm/Page/Home/View.elm +++ b/modules/webapp/src/main/elm/Page/Home/View.elm @@ -5,11 +5,10 @@ import Comp.FixedDropdown import Comp.ItemCardList import Comp.ItemDetail.EditMenu import Comp.SearchMenu +import Comp.SearchStatsView import Comp.YesNoDimmer import Data.Flags exposing (Flags) -import Data.Icons as Icons import Data.ItemSelection -import Data.Money import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) @@ -166,72 +165,7 @@ 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 - [ div [ class "ui container" ] - [ div [ class "ui middle aligned stackable grid" ] - [ div [ class "three wide center aligned column" ] - [ div [ class "ui small statistic" ] - [ div [ class "value" ] - [ String.fromInt stats.count |> text - ] - , div [ class "label" ] - [ text "Results" - ] - ] - ] - , div [ class "thirteen wide column" ] - [ 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) - ] - ] - ] - ] - ] + Comp.SearchStatsView.view model.searchStats viewLeftMenu : Flags -> UiSettings -> Model -> List (Html Msg) diff --git a/modules/webapp/src/main/elm/Util/CustomField.elm b/modules/webapp/src/main/elm/Util/CustomField.elm index 3006ae7e..800864cf 100644 --- a/modules/webapp/src/main/elm/Util/CustomField.elm +++ b/modules/webapp/src/main/elm/Util/CustomField.elm @@ -1,4 +1,4 @@ -module Util.CustomField exposing (renderValue) +module Util.CustomField exposing (nameOrLabel, renderValue) import Api.Model.ItemFieldValue exposing (ItemFieldValue) import Data.CustomFieldType @@ -7,6 +7,11 @@ import Html exposing (..) import Html.Attributes exposing (..) +nameOrLabel : ItemFieldValue -> String +nameOrLabel fv = + Maybe.withDefault fv.name fv.label + + renderValue : String -> ItemFieldValue -> Html msg renderValue classes cv = let @@ -19,7 +24,7 @@ renderValue classes cv = in div [ class classes ] [ Icons.customFieldTypeIconString "" cv.ftype - , Maybe.withDefault cv.name cv.label |> text + , nameOrLabel cv |> text , div [ class "detail" ] [ if Data.CustomFieldType.fromString cv.ftype == Just Data.CustomFieldType.Boolean then renderBool From 2b8ef3c2f78b90a46f2673ba814522c74f1039e8 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Sat, 2 Jan 2021 10:20:18 +0100 Subject: [PATCH 3/3] Allow to hide search stats in user settings --- .../src/main/elm/Comp/UiSettingsForm.elm | 25 +++++++++++++++++++ .../webapp/src/main/elm/Data/UiSettings.elm | 5 ++++ .../webapp/src/main/elm/Page/Home/View.elm | 12 ++++++--- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm index ec46fa32..78facfaf 100644 --- a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm +++ b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm @@ -51,6 +51,7 @@ type alias Model = , cardTitlePattern : PatternModel , cardSubtitlePattern : PatternModel , showPatternHelp : Bool + , searchStatsVisible : Bool } @@ -141,6 +142,7 @@ init flags settings = , cardTitlePattern = initPatternModel settings.cardTitleTemplate , cardSubtitlePattern = initPatternModel settings.cardSubtitleTemplate , showPatternHelp = False + , searchStatsVisible = settings.searchStatsVisible } , Api.getTags flags "" GetTagsResp ) @@ -164,6 +166,7 @@ type Msg | SetCardTitlePattern String | SetCardSubtitlePattern String | TogglePatternHelpMsg + | ToggleSearchStatsVisible @@ -415,6 +418,15 @@ update sett msg model = TogglePatternHelpMsg -> ( { model | showPatternHelp = not model.showPatternHelp }, Nothing ) + ToggleSearchStatsVisible -> + let + flag = + not model.searchStatsVisible + in + ( { model | searchStatsVisible = flag } + , Just { sett | searchStatsVisible = flag } + ) + --- View @@ -447,6 +459,19 @@ view flags _ model = "field" model.searchPageSizeModel ) + , div [ class "field" ] + [ div [ class "ui checkbox" ] + [ input + [ type_ "checkbox" + , onCheck (\_ -> ToggleSearchStatsVisible) + , checked model.searchStatsVisible + ] + [] + , label [] + [ text "Show basic search statistics by default" + ] + ] + ] , div [ class "ui dividing header" ] [ text "Item Cards" ] diff --git a/modules/webapp/src/main/elm/Data/UiSettings.elm b/modules/webapp/src/main/elm/Data/UiSettings.elm index 2db6b41b..d8125507 100644 --- a/modules/webapp/src/main/elm/Data/UiSettings.elm +++ b/modules/webapp/src/main/elm/Data/UiSettings.elm @@ -52,6 +52,7 @@ type alias StoredUiSettings = , cardPreviewSize : Maybe String , cardTitleTemplate : Maybe String , cardSubtitleTemplate : Maybe String + , searchStatsVisible : Bool } @@ -78,6 +79,7 @@ type alias UiSettings = , cardPreviewSize : BasicSize , cardTitleTemplate : ItemPattern , cardSubtitleTemplate : ItemPattern + , searchStatsVisible : Bool } @@ -144,6 +146,7 @@ defaults = { template = Data.ItemTemplate.dateLong , pattern = "{{dateLong}}" } + , searchStatsVisible = True } @@ -189,6 +192,7 @@ merge given fallback = , cardSubtitleTemplate = Maybe.andThen readPattern given.cardSubtitleTemplate |> Maybe.withDefault fallback.cardSubtitleTemplate + , searchStatsVisible = given.searchStatsVisible } @@ -221,6 +225,7 @@ toStoredUiSettings settings = |> Just , cardTitleTemplate = settings.cardTitleTemplate.pattern |> Just , cardSubtitleTemplate = settings.cardSubtitleTemplate.pattern |> Just + , searchStatsVisible = settings.searchStatsVisible } diff --git a/modules/webapp/src/main/elm/Page/Home/View.elm b/modules/webapp/src/main/elm/Page/Home/View.elm index 7ac48fa2..76ee94c0 100644 --- a/modules/webapp/src/main/elm/Page/Home/View.elm +++ b/modules/webapp/src/main/elm/Page/Home/View.elm @@ -124,7 +124,7 @@ view flags settings model = _ -> [] - , viewStats flags model + , viewStats flags settings model , [ Html.map ItemCardListMsg (Comp.ItemCardList.view itemViewCfg settings model.itemListModel) ] @@ -163,9 +163,13 @@ view flags settings model = ] -viewStats : Flags -> Model -> List (Html Msg) -viewStats _ model = - Comp.SearchStatsView.view model.searchStats +viewStats : Flags -> UiSettings -> Model -> List (Html Msg) +viewStats _ settings model = + if settings.searchStatsVisible then + Comp.SearchStatsView.view model.searchStats + + else + [] viewLeftMenu : Flags -> UiSettings -> Model -> List (Html Msg)