From 5e969ff2dc46d0d0897b86b7df0452e80da84f20 Mon Sep 17 00:00:00 2001 From: Viren070 Date: Fri, 29 Aug 2025 21:29:00 +0100 Subject: [PATCH] fix(frontend): dynamically determine menus based on mode fixes next/previous buttons leading to menus not usually visible in noob mode --- packages/frontend/src/app/main-sidebar.tsx | 2 +- packages/frontend/src/context/menu.tsx | 42 ++++++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/packages/frontend/src/app/main-sidebar.tsx b/packages/frontend/src/app/main-sidebar.tsx index 71f8ccad..fee43d79 100644 --- a/packages/frontend/src/app/main-sidebar.tsx +++ b/packages/frontend/src/app/main-sidebar.tsx @@ -6,7 +6,7 @@ import { cn } from '@/components/ui/core/styling'; import { VerticalMenu, VerticalMenuItem } from '@/components/ui/vertical-menu'; import { Button } from '@/components/ui/button'; import { useStatus } from '@/context/status'; -import { useMenu, MenuId, VALID_MENUS } from '@/context/menu'; +import { useMenu, MenuId } from '@/context/menu'; import { useUserData } from '@/context/userData'; import { ConfigModal } from '@/components/config-modal'; import { diff --git a/packages/frontend/src/context/menu.tsx b/packages/frontend/src/context/menu.tsx index 803fe48c..5f617671 100644 --- a/packages/frontend/src/context/menu.tsx +++ b/packages/frontend/src/context/menu.tsx @@ -1,8 +1,9 @@ 'use client'; import React, { createContext, useContext, useState, useEffect } from 'react'; +import { useMode } from './mode'; -export const VALID_MENUS = [ +const VALID_MENUS = [ 'about', 'services', 'addons', @@ -14,6 +15,8 @@ export const VALID_MENUS = [ 'save-install', ]; +const PRO_ONLY_MENUS = ['proxy', 'sorting']; + export type MenuId = (typeof VALID_MENUS)[number]; type MenuContextType = { @@ -35,12 +38,30 @@ const MenuContext = createContext({ }); export function MenuProvider({ children }: { children: React.ReactNode }) { + const { mode } = useMode(); + const menus = [ + 'about', + 'services', + 'addons', + 'filters', + 'sorting', + 'formatter', + 'proxy', + 'miscellaneous', + 'save-install', + ].filter((menu) => { + if (mode === 'noob') { + return !PRO_ONLY_MENUS.includes(menu); + } + return true; + }); + // Get initial menu from URL or default to 'about' const initialMenu = (() => { if (typeof window !== 'undefined') { const url = new URL(window.location.href); const menu = url.searchParams.get('menu'); - if (menu && VALID_MENUS.includes(menu)) { + if (menu && menus.includes(menu)) { return menu as MenuId; } } @@ -55,20 +76,19 @@ export function MenuProvider({ children }: { children: React.ReactNode }) { setInternalSelectedMenu(menu); }; - const firstMenu = VALID_MENUS[0]; - const lastMenu = VALID_MENUS[VALID_MENUS.length - 1]; + const firstMenu = menus[0]; + const lastMenu = menus[menus.length - 1]; const nextMenu = () => { - const currentIndex = VALID_MENUS.indexOf(selectedMenu); - const nextIndex = (currentIndex + 1) % VALID_MENUS.length; - setSelectedMenu(VALID_MENUS[nextIndex]); + const currentIndex = menus.indexOf(selectedMenu); + const nextIndex = (currentIndex + 1) % menus.length; + setSelectedMenu(menus[nextIndex]); }; const previousMenu = () => { - const currentIndex = VALID_MENUS.indexOf(selectedMenu); - const previousIndex = - (currentIndex - 1 + VALID_MENUS.length) % VALID_MENUS.length; - setSelectedMenu(VALID_MENUS[previousIndex]); + const currentIndex = menus.indexOf(selectedMenu); + const previousIndex = (currentIndex - 1 + menus.length) % menus.length; + setSelectedMenu(menus[previousIndex]); }; // Update URL when menu changes