Skip to content

Commit

Permalink
feat: add main-menu styles and examples (#255)
Browse files Browse the repository at this point in the history
  • Loading branch information
axis-d0op authored Apr 11, 2024
1 parent 69a9260 commit fac41da
Show file tree
Hide file tree
Showing 11 changed files with 506 additions and 142 deletions.
76 changes: 76 additions & 0 deletions examples/src/components/main-menu/main-menu.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import {
useMainMenuContainerStyles,
useMainMenuTabListStyles,
useMainMenuTabStyles,
} from "@axiscommunications/fluent-styles";
import {
Tab,
TabList,
TabProps,
useTabListContext_unstable,
} from "@fluentui/react-components";
import {
bundleIcon,
CardUiFilled,
CardUiRegular,
HomeFilled,
HomeRegular,
SettingsFilled,
SettingsRegular,
} from "@fluentui/react-icons";
import React, { useEffect, useState } from "react";
import { useLocation, useNavigate } from "react-router-dom";
import { routes } from "../../routing/routes";

const HomeIcon = bundleIcon(HomeFilled, HomeRegular);
const RandomIcon = bundleIcon(CardUiFilled, CardUiRegular);
const SettingsIcon = bundleIcon(SettingsFilled, SettingsRegular);

const HOME_VALUE = "1";

export function MainMenu() {
const [selectedTab, setSelectedTab] = useState(HOME_VALUE);
const navigate = useNavigate();
const { pathname } = useLocation();

useEffect(() => {
if (pathname === routes.Home) {
setSelectedTab(HOME_VALUE);
}
}, [pathname]);

const { rootStyle: containerRootStyle } = useMainMenuContainerStyles();
const { rootStyle, spacerStyle } = useMainMenuTabListStyles();

return (
<div className={containerRootStyle}>
<TabList
className={rootStyle}
size="large"
vertical
defaultSelectedValue={selectedTab}
selectedValue={selectedTab}
onTabSelect={(_, { value }) => {
setSelectedTab(value as unknown as string);
}}
>
<MainMenuTab
onClick={() => navigate(routes.Home)}
icon={<HomeIcon />}
value={HOME_VALUE}
/>
<MainMenuTab icon={<RandomIcon />} value="2" />
<div className={spacerStyle} />
<MainMenuTab icon={<SettingsIcon />} value="3" />
</TabList>
</div>
);
}

type TMainMenuTab = TabProps;

function MainMenuTab({ children, ...props }: TMainMenuTab) {
const selected = useTabListContext_unstable((c) => c.selectedValue);
const { rootStyle } = useMainMenuTabStyles(selected === props.value);
return <Tab className={rootStyle} {...props}>{children}</Tab>;
}
8 changes: 4 additions & 4 deletions examples/src/components/story/story-status.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ const STATUS_BADGES: Record<EStoryStatus, JSX.Element> = {
[EStoryStatus.WIP]: (
<Tooltip
key={EStoryStatus.PUBLIC}
content={"Packages is not yet fully completed. Work is still in progress."}
content={"Feature(s) is not yet fully completed. Work is still in progress."}
withArrow
relationship={"label"}
>
Expand All @@ -34,7 +34,7 @@ const STATUS_BADGES: Record<EStoryStatus, JSX.Element> = {
[EStoryStatus.NEW]: (
<Tooltip
key={EStoryStatus.NEW}
content={"Packages was newly added, beware of hick-ups!"}
content={"Feature(s) was newly added, beware of hick-ups!"}
withArrow
relationship={"label"}
>
Expand All @@ -44,7 +44,7 @@ const STATUS_BADGES: Record<EStoryStatus, JSX.Element> = {
[EStoryStatus.STABLE]: (
<Tooltip
key={EStoryStatus.STABLE}
content={"Packages is considered stable, tho please report problems if found!"}
content={"Feature(s) is considered stable, tho please report problems if found!"}
withArrow
relationship={"label"}
>
Expand All @@ -54,7 +54,7 @@ const STATUS_BADGES: Record<EStoryStatus, JSX.Element> = {
[EStoryStatus.UNSTABLE]: (
<Tooltip
key={EStoryStatus.UNSTABLE}
content={"Packages is considered unstable, experimental."}
content={"Feature(s) is considered unstable, experimental."}
withArrow
relationship={"label"}
>
Expand Down
23 changes: 16 additions & 7 deletions examples/src/main-page.tsx
Original file line number Diff line number Diff line change
@@ -1,26 +1,35 @@
import { makeStyles, tokens } from "@fluentui/react-components";
import { makeStyles } from "@fluentui/react-components";
import React from "react";
import { Outlet } from "react-router-dom";
import { MainMenu } from "./components/main-menu/main-menu";
import { NavigationMenu } from "./components/navigation-menu/navigation-menu";
import { Navbar } from "./components/top-bar";
import { Layout } from "./layout";
import { useStaticStyles } from "./styles/static";
import { NavigationMenu } from "./components/navigation-menu/navigation-menu";
import { useScrollToAnchor } from "./routing/use-scroll-to-anchor";
import { useStaticStyles } from "./styles/static";

export const useStyles = makeStyles({
navigation: {
paddingRight: tokens.spacingHorizontalL,
const useStyles = makeStyles({
navigationContainer: {
display: "flex",
height: "100%",
},
});

export const MainPage = () => {
useStaticStyles();
useScrollToAnchor();

const styles = useStyles();

return (
<Layout
header={<Navbar />}
navigation={<NavigationMenu />}
navigation={
<div className={styles.navigationContainer}>
<MainMenu />
<NavigationMenu />
</div>
}
content={<Outlet />}
/>
);
Expand Down
8 changes: 4 additions & 4 deletions examples/src/routing/route-map.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { ThemePage } from "../stories/theme-page";
import { routes, TRoute } from "./routes";
import { TableUtilitiesPage } from "../stories/table-utilities/table-utlities-page";
import { IllustrationPage } from "../stories/illustrations/illustration-page";
import { FluentImplementationPage } from "../stories/fluent-implementations/fluent-implementation-page";
import { MainMenuPage } from "../stories/main-menu/main-menu-page";

export enum RouteGroup {
MISC,
Expand All @@ -35,10 +35,10 @@ type TRouteData = {

export const routeMap: Map<TRoute, TRouteData> = new Map([
[
routes.fluentImplementations,
routes.mainMenu,
{
label: "Fluent implementations",
element: <FluentImplementationPage />,
label: "Main menu",
element: <MainMenuPage />,
group: RouteGroup.STORY,
category: RouteCategory.STYLE,
ghInfo: {
Expand Down
2 changes: 1 addition & 1 deletion examples/src/routing/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const routes = {
PasswordInput: "/password-input",
TabListUtilities: "/tab-list-utilities",
Illustrations: "/illustrations-catalog",
fluentImplementations: "/fluent-implementations",
mainMenu: "/main-menu",
} as const;

export type TRoute = (typeof routes)[keyof typeof routes];
112 changes: 0 additions & 112 deletions examples/src/stories/fluent-implementations/examples/main-menu.tsx

This file was deleted.

Loading

0 comments on commit fac41da

Please sign in to comment.