# react-selectable **Repository Path**: qwertyerge/react-selectable ## Basic Information - **Project Name**: react-selectable - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-18 - **Last Updated**: 2021-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Selectable items for React Allows individual or group selection of items using the mouse. ## Demo [Try it out](http://unclecheese.github.io/react-selectable/example) ## Upgrading from 0.1 to 0.2 There have been significant changes in the 0.2 release. Please [read about them here](UPGRADING.md). ## Getting started ``` npm install react-selectable ``` ```js import React from 'react'; import { render } from 'react-dom'; import { SelectableGroup, createSelectable } from 'react-selectable'; import SomeComponent from './some-component'; const SelectableComponent = createSelectable(SomeComponent); class App extends React.Component { constructor (props) { super(props); this.state = { selectedKeys: [] }; } render () { return ( {this.props.items.map((item, i) => { let selected = this.state.selectedKeys.indexOf(item.id) > -1; return ( {item.title} ); })} ); }, handleSelection (selectedKeys) { this.setState({ selectedKeys }); } } ``` ## Configuration The `` component accepts a few optional props: * `onSelection` (Function) Callback fired after user completes selection * `onNonItemClick` (Function) Callback fired when a click happens within the selectable group component, but not in a selectable item. Useful for clearing selection. * `tolerance` (Number) The amount of buffer to add around your `` container, in pixels. * `component` (String) The component to render. Defaults to `div`. * `fixedPosition` (Boolean) Whether the `` container is a fixed/absolute position element or the grandchild of one. Note: if you get an error that `Value must be omitted for boolean attributes` when you try ``, simply use Javascript's boolean object function: ``. * `selectOnMouseMove` (Boolean) Enable to fire the `onSelection` callback while the mouse is moving. Throttled to 50ms for performance in IE/Edge * `preventDefault` (Boolean) Allows to enable/disable preventing the default action of the onmousedown event (with e.preventDefault). True by default. Disable if your app needs to capture this event for other functionalities. * `enabled` (Boolean) If false, all of the selectable features are disabled, and event handlers removed. ### Decorators Though they are optional, you can use decorators with this `react-selectable`. A side by side comparison is the best way to illustrate the difference: #### Without Decorators ```javascript class SomeComponent extends Component { } export default createSelectable(SomeComponent) ``` vs. #### With Decorators ```javascript @createSelectable export default class SomeComponent extends Component { } ``` In order to enable this functionality, you will most likely need to install a plugin (depending on your build setup). For Babel, you will need to make sure you have installed and enabled [babel-plugin-transform-decorators-legacy](https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy) by doing the following: 1. run `npm i --save-dev babel-plugin-transform-decorators-legacy` 2. Add the following line to your `.babelrc`: ```json { "plugins": ["transform-decorators-legacy"] } ```