summaryrefslogtreecommitdiffstats
path: root/src/components/atoms/forms
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-04-07 22:57:15 +0200
committerArmand Philippot <git@armandphilippot.com>2022-04-07 22:57:15 +0200
commita1e8f1e4426ed3560ce1b76fb73a6969388ed253 (patch)
tree1322e27552bbf49b3f14e80d3e0111e154b0ab78 /src/components/atoms/forms
parent4bd651b9e32c568d86b30463858c20ef290d8c07 (diff)
chore: add a SelectWithTooltip component
Diffstat (limited to 'src/components/atoms/forms')
-rw-r--r--src/components/atoms/forms/select.stories.tsx13
-rw-r--r--src/components/atoms/forms/select.test.tsx30
-rw-r--r--src/components/atoms/forms/select.tsx15
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}
>