From 46b784cc33145088fc939ed4810dfceb78ab3ed1 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Sat, 1 Aug 2020 00:14:33 +0200 Subject: [PATCH] Simplify search bar and menu The option "contents" has been removed from the search bar. This field is not intended to be used alone, but rather in conjunction with other fields. Otherwise it may be really slow on large databases. The "name" option has been removed from the search menu. This doesn't provide anything better over the "Names" field, that search more fields, including item names. --- .../webapp/src/main/elm/Comp/SearchMenu.elm | 57 +++++++------------ modules/webapp/src/main/elm/Data/Icons.elm | 12 ++++ .../webapp/src/main/elm/Page/Home/Data.elm | 36 ++++++++---- 3 files changed, 57 insertions(+), 48 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index b3411b28..10f6843d 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -599,24 +599,6 @@ view flags settings model = ] ] ] - , div - [ classList - [ ( "field", True ) - , ( "invisible hidden", not flags.config.fullTextSearchEnabled ) - ] - ] - [ label [] [ text "Content Search" ] - , input - [ type_ "text" - , onInput SetFulltext - , Util.Html.onKeyUpCode KeyUpMsg - , model.fulltextModel |> Maybe.withDefault "" |> value - ] - [] - , span [ class "small-info" ] - [ text "Fulltext search in document contents." - ] - ] , formHeaderHelp nameIcon "Names" ToggleNameHelp , span [ classList @@ -632,7 +614,7 @@ view flags settings model = , text " to start searching." ] , div [ class "field" ] - [ label [] [ text "All Names" ] + [ label [] [ text "Names" ] , input [ type_ "text" , onInput SetAllName @@ -649,24 +631,6 @@ view flags settings model = [ text "Looks in correspondents, concerned entities, item name and notes." ] ] - , div [ class "field" ] - [ label [] [ text "Name" ] - , input - [ type_ "text" - , onInput SetName - , Util.Html.onKeyUpCode KeyUpMsg - , model.nameModel |> Maybe.withDefault "" |> value - ] - [] - , span - [ classList - [ ( "small-info", True ) - , ( "invisible hidden", not model.showNameHelp ) - ] - ] - [ text "Looks in item name only." - ] - ] , formHeader (Icons.folderIcon "") "Folder" , div [ class "field" ] [ label [] [ text "Folder" ] @@ -681,6 +645,25 @@ view flags settings model = [ label [] [ text "Exclude (or)" ] , Html.map TagExcMsg (Comp.Dropdown.view settings model.tagExclModel) ] + , formHeader (Icons.searchIcon "") "Content" + , div + [ classList + [ ( "field", True ) + , ( "invisible hidden", not flags.config.fullTextSearchEnabled ) + ] + ] + [ label [] [ text "Content Search" ] + , input + [ type_ "text" + , onInput SetFulltext + , Util.Html.onKeyUpCode KeyUpMsg + , model.fulltextModel |> Maybe.withDefault "" |> value + ] + [] + , span [ class "small-info" ] + [ text "Fulltext search in document contents and notes." + ] + ] , formHeader (Icons.correspondentIcon "") (case getDirection model of Just Data.Direction.Incoming -> diff --git a/modules/webapp/src/main/elm/Data/Icons.elm b/modules/webapp/src/main/elm/Data/Icons.elm index 86999931..72c78be0 100644 --- a/modules/webapp/src/main/elm/Data/Icons.elm +++ b/modules/webapp/src/main/elm/Data/Icons.elm @@ -21,6 +21,8 @@ module Data.Icons exposing , organizationIcon , person , personIcon + , search + , searchIcon , tag , tagIcon , tags @@ -31,6 +33,16 @@ import Html exposing (Html, i) import Html.Attributes exposing (class) +search : String +search = + "search icon" + + +searchIcon : String -> Html msg +searchIcon classes = + i [ class (search ++ " " ++ classes) ] [] + + folder : String folder = "folder outline icon" diff --git a/modules/webapp/src/main/elm/Page/Home/Data.elm b/modules/webapp/src/main/elm/Page/Home/Data.elm index ad60e3db..b49ddc02 100644 --- a/modules/webapp/src/main/elm/Page/Home/Data.elm +++ b/modules/webapp/src/main/elm/Page/Home/Data.elm @@ -13,6 +13,7 @@ module Page.Home.Data exposing import Api import Api.Model.ItemLightList exposing (ItemLightList) +import Api.Model.ItemSearch import Comp.FixedDropdown import Comp.ItemCardList import Comp.SearchMenu @@ -45,7 +46,7 @@ init flags = let searchTypeOptions = if flags.config.fullTextSearchEnabled then - [ BasicSearch, ContentSearch, ContentOnlySearch ] + [ BasicSearch, ContentOnlySearch ] else [ BasicSearch ] @@ -70,7 +71,7 @@ init flags = defaultSearchType : Flags -> SearchType defaultSearchType flags = if flags.config.fullTextSearchEnabled then - ContentSearch + ContentOnlySearch else BasicSearch @@ -103,7 +104,7 @@ searchTypeString : SearchType -> String searchTypeString st = case st of BasicSearch -> - "All Names" + "Names" ContentSearch -> "Contents" @@ -133,15 +134,19 @@ itemNav id model = doSearchCmd : Flags -> UiSettings -> Int -> Model -> Cmd Msg doSearchCmd flags settings offset model = - case model.searchType of - BasicSearch -> - doSearchDefaultCmd flags settings offset model + if model.menuCollapsed then + case model.searchType of + BasicSearch -> + doSearchDefaultCmd flags settings offset model - ContentSearch -> - doSearchDefaultCmd flags settings offset model + ContentSearch -> + doSearchDefaultCmd flags settings offset model - ContentOnlySearch -> - doSearchIndexCmd flags settings offset model + ContentOnlySearch -> + doSearchIndexCmd flags settings offset model + + else + doSearchDefaultCmd flags settings offset model doSearchDefaultCmd : Flags -> UiSettings -> Int -> Model -> Cmd Msg @@ -181,7 +186,16 @@ doSearchIndexCmd flags settings offset model = Api.itemIndexSearch flags mask ItemSearchAddResp Nothing -> - Cmd.none + -- If there is no fulltext query, render simply the most + -- current ones + let + emptyMask = + Api.Model.ItemSearch.empty + + mask = + { emptyMask | limit = settings.itemSearchPageSize } + in + Api.itemSearch flags mask ItemSearchResp resultsBelowLimit : UiSettings -> Model -> Bool