Search by tag category via web ui

This commit is contained in:
Eike Kettner 2020-08-06 22:23:35 +02:00
parent 070c2b5e5f
commit a6a6e334d5
3 changed files with 69 additions and 4 deletions

View File

@ -41,6 +41,8 @@ import Util.Update
type alias Model =
{ tagInclModel : Comp.Dropdown.Model Tag
, tagExclModel : Comp.Dropdown.Model Tag
, tagCatInclModel : Comp.Dropdown.Model String
, tagCatExclModel : Comp.Dropdown.Model String
, directionModel : Comp.Dropdown.Model Direction
, orgModel : Comp.Dropdown.Model IdName
, corrPersonModel : Comp.Dropdown.Model IdName
@ -68,6 +70,8 @@ init : Model
init =
{ tagInclModel = Util.Tag.makeDropdownModel
, tagExclModel = Util.Tag.makeDropdownModel
, tagCatInclModel = Util.Tag.makeCatDropdownModel
, tagCatExclModel = Util.Tag.makeCatDropdownModel
, directionModel =
Comp.Dropdown.makeSingleList
{ makeOption =
@ -157,6 +161,8 @@ type Msg
| ToggleNameHelp
| FolderMsg (Comp.Dropdown.Msg IdName)
| GetFolderResp (Result Http.Error FolderList)
| TagCatIncMsg (Comp.Dropdown.Msg String)
| TagCatExcMsg (Comp.Dropdown.Msg String)
getDirection : Model -> Maybe Direction
@ -211,6 +217,8 @@ getItemSearch model =
model.allNameModel
|> Maybe.map amendWildcards
, fullText = model.fulltextModel
, tagCategoriesInclude = Comp.Dropdown.getSelected model.tagCatInclModel
, tagCategoriesExclude = Comp.Dropdown.getSelected model.tagCatExclModel
}
@ -280,11 +288,17 @@ update flags settings msg model =
let
tagList =
Comp.Dropdown.SetOptions tags.items
catList =
Util.Tag.getCategories tags.items
|> Comp.Dropdown.SetOptions
in
noChange <|
Util.Update.andThen1
[ update flags settings (TagIncMsg tagList) >> .modelCmd
, update flags settings (TagExcMsg tagList) >> .modelCmd
, update flags settings (TagCatIncMsg catList) >> .modelCmd
, update flags settings (TagCatExcMsg catList) >> .modelCmd
]
model
@ -551,6 +565,28 @@ update flags settings msg model =
)
(isDropdownChangeMsg lm)
TagCatIncMsg m ->
let
( m2, c2 ) =
Comp.Dropdown.update m model.tagCatInclModel
in
NextState
( { model | tagCatInclModel = m2 }
, Cmd.map TagCatIncMsg c2
)
(isDropdownChangeMsg m)
TagCatExcMsg m ->
let
( m2, c2 ) =
Comp.Dropdown.update m model.tagCatExclModel
in
NextState
( { model | tagCatExclModel = m2 }
, Cmd.map TagCatExcMsg c2
)
(isDropdownChangeMsg m)
-- View
@ -645,6 +681,14 @@ view flags settings model =
[ label [] [ text "Exclude (or)" ]
, Html.map TagExcMsg (Comp.Dropdown.view settings model.tagExclModel)
]
, div [ class "field" ]
[ label [] [ text "Category Include (and)" ]
, Html.map TagCatIncMsg (Comp.Dropdown.view settings model.tagCatInclModel)
]
, div [ class "field" ]
[ label [] [ text "Category Exclude (or)" ]
, Html.map TagCatExcMsg (Comp.Dropdown.view settings model.tagCatExclModel)
]
, formHeader (Icons.searchIcon "") "Content"
, div
[ classList

View File

@ -18,7 +18,7 @@ import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onCheck)
import Http
import Util.List
import Util.Tag
type alias Model =
@ -148,8 +148,7 @@ update sett msg model =
GetTagsResp (Ok tl) ->
let
categories =
List.filterMap .category tl.items
|> Util.List.distinct
Util.Tag.getCategories tl.items
in
( { model
| tagColorModel =

View File

@ -1,8 +1,13 @@
module Util.Tag exposing (makeDropdownModel)
module Util.Tag exposing
( getCategories
, makeCatDropdownModel
, makeDropdownModel
)
import Api.Model.Tag exposing (Tag)
import Comp.Dropdown
import Data.UiSettings
import Util.List
makeDropdownModel : Comp.Dropdown.Model Tag
@ -17,3 +22,20 @@ makeDropdownModel =
"basic " ++ Data.UiSettings.tagColorString tag settings
, placeholder = "Choose a tag"
}
makeCatDropdownModel : Comp.Dropdown.Model String
makeCatDropdownModel =
Comp.Dropdown.makeModel
{ multiple = True
, searchable = \n -> n > 5
, makeOption = \cat -> { value = cat, text = cat, additional = "" }
, labelColor = \_ -> \_ -> ""
, placeholder = "Choose a tag category"
}
getCategories : List Tag -> List String
getCategories tags =
List.filterMap .category tags
|> Util.List.distinct