blob: bc09eee391d4e65cc60cb085465df69fbf0c3c59 [file] [log] [blame]
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +02001import Feature from '../common/architecture/features/Feature';
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +02002import InfiniteScrollFeature from './infiniteScroll/infiniteScroll.feature';
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +02003import ScriptFilterListProvider from '../common/architecture/scripts/ScriptFilterListProvider';
Adrià Vilanova Martínez66836fd2024-05-04 22:43:06 +02004import ExtraInfoFeature from './extraInfo/extraInfo.feature';
Adrià Vilanova Martínezc78c3ad2024-05-18 00:35:51 +02005import WorkflowsFeature from './workflows/workflows.feature';
Adrià Vilanova Martínez917797e2024-05-25 22:41:25 +02006import CCDarkThemeFeature from './ccDarkTheme/ccDarkTheme.feature';
Adrià Vilanova61f782f2024-05-31 22:57:24 +00007import LoadDraftsFeature from './loadDrafts/loadDrafts.feature';
8import InteropThreadPageFeature from './interopThreadPage/interopThreadPage.feature';
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +02009
10export type ConcreteFeatureClass = { new (): Feature };
11
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +020012export default class Features extends ScriptFilterListProvider {
Adrià Vilanova Martínez58cc67c2024-04-21 16:43:01 +020013 private features: ConcreteFeatureClass[] = [
Adrià Vilanova Martínez917797e2024-05-25 22:41:25 +020014 CCDarkThemeFeature,
Adrià Vilanova Martínez66836fd2024-05-04 22:43:06 +020015 ExtraInfoFeature,
Adrià Vilanova Martínez58cc67c2024-04-21 16:43:01 +020016 InfiniteScrollFeature,
Adrià Vilanova61f782f2024-05-31 22:57:24 +000017 InteropThreadPageFeature,
18 LoadDraftsFeature,
Adrià Vilanova Martínezc78c3ad2024-05-18 00:35:51 +020019 WorkflowsFeature,
Adrià Vilanova Martínez58cc67c2024-04-21 16:43:01 +020020 ];
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +020021 private initializedFeatures: Feature[];
22
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +020023 protected getUnfilteredScriptsList() {
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +020024 const features = this.getFeatures();
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +020025 return features.map((feature) => feature.getScripts()).flat(1);
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +020026 }
27
28 private getFeatures() {
29 if (this.initializedFeatures === undefined) {
30 this.initializedFeatures = this.features.map((feature) => new feature());
31 }
32 return this.initializedFeatures;
33 }
34}