diff options
Diffstat (limited to 'src/components/atoms/forms')
| -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}      > | 
