/react-native-tag-select

🏷 A simple tag component to act as radio button / checkbox

Primary LanguageJavaScript

react-native-tag-select

npm version

A simple tag component to act as radio button / checkbox

Features

  • Suports Array of objects or array of strings
  • Support max itens selected
  • Built in themes
  • Plain simple and flexible API

Demo

You can try on expo: https://exp.host/@rafaelmotta021/react-native-tag-select-demo

or just check the image bellow:

Setup

yarn add react-native-tag-select

or

npm install --save react-native-tag-select

Usage

import React from 'react';
import {
  View,
  StyleSheet,
  Button,
  Alert,
  Text,
} from 'react-native';

import { TagSelect } from 'react-native-tag-select';

export default class App extends React.Component {
  render() {
    const data = [
      { id: 1, label: 'Money' },
      { id: 2, label: 'Credit card' },
      { id: 3, label: 'Debit card' },
      { id: 4, label: 'Online payment' },
      { id: 5, label: 'Bitcoin' },
    ];

    return (
      <View style={styles.container}>
        <Text style={styles.labelText}>Payment:</Text>
        <TagSelect
          data={data}
          max={3}
          ref={(tag) => {
            this.tag = tag;
          }}
          onMaxError={() => {
            Alert.alert('Ops', 'Max reached');
          }}
        />
        <View style={styles.buttonContainer}>
          <View style={styles.buttonInner}>
            <Button
              title="Get selected count"
              style={styles.button}
              onPress={() => {
                Alert.alert('Selected count', `Total: ${this.tag.totalSelected}`);
              }}
            />
          </View>
          <View>
            <Button
              title="Get selected"
              onPress={() => {
                Alert.alert('Selected items:', JSON.stringify(this.tag.itemsSelected));
              }}
            />
          </View>
        </View>
        <Text style={styles.labelText}>With custom style:</Text>
        <TagSelect
          data={data}
          itemStyle={styles.item}
          itemLabelStyle={styles.label}
          itemStyleSelected={styles.itemSelected}
          itemLabelStyleSelected={styles.labelSelected}
        />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#FFF',
    marginTop: 50,
    marginLeft: 15,
  },
  buttonContainer: {
    padding: 15,
  },
  buttonInner: {
    marginBottom: 15,
  },
  labelText: {
    color: '#333',
    fontSize: 15,
    fontWeight: '500',
    marginBottom: 15,
  },
  item: {
    borderWidth: 1,
    borderColor: '#333',    
    backgroundColor: '#FFF',
  },
  label: {
    color: '#333'
  },
  itemSelected: {
    backgroundColor: '#333',
  },
  labelSelected: {
    color: '#FFF',
  },
});

Demo

You can customized the look and feel of this library the way you want, but, if you prefer, we ship 6 themes for you:

  • default
  • inverse
  • success
  • info
  • danger
  • warning

Available props

Name Type Default Description
value array [] Array with pre-defined values
data array [] Data to render
labelAttr string 'label' Key attribute name to render label text, if the data props is an array of objects
keyAttr string 'id' Key attribute name to render key property to the list, if the data props is an array of objects
max number null Max itens permitted
onMaxError func null Callback after user reach max itens
onItemPress func null Callback after user press on item
theme string 'default' Default theme inspired on bootstrap colors. You can check the options available above
containerStyle any {} Style of the list container
itemStyle any {} Style of item container
itemStyleSelected any {} Style of item container selected
itemLabelStyle any {} Style of item label
itemLabelStyleSelected any {} Style of item label selected

Methods

To access tag select methods you must get the ref property first.

  • Get the number of itens selected. Returns a boolean.
this.ref.totalSelected
  • Get itens selected. Returns an array.
this.ref.itemsSelected