Code Monkey home page Code Monkey logo

jesster2k10 / react-native-range-slider Goto Github PK

View Code? Open in Web Editor NEW
57.0 2.0 10.0 3.41 MB

A high-quality, cross platform, native iOS range slider for react native. A slider, similar in style to UISlider, but which allows you to pick a minimum and maximum range; inspired by react-native-range-slider

License: MIT License

Java 55.80% TypeScript 6.13% Ruby 1.80% Objective-C 30.54% JavaScript 0.60% Kotlin 5.14%
react react-native react-native-range react-native-range-slider range-slider rangeslider seekbar seekbar-android slider-range

react-native-range-slider's Introduction

React Native Range Slider

A high-quality, cross platform, native iOS range slider for react native. A slider, similar in style to UISlider, but which allows you to pick a minimum and maximum range; inspired by react-native-range-slider

Features

  • iOS Support
  • Android Support
  • Native Code
  • Customizable
  • Typescript Support

IOS Example

IOS Demo

Android Example

IOS Demo

Installation

Install the library using either yarn or npm like so:

yarn add @jesster2k10/react-native-range-slider
npm install --save @jesster2k10/react-native-range-slider

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 @jesster2k10/react-native-range-slider
  • If linking fails, follow the manual linking steps

Android Installation

For versions below 0.60.0, follow the linking instructions above. There are additional steps required to get started with android.

Step One

Modify your settings.gradle to include the following

include ':rangeseekbar'
project(':rangeseekbar').projectDir = new File(rootProject.projectDir, '../node_modules/@jesster2k10/react-native-range-slider/android/crystalrangeseekbar')

Step Two

Modify and your application build.gradle to include:

buildscript {
  dependencies {
    classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
  }
}

Step Three

NOTE: This only applies to react native versions greater than 0.60.0 *NOTE: if you don't have a react-native.config.js file, just create one at the root of your project

Adjust your react-native.config.js to include the following:

module.exports = {
  dependencies: {
    '@jesster2k10/react-native-range-slider': {
      platforms: {
        android: {
          packageImportPath:
            'import com.jesster2k10reactnativerangeslider.ReactNativeRangeSliderPackage;',
        },
      },
    },
  },
}

Step Four

Modify your AndroidManifest.xml and set android:allowBackup="true", see below for example:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="com.ReactNativeRangeSliderExample">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="true"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    </application>

</manifest>

Usage

Basic Usage

You can check out the examples for more usage.

import RangeSlider from '@jesster2k10/react-native-range-slider';

// ...
const App = () => {
  const onChange = (min: number, max: number) => {
    console.log('min: ', min)
    console.log('max: ', max)
  }

  return (
  <RangeSlider
    type="range" // ios only
    min={0}
    max={100}
    selectedMinimum={20} // ios only
    selectedMaximum={60} // ios only
    tintColor="#ecf0f1"
    handleColor="#f368e0"
    handlePressedColor="#f368e0"
    tintColorBetweenHandles="#ff9ff3"
    onChange={onChange}
  />
  )
}

## Props

Props Explanation

Common Props

property type description required
min number the minimum value for the slider TRUE
max number the maximum value for the slider TRUE
onChange (min: number, max: number) => void a callback that will be called with slider data once the values change FALSE
tintColor string tint color for the slider track & handles (ios only, use handleColor on android) FALSE
tintColorBetweenHandles string tint color for the active part of the slider track FALSE
step number the step for the slider FALSE
handleColor string the color for both left and right handlers FALSE
style object a custom style object for the slider FALSE
prefix string the prefix for the min and max values
suffix string the suffix for the min and max values

IOS Only Props

