Skip to content

Commit

Permalink
fix: prevent unnecessary render on timeline on reearth/core (#510)
Browse files Browse the repository at this point in the history
fix: prevent unnecessary render on timeline
  • Loading branch information
keiya01 committed Mar 6, 2023
1 parent aa247e9 commit 7cb9d5d
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 27 deletions.
24 changes: 9 additions & 15 deletions src/core/Crust/Widgets/Widget/Timeline/hooks.ts
Expand Up @@ -146,27 +146,21 @@ export const useTimeline = ({
}
}, [clock, onSpeedChange, onTick]);

const overriddenStart = overriddenClock?.start?.getTime();
const overriddenStop = overriddenClock?.start?.getTime();
// Sync cesium clock.
useEffect(() => {
setRange(prev => {
const start = overriddenClock?.start?.getTime() ?? clock?.start?.getTime();
const stop = overriddenClock?.stop?.getTime() ?? clock?.stop?.getTime();
const start = overriddenStart ?? clockStartTime;
const stop = overriddenStop ?? clockStopTime;
const next = makeRange(start, stop);
if (prev.start !== next.start || prev.end !== next.end) {
return next;
}
return prev;
});
setSpeed(Math.abs(clockSpeed));
}, [
clockStartTime,
clockStopTime,
clockSpeed,
clock?.start,
clock?.stop,
overriddenClock?.start,
overriddenClock?.stop,
]);
}, [clockStartTime, clockStopTime, clockSpeed, overriddenStart, overriddenStop]);

useEffect(() => {
const h: TickEventCallback = d => {
Expand All @@ -179,12 +173,12 @@ export const useTimeline = ({
};
}, [onTick, clock?.playing, removeTickEventListener]);

const overriddenCurrentTime = overriddenClock?.current?.getTime();
useEffect(() => {
const current = overriddenClock?.current;
if (current) {
setCurrentTime(current.getTime());
if (overriddenCurrentTime) {
setCurrentTime(overriddenCurrentTime);
}
}, [overriddenClock]);
}, [overriddenCurrentTime]);

useEffect(() => {
if (isMobile) {
Expand Down
12 changes: 3 additions & 9 deletions src/core/Crust/context.ts
Expand Up @@ -45,15 +45,9 @@ export function widgetContextFromMapRef({
return engine()?.getClock();
},
overriddenClock: {
get current() {
return convertTime(sceneProperty?.timeline?.current);
},
get start() {
return convertTime(sceneProperty?.timeline?.start);
},
get stop() {
return convertTime(sceneProperty?.timeline?.stop);
},
current: convertTime(sceneProperty?.timeline?.current),
start: convertTime(sceneProperty?.timeline?.start),
stop: convertTime(sceneProperty?.timeline?.stop),
},
initialCamera: sceneProperty?.default?.camera,
is2d: sceneProperty?.default?.sceneMode === "2d",
Expand Down
6 changes: 3 additions & 3 deletions src/core/engines/Cesium/core/Clock.tsx
Expand Up @@ -14,9 +14,9 @@ export type Props = {
export default function ReearthClock({ property, onTick }: Props): JSX.Element | null {
const { animation, visible, start, stop, current, stepType, rangeType, multiplier, step } =
property?.timeline ?? {};
const dateStart = convertTime(start);
const dateStop = convertTime(stop);
const dateCurrent = convertTime(current);
const dateStart = useMemo(() => convertTime(start), [start]);
const dateStop = useMemo(() => convertTime(stop), [stop]);
const dateCurrent = useMemo(() => convertTime(current), [current]);
const startTime = useMemo(
() => (dateStart ? JulianDate.fromDate(dateStart) : undefined),
[dateStart],
Expand Down

0 comments on commit 7cb9d5d

Please sign in to comment.