From b6a56c7969054fd6e55d2f1e4d6e2d54006acb85 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mi=C5=82osz=20Grocholewski?= <m.grocholewski@atcomp.pl>
Date: Wed, 27 Nov 2024 14:39:52 +0100
Subject: [PATCH] fix(data overlays): prevent clearing submapConnections by
 adding new reducer

---
 CHANGELOG                                                   | 6 ++++++
 .../ClearAnchorsButton.component.test.tsx                   | 4 ++--
 .../ClearAnchorsButton/ClearAnchorsButton.component.tsx     | 4 ++--
 .../listeners/mapSingleClick/handleAliasResults.test.ts     | 4 ++--
 .../utils/listeners/mapSingleClick/handleAliasResults.ts    | 4 ++--
 .../listeners/mapSingleClick/handleReactionResults.test.ts  | 4 ++--
 .../mapSingleClick/handleReactionSearchClickFailure.ts      | 4 ++--
 src/redux/bioEntity/bioEntity.reducers.ts                   | 4 +---
 src/redux/bioEntity/bioEntity.slice.ts                      | 6 +++---
 src/redux/search/search.thunks.ts                           | 3 ---
 src/services/pluginsManager/bioEntities/clearAllElements.ts | 4 ++--
 11 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 62ff5d3a..164d4397 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+minerva-front (18.0.5) stable; urgency=medium
+  * Bug fix: anchor overlays were disappearing after clicking on anchor and
+    outside of the anchor (#319)
+
+ -- Piotr Gawron <piotr.gawron@uni.lu>  Wed, 27 Nov 2024 13:00:00 +0200
+
 minerva-front (18.0.4) stable; urgency=medium
   * Bug fix: link to search result from overview image caused map not to
     load (#318)
diff --git a/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.test.tsx b/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.test.tsx
index 0180c8a6..b8bc885a 100644
--- a/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.test.tsx
+++ b/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.test.tsx
@@ -49,7 +49,7 @@ describe('ClearAnchorsButton - component', () => {
       { payload: undefined, type: 'contextMenu/closeContextMenu' },
       { payload: undefined, type: 'reactions/resetReactionsData' },
       { payload: undefined, type: 'search/clearSearchData' },
-      { payload: undefined, type: 'bioEntityContents/clearBioEntitiesData' },
+      { payload: undefined, type: 'bioEntityContents/clearBioEntities' },
       { payload: undefined, type: 'drugs/clearDrugsData' },
       { payload: undefined, type: 'chemicals/clearChemicalsData' },
     ]);
@@ -75,7 +75,7 @@ describe('ClearAnchorsButton - component', () => {
       { payload: undefined, type: 'contextMenu/closeContextMenu' },
       { payload: undefined, type: 'reactions/resetReactionsData' },
       { payload: undefined, type: 'search/clearSearchData' },
-      { payload: undefined, type: 'bioEntityContents/clearBioEntitiesData' },
+      { payload: undefined, type: 'bioEntityContents/clearBioEntities' },
       { payload: undefined, type: 'drugs/clearDrugsData' },
       { payload: undefined, type: 'chemicals/clearChemicalsData' },
     ]);
diff --git a/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.tsx b/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.tsx
index 3be4a770..0cb34178 100644
--- a/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.tsx
+++ b/src/components/FunctionalArea/TopBar/ClearAnchorsButton/ClearAnchorsButton.component.tsx
@@ -1,4 +1,4 @@
-import { clearBioEntitiesData } from '@/redux/bioEntity/bioEntity.slice';
+import { clearBioEntities } from '@/redux/bioEntity/bioEntity.slice';
 import { clearChemicalsData } from '@/redux/chemicals/chemicals.slice';
 import { closeContextMenu } from '@/redux/contextMenu/contextMenu.slice';
 import { resultDrawerOpen } from '@/redux/drawer/drawer.selectors';
@@ -31,7 +31,7 @@ export const ClearAnchorsButton = (): React.ReactNode => {
     dispatch(clearSearchData());
 
     // Reset old pins data
-    dispatch(clearBioEntitiesData());
+    dispatch(clearBioEntities());
     dispatch(clearDrugsData());
     dispatch(clearChemicalsData());
   };
diff --git a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.test.ts b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.test.ts
index aae76f61..85fc7dc1 100644
--- a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.test.ts
+++ b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.test.ts
@@ -79,7 +79,7 @@ describe('handleAliasResults - util', () => {
           'project/getBioEntityById/fulfilled',
           'entityNumber/addNumbersToEntityNumberData',
           'project/getMultiBioEntity/fulfilled',
-          'bioEntityContents/clearBioEntitiesData',
+          'bioEntityContents/clearBioEntities',
         ]);
       });
     });
