From af9d664a0c7cc52623a2f98ee57f5391e4933334 Mon Sep 17 00:00:00 2001 From: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Date: Fri, 16 Oct 2026 21:31:26 -0700 Subject: [PATCH] perf(web): the sidebar update capsule compiles without manual memoization Co-Authored-By: Claude Opus 5.5 --- .../sidebar/SidebarUpdateCapsule.tsx | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/apps/web/src/components/sidebar/SidebarUpdateCapsule.tsx b/apps/web/src/components/sidebar/SidebarUpdateCapsule.tsx index 030d69c3596c..0d83c8b3d73f 100644 --- a/apps/web/src/components/sidebar/SidebarUpdateCapsule.tsx +++ b/apps/web/src/components/sidebar/SidebarUpdateCapsule.tsx @@ -1,6 +1,6 @@ import { useAtomValue } from "@effect/atom-react"; import { Atom } from "effect/reactivity"; -import { type ReactNode, useCallback, useMemo, useSyncExternalStore } from "react"; +import { type ReactNode, useSyncExternalStore } from "react"; import { cn } from "~/lib/utils"; import { serverEnvironment } from "~/state/server"; @@ -24,31 +24,24 @@ import { function useNow(intervalMs: number | null): number { const step = intervalMs ?? 60_000; - const subscribe = useCallback( - (onChange: () => void) => { - if (intervalMs === null) return () => {}; - const timer = setInterval(onChange, intervalMs); - return () => clearInterval(timer); - }, - [intervalMs], - ); + const subscribe = (onChange: () => void) => { + if (intervalMs === null) return () => {}; + const timer = setInterval(onChange, intervalMs); + return () => clearInterval(timer); + }; return useSyncExternalStore(subscribe, () => Math.floor(Date.now() / step) * step); } function useUpdateRunMachineViews(run: UpdateEverythingRun): ReadonlyArray { - const viewsAtom = useMemo( - () => - Atom.make((get) => - run.machines.map((machine) => ({ - machine, - status: resolveUpdateRunMachineStatus( - machine, - run.phase, - get(serverEnvironment.updateStateAtom(machine.environmentId)), - ), - })), + const viewsAtom = Atom.make((get) => + run.machines.map((machine) => ({ + machine, + status: resolveUpdateRunMachineStatus( + machine, + run.phase, + get(serverEnvironment.updateStateAtom(machine.environmentId)), ), - [run], + })), ); return useAtomValue(viewsAtom); }