Enable power search for power users via ui settings

A different search bar is presented if enabled in ui settings that
allows to search via the new query language.
This commit is contained in:
Eike Kettner 2021-03-01 22:45:17 +01:00
parent 168f5a1a98
commit b4b5acde13
6 changed files with 102 additions and 33 deletions

View File

@ -58,6 +58,7 @@ type alias Model =
, showPatternHelp : Bool , showPatternHelp : Bool
, searchStatsVisible : Bool , searchStatsVisible : Bool
, sideMenuVisible : Bool , sideMenuVisible : Bool
, powerSearchEnabled : Bool
, openTabs : Set String , openTabs : Set String
} }
@ -151,6 +152,7 @@ init flags settings =
, showPatternHelp = False , showPatternHelp = False
, searchStatsVisible = settings.searchStatsVisible , searchStatsVisible = settings.searchStatsVisible
, sideMenuVisible = settings.sideMenuVisible , sideMenuVisible = settings.sideMenuVisible
, powerSearchEnabled = settings.powerSearchEnabled
, openTabs = Set.empty , openTabs = Set.empty
} }
, Api.getTags flags "" GetTagsResp , Api.getTags flags "" GetTagsResp
@ -178,6 +180,7 @@ type Msg
| ToggleSearchStatsVisible | ToggleSearchStatsVisible
| ToggleAkkordionTab String | ToggleAkkordionTab String
| ToggleSideMenuVisible | ToggleSideMenuVisible
| TogglePowerSearch
@ -460,6 +463,15 @@ update sett msg model =
, Just { sett | sideMenuVisible = next } , Just { sett | sideMenuVisible = next }
) )
TogglePowerSearch ->
let
next =
not model.powerSearchEnabled
in
( { model | powerSearchEnabled = next }
, Just { sett | powerSearchEnabled = next }
)
--- View --- View
@ -763,6 +775,15 @@ settingFormTabs flags _ model =
, label = "Show basic search statistics by default" , label = "Show basic search statistics by default"
} }
] ]
, div [ class "mb-4" ]
[ MB.viewItem <|
MB.Checkbox
{ id = "uisetting-powersearch-enabled"
, value = model.powerSearchEnabled
, tagger = \_ -> TogglePowerSearch
, label = "Enable power-user search bar"
}
]
] ]
} }
, { title = "Item Cards" , { title = "Item Cards"

View File

@ -52,6 +52,7 @@ type ItemQuery
| ItemName AttrMatch String | ItemName AttrMatch String
| AllNames String | AllNames String
| Contents String | Contents String
| Fragment String
and : List (Maybe ItemQuery) -> Maybe ItemQuery and : List (Maybe ItemQuery) -> Maybe ItemQuery
@ -176,6 +177,9 @@ render q =
Contents str -> Contents str ->
"content:" ++ quoteStr str "content:" ++ quoteStr str
Fragment str ->
"(& " ++ str ++ " )"
attrMatch : AttrMatch -> String attrMatch : AttrMatch -> String
attrMatch am = attrMatch am =

View File

@ -62,6 +62,7 @@ type alias StoredUiSettings =
, cardPreviewFullWidth : Bool , cardPreviewFullWidth : Bool
, uiTheme : Maybe String , uiTheme : Maybe String
, sideMenuVisible : Bool , sideMenuVisible : Bool
, powerSearchEnabled : Bool
} }
@ -92,6 +93,7 @@ type alias UiSettings =
, cardPreviewFullWidth : Bool , cardPreviewFullWidth : Bool
, uiTheme : UiTheme , uiTheme : UiTheme
, sideMenuVisible : Bool , sideMenuVisible : Bool
, powerSearchEnabled : Bool
} }
@ -162,6 +164,7 @@ defaults =
, cardPreviewFullWidth = False , cardPreviewFullWidth = False
, uiTheme = Data.UiTheme.Light , uiTheme = Data.UiTheme.Light
, sideMenuVisible = True , sideMenuVisible = True
, powerSearchEnabled = False
} }
@ -213,6 +216,7 @@ merge given fallback =
Maybe.andThen Data.UiTheme.fromString given.uiTheme Maybe.andThen Data.UiTheme.fromString given.uiTheme
|> Maybe.withDefault fallback.uiTheme |> Maybe.withDefault fallback.uiTheme
, sideMenuVisible = given.sideMenuVisible , sideMenuVisible = given.sideMenuVisible
, powerSearchEnabled = given.powerSearchEnabled
} }
@ -249,6 +253,7 @@ toStoredUiSettings settings =
, cardPreviewFullWidth = settings.cardPreviewFullWidth , cardPreviewFullWidth = settings.cardPreviewFullWidth
, uiTheme = Just (Data.UiTheme.toString settings.uiTheme) , uiTheme = Just (Data.UiTheme.toString settings.uiTheme)
, sideMenuVisible = settings.sideMenuVisible , sideMenuVisible = settings.sideMenuVisible
, powerSearchEnabled = settings.powerSearchEnabled
} }

View File