@@ -120,7 +120,7 @@ describe('handleAliasResults - util', () => {
           'entityNumber/addNumbersToEntityNumberData',
           'project/getMultiBioEntity/fulfilled',
           'drawer/closeDrawer',
-          'bioEntityContents/clearBioEntitiesData',
+          'bioEntityContents/clearBioEntities',
         ]);
       });
     });
diff --git a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.ts b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.ts
index 02c8312e..c3d05aba 100644
--- a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.ts
+++ b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleAliasResults.ts
@@ -3,7 +3,7 @@ import { AppDispatch } from '@/redux/store';
 import { searchFitBounds } from '@/services/pluginsManager/map/triggerSearch/searchFitBounds';
 import { ElementSearchResult } from '@/types/models';
 import { PluginsEventBus } from '@/services/pluginsManager/pluginsEventBus';
-import { clearBioEntitiesData } from '@/redux/bioEntity/bioEntity.slice';
+import { clearBioEntities } from '@/redux/bioEntity/bioEntity.slice';
 import { Point } from '@/types/map';
 import { getMultiBioEntityByIds } from '@/redux/bioEntity/thunks/getMultiBioEntity';
 import { findClosestBioEntityPoint } from './findClosestBioEntityPoint';
@@ -37,7 +37,7 @@ export const handleAliasResults =
             dispatch(closeDrawer());
           }
 
-          dispatch(clearBioEntitiesData());
+          dispatch(clearBioEntities());
           return;
         }
       }
diff --git a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionResults.test.ts b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionResults.test.ts
index cdd0e68d..6fef43df 100644
--- a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionResults.test.ts
+++ b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionResults.test.ts
@@ -212,7 +212,7 @@ describe('handleReactionResults - util', () => {
         'reactions/getByIds/fulfilled',
         'drawer/closeDrawer',
         'reactions/resetReactionsData',
-        'bioEntityContents/clearBioEntitiesData',
+        'bioEntityContents/clearBioEntities',
       ]);
     });
 
@@ -235,7 +235,7 @@ describe('handleReactionResults - util', () => {
 
       expect(dispatchSpy).toHaveBeenCalledWith({
         payload: undefined,
-        type: 'bioEntityContents/clearBioEntitiesData',
+        type: 'bioEntityContents/clearBioEntities',
       });
     });
   });
diff --git a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionSearchClickFailure.ts b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionSearchClickFailure.ts
index 7368bb18..30c6178f 100644
--- a/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionSearchClickFailure.ts
+++ b/src/components/Map/MapViewer/utils/listeners/mapSingleClick/handleReactionSearchClickFailure.ts
@@ -1,7 +1,7 @@
 import { AppDispatch } from '@/redux/store';
 import { closeDrawer } from '@/redux/drawer/drawer.slice';
 import { resetReactionsData } from '@/redux/reactions/reactions.slice';
-import { clearBioEntitiesData } from '@/redux/bioEntity/bioEntity.slice';
+import { clearBioEntities } from '@/redux/bioEntity/bioEntity.slice';
 
 export const handleReactionSearchClickFailure = (
   dispatch: AppDispatch,
@@ -11,5 +11,5 @@ export const handleReactionSearchClickFailure = (
     dispatch(closeDrawer());
   }
   dispatch(resetReactionsData());
-  dispatch(clearBioEntitiesData());
+  dispatch(clearBioEntities());
 };
diff --git a/src/redux/bioEntity/bioEntity.reducers.ts b/src/redux/bioEntity/bioEntity.reducers.ts
index 3f68a154..681595c0 100644
--- a/src/redux/bioEntity/bioEntity.reducers.ts
+++ b/src/redux/bioEntity/bioEntity.reducers.ts
@@ -107,11 +107,9 @@ export const getSubmapConnectionsBioEntityReducer = (
   });
 };
 
