diff --git a/web/src/features/menu/list/Header.tsx b/web/src/features/menu/list/Header.tsx
new file mode 100644
index 0000000..40c8d83
--- /dev/null
+++ b/web/src/features/menu/list/Header.tsx
@@ -0,0 +1,13 @@
+import { Box, Text } from "@chakra-ui/react";
+
+const Header: React.FC<{ title: string }> = ({ title }) => {
+ return (
+
+
+ {title}
+
+
+ );
+};
+
+export default Header;
diff --git a/web/src/features/menu/list/ListItem.tsx b/web/src/features/menu/list/ListItem.tsx
new file mode 100644
index 0000000..324258d
--- /dev/null
+++ b/web/src/features/menu/list/ListItem.tsx
@@ -0,0 +1,50 @@
+import { Box, Flex, Stack, Spacer, Text } from "@chakra-ui/react";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { forwardRef } from "react";
+
+interface Item {
+ label: string;
+ value: string | string[];
+}
+
+interface Props {
+ item: Item;
+ index: number;
+}
+
+const ListItem = forwardRef, Props>(({ item, index }, ref) => {
+ return (
+ {
+ if (ref)
+ // @ts-ignore i cba
+ return (ref.current = [...ref.current, element]);
+ }}
+ >
+ {Array.isArray(item.value) ? (
+
+
+
+ {item.label}
+
+ Nice cool
+
+
+
+
+ ) : (
+ item.label
+ )}
+
+ );
+});
+
+export default ListItem;
diff --git a/web/src/features/menu/list/index.tsx b/web/src/features/menu/list/index.tsx
index b36a3a8..6b714ef 100644
--- a/web/src/features/menu/list/index.tsx
+++ b/web/src/features/menu/list/index.tsx
@@ -1,8 +1,9 @@
-import { Box, Spacer, Flex, Stack, Text } from "@chakra-ui/react";
+import { Box, Stack } from "@chakra-ui/react";
import { useEffect, useRef, useState } from "react";
import { useNuiEvent } from "../../../hooks/useNuiEvent";
import { debugData } from "../../../utils/debugData";
-import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import ListItem from "./ListItem";
+import Header from "./Header";
interface MenuSettings {
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
@@ -46,20 +47,22 @@ const ListMenu: React.FC = () => {
case "ArrowDown":
setSelected((selected) => {
if (selected >= menu.items.length - 1) return selected;
- listRefs.current[selected + 1]?.focus();
return selected + 1;
});
break;
case "ArrowUp":
setSelected((selected) => {
if (selected <= 0) return selected;
- listRefs.current[selected - 1]?.focus();
return selected - 1;
});
break;
}
};
+ useEffect(() => {
+ listRefs.current[selected]?.focus();
+ }, [selected]);
+
useEffect(() => {
if (!visible) return document.removeEventListener("keyup", moveMenu);
@@ -91,39 +94,10 @@ const ListMenu: React.FC = () => {
left={menu.position === "bottom-left" ? 1 : undefined}
bottom={menu.position === "bottom-left" || menu.position === "bottom-right" ? 1 : undefined}
>
-
-
- {menu.title}
-
-
+
{menu.items.map((item, index) => (
- (listRefs.current = [...listRefs.current, element])}
- >
- {Array.isArray(item.value) ? (
-
-
-
- {item.label}
-
- Nice cool
-
-
-
-
- ) : (
- item.label
- )}
-
+
))}