From c4a4293f6fe1bb85ab02a37ab7aabd5719099f88 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Wed, 13 Nov 2024 13:17:23 +0100
Subject: [PATCH] allow plugin to get info about opened panel

---
 docs/plugins/interface.md                     | 28 +++++++++++++++++++
 index.d.ts                                    |  5 +++-
 src/redux/drawer/drawer.selectors.ts          |  7 +++++
 .../interface/getOpenedPanel.ts               |  9 ++++++
 src/services/pluginsManager/pluginsManager.ts |  4 +++
 5 files changed, 52 insertions(+), 1 deletion(-)
 create mode 100644 docs/plugins/interface.md
 create mode 100644 src/services/pluginsManager/interface/getOpenedPanel.ts

diff --git a/docs/plugins/interface.md b/docs/plugins/interface.md
new file mode 100644
index 00000000..7701cb9a
--- /dev/null
+++ b/docs/plugins/interface.md
@@ -0,0 +1,28 @@
+### Interface
+
+#### getOpenedPanel
+
+Return string identifying panel that is currently opened. Available options:
+```
+undefined
+'none'
+'search'
+'project-info'
+'plugins'
+'export'
+'legend'
+'submaps'
+'reaction'
+'overlays'
+'bio-entity'
+'comment'
+'available-plugins'
+'layers';
+```
+
+##### Example of getOpenedPanel method usage:
+
+```javascript
+window.minerva.map.data.getOpenedPanel();
+```
+
diff --git a/index.d.ts b/index.d.ts
index 2e109d80..b08f4aae 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -2,7 +2,6 @@ import { getBounds } from '@/services/pluginsManager/map/data/getBounds';
 import { fitBounds } from '@/services/pluginsManager/map/fitBounds';
 import { getOpenMapId } from '@/services/pluginsManager/map/getOpenMapId';
 import { triggerSearch } from '@/services/pluginsManager/map/triggerSearch';
-import { MinervaConfiguration } from '@/services/pluginsManager/pluginsManager';
 import { getModels } from '@/services/pluginsManager/map/models/getModels';
 import { openMap } from '@/services/pluginsManager/map/openMap';
 import { getCenter } from '@/services/pluginsManager/map/position/getCenter';
@@ -21,6 +20,7 @@ import { hideDataOverlay } from '@/services/pluginsManager/map/overlays/hideData
 import { removeDataOverlay } from '@/services/pluginsManager/map/overlays/removeDataOverlay';
 import { addDataOverlay } from '@/services/pluginsManager/map/overlays/addDataOverlay';
 import { getApiUrls } from '@/services/pluginsManager/project/data/getApiUrls';
+import { getOpenedPanel } from '@/services/pluginsManager/interface/getOpenedPanel';
 
 type Plugin = {
   pluginName: string;
@@ -73,6 +73,9 @@ declare global {
         getCenter: typeof getCenter;
         setCenter: typeof setCenter;
       };
+      interface: {
+        getOpenedPanel: typeof getOpenedPanel;
+      };
       overviewImage: {
         getCurrentOverviewImage: typeof getCurrentOverviewImage;
         getOverviewImages: typeof getOverviewImages;
diff --git a/src/redux/drawer/drawer.selectors.ts b/src/redux/drawer/drawer.selectors.ts
index 6c3a2a01..05a64d2e 100644
--- a/src/redux/drawer/drawer.selectors.ts
+++ b/src/redux/drawer/drawer.selectors.ts
@@ -147,3 +147,10 @@ export const searchDrawerOpenSelector = createSelector(
 export const resultDrawerOpen = createSelector(drawerSelector, drawer => {
   return drawer.isOpen && RESULT_DRAWERS.includes(drawer.drawerName);
 });
+
+export const openedDrawerSelector = createSelector(drawerSelector, drawer => {
+  if (drawer.isOpen) {
+    return drawer.drawerName;
+  }
+  return undefined;
+});
diff --git a/src/services/pluginsManager/interface/getOpenedPanel.ts b/src/services/pluginsManager/interface/getOpenedPanel.ts
new file mode 100644
index 00000000..7124e0af
--- /dev/null
+++ b/src/services/pluginsManager/interface/getOpenedPanel.ts
@@ -0,0 +1,9 @@
+import { store } from '@/redux/store';
+import { openedDrawerSelector } from '@/redux/drawer/drawer.selectors';
+
+export const getOpenedPanel = (): string | undefined => {
+  const { getState } = store;
+  const drawerName = openedDrawerSelector(getState());
+
+  return drawerName;
+};
diff --git a/src/services/pluginsManager/pluginsManager.ts b/src/services/pluginsManager/pluginsManager.ts
index 60d8942a..3f326452 100644
--- a/src/services/pluginsManager/pluginsManager.ts
+++ b/src/services/pluginsManager/pluginsManager.ts
@@ -9,6 +9,7 @@ import { getPluginHashWithoutPrefix } from '@/utils/plugins/getPluginHashWithout
 import { ONE, ZERO } from '@/constants/common';
 import { minervaDefine } from '@/services/pluginsManager/map/minervaDefine';
 import { PluginsContextMenu } from '@/services/pluginsManager/pluginContextMenu/pluginsContextMenu';
+import { getOpenedPanel } from '@/services/pluginsManager/interface/getOpenedPanel';
 import { bioEntitiesMethods } from './bioEntities';
 import { getModels } from './map/models/getModels';
 import { openMap } from './map/openMap';
@@ -78,6 +79,9 @@ export const PluginsManager: PluginsManagerType = {
       data: {
         bioEntities: bioEntitiesMethods,
       },
+      interface: {
+        getOpenedPanel,
+      },
       map: {
         data: {
           getBounds,
-- 
GitLab