Skip to content

Commit

Permalink
feat: RCTConvert to support UIModalPresentationStyle (facebook#43297)
Browse files Browse the repository at this point in the history
Summary:
Currently, the ability to convert JS values to `UIModalPresentationStyle` is not present directly on `RCTConvert`.

In the RN code base itself, there's not a lot of need to do this type of conversion, but in community modules, presenting ViewControllers can be a fairly common scenario and it'd be nice to be able to use this conversion directly from `RCTConvert`, rather than from `RCTModalHostViewManager`, as it'd improve its "discoverability" and consistency.

If someone relied on this, then it's technically speaking a breaking change but I'd say it's for the better, and searching `#import <React/RCTModalHostViewManager.h>` on github doesn't reveal a lot of results.

## Changelog:

[IOS] [ADDED] - RCTConvert to support UIModalPresentationStyle

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests

Pull Request resolved: facebook#43297

Test Plan:
Tested using RN Tester

https://github.com/facebook/react-native/assets/1566403/6e62df86-dde3-47b0-b2e9-bb6b483cadf6

Reviewed By: fkgozali

Differential Revision: D54635896

Pulled By: dmytrorykun

fbshipit-source-id: c6747857830762cd0333c31c287954f3f10d4954
  • Loading branch information
vonovak authored and facebook-github-bot committed Mar 8, 2024
1 parent 9b1c486 commit 2d547a3
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 21 deletions.
1 change: 1 addition & 0 deletions packages/react-native/React/Base/RCTConvert.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ typedef NSURL RCTFileURL;
+ (UIReturnKeyType)UIReturnKeyType:(id)json;
+ (UIUserInterfaceStyle)UIUserInterfaceStyle:(id)json API_AVAILABLE(ios(12));
+ (UIInterfaceOrientationMask)UIInterfaceOrientationMask:(NSString *)orientation;
+ (UIModalPresentationStyle)UIModalPresentationStyle:(id)json;

#if !TARGET_OS_TV
+ (UIDataDetectorTypes)UIDataDetectorTypes:(id)json;
Expand Down
11 changes: 11 additions & 0 deletions packages/react-native/React/Base/RCTConvert.mm
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,17 @@ + (UIKeyboardType)UIKeyboardType:(id)json RCT_DYNAMIC
NSNotFound,
unsignedIntegerValue)

RCT_ENUM_CONVERTER(
UIModalPresentationStyle,
(@{
@"fullScreen" : @(UIModalPresentationFullScreen),
@"pageSheet" : @(UIModalPresentationPageSheet),
@"formSheet" : @(UIModalPresentationFormSheet),
@"overFullScreen" : @(UIModalPresentationOverFullScreen),
}),
UIModalPresentationFullScreen,
integerValue)

RCT_ENUM_CONVERTER(
UIViewContentMode,
(@{
Expand Down
6 changes: 0 additions & 6 deletions packages/react-native/React/Views/RCTModalHostViewManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@
#import <React/RCTInvalidating.h>
#import <React/RCTViewManager.h>

@interface RCTConvert (RCTModalHostView)

+ (UIModalPresentationStyle)UIModalPresentationStyle:(id)json;

@end

typedef void (^RCTModalViewInteractionBlock)(
UIViewController *reactViewController,
UIViewController *viewController,
Expand Down
15 changes: 0 additions & 15 deletions packages/react-native/React/Views/RCTModalHostViewManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,6 @@
#import "RCTShadowView.h"
#import "RCTUtils.h"

@implementation RCTConvert (RCTModalHostView)

RCT_ENUM_CONVERTER(
UIModalPresentationStyle,
(@{
@"fullScreen" : @(UIModalPresentationFullScreen),
@"pageSheet" : @(UIModalPresentationPageSheet),
@"formSheet" : @(UIModalPresentationFormSheet),
@"overFullScreen" : @(UIModalPresentationOverFullScreen),
}),
UIModalPresentationFullScreen,
integerValue)

@end

@interface RCTModalHostShadowView : RCTShadowView

@end
Expand Down

0 comments on commit 2d547a3

Please sign in to comment.