diff --git a/src/atlasComponents/sapiViews/core/region/region/rich/region.rich.template.html b/src/atlasComponents/sapiViews/core/region/region/rich/region.rich.template.html index 675927dfcbf690c93921fa1073db10b0faa60bb8..d4a9a79d17698288b49f115c83d895459327bd20 100644 --- a/src/atlasComponents/sapiViews/core/region/region/rich/region.rich.template.html +++ b/src/atlasComponents/sapiViews/core/region/region/rich/region.rich.template.html @@ -68,7 +68,7 @@ <spinner-cmp *ngIf="rfDir.busy$ | async"></spinner-cmp> <sxplr-sapiviews-features-entry-list-item - *ngFor="let feat of rfDir.listOfFeatures$ | async" + *ngFor="let feat of rfDir.listOfFeatures$ | async | orderFilterFeatures" [sxplr-sapiviews-features-entry-list-item-feature]="feat" (click)="handleRegionalFeatureClicked(feat)"> </sxplr-sapiviews-features-entry-list-item> diff --git a/src/atlasComponents/sapiViews/features/entryListItem/entryListItem.component.ts b/src/atlasComponents/sapiViews/features/entryListItem/entryListItem.component.ts index 3b915ff248a21b0cf19d3dc5fbac8131b2d21643..8008affe34a6b783fd1b93ed14ee527279e36d04 100644 --- a/src/atlasComponents/sapiViews/features/entryListItem/entryListItem.component.ts +++ b/src/atlasComponents/sapiViews/features/entryListItem/entryListItem.component.ts @@ -1,4 +1,4 @@ -import { Component, Input } from "@angular/core"; +import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import { SapiFeatureModel } from "src/atlasComponents/sapi"; import { CleanedIeegDataset, CLEANED_IEEG_DATASET_TYPE, SapiDatasetModel, SapiParcellationFeatureMatrixModel, SapiRegionalFeatureReceptorModel, SapiSerializationErrorModel, SapiVOIDataResponse, SxplrCleanedFeatureModel } from "src/atlasComponents/sapi/type"; @@ -7,7 +7,8 @@ import { CleanedIeegDataset, CLEANED_IEEG_DATASET_TYPE, SapiDatasetModel, SapiPa templateUrl: `./entryListItem.template.html`, styleUrls: [ `./entryListItem.style.css` - ] + ], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class SapiViewsFeaturesEntryListItem{ diff --git a/src/atlasComponents/sapiViews/features/module.ts b/src/atlasComponents/sapiViews/features/module.ts index cbf7aeacaeccaf721bb6ca55108b01366f3fa685..3df348c72f79be4b53c3050e30627c896e8b93f2 100644 --- a/src/atlasComponents/sapiViews/features/module.ts +++ b/src/atlasComponents/sapiViews/features/module.ts @@ -11,6 +11,7 @@ import * as ieeg from "./ieeg" import * as receptor from "./receptors" import {SapiViewsFeatureConnectivityModule} from "src/atlasComponents/sapiViews/features/connectivity"; import * as voi from "./voi" +import { OrderFilterFeaturesPipe } from "./orderFilterFeatureList.pipe" const { SxplrSapiViewsFeaturesIeegModule @@ -35,6 +36,7 @@ const { SapiViewsFeaturesVoiModule } = voi FeatureBadgeColourPipe, FeatureBadgeFlagPipe, SapiViewsFeaturesEntryListItem, + OrderFilterFeaturesPipe, ], providers: [ { @@ -48,6 +50,7 @@ const { SapiViewsFeaturesVoiModule } = voi SapiViewsFeaturesEntryListItem, SapiViewsFeaturesVoiModule, SapiViewsFeatureConnectivityModule, + OrderFilterFeaturesPipe, ] }) export class SapiViewsFeaturesModule{} diff --git a/src/atlasComponents/sapiViews/features/orderFilterFeatureList.pipe.ts b/src/atlasComponents/sapiViews/features/orderFilterFeatureList.pipe.ts new file mode 100644 index 0000000000000000000000000000000000000000..382862b0300f4bdaffadce20aeb4e28274a8bef6 --- /dev/null +++ b/src/atlasComponents/sapiViews/features/orderFilterFeatureList.pipe.ts @@ -0,0 +1,37 @@ +import { Pipe, PipeTransform } from "@angular/core"; +import { CLEANED_IEEG_DATASET_TYPE, SapiFeatureModel, SxplrCleanedFeatureModel } from "src/atlasComponents/sapi/type"; +import { environment } from "src/environments/environment" + +type PipableFeatureType = SapiFeatureModel | SxplrCleanedFeatureModel + +type ArrayOperation<T extends boolean | number> = (input: PipableFeatureType) => T + +const FILTER_FN: ArrayOperation<boolean> = feature => { + return feature["@type"] !== "siibra/features/cells" +} + +const ORDER_LIST: ArrayOperation<number> = feature => { + if (feature["@type"] === "siibra/features/receptor") return -4 + if (feature["@type"] === CLEANED_IEEG_DATASET_TYPE) return -3 + if (feature['@type'] === "https://openminds.ebrains.eu/core/DatasetVersion") return 2 + return 0 +} + +@Pipe({ + name: 'orderFilterFeatures', + pure: true +}) + +export class OrderFilterFeaturesPipe implements PipeTransform{ + public transform(inputFeatures: PipableFeatureType[]): PipableFeatureType[] { + return inputFeatures + .filter(f => { + /** + * if experimental flag is set, do not filter out anything + */ + if (environment.EXPERIMENTAL_FEATURE_FLAG) return true + return FILTER_FN(f) + }) + .sort((a, b) => ORDER_LIST(a) - ORDER_LIST(b)) + } +}