feat: implement 'last' for 'up' in button navigation

This commit is contained in:
2025-11-24 11:11:51 +01:00
parent 19324c3f0b
commit ca6402261a

View File

@@ -12,7 +12,7 @@ export const useButtonNavigation = <T extends Record<string, ButtonConfig>>({
navigation: Record< navigation: Record<
keyof T, keyof T,
{ {
up?: keyof T; up?: keyof T | "last";
down?: keyof T | "last"; down?: keyof T | "last";
left?: keyof T; left?: keyof T;
right?: keyof T; right?: keyof T;
@@ -36,8 +36,10 @@ export const useButtonNavigation = <T extends Record<string, ButtonConfig>>({
onButtonClick?.(buttonName); onButtonClick?.(buttonName);
} else { } else {
if ( if (
navigation[buttonName].down === "last" && (navigation[buttonName].down === "last" &&
navigation[selectedButton.value]!.up === buttonName navigation[selectedButton.value]!.up === buttonName) ||
(navigation[buttonName].up === "last" &&
navigation[selectedButton.value]!.down === buttonName)
) { ) {
nextButton.value = selectedButton.value; nextButton.value = selectedButton.value;
} }
@@ -60,9 +62,15 @@ export const useButtonNavigation = <T extends Record<string, ButtonConfig>>({
if (!currentNav.up) return; if (!currentNav.up) return;
if (currentNav.up === "last") { if (currentNav.up === "last") {
selectedButton.value = nextButton.value; if (nextButton.value) {
selectedButton.value = nextButton.value;
} else {
selectedButton.value = currentNav.left ?? currentNav.right;
}
} else { } else {
nextButton.value = selectedButton.value as keyof T; if (navigation[currentNav.up].down === "last") {
nextButton.value = selectedButton.value as keyof T;
}
selectedButton.value = currentNav.up; selectedButton.value = currentNav.up;
} }
@@ -78,6 +86,9 @@ export const useButtonNavigation = <T extends Record<string, ButtonConfig>>({
selectedButton.value = currentNav.left ?? currentNav.right; selectedButton.value = currentNav.left ?? currentNav.right;
} }
} else { } else {
if (navigation[currentNav.down].up === "last") {
nextButton.value = selectedButton.value as keyof T;
}
selectedButton.value = currentNav.down; selectedButton.value = currentNav.down;
} }
break; break;