From df9dfdc8a0bc3e509b3f47eeef3c326f5e277863 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Fri, 20 Dec 2024 11:46:33 +0100
Subject: [PATCH] download button should download selected map

---
 CHANGELOG                                        |  1 +
 .../DownloadSubmap.component.test.tsx            |  4 ++--
 .../DownloadSubmap/DownloadSubmap.component.tsx  |  8 ++++++--
 .../utils/useGetSubmapDownloadUrl.test.ts        |  4 ++--
 .../utils/useGetSubmapDownloadUrl.ts             | 16 ++++++++++------
 .../SubmapItem/SubmapItem.component.tsx          |  5 +++--
 .../Map/Drawer/SubmapsDrawer/SubmapsDrawer.tsx   |  1 +
 7 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 93c128e9..c918ec8a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 minerva-front (18.0.8) stable; urgency=medium
   * Bug fix: data overlay removal did not work (#333)
+  * Bug fix: submap download did not download selected map (#337)
 
 -- Piotr Gawron <piotr.gawron@uni.lu>  Fri, 13 Dec 2024 13:00:00 +0200
 
diff --git a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.test.tsx b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.test.tsx
index a30986f5..d90df2bb 100644
--- a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.test.tsx
+++ b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.test.tsx
@@ -87,7 +87,7 @@ const renderComponent = (initialStoreState: InitialStoreState = {}): { store: St
   return (
     render(
       <Wrapper>
-        <DownloadSubmap />
+        <DownloadSubmap modelId={VALID_MODEL_ID} />
       </Wrapper>,
     ),
     {
@@ -136,7 +136,7 @@ describe('DownloadSubmap - component', () => {
     const list = screen.getByTestId('download-submap-list');
 
     const validHrefs = CONFIGURATION_FORMATS_MOCK.map(({ handler }) =>
-      getSubmapDownloadUrl({ handler }),
+      getSubmapDownloadUrl({ handler, modelId: VALID_MODEL_ID }),
     );
     const validNames = CONFIGURATION_FORMATS_TYPES_MOCK;
     const allAnchors = [...list.getElementsByTagName('a')];
diff --git a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.tsx b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.tsx
index 31652812..5f047bc2 100644
--- a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.tsx
+++ b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/DownloadSubmap.component.tsx
@@ -9,7 +9,11 @@ import { downloadFileFromUrl } from '@/redux/export/export.utils';
 import { SUBMAP_DOWNLOAD_HANDLERS_NAMES } from './DownloadSubmap.constants';
 import { useGetSubmapDownloadUrl } from './utils/useGetSubmapDownloadUrl';
 
-export const DownloadSubmap = (): React.ReactNode => {
+interface DownloadSubmapProps {
+  modelId: number;
+}
+
+export const DownloadSubmap = ({ modelId }: DownloadSubmapProps): React.ReactNode => {
   const formatsHandlers = useSelector(formatsHandlersSelector);
   const formatsHandlersItems = Object.entries(formatsHandlers);
   const getSubmapDownloadUrl = useGetSubmapDownloadUrl();
@@ -24,7 +28,7 @@ export const DownloadSubmap = (): React.ReactNode => {
     return function () {
       closeMenu();
       setIsDownloading(true);
-      downloadFileFromUrl(getSubmapDownloadUrl({ handler })).finally(function () {
+      downloadFileFromUrl(getSubmapDownloadUrl({ handler, modelId })).finally(function () {
         setIsDownloading(false);
       });
     };
diff --git a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.test.ts b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.test.ts
index c8f335bf..5a911656 100644
--- a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.test.ts
+++ b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.test.ts
@@ -91,7 +91,7 @@ describe('useGetSubmapDownloadUrl - hook', () => {
         result: { current: getSubmapDownloadUrl },
       } = renderHook(() => useGetSubmapDownloadUrl(), { wrapper: Wrapper });
 
-      expect(getSubmapDownloadUrl({ handler })).toBe('');
+      expect(getSubmapDownloadUrl({ handler, modelId: 0 })).toBe('');
     });
   });
 
@@ -109,7 +109,7 @@ describe('useGetSubmapDownloadUrl - hook', () => {
         result: { current: getSubmapDownloadUrl },
       } = renderHook(() => useGetSubmapDownloadUrl(), { wrapper: Wrapper });
 
-      expect(getSubmapDownloadUrl({ handler: VALID_HANDLER })).toBe(
+      expect(getSubmapDownloadUrl({ handler: VALID_HANDLER, modelId: 5052 })).toBe(
         `${BASE_API_URL}/projects/${PROJECT_ID}/models/5052:downloadModel?backgroundOverlayId=53&handlerClass=lcsb.mapviewer.wikipathway.GpmlParser&zoomLevel=9`,
       );
     });
diff --git a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.ts b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.ts
index e003af36..34c33260 100644
--- a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.ts
+++ b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/DownloadSubmap/utils/useGetSubmapDownloadUrl.ts
@@ -1,18 +1,22 @@
 import { BASE_API_URL, PROJECT_ID } from '@/constants';
 import { currentBackgroundSelector } from '@/redux/backgrounds/background.selectors';
 import { mapDataSizeSelector } from '@/redux/map/map.selectors';
-import { currentModelSelector } from '@/redux/models/models.selectors';
 import { useSelector } from 'react-redux';
 
-export type GetSubmapDownloadUrl = ({ handler }: { handler: string }) => string;
+export type GetSubmapDownloadUrl = ({
+  handler,
+  modelId,
+}: {
+  handler: string;
+  modelId: number;
+}) => string;
 
 export const useGetSubmapDownloadUrl = (): GetSubmapDownloadUrl => {
-  const model = useSelector(currentModelSelector);
   const background = useSelector(currentBackgroundSelector);
   const mapSize = useSelector(mapDataSizeSelector);
 
-  const getSubmapDownloadUrl: GetSubmapDownloadUrl = ({ handler }) => {
-    const allParamsValid = [model?.idObject, background?.id, mapSize.maxZoom, handler].reduce(
+  const getSubmapDownloadUrl: GetSubmapDownloadUrl = ({ handler, modelId }) => {
+    const allParamsValid = [modelId, background?.id, mapSize.maxZoom, handler].reduce(
       (a, b) => Boolean(a) && Boolean(b),
       true,
     );
@@ -20,7 +24,7 @@ export const useGetSubmapDownloadUrl = (): GetSubmapDownloadUrl => {
       return '';
     }
 
-    return `${BASE_API_URL}/projects/${PROJECT_ID}/models/${model?.idObject}:downloadModel?backgroundOverlayId=${background?.id}&handlerClass=${handler}&zoomLevel=${mapSize.maxZoom}`;
+    return `${BASE_API_URL}/projects/${PROJECT_ID}/models/${modelId}:downloadModel?backgroundOverlayId=${background?.id}&handlerClass=${handler}&zoomLevel=${mapSize.maxZoom}`;
   };
 
   return getSubmapDownloadUrl;
diff --git a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/SubmapItem.component.tsx b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/SubmapItem.component.tsx
index a7a38dfa..d766af5e 100644
--- a/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/SubmapItem.component.tsx
+++ b/src/components/Map/Drawer/SubmapsDrawer/SubmapItem/SubmapItem.component.tsx
@@ -2,15 +2,16 @@ import { IconButton } from '@/shared/IconButton';
 import { DownloadSubmap } from './DownloadSubmap';
 
 interface SubmapItemProps {
+  modelId: number;
   modelName: string;
   onOpenClick: () => void;
 }
 
-export const SubmpamItem = ({ modelName, onOpenClick }: SubmapItemProps): JSX.Element => (
+export const SubmpamItem = ({ modelName, onOpenClick, modelId }: SubmapItemProps): JSX.Element => (
   <div className="flex flex-row flex-nowrap items-center justify-between border-b py-6">
     {modelName}
     <div className="flex flex-row flex-nowrap items-center">
-      <DownloadSubmap />
+      <DownloadSubmap modelId={modelId} />
       <IconButton
         icon="chevron-right"
         className="h-6 w-6 bg-white-pearl"
diff --git a/src/components/Map/Drawer/SubmapsDrawer/SubmapsDrawer.tsx b/src/components/Map/Drawer/SubmapsDrawer/SubmapsDrawer.tsx
index eb15bad6..185dbdc5 100644
--- a/src/components/Map/Drawer/SubmapsDrawer/SubmapsDrawer.tsx
+++ b/src/components/Map/Drawer/SubmapsDrawer/SubmapsDrawer.tsx
@@ -36,6 +36,7 @@ export const SubmapsDrawer = (): JSX.Element => {
         {models.map(model => (
           <SubmpamItem
             key={model.idObject}
+            modelId={model.idObject}
             modelName={model.name}
             onOpenClick={(): void => onSubmapOpenClick(model)}
           />
-- 
GitLab