From 86b9482c279bb3cb9767a2895dcb96963c923dc0 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Wed, 13 Nov 2024 13:30:51 +0100
Subject: [PATCH] allow plugin to hide left panel

---
 CHANGELOG                                          |  2 ++
 docs/plugins/interface.md                          | 14 ++++++++++++++
 index.d.ts                                         |  2 ++
 public/config.js                                   |  2 +-
 src/services/pluginsManager/interface/hidePanel.ts | 13 +++++++++++++
 src/services/pluginsManager/pluginsManager.ts      |  2 ++
 6 files changed, 34 insertions(+), 1 deletion(-)
 create mode 100644 src/services/pluginsManager/interface/hidePanel.ts

diff --git a/CHANGELOG b/CHANGELOG
index 53f55a86..496108d2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@ minerva-front (19.0.0~alpha.0) stable; urgency=medium
   * Feature: support for matomo (#289)
   * Feature: allow plugin to not have a panel (#306)
   * Feature: allow plugin to add menu option to context menu (#307)
+  * Feature: allow plugin to access info about opened panel (#309)
+  * Feature: allow plugin to hide opened panel (#309)
 
  -- Piotr Gawron <piotr.gawron@uni.lu>  Fri, 18 Oct 2024 13:00:00 +0200
 
diff --git a/docs/plugins/interface.md b/docs/plugins/interface.md
index 7701cb9a..d4c58be5 100644
--- a/docs/plugins/interface.md
+++ b/docs/plugins/interface.md
@@ -3,6 +3,7 @@
 #### getOpenedPanel
 
 Return string identifying panel that is currently opened. Available options:
+
 ```
 undefined
 'none'
@@ -26,3 +27,16 @@ undefined
 window.minerva.map.data.getOpenedPanel();
 ```
 
+#### hidePanel
+
+Close opened panel.
+
+##### Example of hidePanel method usage:
+
+```javascript
+//close specific panel if the panel is opened
+window.minerva.map.data.hidePanel('available-plugins');
+
+//close the panel (regardless which one is opened)
+window.minerva.map.data.hidePanel('available-plugins');
+```
diff --git a/index.d.ts b/index.d.ts
index b08f4aae..4febac59 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -21,6 +21,7 @@ import { removeDataOverlay } from '@/services/pluginsManager/map/overlays/remove
 import { addDataOverlay } from '@/services/pluginsManager/map/overlays/addDataOverlay';
 import { getApiUrls } from '@/services/pluginsManager/project/data/getApiUrls';
 import { getOpenedPanel } from '@/services/pluginsManager/interface/getOpenedPanel';
+import { hidePanel } from '@/services/pluginsManager/interface/hidePanel';
 
 type Plugin = {
   pluginName: string;
@@ -75,6 +76,7 @@ declare global {
       };
       interface: {
         getOpenedPanel: typeof getOpenedPanel;
+        hidePanel: typeof hidePanel;
       };
       overviewImage: {
         getCurrentOverviewImage: typeof getCurrentOverviewImage;
diff --git a/public/config.js b/public/config.js
index 4d245aa0..51047de3 100644
--- a/public/config.js
+++ b/public/config.js
@@ -6,6 +6,6 @@ window.config = {
   BASE_API_URL: `${root}/minerva/api`,
   BASE_NEW_API_URL: `${root}/minerva/new_api/`,
   BASE_MAP_IMAGES_URL: `${root}/`,
-  DEFAULT_PROJECT_ID: 'sample',
+  DEFAULT_PROJECT_ID: 'minervar_example',
   ADMIN_PANEL_URL: `${root}/minerva/admin.xhtml`,
 };
diff --git a/src/services/pluginsManager/interface/hidePanel.ts b/src/services/pluginsManager/interface/hidePanel.ts
new file mode 100644
index 00000000..f740f627
--- /dev/null
+++ b/src/services/pluginsManager/interface/hidePanel.ts
@@ -0,0 +1,13 @@
+import { store } from '@/redux/store';
+import { openedDrawerSelector } from '@/redux/drawer/drawer.selectors';
+import { DrawerName } from '@/types/drawerName';
+import { closeDrawer } from '@/redux/drawer/drawer.slice';
+
+export const hidePanel = (panelName: DrawerName | undefined): void => {
+  const { getState, dispatch } = store;
+  const drawerName = openedDrawerSelector(getState());
+
+  if (panelName === drawerName || panelName === undefined) {
+    dispatch(closeDrawer());
+  }
+};
diff --git a/src/services/pluginsManager/pluginsManager.ts b/src/services/pluginsManager/pluginsManager.ts
index 3f326452..adb4a7c1 100644
--- a/src/services/pluginsManager/pluginsManager.ts
+++ b/src/services/pluginsManager/pluginsManager.ts
@@ -10,6 +10,7 @@ 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 { hidePanel } from '@/services/pluginsManager/interface/hidePanel';
 import { bioEntitiesMethods } from './bioEntities';
 import { getModels } from './map/models/getModels';
 import { openMap } from './map/openMap';
@@ -81,6 +82,7 @@ export const PluginsManager: PluginsManagerType = {
       },
       interface: {
         getOpenedPanel,
+        hidePanel,
       },
       map: {
         data: {
-- 
GitLab