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