@onekeyfe/react-native-segment-slider 3.0.53 → 3.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -3
- package/SegmentSlider.podspec +1 -1
- package/android/src/main/java/com/margelo/nitro/segmentslider/HybridSegmentSlider.kt +39 -11
- package/android/src/main/java/com/margelo/nitro/segmentslider/SegmentSliderColorParser.kt +19 -3
- package/ios/HybridSegmentSlider.swift +38 -13
- package/ios/SegmentSliderColorParser.swift +40 -9
- package/lib/module/index.js +7 -4
- package/lib/module/index.js.map +1 -1
- package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +9 -15
- package/lib/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +3 -5
- package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +2 -6
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +4 -8
- package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +11 -0
- package/lib/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +2 -0
- package/lib/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +10 -11
- package/lib/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +4 -9
- package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +2 -3
- package/lib/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +14 -14
- package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +3 -4
- package/lib/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +3 -5
- package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +7 -19
- package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +1 -2
- package/lib/nitrogen/generated/shared/json/SegmentSliderConfig.json +1 -2
- package/lib/typescript/src/SegmentSlider.nitro.d.ts +18 -8
- package/lib/typescript/src/SegmentSlider.nitro.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.cpp +9 -15
- package/nitrogen/generated/android/c++/JHybridSegmentSliderSpec.hpp +3 -5
- package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +2 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/HybridSegmentSliderSpec.kt +4 -8
- package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Bridge.hpp +11 -0
- package/nitrogen/generated/ios/SegmentSlider-Swift-Cxx-Umbrella.hpp +2 -0
- package/nitrogen/generated/ios/c++/HybridSegmentSliderSpecSwift.hpp +10 -11
- package/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +4 -9
- package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec.swift +2 -3
- package/nitrogen/generated/ios/swift/HybridSegmentSliderSpec_cxx.swift +14 -14
- package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.cpp +3 -4
- package/nitrogen/generated/shared/c++/HybridSegmentSliderSpec.hpp +3 -5
- package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +7 -19
- package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +1 -2
- package/nitrogen/generated/shared/json/SegmentSliderConfig.json +1 -2
- package/package.json +1 -1
- package/src/SegmentSlider.nitro.ts +20 -9
- package/src/index.tsx +16 -6
|
@@ -25,14 +25,14 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
25
25
|
const HybridSegmentSliderProps& sourceProps,
|
|
26
26
|
const react::RawProps& rawProps):
|
|
27
27
|
react::ViewProps(context, sourceProps, rawProps, filterObjectKeys),
|
|
28
|
-
|
|
28
|
+
defaultValue([&]() -> CachedProp<double> {
|
|
29
29
|
try {
|
|
30
|
-
const react::RawValue* rawValue = rawProps.at("
|
|
31
|
-
if (rawValue == nullptr) return sourceProps.
|
|
30
|
+
const react::RawValue* rawValue = rawProps.at("defaultValue", nullptr, nullptr);
|
|
31
|
+
if (rawValue == nullptr) return sourceProps.defaultValue;
|
|
32
32
|
const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
|
|
33
|
-
return CachedProp<double>::fromRawValue(*runtime, value, sourceProps.
|
|
33
|
+
return CachedProp<double>::fromRawValue(*runtime, value, sourceProps.defaultValue);
|
|
34
34
|
} catch (const std::exception& exc) {
|
|
35
|
-
throw std::runtime_error(std::string("SegmentSlider.
|
|
35
|
+
throw std::runtime_error(std::string("SegmentSlider.defaultValue: ") + exc.what());
|
|
36
36
|
}
|
|
37
37
|
}()),
|
|
38
38
|
min([&]() -> CachedProp<double> {
|
|
@@ -115,16 +115,6 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
115
115
|
throw std::runtime_error(std::string("SegmentSlider.snapTapToSegment: ") + exc.what());
|
|
116
116
|
}
|
|
117
117
|
}()),
|
|
118
|
-
epoch([&]() -> CachedProp<double> {
|
|
119
|
-
try {
|
|
120
|
-
const react::RawValue* rawValue = rawProps.at("epoch", nullptr, nullptr);
|
|
121
|
-
if (rawValue == nullptr) return sourceProps.epoch;
|
|
122
|
-
const auto& [runtime, value] = (std::pair<jsi::Runtime*, jsi::Value>)*rawValue;
|
|
123
|
-
return CachedProp<double>::fromRawValue(*runtime, value, sourceProps.epoch);
|
|
124
|
-
} catch (const std::exception& exc) {
|
|
125
|
-
throw std::runtime_error(std::string("SegmentSlider.epoch: ") + exc.what());
|
|
126
|
-
}
|
|
127
|
-
}()),
|
|
128
118
|
fillColor([&]() -> CachedProp<std::string> {
|
|
129
119
|
try {
|
|
130
120
|
const react::RawValue* rawValue = rawProps.at("fillColor", nullptr, nullptr);
|
|
@@ -258,7 +248,7 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
258
248
|
|
|
259
249
|
HybridSegmentSliderProps::HybridSegmentSliderProps(const HybridSegmentSliderProps& other):
|
|
260
250
|
react::ViewProps(),
|
|
261
|
-
|
|
251
|
+
defaultValue(other.defaultValue),
|
|
262
252
|
min(other.min),
|
|
263
253
|
max(other.max),
|
|
264
254
|
segments(other.segments),
|
|
@@ -267,7 +257,6 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
267
257
|
showBubble(other.showBubble),
|
|
268
258
|
centerOrigin(other.centerOrigin),
|
|
269
259
|
snapTapToSegment(other.snapTapToSegment),
|
|
270
|
-
epoch(other.epoch),
|
|
271
260
|
fillColor(other.fillColor),
|
|
272
261
|
trackColor(other.trackColor),
|
|
273
262
|
thumbColor(other.thumbColor),
|
|
@@ -284,7 +273,7 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
284
273
|
|
|
285
274
|
bool HybridSegmentSliderProps::filterObjectKeys(const std::string& propName) {
|
|
286
275
|
switch (hashString(propName)) {
|
|
287
|
-
case hashString("
|
|
276
|
+
case hashString("defaultValue"): return true;
|
|
288
277
|
case hashString("min"): return true;
|
|
289
278
|
case hashString("max"): return true;
|
|
290
279
|
case hashString("segments"): return true;
|
|
@@ -293,7 +282,6 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
293
282
|
case hashString("showBubble"): return true;
|
|
294
283
|
case hashString("centerOrigin"): return true;
|
|
295
284
|
case hashString("snapTapToSegment"): return true;
|
|
296
|
-
case hashString("epoch"): return true;
|
|
297
285
|
case hashString("fillColor"): return true;
|
|
298
286
|
case hashString("trackColor"): return true;
|
|
299
287
|
case hashString("thumbColor"): return true;
|
|
@@ -43,7 +43,7 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
43
43
|
const react::RawProps& rawProps);
|
|
44
44
|
|
|
45
45
|
public:
|
|
46
|
-
CachedProp<double>
|
|
46
|
+
CachedProp<double> defaultValue;
|
|
47
47
|
CachedProp<double> min;
|
|
48
48
|
CachedProp<double> max;
|
|
49
49
|
CachedProp<double> segments;
|
|
@@ -52,7 +52,6 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
52
52
|
CachedProp<bool> showBubble;
|
|
53
53
|
CachedProp<bool> centerOrigin;
|
|
54
54
|
CachedProp<bool> snapTapToSegment;
|
|
55
|
-
CachedProp<double> epoch;
|
|
56
55
|
CachedProp<std::string> fillColor;
|
|
57
56
|
CachedProp<std::string> trackColor;
|
|
58
57
|
CachedProp<std::string> thumbColor;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"bubblingEventTypes": {},
|
|
5
5
|
"directEventTypes": {},
|
|
6
6
|
"validAttributes": {
|
|
7
|
-
"
|
|
7
|
+
"defaultValue": true,
|
|
8
8
|
"min": true,
|
|
9
9
|
"max": true,
|
|
10
10
|
"segments": true,
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
"showBubble": true,
|
|
14
14
|
"centerOrigin": true,
|
|
15
15
|
"snapTapToSegment": true,
|
|
16
|
-
"epoch": true,
|
|
17
16
|
"fillColor": true,
|
|
18
17
|
"trackColor": true,
|
|
19
18
|
"thumbColor": true,
|
package/package.json
CHANGED
|
@@ -24,8 +24,16 @@ import type {
|
|
|
24
24
|
* hex / rgba() strings so the native side never depends on the theme system.
|
|
25
25
|
*/
|
|
26
26
|
export interface SegmentSliderProps extends HybridViewProps {
|
|
27
|
-
/**
|
|
28
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Initial value, applied ONCE when the view mounts. The slider is
|
|
29
|
+
* UNCONTROLLED: after mount the native view owns the value (driven by the
|
|
30
|
+
* pan gesture and reported via `onChange`). To set the value imperatively
|
|
31
|
+
* from JS — e.g. a leverage / coin reset — call the `setValue` method on the
|
|
32
|
+
* hybrid ref instead of re-rendering with a new prop. This keeps reset (and
|
|
33
|
+
* any high-rate) updates off the Fabric prop-commit path (REACT-NATIVE-1JZ)
|
|
34
|
+
* and removes the controlled-value-vs-drag conflict entirely.
|
|
35
|
+
*/
|
|
36
|
+
defaultValue: number;
|
|
29
37
|
/** Range minimum (default range 0..100). */
|
|
30
38
|
min: number;
|
|
31
39
|
/** Range maximum. */
|
|
@@ -47,12 +55,6 @@ export interface SegmentSliderProps extends HybridViewProps {
|
|
|
47
55
|
* callers keep the free-tap behavior.
|
|
48
56
|
*/
|
|
49
57
|
snapTapToSegment: boolean;
|
|
50
|
-
/**
|
|
51
|
-
* Monotonic token. Bump from JS on coin / leverage reset so the native view
|
|
52
|
-
* snaps to the new value WITHOUT animating the thumb scale. Mirrors the
|
|
53
|
-
* `epoch` convention used by react-native-perp-depth-bar.
|
|
54
|
-
*/
|
|
55
|
-
epoch: number;
|
|
56
58
|
|
|
57
59
|
// --- Resolved theme colors (hex `#rgb`/`#rrggbb`/`#rrggbbaa` or rgba()) ---
|
|
58
60
|
/** Active fill bar color (Tamagui `bgPrimary`). */
|
|
@@ -82,6 +84,15 @@ export interface SegmentSliderProps extends HybridViewProps {
|
|
|
82
84
|
onSlideComplete?: () => void;
|
|
83
85
|
}
|
|
84
86
|
|
|
85
|
-
export interface SegmentSliderMethods extends HybridViewMethods {
|
|
87
|
+
export interface SegmentSliderMethods extends HybridViewMethods {
|
|
88
|
+
/**
|
|
89
|
+
* Imperatively set the slider value (clamped to `min..max`). Hard-snaps the
|
|
90
|
+
* thumb to the new value, cancelling any in-flight drag, and does NOT fire
|
|
91
|
+
* `onChange` (the JS caller already knows the value, so re-emitting would
|
|
92
|
+
* loop). This is the supported way to update the value after mount — see
|
|
93
|
+
* `defaultValue`.
|
|
94
|
+
*/
|
|
95
|
+
setValue(value: number): void;
|
|
96
|
+
}
|
|
86
97
|
|
|
87
98
|
export type SegmentSlider = HybridView<SegmentSliderProps, SegmentSliderMethods>;
|
package/src/index.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useRef } from 'react';
|
|
1
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import { type ViewProps } from 'react-native';
|
|
4
4
|
import { callback, getHostComponent } from 'react-native-nitro-modules';
|
|
@@ -45,15 +45,25 @@ export function SegmentSliderView({
|
|
|
45
45
|
const stableOnSlideComplete = useCallback(() => {
|
|
46
46
|
onSlideCompleteRef.current?.();
|
|
47
47
|
}, []);
|
|
48
|
+
const onChangeCallback = useMemo(
|
|
49
|
+
() => callback(stableOnChange),
|
|
50
|
+
[stableOnChange],
|
|
51
|
+
);
|
|
52
|
+
const onSlideStartCallback = useMemo(
|
|
53
|
+
() => callback(stableOnSlideStart),
|
|
54
|
+
[stableOnSlideStart],
|
|
55
|
+
);
|
|
56
|
+
const onSlideCompleteCallback = useMemo(
|
|
57
|
+
() => callback(stableOnSlideComplete),
|
|
58
|
+
[stableOnSlideComplete],
|
|
59
|
+
);
|
|
48
60
|
|
|
49
61
|
return (
|
|
50
62
|
<SegmentSliderHost
|
|
51
63
|
{...props}
|
|
52
|
-
onChange={onChange ?
|
|
53
|
-
onSlideStart={onSlideStart ?
|
|
54
|
-
onSlideComplete={
|
|
55
|
-
onSlideComplete ? callback(stableOnSlideComplete) : undefined
|
|
56
|
-
}
|
|
64
|
+
onChange={onChange ? onChangeCallback : undefined}
|
|
65
|
+
onSlideStart={onSlideStart ? onSlideStartCallback : undefined}
|
|
66
|
+
onSlideComplete={onSlideComplete ? onSlideCompleteCallback : undefined}
|
|
57
67
|
/>
|
|
58
68
|
);
|
|
59
69
|
}
|