diff --git a/assets/ts/desktop/stageNav.tsx b/assets/ts/desktop/stageNav.tsx index c8a9985..12187e7 100644 --- a/assets/ts/desktop/stageNav.tsx +++ b/assets/ts/desktop/stageNav.tsx @@ -1,4 +1,4 @@ -import { For, type Accessor, type JSX, type Setter } from 'solid-js' +import { For, createEffect, type Accessor, type JSX, type Setter } from 'solid-js' import { useState } from '../state' import { decrement, increment, type Vector } from '../utils' @@ -24,6 +24,7 @@ export default function StageNav(props: { type NavItem = (typeof navItems)[number] // variables + let controller: AbortController | undefined // eslint-disable-next-line solid/reactivity const navItems = [props.prevText, props.closeText, props.nextText] as const @@ -70,6 +71,19 @@ export default function StageNav(props: { else if (e.key === 'ArrowRight') nextImage() } + createEffect(() => { + if (props.isOpen()) { + controller = new AbortController() + const abortSignal = controller.signal + window.addEventListener('keydown', handleKey, { + passive: true, + signal: abortSignal + }) + } else { + controller?.abort() + } + }) + return ( <>