Skip to content

Commit f489762

Browse files
authored
refactor(iOS): cleanup conversion code (#2499)
## Description I've recently watched a [talk by Jonathan Müller](https://youtu.be/zGWj7Qo_POY?si=XY-llWKz3esbcGOl) from `CppOnSea` and it was brought to my attention that there is `using enum` syntax in C++ (since C++20), which we can use to make our conversion code much more readable. ## Changes Refactored RNSConvert.mm ## Test code and steps to reproduce Everything should work as before. ## Checklist - [x] Ensured that CI passes
1 parent a1dbae1 commit f489762

File tree

1 file changed

+82
-68
lines changed

1 file changed

+82
-68
lines changed

ios/RNSConvert.mm

Lines changed: 82 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ + (UISemanticContentAttribute)UISemanticContentAttributeFromCppEquivalent:
1111
(react::RNSScreenStackHeaderConfigDirection)direction
1212
{
1313
switch (direction) {
14-
case react::RNSScreenStackHeaderConfigDirection::Rtl:
14+
using enum react::RNSScreenStackHeaderConfigDirection;
15+
16+
case Rtl:
1517
return UISemanticContentAttributeForceRightToLeft;
16-
case react::RNSScreenStackHeaderConfigDirection::Ltr:
18+
case Ltr:
1719
return UISemanticContentAttributeForceLeftToRight;
1820
}
1921
}
@@ -22,11 +24,13 @@ + (UINavigationItemBackButtonDisplayMode)UINavigationItemBackButtonDisplayModeFr
2224
(react::RNSScreenStackHeaderConfigBackButtonDisplayMode)backButtonDisplayMode
2325
{
2426
switch (backButtonDisplayMode) {
25-
case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Default:
27+
using enum react::RNSScreenStackHeaderConfigBackButtonDisplayMode;
28+
29+
case Default:
2630
return UINavigationItemBackButtonDisplayModeDefault;
27-
case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Generic:
31+
case Generic:
2832
return UINavigationItemBackButtonDisplayModeGeneric;
29-
case react::RNSScreenStackHeaderConfigBackButtonDisplayMode::Minimal:
33+
case Minimal:
3034
return UINavigationItemBackButtonDisplayModeMinimal;
3135
}
3236
}
@@ -35,46 +39,49 @@ + (RNSScreenStackPresentation)RNSScreenStackPresentationFromCppEquivalent:
3539
(react::RNSScreenStackPresentation)stackPresentation
3640
{
3741
switch (stackPresentation) {
38-
case react::RNSScreenStackPresentation::Push:
42+
using enum react::RNSScreenStackPresentation;
43+
44+
case Push:
3945
return RNSScreenStackPresentationPush;
40-
case react::RNSScreenStackPresentation::Modal:
46+
case Modal:
4147
return RNSScreenStackPresentationModal;
42-
case react::RNSScreenStackPresentation::FullScreenModal:
48+
case FullScreenModal:
4349
return RNSScreenStackPresentationFullScreenModal;
44-
case react::RNSScreenStackPresentation::FormSheet:
50+
case FormSheet:
4551
return RNSScreenStackPresentationFormSheet;
46-
case react::RNSScreenStackPresentation::ContainedModal:
52+
case ContainedModal:
4753
return RNSScreenStackPresentationContainedModal;
48-
case react::RNSScreenStackPresentation::TransparentModal:
54+
case TransparentModal:
4955
return RNSScreenStackPresentationTransparentModal;
50-
case react::RNSScreenStackPresentation::ContainedTransparentModal:
56+
case ContainedTransparentModal:
5157
return RNSScreenStackPresentationContainedTransparentModal;
5258
}
5359
}
5460

5561
+ (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:(react::RNSScreenStackAnimation)stackAnimation
5662
{
5763
switch (stackAnimation) {
58-
// these four are intentionally grouped
59-
case react::RNSScreenStackAnimation::Slide_from_right:
60-
case react::RNSScreenStackAnimation::Ios_from_right:
61-
case react::RNSScreenStackAnimation::Default:
64+
using enum react::RNSScreenStackAnimation;
65+
// these three are intentionally grouped
66+
case Slide_from_right:
67+
case Ios_from_right:
68+
case Default:
6269
return RNSScreenStackAnimationDefault;
6370
// these two are intentionally grouped
64-
case react::RNSScreenStackAnimation::Slide_from_left:
65-
case react::RNSScreenStackAnimation::Ios_from_left:
71+
case Slide_from_left:
72+
case Ios_from_left:
6673
return RNSScreenStackAnimationSlideFromLeft;
67-
case react::RNSScreenStackAnimation::Flip:
74+
case Flip:
6875
return RNSScreenStackAnimationFlip;
69-
case react::RNSScreenStackAnimation::Simple_push:
76+
case Simple_push:
7077
return RNSScreenStackAnimationSimplePush;
71-
case react::RNSScreenStackAnimation::None:
78+
case None:
7279
return RNSScreenStackAnimationNone;
73-
case react::RNSScreenStackAnimation::Fade:
80+
case Fade:
7481
return RNSScreenStackAnimationFade;
75-
case react::RNSScreenStackAnimation::Slide_from_bottom:
82+
case Slide_from_bottom:
7683
return RNSScreenStackAnimationSlideFromBottom;
77-
case react::RNSScreenStackAnimation::Fade_from_bottom:
84+
case Fade_from_bottom:
7885
return RNSScreenStackAnimationFadeFromBottom;
7986
}
8087
}
@@ -83,17 +90,19 @@ + (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewTypeFromCppEquival
8390
(react::RNSScreenStackHeaderSubviewType)subviewType
8491
{
8592
switch (subviewType) {
86-
case react::RNSScreenStackHeaderSubviewType::Left:
93+
using enum react::RNSScreenStackHeaderSubviewType;
94+
95+
case Left:
8796
return RNSScreenStackHeaderSubviewTypeLeft;
88-
case react::RNSScreenStackHeaderSubviewType::Right:
97+
case Right:
8998
return RNSScreenStackHeaderSubviewTypeRight;
90-
case react::RNSScreenStackHeaderSubviewType::Title:
99+
case Title:
91100
return RNSScreenStackHeaderSubviewTypeTitle;
92-
case react::RNSScreenStackHeaderSubviewType::Center:
101+
case Center:
93102
return RNSScreenStackHeaderSubviewTypeCenter;
94-
case react::RNSScreenStackHeaderSubviewType::SearchBar:
103+
case SearchBar:
95104
return RNSScreenStackHeaderSubviewTypeSearchBar;
96-
case react::RNSScreenStackHeaderSubviewType::Back:
105+
case Back:
97106
return RNSScreenStackHeaderSubviewTypeBackButton;
98107
}
99108
}
@@ -102,19 +111,21 @@ + (RNSScreenReplaceAnimation)RNSScreenReplaceAnimationFromCppEquivalent:
102111
(react::RNSScreenReplaceAnimation)replaceAnimation
103112
{
104113
switch (replaceAnimation) {
105-
case react::RNSScreenReplaceAnimation::Pop:
114+
using enum react::RNSScreenReplaceAnimation;
115+
case Pop:
106116
return RNSScreenReplaceAnimationPop;
107-
case react::RNSScreenReplaceAnimation::Push:
117+
case Push:
108118
return RNSScreenReplaceAnimationPush;
109119
}
110120
}
111121

112122
+ (RNSScreenSwipeDirection)RNSScreenSwipeDirectionFromCppEquivalent:(react::RNSScreenSwipeDirection)swipeDirection
113123
{
114124
switch (swipeDirection) {
115-
case react::RNSScreenSwipeDirection::Horizontal:
125+
using enum react::RNSScreenSwipeDirection;
126+
case Horizontal:
116127
return RNSScreenSwipeDirectionHorizontal;
117-
case react::RNSScreenSwipeDirection::Vertical:
128+
case Vertical:
118129
return RNSScreenSwipeDirectionVertical;
119130
}
120131
}
@@ -144,13 +155,14 @@ + (UITextAutocapitalizationType)UITextAutocapitalizationTypeFromCppEquivalent:
144155
(react::RNSSearchBarAutoCapitalize)autoCapitalize
145156
{
146157
switch (autoCapitalize) {
147-
case react::RNSSearchBarAutoCapitalize::Words:
158+
using enum react::RNSSearchBarAutoCapitalize;
159+
case Words:
148160
return UITextAutocapitalizationTypeWords;
149-
case react::RNSSearchBarAutoCapitalize::Sentences:
161+
case Sentences:
150162
return UITextAutocapitalizationTypeSentences;
151-
case react::RNSSearchBarAutoCapitalize::Characters:
163+
case Characters:
152164
return UITextAutocapitalizationTypeAllCharacters;
153-
case react::RNSSearchBarAutoCapitalize::None:
165+
case None:
154166
return UITextAutocapitalizationTypeNone;
155167
}
156168
}
@@ -159,11 +171,12 @@ + (UITextAutocapitalizationType)UITextAutocapitalizationTypeFromCppEquivalent:
159171
+ (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RNSSearchBarPlacement)placement
160172
{
161173
switch (placement) {
162-
case react::RNSSearchBarPlacement::Stacked:
174+
using enum react::RNSSearchBarPlacement;
175+
case Stacked:
163176
return RNSSearchBarPlacementStacked;
164-
case react::RNSSearchBarPlacement::Automatic:
177+
case Automatic:
165178
return RNSSearchBarPlacementAutomatic;
166-
case react::RNSSearchBarPlacement::Inline:
179+
case Inline:
167180
return RNSSearchBarPlacementInline;
168181
}
169182
}
@@ -179,68 +192,69 @@ + (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RN
179192

180193
+ (RNSBlurEffectStyle)RNSBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect
181194
{
195+
using enum react::RNSScreenStackHeaderConfigBlurEffect;
182196
#if !TARGET_OS_TV && defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
183197
__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
184198
if (@available(iOS 13.0, *)) {
185199
switch (blurEffect) {
186-
case react::RNSScreenStackHeaderConfigBlurEffect::None:
200+
case None:
187201
return RNSBlurEffectStyleNone;
188-
case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
202+
case ExtraLight:
189203
return RNSBlurEffectStyleExtraLight;
190-
case react::RNSScreenStackHeaderConfigBlurEffect::Light:
204+
case Light:
191205
return RNSBlurEffectStyleLight;
192-
case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
206+
case Dark:
193207
return RNSBlurEffectStyleDark;
194-
case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
208+
case Regular:
195209
return RNSBlurEffectStyleRegular;
196-
case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
210+
case Prominent:
197211
return RNSBlurEffectStyleProminent;
198-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterial:
212+
case SystemUltraThinMaterial:
199213
return RNSBlurEffectStyleSystemUltraThinMaterial;
200-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterial:
214+
case SystemThinMaterial:
201215
return RNSBlurEffectStyleSystemThinMaterial;
202-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterial:
216+
case SystemMaterial:
203217
return RNSBlurEffectStyleSystemMaterial;
204-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterial:
218+
case SystemThickMaterial:
205219
return RNSBlurEffectStyleSystemThickMaterial;
206-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterial:
220+
case SystemChromeMaterial:
207221
return RNSBlurEffectStyleSystemChromeMaterial;
208-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialLight:
222+
case SystemUltraThinMaterialLight:
209223
return RNSBlurEffectStyleSystemUltraThinMaterialLight;
210-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialLight:
224+
case SystemThinMaterialLight:
211225
return RNSBlurEffectStyleSystemThinMaterialLight;
212-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialLight:
226+
case SystemMaterialLight:
213227
return RNSBlurEffectStyleSystemMaterialLight;
214-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialLight:
228+
case SystemThickMaterialLight:
215229
return RNSBlurEffectStyleSystemThickMaterialLight;
216-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialLight:
230+
case SystemChromeMaterialLight:
217231
return RNSBlurEffectStyleSystemChromeMaterialLight;
218-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialDark:
232+
case SystemUltraThinMaterialDark:
219233
return RNSBlurEffectStyleSystemUltraThinMaterialDark;
220-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialDark:
234+
case SystemThinMaterialDark:
221235
return RNSBlurEffectStyleSystemThinMaterialDark;
222-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialDark:
236+
case SystemMaterialDark:
223237
return RNSBlurEffectStyleSystemMaterialDark;
224-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialDark:
238+
case SystemThickMaterialDark:
225239
return RNSBlurEffectStyleSystemThickMaterialDark;
226-
case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialDark:
240+
case SystemChromeMaterialDark:
227241
return RNSBlurEffectStyleSystemChromeMaterialDark;
228242
}
229243
}
230244
#endif
231245

232246
switch (blurEffect) {
233-
case react::RNSScreenStackHeaderConfigBlurEffect::None:
247+
case None:
234248
return RNSBlurEffectStyleNone;
235-
case react::RNSScreenStackHeaderConfigBlurEffect::Light:
249+
case Light:
236250
return RNSBlurEffectStyleLight;
237-
case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
251+
case Dark:
238252
return RNSBlurEffectStyleDark;
239-
case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
253+
case Regular:
240254
return RNSBlurEffectStyleRegular;
241-
case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
255+
case Prominent:
242256
return RNSBlurEffectStyleProminent;
243-
case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
257+
case ExtraLight:
244258
default:
245259
return RNSBlurEffectStyleNone;
246260
}

0 commit comments

Comments
 (0)