@onekeyfe/react-native-perp-depth-bar 3.0.96 → 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.
Files changed (43) hide show
  1. package/lib/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.cpp +122 -87
  2. package/lib/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.hpp +6 -1
  3. package/lib/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.cpp +66 -41
  4. package/lib/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.hpp +6 -1
  5. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsManager.kt +26 -10
  6. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsStateUpdater.kt +2 -2
  7. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioManager.kt +26 -10
  8. package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioStateUpdater.kt +2 -2
  9. package/lib/nitrogen/generated/ios/c++/views/HybridPerpDepthBarsComponent.mm +146 -107
  10. package/lib/nitrogen/generated/ios/c++/views/HybridPerpSideRatioComponent.mm +86 -57
  11. package/lib/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.cpp +23 -225
  12. package/lib/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.hpp +74 -66
  13. package/lib/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.cpp +13 -125
  14. package/lib/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.hpp +44 -56
  15. package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.cpp +122 -87
  16. package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.hpp +6 -1
  17. package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.cpp +66 -41
  18. package/lib/nitrogen/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.hpp +6 -1
  19. package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsManager.kt +26 -10
  20. package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsStateUpdater.kt +2 -2
  21. package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioManager.kt +26 -10
  22. package/lib/nitrogen/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioStateUpdater.kt +2 -2
  23. package/lib/nitrogen/nitrogen/generated/ios/c++/views/HybridPerpDepthBarsComponent.mm +146 -107
  24. package/lib/nitrogen/nitrogen/generated/ios/c++/views/HybridPerpSideRatioComponent.mm +86 -57
  25. package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.cpp +23 -225
  26. package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.hpp +74 -66
  27. package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.cpp +13 -125
  28. package/lib/nitrogen/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.hpp +44 -56
  29. package/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.cpp +122 -87
  30. package/nitrogen/generated/android/c++/views/JHybridPerpDepthBarsStateUpdater.hpp +6 -1
  31. package/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.cpp +66 -41
  32. package/nitrogen/generated/android/c++/views/JHybridPerpSideRatioStateUpdater.hpp +6 -1
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsManager.kt +26 -10
  34. package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpDepthBarsStateUpdater.kt +2 -2
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioManager.kt +26 -10
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/perpdepthbar/views/HybridPerpSideRatioStateUpdater.kt +2 -2
  37. package/nitrogen/generated/ios/c++/views/HybridPerpDepthBarsComponent.mm +146 -107
  38. package/nitrogen/generated/ios/c++/views/HybridPerpSideRatioComponent.mm +86 -57
  39. package/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.cpp +23 -225
  40. package/nitrogen/generated/shared/c++/views/HybridPerpDepthBarsComponent.hpp +74 -66
  41. package/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.cpp +13 -125
  42. package/nitrogen/generated/shared/c++/views/HybridPerpSideRatioComponent.hpp +44 -56
  43. package/package.json +4 -4
@@ -37,6 +37,7 @@ using namespace margelo::nitro::perpdepthbar::views;
37
37
 
38
38
  @implementation HybridPerpDepthBarsComponent {
39
39
  std::shared_ptr<HybridPerpDepthBarsSpecSwift> _hybridView;
40
+ BOOL _didDropView;
40
41
  }
41
42
 
42
43
  + (void) load {
@@ -50,6 +51,7 @@ using namespace margelo::nitro::perpdepthbar::views;
50
51
 
51
52
  - (instancetype) init {
52
53
  if (self = [super init]) {
54
+ _props = HybridPerpDepthBarsShadowNode::defaultSharedProps();
53
55
  std::shared_ptr<HybridPerpDepthBarsSpec> hybridView = PerpDepthBar::PerpDepthBarAutolinking::createPerpDepthBars();
54
56
  _hybridView = std::dynamic_pointer_cast<HybridPerpDepthBarsSpecSwift>(hybridView);
55
57
  [self updateView];
@@ -69,120 +71,157 @@ using namespace margelo::nitro::perpdepthbar::views;
69
71
  [self setContentView:view];
70
72
  }
71
73
 
74
+ - (void) notifyOnDropView {
75
+ // A recycled component can later be invalidated. Notify only once per mount.
76
+ if (_didDropView) {
77
+ return;
78
+ }
79
+ PerpDepthBar::HybridPerpDepthBarsSpec_cxx& swiftPart = _hybridView->getSwiftPart();
80
+ swiftPart.onDropView();
81
+ _didDropView = YES;
82
+ }
83
+
72
84
  - (void) updateProps:(const std::shared_ptr<const react::Props>&)props
73
85
  oldProps:(const std::shared_ptr<const react::Props>&)oldProps {
86
+ // A props update marks a newly mounted or still-active component.
87
+ _didDropView = NO;
88
+
74
89
  // 1. Downcast props
75
- const auto& newViewPropsConst = *std::static_pointer_cast<HybridPerpDepthBarsProps const>(props);
76
- auto& newViewProps = const_cast<HybridPerpDepthBarsProps&>(newViewPropsConst);
90
+ const auto& newViewProps = *std::static_pointer_cast<const HybridPerpDepthBarsProps>(props);
91
+ const auto* oldViewProps = static_cast<const HybridPerpDepthBarsProps*>(oldProps.get());
77
92
  PerpDepthBar::HybridPerpDepthBarsSpec_cxx& swiftPart = _hybridView->getSwiftPart();
78
93
 
79
- // 2. Update each prop individually
80
- swiftPart.beforeUpdate();
81
-
82
- // percents: array
83
- if (newViewProps.percents.isDirty) {
84
- swiftPart.setPercents(newViewProps.percents.value);
85
- newViewProps.percents.isDirty = false;
86
- }
87
- // rowHeight: number
88
- if (newViewProps.rowHeight.isDirty) {
89
- swiftPart.setRowHeight(newViewProps.rowHeight.value);
90
- newViewProps.rowHeight.isDirty = false;
91
- }
92
- // rowMarginTop: number
93
- if (newViewProps.rowMarginTop.isDirty) {
94
- swiftPart.setRowMarginTop(newViewProps.rowMarginTop.value);
95
- newViewProps.rowMarginTop.isDirty = false;
96
- }
97
- // barInset: number
98
- if (newViewProps.barInset.isDirty) {
99
- swiftPart.setBarInset(newViewProps.barInset.value);
100
- newViewProps.barInset.isDirty = false;
101
- }
102
- // color: string
103
- if (newViewProps.color.isDirty) {
104
- swiftPart.setColor(newViewProps.color.value);
105
- newViewProps.color.isDirty = false;
106
- }
107
- // origin: string
108
- if (newViewProps.origin.isDirty) {
109
- swiftPart.setOrigin(newViewProps.origin.value);
110
- newViewProps.origin.isDirty = false;
111
- }
112
- // reducedMotion: boolean
113
- if (newViewProps.reducedMotion.isDirty) {
114
- swiftPart.setReducedMotion(newViewProps.reducedMotion.value);
115
- newViewProps.reducedMotion.isDirty = false;
116
- }
117
- // epoch: number
118
- if (newViewProps.epoch.isDirty) {
119
- swiftPart.setEpoch(newViewProps.epoch.value);
120
- newViewProps.epoch.isDirty = false;
121
- }
122
- // prices: array
123
- if (newViewProps.prices.isDirty) {
124
- swiftPart.setPrices(newViewProps.prices.value);
125
- newViewProps.prices.isDirty = false;
126
- }
127
- // sizes: array
128
- if (newViewProps.sizes.isDirty) {
129
- swiftPart.setSizes(newViewProps.sizes.value);
130
- newViewProps.sizes.isDirty = false;
131
- }
132
- // priceColor: string
133
- if (newViewProps.priceColor.isDirty) {
134
- swiftPart.setPriceColor(newViewProps.priceColor.value);
135
- newViewProps.priceColor.isDirty = false;
136
- }
137
- // sizeColor: string
138
- if (newViewProps.sizeColor.isDirty) {
139
- swiftPart.setSizeColor(newViewProps.sizeColor.value);
140
- newViewProps.sizeColor.isDirty = false;
141
- }
142
- // priceFontSize: number
143
- if (newViewProps.priceFontSize.isDirty) {
144
- swiftPart.setPriceFontSize(newViewProps.priceFontSize.value);
145
- newViewProps.priceFontSize.isDirty = false;
146
- }
147
- // sizeFontSize: number
148
- if (newViewProps.sizeFontSize.isDirty) {
149
- swiftPart.setSizeFontSize(newViewProps.sizeFontSize.value);
150
- newViewProps.sizeFontSize.isDirty = false;
151
- }
152
- // textInset: number
153
- if (newViewProps.textInset.isDirty) {
154
- swiftPart.setTextInset(newViewProps.textInset.value);
155
- newViewProps.textInset.isDirty = false;
156
- }
157
- // placeholderText: string
158
- if (newViewProps.placeholderText.isDirty) {
159
- swiftPart.setPlaceholderText(newViewProps.placeholderText.value);
160
- newViewProps.placeholderText.isDirty = false;
161
- }
162
- // placeholderRows: number
163
- if (newViewProps.placeholderRows.isDirty) {
164
- swiftPart.setPlaceholderRows(newViewProps.placeholderRows.value);
165
- newViewProps.placeholderRows.isDirty = false;
166
- }
167
- // onRowPress: optional
168
- if (newViewProps.onRowPress.isDirty) {
169
- swiftPart.setOnRowPress(newViewProps.onRowPress.value);
170
- newViewProps.onRowPress.isDirty = false;
171
- }
172
-
173
- swiftPart.afterUpdate();
94
+ // 2. Update only props that differ from the previous Props snapshot.
95
+ const bool hasTransactionPropChanges = oldViewProps == nullptr
96
+ ? newViewProps.hasAnyProvidedProps()
97
+ : !newViewProps.hasSameProps(*oldViewProps);
98
+ if (hasTransactionPropChanges) {
99
+ swiftPart.beforeUpdate();
100
+
101
+ // percents: array
102
+ if (oldViewProps == nullptr
103
+ ? newViewProps.percents.isProvided()
104
+ : !newViewProps.percents.hasSameValue(oldViewProps->percents)) {
105
+ swiftPart.setPercents(newViewProps.percents.get());
106
+ }
107
+ // rowHeight: number
108
+ if (oldViewProps == nullptr
109
+ ? newViewProps.rowHeight.isProvided()
110
+ : !newViewProps.rowHeight.hasSameValue(oldViewProps->rowHeight)) {
111
+ swiftPart.setRowHeight(newViewProps.rowHeight.get());
112
+ }
113
+ // rowMarginTop: number
114
+ if (oldViewProps == nullptr
115
+ ? newViewProps.rowMarginTop.isProvided()
116
+ : !newViewProps.rowMarginTop.hasSameValue(oldViewProps->rowMarginTop)) {
117
+ swiftPart.setRowMarginTop(newViewProps.rowMarginTop.get());
118
+ }
119
+ // barInset: number
120
+ if (oldViewProps == nullptr
121
+ ? newViewProps.barInset.isProvided()
122
+ : !newViewProps.barInset.hasSameValue(oldViewProps->barInset)) {
123
+ swiftPart.setBarInset(newViewProps.barInset.get());
124
+ }
125
+ // color: string
126
+ if (oldViewProps == nullptr
127
+ ? newViewProps.color.isProvided()
128
+ : !newViewProps.color.hasSameValue(oldViewProps->color)) {
129
+ swiftPart.setColor(newViewProps.color.get());
130
+ }
131
+ // origin: string
132
+ if (oldViewProps == nullptr
133
+ ? newViewProps.origin.isProvided()
134
+ : !newViewProps.origin.hasSameValue(oldViewProps->origin)) {
135
+ swiftPart.setOrigin(newViewProps.origin.get());
136
+ }
137
+ // reducedMotion: boolean
138
+ if (oldViewProps == nullptr
139
+ ? newViewProps.reducedMotion.isProvided()
140
+ : !newViewProps.reducedMotion.hasSameValue(oldViewProps->reducedMotion)) {
141
+ swiftPart.setReducedMotion(newViewProps.reducedMotion.get());
142
+ }
143
+ // epoch: number
144
+ if (oldViewProps == nullptr
145
+ ? newViewProps.epoch.isProvided()
146
+ : !newViewProps.epoch.hasSameValue(oldViewProps->epoch)) {
147
+ swiftPart.setEpoch(newViewProps.epoch.get());
148
+ }
149
+ // prices: array
150
+ if (oldViewProps == nullptr
151
+ ? newViewProps.prices.isProvided()
152
+ : !newViewProps.prices.hasSameValue(oldViewProps->prices)) {
153
+ swiftPart.setPrices(newViewProps.prices.get());
154
+ }
155
+ // sizes: array
156
+ if (oldViewProps == nullptr
157
+ ? newViewProps.sizes.isProvided()
158
+ : !newViewProps.sizes.hasSameValue(oldViewProps->sizes)) {
159
+ swiftPart.setSizes(newViewProps.sizes.get());
160
+ }
161
+ // priceColor: string
162
+ if (oldViewProps == nullptr
163
+ ? newViewProps.priceColor.isProvided()
164
+ : !newViewProps.priceColor.hasSameValue(oldViewProps->priceColor)) {
165
+ swiftPart.setPriceColor(newViewProps.priceColor.get());
166
+ }
167
+ // sizeColor: string
168
+ if (oldViewProps == nullptr
169
+ ? newViewProps.sizeColor.isProvided()
170
+ : !newViewProps.sizeColor.hasSameValue(oldViewProps->sizeColor)) {
171
+ swiftPart.setSizeColor(newViewProps.sizeColor.get());
172
+ }
173
+ // priceFontSize: number
174
+ if (oldViewProps == nullptr
175
+ ? newViewProps.priceFontSize.isProvided()
176
+ : !newViewProps.priceFontSize.hasSameValue(oldViewProps->priceFontSize)) {
177
+ swiftPart.setPriceFontSize(newViewProps.priceFontSize.get());
178
+ }
179
+ // sizeFontSize: number
180
+ if (oldViewProps == nullptr
181
+ ? newViewProps.sizeFontSize.isProvided()
182
+ : !newViewProps.sizeFontSize.hasSameValue(oldViewProps->sizeFontSize)) {
183
+ swiftPart.setSizeFontSize(newViewProps.sizeFontSize.get());
184
+ }
185
+ // textInset: number
186
+ if (oldViewProps == nullptr
187
+ ? newViewProps.textInset.isProvided()
188
+ : !newViewProps.textInset.hasSameValue(oldViewProps->textInset)) {
189
+ swiftPart.setTextInset(newViewProps.textInset.get());
190
+ }
191
+ // placeholderText: string
192
+ if (oldViewProps == nullptr
193
+ ? newViewProps.placeholderText.isProvided()
194
+ : !newViewProps.placeholderText.hasSameValue(oldViewProps->placeholderText)) {
195
+ swiftPart.setPlaceholderText(newViewProps.placeholderText.get());
196
+ }
197
+ // placeholderRows: number
198
+ if (oldViewProps == nullptr
199
+ ? newViewProps.placeholderRows.isProvided()
200
+ : !newViewProps.placeholderRows.hasSameValue(oldViewProps->placeholderRows)) {
201
+ swiftPart.setPlaceholderRows(newViewProps.placeholderRows.get());
202
+ }
203
+ // onRowPress: optional
204
+ if (oldViewProps == nullptr
205
+ ? newViewProps.onRowPress.isProvided()
206
+ : !newViewProps.onRowPress.hasSameValue(oldViewProps->onRowPress)) {
207
+ swiftPart.setOnRowPress(newViewProps.onRowPress.get());
208
+ }
174
209
 
175
- // 3. Update hybridRef if it changed
176
- if (newViewProps.hybridRef.isDirty) {
177
- // hybridRef changed - call it with new this
178
- const auto& maybeFunc = newViewProps.hybridRef.value;
179
- if (maybeFunc.has_value()) {
180
- maybeFunc.value()(_hybridView);
210
+ // Update hybridRef if it changed
211
+ if (oldViewProps == nullptr
212
+ ? newViewProps.hybridRef.isProvided()
213
+ : !newViewProps.hybridRef.hasSameValue(oldViewProps->hybridRef)) {
214
+ // hybridRef changed - call it with new this
215
+ const auto& maybeFunc = newViewProps.hybridRef.get();
216
+ if (maybeFunc.has_value()) {
217
+ maybeFunc.value()(_hybridView);
218
+ }
181
219
  }
182
- newViewProps.hybridRef.isDirty = false;
220
+
221
+ swiftPart.afterUpdate();
183
222
  }
184
223
 
185
- // 4. Continue in base class
224
+ // 3. Continue in base class
186
225
  [super updateProps:props oldProps:oldProps];
187
226
  }
188
227
 
@@ -191,6 +230,7 @@ using namespace margelo::nitro::perpdepthbar::views;
191
230
  }
192
231
 
193
232
  - (void)prepareForRecycle {
233
+ [self notifyOnDropView];
194
234
  [super prepareForRecycle];
195
235
  PerpDepthBar::HybridPerpDepthBarsSpec_cxx& swiftPart = _hybridView->getSwiftPart();
196
236
  swiftPart.maybePrepareForRecycle();
@@ -198,8 +238,7 @@ using namespace margelo::nitro::perpdepthbar::views;
198
238
 
199
239
  #ifdef ENABLE_RCT_COMPONENT_VIEW_INVALIDATE
200
240
  - (void)invalidate {
201
- PerpDepthBar::HybridPerpDepthBarsSpec_cxx& swiftPart = _hybridView->getSwiftPart();
202
- swiftPart.onDropView();
241
+ [self notifyOnDropView];
203
242
  [super invalidate];
204
243
  }
205
244
  #endif
@@ -37,6 +37,7 @@ using namespace margelo::nitro::perpdepthbar::views;
37
37
 
38
38
  @implementation HybridPerpSideRatioComponent {
39
39
  std::shared_ptr<HybridPerpSideRatioSpecSwift> _hybridView;
40
+ BOOL _didDropView;
40
41
  }
41
42
 
42
43
  + (void) load {
@@ -50,6 +51,7 @@ using namespace margelo::nitro::perpdepthbar::views;
50
51
 
51
52
  - (instancetype) init {
52
53
  if (self = [super init]) {
54
+ _props = HybridPerpSideRatioShadowNode::defaultSharedProps();
53
55
  std::shared_ptr<HybridPerpSideRatioSpec> hybridView = PerpDepthBar::PerpDepthBarAutolinking::createPerpSideRatio();
54
56
  _hybridView = std::dynamic_pointer_cast<HybridPerpSideRatioSpecSwift>(hybridView);
55
57
  [self updateView];
@@ -69,70 +71,97 @@ using namespace margelo::nitro::perpdepthbar::views;
69
71
  [self setContentView:view];
70
72
  }
71
73
 
74
+ - (void) notifyOnDropView {
75
+ // A recycled component can later be invalidated. Notify only once per mount.
76
+ if (_didDropView) {
77
+ return;
78
+ }
79
+ PerpDepthBar::HybridPerpSideRatioSpec_cxx& swiftPart = _hybridView->getSwiftPart();
80
+ swiftPart.onDropView();
81
+ _didDropView = YES;
82
+ }
83
+
72
84
  - (void) updateProps:(const std::shared_ptr<const react::Props>&)props
73
85
  oldProps:(const std::shared_ptr<const react::Props>&)oldProps {
86
+ // A props update marks a newly mounted or still-active component.
87
+ _didDropView = NO;
88
+
74
89
  // 1. Downcast props
75
- const auto& newViewPropsConst = *std::static_pointer_cast<HybridPerpSideRatioProps const>(props);
76
- auto& newViewProps = const_cast<HybridPerpSideRatioProps&>(newViewPropsConst);
90
+ const auto& newViewProps = *std::static_pointer_cast<const HybridPerpSideRatioProps>(props);
91
+ const auto* oldViewProps = static_cast<const HybridPerpSideRatioProps*>(oldProps.get());
77
92
  PerpDepthBar::HybridPerpSideRatioSpec_cxx& swiftPart = _hybridView->getSwiftPart();
78
93
 
79
- // 2. Update each prop individually
80
- swiftPart.beforeUpdate();
81
-
82
- // bidPercentage: number
83
- if (newViewProps.bidPercentage.isDirty) {
84
- swiftPart.setBidPercentage(newViewProps.bidPercentage.value);
85
- newViewProps.bidPercentage.isDirty = false;
86
- }
87
- // askPercentage: number
88
- if (newViewProps.askPercentage.isDirty) {
89
- swiftPart.setAskPercentage(newViewProps.askPercentage.value);
90
- newViewProps.askPercentage.isDirty = false;
91
- }
92
- // longColor: string
93
- if (newViewProps.longColor.isDirty) {
94
- swiftPart.setLongColor(newViewProps.longColor.value);
95
- newViewProps.longColor.isDirty = false;
96
- }
97
- // shortColor: string
98
- if (newViewProps.shortColor.isDirty) {
99
- swiftPart.setShortColor(newViewProps.shortColor.value);
100
- newViewProps.shortColor.isDirty = false;
101
- }
102
- // segmentHeight: number
103
- if (newViewProps.segmentHeight.isDirty) {
104
- swiftPart.setSegmentHeight(newViewProps.segmentHeight.value);
105
- newViewProps.segmentHeight.isDirty = false;
106
- }
107
- // cornerRadius: number
108
- if (newViewProps.cornerRadius.isDirty) {
109
- swiftPart.setCornerRadius(newViewProps.cornerRadius.value);
110
- newViewProps.cornerRadius.isDirty = false;
111
- }
112
- // gap: number
113
- if (newViewProps.gap.isDirty) {
114
- swiftPart.setGap(newViewProps.gap.value);
115
- newViewProps.gap.isDirty = false;
116
- }
117
- // reducedMotion: boolean
118
- if (newViewProps.reducedMotion.isDirty) {
119
- swiftPart.setReducedMotion(newViewProps.reducedMotion.value);
120
- newViewProps.reducedMotion.isDirty = false;
121
- }
122
-
123
- swiftPart.afterUpdate();
94
+ // 2. Update only props that differ from the previous Props snapshot.
95
+ const bool hasTransactionPropChanges = oldViewProps == nullptr
96
+ ? newViewProps.hasAnyProvidedProps()
97
+ : !newViewProps.hasSameProps(*oldViewProps);
98
+ if (hasTransactionPropChanges) {
99
+ swiftPart.beforeUpdate();
100
+
101
+ // bidPercentage: number
102
+ if (oldViewProps == nullptr
103
+ ? newViewProps.bidPercentage.isProvided()
104
+ : !newViewProps.bidPercentage.hasSameValue(oldViewProps->bidPercentage)) {
105
+ swiftPart.setBidPercentage(newViewProps.bidPercentage.get());
106
+ }
107
+ // askPercentage: number
108
+ if (oldViewProps == nullptr
109
+ ? newViewProps.askPercentage.isProvided()
110
+ : !newViewProps.askPercentage.hasSameValue(oldViewProps->askPercentage)) {
111
+ swiftPart.setAskPercentage(newViewProps.askPercentage.get());
112
+ }
113
+ // longColor: string
114
+ if (oldViewProps == nullptr
115
+ ? newViewProps.longColor.isProvided()
116
+ : !newViewProps.longColor.hasSameValue(oldViewProps->longColor)) {
117
+ swiftPart.setLongColor(newViewProps.longColor.get());
118
+ }
119
+ // shortColor: string
120
+ if (oldViewProps == nullptr
121
+ ? newViewProps.shortColor.isProvided()
122
+ : !newViewProps.shortColor.hasSameValue(oldViewProps->shortColor)) {
123
+ swiftPart.setShortColor(newViewProps.shortColor.get());
124
+ }
125
+ // segmentHeight: number
126
+ if (oldViewProps == nullptr
127
+ ? newViewProps.segmentHeight.isProvided()
128
+ : !newViewProps.segmentHeight.hasSameValue(oldViewProps->segmentHeight)) {
129
+ swiftPart.setSegmentHeight(newViewProps.segmentHeight.get());
130
+ }
131
+ // cornerRadius: number
132
+ if (oldViewProps == nullptr
133
+ ? newViewProps.cornerRadius.isProvided()
134
+ : !newViewProps.cornerRadius.hasSameValue(oldViewProps->cornerRadius)) {
135
+ swiftPart.setCornerRadius(newViewProps.cornerRadius.get());
136
+ }
137
+ // gap: number
138
+ if (oldViewProps == nullptr
139
+ ? newViewProps.gap.isProvided()
140
+ : !newViewProps.gap.hasSameValue(oldViewProps->gap)) {
141
+ swiftPart.setGap(newViewProps.gap.get());
142
+ }
143
+ // reducedMotion: boolean
144
+ if (oldViewProps == nullptr
145
+ ? newViewProps.reducedMotion.isProvided()
146
+ : !newViewProps.reducedMotion.hasSameValue(oldViewProps->reducedMotion)) {
147
+ swiftPart.setReducedMotion(newViewProps.reducedMotion.get());
148
+ }
124
149
 
125
- // 3. Update hybridRef if it changed
126
- if (newViewProps.hybridRef.isDirty) {
127
- // hybridRef changed - call it with new this
128
- const auto& maybeFunc = newViewProps.hybridRef.value;
129
- if (maybeFunc.has_value()) {
130
- maybeFunc.value()(_hybridView);
150
+ // Update hybridRef if it changed
151
+ if (oldViewProps == nullptr
152
+ ? newViewProps.hybridRef.isProvided()
153
+ : !newViewProps.hybridRef.hasSameValue(oldViewProps->hybridRef)) {
154
+ // hybridRef changed - call it with new this
155
+ const auto& maybeFunc = newViewProps.hybridRef.get();
156
+ if (maybeFunc.has_value()) {
157
+ maybeFunc.value()(_hybridView);
158
+ }
131
159
  }
132
- newViewProps.hybridRef.isDirty = false;
160
+
161
+ swiftPart.afterUpdate();
133
162
  }
134
163
 
135
- // 4. Continue in base class
164
+ // 3. Continue in base class
136
165
  [super updateProps:props oldProps:oldProps];
137
166
  }
138
167
 
@@ -141,6 +170,7 @@ using namespace margelo::nitro::perpdepthbar::views;
141
170
  }
142
171
 
143
172
  - (void)prepareForRecycle {
173
+ [self notifyOnDropView];
144
174
  [super prepareForRecycle];
145
175
  PerpDepthBar::HybridPerpSideRatioSpec_cxx& swiftPart = _hybridView->getSwiftPart();
146
176
  swiftPart.maybePrepareForRecycle();
@@ -148,8 +178,7 @@ using namespace margelo::nitro::perpdepthbar::views;
148
178
 
149
179
  #ifdef ENABLE_RCT_COMPONENT_VIEW_INVALIDATE
150
180
  - (void)invalidate {
151
- PerpDepthBar::HybridPerpSideRatioSpec_cxx& swiftPart = _hybridView->getSwiftPart();
152
- swiftPart.onDropView();
181
+ [self notifyOnDropView];
153
182
  [super invalidate];
154
183
  }
155
184
  #endif