blob: 6eab170ab25615611d2d0e7fdcc2fe1d6e9b7835 [file] [log] [blame]
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +02001import Feature from '../common/architecture/features/Feature';
Adrià Vilanova Martínez58cc67c2024-04-21 16:43:01 +02002import AutoRefreshFeature from './autoRefresh/autoRefresh.feature';
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +02003import InfiniteScrollFeature from './infiniteScroll/infiniteScroll.feature';
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +02004import ScriptFilterListProvider from '../common/architecture/scripts/ScriptFilterListProvider';
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +02005
6export type ConcreteFeatureClass = { new (): Feature };
7
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +02008export default class Features extends ScriptFilterListProvider {
Adrià Vilanova Martínez58cc67c2024-04-21 16:43:01 +02009 private features: ConcreteFeatureClass[] = [
10 AutoRefreshFeature,
11 InfiniteScrollFeature,
12 ];
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +020013 private initializedFeatures: Feature[];
14
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +020015 protected getUnfilteredScriptsList() {
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +020016 const features = this.getFeatures();
Adrià Vilanova Martínez2ba5d8d2024-05-04 21:17:16 +020017 return features.map((feature) => feature.getScripts()).flat(1);
Adrià Vilanova Martínez18d03c42024-04-21 16:43:01 +020018 }
19
20 private getFeatures() {
21 if (this.initializedFeatures === undefined) {
22 this.initializedFeatures = this.features.map((feature) => new feature());
23 }
24 return this.initializedFeatures;
25 }
26}