Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

better-react-native-bubble-select

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

better-react-native-bubble-select

An easy-to-use customizable bubble animation picker, similar to the Apple Music genre selection

  • 0.6.2
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Weekly downloads
 
Created
Source

React Native Bubble Select

An easy-to-use customizable bubble animation picker, similar to the Apple Music genre selection

Screenshot

Features

  • iOS & Android Support (In beta)
  • Typescript Support
  • Customizable

iOS Example

iOS Demo

Advanced Example

Advanced iOS Demo

Android Example

Android Demo

Installation

Install the library using either yarn or npm like so:

yarn add react-native-bubble-select
npm install --save react-native-bubble-select

iOS Installation

If you're using React Native versions > 60.0, it's relatively straightforward.

cd ios && pod install

For versions below 0.60.0, use rnpm links

  • Run react-native link react-native-bubble-select
  • If linking fails, follow the manual linking steps
Additional Steps

This library was written in Swift, so in-order for you app to compile, you need to have at least on .swift file in your source code a bridging header to avoid a runtime error like so:

swift error

All you have to do is:

  • File > New > File
  • Swift File
  • Name the file whatever you wish
  • When prompted to create a bridging header, do so

You must also include use_frameworks! at the top of your Podfile

Android Installation

Note as of version 0.5.0, android support is experimental.

For versions below 0.60.0, follow the linking instructions above.

Usage

You can view the example project for more usage.

Simple Usage

import React from 'react';
import BubbleSelect, { Bubble } from 'react-native-bubble-select';
import { Dimensions } from 'react-native';

const { width, height } = Dimensions.get('window');

const App = () => {
  return (
    <BubbleSelect
      onSelect={bubble => console.log('Selected: ', bubble.id)}
      onDeselect={bubble => console.log('Deselected: ', bubble.id)}
      width={width}
      height={height}
    >
      <Bubble id="bubble-1" text="Bubble One" />
      <Bubble id="bubble-2" text="Bubble Two" />
      <Bubble id="bubble-3" text="Bubble Three" />
      <Bubble id="bubble-4" text="Bubble Four" />
    </BubbleSelect>
  );
};

Advanced Usage

import React from 'react';
import { Platform, Dimensions } from 'react-native';
import BubbleSelect, { Bubble, BubbleNode } from 'react-native-bubble-select';
import randomCities from './randomCities';

const { width, height } = Dimensions.get('window');

const App = () => {
  const [cities, setCities] = React.useState(randomCities());
  const [selectedCites, setSelectedCities] = React.useState<BubbleNode[]>([]);
  const [removedCities, setRemovedCities] = React.useState<BubbleNode[]>([]);

  const addCity = () => {
    setCities([...cities, randomCity()]);
  };

  const handleSelect = (bubble: BubbleNode) => {
    setSelectedCities([...selectedCites, bubble]);
  };

  const handleDeselect = (bubble: BubbleNode) => {
    setSelectedCities(selectedCites.filter(({ id }) => id !== bubble.id));
  };

  const handleRemove = (bubble: BubbleNode) => {
    setRemovedCities([...removedCities, bubble]);
  };

  return (
    <BubbleSelect
      onSelect={handleSelect}
      onDeselect={handleDeselect}
      onRemove={handleRemove}
      width={width}
      height={height}
      fontName={Platform.select({
        ios: 'SinhalaSangamMN-Bold',
      })}
      fontSize={16}
    >
      {cities.map(city => (
        <Bubble
          key={city.id}
          id={city.id}
          text={city.text}
          color={city.color}
          selectedColor={city.selectedColor}
          selectedScale={city.selectedScale}
        />
      ))}
    </BubbleSelect>
  );
};

Props

Common Props

propertytyperequireddescriptiondefault
idstringTRUEA custom identifier used for identifying the node-
textstringTRUEThe text of the bubble. Note: on android the text must be unique-
colorstringFALSEThe background color of the bubbleblack
radiusnumberFALSEThe radius of the bubble. This value is ignored if autoSize is enabled30
fontNamestringFALSEThe name of the custom font applied to the bubbleAvenir-Black
fontSizenumberFALSEThe size of the custom font applied to the bubble13
fontColorstringFALSEThe color of the bubble textwhite
backgroundColorstringFALSEThe background color of the pickerwhite

iOS Only Props

propertytyperequireddescriptiondefault
idstringTRUEA custom identifier used for identifying the node-
textstringTRUEThe text of the bubble. Note: on android the text must be unique-
colorstringFALSEThe background color of the bubbleblack
radiusnumberFALSEThe radius of the bubble. This value is ignored if autoSize is enabled30
marginScalenumberFALSEThe margin scale applied to the physics body of the bubble. recommend that you do not change this value unless you know what you are doing1.01
fontNamestringFALSEThe name of the custom font applied to the bubbleAvenir-Black
fontSizenumberFALSEThe size of the custom font applied to the bubble13
fontColorstringFALSEThe color of the bubble textwhite
lineHeightnumberFALSEThe line height of the bubble. This value is ignored if autoSize is enabled1.5
borderColorstringFALSEThe border color of the buble-
borderWidthnumberFALSEThe border width of the bubble-
paddingnumberFALSEExtra padding applied to the bubble contents, if autoSize is enabled20
selectedScalenumberFALSEThe scale of the selected bubble1.33
deselectedScalenumberFALSEThe scale of the deselected bubble1
animationDurationnumberFALSEThe duration of the scale animation0.2
selectedColorstringFALSEThe background color of the selected bubble-
selectedFontColorstringFALSEThe color of the selected bubble text-
autoSizebooleanFALSEWhether or not the bubble should resize to fit its contentTRUE
initialSelectionstring[]FALSEAn id array of the initially selected nodes-

Android Only Props

propertytyperequireddescriptiondefault
bubbleSizenumberFALSEThe size of all the bubbles-
gradientGradientFALSEA custom gradient to be applied to the bubbles-
maxSelectionCountnumberFALSEThe max number of selected bubbles-
Gradient
propertytyperequireddescriptiondefault
startColorstringTRUEThe size of all the bubbles-
endColorstringTRUEA custom gradient to be applied to the bubbles-
directionenum('vertical', 'horizontal')TRUEThe direction of the gradient-

Note all required fields must be provided else the application will crash.

Acknowledgments

Known Issues

iOS

  • on certain occasions only half of the bubbles are shown on the screen #2

Android

  • the title of each bubble must be unique else the wrong element may be returned
  • hot reloading does not work #3
  • selection handlers are not triggered
  • after 5 items are selected, the picker rests, likewise with removed.

Roadmap

iOS

  • enable support for images

Android

  • enable long press to remove
  • auto size bubble based on content
  • enable support for images

General

  • Improve documentation
  • Unit tests
  • Flow support

License

MIT

Keywords

FAQs

Package last updated on 15 Jun 2022

Did you know?

Socket

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc