From 867238c42772382b9b3e3b5e96d2d23ff6893823 Mon Sep 17 00:00:00 2001 From: keiya sasaki Date: Wed, 22 Feb 2023 11:40:21 +0900 Subject: [PATCH] fix: force update when some data properties are updated on reearth/core (#483) fix: force update when some data properties are updated --- src/core/Map/Layer/hooks.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/core/Map/Layer/hooks.ts b/src/core/Map/Layer/hooks.ts index 2c4a0a25e..397813cf8 100644 --- a/src/core/Map/Layer/hooks.ts +++ b/src/core/Map/Layer/hooks.ts @@ -1,4 +1,5 @@ import { useAtom } from "jotai"; +import { isEqual, pick } from "lodash-es"; import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from "react"; import { @@ -8,6 +9,7 @@ import { type Atom, evalFeature, ComputedFeature, + type Data, } from "../../mantle"; import type { DataRange, Feature, Layer } from "../../mantle"; @@ -81,6 +83,20 @@ export default function useHooks( }; }, [layer, forceUpdateFeatures]); + const prevForceUpdatableData = useRef>(); + useLayoutEffect(() => { + const data = layer?.type === "simple" ? layer.data : undefined; + const forceUpdatableData = pick(data, "csv", "jsonProperties"); + + if (isEqual(forceUpdatableData, prevForceUpdatableData.current) || !data?.url) { + return; + } + + forceUpdateFeatures(); + + prevForceUpdatableData.current = forceUpdatableData; + }, [layer, forceUpdateFeatures]); + // Clear expression cache if layer is unmounted useEffect( () => () => {