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 =
{ tagSelectModel = Comp.TagSelect.init [] []
{ tagSelectModel = Comp.TagSelect.init [] [] [] []
, tagSelection = Comp.TagSelect.emptySelection
, directionModel =
Comp.Dropdown.makeSingleList
@ -483,7 +483,9 @@ updateDrop ddm flags settings msg model =
GetAllTagsResp (Ok stats) ->
let
tagSel =
Comp.TagSelect.modifyAll stats.tagCloud.items model.tagSelectModel
Comp.TagSelect.modifyAll stats.tagCloud.items
stats.tagCategoryCloud.items
model.tagSelectModel
in
{ model = { model | tagSelectModel = tagSel }
, cmd = Cmd.none
@ -500,9 +502,14 @@ updateDrop ddm flags settings msg model =
GetStatsResp (Ok stats) ->
let
selectModel =
tagCount =
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

View File

@ -1,6 +1,5 @@
module Comp.TagSelect exposing
( Category
, Model
( Model
, Msg
, Selection
, WorkModel
@ -18,6 +17,7 @@ module Comp.TagSelect exposing
, viewTagsDrop2
)
import Api.Model.NameCount exposing (NameCount)
import Api.Model.Tag exposing (Tag)
import Api.Model.TagCount exposing (TagCount)
import Data.Icons as I
@ -38,9 +38,9 @@ import Util.Maybe
type alias Model =
{ availableTags : Dict String TagCount
, availableCats : Dict String Category
, availableCats : Dict String NameCount
, tagCounts : List TagCount
, categoryCounts : List Category
, categoryCounts : List NameCount
, filterTerm : Maybe String
, expandedTags : Bool
, expandedCats : Bool
@ -48,23 +48,16 @@ type alias Model =
}
type alias Category =
{ name : String
, count : Int
}
init : List TagCount -> List TagCount -> Model
init allTags tags =
init : List TagCount -> List NameCount -> List TagCount -> List NameCount -> Model
init allTags allCats tags cats =
{ availableTags =
List.map (\e -> ( e.tag.id, e )) allTags
|> Dict.fromList
, availableCats = sumCategories allTags
, availableCats =
List.map (\e -> ( e.name, e )) allCats
|> Dict.fromList
, tagCounts = tags
, categoryCounts =
sumCategories tags
|> Dict.toList
|> List.map Tuple.second
, categoryCounts = cats
, filterTerm = Nothing
, expandedTags = False
, expandedCats = False
@ -72,24 +65,23 @@ init allTags tags =
}
modifyAll : List TagCount -> Model -> Model
modifyAll allTags model =
modifyAll : List TagCount -> List NameCount -> Model -> Model
modifyAll allTags allCats model =
{ model
| availableTags =
List.map (\e -> ( e.tag.id, e )) allTags
|> Dict.fromList
, availableCats = sumCategories allTags
, availableCats =
List.map (\e -> ( e.name, e )) allCats
|> Dict.fromList
}
modifyCount : Model -> List TagCount -> Model
modifyCount model tags =
modifyCount : Model -> List TagCount -> List NameCount -> Model
modifyCount model tags cats =
{ model
| tagCounts = tags
, categoryCounts =
sumCategories tags
|> Dict.toList
|> List.map Tuple.second
, categoryCounts = cats
}
@ -108,34 +100,11 @@ 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 =
{ includeTags : List TagCount
, excludeTags : List TagCount
, includeCats : List Category
, excludeCats : List Category
, includeCats : List NameCount
, excludeCats : List NameCount
}
@ -145,7 +114,7 @@ emptySelection =
type alias WorkModel =
{ filteredCats : List Category
{ filteredCats : List NameCount
, filteredTags : List TagCount
, selectedTags : Dict String Bool
, selectedCats : Dict String Bool
@ -166,7 +135,7 @@ orderTagCountStable model tagCounts =
List.sortBy order tagCounts
orderCatCountStable : Model -> List Category -> List Category
orderCatCountStable : Model -> List NameCount -> List NameCount
orderCatCountStable model catCounts =
let
order cat =
@ -193,7 +162,7 @@ removeEmptyTagCounts sel 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 =
let
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 =
let
state =