Socket
Socket
Sign inDemoInstall

react-search-suggestions

Package Overview
Dependencies
68
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    react-search-suggestions

A React input component with pluggable search suggestions.


Version published
Maintainers
1
Created

Readme

Source

React Search Suggestions

demo

A React input component with pluggable search suggestions.

Also includes arrow key navigation through results.

Build

Prerequisities

  • React (obviously)

Installation

yarn add react-search-suggestions

Usage

import React from 'react'
import { SearchSuggestions } from 'react-search-suggestions'

const MyComponent = () => (
  <SearchSuggestions
    autoFocus
    suggestions={[
      'polite',
      'fastidious',
      'dull',
      'pudding',
      'mole',
      'angle',
    ].map(word => (
      <a href={`https://www.google.co.uk/search?q=${word}`}>{word}</a>
    ))}
  />
)

export default MyComponent

HTML Structure

The markup is very simple. You bring what populates each search suggestion. In this example:

<div>
  <input />
  <ul>
    <li>
      <a href="https://www.google.co.uk/search?q=polite">polite</a>
    </li>
    <li>
      <a href="https://www.google.co.uk/search?q=fastidious">fastidious</a>
    </li>
    <li>
      <a href="https://www.google.co.uk/search?q=dull">dull</a>
    </li>
    <li>
      <a href="https://www.google.co.uk/search?q=pudding">pudding</a>
    </li>
    <li>
      <a href="https://www.google.co.uk/search?q=mole">mole</a>
    </li>
    <li>
      <a href="https://www.google.co.uk/search?q=angle">angle</a>
    </li>
  </ul>
</div>

If you wanted to do something else onClick or onKeyDown, you could do something like:

import React from 'react'
import { SearchSuggestions } from 'react-search-suggestions'

const customFunction = (arg: string) => {
  console.log(arg)
}

const MyComponent = () => (
  <SearchSuggestions
    autoFocus
    suggestions={[
      'polite',
      'fastidious',
      'dull',
      'pudding',
      'mole',
      'angle',
    ].map(word => (
      <span
        key={word}
        onKeyDown={e => {
          if (e.key === 'Enter') {
            customFunction(word)
          }
        }}
        onClick={() => {
          customFunction(word)
        }}
      >
        {word}
      </span>
    ))}
  />
)

export default MyComponent

Props

PropDescriptionTypeDefaultRequired?
suggestionsA collection of HTML elements or React components used for search suggestionsReact.ReactNode[]Y
idID for entire componentstringundefinedN
classNameOptional class name to style componentstring''N
nameInput namestring'q'N
placeholderInput placeholderstring'Search'N
autoFocusInput autoFocusbooleanfalseN
onChangeInput onChange handlerfunctionundefinedN
withStylesBasic styling for the componentbooleanfalseN
highlightKeywordsHighlight letters that match search term by wrapping a <mark> tag around suggestionsbooleanfalseN

Styling

By default, the component comes with almost no styles. Given the semantic nature of the markup, it is quite easy to target these with CSS. As mentioned above, you can provide a className to the component for this.

Alternatively, you can set the withStyles prop to true to achieve some very basic styling. An example of this can be seen on GitHub Pages.

Important: The :focus attribute on each top level element's search suggestion is what powers the active state of a selected element. Refer to the HTML Structure above to correctly determine any CSS selectors.

Arrow Key Navigation

You get this functionality for free and was the main motivation for creating this shared component.

Keywords

FAQs

Last updated on 18 Mar 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc