From f861e6a269ba9f62700776d3cd13b644a9e836d4 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Wed, 20 Sep 2023 16:38:54 +0200 Subject: refactor: use named export for everything except pages Next expect a default export for pages so only those components should use default exports. Everything else should use named exports to reduce the number of import statements. --- .../atoms/forms/boolean-field.stories.tsx | 10 +++---- src/components/atoms/forms/boolean-field.test.tsx | 2 +- src/components/atoms/forms/boolean-field.tsx | 34 +++++----------------- src/components/atoms/forms/field.stories.tsx | 2 +- src/components/atoms/forms/field.test.tsx | 2 +- src/components/atoms/forms/field.tsx | 20 ++++++------- src/components/atoms/forms/form.test.tsx | 2 +- src/components/atoms/forms/form.tsx | 32 +++++++++----------- src/components/atoms/forms/index.ts | 5 ++++ src/components/atoms/forms/label.stories.tsx | 2 +- src/components/atoms/forms/label.test.tsx | 2 +- src/components/atoms/forms/label.tsx | 23 ++++----------- src/components/atoms/forms/select.stories.tsx | 2 +- src/components/atoms/forms/select.test.tsx | 2 +- src/components/atoms/forms/select.tsx | 32 ++++---------------- 15 files changed, 61 insertions(+), 111 deletions(-) create mode 100644 src/components/atoms/forms/index.ts (limited to 'src/components/atoms/forms') diff --git a/src/components/atoms/forms/boolean-field.stories.tsx b/src/components/atoms/forms/boolean-field.stories.tsx index 8b6136b..3d6f8c3 100644 --- a/src/components/atoms/forms/boolean-field.stories.tsx +++ b/src/components/atoms/forms/boolean-field.stories.tsx @@ -1,13 +1,13 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import { useState } from 'react'; -import BooleanFieldComponent from './boolean-field'; +import { BooleanField } from './boolean-field'; /** * BooleanField - Storybook Meta */ export default { title: 'Atoms/Forms', - component: BooleanFieldComponent, + component: BooleanField, args: { hidden: false, }, @@ -130,9 +130,9 @@ export default { }, }, }, -} as ComponentMeta; +} as ComponentMeta; -const Template: ComponentStory = ({ +const Template: ComponentStory = ({ checked, onChange: _onChange, ...args @@ -140,7 +140,7 @@ const Template: ComponentStory = ({ const [isChecked, setIsChecked] = useState(checked); return ( - { setIsChecked(!isChecked); diff --git a/src/components/atoms/forms/boolean-field.test.tsx b/src/components/atoms/forms/boolean-field.test.tsx index b6fa625..503d1ce 100644 --- a/src/components/atoms/forms/boolean-field.test.tsx +++ b/src/components/atoms/forms/boolean-field.test.tsx @@ -1,5 +1,5 @@ import { render, screen } from '../../../../tests/utils'; -import BooleanField from './boolean-field'; +import { BooleanField } from './boolean-field'; describe('BooleanField', () => { it('renders an unchecked checkbox', () => { diff --git a/src/components/atoms/forms/boolean-field.tsx b/src/components/atoms/forms/boolean-field.tsx index 946e375..8f33a42 100644 --- a/src/components/atoms/forms/boolean-field.tsx +++ b/src/components/atoms/forms/boolean-field.tsx @@ -1,23 +1,14 @@ -import { ChangeEventHandler, FC, MouseEventHandler } from 'react'; +import { FC, InputHTMLAttributes } from 'react'; import styles from './boolean-field.module.scss'; -export type BooleanFieldProps = { - /** - * One or more ids that refers to the checkbox name. - */ - 'aria-labelledby'?: string; +export type BooleanFieldProps = Omit< + InputHTMLAttributes, + 'checked' | 'hidden' | 'name' | 'type' | 'value' +> & { /** * True if the field should be checked. */ checked: boolean; - /** - * Add classnames to the checkbox. - */ - className?: string; - /** - * Field id attribute. - */ - id: string; /** * True if the field should be visually hidden. Default: false. */ @@ -26,14 +17,6 @@ export type BooleanFieldProps = { * Field name attribute. */ name: string; - /** - * Callback function to handle state change. - */ - onChange: ChangeEventHandler; - /** - * A callback function to handle click. - */ - onClick?: MouseEventHandler; /** * The input type. */ @@ -49,14 +32,13 @@ export type BooleanFieldProps = { * * Render a checkbox or a radio input type. */ -const BooleanField: FC = ({ +export const BooleanField: FC = ({ className = '', hidden = false, ...props }) => { const modifier = hidden ? 'hidden' : ''; + const inputClass = `${styles[modifier]} ${className}`; - return ; + return ; }; - -export default BooleanField; diff --git a/src/components/atoms/forms/field.stories.tsx b/src/components/atoms/forms/field.stories.tsx index 00a183d..27fd3be 100644 --- a/src/components/atoms/forms/field.stories.tsx +++ b/src/components/atoms/forms/field.stories.tsx @@ -1,6 +1,6 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import { useState } from 'react'; -import Field from './field'; +import { Field } from './field'; /** * Field - Storybook Meta diff --git a/src/components/atoms/forms/field.test.tsx b/src/components/atoms/forms/field.test.tsx index 26ad764..492aa48 100644 --- a/src/components/atoms/forms/field.test.tsx +++ b/src/components/atoms/forms/field.test.tsx @@ -1,5 +1,5 @@ import { render, screen } from '../../../../tests/utils'; -import Field from './field'; +import { Field } from './field'; describe('Field', () => { it('renders a text input', () => { diff --git a/src/components/atoms/forms/field.tsx b/src/components/atoms/forms/field.tsx index 377e1b0..a4553e3 100644 --- a/src/components/atoms/forms/field.tsx +++ b/src/components/atoms/forms/field.tsx @@ -72,12 +72,7 @@ export type FieldProps = { value: string; }; -/** - * Field component. - * - * Render either an input or a textarea. - */ -const Field: ForwardRefRenderFunction = ( +const FieldWithRef: ForwardRefRenderFunction = ( { className = '', setValue, type, ...props }, ref ) => { @@ -93,19 +88,24 @@ const Field: ForwardRefRenderFunction = ( return type === 'textarea' ? (