summaryrefslogtreecommitdiffstats
path: root/src/components/molecules/layout
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-04-21 16:53:26 +0200
committerArmand Philippot <git@armandphilippot.com>2022-04-21 16:53:26 +0200
commit2b51960da1bd907f5855869d3eee53565ca7cbfc (patch)
treea3589f3acb9325082c2fb24b45609981b21dba3e /src/components/molecules/layout
parentec54c7692d5588addcd7563626df381aa86d5d79 (diff)
chore: add a PageFooter component
Diffstat (limited to 'src/components/molecules/layout')
-rw-r--r--src/components/molecules/layout/page-footer.stories.tsx52
-rw-r--r--src/components/molecules/layout/page-footer.test.tsx9
-rw-r--r--src/components/molecules/layout/page-footer.tsx26
3 files changed, 87 insertions, 0 deletions
diff --git a/src/components/molecules/layout/page-footer.stories.tsx b/src/components/molecules/layout/page-footer.stories.tsx
new file mode 100644
index 0000000..da0a3fa
--- /dev/null
+++ b/src/components/molecules/layout/page-footer.stories.tsx
@@ -0,0 +1,52 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import PageFooterComponent from './page-footer';
+
+/**
+ * Page Footer - Storybook Meta
+ */
+export default {
+ title: 'Molecules/Layout',
+ component: PageFooterComponent,
+ argTypes: {
+ className: {
+ control: {
+ type: 'text',
+ },
+ description: 'Set additional classnames to the footer element.',
+ table: {
+ category: 'Styles',
+ },
+ type: {
+ name: 'string',
+ required: false,
+ },
+ },
+ meta: {
+ description: 'The page meta.',
+ table: {
+ category: 'Options',
+ },
+ type: {
+ name: 'object',
+ required: false,
+ value: {},
+ },
+ },
+ },
+} as ComponentMeta<typeof PageFooterComponent>;
+
+const Template: ComponentStory<typeof PageFooterComponent> = (args) => (
+ <PageFooterComponent {...args} />
+);
+
+const meta = {
+ topics: { name: 'More posts about:', value: <a href="#">Topic name</a> },
+};
+
+/**
+ * Page Footer Stories - With meta
+ */
+export const PageFooter = Template.bind({});
+PageFooter.args = {
+ meta,
+};
diff --git a/src/components/molecules/layout/page-footer.test.tsx b/src/components/molecules/layout/page-footer.test.tsx
new file mode 100644
index 0000000..2e95625
--- /dev/null
+++ b/src/components/molecules/layout/page-footer.test.tsx
@@ -0,0 +1,9 @@
+import { render, screen } from '@test-utils';
+import PageFooter from './page-footer';
+
+describe('PageFooter', () => {
+ it('renders a footer element', () => {
+ render(<PageFooter />);
+ expect(screen.getByRole('contentinfo')).toBeInTheDocument();
+ });
+});
diff --git a/src/components/molecules/layout/page-footer.tsx b/src/components/molecules/layout/page-footer.tsx
new file mode 100644
index 0000000..f522482
--- /dev/null
+++ b/src/components/molecules/layout/page-footer.tsx
@@ -0,0 +1,26 @@
+import { FC } from 'react';
+import Meta, { type MetaMap } from './meta';
+
+export type PageFooterProps = {
+ /**
+ * Set additional classnames to the footer element.
+ */
+ className?: string;
+ /**
+ * The footer metadata.
+ */
+ meta?: MetaMap;
+};
+
+/**
+ * PageFooter component
+ *
+ * Render a footer element to display page meta.
+ */
+const PageFooter: FC<PageFooterProps> = ({ meta, ...props }) => {
+ return (
+ <footer {...props}>{meta && <Meta data={meta} layout="column" />}</footer>
+ );
+};
+
+export default PageFooter;