@exmg/exmg-searchbar

An element to search the needle in a haystack.

Usage no npm install needed!

<script type="module">
  import exmgExmgSearchbar from 'https://cdn.skypack.dev/@exmg/exmg-searchbar';
</script>

README

exmg-searchbar

A customizable search bar element.

This search bar uses mwc-textfield for the input element. More information about styling and the input element itself can be found on the link below: https://github.com/material-components/material-components-web-components/tree/master/packages/textfield

Usage

Import this element to your project with npm i @exmg/exmg-searchbar.

Then add the snippet below into your code.

<exmg-searchbar></exmg-searchbar>

Default Filtering

ExmgSearchBar has it's own filtering methods in it which you can also override. To achieve default filtering, take the example of html code below:

<exmg-searchbar .data="${dataArray}" .filterKeys="${filterKeys}" suggestion-label-key="url"> </exmg-searchbar>

When you pass the data array into data property along with filterKeys, exmg-search bar automatically filters data and shows suggestions.

filterKeys property has to contain specific key names from the type of each item in data.

For example; if you have [{username:"exmachina",name: "Ex Machina"},{username:"livery",name:"Livery"}] as the data array, you can pass ['username'] to filter out username values of data. Or pass ['username', 'name'] to filter out values of both keys.

To determine which value of items passed into data should be shown as the label of each suggestion, use suggestion-label-key just like filterKeys but the only difference is, it accepts a single key as a simple string, not an array.

Custom Suggestions and Filtering

By extending ExmgSearchBar, you can override any of three functions of your selection. These functions are:

  • filter(data: any[], filterKeys: string[], query: string): ExmgSearchSuggestion[]: TemplateResult
  • renderSuggestions(suggestions: ExmgSearchSuggestion[])
  • renderSuggestionsLoading(): TemplateResult

filter expects array of ExmgSearchSuggestion objects. By implementing your own filtering method, you might not need suggestion-label-key since you can place any string value into text property of ExmgSearchSuggestion.

Please check ExmgSearchBar class in order to see how these three functions are working. After that you can extend ExmgSearchBar class and override those functions to create your fancy filtering methods or suggestions.

Showing Suggestions Manually

If you are handling filtering logic manually on the parent, you can follow this way to show suggestions manually. To show suggestons, pass the suggestion data to suggestions property of exmg-searchbar. It accepts array of ExmgSearchSuggestion type of elements into suggestions.

Follow this document for available properties, events, methods and styling.

Styling

Variable Default Description
--exmg-searchbar-error-color #b00020 Error color of search bar
--exmg-searchbar-hint-color rgba(0, 0, 0, 0.6) Hint text color of search bar
--exmg-searchbar-primary-color #0071dc Primary theme color of search bar
--exmg-searchbar-text-color rgba(0, 0, 0, 0.87) Text color of search bar
--exmg-searchbar-suggestions-spinner-color #0071dc Suggestions loading indicator color
--exmg-searchbar-suggestions-spinner-width 3px Suggestions loading indicator spinner width
--exmg-searchbar-suggestions-max-visible-suggestions 5 Max visible suggestions before showing scrollbar
--exmg-searchbar-suggestions-min-height 40px Suggestion item row height
--exmg-searchbar-suggestions-text-color rgba(0, 0, 0, 0.6) Suggestion item text color
--exmg-searchbar-suggestions-background-color #ffffff Suggestions list background color
--exmg-searchbar-suggestions-z-index 1 z-index of suggestions list
--exmg-searchbar-width 100% Width of search bar

Properties

Name Type Default Description
filterKeys string[] undefined Set of which keys of data should be checked to filter data by default.
data any[] undefined The data in search bar to filter.
keepFocus boolean false If true, keeps focus on search bar after query-submit is fired
keepSuggestionsOnSelect boolean false Option to whether keep suggestions visible or not on suggestion selection
submitKeys string[] ['ENTER'] Determines which keys should trigger submitting search query
notifyOnQueryChange boolean true If true, dispatches query-change event with the current query on every change of search input.
searchQuery string '' Current query of search bar
suggestionLabelKey string undefined Defines which property of each data item should be placed into suggestions' labels.
submitOnKeyPress boolean true If true, dispatches query-submit event with the current query upon receiving key press event with specific keys passed to keys string array
suggestions ExmgSearchSuggestion[] [] List of suggestions to be passed into and displayed
suggestionsLoading boolean false If true and there are no suggestions passed to element, a loading indicator should be shownbar

Events

@query-change

Fired on query change.

Payload: {value: string}

@query-submit

Fired on query submit.

Payload: {value: string}

@suggestion-select

Fired on suggestion selection.

This event is also fired when there is only one suggestion and user submits query.

Payload: {value: any, index: number}

Methods

clearSuggestions()

Clears suggestions.

hideSuggestionsLoading()

Hides the loading indicator.

search()

Fires query-submit event with passed query into search bar.

setQuery(query: string)

Sets query.

setSuggestions(suggestions: ExmgSearchSuggestion[])

Sets suggestions.

showSuggestionsLoading()

Shows the loading indicator if there are no suggestions available.