diff --git a/rust/gui-client/src-frontend/components/App.tsx b/rust/gui-client/src-frontend/components/App.tsx index 40ff56aea..3bba01014 100644 --- a/rust/gui-client/src-frontend/components/App.tsx +++ b/rust/gui-client/src-frontend/components/App.tsx @@ -12,17 +12,17 @@ import { listen } from "@tauri-apps/api/event"; import { Sidebar, SidebarCollapse, - SidebarItem, SidebarItemGroup, SidebarItems, } from "flowbite-react"; import React, { useEffect, useState } from "react"; -import { Route, Routes, useNavigate, useLocation } from "react-router"; +import { Route, Routes } from "react-router"; import { AdvancedSettingsViewModel } from "../generated/AdvancedSettingsViewModel"; import { FileCount } from "../generated/FileCount"; import { SessionViewModel } from "../generated/SessionViewModel"; import About from "./AboutPage"; import AdvancedSettingsPage from "./AdvancedSettingsPage"; +import ReactRouterSidebarItem from "./ReactRouterSidebarItem"; import ColorPalette from "./ColorPalettePage"; import Diagnostics from "./DiagnosticsPage"; import GeneralSettingsPage from "./GeneralSettingsPage"; @@ -37,19 +37,6 @@ export default function App() { let [advancedSettings, setAdvancedSettings] = useState(null); - const location = useLocation(); - const navigate = useNavigate(); - - // Custom navigation handler for SidebarItems to avoid full page reloads - const handleClick = (event: React.MouseEvent) => { - event.preventDefault(); - const target = event.currentTarget; - const href = target.getAttribute("href"); - if (href) { - navigate(href); - } - }; - useEffect(() => { const sessionChanged = listen("session_changed", (e) => { let session = e.payload; @@ -104,59 +91,35 @@ export default function App() { > - + Overview - + - + General - - + Advanced - + - Diagnostics - - + + About - + {isDev && ( - + Color Palette - + )} diff --git a/rust/gui-client/src-frontend/components/ReactRouterSidebarItem.tsx b/rust/gui-client/src-frontend/components/ReactRouterSidebarItem.tsx new file mode 100644 index 000000000..18463f925 --- /dev/null +++ b/rust/gui-client/src-frontend/components/ReactRouterSidebarItem.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import type { FC, ComponentProps } from "react"; +import { useNavigate, useLocation } from "react-router"; +import { SidebarItem } from "flowbite-react"; + +export default function ReactRouterSidebarItem({ + href, + icon, + children, +}: { + href: string; + icon: FC>; + children: React.ReactNode; +}) { + const location = useLocation(); + const navigate = useNavigate(); + + // Custom navigation handler for SidebarItems to avoid full page reloads + const handleClick = (event: React.MouseEvent) => { + event.preventDefault(); + navigate(href); + }; + + return ( + + {children} + + ); +}