react-native-navigation
Version:
React Native Navigation - truly native navigation for iOS and Android
44 lines (41 loc) • 1.56 kB
text/typescript
import { ComponentProvider } from 'react-native';
import { Store } from './Store';
import { ComponentEventsObserver } from '../events/ComponentEventsObserver';
import { ComponentWrapper } from './ComponentWrapper';
import { AppRegistryService } from '../adapters/AppRegistryService';
export class ComponentRegistry {
constructor(
private store: Store,
private componentEventsObserver: ComponentEventsObserver,
private componentWrapper: ComponentWrapper,
private appRegistryService: AppRegistryService
) {}
registerComponent(
componentName: string | number,
componentProvider: ComponentProvider,
concreteComponentProvider?: ComponentProvider,
ReduxProvider?: any,
reduxStore?: any
): ComponentProvider {
const NavigationComponent = () => {
if (this.store.hasRegisteredWrappedComponent(componentName)) {
return this.store.getWrappedComponent(componentName);
} else {
const wrappedComponent = this.componentWrapper.wrap(
componentName.toString(),
componentProvider,
this.store,
this.componentEventsObserver,
concreteComponentProvider,
ReduxProvider,
reduxStore
);
this.store.setWrappedComponent(componentName, wrappedComponent);
return wrappedComponent;
}
};
this.store.setComponentClassForName(componentName.toString(), NavigationComponent);
this.appRegistryService.registerComponent(componentName.toString(), NavigationComponent);
return NavigationComponent;
}
}