@ -56,6 +56,7 @@ type alias Model =
, dragDropData : DD.DragDropData , dragDropData : DD.DragDropData
, scrollToCard : Maybe String , scrollToCard : Maybe String
, searchStats : SearchStats , searchStats : SearchStats
, powerSearchInput : Maybe String
} }
@ -121,6 +122,7 @@ init flags viewMode =
, scrollToCard = Nothing , scrollToCard = Nothing
, viewMode = viewMode , viewMode = viewMode
, searchStats = Api.Model.SearchStats.empty , searchStats = Api.Model.SearchStats.empty
, powerSearchInput = Nothing
} }
@ -194,6 +196,8 @@ type Msg
| SetLinkTarget LinkTarget | SetLinkTarget LinkTarget
| SearchStatsResp (Result Http.Error SearchStats) | SearchStatsResp (Result Http.Error SearchStats)
| TogglePreviewFullWidth | TogglePreviewFullWidth
| SetPowerSearch String
| KeyUpPowerSearchbarMsg (Maybe KeyCode)
type SearchType type SearchType
@ -240,8 +244,11 @@ doSearchDefaultCmd : SearchParam -> Model -> Cmd Msg
doSearchDefaultCmd param model = doSearchDefaultCmd param model =
let let
smask = smask =
Q.request Q.request <|
(Comp.SearchMenu.getItemQuery model.searchMenuModel) Q.and
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
, Maybe.map Q.Fragment model.powerSearchInput
]
mask = mask =
{ smask { smask

View File

@ -54,7 +54,7 @@ update mId key flags settings msg model =
ResetSearch -> ResetSearch ->
let let
nm = nm =
{ model | searchOffset = 0 } { model | searchOffset = 0, powerSearchInput = Nothing }
in in
update mId key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm update mId key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm
@ -580,6 +580,15 @@ update mId key flags settings msg model =
in in
noSub ( model, cmd ) noSub ( model, cmd )
SetPowerSearch str ->
noSub ( { model | powerSearchInput = Util.Maybe.fromString str }, Cmd.none )
KeyUpPowerSearchbarMsg (Just Enter) ->
update mId key flags settings (DoSearch model.searchTypeDropdownValue) model
KeyUpPowerSearchbarMsg _ ->
withSub ( model, Cmd.none )
--- Helpers --- Helpers

View File

@ -92,7 +92,7 @@ itemsBar flags settings model =
defaultMenuBar : Flags -> UiSettings -> Model -> Html Msg defaultMenuBar : Flags -> UiSettings -> Model -> Html Msg
defaultMenuBar flags settings model = defaultMenuBar _ settings model =
let let
btnStyle = btnStyle =
S.secondaryBasicButton ++ " text-sm" S.secondaryBasicButton ++ " text-sm"
@ -100,6 +100,53 @@ defaultMenuBar flags settings model =
searchInput = searchInput =
Comp.SearchMenu.textSearchString Comp.SearchMenu.textSearchString
model.searchMenuModel.textSearchModel model.searchMenuModel.textSearchModel
simpleSearchBar =
div
[ class "relative flex flex-row" ]
[ input
[ type_ "text"
, placeholder
(case model.searchTypeDropdownValue of
ContentOnlySearch ->
"Content search"
BasicSearch ->
"Search in names"
)
, onInput SetBasicSearch
, Util.Html.onKeyUpCode KeyUpSearchbarMsg
, Maybe.map value searchInput
|> Maybe.withDefault (value "")
, class (String.replace "rounded" "" S.textInput)
, class "py-1 text-sm border-r-0 rounded-l"
]
[]
, a
[ class S.secondaryBasicButtonPlain
, class "text-sm px-4 py-2 border rounded-r"
, href "#"
, onClick ToggleSearchType
]
[ i [ class "fa fa-exchange-alt" ] []
]
]
powerSearchBar =
div
[ class "relative flex flex-grow flex-row" ]
[ input
[ type_ "text"
, placeholder "Search query "
, onInput SetPowerSearch
, Util.Html.onKeyUpCode KeyUpPowerSearchbarMsg
, Maybe.map value model.powerSearchInput
|> Maybe.withDefault (value "")
, class S.textInput
, class "text-sm "
]
[]
]
in in
MB.view MB.view
{ end = { end =
@ -129,35 +176,11 @@ defaultMenuBar flags settings model =
] ]
, start = , start =
[ MB.CustomElement <| [ MB.CustomElement <|
div if settings.powerSearchEnabled then
[ class "relative flex flex-row" ] powerSearchBar
[ input
[ type_ "text"
, placeholder
(case model.searchTypeDropdownValue of
ContentOnlySearch ->
"Content search"
BasicSearch -> else
"Search in names" simpleSearchBar
)
, onInput SetBasicSearch
, Util.Html.onKeyUpCode KeyUpSearchbarMsg
, Maybe.map value searchInput
|> Maybe.withDefault (value "")
, class (String.replace "rounded" "" S.textInput)
, class "py-1 text-sm border-r-0 rounded-l"
]
[]
, a
[ class S.secondaryBasicButtonPlain
, class "text-sm px-4 py-2 border rounded-r"
, href "#"
, onClick ToggleSearchType
]
[ i [ class "fa fa-exchange-alt" ] []
]
]
, MB.CustomButton , MB.CustomButton
{ tagger = TogglePreviewFullWidth { tagger = TogglePreviewFullWidth
, label = "" , label = ""
@ -271,7 +294,7 @@ searchStats _ settings model =
itemCardList : Flags -> UiSettings -> Model -> List (Html Msg) itemCardList : Flags -> UiSettings -> Model -> List (Html Msg)
itemCardList flags settings model = itemCardList _ settings model =
let let
itemViewCfg = itemViewCfg =
case model.viewMode of case model.viewMode of