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

Merge branch '184-submap-refactor' into 'development'

Resolve "[MIN-249] Two ways to reach submaps and more compact submaps view"

Closes #184

See merge request !343
parents 59131e0a a757f475
No related branches found
No related tags found
1 merge request!343Resolve "[MIN-249] Two ways to reach submaps and more compact submaps view"
Pipeline #99254 failed
...@@ -9,6 +9,7 @@ minerva-front (19.0.0~alpha.0) stable; urgency=medium ...@@ -9,6 +9,7 @@ minerva-front (19.0.0~alpha.0) stable; urgency=medium
* Small improvement: reaction element annotations use the same styling as * Small improvement: reaction element annotations use the same styling as
elements (#187) elements (#187)
* Small improvement: styling of annotation links improved (#186) * Small improvement: styling of annotation links improved (#186)
* Small improvement: styling of submap links improved (#184)
-- Piotr Gawron <piotr.gawron@uni.lu> Fri, 18 Oct 2024 13:00:00 +0200 -- Piotr Gawron <piotr.gawron@uni.lu> Fri, 18 Oct 2024 13:00:00 +0200
......
...@@ -6,6 +6,7 @@ import Image from 'next/image'; ...@@ -6,6 +6,7 @@ import Image from 'next/image';
import spinnerIcon from '@/assets/vectors/icons/spinner.svg'; import spinnerIcon from '@/assets/vectors/icons/spinner.svg';
import { useState } from 'react'; import { useState } from 'react';
import { downloadFileFromUrl } from '@/redux/export/export.utils'; import { downloadFileFromUrl } from '@/redux/export/export.utils';
import { Icon } from '@/shared/Icon';
import { SUBMAP_DOWNLOAD_HANDLERS_NAMES } from './DownloadSubmap.constants'; import { SUBMAP_DOWNLOAD_HANDLERS_NAMES } from './DownloadSubmap.constants';
import { useGetSubmapDownloadUrl } from './utils/useGetSubmapDownloadUrl'; import { useGetSubmapDownloadUrl } from './utils/useGetSubmapDownloadUrl';
...@@ -34,9 +35,11 @@ export const DownloadSubmap = (): React.ReactNode => { ...@@ -34,9 +35,11 @@ export const DownloadSubmap = (): React.ReactNode => {
<div className="relative"> <div className="relative">
<Button <Button
data-testid="download-submap-button" data-testid="download-submap-button"
variantStyles="ghost" variantStyles="quiet"
className="mr-4" className="mr-4 p-0"
{...getToggleButtonProps()} {...getToggleButtonProps()}
title="Download"
disabled={isDownloading}
> >
{isDownloading && ( {isDownloading && (
<Image <Image
...@@ -47,11 +50,11 @@ export const DownloadSubmap = (): React.ReactNode => { ...@@ -47,11 +50,11 @@ export const DownloadSubmap = (): React.ReactNode => {
className="mr-5 animate-spin" className="mr-5 animate-spin"
/> />
)} )}
Download {!isDownloading && <Icon name="download" className="h-6 w-6 fill-font-500" />}
</Button> </Button>
<ul <ul
data-testid="download-submap-list" data-testid="download-submap-list"
className={`absolute left-[-50%] z-10 max-h-80 w-48 overflow-scroll rounded-sm border bg-white p-0 ps-0 ${ className={`absolute right-[-50%] z-10 max-h-80 w-48 overflow-scroll rounded-sm border bg-white p-0 ps-0 ${
!isOpen && 'hidden' !isOpen && 'hidden'
}`} }`}
{...getMenuProps()} {...getMenuProps()}
......
import { IconButton } from '@/shared/IconButton'; import { Button } from '@/shared/Button';
import { DownloadSubmap } from './DownloadSubmap'; import { DownloadSubmap } from './DownloadSubmap';
interface SubmapItemProps { interface SubmapItemProps {
...@@ -6,18 +6,19 @@ interface SubmapItemProps { ...@@ -6,18 +6,19 @@ interface SubmapItemProps {
onOpenClick: () => void; onOpenClick: () => void;
} }
export const SubmpamItem = ({ modelName, onOpenClick }: SubmapItemProps): JSX.Element => ( export const SubmapItem = ({ modelName, onOpenClick }: SubmapItemProps): JSX.Element => (
<div className="flex flex-row flex-nowrap items-center justify-between border-b py-6"> <div className="flex flex-row flex-nowrap items-center justify-between py-2">
{modelName} {modelName}
<div className="flex flex-row flex-nowrap items-center"> <div className="flex flex-row flex-nowrap items-center">
<DownloadSubmap /> <DownloadSubmap />
<IconButton <Button
icon="chevron-right" variantStyles="secondary"
className="h-6 w-6 bg-white-pearl" className="h-6"
classNameIcon="fill-font-500 h-6 w-6"
data-testid={`${modelName}-open`} data-testid={`${modelName}-open`}
onClick={onOpenClick} onClick={onOpenClick}
/> >
Open
</Button>
</div> </div>
</div> </div>
); );
...@@ -6,7 +6,7 @@ import { openMapAndSetActive, setActiveMap } from '@/redux/map/map.slice'; ...@@ -6,7 +6,7 @@ import { openMapAndSetActive, setActiveMap } from '@/redux/map/map.slice';
import { MapModel } from '@/types/models'; import { MapModel } from '@/types/models';
import { mapModelIdSelector, mapOpenedMapsSelector } from '@/redux/map/map.selectors'; import { mapModelIdSelector, mapOpenedMapsSelector } from '@/redux/map/map.selectors';
import { PluginsEventBus } from '@/services/pluginsManager/pluginsEventBus'; import { PluginsEventBus } from '@/services/pluginsManager/pluginsEventBus';
import { SubmpamItem } from './SubmapItem/SubmapItem.component'; import { SubmapItem } from './SubmapItem/SubmapItem.component';
export const SubmapsDrawer = (): JSX.Element => { export const SubmapsDrawer = (): JSX.Element => {
const models = useAppSelector(modelsDataSelector); const models = useAppSelector(modelsDataSelector);
...@@ -34,7 +34,7 @@ export const SubmapsDrawer = (): JSX.Element => { ...@@ -34,7 +34,7 @@ export const SubmapsDrawer = (): JSX.Element => {
<DrawerHeading title="Submaps" /> <DrawerHeading title="Submaps" />
<ul className="h-[calc(100%-93px)] max-h-[calc(100%-93px)] overflow-y-auto px-6"> <ul className="h-[calc(100%-93px)] max-h-[calc(100%-93px)] overflow-y-auto px-6">
{models.map(model => ( {models.map(model => (
<SubmpamItem <SubmapItem
key={model.idObject} key={model.idObject}
modelName={model.name} modelName={model.name}
onOpenClick={(): void => onSubmapOpenClick(model)} onOpenClick={(): void => onSubmapOpenClick(model)}
......
...@@ -16,6 +16,7 @@ import { PluginIcon } from '@/shared/Icon/Icons/PluginIcon'; ...@@ -16,6 +16,7 @@ import { PluginIcon } from '@/shared/Icon/Icons/PluginIcon';
import { PlusIcon } from '@/shared/Icon/Icons/PlusIcon'; import { PlusIcon } from '@/shared/Icon/Icons/PlusIcon';
import type { IconComponentType, IconTypes } from '@/types/iconTypes'; import type { IconComponentType, IconTypes } from '@/types/iconTypes';
import { DownloadIcon } from '@/shared/Icon/Icons/DownloadIcon';
import { LocationIcon } from './Icons/LocationIcon'; import { LocationIcon } from './Icons/LocationIcon';
import { MaginfierZoomInIcon } from './Icons/MagnifierZoomIn'; import { MaginfierZoomInIcon } from './Icons/MagnifierZoomIn';
import { MaginfierZoomOutIcon } from './Icons/MagnifierZoomOut'; import { MaginfierZoomOutIcon } from './Icons/MagnifierZoomOut';
...@@ -43,6 +44,7 @@ const icons: Record<IconTypes, IconComponentType> = { ...@@ -43,6 +44,7 @@ const icons: Record<IconTypes, IconComponentType> = {
export: ExportIcon, export: ExportIcon,
layers: LayersIcon, layers: LayersIcon,
info: InfoIcon, info: InfoIcon,
download: DownloadIcon,
legend: LegendIcon, legend: LegendIcon,
page: PageIcon, page: PageIcon,
plugin: PluginIcon, plugin: PluginIcon,
......
interface DownloadIconProps {
className?: string;
}
export const DownloadIcon = ({ className }: DownloadIconProps): JSX.Element => (
<svg
width="800px"
height="800px"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
<path
d="M12.5535 16.5061C12.4114 16.6615 12.2106 16.75 12 16.75C11.7894 16.75 11.5886 16.6615 11.4465 16.5061L7.44648 12.1311C7.16698 11.8254 7.18822 11.351 7.49392 11.0715C7.79963 10.792 8.27402 10.8132 8.55352 11.1189L11.25 14.0682V3C11.25 2.58579 11.5858 2.25 12 2.25C12.4142 2.25 12.75 2.58579 12.75 3V14.0682L15.4465 11.1189C15.726 10.8132 16.2004 10.792 16.5061 11.0715C16.8118 11.351 16.833 11.8254 16.5535 12.1311L12.5535 16.5061Z"
fill="#1C274C"
/>
<path
d="M3.75 15C3.75 14.5858 3.41422 14.25 3 14.25C2.58579 14.25 2.25 14.5858 2.25 15V15.0549C2.24998 16.4225 2.24996 17.5248 2.36652 18.3918C2.48754 19.2919 2.74643 20.0497 3.34835 20.6516C3.95027 21.2536 4.70814 21.5125 5.60825 21.6335C6.47522 21.75 7.57754 21.75 8.94513 21.75H15.0549C16.4225 21.75 17.5248 21.75 18.3918 21.6335C19.2919 21.5125 20.0497 21.2536 20.6517 20.6516C21.2536 20.0497 21.5125 19.2919 21.6335 18.3918C21.75 17.5248 21.75 16.4225 21.75 15.0549V15C21.75 14.5858 21.4142 14.25 21 14.25C20.5858 14.25 20.25 14.5858 20.25 15C20.25 16.4354 20.2484 17.4365 20.1469 18.1919C20.0482 18.9257 19.8678 19.3142 19.591 19.591C19.3142 19.8678 18.9257 20.0482 18.1919 20.1469C17.4365 20.2484 16.4354 20.25 15 20.25H9C7.56459 20.25 6.56347 20.2484 5.80812 20.1469C5.07435 20.0482 4.68577 19.8678 4.40901 19.591C4.13225 19.3142 3.9518 18.9257 3.85315 18.1919C3.75159 17.4365 3.75 16.4354 3.75 15Z"
fill="#1C274C"
/>
</svg>
);
...@@ -22,6 +22,7 @@ export type IconTypes = ...@@ -22,6 +22,7 @@ export type IconTypes =
| 'reload' | 'reload'
| 'clear' | 'clear'
| 'user' | 'user'
| 'manage-user'; | 'manage-user'
| 'download';
export type IconComponentType = ({ className }: { className: string }) => JSX.Element; export type IconComponentType = ({ className }: { className: string }) => JSX.Element;
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