diff --git a/src/client/AppNext.tsx b/src/client/AppNext.tsx index aecf2085..e8848843 100644 --- a/src/client/AppNext.tsx +++ b/src/client/AppNext.tsx @@ -15,6 +15,7 @@ import { MSErrorBoundary } from './components/ErrorBoundary'; import { ComponentDetailedRoutable } from './components/msComponent/MSComponentDetailed'; import { MSComponentListFetchable } from './components/msComponent/MSComponentList'; import { Provider } from './components/Provider'; +import { SettingsContainer } from './components/settings/settings'; function NoMatch() { const location = useLocation(); @@ -70,7 +71,8 @@ const routesNested: RouteObject[] = [ { path: "/next", Component: Layout, - children: [ { + children: [ + { index: true, element: , }, @@ -78,6 +80,10 @@ const routesNested: RouteObject[] = [ path: "components/:componentId", element: }, + { + path: "settings", + element: + }, { path: "*", element: diff --git a/src/client/components/MobileMenu.tsx b/src/client/components/MobileMenu.tsx index a753c486..040ecb44 100644 --- a/src/client/components/MobileMenu.tsx +++ b/src/client/components/MobileMenu.tsx @@ -51,7 +51,7 @@ export const MobileSidebarNav = (props: { hideFrom?: BreakpointName | false } = - + diff --git a/src/client/components/SideNav.tsx b/src/client/components/SideNav.tsx index 130d2b2e..468760a6 100644 --- a/src/client/components/SideNav.tsx +++ b/src/client/components/SideNav.tsx @@ -73,8 +73,8 @@ export const SideNav = (props: SideNavProps) => { ) : ( {item.title} {item.status && {item.status}} @@ -134,6 +134,10 @@ export const NAV_LINKS: SideNavProps[] = [ { title: 'Dashboard', url: '/next/' + }, + { + title: 'Settings', + url: '/next/settings' } ] }, diff --git a/src/client/components/settings/settings.tsx b/src/client/components/settings/settings.tsx new file mode 100644 index 00000000..729abd8e --- /dev/null +++ b/src/client/components/settings/settings.tsx @@ -0,0 +1,55 @@ +import { useCallback } from "react" +import { + VStack, + Heading, + SegmentGroup} from "@chakra-ui/react" +import { useTheme } from "next-themes" +import { BsCircleHalf } from "react-icons/bs"; +import { LuMoon, LuSun } from "react-icons/lu" +import { makeChakraIcon } from "../icons/ChakraIcons"; + +const DarkIcon = makeChakraIcon(LuMoon); +const LightIcon = makeChakraIcon(LuSun); +const SystemIcon = makeChakraIcon(BsCircleHalf); + +export const SettingsContainer = () => { + const { resolvedTheme, setTheme, theme } = useTheme(); + const setThemeCB = useCallback((val: string) => { + switch(val) { + case 'system': + setTheme('system'); + localStorage.removeItem('theme'); + break; + case 'dark': + setTheme('dark'); + break; + case 'light': + setTheme('light'); + break; + } + },[setTheme]); + return ( + + Appearance + + setThemeCB(val.value)}> + + + Dark + + + + + Light + + + + + System + + + + + + ) +} \ No newline at end of file