refactor: migrate extra info feature to the new architecture
Bug: twpowertools:176
Change-Id: I379216066b973fe76f000ab9581053c1f0da569e
diff --git a/src/common/architecture/dependenciesProvider/DependenciesProvider.ts b/src/common/architecture/dependenciesProvider/DependenciesProvider.ts
index 132a67c..b6af2a1 100644
--- a/src/common/architecture/dependenciesProvider/DependenciesProvider.ts
+++ b/src/common/architecture/dependenciesProvider/DependenciesProvider.ts
@@ -1,16 +1,23 @@
+import ExtraInfo from '../../../features/extraInfo/core';
import AutoRefresh from '../../../features/autoRefresh/core/autoRefresh';
export const AutoRefreshDependency = 'autoRefresh';
+export const ExtraInfoDependency = 'extraInfo';
export const DependenciesToClass = {
[AutoRefreshDependency]: AutoRefresh,
+ [ExtraInfoDependency]: ExtraInfo,
};
interface OurWindow extends Window {
TWPTDependencies?: Dependencies;
}
+export type ClassFromDependency<T extends Dependency> = InstanceType<
+ (typeof DependenciesToClass)[T]
+>;
+
type Dependencies = {
- [K in Dependency]?: InstanceType<(typeof DependenciesToClass)[K]>;
+ [K in Dependency]?: ClassFromDependency<K>;
};
export type Dependency = keyof typeof DependenciesToClass;
@@ -26,14 +33,22 @@
this.dependencies = ourWindow.TWPTDependencies;
}
- getDependency(dependency: Dependency) {
+ /**
+ * Gets an instance of a dependency, and creates it beforehand if it doesn't exist yet.
+ */
+ getDependency<T extends Dependency>(dependency: T): ClassFromDependency<T> {
this.setUpDependency(dependency);
- return this.dependencies[dependency];
+ const dep = this.dependencies[dependency];
+ if (!dep) {
+ throw new Error(`Dependency ${dependency} not found.`);
+ }
+ return dep;
}
- setUpDependency(dependency: Dependency): void {
+ setUpDependency<T extends Dependency>(dependency: T): void {
if (!this.dependencies[dependency]) {
- this.dependencies[dependency] = new DependenciesToClass[dependency]();
+ const dependencyClass = DependenciesToClass[dependency];
+ this.dependencies[dependency] = new dependencyClass() as Dependencies[T];
}
}
}