diff --git a/client/src/components/legend/item/component.tsx b/client/src/components/legend/item/component.tsx
index 95108fa2b6..dfda56c1f4 100644
--- a/client/src/components/legend/item/component.tsx
+++ b/client/src/components/legend/item/component.tsx
@@ -1,23 +1,24 @@
+import { useState, useCallback } from 'react';
import classNames from 'classnames';
import { EyeIcon, EyeOffIcon, XIcon } from '@heroicons/react/solid';
-import { useCallback } from 'react';
+import { InformationCircleIcon as Outline } from '@heroicons/react/outline';
import OpacityControl from './opacityControl';
import DragHandle from './dragHandle';
import { ComparisonToggle } from './comparisonModeToggle';
-import InfoToolTip from 'components/info-tooltip/component';
+import Modal from 'components/modal';
import Loading from 'components/loading';
import { useAppSelector } from 'store/hooks';
import { scenarios } from 'store/features/analysis';
+import type { Indicator, Layer, Material } from 'types';
import type { Dispatch } from 'react';
export type LegendItemProps = {
- name: React.ReactNode;
- info?: string;
+ name: string;
+ metadata: Layer['metadata'] | Indicator['metadata'] | Material['metadata'];
unit?: string;
- description?: string;
isLoading?: boolean;
showToolbar?: boolean;
children?: React.ReactNode;
@@ -32,7 +33,7 @@ export type LegendItemProps = {
export const LegendItem = ({
name,
- info,
+ metadata,
unit,
isLoading = false,
showToolbar = true,
@@ -46,66 +47,88 @@ export const LegendItem = ({
isActive,
}: LegendItemProps) => {
const { isComparisonEnabled } = useAppSelector(scenarios);
+ const [layerInfoVisibility, setLayerInfoVisibility] = useState(false);
+
+ const showLayerInfo = useCallback(() => {
+ setLayerInfoVisibility(true);
+ }, []);
+
+ const dismissLayerInfo = useCallback(() => {
+ setLayerInfoVisibility(false);
+ }, []);
const handleToggleActive = useCallback(() => {
onToggle(!isActive);
}, [isActive, onToggle]);
return (
-
-
-
- {isLoading && (
-
-
-
- )}
- {name && (
-
-
{name}
- {showToolbar && (
-
-
-
- {info &&
}
-
- {onHideLayer && (
-
-
+
+ {metadata?.description}
+
+ >
);
};
diff --git a/client/src/containers/analysis-visualization/analysis-legend/contextual-legend-item/component.tsx b/client/src/containers/analysis-visualization/analysis-legend/contextual-legend-item/component.tsx
index ffbd2e80da..92204eb316 100644
--- a/client/src/containers/analysis-visualization/analysis-legend/contextual-legend-item/component.tsx
+++ b/client/src/containers/analysis-visualization/analysis-legend/contextual-legend-item/component.tsx
@@ -74,9 +74,8 @@ const ContextualLegendItem = ({ layer }: ContextualLegendItemProps) => {
onToggle={onToggleLayer}
id={layer.id}
isLoading={areLayersLoading || isLoadingData}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- name={layer.metadata!.legend.name}
- info={layer.metadata?.description}
+ name={layer.metadata?.legend?.name}
+ metadata={layer.metadata}
opacity={layer.opacity}
{...layer.metadata?.legend}
onChangeOpacity={handleOpacity}
diff --git a/client/src/containers/analysis-visualization/analysis-legend/impact-legend-item/component.tsx b/client/src/containers/analysis-visualization/analysis-legend/impact-legend-item/component.tsx
index d4fcb8de8b..c07640ea85 100644
--- a/client/src/containers/analysis-visualization/analysis-legend/impact-legend-item/component.tsx
+++ b/client/src/containers/analysis-visualization/analysis-legend/impact-legend-item/component.tsx
@@ -63,9 +63,10 @@ const ImpactLayer = () => {
{
isActive={layer.active}
onToggle={onToggleLayer}
name={Selector}
- info={material?.metadata?.name}
{...data?.metadata?.legend}
unit={data?.metadata?.unit}
+ metadata={material?.metadata}
showToolbar
opacity={layer.opacity}
onChangeOpacity={handleOpacity}
diff --git a/client/src/types.d.ts b/client/src/types.d.ts
index c9581315b0..1c8607a9cb 100644
--- a/client/src/types.d.ts
+++ b/client/src/types.d.ts
@@ -131,6 +131,7 @@ export type Material = {
cautions: string;
citation: string;
datasets: string[];
+ description?: string;
'date of content': string;
'frequency of updates': string;
'geographic coverage': string;