aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/Sidebar/Sidebar.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/Sidebar/Sidebar.tsx')
-rw-r--r--src/components/Sidebar/Sidebar.tsx30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/components/Sidebar/Sidebar.tsx b/src/components/Sidebar/Sidebar.tsx
index 8c9fa1d..f319f9e 100644
--- a/src/components/Sidebar/Sidebar.tsx
+++ b/src/components/Sidebar/Sidebar.tsx
@@ -1,10 +1,32 @@
-import { FunctionComponent } from 'react';
+import { Children, cloneElement, isValidElement, ReactNode } from 'react';
import styles from './Sidebar.module.scss';
-const Sidebar: FunctionComponent = ({ children }) => {
+type SidebarPosition = 'left' | 'right';
+
+const Sidebar = ({
+ children,
+ position,
+ title,
+}: {
+ children: ReactNode;
+ position: SidebarPosition;
+ title?: string;
+}) => {
+ const childrenWithProps = Children.map(children, (child) => {
+ if (isValidElement(child)) {
+ return cloneElement(child, { titleLevel: title ? 3 : 2 });
+ }
+ return child;
+ });
+
+ const positionClass = `wrapper--${position}`;
+
return (
- <aside className={styles.wrapper}>
- <div className={styles.body}>{children}</div>
+ <aside className={`${styles.wrapper} ${styles[positionClass]}`}>
+ <div className={styles.body}>
+ {title && <h2>{title}</h2>}
+ {childrenWithProps}
+ </div>
</aside>
);
};