aboutsummaryrefslogtreecommitdiff
path: root/components/BreadCrumbs/index.tsx
diff options
context:
space:
mode:
authorflu0r1ne <flu0r1ne@flu0r1ne.net>2023-09-06 19:53:23 -0500
committerflu0r1ne <flu0r1ne@flu0r1ne.net>2023-09-06 19:53:23 -0500
commitef4fb0a5277ee99bd0f1747b77e733ef7f02460d (patch)
tree2c7b306eaa814dedccb987a28a1cd050fdd94136 /components/BreadCrumbs/index.tsx
parenta66d6b395e22d6506319cc20b6dfab0e88cb0f39 (diff)
downloadhomepage-ef4fb0a5277ee99bd0f1747b77e733ef7f02460d.tar.xz
homepage-ef4fb0a5277ee99bd0f1747b77e733ef7f02460d.zip
Make BreadCrumbs domain agnostic
Diffstat (limited to 'components/BreadCrumbs/index.tsx')
-rw-r--r--components/BreadCrumbs/index.tsx56
1 files changed, 56 insertions, 0 deletions
diff --git a/components/BreadCrumbs/index.tsx b/components/BreadCrumbs/index.tsx
new file mode 100644
index 0000000..693a9d0
--- /dev/null
+++ b/components/BreadCrumbs/index.tsx
@@ -0,0 +1,56 @@
+import React, { Children, FC } from "react";
+import Link from "next/link";
+import styles from './breadcrumbs.module.scss';
+import clsx from 'clsx';
+
+export type BreadCrumbsProps = {
+ className?: string;
+ style?: object;
+ children: React.ReactNode;
+};
+
+const BreadCrumbs : FC<BreadCrumbsProps> = ({children, className, ...props}) => (
+ <span className={clsx(styles.breadcrumbs, className)} {...props}>
+ {Children.map(children, (child, index) => {
+ return (
+ <>
+ {
+ index !== 0 ? (
+ <span className={styles.divider}>/</span>
+ ) : undefined
+ }
+ {child}
+ </>
+ );
+ })}
+ </span>
+);
+
+export type CrumbProps = {
+ children: React.ReactNode;
+};
+
+const Crumb : FC<CrumbProps> = ({children, ...props}) => (
+ <span className={styles.crumb} {...props}>
+ {children}
+ </span>
+);
+
+export type LinkCrumbProps = {
+ href: string;
+ children: React.ReactNode;
+}
+
+const LinkCrumb : FC<LinkCrumbProps> = ({children, href, ...props}) => (
+ <Crumb>
+ <Link href={href}>
+ {children}
+ </Link>
+ </Crumb>
+);
+
+export {
+ Crumb,
+ BreadCrumbs,
+ LinkCrumb
+};