| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- #import "RNNNavigationOptions.h"
 - #import <React/RCTConvert.h>
 - #import "RNNNavigationController.h"
 - #import "RNNTabBarController.h"
 - #import "RNNTopBarOptions.h"
 - #import "RNNSideMenuController.h"
 - #import "RNNRootViewController.h"
 - #import "RNNNavigationButtons.h"
 - 
 - const NSInteger BLUR_STATUS_TAG = 78264801;
 - const NSInteger BLUR_TOPBAR_TAG = 78264802;
 - const NSInteger TOP_BAR_TRANSPARENT_TAG = 78264803;
 - 
 - @implementation RNNNavigationOptions
 - 
 - -(instancetype)init {
 - 	return [self initWithDict:@{}];
 - }
 - 
 - -(instancetype)initWithDict:(NSDictionary *)navigationOptions {
 - 	self = [super init];
 - 	self.statusBarHidden = [navigationOptions objectForKey:@"statusBarHidden"];
 - 	self.screenBackgroundColor = [navigationOptions objectForKey:@"screenBackgroundColor"];
 - 	self.backButtonTransition = [navigationOptions objectForKey:@"backButtonTransition"];
 - 	self.orientation = [navigationOptions objectForKey:@"orientation"];
 - 	self.topBar = [[RNNTopBarOptions alloc] initWithDict:[navigationOptions objectForKey:@"topBar"]];
 - 	self.topTab = [[RNNTopTabOptions alloc] initWithDict:[navigationOptions objectForKey:@"topTab"]];
 - 	self.bottomTabs = [[RNNBottomTabsOptions alloc] initWithDict:[navigationOptions objectForKey:@"bottomTabs"]];
 - 	self.sideMenu = [[RNNSideMenuOptions alloc] initWithDict:[navigationOptions objectForKey:@"sideMenu"]];
 - 	self.backgroundImage = [RCTConvert UIImage:[navigationOptions objectForKey:@"backgroundImage"]];
 - 	self.rootBackgroundImage = [RCTConvert UIImage:[navigationOptions objectForKey:@"rootBackgroundImage"]];
 - 	self.bottomTab = [[RNNBottomTabOptions alloc] initWithDict:[navigationOptions objectForKey:@"bottomTab"]];
 -     
 - 	return self;
 - }
 - 
 - -(void)mergeWith:(NSDictionary *)otherOptions {
 - 	for (id key in otherOptions) {
 - 		if ([[self valueForKey:key] isKindOfClass:[RNNOptions class]]) {
 - 			RNNOptions* options = [self valueForKey:key];
 - 			[options mergeWith:[otherOptions objectForKey:key]];
 - 		} else {
 - 			[self setValue:[otherOptions objectForKey:key] forKey:key];
 - 		}
 - 	}
 - }
 - 
 - -(void)applyOn:(UIViewController*)viewController {
 - 	[self.topBar applyOn:viewController];
 - 	[self.bottomTabs applyOn:viewController];
 - 	[self.topTab applyOn:viewController];
 - 	[self.bottomTab applyOn:viewController];
 - 	[self.sideMenu applyOn:viewController];
 - 	
 - 	if (self.popGesture) {
 - 		viewController.navigationController.interactivePopGestureRecognizer.enabled = [self.popGesture boolValue];
 - 	}
 - 	
 - 	if (self.screenBackgroundColor) {
 - 		UIColor* screenColor = [RCTConvert UIColor:self.screenBackgroundColor];
 - 		viewController.view.backgroundColor = screenColor;
 - 	}
 - 	
 - 	if (self.statusBarBlur) {
 - 		UIView* curBlurView = [viewController.view viewWithTag:BLUR_STATUS_TAG];
 - 		if ([self.statusBarBlur boolValue]) {
 - 			if (!curBlurView) {
 - 				UIVisualEffectView *blur = [[UIVisualEffectView alloc] initWithEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]];
 - 				blur.frame = [[UIApplication sharedApplication] statusBarFrame];
 - 				blur.tag = BLUR_STATUS_TAG;
 - 				[viewController.view insertSubview:blur atIndex:0];
 - 			}
 - 		} else {
 - 			if (curBlurView) {
 - 				[curBlurView removeFromSuperview];
 - 			}
 - 		}
 - 	}
 - 	
 - 	if (self.backgroundImage) {
 - 		UIImageView* backgroundImageView = (viewController.view.subviews.count > 0) ? viewController.view.subviews[0] : nil;
 - 		if (![backgroundImageView isKindOfClass:[UIImageView class]]) {
 - 			backgroundImageView = [[UIImageView alloc] initWithFrame:viewController.view.bounds];
 - 			[viewController.view insertSubview:backgroundImageView atIndex:0];
 - 		}
 - 		
 - 		backgroundImageView.layer.masksToBounds = YES;
 - 		backgroundImageView.image = self.backgroundImage;
 - 		[backgroundImageView setContentMode:UIViewContentModeScaleAspectFill];
 - 	}
 - 	
 - 	if (self.rootBackgroundImage) {
 - 		UIImageView* backgroundImageView = (viewController.navigationController.view.subviews.count > 0) ? viewController.navigationController.view.subviews[0] : nil;
 - 		if (![backgroundImageView isKindOfClass:[UIImageView class]]) {
 - 			backgroundImageView = [[UIImageView alloc] initWithFrame:viewController.view.bounds];
 - 			[viewController.navigationController.view insertSubview:backgroundImageView atIndex:0];
 - 		}
 - 		
 - 		backgroundImageView.layer.masksToBounds = YES;
 - 		backgroundImageView.image = self.rootBackgroundImage;
 - 		[backgroundImageView setContentMode:UIViewContentModeScaleAspectFill];
 - 	}
 - }
 - 
 - - (UIInterfaceOrientationMask)supportedOrientations {
 - 	NSArray* orientationsArray = [self.orientation isKindOfClass:[NSString class]] ? @[self.orientation] : self.orientation;
 - 	NSUInteger supportedOrientationsMask = 0;
 - 	if (!orientationsArray || [self.orientation isEqual:@"default"]) {
 - 		return [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:[[UIApplication sharedApplication] keyWindow]];
 - 	} else {
 - 		for (NSString* orientation in orientationsArray) {
 - 			if ([orientation isEqualToString:@"all"]) {
 - 				supportedOrientationsMask = UIInterfaceOrientationMaskAll;
 - 				break;
 - 			}
 - 			if ([orientation isEqualToString:@"landscape"]) {
 - 				supportedOrientationsMask = (supportedOrientationsMask | UIInterfaceOrientationMaskLandscape);
 - 			}
 - 			if ([orientation isEqualToString:@"portrait"]) {
 - 				supportedOrientationsMask = (supportedOrientationsMask | UIInterfaceOrientationMaskPortrait);
 - 			}
 - 			if ([orientation isEqualToString:@"upsideDown"]) {
 - 				supportedOrientationsMask = (supportedOrientationsMask | UIInterfaceOrientationMaskPortraitUpsideDown);
 - 			}
 - 		}
 - 	}
 - 	
 - 	return supportedOrientationsMask;
 - }
 - 
 - @end
 
 
  |