From 3a68d155afd4559e141bcb6c1ca3d833d3bd4667 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 21 Apr 2022 17:58:36 +0200 Subject: chore: add a Pagination component --- .../molecules/nav/pagination.stories.tsx | 175 +++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/components/molecules/nav/pagination.stories.tsx (limited to 'src/components/molecules/nav/pagination.stories.tsx') diff --git a/src/components/molecules/nav/pagination.stories.tsx b/src/components/molecules/nav/pagination.stories.tsx new file mode 100644 index 0000000..b31c2b5 --- /dev/null +++ b/src/components/molecules/nav/pagination.stories.tsx @@ -0,0 +1,175 @@ +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { IntlProvider } from 'react-intl'; +import PaginationComponent from './pagination'; + +/** + * Pagination - Storybook Meta + */ +export default { + title: 'Molecules/Navigation/Pagination', + component: PaginationComponent, + argTypes: { + 'aria-label': { + control: { + type: 'text', + }, + description: 'An accessible name for the pagination.', + table: { + category: 'Accessibility', + }, + type: { + name: 'string', + required: false, + }, + }, + baseUrl: { + control: { + type: 'text', + }, + description: 'The url prefix.', + table: { + category: 'Options', + defaultValue: { summary: '/page/' }, + }, + type: { + name: 'string', + required: false, + }, + }, + className: { + control: { + type: 'text', + }, + description: 'Set additional classnames to the pagination wrapper.', + table: { + category: 'Styles', + }, + type: { + name: 'string', + required: false, + }, + }, + current: { + control: { + type: 'number', + }, + description: 'The current page number.', + type: { + name: 'number', + required: true, + }, + }, + perPage: { + control: { + type: 'number', + }, + description: 'The number of items per page.', + type: { + name: 'number', + required: true, + }, + }, + siblings: { + control: { + type: 'number', + }, + description: + 'The number of pages to show next to the current page for one side.', + table: { + category: 'Options', + defaultValue: { summary: 1 }, + }, + type: { + name: 'number', + required: false, + }, + }, + total: { + control: { + type: 'number', + }, + description: 'The total number of items.', + type: { + name: 'number', + required: true, + }, + }, + }, + decorators: [ + (Story) => ( + + + + ), + ], +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + +); + +/** + * Pagination Stories - Less than 5 pages + */ +export const WithoutDots = Template.bind({}); +WithoutDots.args = { + current: 2, + perPage: 10, + siblings: 2, + total: 50, +}; + +/** + * Pagination Stories - Truncated to the right. + */ +export const RightDots = Template.bind({}); +RightDots.args = { + current: 2, + perPage: 10, + siblings: 2, + total: 80, +}; + +/** + * Pagination Stories - Truncated to the left. + */ +export const LeftDots = Template.bind({}); +LeftDots.args = { + current: 7, + perPage: 10, + siblings: 2, + total: 80, +}; + +/** + * Pagination Stories - Truncated both sides. + */ +export const LeftAndRightDots = Template.bind({}); +LeftAndRightDots.args = { + current: 6, + perPage: 10, + siblings: 2, + total: 150, +}; + +/** + * Pagination Stories - Without previous link + */ +export const WithoutPreviousLink = Template.bind({}); +WithoutPreviousLink.args = { + current: 1, + perPage: 10, + siblings: 2, + total: 50, +}; + +/** + * Pagination Stories - Without next link + */ +export const WithoutNextLink = Template.bind({}); +WithoutNextLink.args = { + current: 5, + perPage: 10, + siblings: 2, + total: 50, +}; -- cgit v1.2.3 From 4581c262ca06704baaa3c0a172d509207f41f5c3 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Sat, 21 May 2022 18:42:19 +0200 Subject: chore: complete Storybook stories --- .../atoms/buttons/button-link.stories.tsx | 14 ++++++ src/components/atoms/icons/cc-by-sa.stories.tsx | 8 ---- src/components/atoms/layout/copyright.stories.tsx | 8 ---- src/components/atoms/layout/sidebar.stories.tsx | 8 ---- .../atoms/links/sharing-link.stories.tsx | 5 +-- .../atoms/lists/description-list-item.stories.tsx | 2 +- src/components/atoms/lists/list.stories.tsx | 13 ++++++ src/components/atoms/loaders/spinner.stories.tsx | 8 ---- .../molecules/buttons/back-to-top.stories.tsx | 8 ---- .../molecules/buttons/heading-button.stories.tsx | 1 + .../molecules/buttons/help-button.stories.tsx | 8 ---- src/components/molecules/buttons/help-button.tsx | 11 ++--- .../molecules/forms/labelled-field.stories.tsx | 1 + .../forms/select-with-tooltip.stories.tsx | 8 ---- .../molecules/images/responsive-image.stories.tsx | 13 ++++++ .../molecules/layout/branding.stories.tsx | 9 +--- src/components/molecules/layout/code.stories.tsx | 8 ---- src/components/molecules/layout/code.tsx | 36 ++-------------- src/components/molecules/layout/meta.stories.tsx | 34 +++++++-------- src/components/molecules/layout/widget.stories.tsx | 50 +++++++++++++--------- src/components/molecules/modals/modal.stories.tsx | 13 ++++++ .../molecules/nav/breadcrumb.stories.tsx | 8 ---- src/components/molecules/nav/nav.stories.tsx | 8 ---- .../molecules/nav/pagination.stories.tsx | 12 ++---- .../organisms/forms/comment-form.stories.tsx | 21 +++++++++ .../organisms/forms/contact-form.stories.tsx | 11 ++--- .../organisms/forms/search-form.stories.tsx | 10 +++++ .../organisms/forms/settings-form.stories.tsx | 20 +++++++++ .../organisms/layout/comment.stories.tsx | 1 + .../organisms/layout/comments-list.stories.tsx | 4 +- src/components/organisms/layout/header.stories.tsx | 10 +++++ .../organisms/layout/posts-list.stories.tsx | 44 +++++++++++++++++++ .../organisms/modals/search-modal.stories.tsx | 10 +++++ .../organisms/modals/settings-modal.stories.tsx | 20 +++++++++ .../organisms/toolbar/main-nav.stories.tsx | 11 ++--- .../organisms/toolbar/search.stories.tsx | 13 ++++++ .../organisms/toolbar/settings.stories.tsx | 3 ++ src/components/organisms/toolbar/settings.tsx | 9 +--- .../organisms/toolbar/toolbar.stories.tsx | 10 +++++ .../organisms/widgets/image-widget.stories.tsx | 21 +++++---- .../widgets/links-list-widget.stories.tsx | 21 +++++---- .../organisms/widgets/social-media.stories.tsx | 8 ---- .../widgets/table-of-contents.stories.tsx | 8 ---- src/components/templates/layout/layout.stories.tsx | 26 +++++++++++ .../templates/page/page-layout.stories.tsx | 24 +++++++++++ 45 files changed, 362 insertions(+), 237 deletions(-) (limited to 'src/components/molecules/nav/pagination.stories.tsx') diff --git a/src/components/atoms/buttons/button-link.stories.tsx b/src/components/atoms/buttons/button-link.stories.tsx index 2e1c040..d06aff3 100644 --- a/src/components/atoms/buttons/button-link.stories.tsx +++ b/src/components/atoms/buttons/button-link.stories.tsx @@ -47,6 +47,20 @@ export default { required: false, }, }, + external: { + control: { + type: 'boolean', + }, + description: 'Determine if the link is an external link.', + table: { + category: 'Options', + defaultValue: { summary: false }, + }, + type: { + name: 'boolean', + required: false, + }, + }, kind: { control: { type: 'select', diff --git a/src/components/atoms/icons/cc-by-sa.stories.tsx b/src/components/atoms/icons/cc-by-sa.stories.tsx index f2bc8f0..4229725 100644 --- a/src/components/atoms/icons/cc-by-sa.stories.tsx +++ b/src/components/atoms/icons/cc-by-sa.stories.tsx @@ -1,5 +1,4 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import CCBySAIcon from './cc-by-sa'; /** @@ -23,13 +22,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - - - - ), - ], } as ComponentMeta; const Template: ComponentStory = (args) => ( diff --git a/src/components/atoms/layout/copyright.stories.tsx b/src/components/atoms/layout/copyright.stories.tsx index b988165..612b114 100644 --- a/src/components/atoms/layout/copyright.stories.tsx +++ b/src/components/atoms/layout/copyright.stories.tsx @@ -1,6 +1,5 @@ import CCBySA from '@components/atoms/icons/cc-by-sa'; import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import CopyrightComponent from './copyright'; /** @@ -39,13 +38,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - - - - ), - ], } as ComponentMeta; const Template: ComponentStory = (args) => ( diff --git a/src/components/atoms/layout/sidebar.stories.tsx b/src/components/atoms/layout/sidebar.stories.tsx index 175af94..6876f95 100644 --- a/src/components/atoms/layout/sidebar.stories.tsx +++ b/src/components/atoms/layout/sidebar.stories.tsx @@ -1,5 +1,4 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import SidebarComponent from './sidebar'; /** @@ -46,13 +45,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - - - - ), - ], } as ComponentMeta; const Template: ComponentStory = (args) => ( diff --git a/src/components/atoms/links/sharing-link.stories.tsx b/src/components/atoms/links/sharing-link.stories.tsx index c91e938..e6bd11b 100644 --- a/src/components/atoms/links/sharing-link.stories.tsx +++ b/src/components/atoms/links/sharing-link.stories.tsx @@ -1,5 +1,4 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import SharingLinkComponent from './sharing-link'; /** @@ -41,9 +40,7 @@ export default { } as ComponentMeta; const Template: ComponentStory = (args) => ( - - - + ); /** diff --git a/src/components/atoms/lists/description-list-item.stories.tsx b/src/components/atoms/lists/description-list-item.stories.tsx index e05493c..c7beb0d 100644 --- a/src/components/atoms/lists/description-list-item.stories.tsx +++ b/src/components/atoms/lists/description-list-item.stories.tsx @@ -52,7 +52,7 @@ export default { description: 'The item layout.', options: ['inline', 'inline-values', 'stacked'], table: { - category: 'Styles', + category: 'Options', defaultValue: { summary: 'stacked' }, }, type: { diff --git a/src/components/atoms/lists/list.stories.tsx b/src/components/atoms/lists/list.stories.tsx index 54fdd3a..eac3cd3 100644 --- a/src/components/atoms/lists/list.stories.tsx +++ b/src/components/atoms/lists/list.stories.tsx @@ -35,6 +35,19 @@ export default { value: {}, }, }, + itemsClassName: { + control: { + type: 'text', + }, + description: 'Set additional classnames to the list items.', + table: { + category: 'Styles', + }, + type: { + name: 'string', + required: false, + }, + }, kind: { control: { type: 'select', diff --git a/src/components/atoms/loaders/spinner.stories.tsx b/src/components/atoms/loaders/spinner.stories.tsx index dc577dc..1792c6c 100644 --- a/src/components/atoms/loaders/spinner.stories.tsx +++ b/src/components/atoms/loaders/spinner.stories.tsx @@ -1,5 +1,4 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import SpinnerComponent from './spinner'; /** @@ -23,13 +22,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - - - - ), - ], } as ComponentMeta; const Template: ComponentStory = (args) => ( diff --git a/src/components/molecules/buttons/back-to-top.stories.tsx b/src/components/molecules/buttons/back-to-top.stories.tsx index 7d4bc39..a338b8b 100644 --- a/src/components/molecules/buttons/back-to-top.stories.tsx +++ b/src/components/molecules/buttons/back-to-top.stories.tsx @@ -1,5 +1,4 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import BackToTopComponent from './back-to-top'; /** @@ -33,13 +32,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - - - - ), - ], } as ComponentMeta; const Template: ComponentStory = (args) => ( diff --git a/src/components/molecules/buttons/heading-button.stories.tsx b/src/components/molecules/buttons/heading-button.stories.tsx index d1b5ed4..59f7be9 100644 --- a/src/components/molecules/buttons/heading-button.stories.tsx +++ b/src/components/molecules/buttons/heading-button.stories.tsx @@ -1,3 +1,4 @@ +import headingStories from '@components/atoms/headings/heading.stories'; import { ComponentMeta, ComponentStory } from '@storybook/react'; import { useState } from 'react'; import HeadingButtonComponent from './heading-button'; diff --git a/src/components/molecules/buttons/help-button.stories.tsx b/src/components/molecules/buttons/help-button.stories.tsx index cfc603e..4968b27 100644 --- a/src/components/molecules/buttons/help-button.stories.tsx +++ b/src/components/molecules/buttons/help-button.stories.tsx @@ -1,5 +1,4 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { IntlProvider } from 'react-intl'; import HelpButtonComponent from './help-button'; /** @@ -36,13 +35,6 @@ export default { }, }, }, - decorators: [ - (Story) => ( - - - - ), - ], } as ComponentMeta; const Template: ComponentStory = (args) => ( diff --git a/src/components/molecules/buttons/help-button.tsx b/src/components/molecules/buttons/help-button.tsx index e351453..ccf1ebd 100644 --- a/src/components/molecules/buttons/help-button.tsx +++ b/src/components/molecules/buttons/help-button.tsx @@ -3,12 +3,7 @@ import { forwardRef, ForwardRefRenderFunction } from 'react'; import { useIntl } from 'react-intl'; import styles from './help-button.module.scss'; -export type HelpButtonProps = Pick & { - /** - * Set additional classnames to the button wrapper. - */ - className?: string; -}; +export type HelpButtonProps = Pick; /** * HelpButton component @@ -18,7 +13,7 @@ export type HelpButtonProps = Pick & { const HelpButton: ForwardRefRenderFunction< HTMLButtonElement, HelpButtonProps -> = ({ className = '', onClick }, ref) => { +> = ({ className = '', ...props }, ref) => { const intl = useIntl(); const text = intl.formatMessage({ defaultMessage: 'Help', @@ -29,9 +24,9 @@ const HelpButton: ForwardRefRenderFunction< return (