GT2/Ejectable/node_modules/@unimodules/react-native-adapter/ios/UMReactNativeAdapter/UMModuleRegistryAdapter/UMModuleRegistryAdapter.m

71 lines
2.8 KiB
Objective-C

// Copyright 2018-present 650 Industries. All rights reserved.
#import <UMReactNativeAdapter/UMNativeModulesProxy.h>
#import <UMReactNativeAdapter/UMViewManagerAdapter.h>
#import <UMReactNativeAdapter/UMModuleRegistryAdapter.h>
#import <UMReactNativeAdapter/UMViewManagerAdapterClassesRegistry.h>
#import <UMReactNativeAdapter/UMModuleRegistryHolderReactModule.h>
@interface UMModuleRegistryAdapter ()
@property (nonatomic, strong) UMModuleRegistryProvider *moduleRegistryProvider;
@property (nonatomic, strong) UMViewManagerAdapterClassesRegistry *viewManagersClassesRegistry;
@end
@implementation UMModuleRegistryAdapter
- (instancetype)initWithModuleRegistryProvider:(UMModuleRegistryProvider *)moduleRegistryProvider
{
if (self = [super init]) {
_moduleRegistryProvider = moduleRegistryProvider;
_viewManagersClassesRegistry = [[UMViewManagerAdapterClassesRegistry alloc] init];
}
return self;
}
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge
{
return [self extraModulesForModuleRegistry:[_moduleRegistryProvider moduleRegistry]];
}
- (NSArray<id<RCTBridgeModule>> *)extraModulesForModuleRegistry:(UMModuleRegistry *)moduleRegistry
{
NSMutableArray<id<RCTBridgeModule>> *extraModules = [NSMutableArray array];
UMNativeModulesProxy *nativeModulesProxy = [[UMNativeModulesProxy alloc] initWithModuleRegistry:moduleRegistry];
[extraModules addObject:nativeModulesProxy];
for (UMViewManager *viewManager in [moduleRegistry getAllViewManagers]) {
Class viewManagerAdapterClass = [_viewManagersClassesRegistry viewManagerAdapterClassForViewManager:viewManager];
[extraModules addObject:[[viewManagerAdapterClass alloc] initWithViewManager:viewManager]];
}
// Silence React Native warning `Base module "%s" does not exist`
// occurring when view manager class is subclassing another class
// that is not RCTViewManager (in our case all the view manager adapters
// subclass UMViewManagerAdapter, so RN expects to find UMViewManagerAdapter
// exported.
[extraModules addObject:[[UMViewManagerAdapter alloc] init]];
// It is possible that among internal modules there are some RCTBridgeModules --
// let's add them to extraModules here.
for (id<UMInternalModule> module in [moduleRegistry getAllInternalModules]) {
if ([module conformsToProtocol:@protocol(RCTBridgeModule)]) {
id<RCTBridgeModule> reactBridgeModule = (id<RCTBridgeModule>)module;
[extraModules addObject:reactBridgeModule];
}
}
// Adding the way to access the module registry from RCTBridgeModules.
[extraModules addObject:[[UMModuleRegistryHolderReactModule alloc] initWithModuleRegistry:moduleRegistry]];
// One could add some modules to the Module Registry after creating it.
// Here is our last call for finalizing initialization.
[moduleRegistry initialize];
return extraModules;
}
@end