@onekeyfe/react-native-segment-slider 3.0.95 → 3.0.98
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/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +137 -99
- package/lib/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +6 -1
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +26 -10
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +2 -2
- package/lib/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +163 -121
- package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +26 -255
- package/lib/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +83 -69
- package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.cpp +137 -99
- package/nitrogen/generated/android/c++/views/JHybridSegmentSliderStateUpdater.hpp +6 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderManager.kt +26 -10
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/segmentslider/views/HybridSegmentSliderStateUpdater.kt +2 -2
- package/nitrogen/generated/ios/c++/views/HybridSegmentSliderComponent.mm +163 -121
- package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.cpp +26 -255
- package/nitrogen/generated/shared/c++/views/HybridSegmentSliderComponent.hpp +83 -69
- package/package.json +4 -4
|
@@ -15,121 +15,159 @@ namespace margelo::nitro::segmentslider::views {
|
|
|
15
15
|
using namespace facebook;
|
|
16
16
|
using ConcreteStateData = react::ConcreteState<HybridSegmentSliderState>;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
std::shared_ptr<const HybridSegmentSliderProps> JHybridSegmentSliderStateUpdater::getPropsFromStateWrapper(
|
|
19
|
+
jni::alias_ref<JStateWrapper::javaobject> stateWrapper) {
|
|
20
|
+
if (stateWrapper.get() == nullptr) {
|
|
21
|
+
return nullptr;
|
|
22
|
+
}
|
|
23
23
|
// Get concrete StateWrapperImpl from passed StateWrapper interface object
|
|
24
|
-
jobject rawStateWrapper =
|
|
25
|
-
if (!
|
|
26
|
-
|
|
24
|
+
jobject rawStateWrapper = stateWrapper.get();
|
|
25
|
+
if (!stateWrapper->isInstanceOf(react::StateWrapperImpl::javaClassStatic())) [[unlikely]] {
|
|
26
|
+
throw std::runtime_error("StateWrapper is not a StateWrapperImpl");
|
|
27
|
+
}
|
|
28
|
+
auto stateWrapperImpl = jni::alias_ref<react::StateWrapperImpl::javaobject>{
|
|
29
|
+
static_cast<react::StateWrapperImpl::javaobject>(rawStateWrapper)
|
|
30
|
+
};
|
|
31
|
+
std::shared_ptr<const react::State> state = stateWrapperImpl->cthis()->getState();
|
|
32
|
+
if (state == nullptr) {
|
|
33
|
+
return nullptr;
|
|
27
34
|
}
|
|
28
|
-
auto stateWrapper = jni::alias_ref<react::StateWrapperImpl::javaobject>{
|
|
29
|
-
static_cast<react::StateWrapperImpl::javaobject>(rawStateWrapper)};
|
|
30
|
-
std::shared_ptr<const react::State> state = stateWrapper->cthis()->getState();
|
|
31
35
|
auto concreteState = std::static_pointer_cast<const ConcreteStateData>(state);
|
|
32
36
|
const HybridSegmentSliderState& data = concreteState->getData();
|
|
33
|
-
const std::shared_ptr<HybridSegmentSliderProps>& props = data.getProps();
|
|
37
|
+
const std::shared_ptr<const HybridSegmentSliderProps>& props = data.getProps();
|
|
34
38
|
if (props == nullptr) [[unlikely]] {
|
|
35
|
-
// Props aren't set yet!
|
|
36
39
|
throw std::runtime_error("HybridSegmentSliderState's data doesn't contain any props!");
|
|
37
40
|
}
|
|
41
|
+
return props;
|
|
42
|
+
}
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (props->max.isDirty) {
|
|
49
|
-
hybridView->setMax(props->max.value);
|
|
50
|
-
props->max.isDirty = false;
|
|
51
|
-
}
|
|
52
|
-
if (props->segments.isDirty) {
|
|
53
|
-
hybridView->setSegments(props->segments.value);
|
|
54
|
-
props->segments.isDirty = false;
|
|
55
|
-
}
|
|
56
|
-
if (props->sliderHeight.isDirty) {
|
|
57
|
-
hybridView->setSliderHeight(props->sliderHeight.value);
|
|
58
|
-
props->sliderHeight.isDirty = false;
|
|
59
|
-
}
|
|
60
|
-
if (props->disabled.isDirty) {
|
|
61
|
-
hybridView->setDisabled(props->disabled.value);
|
|
62
|
-
props->disabled.isDirty = false;
|
|
63
|
-
}
|
|
64
|
-
if (props->showBubble.isDirty) {
|
|
65
|
-
hybridView->setShowBubble(props->showBubble.value);
|
|
66
|
-
props->showBubble.isDirty = false;
|
|
67
|
-
}
|
|
68
|
-
if (props->centerOrigin.isDirty) {
|
|
69
|
-
hybridView->setCenterOrigin(props->centerOrigin.value);
|
|
70
|
-
props->centerOrigin.isDirty = false;
|
|
71
|
-
}
|
|
72
|
-
if (props->snapTapToSegment.isDirty) {
|
|
73
|
-
hybridView->setSnapTapToSegment(props->snapTapToSegment.value);
|
|
74
|
-
props->snapTapToSegment.isDirty = false;
|
|
75
|
-
}
|
|
76
|
-
if (props->fillColor.isDirty) {
|
|
77
|
-
hybridView->setFillColor(props->fillColor.value);
|
|
78
|
-
props->fillColor.isDirty = false;
|
|
79
|
-
}
|
|
80
|
-
if (props->trackColor.isDirty) {
|
|
81
|
-
hybridView->setTrackColor(props->trackColor.value);
|
|
82
|
-
props->trackColor.isDirty = false;
|
|
83
|
-
}
|
|
84
|
-
if (props->thumbColor.isDirty) {
|
|
85
|
-
hybridView->setThumbColor(props->thumbColor.value);
|
|
86
|
-
props->thumbColor.isDirty = false;
|
|
87
|
-
}
|
|
88
|
-
if (props->thumbBorderColor.isDirty) {
|
|
89
|
-
hybridView->setThumbBorderColor(props->thumbBorderColor.value);
|
|
90
|
-
props->thumbBorderColor.isDirty = false;
|
|
91
|
-
}
|
|
92
|
-
if (props->markActiveColor.isDirty) {
|
|
93
|
-
hybridView->setMarkActiveColor(props->markActiveColor.value);
|
|
94
|
-
props->markActiveColor.isDirty = false;
|
|
95
|
-
}
|
|
96
|
-
if (props->markInactiveColor.isDirty) {
|
|
97
|
-
hybridView->setMarkInactiveColor(props->markInactiveColor.value);
|
|
98
|
-
props->markInactiveColor.isDirty = false;
|
|
99
|
-
}
|
|
100
|
-
if (props->markBorderColor.isDirty) {
|
|
101
|
-
hybridView->setMarkBorderColor(props->markBorderColor.value);
|
|
102
|
-
props->markBorderColor.isDirty = false;
|
|
103
|
-
}
|
|
104
|
-
if (props->bubbleColor.isDirty) {
|
|
105
|
-
hybridView->setBubbleColor(props->bubbleColor.value);
|
|
106
|
-
props->bubbleColor.isDirty = false;
|
|
107
|
-
}
|
|
108
|
-
if (props->bubbleTextColor.isDirty) {
|
|
109
|
-
hybridView->setBubbleTextColor(props->bubbleTextColor.value);
|
|
110
|
-
props->bubbleTextColor.isDirty = false;
|
|
111
|
-
}
|
|
112
|
-
if (props->onChange.isDirty) {
|
|
113
|
-
hybridView->setOnChange(props->onChange.value);
|
|
114
|
-
props->onChange.isDirty = false;
|
|
115
|
-
}
|
|
116
|
-
if (props->onSlideStart.isDirty) {
|
|
117
|
-
hybridView->setOnSlideStart(props->onSlideStart.value);
|
|
118
|
-
props->onSlideStart.isDirty = false;
|
|
44
|
+
void JHybridSegmentSliderStateUpdater::updateViewProps(jni::alias_ref<jni::JClass> /* class */,
|
|
45
|
+
jni::alias_ref<JHybridSegmentSliderSpec::JavaPart> javaView,
|
|
46
|
+
jni::alias_ref<JStateWrapper::javaobject> newState,
|
|
47
|
+
jni::alias_ref<JStateWrapper::javaobject> oldState) {
|
|
48
|
+
std::shared_ptr<JHybridSegmentSliderSpec> hybridView = javaView->getJHybridSegmentSliderSpec();
|
|
49
|
+
std::shared_ptr<const HybridSegmentSliderProps> newProps = getPropsFromStateWrapper(newState);
|
|
50
|
+
std::shared_ptr<const HybridSegmentSliderProps> oldProps = getPropsFromStateWrapper(oldState);
|
|
51
|
+
if (newProps == nullptr) [[unlikely]] {
|
|
52
|
+
throw std::runtime_error("Current StateWrapper doesn't contain any props!");
|
|
119
53
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
54
|
+
|
|
55
|
+
// Update only props that differ from the previous State snapshot.
|
|
56
|
+
if (oldProps == nullptr
|
|
57
|
+
? newProps->defaultValue.isProvided()
|
|
58
|
+
: !newProps->defaultValue.hasSameValue(oldProps->defaultValue)) {
|
|
59
|
+
hybridView->setDefaultValue(newProps->defaultValue.get());
|
|
60
|
+
}
|
|
61
|
+
if (oldProps == nullptr
|
|
62
|
+
? newProps->min.isProvided()
|
|
63
|
+
: !newProps->min.hasSameValue(oldProps->min)) {
|
|
64
|
+
hybridView->setMin(newProps->min.get());
|
|
65
|
+
}
|
|
66
|
+
if (oldProps == nullptr
|
|
67
|
+
? newProps->max.isProvided()
|
|
68
|
+
: !newProps->max.hasSameValue(oldProps->max)) {
|
|
69
|
+
hybridView->setMax(newProps->max.get());
|
|
70
|
+
}
|
|
71
|
+
if (oldProps == nullptr
|
|
72
|
+
? newProps->segments.isProvided()
|
|
73
|
+
: !newProps->segments.hasSameValue(oldProps->segments)) {
|
|
74
|
+
hybridView->setSegments(newProps->segments.get());
|
|
75
|
+
}
|
|
76
|
+
if (oldProps == nullptr
|
|
77
|
+
? newProps->sliderHeight.isProvided()
|
|
78
|
+
: !newProps->sliderHeight.hasSameValue(oldProps->sliderHeight)) {
|
|
79
|
+
hybridView->setSliderHeight(newProps->sliderHeight.get());
|
|
80
|
+
}
|
|
81
|
+
if (oldProps == nullptr
|
|
82
|
+
? newProps->disabled.isProvided()
|
|
83
|
+
: !newProps->disabled.hasSameValue(oldProps->disabled)) {
|
|
84
|
+
hybridView->setDisabled(newProps->disabled.get());
|
|
85
|
+
}
|
|
86
|
+
if (oldProps == nullptr
|
|
87
|
+
? newProps->showBubble.isProvided()
|
|
88
|
+
: !newProps->showBubble.hasSameValue(oldProps->showBubble)) {
|
|
89
|
+
hybridView->setShowBubble(newProps->showBubble.get());
|
|
90
|
+
}
|
|
91
|
+
if (oldProps == nullptr
|
|
92
|
+
? newProps->centerOrigin.isProvided()
|
|
93
|
+
: !newProps->centerOrigin.hasSameValue(oldProps->centerOrigin)) {
|
|
94
|
+
hybridView->setCenterOrigin(newProps->centerOrigin.get());
|
|
95
|
+
}
|
|
96
|
+
if (oldProps == nullptr
|
|
97
|
+
? newProps->snapTapToSegment.isProvided()
|
|
98
|
+
: !newProps->snapTapToSegment.hasSameValue(oldProps->snapTapToSegment)) {
|
|
99
|
+
hybridView->setSnapTapToSegment(newProps->snapTapToSegment.get());
|
|
100
|
+
}
|
|
101
|
+
if (oldProps == nullptr
|
|
102
|
+
? newProps->fillColor.isProvided()
|
|
103
|
+
: !newProps->fillColor.hasSameValue(oldProps->fillColor)) {
|
|
104
|
+
hybridView->setFillColor(newProps->fillColor.get());
|
|
105
|
+
}
|
|
106
|
+
if (oldProps == nullptr
|
|
107
|
+
? newProps->trackColor.isProvided()
|
|
108
|
+
: !newProps->trackColor.hasSameValue(oldProps->trackColor)) {
|
|
109
|
+
hybridView->setTrackColor(newProps->trackColor.get());
|
|
110
|
+
}
|
|
111
|
+
if (oldProps == nullptr
|
|
112
|
+
? newProps->thumbColor.isProvided()
|
|
113
|
+
: !newProps->thumbColor.hasSameValue(oldProps->thumbColor)) {
|
|
114
|
+
hybridView->setThumbColor(newProps->thumbColor.get());
|
|
115
|
+
}
|
|
116
|
+
if (oldProps == nullptr
|
|
117
|
+
? newProps->thumbBorderColor.isProvided()
|
|
118
|
+
: !newProps->thumbBorderColor.hasSameValue(oldProps->thumbBorderColor)) {
|
|
119
|
+
hybridView->setThumbBorderColor(newProps->thumbBorderColor.get());
|
|
120
|
+
}
|
|
121
|
+
if (oldProps == nullptr
|
|
122
|
+
? newProps->markActiveColor.isProvided()
|
|
123
|
+
: !newProps->markActiveColor.hasSameValue(oldProps->markActiveColor)) {
|
|
124
|
+
hybridView->setMarkActiveColor(newProps->markActiveColor.get());
|
|
125
|
+
}
|
|
126
|
+
if (oldProps == nullptr
|
|
127
|
+
? newProps->markInactiveColor.isProvided()
|
|
128
|
+
: !newProps->markInactiveColor.hasSameValue(oldProps->markInactiveColor)) {
|
|
129
|
+
hybridView->setMarkInactiveColor(newProps->markInactiveColor.get());
|
|
130
|
+
}
|
|
131
|
+
if (oldProps == nullptr
|
|
132
|
+
? newProps->markBorderColor.isProvided()
|
|
133
|
+
: !newProps->markBorderColor.hasSameValue(oldProps->markBorderColor)) {
|
|
134
|
+
hybridView->setMarkBorderColor(newProps->markBorderColor.get());
|
|
135
|
+
}
|
|
136
|
+
if (oldProps == nullptr
|
|
137
|
+
? newProps->bubbleColor.isProvided()
|
|
138
|
+
: !newProps->bubbleColor.hasSameValue(oldProps->bubbleColor)) {
|
|
139
|
+
hybridView->setBubbleColor(newProps->bubbleColor.get());
|
|
140
|
+
}
|
|
141
|
+
if (oldProps == nullptr
|
|
142
|
+
? newProps->bubbleTextColor.isProvided()
|
|
143
|
+
: !newProps->bubbleTextColor.hasSameValue(oldProps->bubbleTextColor)) {
|
|
144
|
+
hybridView->setBubbleTextColor(newProps->bubbleTextColor.get());
|
|
145
|
+
}
|
|
146
|
+
if (oldProps == nullptr
|
|
147
|
+
? newProps->onChange.isProvided()
|
|
148
|
+
: !newProps->onChange.hasSameValue(oldProps->onChange)) {
|
|
149
|
+
hybridView->setOnChange(newProps->onChange.get());
|
|
150
|
+
}
|
|
151
|
+
if (oldProps == nullptr
|
|
152
|
+
? newProps->onSlideStart.isProvided()
|
|
153
|
+
: !newProps->onSlideStart.hasSameValue(oldProps->onSlideStart)) {
|
|
154
|
+
hybridView->setOnSlideStart(newProps->onSlideStart.get());
|
|
155
|
+
}
|
|
156
|
+
if (oldProps == nullptr
|
|
157
|
+
? newProps->onSlideComplete.isProvided()
|
|
158
|
+
: !newProps->onSlideComplete.hasSameValue(oldProps->onSlideComplete)) {
|
|
159
|
+
hybridView->setOnSlideComplete(newProps->onSlideComplete.get());
|
|
123
160
|
}
|
|
124
161
|
|
|
125
162
|
// Update hybridRef if it changed
|
|
126
|
-
if (
|
|
163
|
+
if (oldProps == nullptr
|
|
164
|
+
? newProps->hybridRef.isProvided()
|
|
165
|
+
: !newProps->hybridRef.hasSameValue(oldProps->hybridRef)) {
|
|
127
166
|
// hybridRef changed - call it with new this
|
|
128
|
-
const auto& maybeFunc =
|
|
167
|
+
const auto& maybeFunc = newProps->hybridRef.get();
|
|
129
168
|
if (maybeFunc.has_value()) {
|
|
130
169
|
maybeFunc.value()(hybridView);
|
|
131
170
|
}
|
|
132
|
-
props->hybridRef.isDirty = false;
|
|
133
171
|
}
|
|
134
172
|
}
|
|
135
173
|
|
|
@@ -31,7 +31,12 @@ public:
|
|
|
31
31
|
public:
|
|
32
32
|
static void updateViewProps(jni::alias_ref<jni::JClass> /* class */,
|
|
33
33
|
jni::alias_ref<JHybridSegmentSliderSpec::JavaPart> view,
|
|
34
|
-
jni::alias_ref<JStateWrapper::javaobject>
|
|
34
|
+
jni::alias_ref<JStateWrapper::javaobject> newState,
|
|
35
|
+
jni::alias_ref<JStateWrapper::javaobject> oldState);
|
|
36
|
+
|
|
37
|
+
private:
|
|
38
|
+
static std::shared_ptr<const HybridSegmentSliderProps> getPropsFromStateWrapper(
|
|
39
|
+
jni::alias_ref<JStateWrapper::javaobject> stateWrapper);
|
|
35
40
|
|
|
36
41
|
public:
|
|
37
42
|
static void registerNatives() {
|
|
@@ -20,6 +20,14 @@ import com.margelo.nitro.segmentslider.*
|
|
|
20
20
|
* Represents the React Native `ViewManager` for the "SegmentSlider" Nitro HybridView.
|
|
21
21
|
*/
|
|
22
22
|
public class HybridSegmentSliderManager: SimpleViewManager<View>() {
|
|
23
|
+
/**
|
|
24
|
+
* Represents the View and its last state snapshot (mutable)
|
|
25
|
+
*/
|
|
26
|
+
private class HybridViewHolder(
|
|
27
|
+
val hybridView: HybridSegmentSlider,
|
|
28
|
+
var lastState: StateWrapper? = null,
|
|
29
|
+
)
|
|
30
|
+
|
|
23
31
|
init {
|
|
24
32
|
if (RecyclableView::class.java.isAssignableFrom(HybridSegmentSlider::class.java)) {
|
|
25
33
|
// Enable view recycling
|
|
@@ -34,33 +42,41 @@ public class HybridSegmentSliderManager: SimpleViewManager<View>() {
|
|
|
34
42
|
override fun createViewInstance(reactContext: ThemedReactContext): View {
|
|
35
43
|
val hybridView = HybridSegmentSlider(reactContext)
|
|
36
44
|
val view = hybridView.view
|
|
37
|
-
view.setTag(associated_hybrid_view_tag, hybridView)
|
|
45
|
+
view.setTag(associated_hybrid_view_tag, HybridViewHolder(hybridView))
|
|
38
46
|
return view
|
|
39
47
|
}
|
|
40
48
|
|
|
41
49
|
override fun updateState(view: View, props: ReactStylesDiffMap, stateWrapper: StateWrapper): Any? {
|
|
42
|
-
val
|
|
50
|
+
val holder = getHybridViewHolder(view)
|
|
43
51
|
?: throw Error("Couldn't find view $view in local views table!")
|
|
52
|
+
val hybridView = holder.hybridView
|
|
53
|
+
val oldState = holder.lastState
|
|
54
|
+
val newState = stateWrapper
|
|
44
55
|
|
|
45
56
|
// 1. Update each prop individually
|
|
46
57
|
hybridView.beforeUpdate()
|
|
47
|
-
HybridSegmentSliderStateUpdater.updateViewProps(hybridView,
|
|
58
|
+
HybridSegmentSliderStateUpdater.updateViewProps(hybridView, newState, oldState)
|
|
48
59
|
hybridView.afterUpdate()
|
|
60
|
+
holder.lastState = newState
|
|
49
61
|
|
|
50
62
|
// 2. Continue in base View props
|
|
51
|
-
return super.updateState(view, props,
|
|
63
|
+
return super.updateState(view, props, newState)
|
|
52
64
|
}
|
|
53
65
|
|
|
54
66
|
override fun onDropViewInstance(view: View) {
|
|
55
|
-
val
|
|
56
|
-
|
|
67
|
+
val holder = getHybridViewHolder(view)
|
|
68
|
+
holder?.lastState = null
|
|
69
|
+
holder?.hybridView?.onDropView()
|
|
57
70
|
return super.onDropViewInstance(view)
|
|
58
71
|
}
|
|
59
72
|
|
|
60
73
|
protected override fun prepareToRecycleView(reactContext: ThemedReactContext, view: View): View? {
|
|
61
|
-
super.prepareToRecycleView(reactContext, view)
|
|
62
|
-
|
|
74
|
+
val preparedView = super.prepareToRecycleView(reactContext, view)
|
|
75
|
+
?: return null
|
|
76
|
+
val holder = getHybridViewHolder(preparedView)
|
|
63
77
|
?: return null
|
|
78
|
+
val hybridView = holder.hybridView
|
|
79
|
+
holder.lastState = null
|
|
64
80
|
|
|
65
81
|
@Suppress("USELESS_IS_CHECK")
|
|
66
82
|
if (hybridView is RecyclableView) {
|
|
@@ -74,7 +90,7 @@ public class HybridSegmentSliderManager: SimpleViewManager<View>() {
|
|
|
74
90
|
}
|
|
75
91
|
}
|
|
76
92
|
|
|
77
|
-
private fun
|
|
78
|
-
return view.getTag(associated_hybrid_view_tag) as?
|
|
93
|
+
private fun getHybridViewHolder(view: View): HybridViewHolder? {
|
|
94
|
+
return view.getTag(associated_hybrid_view_tag) as? HybridViewHolder
|
|
79
95
|
}
|
|
80
96
|
}
|
|
@@ -14,10 +14,10 @@ internal class HybridSegmentSliderStateUpdater {
|
|
|
14
14
|
companion object {
|
|
15
15
|
/**
|
|
16
16
|
* Updates the props for [view] through C++.
|
|
17
|
-
* The [
|
|
17
|
+
* The [newState] prop is expected to contain [view]'s props as wrapped Fabric state.
|
|
18
18
|
*/
|
|
19
19
|
@Suppress("KotlinJniMissingFunction")
|
|
20
20
|
@JvmStatic
|
|
21
|
-
external fun updateViewProps(view: HybridSegmentSliderSpec,
|
|
21
|
+
external fun updateViewProps(view: HybridSegmentSliderSpec, newState: StateWrapper, oldState: StateWrapper?)
|
|
22
22
|
}
|
|
23
23
|
}
|