Skip to content

Commit

Permalink
Refactor to RNRangeSlider
Browse files Browse the repository at this point in the history
  • Loading branch information
Jesse Onolememen committed Mar 24, 2020
1 parent d2b4a4c commit 1e0de7e
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 19 deletions.
1 change: 1 addition & 0 deletions android/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.facebook.react.uimanager.annotations.ReactProp

class RangeSliderManager: SimpleViewManager<RangeSliderView>() {
override fun getName(): String {
return "RangeSlider"
return "RNRangeSlider"
}

override fun createViewInstance(reactContext: ThemedReactContext): RangeSliderView {
Expand Down Expand Up @@ -106,6 +106,18 @@ class RangeSliderManager: SimpleViewManager<RangeSliderView>() {

}

@ReactProp(name = "suffix")
fun setSuffix(view: RangeSliderView, suffix: String?) {
if (suffix == null) return
view.suffix = suffix
}

@ReactProp(name = "prefix")
fun setPrefix(view: RangeSliderView, prefix: String?) {
if (prefix == null) return
view.prefix = prefix
}

override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> {
return MapBuilder.of(
RangeSliderChangeEvent.EVENT_NAME, MapBuilder.of(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,36 @@ import com.crystal.crystalrangeseekbar.interfaces.OnRangeSeekbarChangeListener
import com.crystal.crystalrangeseekbar.widgets.CrystalRangeSeekbar
import com.facebook.react.bridge.ReactContext
import com.facebook.react.uimanager.UIManagerModule
import java.lang.StringBuilder

class RangeSliderView(context: Context): LinearLayout(context), OnRangeSeekbarChangeListener {
private var rangeSeekBar: CrystalRangeSeekbar
private var minTextView: TextView?
private var maxTextView: TextView?

private var minValue: Float = 0f
private var maxValue: Float = 100f

var suffix: String? = null
set(value) {
field = value
updateText()
}

var prefix: String? = null
set(value) {
field = value
updateText()
}

init {
inflate(context, R.layout.range_slider, this)
rangeSeekBar = findViewById(R.id.range_seek_bar)
rangeSeekBar.setOnRangeSeekbarChangeListener(this)

minTextView = findViewById(R.id.range_seek_bar_min)
maxTextView = findViewById(R.id.range_seek_bar_max)
updateText(minValue, maxValue)
}

fun setTintColorBetweenHandles(color: String) {
Expand Down Expand Up @@ -62,13 +79,15 @@ class RangeSliderView(context: Context): LinearLayout(context), OnRangeSeekbarCh
}

fun setMinValue(min: Float) {
minTextView?.text = min.toInt().toString()
minValue = min
rangeSeekBar.setMinValue(min)
updateText(minValue, maxValue)
}

fun setMaxValue(max: Float) {
maxTextView?.text = max.toInt().toString()
maxValue = max
rangeSeekBar.setMaxValue(max)
updateText(minValue, maxValue)
}

fun setMinStartValue(minStartValue: Float) {
Expand All @@ -87,11 +106,31 @@ class RangeSliderView(context: Context): LinearLayout(context), OnRangeSeekbarCh
rangeSeekBar.setSteps(steps)
}

override fun valueChanged(min: Number?, max: Number?) {
minTextView?.text = min?.toInt()?.toString()
maxTextView?.text = max?.toInt()?.toString()
private fun updateText(min: Number? = null, max: Number? = null) {
var minText = minTextView?.text
var maxText = minTextView?.text
if (min !== null) {
minText = min.toString()
}

if (max !== null) {
maxText = max.toString()
}

minTextView?.text = StringBuilder()
.append(prefix)
.append(minText)
.append(suffix)

maxTextView?.text = StringBuilder()
.append(prefix)
.append(maxText)
.append(suffix)
}

override fun valueChanged(min: Number?, max: Number?) {
if (max == null || min == null) return
updateText(min, max)

val event = RangeSliderChangeEvent(rangeSeekBar.id)
event.max = max.toDouble()
Expand Down
2 changes: 2 additions & 0 deletions example/android/app/src/main/res/values/dimens.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
5 changes: 3 additions & 2 deletions ios/RangeSlider.h → ios/RNRangeSlider.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@

@class RCTEventDispatcher;

@interface RangeSlider : UIView
@interface RNRangeSlider : UIView

// Define view properties here with @property
@property (nonatomic, assign) float minValue;
@property (nonatomic, assign) float maxValue;
Expand All @@ -31,7 +32,7 @@
@property (nonatomic, assign) float lineBorderWidth;
@property (nonatomic, assign) NSString* lineBorderColor;
@property (nonatomic, assign) NSString* suffix;
@property (nonatomic, assign) NSString* preffix;
@property (nonatomic, assign) NSString* prefix;
@property (nonatomic, assign) BOOL disableRange;
@property (nonatomic, assign) BOOL hideLabels;

Expand Down
10 changes: 5 additions & 5 deletions ios/RangeSlider.m → ios/RNRangeSlider.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
//

#import <Foundation/Foundation.h>
#import "RangeSlider.h"
#import "RNRangeSlider.h"

// import RCTEventDispatcher

Expand All @@ -25,7 +25,7 @@
#import "UIColor+Hex.h"
#import "TTRangeSlider.h"

@implementation RangeSlider {
@implementation RNRangeSlider {

RCTEventDispatcher *_eventDispatcher;

Expand Down Expand Up @@ -135,7 +135,7 @@ - (void) setLineBorderColor:(NSString *)lineBorderColor{
UIColor *color = [UIColor colorwithHexString:lineBorderColor alpha:1];
[_rangeSlider setLineBorderColor:color];
}
- (void) setPreffix:(NSString *)preffix
- (void) setPrefix:(NSString *)preffix
{
myPrefix = preffix;
NSNumberFormatter *customFormatter = [[NSNumberFormatter alloc] init];
Expand Down Expand Up @@ -223,8 +223,8 @@ - (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher


_rangeSlider = [[TTRangeSlider alloc] initWithFrame:CGRectZero];
_rangeSlider.minValue = _minValue ? _minValue:0;
_rangeSlider.maxValue = _maxValue ? _maxValue:100;
_rangeSlider.minValue = _minValue ? _minValue : 0;
_rangeSlider.maxValue = _maxValue ? _maxValue : 100;
_rangeSlider.selectedMinimum = _selectedMinimum;
_rangeSlider.selectedMaximum = _selectedMaximum;

Expand Down
2 changes: 1 addition & 1 deletion ios/RangeSliderManager.h → ios/RNRangeSliderManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

// Subclass your view manager off the RCTViewManager
// http://facebook.github.io/react-native/docs/native-components-ios.html#ios-mapview-example
@interface RangeSliderManager : RCTViewManager
@interface RNRangeSliderManager : RCTViewManager

@end

Expand Down
11 changes: 6 additions & 5 deletions ios/RangeSliderManager.m → ios/RNRangeSliderManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
//

#import <Foundation/Foundation.h>
#import "RangeSlider.h"
#import "RangeSliderManager.h"
#import "RNRangeSlider.h"
#import "RNRangeSliderManager.h"

// import RCTBridge
#if __has_include(<React/RCTBridge.h>)
Expand All @@ -18,7 +18,7 @@
#import "React/RCTBridge.h" // Required when used as a Pod in a Swift project
#endif

@implementation RangeSliderManager
@implementation RNRangeSliderManager

@synthesize bridge = _bridge;

Expand All @@ -28,7 +28,7 @@ @implementation RangeSliderManager
// Return the native view that represents your React component
- (UIView *)view
{
return [[RangeSlider alloc] initWithEventDispatcher:self.bridge.eventDispatcher];
return [[RNRangeSlider alloc] initWithEventDispatcher:self.bridge.eventDispatcher];
}

RCT_EXPORT_VIEW_PROPERTY(minValue, float)
Expand All @@ -46,7 +46,7 @@ - (UIView *)view
RCT_EXPORT_VIEW_PROPERTY(lineHeight, float);
RCT_EXPORT_VIEW_PROPERTY(lineBorderWidth, float);
RCT_EXPORT_VIEW_PROPERTY(lineBorderColor, NSString);
RCT_EXPORT_VIEW_PROPERTY(preffix, NSString);
RCT_EXPORT_VIEW_PROPERTY(prefix, NSString);
RCT_EXPORT_VIEW_PROPERTY(suffix, NSString);
RCT_EXPORT_VIEW_PROPERTY(disableRange, BOOL);
RCT_EXPORT_VIEW_PROPERTY(hideLabels, BOOL);
Expand All @@ -58,4 +58,5 @@ - (UIView *)view
RCT_EXPORT_VIEW_PROPERTY(step, float);
RCT_EXPORT_VIEW_PROPERTY(minDistance, float);
RCT_EXPORT_VIEW_PROPERTY(maxDistance, float);

@end

0 comments on commit 1e0de7e

Please sign in to comment.