|  | @@ -6,28 +6,34 @@
 | 
	
		
			
			| 6 | 6 |  
 | 
	
		
			
			| 7 | 7 |  @implementation RNNControllerFactory
 | 
	
		
			
			| 8 | 8 |  
 | 
	
		
			
			| 9 |  | -+(UIViewController *)createRootViewController:(NSDictionary *)layout
 | 
	
		
			
			|  | 9 | +-(UIViewController *)createRootViewController:(NSDictionary *)layout
 | 
	
		
			
			| 10 | 10 |  {
 | 
	
		
			
			| 11 |  | -    if ([layout[@"type"] isEqualToString:@"ContainerStack"]) {
 | 
	
		
			
			| 12 |  | -        UINavigationController* stack = [[UINavigationController alloc] init];
 | 
	
		
			
			| 13 |  | -        
 | 
	
		
			
			| 14 |  | -        NSString* containerName = [layout[@"children"] objectAtIndex:0][@"data"][@"name"];
 | 
	
		
			
			| 15 |  | -        NSString* containerId = [layout[@"children"] objectAtIndex:0][@"id"];
 | 
	
		
			
			| 16 |  | -        
 | 
	
		
			
			| 17 |  | -        [stack setViewControllers:@[[RNNControllerFactory create:containerName containerId:containerId]] animated:false];
 | 
	
		
			
			| 18 |  | -        
 | 
	
		
			
			| 19 |  | -        return stack;
 | 
	
		
			
			| 20 |  | -    }
 | 
	
		
			
			|  | 11 | +    return [self fromTree:layout];
 | 
	
		
			
			|  | 12 | +}
 | 
	
		
			
			|  | 13 | +
 | 
	
		
			
			|  | 14 | +-(UIViewController*)fromTree:(NSDictionary*)node
 | 
	
		
			
			|  | 15 | +{
 | 
	
		
			
			|  | 16 | +    NSString* nodeType = node[@"type"];
 | 
	
		
			
			|  | 17 | +    
 | 
	
		
			
			|  | 18 | +    NSString* nodeId = node[@"id"];
 | 
	
		
			
			|  | 19 | +    NSArray* children = node[@"children"];
 | 
	
		
			
			|  | 20 | +    NSDictionary* data = node[@"data"];
 | 
	
		
			
			| 21 | 21 |      
 | 
	
		
			
			| 22 |  | -//    NSString* containerName = layout[@"container"][@"name"];
 | 
	
		
			
			| 23 |  | -//    NSString* containerId = layout[@"container"][@"id"];
 | 
	
		
			
			|  | 22 | +    if ([nodeType isEqualToString:@"Container"])
 | 
	
		
			
			|  | 23 | +    {
 | 
	
		
			
			|  | 24 | +        return [self createContainer:nodeId data:data];
 | 
	
		
			
			|  | 25 | +    } else if([nodeType isEqualToString:@"ContainerStack"])
 | 
	
		
			
			|  | 26 | +    {
 | 
	
		
			
			|  | 27 | +        return [self createContainerStack:nodeId data:data children:children];
 | 
	
		
			
			|  | 28 | +    }
 | 
	
		
			
			| 24 | 29 |      
 | 
	
		
			
			| 25 |  | -//    return [RNNControllerFactory create:containerName containerId:containerId];
 | 
	
		
			
			| 26 |  | -    return nil;
 | 
	
		
			
			|  | 30 | +    @throw @"unknown container type";
 | 
	
		
			
			| 27 | 31 |  }
 | 
	
		
			
			| 28 | 32 |  
 | 
	
		
			
			| 29 |  | -+(UIViewController*)create:(NSString*)containerName containerId:(NSString*)containerId
 | 
	
		
			
			|  | 33 | +-(UIViewController*)createContainer:(NSString*)containerId data:(NSDictionary*)data
 | 
	
		
			
			| 30 | 34 |  {
 | 
	
		
			
			|  | 35 | +    NSString* containerName = data[@"name"];
 | 
	
		
			
			|  | 36 | +                                   
 | 
	
		
			
			| 31 | 37 |      RCTRootView *reactView = [[RCTRootView alloc] initWithBridge:RNN.instance.bridge
 | 
	
		
			
			| 32 | 38 |                                                        moduleName:containerName
 | 
	
		
			
			| 33 | 39 |                                                 initialProperties:@{@"containerId": containerId}];
 | 
	
	
		
			
			|  | @@ -37,4 +43,17 @@
 | 
	
		
			
			| 37 | 43 |      return controller;
 | 
	
		
			
			| 38 | 44 |  }
 | 
	
		
			
			| 39 | 45 |  
 | 
	
		
			
			|  | 46 | +-(UINavigationController*)createContainerStack:(NSString*)containerId data:(NSDictionary*)data children:(NSArray*)children
 | 
	
		
			
			|  | 47 | +{
 | 
	
		
			
			|  | 48 | +    UINavigationController* vc = [[UINavigationController alloc] init];
 | 
	
		
			
			|  | 49 | +    
 | 
	
		
			
			|  | 50 | +    NSMutableArray* controllers = [NSMutableArray new];
 | 
	
		
			
			|  | 51 | +    for (NSDictionary* node in children) {
 | 
	
		
			
			|  | 52 | +        [controllers addObject:[self fromTree:node]];
 | 
	
		
			
			|  | 53 | +    }
 | 
	
		
			
			|  | 54 | +    [vc setViewControllers:controllers];
 | 
	
		
			
			|  | 55 | +    
 | 
	
		
			
			|  | 56 | +    return vc;
 | 
	
		
			
			|  | 57 | +}
 | 
	
		
			
			|  | 58 | +
 | 
	
		
			
			| 40 | 59 |  @end
 |