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

react-native-item-select

v0.4.2

Published

List or Grid viewed item(s) picker for React Native

Downloads

19

Readme

React Native Item Select

Sometimes selecting items from dropdowns or checkboxes just doesn't cut it. You may need a fancy grid item picker. Maybe this highly customizable List Grid item(s) picker for React Native is what you're looking for.

Installation

npm install --save react-native-item-select

Features :tada:

  • List or Grid. If Grid, customizable no of items per row.
  • Multiselect supported.
  • Validation for minimum & maximum no of items to be selected.
  • Fine-grained style control.
  • Preselect items.
  • Provision to implement search.

Demo

You can see the code for the GIF files given above at this repo.

Example

import React, {Component} from 'react';
import { Text, View } from 'react-native';
import ReactNativeItemSelect from 'react-native-item-select';

class LanguageSelectionScreen extends Component {
  render() {
    const textStyle = { textAlign: 'center', color: '#696969', fontWeight: 'bold' };
    const data = [
      { firstLetter: 'அ', displayName: 'தமிழ்', name: 'Tamil' },
      { firstLetter: 'A', displayName: 'English', name: 'English' },
      ...
    ];

    return (
      <ReactNativeItemSelect
        data={data}
        itemComponent={
          item => (
            <View>
                <Text style={{ ...textStyle, fontSize: 35 }}>{item.firstLetter}</Text>
                <Text style={textStyle}>{item.displayName}</Text>
            </View>
          )
        }
        onSubmit={item => navigate('Result')}
      />
    );
  }
}

Props

We can divide props into two types. One is mandatory other one is optional. Without optional props, this library will work properly with its default values. However, you've to pass all required props.

Required Props

Name | Type | Description ---------------|----------|----------------------------------------------------------------------- data | Array | Array of items you pass to itemComponent callback. itemComponent | Function | Takes 2 parameters and returns a React element. Two paramerts, (item, selected). item: data prop item, selected: boolean that suggests whether the item is selected. selected boolean is useful when you want to alter the content if it is selected. onSubmit | Function | Callback function that consumes selected item(s).

Optional Props

Name | Type | Default | Description -----------------------|------------|---------------------|--------------------------------- multiselect | Boolean | false | Pass this to enable multiselect countPerRow | Number | 2 | No of items to display per row, pass 1 for list view floatSubmitBtn | Boolean | false | When the number of items increase, you may want to float the submit button at the botton of the screen. Pass this prop to do so. lastRowMargin | Number | 50 | This only takes effect when you float submit button. Most often floating button will hinder the view of last row. This is to avoid it. submitBtnTitle | String | Submit | Change submit button title minSelectCount | Number | 1 | Valid only when multiselect is enabled. Minimum number of items to be selected to enable submit button. maxSelectCount | Number | null | Valid only when multiselect is enabled. To set max limit on the number of items selected. Displays an alert when user tries to select more items. maxSelectAlertTxt | String | Check description | To change the alert text. Default: You can't select more than N items. tickStyle | String | Check description | Valid params: check, overlayCheck. For single select check is default. overlayCheck is default for multiselect tickPosition | String | Check description | Default values: single select - topRight, multiselect - middle. However, you can override the default by passing custom value. Valid params: topLeft, topRight, topMiddle, bottomLeft, bottomRight, bottomMiddle, middle, leftMiddle, rightMiddle submitBtnWidth | Number | 100 | This number represents percentage width. So, to set the width to 50% just pass 50. tickTxt | String | ✔ | Pass some string to change the tick string rendered. extraItemHighlighProps | Object | {} | This is to alter existing prop value or to add new values to the TouchableHighlight component that encloses your itemComponent. extraBtnOpacityProps | Object | {} | Use this to pass props to TouchableOpacity that encloses the submit button. styles | Object | {} | For custom styling you can use this prop. Refer styling section. searchKey | String | null | If you want to implement search, you've to pass this prop. Check search implementation section.

Preselect Items

In some cases, you may want to preselect items when ReactNativeItemSelect renders. That can be achieved by setting selected property of the items in data array. In the following example, Apple & Orange are preselected.

Example

<ReactNativeItemSelect
    data={[
      { name: 'Apple', selected: true},
      { name: 'Banana' },
      { name: 'Orange', selected: true}
    ]}
    itemComponent={this.itemComponent}
    onSubmit={this.onSubmit}
/>

Styling

You can alter the styles of any component of this library by passing appropriate prop. For now you can use 11 keys in styles prop to customize the look. They are, btn, btnOpacity, btnTxt, disabledBtnOpacity, disabledBtn, disabledBtnTxt, itemBoxHighlight, activeItemBoxHighlight, tickTxt, itemComponentWrapper, rowWrapper

Example

In the following component, styles prop will change the color of submit button, tick background and selected items border color to material blue.

<ReactNativeItemSelect
    data={data}
    itemComponent={this.itemComponent}
    onSubmit={this.onSubmit}
    styles={
        {
            btn: { backgroundColor: '#2196F3' },
            disabledBtn: { backgroundColor: '#2196F3' },
            tickTxt: { backgroundColor: '#2196F3' },
            activeItemBoxHighlight: { borderColor: '#2196F3' },
        }
    }
/>

btn, disabledBtn

For the Button View. You can use any of the View style props. Use disabledBtn key to style the button when it is in disabled state and use btn for enabled button.

btnOpacity, disabledBtnOpacity

For the TouchableOpacity that encloses the button view. You can use any View style props.

btnTxt, disabledBtnTxt

Use this to style the text inside submit button. Refer Text style props.

itemBoxHighlight, activeItemBoxHighlight

You can use this to style the TouchableHighlight which wraps your item component. All border styling must go here. You can use any View style props here.

itemComponentWrapper

This is a View that wraps your item component. Wrapping order is like this TouchableHighlight > View > itemComponent. You can use this to get rid of the padding inside box. Refer View style props.

tickTxt

You can use this to alter the View the encloses your tick character. Tick color is changed here. Refer Text style props.

rowWrapper

Used to alter the style of the View that wraps the items in a row. Refer View style props.

Search Implementation

To make ReactNativeItemSelect more customizable styling & implementation of text box for search has to be implemented by the user. You can easily implement search by making use of the state of the parent component. You need to pass searchKey prop to make search work. Just make sure the value of the searchKey is unique for all items. For your better understanding, search has already been implemented in the customized example of demo app - source code.

NOTE: Search implementation is not part of the GIF shown above. Search feature was added after the creation of demo GIF.