Add user account and settings boilerplate. UserAvatarMenu now navigates to placeholder pages for both Account and Settings

This commit is contained in:
Daniel S. Hansen
2025-07-29 14:47:03 -07:00
parent 96cbf90dfb
commit be925c1f35
6 changed files with 75 additions and 8 deletions
@@ -7,6 +7,8 @@ import GlobalMapCanvas from "./views/GlobalMapCanvas";
import RegionalMapCanvas from "./views/RegionalMapCanvas"; import RegionalMapCanvas from "./views/RegionalMapCanvas";
import VolcanoCanvas from "./views/VolcanoCanvas"; import VolcanoCanvas from "./views/VolcanoCanvas";
import AdminCanvas from "./views/AdminCanvas"; import AdminCanvas from "./views/AdminCanvas";
import AccountCanvas from "./views/AccountCanvas"
import SettingsCanvas from "./views/SettingsCanvas"
import { DashboardCanvas } from "./views/DashboardCanvas"; import { DashboardCanvas } from "./views/DashboardCanvas";
import { DASHBOARD_VIEWS } from "@/constants/viewKeys"; import { DASHBOARD_VIEWS } from "@/constants/viewKeys";
@@ -30,6 +32,8 @@ export default function Canvas({ view, setView, layout, setLayout, onLayoutChang
{view === "regional" && <RegionalMapCanvas />} {view === "regional" && <RegionalMapCanvas />}
{view === "volcano" && <VolcanoCanvas />} {view === "volcano" && <VolcanoCanvas />}
{view === "admin" && <AdminCanvas />} {view === "admin" && <AdminCanvas />}
{view === "account" && <AccountCanvas />}
{view === "settings" && <SettingsCanvas />}
</Box> </Box>
); );
} }
@@ -0,0 +1,24 @@
import { Box, Text } from '@chakra-ui/react';
export default function AccountCanvas() {
return (
<Box p={8} mt={4} ml="auto" mr="auto" width="600px">
<Box
bg="bg"
shadow="md"
borderRadius="md"
p={8}
width="600px"
height="100px"
textAlign="center"
display="flex"
alignItems="center"
justifyContent="center"
>
<Text fontsize="2xl" fontWeight="bold" color="gray.700">
Account Canvas coming soon!
</Text>
</Box>
</Box>
);
}
@@ -0,0 +1,24 @@
import { Box, Text } from '@chakra-ui/react';
export default function SettingsCanvas() {
return (
<Box p={8} mt={4} ml="auto" mr="auto" width="600px">
<Box
bg="bg"
shadow="md"
borderRadius="md"
p={8}
width="600px"
height="100px"
textAlign="center"
display="flex"
alignItems="center"
justifyContent="center"
>
<Text fontsize="2xl" fontWeight="bold" color="gray.700">
Settings Canvas coming soon!
</Text>
</Box>
</Box>
);
}
+6 -2
View File
@@ -61,12 +61,16 @@ export default function Dashboard() {
width="100vw" width="100vw"
> >
<GridItem rowSpan={1} colSpan={2}> <GridItem rowSpan={1} colSpan={2}>
<Header /> <Header
view={ view }
setView={ setView }
/>
</GridItem> </GridItem>
<GridItem colSpan={1}> <GridItem colSpan={1}>
<Sidebar <Sidebar
view={ view } view={ view }
onChangeView={ setView }/> onChangeView={ setView }
/>
</GridItem> </GridItem>
<GridItem colSpan={1} width="100%" overflow="auto"> <GridItem colSpan={1} width="100%" overflow="auto">
<Canvas <Canvas
@@ -8,7 +8,7 @@ const user = {
// avatar: "src\\assets\\user_profile.svg" // avatar: "src\\assets\\user_profile.svg"
} }
export default function Header() { export default function Header({ view, setView }) {
const recipe = useRecipe({ key: "header" }); const recipe = useRecipe({ key: "header" });
const styles = recipe(); const styles = recipe();
@@ -20,7 +20,12 @@ export default function Header() {
<Text color="color" fontWeight="bold" textStyle="lg">{user.name}</Text> <Text color="color" fontWeight="bold" textStyle="lg">{user.name}</Text>
<Text color="fg.muted" textStyle="sm">{user.email}</Text> <Text color="fg.muted" textStyle="sm">{user.email}</Text>
</Stack> </Stack>
<UserAvatarMenu name={user.name} avatar={user.avatar} /> <UserAvatarMenu
name={user.name}
avatar={user.avatar}
view={ view }
setView={ setView }
/>
</Flex> </Flex>
</chakra.div> </chakra.div>
); );
@@ -1,7 +1,7 @@
import { Avatar, Menu, Portal, Box } from "@chakra-ui/react" import { Avatar, Menu, Portal, Box } from "@chakra-ui/react"
export default function UserAvatarMenu({ name, avatar }) { export default function UserAvatarMenu({ view, setView, name, avatar }) {
return ( return (
<Menu.Root> <Menu.Root>
<Menu.Trigger focusRing="none"> <Menu.Trigger focusRing="none">
@@ -21,9 +21,15 @@ export default function UserAvatarMenu({ name, avatar }) {
{/* zIndex: overlay = 1300 */} {/* zIndex: overlay = 1300 */}
<Menu.Positioner zIndex="overlay"> <Menu.Positioner zIndex="overlay">
<Menu.Content> <Menu.Content>
<Menu.Item value="account">Account</Menu.Item> <Menu.Item value="account" onClick={() => setView("account")}>
<Menu.Item value="settings">Settings</Menu.Item> Account
<Menu.Item value="logout">Logout</Menu.Item> </Menu.Item>
<Menu.Item value="settings" onClick={() => setView("settings")}>
Settings
</Menu.Item>
<Menu.Item value="logout" onClick={() => console.log("Log out triggered")}>
Logout
</Menu.Item>
</Menu.Content> </Menu.Content>
</Menu.Positioner> </Menu.Positioner>
</Portal> </Portal>