From 38f51e0f83c6b6faf765ab3b693250b451f1b430 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <p.gawron@atcomp.pl> Date: Wed, 11 Dec 2024 12:11:05 +0100 Subject: [PATCH 1/2] provide info about entries when returning list of visible data overlays --- CHANGELOG | 2 + .../map/overlays/getVisibleDataOverlays.ts | 40 ++++++++++++++++- .../map/overlays/types/DataOverlay.ts | 44 +++++++++++++++++++ .../map/overlays/types/DataOverlayEntry.ts | 27 ++++++++++++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/services/pluginsManager/map/overlays/types/DataOverlay.ts create mode 100644 src/services/pluginsManager/map/overlays/types/DataOverlayEntry.ts diff --git a/CHANGELOG b/CHANGELOG index 52071d51..a58b1598 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ minerva-front (18.0.7) stable; urgency=medium * Bug fix: export to image did not include overlays (#326) * Bug fix: missing logos added (#329) + * Bug fix: plugin API did not provide overlay entries when returning list of + visible overlays (#332) -- Piotr Gawron <piotr.gawron@uni.lu> Wed, 11 Dec 2024 13:00:00 +0200 diff --git a/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts b/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts index 6224d3ff..5f570436 100644 --- a/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts +++ b/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts @@ -1,9 +1,47 @@ -import { activeOverlaysSelector } from '@/redux/overlayBioEntity/overlayBioEntity.selector'; +import { + activeOverlaysSelector, + overlayBioEntityDataSelector, +} from '@/redux/overlayBioEntity/overlayBioEntity.selector'; import { store } from '@/redux/store'; import { MapOverlay } from '@/types/models'; +import { DataOverlay } from '@/services/pluginsManager/map/overlays/types/DataOverlay'; +import { modelsDataSelector } from '@/redux/models/models.selectors'; +import { DataOverlayEntry } from '@/services/pluginsManager/map/overlays/types/DataOverlayEntry'; export const getVisibleDataOverlays = (): MapOverlay[] => { const activeOverlays = activeOverlaysSelector(store.getState()); + const overlayData = overlayBioEntityDataSelector(store.getState()); + + const models = modelsDataSelector(store.getState()); + + const dataOverlays = activeOverlays.map(mapOverlay => new DataOverlay(mapOverlay)); + + dataOverlays.forEach(dataOverlay => { + const mapOverlayData = overlayData[dataOverlay.id]; + if (mapOverlayData) { + models.forEach(model => { + const entries = mapOverlayData[model.idObject]; + if (entries) { + entries.forEach(dataEntry => { + if (dataEntry.type === 'submap-link') { + dataOverlay.addEntry( + new DataOverlayEntry( + Number(dataEntry.id), + 'ALIAS', + dataEntry.modelId, + dataEntry.color, + dataEntry.value, + ), + ); + } else { + // eslint-disable-next-line no-console + console.log(`${dataEntry.type} not supported`); + } + }); + } + }); + } + }); return activeOverlays; }; diff --git a/src/services/pluginsManager/map/overlays/types/DataOverlay.ts b/src/services/pluginsManager/map/overlays/types/DataOverlay.ts new file mode 100644 index 00000000..e79d88ba --- /dev/null +++ b/src/services/pluginsManager/map/overlays/types/DataOverlay.ts @@ -0,0 +1,44 @@ +import { MapOverlay } from '@/types/models'; +import { DataOverlayEntry } from '@/services/pluginsManager/map/overlays/types/DataOverlayEntry'; + +export class DataOverlay { + id: number; + + idObject: number; + + name: string; + + order: number; + + creator: string; + + description: string; + + genomeType: string | null; + + genomeVersion: string | null; + + publicOverlay: boolean; + + type: string; + + entries: DataOverlayEntry[]; + + constructor(mapOverlay: MapOverlay) { + this.id = mapOverlay.idObject; + this.idObject = mapOverlay.idObject; + this.name = mapOverlay.name; + this.order = mapOverlay.order; + this.creator = mapOverlay.creator; + this.description = mapOverlay.description; + this.genomeType = mapOverlay.genomeType; + this.genomeVersion = mapOverlay.genomeVersion; + this.publicOverlay = mapOverlay.publicOverlay; + this.type = mapOverlay.type; + this.entries = []; + } + + public addEntry(entry: DataOverlayEntry): void { + this.entries.push(entry); + } +} diff --git a/src/services/pluginsManager/map/overlays/types/DataOverlayEntry.ts b/src/services/pluginsManager/map/overlays/types/DataOverlayEntry.ts new file mode 100644 index 00000000..2627887c --- /dev/null +++ b/src/services/pluginsManager/map/overlays/types/DataOverlayEntry.ts @@ -0,0 +1,27 @@ +import { Color } from '@/types/models'; + +export class DataOverlayEntry { + bioEntityId: number; + + bioEntityType: string; + + bioEntityModelId: number; + + color: Color | null; + + value: number | null; + + constructor( + bioEntityId: number, + bioEntityType: string, + bioEntityModelId: number, + color: Color | null, + value: number | null, + ) { + this.bioEntityId = bioEntityId; + this.color = color; + this.value = value; + this.bioEntityType = bioEntityType; + this.bioEntityModelId = bioEntityModelId; + } +} -- GitLab From 671676199d1103df8c61c819689ba082907f5b93 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <p.gawron@atcomp.pl> Date: Wed, 11 Dec 2024 12:58:29 +0100 Subject: [PATCH 2/2] provide data overlay entries for plugins in new interface --- .../map/overlays/getVisibleDataOverlays.test.ts | 5 ++++- .../pluginsManager/map/overlays/getVisibleDataOverlays.ts | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.test.ts b/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.test.ts index 036a668b..c0f486b9 100644 --- a/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.test.ts +++ b/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.test.ts @@ -3,6 +3,7 @@ import { overlaysFixture } from '@/models/fixtures/overlaysFixture'; import { OVERLAYS_INITIAL_STATE_MOCK } from '@/redux/overlays/overlays.mock'; import { RootState, store } from '@/redux/store'; import { OVERLAY_BIO_ENTITY_INITIAL_STATE_MOCK } from '@/redux/overlayBioEntity/overlayBioEntity.mock'; +import { DataOverlay } from '@/services/pluginsManager/map/overlays/types/DataOverlay'; import { getVisibleDataOverlays } from './getVisibleDataOverlays'; const ACTIVE_OVERLAYS_IDS = overlaysFixture.map(overlay => overlay.idObject); @@ -34,7 +35,9 @@ describe('getVisibleDataOverlays', () => { }) as RootState, ); - expect(getVisibleDataOverlays()).toEqual(overlaysFixture); + expect(getVisibleDataOverlays()).toEqual( + overlaysFixture.map(overlay => new DataOverlay(overlay)), + ); }); it('should return empty array if no active overlays', () => { diff --git a/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts b/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts index 5f570436..14a69d51 100644 --- a/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts +++ b/src/services/pluginsManager/map/overlays/getVisibleDataOverlays.ts @@ -3,12 +3,11 @@ import { overlayBioEntityDataSelector, } from '@/redux/overlayBioEntity/overlayBioEntity.selector'; import { store } from '@/redux/store'; -import { MapOverlay } from '@/types/models'; import { DataOverlay } from '@/services/pluginsManager/map/overlays/types/DataOverlay'; import { modelsDataSelector } from '@/redux/models/models.selectors'; import { DataOverlayEntry } from '@/services/pluginsManager/map/overlays/types/DataOverlayEntry'; -export const getVisibleDataOverlays = (): MapOverlay[] => { +export const getVisibleDataOverlays = (): DataOverlay[] => { const activeOverlays = activeOverlaysSelector(store.getState()); const overlayData = overlayBioEntityDataSelector(store.getState()); @@ -43,5 +42,5 @@ export const getVisibleDataOverlays = (): MapOverlay[] => { } }); - return activeOverlays; + return dataOverlays; }; -- GitLab