Skip to content
Snippets Groups Projects
Commit 0f9dc452 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

add spinner to download

parent 68e7340f
No related branches found
No related tags found
2 merge requests!264Resolve "add support for matomo",!254Resolve "A loading button while exporting"
Pipeline #95841 passed
minerva-front (18.0.0~beta.5) stable; urgency=medium minerva-front (18.0.0~beta.5) stable; urgency=medium
* Small improvements: there is a waiting spinner after clicking on download
button (#297)
* Small improvements: when exporting map as image provide default selections * Small improvements: when exporting map as image provide default selections
in for format and submap (#295) in for format and submap (#295)
......
window.config = { window.config = {
BASE_API_URL: 'https://lux1.atcomp.pl/minerva/api', BASE_API_URL: 'https://minerva-dev.lcsb.uni.lu/minerva/api',
BASE_NEW_API_URL: 'https://lux1.atcomp.pl/minerva/new_api/', BASE_NEW_API_URL: 'https://minerva-dev.lcsb.uni.lu/minerva/new_api/',
BASE_MAP_IMAGES_URL: 'https://lux1.atcomp.pl/', BASE_MAP_IMAGES_URL: 'https://minerva-dev.lcsb.uni.lu/',
DEFAULT_PROJECT_ID: 'sample', DEFAULT_PROJECT_ID: 'sample',
ADMIN_PANEL_URL: 'https://lux1.atcomp.pl/minerva/admin.xhtml', ADMIN_PANEL_URL: 'https://minerva-dev.lcsb.uni.lu/minerva/admin.xhtml',
}; };
import { useContext } from 'react'; import { useContext, useState } from 'react';
import { Button } from '@/shared/Button'; import { Button } from '@/shared/Button';
import Image from 'next/image';
import spinnerIcon from '@/assets/vectors/icons/spinner.svg';
import { ExportContext } from '../ExportCompound.context'; import { ExportContext } from '../ExportCompound.context';
export const DownloadElements = (): React.ReactNode => { export const DownloadElements = (): React.ReactNode => {
const { handleDownloadElements } = useContext(ExportContext); const { handleDownloadElements } = useContext(ExportContext);
const [downloadingElements, setDownloadingElements] = useState<boolean>(false);
const handleDownloadElementsWrapper = async (): Promise<void> => {
setDownloadingElements(true);
await handleDownloadElements();
setDownloadingElements(false);
};
return ( return (
<div className="mt-6"> <div className="mt-6">
<Button onClick={handleDownloadElements}>Download</Button> <Button onClick={handleDownloadElementsWrapper}>
{downloadingElements && (
<Image
src={spinnerIcon}
alt="spinner icon"
height={12}
width={12}
className="mr-2 animate-spin"
/>
)}
Download
</Button>
</div> </div>
); );
}; };
import { useContext } from 'react'; import { useContext, useState } from 'react';
import { Button } from '@/shared/Button'; import { Button } from '@/shared/Button';
import Image from 'next/image';
import spinnerIcon from '@/assets/vectors/icons/spinner.svg';
import { ExportContext } from '../ExportCompound.context'; import { ExportContext } from '../ExportCompound.context';
export const DownloadNetwork = (): React.ReactNode => { export const DownloadNetwork = (): React.ReactNode => {
const { handleDownloadNetwork } = useContext(ExportContext); const { handleDownloadNetwork } = useContext(ExportContext);
const [downloadingNetwork, setDownloadingNetwork] = useState<boolean>(false);
const handleDownloadNetworkWrapper = async (): Promise<void> => {
setDownloadingNetwork(true);
await handleDownloadNetwork();
setDownloadingNetwork(false);
};
return ( return (
<div className="mt-6"> <div className="mt-6">
<Button onClick={handleDownloadNetwork}>Download</Button> <Button onClick={handleDownloadNetworkWrapper}>
{downloadingNetwork && (
<Image
src={spinnerIcon}
alt="spinner icon"
height={12}
width={12}
className="mr-2 animate-spin"
/>
)}
Download
</Button>
</div> </div>
); );
}; };
...@@ -52,8 +52,7 @@ export const Export = ({ children }: ExportProps): JSX.Element => { ...@@ -52,8 +52,7 @@ export const Export = ({ children }: ExportProps): JSX.Element => {
includedCompartmentPathways, includedCompartmentPathways,
excludedCompartmentPathways, excludedCompartmentPathways,
}); });
await dispatch(downloadElements(body));
dispatch(downloadElements(body));
}, [modelIds, annotations, includedCompartmentPathways, excludedCompartmentPathways, dispatch]); }, [modelIds, annotations, includedCompartmentPathways, excludedCompartmentPathways, dispatch]);
const handleDownloadNetwork = useCallback(async () => { const handleDownloadNetwork = useCallback(async () => {
...@@ -65,7 +64,7 @@ export const Export = ({ children }: ExportProps): JSX.Element => { ...@@ -65,7 +64,7 @@ export const Export = ({ children }: ExportProps): JSX.Element => {
excludedCompartmentPathways, excludedCompartmentPathways,
}); });
dispatch(downloadNetwork(data)); await dispatch(downloadNetwork(data));
}, [modelIds, annotations, includedCompartmentPathways, excludedCompartmentPathways, dispatch]); }, [modelIds, annotations, includedCompartmentPathways, excludedCompartmentPathways, dispatch]);
const handleDownloadGraphics = useCallback(async () => { const handleDownloadGraphics = useCallback(async () => {
......
...@@ -54,8 +54,8 @@ export const EXPORT_CONTEXT_DEFAULT_VALUE: ExportContextType = { ...@@ -54,8 +54,8 @@ export const EXPORT_CONTEXT_DEFAULT_VALUE: ExportContextType = {
setModels: () => {}, setModels: () => {},
setImageSize: () => {}, setImageSize: () => {},
setImageFormats: () => {}, setImageFormats: () => {},
handleDownloadElements: () => {}, handleDownloadElements: () => Promise.resolve(),
handleDownloadNetwork: () => {}, handleDownloadNetwork: () => Promise.resolve(),
handleDownloadGraphics: () => {}, handleDownloadGraphics: () => {},
data: { data: {
annotations: [], annotations: [],
......
...@@ -8,8 +8,8 @@ export type ExportContextType = { ...@@ -8,8 +8,8 @@ export type ExportContextType = {
setModels: React.Dispatch<React.SetStateAction<CheckboxItem[]>>; setModels: React.Dispatch<React.SetStateAction<CheckboxItem[]>>;
setImageSize: React.Dispatch<React.SetStateAction<ImageSize>>; setImageSize: React.Dispatch<React.SetStateAction<ImageSize>>;
setImageFormats: React.Dispatch<React.SetStateAction<CheckboxItem[]>>; setImageFormats: React.Dispatch<React.SetStateAction<CheckboxItem[]>>;
handleDownloadElements: () => void; handleDownloadElements: () => Promise<void>;
handleDownloadNetwork: () => void; handleDownloadNetwork: () => Promise<void>;
handleDownloadGraphics: () => void; handleDownloadGraphics: () => void;
data: { data: {
annotations: CheckboxItem[]; annotations: CheckboxItem[];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment