Use breadcrumbs
This commit is contained in:
parent
40eda0045a
commit
767d7fb4d3
4 changed files with 8 additions and 59 deletions
|
@ -1,5 +1,5 @@
|
||||||
|
import { Breadcrumbs } from "@saleor/apps-ui";
|
||||||
import { Box } from "@saleor/macaw-ui/next";
|
import { Box } from "@saleor/macaw-ui/next";
|
||||||
import { Breadcrumbs } from "./breadcrumbs";
|
|
||||||
|
|
||||||
interface BasicLayoutProps {
|
interface BasicLayoutProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
@ -10,7 +10,13 @@ interface BasicLayoutProps {
|
||||||
export const BasicLayout = ({ children, breadcrumbs, isLoading = false }: BasicLayoutProps) => {
|
export const BasicLayout = ({ children, breadcrumbs, isLoading = false }: BasicLayoutProps) => {
|
||||||
return (
|
return (
|
||||||
<Box padding={10} display="grid" gap={13}>
|
<Box padding={10} display="grid" gap={13}>
|
||||||
{breadcrumbs?.length && <Breadcrumbs items={breadcrumbs} />}
|
{breadcrumbs?.length && (
|
||||||
|
<Breadcrumbs>
|
||||||
|
{breadcrumbs.map((breadcrumb) => (
|
||||||
|
<Breadcrumbs.Item href={breadcrumb.href}>{breadcrumb.name}</Breadcrumbs.Item>
|
||||||
|
))}
|
||||||
|
</Breadcrumbs>
|
||||||
|
)}
|
||||||
{children}
|
{children}
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
import { Box, Text, TextProps } from "@saleor/macaw-ui/next";
|
|
||||||
import { TextLink } from "./text-link";
|
|
||||||
import icon from "../public/breadcrumb-separator.svg";
|
|
||||||
import Image from "next/image";
|
|
||||||
|
|
||||||
type BreadcrumbItem = { name: string; href?: string };
|
|
||||||
|
|
||||||
interface BreadcrumbProps extends BreadcrumbItem {
|
|
||||||
isLast?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Breadcrumb = ({ name, href, isLast }: BreadcrumbProps) => {
|
|
||||||
const textProps: TextProps = {
|
|
||||||
variant: "hero",
|
|
||||||
display: isLast ? "block" : { mobile: "none", desktop: "block" },
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!!href) {
|
|
||||||
return (
|
|
||||||
<TextLink href={href} {...textProps}>
|
|
||||||
{name}
|
|
||||||
</TextLink>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return <Text {...textProps}>{name}</Text>;
|
|
||||||
};
|
|
||||||
|
|
||||||
interface BreadcrumbsProps {
|
|
||||||
items: Array<BreadcrumbItem>;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays breadcrumbs for the current page.
|
|
||||||
* On desktop full path is visible. On mobile only last item is shown.
|
|
||||||
*/
|
|
||||||
export const Breadcrumbs = (props: BreadcrumbsProps) => {
|
|
||||||
if (props.items.length === 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const items = [...props.items];
|
|
||||||
const lastItem = items.pop()!; // can enforce the type since array is at least one element long
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Box display="flex" gap={6}>
|
|
||||||
{items.map((item) => (
|
|
||||||
<Box key={item.name} display={{ mobile: "none", desktop: "flex" }} gap={6}>
|
|
||||||
<Breadcrumb {...item} key={item.name} />
|
|
||||||
<Image alt="Separator icon" src={icon} height={32} width={32} />
|
|
||||||
</Box>
|
|
||||||
))}
|
|
||||||
<Breadcrumb isLast={true} {...lastItem} />
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
};
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { Box, Text } from "@saleor/macaw-ui/next";
|
import { Box, Text } from "@saleor/macaw-ui/next";
|
||||||
import { NextPage } from "next";
|
import { NextPage } from "next";
|
||||||
import { Breadcrumbs } from "../../components/breadcrumbs";
|
|
||||||
import { SectionWithDescription } from "../../components/section-with-description";
|
import { SectionWithDescription } from "../../components/section-with-description";
|
||||||
import { ProviderSelectionBox } from "../../modules/app-configuration/ui/provider-selection-box";
|
import { ProviderSelectionBox } from "../../modules/app-configuration/ui/provider-selection-box";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import { Box, Text } from "@saleor/macaw-ui/next";
|
import { Box, Text } from "@saleor/macaw-ui/next";
|
||||||
import { NextPage } from "next";
|
import { NextPage } from "next";
|
||||||
import { Breadcrumbs } from "../../components/breadcrumbs";
|
|
||||||
import { SectionWithDescription } from "../../components/section-with-description";
|
import { SectionWithDescription } from "../../components/section-with-description";
|
||||||
import {
|
import {
|
||||||
ConfigurationListItem,
|
ConfigurationListItem,
|
||||||
|
|
Loading…
Reference in a new issue