From dc5cd9aecb90b86605c055bf2ee643794ee2bfce Mon Sep 17 00:00:00 2001 From: ayangweb <75017711+ayangweb@users.noreply.github.com> Date: Fri, 13 Jun 2025 10:39:27 +0800 Subject: [PATCH] fix: fix problem with up and down key indexing (#676) * fix: fix problem with up and down key indexing * refactor: update * docs: update changelog --- docs/content.en/docs/release-notes/_index.md | 1 + src/hooks/useKeyboardNavigation.ts | 37 +++++++++++++++----- src/hooks/useSearch.ts | 2 +- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/docs/content.en/docs/release-notes/_index.md b/docs/content.en/docs/release-notes/_index.md index 479a46b7..ee261fd1 100644 --- a/docs/content.en/docs/release-notes/_index.md +++ b/docs/content.en/docs/release-notes/_index.md @@ -37,6 +37,7 @@ Information about release notes of Coco Server is provided here. - fix: web page unmount event #645 - fix: fix the problem of local path not opening #650 - fix: number keys not following settings #661 +- fix: fix problem with up and down key indexing #676 ### ✈️ Improvements diff --git a/src/hooks/useKeyboardNavigation.ts b/src/hooks/useKeyboardNavigation.ts index 56e88b4f..edd3e82a 100644 --- a/src/hooks/useKeyboardNavigation.ts +++ b/src/hooks/useKeyboardNavigation.ts @@ -52,20 +52,41 @@ export function useKeyboardNavigation({ const modifierKeyPressed = getModifierKeyPressed(e); + const indexes = suggests.map((item) => item.document.index!); + if (e.key === "ArrowUp") { e.preventDefault(); - //console.log("ArrowUp pressed", selectedIndex, suggests.length); - setSelectedIndex((prev) => - prev === null || prev === 0 ? suggests.length - 1 : prev - 1 - ); + // console.log("ArrowUp pressed", selectedIndex, suggests.length); + setSelectedIndex((prev) => { + if (prev == null) { + return Math.min(...indexes); + } + + const nextIndex = prev - 1; + + if (indexes.includes(nextIndex)) { + return nextIndex; + } + + return Math.max(...indexes); + }); } else if (e.key === "ArrowDown") { e.preventDefault(); //console.log("ArrowDown pressed", selectedIndex, suggests.length); - setSelectedIndex((prev) => - prev === null || prev === suggests.length - 1 ? 0 : prev + 1 - ); + setSelectedIndex((prev) => { + if (prev == null) { + return Math.min(...indexes); + } + + const nextIndex = prev + 1; + + if (indexes.includes(nextIndex)) { + return nextIndex; + } + + return Math.min(...indexes); + }); } else if (modifierKeyPressed) { - e.preventDefault(); if (selectedIndex !== null) { const item = globalItemIndexMap[selectedIndex]; setSelectedName(item?.source?.name || ""); diff --git a/src/hooks/useSearch.ts b/src/hooks/useSearch.ts index d597e408..3a632fc8 100644 --- a/src/hooks/useSearch.ts +++ b/src/hooks/useSearch.ts @@ -120,7 +120,7 @@ export function useSearch() { type: id, }, document: { - index: 1000000, + index: -1, id, category: id, payload: {