From 12a03a9a72f7895d571dbaeeb245d92aa277a610 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Fri, 6 Oct 2023 17:48:03 +0200 Subject: refactor(components): merge HeadingButton and Widget components The HeadingButton component was only used inside Widget component and it is not very useful on its own so I merge the two components in a new Collapsible component. --- .../molecules/buttons/heading-button.module.scss | 44 --------- .../molecules/buttons/heading-button.stories.tsx | 104 --------------------- .../molecules/buttons/heading-button.test.tsx | 33 ------- .../molecules/buttons/heading-button.tsx | 67 ------------- src/components/molecules/buttons/index.ts | 1 - 5 files changed, 249 deletions(-) delete mode 100644 src/components/molecules/buttons/heading-button.module.scss delete mode 100644 src/components/molecules/buttons/heading-button.stories.tsx delete mode 100644 src/components/molecules/buttons/heading-button.test.tsx delete mode 100644 src/components/molecules/buttons/heading-button.tsx (limited to 'src/components/molecules/buttons') diff --git a/src/components/molecules/buttons/heading-button.module.scss b/src/components/molecules/buttons/heading-button.module.scss deleted file mode 100644 index 689f1e6..0000000 --- a/src/components/molecules/buttons/heading-button.module.scss +++ /dev/null @@ -1,44 +0,0 @@ -@use "../../../styles/abstracts/functions" as fun; - -.icon { - transition: all 0.25s ease-in-out 0s; -} - -.wrapper { - display: flex; - flex-flow: row nowrap; - align-items: center; - justify-content: space-between; - gap: var(--spacing-md); - width: 100%; - padding: 0 var(--spacing-2xs); - position: sticky; - top: 0; - background: inherit; - border: none; - border-top: fun.convert-px(2) solid var(--color-primary-dark); - border-bottom: fun.convert-px(2) solid var(--color-primary-dark); - cursor: pointer; - - .heading { - padding: var(--spacing-2xs) 0; - background: none; - font-size: var(--font-size-xl); - font-weight: 500; - text-align: left; - } - - &:hover, - &:focus { - .icon { - background: var(--color-primary-light); - color: var(--color-fg-inverted); - transform: scale(1.25); - - &::before, - &::after { - background: var(--color-bg); - } - } - } -} diff --git a/src/components/molecules/buttons/heading-button.stories.tsx b/src/components/molecules/buttons/heading-button.stories.tsx deleted file mode 100644 index 9beda2b..0000000 --- a/src/components/molecules/buttons/heading-button.stories.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { useState } from 'react'; -import { HeadingButton as HeadingButtonComponent } from './heading-button'; - -/** - * HeadingButton - Storybook Meta - */ -export default { - title: 'Molecules/Buttons/HeadingButton', - component: HeadingButtonComponent, - argTypes: { - className: { - control: { - type: 'text', - }, - description: 'Set additional classnames to the button.', - table: { - category: 'Styles', - }, - type: { - name: 'string', - required: false, - }, - }, - expanded: { - control: { - type: null, - }, - description: 'Heading button state (plus or minus).', - type: { - name: 'boolean', - required: true, - }, - }, - level: { - control: { - type: 'number', - min: 1, - max: 6, - }, - description: 'Heading level.', - type: { - name: 'number', - required: true, - }, - }, - setExpanded: { - control: { - type: null, - }, - description: 'Callback function to set heading button state.', - type: { - name: 'function', - required: true, - }, - }, - title: { - control: { - type: 'text', - }, - description: 'Heading title.', - type: { - name: 'string', - required: true, - }, - }, - }, -} as ComponentMeta; - -const Template: ComponentStory = ({ - expanded, - setExpanded: _setExpanded, - ...args -}) => { - const [isExpanded, setIsExpanded] = useState(expanded); - - return ( - - ); -}; - -/** - * Heading Button Stories - Expanded - */ -export const Expanded = Template.bind({}); -Expanded.args = { - expanded: true, - level: 2, - title: 'Your title', -}; - -/** - * Heading Button Stories - Collapsed - */ -export const Collapsed = Template.bind({}); -Collapsed.args = { - expanded: false, - level: 2, - title: 'Your title', -}; diff --git a/src/components/molecules/buttons/heading-button.test.tsx b/src/components/molecules/buttons/heading-button.test.tsx deleted file mode 100644 index 4d3d91e..0000000 --- a/src/components/molecules/buttons/heading-button.test.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, expect, it } from '@jest/globals'; -import { render, screen } from '../../../../tests/utils'; -import { HeadingButton } from './heading-button'; - -describe('HeadingButton', () => { - it('renders a button to collapse.', () => { - render( - null} - /> - ); - expect( - screen.getByRole('button', { name: 'Collapse The accordion title' }) - ).toBeInTheDocument(); - }); - - it('renders a button to expand.', () => { - render( - null} - /> - ); - expect( - screen.getByRole('button', { name: 'Expand The accordion title' }) - ).toBeInTheDocument(); - }); -}); diff --git a/src/components/molecules/buttons/heading-button.tsx b/src/components/molecules/buttons/heading-button.tsx deleted file mode 100644 index 3c3eef5..0000000 --- a/src/components/molecules/buttons/heading-button.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useCallback, type FC, type SetStateAction } from 'react'; -import { useIntl } from 'react-intl'; -import { Heading, type HeadingProps, Icon } from '../../atoms'; -import styles from './heading-button.module.scss'; - -export type HeadingButtonProps = Pick & { - /** - * Set additional classnames to the button. - */ - className?: string; - /** - * Accordion state. - */ - expanded: boolean; - /** - * Callback function to set accordion state on click. - */ - setExpanded: (value: SetStateAction) => void; - /** - * Accordion title. - */ - title: string; -}; - -/** - * HeadingButton component - * - * Render a button as accordion title to toggle body. - */ -export const HeadingButton: FC = ({ - className = '', - expanded, - level, - setExpanded, - title, -}) => { - const intl = useIntl(); - const btnClass = `${styles.wrapper} ${className}`; - const iconState = expanded ? 'minus' : 'plus'; - const titlePrefix = expanded - ? intl.formatMessage({ - defaultMessage: 'Collapse', - description: 'HeadingButton: title prefix (expanded state)', - id: 'UX9Bu8', - }) - : intl.formatMessage({ - defaultMessage: 'Expand', - description: 'HeadingButton: title prefix (collapsed state)', - id: 'bcyOgC', - }); - - const toggleExpand = useCallback( - () => setExpanded((prev) => !prev), - [setExpanded] - ); - - return ( - - ); -}; diff --git a/src/components/molecules/buttons/index.ts b/src/components/molecules/buttons/index.ts index e0a10c1..b2930aa 100644 --- a/src/components/molecules/buttons/index.ts +++ b/src/components/molecules/buttons/index.ts @@ -1,3 +1,2 @@ export * from './back-to-top'; -export * from './heading-button'; export * from './help-button'; -- cgit v1.2.3