Use correct category count in search menu

This commit is contained in:
Eike Kettner 2021-04-11 14:19:07 +02:00
parent 3e0914ece7
commit 39ed246a42
2 changed files with 35 additions and 59 deletions

View File

@ -92,7 +92,7 @@ type TextSearchModel
init : Flags -> Model init : Flags -> Model
init flags = init flags =
{ tagSelectModel = Comp.TagSelect.init [] [] { tagSelectModel = Comp.TagSelect.init [] [] [] []
, tagSelection = Comp.TagSelect.emptySelection , tagSelection = Comp.TagSelect.emptySelection
, directionModel = , directionModel =
Comp.Dropdown.makeSingleList Comp.Dropdown.makeSingleList
@ -483,7 +483,9 @@ updateDrop ddm flags settings msg model =
GetAllTagsResp (Ok stats) -> GetAllTagsResp (Ok stats) ->
let let
tagSel = tagSel =
Comp.TagSelect.modifyAll stats.tagCloud.items model.tagSelectModel Comp.TagSelect.modifyAll stats.tagCloud.items
stats.tagCategoryCloud.items
model.tagSelectModel
in in
{ model = { model | tagSelectModel = tagSel } { model = { model | tagSelectModel = tagSel }
, cmd = Cmd.none , cmd = Cmd.none
@ -500,9 +502,14 @@ updateDrop ddm flags settings msg model =
GetStatsResp (Ok stats) -> GetStatsResp (Ok stats) ->
let let
selectModel = tagCount =
List.sortBy .count stats.tagCloud.items List.sortBy .count stats.tagCloud.items
|> Comp.TagSelect.modifyCount model.tagSelectModel
catCount =
List.sortBy .count stats.tagCategoryCloud.items
selectModel =
Comp.TagSelect.modifyCount model.tagSelectModel tagCount catCount
model_ = model_ =
{ model { model

View File

@ -1,6 +1,5 @@
module Comp.TagSelect exposing module Comp.TagSelect exposing
( Category ( Model
, Model
, Msg , Msg
, Selection , Selection
, WorkModel , WorkModel
@ -18,6 +17,7 @@ module Comp.TagSelect exposing
, viewTagsDrop2 , viewTagsDrop2
) )
import Api.Model.NameCount exposing (NameCount)
import Api.Model.Tag exposing (Tag) import Api.Model.Tag exposing (Tag)
import Api.Model.TagCount exposing (TagCount) import Api.Model.TagCount exposing (TagCount)
import Data.Icons as I import Data.Icons as I
@ -38,9 +38,9 @@ import Util.Maybe
type alias Model = type alias Model =
{ availableTags : Dict String TagCount { availableTags : Dict String TagCount
, availableCats : Dict String Category , availableCats : Dict String NameCount
, tagCounts : List TagCount , tagCounts : List TagCount
, categoryCounts : List Category , categoryCounts : List NameCount
, filterTerm : Maybe String , filterTerm : Maybe String
, expandedTags : Bool , expandedTags : Bool
, expandedCats : Bool , expandedCats : Bool
@ -48,23 +48,16 @@ type alias Model =
} }
type alias Category = init : List TagCount -> List NameCount -> List TagCount -> List NameCount -> Model
{ name : String init allTags allCats tags cats =
, count : Int
}
init : List TagCount -> List TagCount -> Model
init allTags tags =
{ availableTags = { availableTags =
List.map (\e -> ( e.tag.id, e )) allTags List.map (\e -> ( e.tag.id, e )) allTags
|> Dict.fromList |> Dict.fromList
, availableCats = sumCategories allTags , availableCats =
List.map (\e -> ( e.name, e )) allCats
|> Dict.fromList
, tagCounts = tags , tagCounts = tags
, categoryCounts = , categoryCounts = cats
sumCategories tags
|> Dict.toList
|> List.map Tuple.second
, filterTerm = Nothing , filterTerm = Nothing
, expandedTags = False , expandedTags = False
, expandedCats = False , expandedCats = False
@ -72,24 +65,23 @@ init allTags tags =
} }
modifyAll : List TagCount -> Model -> Model modifyAll : List TagCount -> List NameCount -> Model -> Model
modifyAll allTags model = modifyAll allTags allCats model =
{ model { model
| availableTags = | availableTags =
List.map (\e -> ( e.tag.id, e )) allTags List.map (\e -> ( e.tag.id, e )) allTags
|> Dict.fromList |> Dict.fromList
, availableCats = sumCategories allTags , availableCats =
List.map (\e -> ( e.name, e )) allCats
|> Dict.fromList
} }
modifyCount : Model -> List TagCount -> Model modifyCount : Model -> List TagCount -> List NameCount -> Model
modifyCount model tags = modifyCount model tags cats =
{ model { model
| tagCounts = tags | tagCounts = tags
, categoryCounts = , categoryCounts = cats
sumCategories tags
|> Dict.toList
|> List.map Tuple.second
} }
@ -108,34 +100,11 @@ toggleTag id =
ToggleTag id ToggleTag id
sumCategories : List TagCount -> Dict String Category
sumCategories tags =
let
filterCat tc =
Maybe.map (\cat -> Category cat tc.count) tc.tag.category
withCats =
List.filterMap filterCat tags
sum cat mc =
Maybe.map ((+) cat.count) mc
|> Maybe.withDefault cat.count
|> Just
sumCounts cat dict =
Dict.update cat.name (sum cat) dict
cats =
List.foldl sumCounts Dict.empty withCats
in
Dict.map (\name -> \count -> Category name count) cats
type alias Selection = type alias Selection =
{ includeTags : List TagCount { includeTags : List TagCount
, excludeTags : List TagCount , excludeTags : List TagCount
, includeCats : List Category , includeCats : List NameCount
, excludeCats : List Category , excludeCats : List NameCount
} }
@ -145,7 +114,7 @@ emptySelection =
type alias WorkModel = type alias WorkModel =
{ filteredCats : List Category { filteredCats : List NameCount
, filteredTags : List TagCount , filteredTags : List TagCount
, selectedTags : Dict String Bool , selectedTags : Dict String Bool
, selectedCats : Dict String Bool , selectedCats : Dict String Bool
@ -166,7 +135,7 @@ orderTagCountStable model tagCounts =
List.sortBy order tagCounts List.sortBy order tagCounts
orderCatCountStable : Model -> List Category -> List Category orderCatCountStable : Model -> List NameCount -> List NameCount
orderCatCountStable model catCounts = orderCatCountStable model catCounts =
let let
order cat = order cat =
@ -193,7 +162,7 @@ removeEmptyTagCounts sel tagCounts =
List.filter (\tc -> isSelected tc || tc.count > 0) tagCounts List.filter (\tc -> isSelected tc || tc.count > 0) tagCounts
removeEmptyCatCounts : Selection -> List Category -> List Category removeEmptyCatCounts : Selection -> List NameCount -> List NameCount
removeEmptyCatCounts sel catCounts = removeEmptyCatCounts sel catCounts =
let let
selected = selected =
@ -548,7 +517,7 @@ viewTagItem2 ddm settings model tag =
] ]
viewCategoryItem2 : UiSettings -> WorkModel -> Category -> Html Msg viewCategoryItem2 : UiSettings -> WorkModel -> NameCount -> Html Msg
viewCategoryItem2 settings model cat = viewCategoryItem2 settings model cat =
let let
state = state =