diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-04-07 22:57:15 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-04-07 22:57:15 +0200 |
| commit | a1e8f1e4426ed3560ce1b76fb73a6969388ed253 (patch) | |
| tree | 1322e27552bbf49b3f14e80d3e0111e154b0ab78 /src/components/atoms | |
| parent | 4bd651b9e32c568d86b30463858c20ef290d8c07 (diff) | |
chore: add a SelectWithTooltip component
Diffstat (limited to 'src/components/atoms')
| -rw-r--r-- | src/components/atoms/forms/select.stories.tsx | 13 | ||||
| -rw-r--r-- | src/components/atoms/forms/select.test.tsx | 30 | ||||
| -rw-r--r-- | src/components/atoms/forms/select.tsx | 15 |
3 files changed, 55 insertions, 3 deletions
diff --git a/src/components/atoms/forms/select.stories.tsx b/src/components/atoms/forms/select.stories.tsx index ed487f8..c7bb253 100644 --- a/src/components/atoms/forms/select.stories.tsx +++ b/src/components/atoms/forms/select.stories.tsx @@ -11,6 +11,19 @@ export default { title: 'Atoms/Forms', component: SelectComponent, argTypes: { + classes: { + control: { + type: 'text', + }, + description: 'Set additional classes', + table: { + category: 'Options', + }, + type: { + name: 'string', + required: false, + }, + }, disabled: { control: { type: 'boolean', diff --git a/src/components/atoms/forms/select.test.tsx b/src/components/atoms/forms/select.test.tsx new file mode 100644 index 0000000..22efb86 --- /dev/null +++ b/src/components/atoms/forms/select.test.tsx @@ -0,0 +1,30 @@ +import { render, screen } from '@test-utils'; +import Select from './select'; + +const selectOptions = [ + { id: 'option1', name: 'Option 1', value: 'option1' }, + { id: 'option2', name: 'Option 2', value: 'option2' }, + { id: 'option3', name: 'Option 3', value: 'option3' }, +]; +const selected = selectOptions[0]; + +describe('Select', () => { + it('should correctly set default option', () => { + render( + <Select + id="jest-select" + name="jest-select" + options={selectOptions} + value={selected.value} + setValue={() => null} + /> + ); + expect(screen.getByRole('combobox')).toHaveValue(selected.value); + expect(screen.queryByRole('combobox')).not.toHaveValue( + selectOptions[1].value + ); + expect(screen.queryByRole('combobox')).not.toHaveValue( + selectOptions[2].value + ); + }); +}); diff --git a/src/components/atoms/forms/select.tsx b/src/components/atoms/forms/select.tsx index e434a82..a42dbda 100644 --- a/src/components/atoms/forms/select.tsx +++ b/src/components/atoms/forms/select.tsx @@ -1,7 +1,7 @@ import { ChangeEvent, FC, SetStateAction } from 'react'; import styles from './forms.module.scss'; -type SelectOptions = { +export type SelectOptions = { id: string; name: string; value: string; @@ -9,6 +9,10 @@ type SelectOptions = { export type SelectProps = { /** + * Set additional classes. + */ + classes?: string; + /** * Field state. Either enabled (false) or disabled (true). */ disabled?: boolean; @@ -43,7 +47,12 @@ export type SelectProps = { * * Render a HTML select element. */ -const Select: FC<SelectProps> = ({ options, setValue, ...props }) => { +const Select: FC<SelectProps> = ({ + classes = '', + options, + setValue, + ...props +}) => { /** * Update select value when an option is selected. * @param e - The option change event. @@ -65,7 +74,7 @@ const Select: FC<SelectProps> = ({ options, setValue, ...props }) => { return ( <select - className={`${styles.field} ${styles['field--select']}`} + className={`${styles.field} ${styles['field--select']} ${classes}`} onChange={updateValue} {...props} > |