-export const clearBioEntitiesDataReducer = (state: BioEntityContentsState): void => {
+export const clearBioEntitiesReducer = (state: BioEntityContentsState): void => {
   state.data = [];
   state.loading = 'idle';
-
-  state.submapConnections = BIOENTITY_SUBMAP_CONNECTIONS_INITIAL_STATE;
 };
 
 export const toggleIsContentTabOpenedReducer = (
diff --git a/src/redux/bioEntity/bioEntity.slice.ts b/src/redux/bioEntity/bioEntity.slice.ts
index 728467a9..6ccf3f2f 100644
--- a/src/redux/bioEntity/bioEntity.slice.ts
+++ b/src/redux/bioEntity/bioEntity.slice.ts
@@ -1,7 +1,7 @@
 import { createSlice } from '@reduxjs/toolkit';
 import { BIOENTITY_INITIAL_STATE } from './bioEntity.constants';
 import {
-  clearBioEntitiesDataReducer,
+  clearBioEntitiesReducer,
   getBioEntityContentsReducer,
   getMultiBioEntityContentsReducer,
   getSubmapConnectionsBioEntityReducer,
@@ -12,7 +12,7 @@ export const bioEntityContentsSlice = createSlice({
   name: 'bioEntityContents',
   initialState: BIOENTITY_INITIAL_STATE,
   reducers: {
-    clearBioEntitiesData: clearBioEntitiesDataReducer,
+    clearBioEntities: clearBioEntitiesReducer,
     toggleIsContentTabOpened: toggleIsContentTabOpenedReducer,
   },
   extraReducers: builder => {
@@ -22,6 +22,6 @@ export const bioEntityContentsSlice = createSlice({
   },
 });
 
-export const { clearBioEntitiesData, toggleIsContentTabOpened } = bioEntityContentsSlice.actions;
+export const { clearBioEntities, toggleIsContentTabOpened } = bioEntityContentsSlice.actions;
 
 export default bioEntityContentsSlice.reducer;
diff --git a/src/redux/search/search.thunks.ts b/src/redux/search/search.thunks.ts
index 5d1e36e8..b95730d2 100644
--- a/src/redux/search/search.thunks.ts
+++ b/src/redux/search/search.thunks.ts
@@ -9,7 +9,6 @@ import { resetReactionsData } from '../reactions/reactions.slice';
 import type { RootState } from '../store';
 import { DATA_SEARCHING_ERROR_PREFIX } from './search.constants';
 import { dispatchPluginsEvents } from './search.thunks.utils';
-import { getSubmapConnectionsBioEntity } from '../bioEntity/thunks/getSubmapConnectionsBioEntity';
 
 type GetSearchDataProps = PerfectMultiSearchParams;
 
@@ -34,13 +33,11 @@ export const getSearchData = createAsyncThunk<
           dispatch(getMultiBioEntity({ searchQueries, isPerfectMatch })),
           dispatch(getMultiDrugs(searchQueries)),
           dispatch(getMultiChemicals(searchQueries)),
-          dispatch(getSubmapConnectionsBioEntity()),
         ]);
       } else {
         await Promise.all([
           dispatch(getMultiBioEntity({ searchQueries, isPerfectMatch })),
           dispatch(getMultiDrugs(searchQueries)),
-          dispatch(getSubmapConnectionsBioEntity()),
         ]);
       }
 
diff --git a/src/services/pluginsManager/bioEntities/clearAllElements.ts b/src/services/pluginsManager/bioEntities/clearAllElements.ts
index 9177d501..ce8a4ee7 100644
--- a/src/services/pluginsManager/bioEntities/clearAllElements.ts
+++ b/src/services/pluginsManager/bioEntities/clearAllElements.ts
@@ -1,4 +1,4 @@
-import { clearBioEntitiesData } from '@/redux/bioEntity/bioEntity.slice';
+import { clearBioEntities } from '@/redux/bioEntity/bioEntity.slice';
 import { clearChemicalsData } from '@/redux/chemicals/chemicals.slice';
 import { clearDrugsData } from '@/redux/drugs/drugs.slice';
 import { setMarkersData } from '@/redux/markers/markers.slice';
@@ -10,7 +10,7 @@ export const clearAllElements = (elements: ElementName[]): void => {
   const { dispatch } = store;
 
   if (elements.includes('content')) {
-    dispatch(clearBioEntitiesData());
+    dispatch(clearBioEntities());
   }
 
   if (elements.includes('chemicals')) {
-- 
GitLab