fix(chess): preserve RulesDrawer scroll position on toggle

This commit is contained in:
Joey Yakimowich-Payne 2026-04-17 11:44:08 -06:00
commit 0f1cb4ff34
No known key found for this signature in database

View file

@ -15,11 +15,13 @@ import { PRESET_REGISTRY } from '../presets/index.js';
*/
export function RulesDrawer() {
const [open, setOpen] = useState(false);
// Force-refresh trigger. The registry itself has no event emitter so we
// re-read on every open and every toggle click.
const [tick, setTick] = useState(0);
// Force-refresh trigger. The registry itself has no event emitter, so we
// bump this counter on every open and every toggle click to re-read the
// active set. The value is never read directly — only the setter is used
// to trigger a re-render of this component.
const [, setTick] = useState(0);
// Re-read active set on every open/close so external changes reflect.
// Re-read active set on every open so external changes reflect.
useEffect(() => {
if (open) setTick((t) => t + 1);
}, [open]);
@ -95,7 +97,7 @@ export function RulesDrawer() {
</button>
</header>
<div className="flex-1 overflow-y-auto p-5 space-y-3" key={tick}>
<div className="flex-1 overflow-y-auto p-5 space-y-3">
{presets.map((preset) => {
const isOn = activeIds.has(preset.id);
const blockedBy = preset.incompatibleWith.filter((id) =>