Skip to content

Commit

Permalink
optimizing legend scale calculation
Browse files Browse the repository at this point in the history
  • Loading branch information
David Inga authored and davidsingal committed May 19, 2023
1 parent 15046e4 commit d5fb787
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,18 @@ import type { MapStyle } from 'components/map/types';
import type { BasemapValue } from 'components/map/controls/basemap/types';
import type { Layer, Legend as LegendType } from 'types';

const getValueInRange = (value: number, legendInfo: LegendType): string => {
const threshold = legendInfo.items.map((item) => item.value);
const rangeValues = legendInfo.items.map((item) => item.label);
const scale = scaleByLegendType(legendInfo?.type, threshold as number[], rangeValues);
return scale(value);
const getLegendScale = (legendInfo: LegendType) => {
if (legendInfo?.type === 'range' || legendInfo?.type === 'category') {
const threshold = legendInfo.items.map((item) => item.value);
const rangeValues = legendInfo.items.map((item) => item.label);
const scale = scaleByLegendType(legendInfo?.type, threshold as number[], rangeValues);
return scale;
}
return (value: number) => {
if (!value) return null;
if (!Number.isNaN(value)) return NUMBER_FORMAT(Number(value));
return value.toString();
};
};

const AnalysisMap = () => {
Expand All @@ -38,34 +45,40 @@ const AnalysisMap = () => {
const handleViewState = useCallback((viewState: ViewState) => setViewState(viewState), []);
const [tooltipData, setTooltipData] = useState(null);

// Pre-Calculating legend scales
const legendScales = useMemo(() => {
const scales = {};
Object.values(layers).forEach((layer) => {
scales[layer.id] = getLegendScale(layer.metadata?.legend);
});
return scales;
}, [layers]);

// Loading layers
const { isError, isFetching } = useImpactLayer();

const onHoverLayer = useCallback(
(
{ object, coordinate, viewport, x, y }: Parameters<H3HexagonLayerProps['onHover']>[0],
metadata: Layer['metadata'],
metadata: Layer['metadata'] & { layerId?: string },
): void => {
const v =
metadata?.legend?.type === 'range'
? getValueInRange(object?.v, metadata?.legend)
: NUMBER_FORMAT(Number(object?.v));

setTooltipData({
x,
y,
viewport,
data: {
...object,
v,
v: legendScales[metadata?.layerId]
? legendScales[metadata?.layerId](object?.v)
: object?.v,
coordinate,
name: metadata?.name || metadata?.legend.name,
unit: metadata?.legend?.unit,
legend: metadata?.legend,
},
});
},
[setTooltipData],
[legendScales],
);

const handleMapStyleChange = useCallback((newStyle: BasemapValue) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ export function useLayer({
}, [contextualData, id]);

const settings = useMemo(() => layerDeckGLProps[id] || {}, [layerDeckGLProps, id]);
const metadata = useMemo(() => layersMetadata[id]['metadata'], [layersMetadata, id]);
const metadata = useMemo(
() => ({ layerId: id, ...layersMetadata[id]['metadata'] }),
[layersMetadata, id],
);

const layer = useMemo(() => {
return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ export function useLayer(props: LayerProps<LayerSettings>['settings']) {
} = useImpactLayer();

const settings = useMemo(() => layerDeckGLProps['impact'] || {}, [layerDeckGLProps]);
const metadata = useMemo(() => layersMetadata['impact']['metadata'], [layersMetadata]);
const metadata = useMemo(
() => ({ layerId: 'impact', ...layersMetadata['impact']['metadata'] }),
[layersMetadata],
);

const layer = useMemo(() => {
return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ export function useLayer(props: LayerProps<LayerSettings>['settings']) {
});

const settings = useMemo(() => layerDeckGLProps['material'] || {}, [layerDeckGLProps]);
const metadata = useMemo(() => layersMetadata['material']['metadata'], [layersMetadata]);
const metadata = useMemo(
() => ({ layerId: 'material', ...layersMetadata['material']['metadata'] }),
[layersMetadata],
);

const layer = useMemo(() => {
return {
Expand Down

1 comment on commit d5fb787

@vercel
Copy link

@vercel vercel bot commented on d5fb787 May 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

landgriffon-client – ./client

landgriffon-client-vizzuality1.vercel.app
landgriffon-client.vercel.app
landgriffon-client-git-dev-vizzuality1.vercel.app

Please sign in to comment.