From a296f7cb616656dad004f7e6bdc41f0d9775d262 Mon Sep 17 00:00:00 2001 From: Romain Lenzotti Date: Thu, 16 Jan 2025 10:13:32 +0100 Subject: [PATCH 1/4] feat(react-formio): add react-select --- .storybook/preview.ts | 11 +- package.json | 1 + .../src/views/forms.stories.tsx | 4 +- .../src/views/submissions.stories.tsx | 4 +- packages/react-formio/package.json | 1 + .../src/molecules/alert/Alert.stories.tsx | 16 +- .../form-control/FormControl.stories.tsx | 12 +- .../forms/form-control/FormControl.tsx | 4 +- .../forms/input-tags/InputTags.stories.tsx | 30 +- .../molecules/forms/input-tags/InputTags.tsx | 3 + .../forms/input-text/InputText.stories.tsx | 36 +- .../molecules/forms/input-text/InputText.tsx | 9 +- .../forms/select/Select.interfaces.ts | 47 +++ .../molecules/forms/select/Select.spec.tsx | 84 ---- .../molecules/forms/select/Select.stories.tsx | 167 -------- .../src/molecules/forms/select/Select.tsx | 96 +---- .../src/molecules/forms/select/all.ts | 6 + .../components/ChoicesSelect.stories.tsx | 375 ++++++++++++++++++ .../forms/select/components/ChoicesSelect.tsx | 168 ++++++++ .../select/components/HtmlSelect.stories.tsx | 305 ++++++++++++++ .../forms/select/components/HtmlSelect.tsx | 53 +++ .../select/components/ReactSelect.stories.tsx | 285 +++++++++++++ .../forms/select/components/ReactSelect.tsx | 60 +++ .../select/components/choices.template.tsx | 38 ++ .../forms/select/hooks/useOptions.spec.ts | 154 +++++++ .../forms/select/hooks/useOptions.ts | 49 +++ .../src/molecules/loader/Loader.stories.tsx | 18 +- .../pagination/Pagination.stories.tsx | 34 +- .../src/molecules/pagination/Pagination.tsx | 42 +- .../molecules/pagination/PaginationButton.tsx | 30 ++ .../src/molecules/pagination/all.ts | 2 + .../src/molecules/table/Table.stories.tsx | 4 +- .../table/filters/DefaultColumnFilter.tsx | 2 +- .../table/filters/SelectColumnFilter.tsx | 8 +- .../src/organisms/form/Form.stories.tsx | 32 +- .../form/action/FormAction.stories.tsx | 12 +- .../form/builder/FormBuilder.stories.tsx | 14 +- .../form/builder/FormEdit.stories.tsx | 20 +- .../form/settings/FormSettings.stories.tsx | 8 +- .../organisms/modal/RemoveModal.stories.tsx | 4 +- .../table/actions/ActionsTable.stories.tsx | 20 +- .../table/forms/FormsTable.stories.tsx | 34 +- .../submissions/SubmissionsTable.stories.tsx | 28 +- .../react-formio/src/registries/components.ts | 17 + packages/tailwind-formio/styles/choices.css | 44 +- packages/tailwind-formio/styles/form.css | 2 +- packages/tailwind-formio/styles/index.css | 1 + .../tailwind-formio/styles/react-select.css | 41 ++ yarn.lock | 251 +++++++++++- 49 files changed, 2081 insertions(+), 605 deletions(-) create mode 100644 packages/react-formio/src/molecules/forms/select/Select.interfaces.ts delete mode 100644 packages/react-formio/src/molecules/forms/select/Select.spec.tsx delete mode 100644 packages/react-formio/src/molecules/forms/select/Select.stories.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/all.ts create mode 100644 packages/react-formio/src/molecules/forms/select/components/ChoicesSelect.stories.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/components/ChoicesSelect.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/components/HtmlSelect.stories.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/components/HtmlSelect.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/components/ReactSelect.stories.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/components/ReactSelect.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/components/choices.template.tsx create mode 100644 packages/react-formio/src/molecules/forms/select/hooks/useOptions.spec.ts create mode 100644 packages/react-formio/src/molecules/forms/select/hooks/useOptions.ts create mode 100644 packages/react-formio/src/molecules/pagination/PaginationButton.tsx create mode 100644 packages/react-formio/src/molecules/pagination/all.ts create mode 100644 packages/react-formio/src/registries/components.ts create mode 100644 packages/tailwind-formio/styles/react-select.css diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 9652e59a..dbcb3327 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -11,17 +11,14 @@ Templates.framework = "tailwind"; /** @type { import('@storybook/react').Preview } */ const preview = { parameters: { - // actions: { argTypesRegex: "^on[A-Z].*" }, - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/ - } + docs: { + source: { language: "tsx" } } }, viewport: { viewports: INITIAL_VIEWPORTS - } + }, + tags: ["autodocs"] }; export default preview; diff --git a/package.json b/package.json index b9f44f79..9cfea7c9 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "react-redux": "7.2.6", "react-router": "5.2.1", "react-router-dom": "5.2.1", + "react-select": "^5.9.0", "react-table": "^7.8.0", "redux-thunk": "^2.4.1", "tooltip.js": "^1.3.3" diff --git a/packages/react-formio-container/src/views/forms.stories.tsx b/packages/react-formio-container/src/views/forms.stories.tsx index 1075c231..1740500e 100644 --- a/packages/react-formio-container/src/views/forms.stories.tsx +++ b/packages/react-formio-container/src/views/forms.stories.tsx @@ -5,9 +5,7 @@ export default { component: FormsComponent, argTypes: { data: { - control: { - type: "object" - } + control: "object" }, setParameters: { action: "setParameters" }, dispatchOperation: { action: "dispatchOperation" } diff --git a/packages/react-formio-container/src/views/submissions.stories.tsx b/packages/react-formio-container/src/views/submissions.stories.tsx index ff064dc3..9758aeb3 100644 --- a/packages/react-formio-container/src/views/submissions.stories.tsx +++ b/packages/react-formio-container/src/views/submissions.stories.tsx @@ -7,9 +7,7 @@ export default { component: SubmissionsComponent, argTypes: { data: { - control: { - type: "object" - } + control: "object" }, setParameters: { action: "setParameters" }, dispatchOperation: { action: "dispatchOperation" } diff --git a/packages/react-formio/package.json b/packages/react-formio/package.json index 679da2fc..65f530fe 100644 --- a/packages/react-formio/package.json +++ b/packages/react-formio/package.json @@ -38,6 +38,7 @@ "react-dnd": ">=16.0.1", "react-dnd-html5-backend": ">=16.0.1", "react-dom": ">=16.14.0", + "react-select": ">=5.9.0", "react-table": ">=7.6.3", "tooltip.js": ">=1.3.3" }, diff --git a/packages/react-formio/src/molecules/alert/Alert.stories.tsx b/packages/react-formio/src/molecules/alert/Alert.stories.tsx index 03ca06ef..515e0d6b 100644 --- a/packages/react-formio/src/molecules/alert/Alert.stories.tsx +++ b/packages/react-formio/src/molecules/alert/Alert.stories.tsx @@ -16,18 +16,18 @@ export default { component: Alert, argTypes: { message: { - control: { - type: "text" - } + control: "text" }, type: { - control: { - type: "select", - options: ["primary", "secondary", "success", "danger", "warning", "info", "light", "dark"] - } + control: "select", + options: ["primary", "secondary", "success", "danger", "warning", "info", "light", "dark"] + } + }, + parameters: { + docs: { + source: { language: "tsx" } } }, - parameters: {}, tags: ["autodocs"] }; diff --git a/packages/react-formio/src/molecules/forms/form-control/FormControl.stories.tsx b/packages/react-formio/src/molecules/forms/form-control/FormControl.stories.tsx index b457bb34..f922e7b5 100644 --- a/packages/react-formio/src/molecules/forms/form-control/FormControl.stories.tsx +++ b/packages/react-formio/src/molecules/forms/form-control/FormControl.stories.tsx @@ -12,19 +12,13 @@ export default { component: FormControl, argTypes: { label: { - control: { - type: "text" - } + control: "text" }, name: { - control: { - type: "text" - } + control: "text" }, children: { - control: { - type: "object" - } + control: "object" } }, parameters: {}, diff --git a/packages/react-formio/src/molecules/forms/form-control/FormControl.tsx b/packages/react-formio/src/molecules/forms/form-control/FormControl.tsx index 1eba2da9..003ae357 100644 --- a/packages/react-formio/src/molecules/forms/form-control/FormControl.tsx +++ b/packages/react-formio/src/molecules/forms/form-control/FormControl.tsx @@ -2,6 +2,7 @@ import classnames from "classnames"; import type { PropsWithChildren, ReactNode } from "react"; export interface FormControlProps { + id?: string; name: string; value?: Data; required?: boolean; @@ -17,6 +18,7 @@ export interface FormControlProps { export function FormControl({ children, name, + id = name, required, prefix, suffix, @@ -27,7 +29,7 @@ export function FormControl({ return (
{label && ( -