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 { Breadcrumbs } from "./breadcrumbs";
|
||||
|
||||
interface BasicLayoutProps {
|
||||
children: React.ReactNode;
|
||||
|
@ -10,7 +10,13 @@ interface BasicLayoutProps {
|
|||
export const BasicLayout = ({ children, breadcrumbs, isLoading = false }: BasicLayoutProps) => {
|
||||
return (
|
||||
<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}
|
||||
</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 { NextPage } from "next";
|
||||
import { Breadcrumbs } from "../../components/breadcrumbs";
|
||||
import { SectionWithDescription } from "../../components/section-with-description";
|
||||
import { ProviderSelectionBox } from "../../modules/app-configuration/ui/provider-selection-box";
|
||||
import { useRouter } from "next/router";
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import { Box, Text } from "@saleor/macaw-ui/next";
|
||||
import { NextPage } from "next";
|
||||
import { Breadcrumbs } from "../../components/breadcrumbs";
|
||||
import { SectionWithDescription } from "../../components/section-with-description";
|
||||
import {
|
||||
ConfigurationListItem,
|
||||
|
|
Loading…
Reference in a new issue