diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-04-08 19:41:40 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-04-08 19:41:40 +0200 |
| commit | a5df28fad0dae266a857ae110c43b3cb8b23c996 (patch) | |
| tree | a32ea390e90697dc51c3ccb9018de9da2ee4fac3 /src/components/atoms/forms | |
| parent | 5c75a302c2203cb3ebf31233121026b4775662cf (diff) | |
refactor: use a consistent classname prop and avoid children prop
I was using the FunctionComponent type for some component that do not
use children. So I change the type to VoidFunctionComponent to avoid
mistakes.
I also rename all the "classes" or "additionalClasses" props to
"className" to keep consistency between each components.
Diffstat (limited to 'src/components/atoms/forms')
| -rw-r--r-- | src/components/atoms/forms/toggle.module.scss | 3 | ||||
| -rw-r--r-- | src/components/atoms/forms/toggle.stories.tsx | 14 | ||||
| -rw-r--r-- | src/components/atoms/forms/toggle.tsx | 26 |
3 files changed, 35 insertions, 8 deletions
diff --git a/src/components/atoms/forms/toggle.module.scss b/src/components/atoms/forms/toggle.module.scss index 00e87a2..24b867e 100644 --- a/src/components/atoms/forms/toggle.module.scss +++ b/src/components/atoms/forms/toggle.module.scss @@ -6,10 +6,11 @@ display: inline-flex; align-items: center; + width: 100%; } .title { - margin-right: var(--spacing-xs); + margin-right: auto; } .toggle { diff --git a/src/components/atoms/forms/toggle.stories.tsx b/src/components/atoms/forms/toggle.stories.tsx index 6e7323b..ea08694 100644 --- a/src/components/atoms/forms/toggle.stories.tsx +++ b/src/components/atoms/forms/toggle.stories.tsx @@ -34,6 +34,20 @@ export default { required: true, }, }, + labelSize: { + control: { + type: 'select', + }, + description: 'The label size.', + options: ['medium', 'small'], + table: { + category: 'Options', + }, + type: { + name: 'string', + required: false, + }, + }, name: { control: { type: 'text', diff --git a/src/components/atoms/forms/toggle.tsx b/src/components/atoms/forms/toggle.tsx index e8e8c0f..7ef40ed 100644 --- a/src/components/atoms/forms/toggle.tsx +++ b/src/components/atoms/forms/toggle.tsx @@ -1,9 +1,16 @@ -import { FC, ReactElement } from 'react'; +import { ReactNode, VFC } from 'react'; +import Label, { LabelProps } from './label'; import styles from './toggle.module.scss'; export type ToggleChoices = { - left: ReactElement | string; - right: ReactElement | string; + /** + * The left part of the toggle field (unchecked). + */ + left: ReactNode; + /** + * The right part of the toggle field (checked). + */ + right: ReactNode; }; export type ToggleProps = { @@ -20,6 +27,10 @@ export type ToggleProps = { */ label: string; /** + * The label size. + */ + labelSize?: LabelProps['size']; + /** * The input name. */ name: string; @@ -38,13 +49,14 @@ export type ToggleProps = { * * Render a toggle with a label and two choices. */ -const Toggle: FC<ToggleProps> = ({ +const Toggle: VFC<ToggleProps> = ({ choices, id, label, + labelSize, name, - value, setValue, + value, }) => { return ( <> @@ -56,12 +68,12 @@ const Toggle: FC<ToggleProps> = ({ onChange={() => setValue(!value)} className={styles.checkbox} /> - <label htmlFor={id} className={styles.label}> + <Label size={labelSize} htmlFor={id} className={styles.label}> <span className={styles.title}>{label}</span> {choices.left} <span className={styles.toggle}></span> {choices.right} - </label> + </Label> </> ); }; |
