@onekeyfe/react-native-perp-depth-bar 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/JHybridPerpDepthBarsStateUpdater.cpp +122 -87
- package/lib/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.hpp +6 -1
- package/lib/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.cpp +66 -41
- package/lib/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.hpp +6 -1
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsManager.kt +26 -10
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsStateUpdater.kt +2 -2
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioManager.kt +26 -10
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioStateUpdater.kt +2 -2
- package/lib/nitrogen/generated/ios/c++/views/HybridPerpDepthBarsComponent.mm +146 -107
- package/lib/nitrogen/generated/ios/c++/views/HybridPerpSideRatioComponent.mm +86 -57
- package/lib/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.cpp +23 -225
- package/lib/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.hpp +74 -66
- package/lib/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.cpp +13 -125
- package/lib/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.hpp +44 -56
- package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.cpp +122 -87
- package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.hpp +6 -1
- package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.cpp +66 -41
- package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.hpp +6 -1
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsManager.kt +26 -10
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsStateUpdater.kt +2 -2
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioManager.kt +26 -10
- package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioStateUpdater.kt +2 -2
- package/lib/nitrogen/nitrogen/generated/ios/c++/views/HybridPerpDepthBarsComponent.mm +146 -107
- package/lib/nitrogen/nitrogen/generated/ios/c++/views/HybridPerpSideRatioComponent.mm +86 -57
- package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.cpp +23 -225
- package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.hpp +74 -66
- package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.cpp +13 -125
- package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.hpp +44 -56
- package/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.cpp +122 -87
- package/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.hpp +6 -1
- package/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.cpp +66 -41
- package/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.hpp +6 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsManager.kt +26 -10
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsStateUpdater.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioManager.kt +26 -10
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioStateUpdater.kt +2 -2
- package/nitrogen/generated/ios/c++/views/HybridPerpDepthBarsComponent.mm +146 -107
- package/nitrogen/generated/ios/c++/views/HybridPerpSideRatioComponent.mm +86 -57
- package/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.cpp +23 -225
- package/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.hpp +74 -66
- package/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.cpp +13 -125
- package/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.hpp +44 -56
- package/package.json +4 -4
|
@@ -15,109 +15,144 @@ namespace margelo::nitro::perpdepthbar::views {
|
|
|
15
15
|
using namespace facebook;
|
|
16
16
|
using ConcreteStateData = react::ConcreteState<HybridPerpDepthBarsState>;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
std::shared_ptr<const HybridPerpDepthBarsProps> JHybridPerpDepthBarsStateUpdater::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 HybridPerpDepthBarsState& data = concreteState->getData();
|
|
33
|
-
const std::shared_ptr<HybridPerpDepthBarsProps>& props = data.getProps();
|
|
37
|
+
const std::shared_ptr<const HybridPerpDepthBarsProps>& props = data.getProps();
|
|
34
38
|
if (props == nullptr) [[unlikely]] {
|
|
35
|
-
// Props aren't set yet!
|
|
36
39
|
throw std::runtime_error("HybridPerpDepthBarsState'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->rowMarginTop.isDirty) {
|
|
49
|
-
hybridView->setRowMarginTop(props->rowMarginTop.value);
|
|
50
|
-
props->rowMarginTop.isDirty = false;
|
|
51
|
-
}
|
|
52
|
-
if (props->barInset.isDirty) {
|
|
53
|
-
hybridView->setBarInset(props->barInset.value);
|
|
54
|
-
props->barInset.isDirty = false;
|
|
55
|
-
}
|
|
56
|
-
if (props->color.isDirty) {
|
|
57
|
-
hybridView->setColor(props->color.value);
|
|
58
|
-
props->color.isDirty = false;
|
|
59
|
-
}
|
|
60
|
-
if (props->origin.isDirty) {
|
|
61
|
-
hybridView->setOrigin(props->origin.value);
|
|
62
|
-
props->origin.isDirty = false;
|
|
63
|
-
}
|
|
64
|
-
if (props->reducedMotion.isDirty) {
|
|
65
|
-
hybridView->setReducedMotion(props->reducedMotion.value);
|
|
66
|
-
props->reducedMotion.isDirty = false;
|
|
67
|
-
}
|
|
68
|
-
if (props->epoch.isDirty) {
|
|
69
|
-
hybridView->setEpoch(props->epoch.value);
|
|
70
|
-
props->epoch.isDirty = false;
|
|
71
|
-
}
|
|
72
|
-
if (props->prices.isDirty) {
|
|
73
|
-
hybridView->setPrices(props->prices.value);
|
|
74
|
-
props->prices.isDirty = false;
|
|
75
|
-
}
|
|
76
|
-
if (props->sizes.isDirty) {
|
|
77
|
-
hybridView->setSizes(props->sizes.value);
|
|
78
|
-
props->sizes.isDirty = false;
|
|
79
|
-
}
|
|
80
|
-
if (props->priceColor.isDirty) {
|
|
81
|
-
hybridView->setPriceColor(props->priceColor.value);
|
|
82
|
-
props->priceColor.isDirty = false;
|
|
83
|
-
}
|
|
84
|
-
if (props->sizeColor.isDirty) {
|
|
85
|
-
hybridView->setSizeColor(props->sizeColor.value);
|
|
86
|
-
props->sizeColor.isDirty = false;
|
|
87
|
-
}
|
|
88
|
-
if (props->priceFontSize.isDirty) {
|
|
89
|
-
hybridView->setPriceFontSize(props->priceFontSize.value);
|
|
90
|
-
props->priceFontSize.isDirty = false;
|
|
91
|
-
}
|
|
92
|
-
if (props->sizeFontSize.isDirty) {
|
|
93
|
-
hybridView->setSizeFontSize(props->sizeFontSize.value);
|
|
94
|
-
props->sizeFontSize.isDirty = false;
|
|
95
|
-
}
|
|
96
|
-
if (props->textInset.isDirty) {
|
|
97
|
-
hybridView->setTextInset(props->textInset.value);
|
|
98
|
-
props->textInset.isDirty = false;
|
|
99
|
-
}
|
|
100
|
-
if (props->placeholderText.isDirty) {
|
|
101
|
-
hybridView->setPlaceholderText(props->placeholderText.value);
|
|
102
|
-
props->placeholderText.isDirty = false;
|
|
103
|
-
}
|
|
104
|
-
if (props->placeholderRows.isDirty) {
|
|
105
|
-
hybridView->setPlaceholderRows(props->placeholderRows.value);
|
|
106
|
-
props->placeholderRows.isDirty = false;
|
|
44
|
+
void JHybridPerpDepthBarsStateUpdater::updateViewProps(jni::alias_ref<jni::JClass> /* class */,
|
|
45
|
+
jni::alias_ref<JHybridPerpDepthBarsSpec::JavaPart> javaView,
|
|
46
|
+
jni::alias_ref<JStateWrapper::javaobject> newState,
|
|
47
|
+
jni::alias_ref<JStateWrapper::javaobject> oldState) {
|
|
48
|
+
std::shared_ptr<JHybridPerpDepthBarsSpec> hybridView = javaView->getJHybridPerpDepthBarsSpec();
|
|
49
|
+
std::shared_ptr<const HybridPerpDepthBarsProps> newProps = getPropsFromStateWrapper(newState);
|
|
50
|
+
std::shared_ptr<const HybridPerpDepthBarsProps> oldProps = getPropsFromStateWrapper(oldState);
|
|
51
|
+
if (newProps == nullptr) [[unlikely]] {
|
|
52
|
+
throw std::runtime_error("Current StateWrapper doesn't contain any props!");
|
|
107
53
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
54
|
+
|
|
55
|
+
// Update only props that differ from the previous State snapshot.
|
|
56
|
+
if (oldProps == nullptr
|
|
57
|
+
? newProps->percents.isProvided()
|
|
58
|
+
: !newProps->percents.hasSameValue(oldProps->percents)) {
|
|
59
|
+
hybridView->setPercents(newProps->percents.get());
|
|
60
|
+
}
|
|
61
|
+
if (oldProps == nullptr
|
|
62
|
+
? newProps->rowHeight.isProvided()
|
|
63
|
+
: !newProps->rowHeight.hasSameValue(oldProps->rowHeight)) {
|
|
64
|
+
hybridView->setRowHeight(newProps->rowHeight.get());
|
|
65
|
+
}
|
|
66
|
+
if (oldProps == nullptr
|
|
67
|
+
? newProps->rowMarginTop.isProvided()
|
|
68
|
+
: !newProps->rowMarginTop.hasSameValue(oldProps->rowMarginTop)) {
|
|
69
|
+
hybridView->setRowMarginTop(newProps->rowMarginTop.get());
|
|
70
|
+
}
|
|
71
|
+
if (oldProps == nullptr
|
|
72
|
+
? newProps->barInset.isProvided()
|
|
73
|
+
: !newProps->barInset.hasSameValue(oldProps->barInset)) {
|
|
74
|
+
hybridView->setBarInset(newProps->barInset.get());
|
|
75
|
+
}
|
|
76
|
+
if (oldProps == nullptr
|
|
77
|
+
? newProps->color.isProvided()
|
|
78
|
+
: !newProps->color.hasSameValue(oldProps->color)) {
|
|
79
|
+
hybridView->setColor(newProps->color.get());
|
|
80
|
+
}
|
|
81
|
+
if (oldProps == nullptr
|
|
82
|
+
? newProps->origin.isProvided()
|
|
83
|
+
: !newProps->origin.hasSameValue(oldProps->origin)) {
|
|
84
|
+
hybridView->setOrigin(newProps->origin.get());
|
|
85
|
+
}
|
|
86
|
+
if (oldProps == nullptr
|
|
87
|
+
? newProps->reducedMotion.isProvided()
|
|
88
|
+
: !newProps->reducedMotion.hasSameValue(oldProps->reducedMotion)) {
|
|
89
|
+
hybridView->setReducedMotion(newProps->reducedMotion.get());
|
|
90
|
+
}
|
|
91
|
+
if (oldProps == nullptr
|
|
92
|
+
? newProps->epoch.isProvided()
|
|
93
|
+
: !newProps->epoch.hasSameValue(oldProps->epoch)) {
|
|
94
|
+
hybridView->setEpoch(newProps->epoch.get());
|
|
95
|
+
}
|
|
96
|
+
if (oldProps == nullptr
|
|
97
|
+
? newProps->prices.isProvided()
|
|
98
|
+
: !newProps->prices.hasSameValue(oldProps->prices)) {
|
|
99
|
+
hybridView->setPrices(newProps->prices.get());
|
|
100
|
+
}
|
|
101
|
+
if (oldProps == nullptr
|
|
102
|
+
? newProps->sizes.isProvided()
|
|
103
|
+
: !newProps->sizes.hasSameValue(oldProps->sizes)) {
|
|
104
|
+
hybridView->setSizes(newProps->sizes.get());
|
|
105
|
+
}
|
|
106
|
+
if (oldProps == nullptr
|
|
107
|
+
? newProps->priceColor.isProvided()
|
|
108
|
+
: !newProps->priceColor.hasSameValue(oldProps->priceColor)) {
|
|
109
|
+
hybridView->setPriceColor(newProps->priceColor.get());
|
|
110
|
+
}
|
|
111
|
+
if (oldProps == nullptr
|
|
112
|
+
? newProps->sizeColor.isProvided()
|
|
113
|
+
: !newProps->sizeColor.hasSameValue(oldProps->sizeColor)) {
|
|
114
|
+
hybridView->setSizeColor(newProps->sizeColor.get());
|
|
115
|
+
}
|
|
116
|
+
if (oldProps == nullptr
|
|
117
|
+
? newProps->priceFontSize.isProvided()
|
|
118
|
+
: !newProps->priceFontSize.hasSameValue(oldProps->priceFontSize)) {
|
|
119
|
+
hybridView->setPriceFontSize(newProps->priceFontSize.get());
|
|
120
|
+
}
|
|
121
|
+
if (oldProps == nullptr
|
|
122
|
+
? newProps->sizeFontSize.isProvided()
|
|
123
|
+
: !newProps->sizeFontSize.hasSameValue(oldProps->sizeFontSize)) {
|
|
124
|
+
hybridView->setSizeFontSize(newProps->sizeFontSize.get());
|
|
125
|
+
}
|
|
126
|
+
if (oldProps == nullptr
|
|
127
|
+
? newProps->textInset.isProvided()
|
|
128
|
+
: !newProps->textInset.hasSameValue(oldProps->textInset)) {
|
|
129
|
+
hybridView->setTextInset(newProps->textInset.get());
|
|
130
|
+
}
|
|
131
|
+
if (oldProps == nullptr
|
|
132
|
+
? newProps->placeholderText.isProvided()
|
|
133
|
+
: !newProps->placeholderText.hasSameValue(oldProps->placeholderText)) {
|
|
134
|
+
hybridView->setPlaceholderText(newProps->placeholderText.get());
|
|
135
|
+
}
|
|
136
|
+
if (oldProps == nullptr
|
|
137
|
+
? newProps->placeholderRows.isProvided()
|
|
138
|
+
: !newProps->placeholderRows.hasSameValue(oldProps->placeholderRows)) {
|
|
139
|
+
hybridView->setPlaceholderRows(newProps->placeholderRows.get());
|
|
140
|
+
}
|
|
141
|
+
if (oldProps == nullptr
|
|
142
|
+
? newProps->onRowPress.isProvided()
|
|
143
|
+
: !newProps->onRowPress.hasSameValue(oldProps->onRowPress)) {
|
|
144
|
+
hybridView->setOnRowPress(newProps->onRowPress.get());
|
|
111
145
|
}
|
|
112
146
|
|
|
113
147
|
// Update hybridRef if it changed
|
|
114
|
-
if (
|
|
148
|
+
if (oldProps == nullptr
|
|
149
|
+
? newProps->hybridRef.isProvided()
|
|
150
|
+
: !newProps->hybridRef.hasSameValue(oldProps->hybridRef)) {
|
|
115
151
|
// hybridRef changed - call it with new this
|
|
116
|
-
const auto& maybeFunc =
|
|
152
|
+
const auto& maybeFunc = newProps->hybridRef.get();
|
|
117
153
|
if (maybeFunc.has_value()) {
|
|
118
154
|
maybeFunc.value()(hybridView);
|
|
119
155
|
}
|
|
120
|
-
props->hybridRef.isDirty = false;
|
|
121
156
|
}
|
|
122
157
|
}
|
|
123
158
|
|
|
@@ -31,7 +31,12 @@ public:
|
|
|
31
31
|
public:
|
|
32
32
|
static void updateViewProps(jni::alias_ref<jni::JClass> /* class */,
|
|
33
33
|
jni::alias_ref<JHybridPerpDepthBarsSpec::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 HybridPerpDepthBarsProps> getPropsFromStateWrapper(
|
|
39
|
+
jni::alias_ref<JStateWrapper::javaobject> stateWrapper);
|
|
35
40
|
|
|
36
41
|
public:
|
|
37
42
|
static void registerNatives() {
|
|
@@ -15,69 +15,94 @@ namespace margelo::nitro::perpdepthbar::views {
|
|
|
15
15
|
using namespace facebook;
|
|
16
16
|
using ConcreteStateData = react::ConcreteState<HybridPerpSideRatioState>;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
std::shared_ptr<const HybridPerpSideRatioProps> JHybridPerpSideRatioStateUpdater::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 HybridPerpSideRatioState& data = concreteState->getData();
|
|
33
|
-
const std::shared_ptr<HybridPerpSideRatioProps>& props = data.getProps();
|
|
37
|
+
const std::shared_ptr<const HybridPerpSideRatioProps>& props = data.getProps();
|
|
34
38
|
if (props == nullptr) [[unlikely]] {
|
|
35
|
-
// Props aren't set yet!
|
|
36
39
|
throw std::runtime_error("HybridPerpSideRatioState's data doesn't contain any props!");
|
|
37
40
|
}
|
|
41
|
+
return props;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void JHybridPerpSideRatioStateUpdater::updateViewProps(jni::alias_ref<jni::JClass> /* class */,
|
|
45
|
+
jni::alias_ref<JHybridPerpSideRatioSpec::JavaPart> javaView,
|
|
46
|
+
jni::alias_ref<JStateWrapper::javaobject> newState,
|
|
47
|
+
jni::alias_ref<JStateWrapper::javaobject> oldState) {
|
|
48
|
+
std::shared_ptr<JHybridPerpSideRatioSpec> hybridView = javaView->getJHybridPerpSideRatioSpec();
|
|
49
|
+
std::shared_ptr<const HybridPerpSideRatioProps> newProps = getPropsFromStateWrapper(newState);
|
|
50
|
+
std::shared_ptr<const HybridPerpSideRatioProps> oldProps = getPropsFromStateWrapper(oldState);
|
|
51
|
+
if (newProps == nullptr) [[unlikely]] {
|
|
52
|
+
throw std::runtime_error("Current StateWrapper doesn't contain any props!");
|
|
53
|
+
}
|
|
38
54
|
|
|
39
|
-
// Update
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
|
|
55
|
+
// Update only props that differ from the previous State snapshot.
|
|
56
|
+
if (oldProps == nullptr
|
|
57
|
+
? newProps->bidPercentage.isProvided()
|
|
58
|
+
: !newProps->bidPercentage.hasSameValue(oldProps->bidPercentage)) {
|
|
59
|
+
hybridView->setBidPercentage(newProps->bidPercentage.get());
|
|
43
60
|
}
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
61
|
+
if (oldProps == nullptr
|
|
62
|
+
? newProps->askPercentage.isProvided()
|
|
63
|
+
: !newProps->askPercentage.hasSameValue(oldProps->askPercentage)) {
|
|
64
|
+
hybridView->setAskPercentage(newProps->askPercentage.get());
|
|
47
65
|
}
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
|
|
66
|
+
if (oldProps == nullptr
|
|
67
|
+
? newProps->longColor.isProvided()
|
|
68
|
+
: !newProps->longColor.hasSameValue(oldProps->longColor)) {
|
|
69
|
+
hybridView->setLongColor(newProps->longColor.get());
|
|
51
70
|
}
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
71
|
+
if (oldProps == nullptr
|
|
72
|
+
? newProps->shortColor.isProvided()
|
|
73
|
+
: !newProps->shortColor.hasSameValue(oldProps->shortColor)) {
|
|
74
|
+
hybridView->setShortColor(newProps->shortColor.get());
|
|
55
75
|
}
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
76
|
+
if (oldProps == nullptr
|
|
77
|
+
? newProps->segmentHeight.isProvided()
|
|
78
|
+
: !newProps->segmentHeight.hasSameValue(oldProps->segmentHeight)) {
|
|
79
|
+
hybridView->setSegmentHeight(newProps->segmentHeight.get());
|
|
59
80
|
}
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
if (oldProps == nullptr
|
|
82
|
+
? newProps->cornerRadius.isProvided()
|
|
83
|
+
: !newProps->cornerRadius.hasSameValue(oldProps->cornerRadius)) {
|
|
84
|
+
hybridView->setCornerRadius(newProps->cornerRadius.get());
|
|
63
85
|
}
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
|
|
86
|
+
if (oldProps == nullptr
|
|
87
|
+
? newProps->gap.isProvided()
|
|
88
|
+
: !newProps->gap.hasSameValue(oldProps->gap)) {
|
|
89
|
+
hybridView->setGap(newProps->gap.get());
|
|
67
90
|
}
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
91
|
+
if (oldProps == nullptr
|
|
92
|
+
? newProps->reducedMotion.isProvided()
|
|
93
|
+
: !newProps->reducedMotion.hasSameValue(oldProps->reducedMotion)) {
|
|
94
|
+
hybridView->setReducedMotion(newProps->reducedMotion.get());
|
|
71
95
|
}
|
|
72
96
|
|
|
73
97
|
// Update hybridRef if it changed
|
|
74
|
-
if (
|
|
98
|
+
if (oldProps == nullptr
|
|
99
|
+
? newProps->hybridRef.isProvided()
|
|
100
|
+
: !newProps->hybridRef.hasSameValue(oldProps->hybridRef)) {
|
|
75
101
|
// hybridRef changed - call it with new this
|
|
76
|
-
const auto& maybeFunc =
|
|
102
|
+
const auto& maybeFunc = newProps->hybridRef.get();
|
|
77
103
|
if (maybeFunc.has_value()) {
|
|
78
104
|
maybeFunc.value()(hybridView);
|
|
79
105
|
}
|
|
80
|
-
props->hybridRef.isDirty = false;
|
|
81
106
|
}
|
|
82
107
|
}
|
|
83
108
|
|
|
@@ -31,7 +31,12 @@ public:
|
|
|
31
31
|
public:
|
|
32
32
|
static void updateViewProps(jni::alias_ref<jni::JClass> /* class */,
|
|
33
33
|
jni::alias_ref<JHybridPerpSideRatioSpec::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 HybridPerpSideRatioProps> 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.perpdepthbar.*
|
|
|
20
20
|
* Represents the React Native `ViewManager` for the "PerpDepthBars" Nitro HybridView.
|
|
21
21
|
*/
|
|
22
22
|
public class HybridPerpDepthBarsManager: SimpleViewManager<View>() {
|
|
23
|
+
/**
|
|
24
|
+
* Represents the View and its last state snapshot (mutable)
|
|
25
|
+
*/
|
|
26
|
+
private class HybridViewHolder(
|
|
27
|
+
val hybridView: HybridPerpDepthBars,
|
|
28
|
+
var lastState: StateWrapper? = null,
|
|
29
|
+
)
|
|
30
|
+
|
|
23
31
|
init {
|
|
24
32
|
if (RecyclableView::class.java.isAssignableFrom(HybridPerpDepthBars::class.java)) {
|
|
25
33
|
// Enable view recycling
|
|
@@ -34,33 +42,41 @@ public class HybridPerpDepthBarsManager: SimpleViewManager<View>() {
|
|
|
34
42
|
override fun createViewInstance(reactContext: ThemedReactContext): View {
|
|
35
43
|
val hybridView = HybridPerpDepthBars(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
|
-
HybridPerpDepthBarsStateUpdater.updateViewProps(hybridView,
|
|
58
|
+
HybridPerpDepthBarsStateUpdater.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 HybridPerpDepthBarsManager: 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 HybridPerpDepthBarsStateUpdater {
|
|
|
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: HybridPerpDepthBarsSpec,
|
|
21
|
+
external fun updateViewProps(view: HybridPerpDepthBarsSpec, newState: StateWrapper, oldState: StateWrapper?)
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -20,6 +20,14 @@ import com.margelo.nitro.perpdepthbar.*
|
|
|
20
20
|
* Represents the React Native `ViewManager` for the "PerpSideRatio" Nitro HybridView.
|
|
21
21
|
*/
|
|
22
22
|
public class HybridPerpSideRatioManager: SimpleViewManager<View>() {
|
|
23
|
+
/**
|
|
24
|
+
* Represents the View and its last state snapshot (mutable)
|
|
25
|
+
*/
|
|
26
|
+
private class HybridViewHolder(
|
|
27
|
+
val hybridView: HybridPerpSideRatio,
|
|
28
|
+
var lastState: StateWrapper? = null,
|
|
29
|
+
)
|
|
30
|
+
|
|
23
31
|
init {
|
|
24
32
|
if (RecyclableView::class.java.isAssignableFrom(HybridPerpSideRatio::class.java)) {
|
|
25
33
|
// Enable view recycling
|
|
@@ -34,33 +42,41 @@ public class HybridPerpSideRatioManager: SimpleViewManager<View>() {
|
|
|
34
42
|
override fun createViewInstance(reactContext: ThemedReactContext): View {
|
|
35
43
|
val hybridView = HybridPerpSideRatio(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
|
-
HybridPerpSideRatioStateUpdater.updateViewProps(hybridView,
|
|
58
|
+
HybridPerpSideRatioStateUpdater.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 HybridPerpSideRatioManager: 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 HybridPerpSideRatioStateUpdater {
|
|
|
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: HybridPerpSideRatioSpec,
|
|
21
|
+
external fun updateViewProps(view: HybridPerpSideRatioSpec, newState: StateWrapper, oldState: StateWrapper?)
|
|
22
22
|
}
|
|
23
23
|
}
|