//// //// DarwerTheSideBarManagerViewController.m //// ReactNativeControllers //// //// Created by Ran Greenberg on 22/03/2016. //// Copyright © 2016 artal. All rights reserved. //// // //#import "RCCTheSideBarManagerViewController.h" //#import "RCCViewController.h" //#import "RCCDrawerHelper.h" //#import "RCTConvert.h" // // //@interface RCCTheSideBarManagerViewController () // //@property (nonatomic) BOOL isOpen; // //@property (nonatomic) SidebarTransitionStyle animationStyle; // //@property (nonatomic, strong) RCCViewController *leftViewController; //@property (nonatomic, strong) RCCViewController *rightViewController; //@property (nonatomic, strong) RCCViewController *centerViewController; // // //@property (nonatomic, strong) UIColor *originalWindowBackgroundColor; // //@end // //@implementation RCCTheSideBarManagerViewController // //@synthesize overlayButton = _overlayButton, drawerStyle = _drawerStyle; // // //-(UIButton*)overlayButton { // if (!_overlayButton) { // _overlayButton = [RCCDrawerHelper createOverlayButton:self]; // } // return _overlayButton; //} // //- (instancetype)initWithProps:(NSDictionary *)props children:(NSArray *)children globalProps:(NSDictionary*)globalProps bridge:(RCTBridge *)bridge { // // if ([children count] < 1) return nil; // // UIViewController *centerVC = [RCCViewController controllerWithLayout:children[0] globalProps:props bridge:bridge]; // UIViewController *leftVC = nil; // UIViewController *rightVC = nil; // // // left // NSString *componentLeft = props[@"componentLeft"]; // if (componentLeft) { // leftVC = [[RCCViewController alloc] initWithComponent:componentLeft passProps:props[@"passPropsLeft"] navigatorStyle:nil globalProps:props bridge:bridge]; // } // // // right // NSString *componentRight = props[@"componentRight"]; // if (componentRight) { // rightVC = [[RCCViewController alloc] initWithComponent:componentRight passProps:props[@"passPropsRight"] navigatorStyle:nil globalProps:props bridge:bridge]; // } // // self = [super initWithContentViewController:centerVC // leftSidebarViewController:leftVC // rightSidebarViewController:rightVC]; // if (!self) return nil; // // self.leftViewController = leftVC; // self.rightViewController = rightVC; // self.centerViewController = centerVC; // self.drawerStyle = props[@"style"]; // self.delegate = self; // self.isOpen = NO; // [self setAnimationType:props[@"animationType"]]; // [self setStyle]; // // return self; //} // // //-(void)viewDidDisappear:(BOOL)animated { // [super viewDidDisappear:animated]; // // UIWindow *appDelegateWindow = [[[UIApplication sharedApplication] delegate] window]; // [appDelegateWindow setBackgroundColor:self.originalWindowBackgroundColor]; // //} // // //-(void)setStyle:(TheSideBarSide)side { // // if(side == TheSideBarSideLeft && !self.leftViewController) return; // if(side == TheSideBarSideRight && !self.rightViewController) return; // // CGRect sideBarFrame = self.view.frame; // // switch (side) { // case TheSideBarSideLeft: // { // NSNumber *leftDrawerWidth = self.drawerStyle[@"leftDrawerWidth"]; // if (!leftDrawerWidth) leftDrawerWidth = [NSNumber numberWithInteger:DRAWER_DEFAULT_WIDTH_PERCENTAGE]; // // self.visibleWidth = self.view.bounds.size.width * MIN(1, (leftDrawerWidth.floatValue/100.0)); // sideBarFrame.size.width = self.view.bounds.size.width * MIN(1, (leftDrawerWidth.floatValue/100.0)); // self.leftViewController.view.frame = sideBarFrame; // } // break; // // case TheSideBarSideRight: // { // NSNumber *rightDrawerWidth = self.drawerStyle[@"rightDrawerWidth"]; // if (!rightDrawerWidth) rightDrawerWidth = [NSNumber numberWithInteger:DRAWER_DEFAULT_WIDTH_PERCENTAGE]; // // self.visibleWidth = self.view.bounds.size.width * MIN(1, (rightDrawerWidth.floatValue/100.0)); // sideBarFrame.size.width = self.view.bounds.size.width * MIN(1, (rightDrawerWidth.floatValue/100.0)); // sideBarFrame.origin.x = self.view.frame.size.width - self.visibleWidth; // self.rightViewController.view.frame = sideBarFrame; // } // break; // // default: // break; // } //} // // //-(void)setStyle { // // [self setStyle:TheSideBarSideLeft]; // [self setStyle:TheSideBarSideRight]; // // NSString *contentOverlayColor = self.drawerStyle[@"contentOverlayColor"]; // if (contentOverlayColor) // { // UIColor *color = contentOverlayColor != (id)[NSNull null] ? [RCTConvert UIColor:contentOverlayColor] : nil; // self.overlayContentColor = color; // } // // UIImage *backgroundImage = nil; // id icon = self.drawerStyle[@"backgroundImage"]; // UIWindow *appDelegateWindow = [[[UIApplication sharedApplication] delegate] window]; // self.originalWindowBackgroundColor = appDelegateWindow.backgroundColor; // // if (icon) // { // backgroundImage = [RCTConvert UIImage:icon]; // if (backgroundImage) { // backgroundImage = [RCCDrawerHelper imageWithImage:backgroundImage scaledToSize:appDelegateWindow.bounds.size]; // [appDelegateWindow setBackgroundColor:[UIColor colorWithPatternImage:backgroundImage]]; // } // } //} // // //-(void)setAnimationType:(NSString*)type { // if ([type isEqualToString:@"airbnb"]) self.animationStyle = SidebarTransitionStyleAirbnb; // else if ([type isEqualToString:@"facebook"]) self.animationStyle = SidebarTransitionStyleFacebook; // else if ([type isEqualToString:@"luvocracy"]) self.animationStyle = SidebarTransitionStyleLuvocracy; // else if ([type isEqualToString:@"wunder-list"]) self.animationStyle = SidebarTransitionStyleWunderlist; // // // currently unsuported animation types // // else if ([type isEqualToString:@"feedly"]) self.animationStyle = SidebarTransitionStyleFeedly; // // else if ([type isEqualToString:@"flipboard"]) self.animationStyle = SidebarTransitionStyleFlipboard; // // // // default // else self.animationStyle = SidebarTransitionStyleAirbnb; //} // //- (void)performAction:(NSString*)performAction actionParams:(NSDictionary*)actionParams bridge:(RCTBridge *)bridge { // // TheSideBarSide side = TheSideBarSideLeft; // // if ([actionParams[@"side"] isEqualToString:@"right"]) side = TheSideBarSideRight; // // // open // if ([performAction isEqualToString:@"open"]) // { // [self openSideMenu:side]; // return; // } // // // close // if ([performAction isEqualToString:@"close"]) // { // [self overlayButtonPressed:self.overlayButton]; // return; // } // // // toggle // if ([performAction isEqualToString:@"toggle"]) // { // [self setStyle:side]; // if (self.isOpen) { // [self overlayButtonPressed:self.overlayButton]; // } // else { // [self openSideMenu:side]; // } // self.isOpen = !self.isOpen; // return; // } // // // setStyle // if ([performAction isEqualToString:@"setStyle"]) // { // if (actionParams[@"animationType"]) { // NSString *animationTypeString = actionParams[@"animationType"]; // // CGRect leftSideBarFrame = self.leftViewController.view.frame; // leftSideBarFrame.origin.x = 0; // self.leftViewController.view.frame = leftSideBarFrame; // // CGRect rightSideBarFrame = self.rightViewController.view.frame; // rightSideBarFrame.origin.x = self.view.frame.size.width - self.visibleWidth; // self.rightViewController.view.frame = rightSideBarFrame; // // [self setAnimationType:animationTypeString]; // } // return; // } //} // // //-(void)openSideMenu:(TheSideBarSide)side{ // // RCCDrawerSide drawerSide; // // switch (side) { // case TheSideBarSideLeft: // { // [self presentLeftSidebarViewControllerWithStyle:self.animationStyle]; // drawerSide = RCCDrawerSideLeft; // } // // break; // case TheSideBarSideRight: // { // [self presentRightSidebarViewControllerWithStyle:self.animationStyle]; // drawerSide = RCCDrawerSideRight; // } // // break; // // default: // break; // } // // [RCCDrawerHelper addOverlayButtonToScreen:self.overlayButton contextView:self.view side:drawerSide sideMenuWidth:self.visibleWidth animationDuration:self.animationDuration]; //} // //-(void)overlayButtonPressed:(UIButton*)button { // [self dismissSidebarViewController]; // [RCCDrawerHelper overlayButtonPressed:button animationDuration:self.animationDuration]; // self.isOpen = NO; //} // // //@end