refactor(web): use last-seen-tick comparison for slideout listener

Replace the boolean "skip first render" ref with a ref that stores the
previously-seen tick value. The effect now compares against the stored
value and only fires when it differs, which makes the dependency
naturally used (removes the `void slideoutOpenedTick;` acknowledgement)
and self-documents the intent of the guard.

Behavior is unchanged — both forms preserve the one-shot-per-event
semantics of the prior window-event implementation. The JSDoc on
`slideoutOpenedTickAtom` is updated to describe the new pattern.
This commit is contained in:
suryo12 2026-05-24 18:13:36 +07:00
parent ddae506631
commit d571cb23fa
2 changed files with 11 additions and 9 deletions

View file

@ -2,8 +2,10 @@ import { atom } from "jotai";
/**
* Tick counter that increments each time a sidebar slide-out panel opens.
* Consumers read this with `useAtomValue` and react to it changing guard
* the initial render with a ref so the effect only fires on subsequent
* opens, matching the one-shot semantics of the previous window event.
* Consumers read this with `useAtomValue` and store the last-seen value in
* a ref so the effect fires only when the tick changes. This preserves the
* one-shot semantics of the previous window-event implementation: a
* subscriber that mounts after a panel has already opened does not
* retroactively re-trigger.
*/
export const slideoutOpenedTickAtom = atom(0);