search: Fix display of suggestion box when search bar empty.

When search bar is empty and we've reached that state
by using the `backspace` key. There are no suggestions
as there are when you select an empty search bar.

The cause of this was an explicit prevention of this
suggestion box in `typeahead.js` so that the
`backspace` key is free to interact with the other
elements.

The fix here is to add an optional `hideOnEmpty` option
so that if we want this suggestion box to appear we can
set this option to `false` and this behavior will be
prevented.

This option is enabled for the search input when pills are not
enabled.

Fixes: #25062.
This commit is contained in:
Lakshay Mittal 2023-04-12 21:59:38 +05:30 committed by Tim Abbott
parent a66c8227d8
commit 0b10a33565
2 changed files with 10 additions and 2 deletions

View File

@ -93,6 +93,9 @@ export function initialize() {
parentElement: "#searchbox_legacy", parentElement: "#searchbox_legacy",
items: search_suggestion.max_num_of_search_results, items: search_suggestion.max_num_of_search_results,
helpOnEmptyStrings: true, helpOnEmptyStrings: true,
// With search pills, the contenteditable input will be empty
// even if some pills are present.
hideOnEmpty: page_params.search_pills_enabled,
naturalSearch: true, naturalSearch: true,
highlighter(item) { highlighter(item) {
const obj = search_map.get(item); const obj = search_map.get(item);

View File

@ -487,8 +487,13 @@ import {get_string_diff} from "../../src/util";
default: default:
var hideOnEmpty = false var hideOnEmpty = false
if (e.keyCode === 8 && this.options.helpOnEmptyStrings) { // backspace // backspace
hideOnEmpty = true if (e.keyCode === 8 && this.options.helpOnEmptyStrings) {
// Support for inputs to set the hideOnEmpty option explicitly to false
// to display typeahead after hitting backspace to clear the input.
if (typeof(this.options.hideOnEmpty) === undefined || this.options.hideOnEmpty) {
hideOnEmpty = true;
}
} }
this.lookup(hideOnEmpty) this.lookup(hideOnEmpty)
} }