npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@vvitto/react-select-virtualized

v2.5.21

Published

Select virtualized component using: react-select v3 + react-virtualized + react hooks

Downloads

8

Readme

react-select-virtualized

Alt text

react-select v3 + react-virtualized + react hooks!

NPM JavaScript Style Guide

This project came up after hours of trying to find an autocomplete component that supports large sets of data to be displayed and searched for while maintain performance. The only libraries out there that allow this functionality are either not maintained anymore, use outdated libraries or are poorly performant. I created a component that uses the Airbnb library called react-virtualized for the virtual data loading of elements and plugged it to the react-select (the most used autocomplete library for react) menu list.

Alt Text

Install

npm install --save react-select-virtualized

Peer Dependencies

{
    "react",
    "react-dom",
    "react-virtualized",
    "react-select"
}

Note

The select component will be the same from react-select v3 so you will be able to use it with any select you already have.

Try It!!!

Edit react-select-virtualized

Check Storybook for more examples

What we do support and don't from react-select

Components: Select, Async, Creatable

  • [x] We support all the UI related props for the input. Extension also.

  • [x] We do not support any related prop to the popup list. We extend it. *Sorry no extension of any component inside the list.*

  • [x] Sorry no multi selection yet. (no isMulti)

Examples

Options Shape

const options = [
  {
    value: 1,
    label: `guiyep`,
  },
  ...
];

const opsGroup = [
  { label: `Group Name Header`, options },
  ...
]

Basic

import React from 'react';

import Select from 'react-select-virtualized';

const Example1 = () => <Select options={options} />;

Edit react-select-virtualized

With group

import React from 'react';

import Select from 'react-select-virtualized';

const Example1 = () => <Select options={opsGroup} grouped />;

Edit react-select-virtualized

Usage Async


import React from 'react';

import { Async } from 'react-select-virtualized';

const loadOptions = (input, callback) => {...};

const Example1 = () => <Async loadOptions={loadOptions}/>

const Example2 = () => <Async defaultOptions={options} loadOptions={loadOptions}/>

const Example3 = () => <Async defaultOptions={opsGroup} loadOptions={loadOptions} grouped/>
Async - No Group

Edit react-select-virtualized

Async - Grouped

Edit react-select-virtualized

Usage with creatable

import React from 'react';

import { Creatable } from 'react-select-virtualized';

const Example1 = () => <Creatable options={options} />;

Edit react-select-virtualized

Usage with creatable and group

NOT YET DONE.

Custom Styles

For custom styling of the Input component read the react-select documentation.

The styling in the menu list is by css.

How to leave the menu open so I can style my menu?

Set the menuIsOpen prop to true, create an options list with less than 100 elements and use css for adjusting your css.

Use this example as a guidance

Edit react-select-virtualized

react-select-virtualized grouped-virtualized-list-item flat-virtualized-item fast-option fast-option fast-option-focused fast-option-selected fast-option-create

Documentation - this are special to this library and none is required

| Props | Type | Default | Description | | -------------------------------------------- | ------------------------------------------ | ------- | ------------------------------------------------------------------------------------ | | grouped | boolean | false | Specify if options are grouped | | formatGroupHeaderLabel | function({ label, options}) => component | | Will render a custom component in the popup grouped header (only for grouped) | | formatOptionLabel (coming from react-select) | function(option, { context }) => component | | Will render a custom component in the label | | optionHeight | number | 31 | Height of each option | | groupHeaderHeight | number | | Header row height in the popover list | | maxHeight (coming from react-select) | number | auto | Max height popover list | | defaultValue | option | | Will set default value and set the component as an uncontrolled component | | value | option | | Will set the value and the component will be a controlled component | | onCreateOption (Only for Creatable) | function(option) => nothing | | Will be executed when a new option is created , it is only for controlled components |

Roadmap

  • [x] useCallback everywhere.
  • [x] Move fast options to group.
  • [x] Fix minimum input search on grouped component.
  • [x] Upgrade alpha version.
  • [x] Review all the TODOs.
  • [x] Improve filtering function in fast-react-select.
    • [x] Improved performance by 50%
  • [x] Add gzip.
  • [x] Review support to all the react-select props. Should all work but multi-val.

-- v 1.0.0 --

  • [x] Add support to AsyncSelect.

-- v 1.1.0 --

  • [x] Add support to AsyncSelect with group.

-- v 1.2.0 --

  • [x] Upgrading packages and hooks.

-- v 2.0.0 --

  • [x] Adding react-select v3.
  • [x] Fixing addon-info.
  • [x] Remove classnames.
  • [x] Improve packaging.
  • [x] Remove react-hover-observer.
  • [x] Added controlled components support.

-- v 2.1.0 --

  • [x] Better debouncing

-- v 2.2.0 --

  • [x] Add support to create element props.
  • [x] Add better error handling.

-- v 2.3.0 --

  • [x] Move modules to lib.
  • [x] Improve debounce.
  • [ ] Move internal state of select and async select to reducer like creatable.
  • [ ] Add support to create element props with group.

-- v 2.4.0 --

  • [ ] Add testing so we do not only relay on storybook.

More from me :)

my-react-form-state NPM

This is a React form state management library that works with React/Redux/React-Native.

License

MIT © guiyep