import { ShareModuleImpl } from "./../implementation/reactNative/ShareModuleImpl"; import { ImageResolverModule } from "./../interfaces/ImageResolverModule"; import { ServerTimeModule } from "./../interfaces/ServerTimeModule"; import { GenericUtilsModule } from "./../interfaces/GenericUtilsModule"; import { ShareModule } from "../interfaces/ShareModule"; import { NativeModule } from "./NativeModuleHelper"; import { OmnitureModule } from "../interfaces/OmnitureModule"; import { NavigationModule } from "../interfaces/NavigationModule"; import { AssetsModule } from "../interfaces/AssetsModule"; import { OmnitureModuleImpl } from "../implementation/reactNative/OmnitureModuleImpl"; import { NavigationModuleImpl } from "../implementation/reactNative/NavigationModuleImpl"; import GenericUtilsModuleImpl from "../implementation/reactNative/GenericUtilsModuleImpl"; import { ServerTimeModuleImpl } from "../implementation/reactNative/ServerTimeModuleImpl"; import ImageResolverModuleImpl from "../implementation/reactNative/ImageResolverModuleImpl"; import AssetsModuleImpl from "../implementation/reactNative/AssetsModuleImpl"; import { WindowManager } from "./WindowManager"; import ImageResolverModuleImplWeb from "../implementation/web/ImageResolverModuleImpl"; import GenericUtilsModuleImplWeb from "../implementation/web/GenericUtilsModuleImpl"; import ShareModuleImplWeb from "../implementation/web/ShareModuleImpl"; import FontModuleImplWeb from "../implementation/web/FontModuleImpl"; import FontModuleImpl from "../implementation/reactNative/FontModuleImpl"; import { FontModule } from "../interfaces/FontModule"; enum MODULE_NAME { OMNITURE_MODULE, NAVIGATION_MODULE, SHARE_MODULE, GENERIC_UTILS_MODULE, SERVER_TIME_MODULE, IMAGE_RESOLVER_MODULE, ASSETS_MODULE, FONT_MODULE, } export class ModuleManager { //DO NOT ACCESS DIRECTLY private moduleMap: { [key: number]: any }; constructor() { this.moduleMap = {}; if (WindowManager.isReactNativeHost()) { this.addModule(MODULE_NAME.OMNITURE_MODULE, new OmnitureModuleImpl()); this.addModule(MODULE_NAME.NAVIGATION_MODULE, new NavigationModuleImpl()); this.addModule(MODULE_NAME.SHARE_MODULE, new ShareModuleImpl()); this.addModule(MODULE_NAME.GENERIC_UTILS_MODULE, new GenericUtilsModuleImpl()); this.addModule(MODULE_NAME.SERVER_TIME_MODULE, new ServerTimeModuleImpl()); this.addModule(MODULE_NAME.IMAGE_RESOLVER_MODULE, new ImageResolverModuleImpl()); this.addModule(MODULE_NAME.ASSETS_MODULE, new AssetsModuleImpl()); this.addModule(MODULE_NAME.FONT_MODULE, new FontModuleImpl()); } else { this.addModule(MODULE_NAME.IMAGE_RESOLVER_MODULE, new ImageResolverModuleImplWeb()); this.addModule(MODULE_NAME.GENERIC_UTILS_MODULE, new GenericUtilsModuleImplWeb()); this.addModule(MODULE_NAME.SHARE_MODULE, new ShareModuleImplWeb()); this.addModule(MODULE_NAME.FONT_MODULE, new FontModuleImplWeb()); } } public getFontModule(): FontModule { return this.getModule(MODULE_NAME.FONT_MODULE); } public getAnalyticsModule(): OmnitureModule { return this.getModule(MODULE_NAME.OMNITURE_MODULE); } public getGenericUtilsModule(): GenericUtilsModule { return this.getModule(MODULE_NAME.GENERIC_UTILS_MODULE); } public getShareModule(): ShareModule { return this.getModule(MODULE_NAME.SHARE_MODULE); } public getServerTimeModule(): ServerTimeModule { return this.getModule(MODULE_NAME.SERVER_TIME_MODULE); } public getNavigationModule(): NavigationModule { return this.getModule(MODULE_NAME.NAVIGATION_MODULE); } public getImageResolverModule(): ImageResolverModule { return this.getModule(MODULE_NAME.IMAGE_RESOLVER_MODULE); } public getAssetsModule(): AssetsModule { return this.getModule(MODULE_NAME.ASSETS_MODULE); } private addModule(moduleName: MODULE_NAME, nativeModule: NativeModule): void { this.moduleMap[moduleName] = nativeModule; } private getModule(moduleName: MODULE_NAME): T { return this.moduleMap[moduleName] as T; } }