123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #import "RNNComponentViewController.h"
-
- @implementation RNNComponentViewController
-
- @synthesize previewCallback;
-
- - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo rootViewCreator:(id<RNNComponentViewCreator>)creator eventEmitter:(RNNEventEmitter *)eventEmitter presenter:(RNNComponentPresenter *)presenter options:(RNNNavigationOptions *)options defaultOptions:(RNNNavigationOptions *)defaultOptions {
- self = [super initWithLayoutInfo:layoutInfo creator:creator options:options defaultOptions:defaultOptions presenter:presenter eventEmitter:eventEmitter childViewControllers:nil];
- if (@available(iOS 13.0, *)) {
- self.navigationItem.standardAppearance = [UINavigationBarAppearance new];
- self.navigationItem.scrollEdgeAppearance = [UINavigationBarAppearance new];
- }
- return self;
- }
-
- - (void)setDefaultOptions:(RNNNavigationOptions *)defaultOptions {
- _defaultOptions = defaultOptions;
- [_presenter setDefaultOptions:defaultOptions];
- }
-
- - (void)overrideOptions:(RNNNavigationOptions *)options {
- [self.options overrideOptions:options];
- }
-
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- [_presenter applyOptions:self.resolveOptions];
- [self.parentViewController onChildWillAppear];
- }
-
- - (void)viewDidAppear:(BOOL)animated {
- [super viewDidAppear:animated];
- [self componentDidAppear];
- }
-
- - (void)viewDidDisappear:(BOOL)animated {
- [super viewDidDisappear:animated];
- [self componentDidDisappear];
- }
-
- - (void)loadView {
- [self renderReactViewIfNeeded];
- }
-
- - (void)render {
- if (!self.waitForRender)
- [self readyForPresentation];
-
- [self renderReactViewIfNeeded];
- }
-
- - (void)renderReactViewIfNeeded {
- if (!self.isViewLoaded) {
- self.view = [self.creator createRootView:self.layoutInfo.name
- rootViewId:self.layoutInfo.componentId
- ofType:RNNComponentTypeComponent
- reactViewReadyBlock:^{
- [self->_presenter renderComponents:self.resolveOptions perform:^{
- [self readyForPresentation];
- }];
- }];
- } else {
- [self readyForPresentation];
- }
- }
-
- - (UIViewController *)getCurrentChild {
- return nil;
- }
-
- -(void)updateSearchResultsForSearchController:(UISearchController *)searchController {
- [self.eventEmitter sendOnSearchBarUpdated:self.layoutInfo.componentId
- text:searchController.searchBar.text
- isFocused:searchController.searchBar.isFirstResponder];
- }
-
- - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
- [self.eventEmitter sendOnSearchBarCancelPressed:self.layoutInfo.componentId];
- }
-
- - (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
- return self.previewController;
- }
-
- - (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
- if (self.previewCallback) {
- self.previewCallback(self);
- }
- }
-
- - (void)onActionPress:(NSString *)id {
- [_eventEmitter sendOnNavigationButtonPressed:self.layoutInfo.componentId buttonId:id];
- }
-
- - (UIPreviewAction *) convertAction:(NSDictionary *)action {
- NSString *actionId = action[@"id"];
- NSString *actionTitle = action[@"title"];
- UIPreviewActionStyle actionStyle = UIPreviewActionStyleDefault;
- if ([action[@"style"] isEqualToString:@"selected"]) {
- actionStyle = UIPreviewActionStyleSelected;
- } else if ([action[@"style"] isEqualToString:@"destructive"]) {
- actionStyle = UIPreviewActionStyleDestructive;
- }
-
- return [UIPreviewAction actionWithTitle:actionTitle style:actionStyle handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
- [self onActionPress:actionId];
- }];
- }
-
- - (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
- NSMutableArray *actions = [[NSMutableArray alloc] init];
- for (NSDictionary *previewAction in self.resolveOptions.preview.actions) {
- UIPreviewAction *action = [self convertAction:previewAction];
- NSDictionary *actionActions = previewAction[@"actions"];
- if (actionActions.count > 0) {
- NSMutableArray *group = [[NSMutableArray alloc] init];
- for (NSDictionary *previewGroupAction in actionActions) {
- [group addObject:[self convertAction:previewGroupAction]];
- }
- UIPreviewActionGroup *actionGroup = [UIPreviewActionGroup actionGroupWithTitle:action.title style:UIPreviewActionStyleDefault actions:group];
- [actions addObject:actionGroup];
- } else {
- [actions addObject:action];
- }
- }
- return actions;
- }
-
- -(void)onButtonPress:(RNNUIBarButtonItem *)barButtonItem {
- [self.eventEmitter sendOnNavigationButtonPressed:self.layoutInfo.componentId buttonId:barButtonItem.buttonId];
- }
-
- # pragma mark - UIViewController overrides
-
- - (void)willMoveToParentViewController:(UIViewController *)parent {
- [self.presenter willMoveToParentViewController:parent];
- }
-
- - (UIStatusBarStyle)preferredStatusBarStyle {
- return [self.presenter getStatusBarStyle];
- }
-
- - (BOOL)prefersStatusBarHidden {
- return [self.presenter getStatusBarVisibility];
- }
-
- - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
- return [self.presenter getOrientation];
- }
-
- - (BOOL)hidesBottomBarWhenPushed {
- return [self.presenter hidesBottomBarWhenPushed];
- }
-
- @end
|