property type description required
type slider range the type of slider
selectedMaximum number the selected maximum value, it shouldn't be less than max FALSE
selectedMinimum number the selected minimum value, it shouldn't be less than min FALSE
handleBorderColor string the color for the slider handle border FALSE
handleWidth number the size of the handle FALSE
minLabelColor string the color of the minimum (left hand) label FALSE
maxLabelColor string the color of the maximum (right hand) label FALSE
handleDiameter number the diameter of the handle FALSE
lineHeight number the height of the slider track FALSE
hideLabels boolean controls whether the min and max labels are visible FALSE
minLabelFont string the font family name of the min (left hand) label FALSE
minLabelFontSize number the font size of the min (left hand) label FALSE
maxLabelFont string the font family name of the max (right hand) label FALSE
maxLabelFontSize number the font size of the max (right hand) label FALSE
labelPadding number extra padding for the min & max labels FALSE
maxDistance number the maximum distance between handles FALSE
minDistance number the minimum distance between handles FALSE
lineBorderWidth number the border width of the slider track FALSE
lineBorderColor string the border color of the slider track FALSE

Android Only Props

property type description required
leftHandleColor string the color of the left handle FALSE
leftHandlePressedColor string the color of the left (min) handle when touched FALSE
rightHandleColor string the color of the right (max) handle FALSE
rightHandlePressedColor string the color of the right (max) handle when touched FALSE
handlePressedColor string the color of the handle when touched FALSE
minStartValue number - FALSE
maxStartValue number - FALSE
fixGap number a fixed gap between the handles FALSE
corderRadius number the corder radius of the slider track FALSE

Please note that on android, the tint color refers to the color of the empty track.

Acknowledgments

Roadmap

  • Improve android customization abilities (fonts, handle size)
  • Improve documentation
  • Unit tests
  • Flow support

Contribution

Please visit the CONTRIBUTING.md file.

License

MIT

react-native-range-slider's People

Contributors

jesster2k10 avatar jimteva avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

react-native-range-slider's Issues

iOS - Prop "step" not working

Thank you for the great library. This was indeed a missing library!
On iOS, prop "step" is not working.
Library TTRangeSlider needs prop enableStep to make it work but looks like it is missing in RNRangeSlider.m initWithEventDispatcher()
I've added _rangeSlider.enableStep = true; but now step is locked on value 10
I've also added _rangeSlider.step = _step; where float _step; is declared in @implementation but no luck still on 10.
Can you fix this? Thanks

Android build not working

Im having the next issue with Android build.

Using React-native 0.63.4

Already tried the manual linking solution but is not working.

Error:
`
.../node_modules/@jesster2k10/react-native-range-slider/android/crystalrangeseekbar/src/main/java/com/crystal/crystalrangeseekbar/widgets/BubbleThumbSeekbar.java:15:

error: package com.example.crystalrangeseekbar does not exist

import com.example.crystalrangeseekbar.R;

`

Android not building

Task :app:compileReleaseJavaWithJavac FAILED
/Users/bon/work/ff/android/app/build/generated/rncli/src/main/java/com/facebook/react/PackageList.java:15: error: cannot find symbol
import com.example.crystalrangeseekbar.ReactNativeRangeSliderPackage;
^
symbol: class ReactNativeRangeSliderPackage
location: package com.example.crystalrangeseekbar
/Users/bon/work/ff/android/app/build/generated/rncli/src/main/java/com/facebook/react/PackageList.java:109: error: cannot find symbol
new ReactNativeRangeSliderPackage(),
^
symbol: class ReactNativeRangeSliderPackage
location: class PackageList

Module: 'rangeseekbar' platform 'android-27' not found

React-Native 0.61.5

settings.gradle

include ':rangeseekbar'
project(':rangeseekbar').projectDir = new File(rootProject.projectDir, '../node_modules/@jesster2k10/react-native-range-slider/android/crystalrangeseekbar')

image

image

repo is abandoned, don't recommend using it

there is a much better alternative to this lib -> @ptomasroos/react-native-multi-slider

P.S. i've spent a few hours trying to fix multiple errors after updating to react-native 0.64 with no success

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.