fix(tui): Center the initially selected session in the session_list (resolves #8558) (#8560)

This commit is contained in:
Ariane Emory
2026-01-15 02:04:20 -05:00
committed by GitHub
parent 6473e15793
commit 08ca1237cc

View File

@@ -109,15 +109,16 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
createEffect( createEffect(
on([() => store.filter, () => props.current], ([filter, current]) => { on([() => store.filter, () => props.current], ([filter, current]) => {
setTimeout(() => {
if (filter.length > 0) { if (filter.length > 0) {
setStore("selected", 0) moveTo(0, true)
} else if (current) { } else if (current) {
const currentIndex = flat().findIndex((opt) => isDeepEqual(opt.value, current)) const currentIndex = flat().findIndex((opt) => isDeepEqual(opt.value, current))
if (currentIndex >= 0) { if (currentIndex >= 0) {
setStore("selected", currentIndex) moveTo(currentIndex, true)
} }
} }
scroll?.scrollTo(0) }, 0)
}), }),
) )
@@ -129,7 +130,7 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
moveTo(next) moveTo(next)
} }
function moveTo(next: number) { function moveTo(next: number, center = false) {
setStore("selected", next) setStore("selected", next)
props.onMove?.(selected()!) props.onMove?.(selected()!)
if (!scroll) return if (!scroll) return
@@ -138,6 +139,10 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
}) })
if (!target) return if (!target) return
const y = target.y - scroll.y const y = target.y - scroll.y
if (center) {
const centerOffset = Math.floor(scroll.height / 2)
scroll.scrollBy(y - centerOffset)
} else {
if (y >= scroll.height) { if (y >= scroll.height) {
scroll.scrollBy(y - scroll.height + 1) scroll.scrollBy(y - scroll.height + 1)
} }
@@ -148,6 +153,7 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
} }
} }
} }
}
const keybind = useKeybind() const keybind = useKeybind()
useKeyboard((evt) => { useKeyboard((evt) => {