From 21eb67ef5e59d36b996392f60b5045f152a64604 Mon Sep 17 00:00:00 2001
From: Armand Philippot <git@armandphilippot.com>
Date: Fri, 1 Apr 2022 22:57:12 +0200
Subject: chore: add a labelled select field component

---
 .../molecules/forms/labelled-select.stories.tsx    | 127 +++++++++++++++++++++
 1 file changed, 127 insertions(+)
 create mode 100644 src/components/molecules/forms/labelled-select.stories.tsx

(limited to 'src/components/molecules/forms/labelled-select.stories.tsx')

diff --git a/src/components/molecules/forms/labelled-select.stories.tsx b/src/components/molecules/forms/labelled-select.stories.tsx
new file mode 100644
index 0000000..0966e13
--- /dev/null
+++ b/src/components/molecules/forms/labelled-select.stories.tsx
@@ -0,0 +1,127 @@
+import { ComponentMeta, ComponentStory } from '@storybook/react';
+import LabelledSelectComponent from './labelled-select';
+
+const selectOptions = [
+  { id: 'option1', name: 'Option 1', value: 'option1' },
+  { id: 'option2', name: 'Option 2', value: 'option2' },
+  { id: 'option3', name: 'Option 3', value: 'option3' },
+];
+
+export default {
+  title: 'Molecules/Forms',
+  component: LabelledSelectComponent,
+  args: {
+    disabled: false,
+    required: false,
+  },
+  argTypes: {
+    disabled: {
+      control: {
+        type: 'boolean',
+      },
+      description: 'Field state: either enabled or disabled.',
+      table: {
+        category: 'Options',
+        defaultValue: { summary: false },
+      },
+      type: {
+        name: 'boolean',
+        required: false,
+      },
+    },
+    id: {
+      control: {
+        type: 'text',
+      },
+      description: 'Field id.',
+      type: {
+        name: 'string',
+        required: true,
+      },
+    },
+    label: {
+      control: {
+        type: 'text',
+      },
+      description: 'Field label.',
+      type: {
+        name: 'string',
+        required: true,
+      },
+    },
+    name: {
+      control: {
+        type: 'text',
+      },
+      description: 'Field name.',
+      type: {
+        name: 'string',
+        required: true,
+      },
+    },
+    options: {
+      control: {
+        type: null,
+      },
+      description: 'Select options.',
+      type: {
+        name: 'array',
+        required: true,
+        value: {
+          name: 'string',
+        },
+      },
+    },
+    required: {
+      control: {
+        type: 'boolean',
+      },
+      description: 'Determine if the field is required.',
+      table: {
+        category: 'Options',
+        defaultValue: { summary: false },
+      },
+      type: {
+        name: 'boolean',
+        required: false,
+      },
+    },
+    setValue: {
+      control: {
+        type: null,
+      },
+      description: 'Callback function to set field value.',
+      table: {
+        category: 'Events',
+      },
+      type: {
+        name: 'function',
+        required: true,
+      },
+    },
+    value: {
+      control: {
+        type: 'text',
+      },
+      description: 'Field value.',
+      type: {
+        name: 'string',
+        required: true,
+      },
+    },
+  },
+} as ComponentMeta<typeof LabelledSelectComponent>;
+
+const Template: ComponentStory<typeof LabelledSelectComponent> = (args) => (
+  <LabelledSelectComponent {...args} />
+);
+
+export const LabelledSelect = Template.bind({});
+LabelledSelect.args = {
+  id: 'labelled-select-storybook',
+  label: 'Labelled select',
+  name: 'labelled-select-storybook',
+  options: selectOptions,
+  setValue: () => null,
+  value: '',
+};
-- 
cgit v1.2.3

