From 4f7b432f441f26ec9e0221273e37873adbf0af96 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Mon, 20 Dec 2021 19:21:19 +0200 Subject: [PATCH] feat(app): introduce form framework [EE-1946] (#6272) --- app/portainer/__module.js | 2 + app/portainer/components/Button/Button.tsx | 10 +- .../Button/LoadingButton.stories.tsx | 36 +++ .../components/Button/LoadingButton.test.tsx | 43 ++++ .../components/Button/LoadingButton.tsx | 39 ++++ .../UsersSelector/UsersSelector.mocks.ts | 31 +++ .../UsersSelector/UsersSelector.stories.tsx | 27 +++ .../UsersSelector/UsersSelector.tsx | 40 ++++ .../components/UsersSelector/index.ts | 1 + .../FormControl/FormControl.module.css | 5 +- .../FormControl/FormControl.stories.tsx | 11 +- .../form-components/Input/BaseInput.tsx | 41 ---- ...extInput.stories.tsx => Input.stories.tsx} | 13 +- .../form-components/Input/Input.tsx | 15 ++ .../Input/NumberInput.stories.tsx | 25 --- .../form-components/Input/NumberInput.tsx | 35 --- .../form-components/Input/Select.stories.tsx | 4 +- .../form-components/Input/Select.tsx | 31 +-- .../form-components/Input/TextInput.tsx | 35 --- .../form-components/Input/Textarea.tsx | 34 +-- .../components/form-components/Input/index.ts | 3 +- .../components/form-components/Input/types.ts | 12 - .../InputGroup/InputGroup.stories.tsx | 36 ++- .../form-components/InputGroup/index.ts | 8 +- .../InputList/InputList.stories.tsx | 13 +- .../form-components/InputList/InputList.tsx | 6 +- app/portainer/models/user.js | 1 + .../CreateTeamForm/CreateTeamForm.mocks.ts | 76 +++++++ .../CreateTeamForm/CreateTeamForm.stories.tsx | 35 +++ .../CreateTeamForm/CreateTeamForm.test.tsx | 28 +++ .../teams/CreateTeamForm/CreateTeamForm.tsx | 114 ++++++++++ .../CreateTeamForm.validation.ts | 12 + app/portainer/teams/CreateTeamForm/index.ts | 7 + app/portainer/teams/index.ts | 8 + .../CreateAccessToken/CreateAccessToken.tsx | 9 +- app/portainer/views/teams/teams.html | 82 +------ app/portainer/views/teams/teamsController.js | 10 +- package.json | 8 +- yarn.lock | 208 +++++++++++++++++- 39 files changed, 815 insertions(+), 339 deletions(-) create mode 100644 app/portainer/components/Button/LoadingButton.stories.tsx create mode 100644 app/portainer/components/Button/LoadingButton.test.tsx create mode 100644 app/portainer/components/Button/LoadingButton.tsx create mode 100644 app/portainer/components/UsersSelector/UsersSelector.mocks.ts create mode 100644 app/portainer/components/UsersSelector/UsersSelector.stories.tsx create mode 100644 app/portainer/components/UsersSelector/UsersSelector.tsx create mode 100644 app/portainer/components/UsersSelector/index.ts delete mode 100644 app/portainer/components/form-components/Input/BaseInput.tsx rename app/portainer/components/form-components/Input/{TextInput.stories.tsx => Input.stories.tsx} (65%) create mode 100644 app/portainer/components/form-components/Input/Input.tsx delete mode 100644 app/portainer/components/form-components/Input/NumberInput.stories.tsx delete mode 100644 app/portainer/components/form-components/Input/NumberInput.tsx delete mode 100644 app/portainer/components/form-components/Input/TextInput.tsx delete mode 100644 app/portainer/components/form-components/Input/types.ts create mode 100644 app/portainer/teams/CreateTeamForm/CreateTeamForm.mocks.ts create mode 100644 app/portainer/teams/CreateTeamForm/CreateTeamForm.stories.tsx create mode 100644 app/portainer/teams/CreateTeamForm/CreateTeamForm.test.tsx create mode 100644 app/portainer/teams/CreateTeamForm/CreateTeamForm.tsx create mode 100644 app/portainer/teams/CreateTeamForm/CreateTeamForm.validation.ts create mode 100644 app/portainer/teams/CreateTeamForm/index.ts create mode 100644 app/portainer/teams/index.ts diff --git a/app/portainer/__module.js b/app/portainer/__module.js index d7992c645..df6d8cf6d 100644 --- a/app/portainer/__module.js +++ b/app/portainer/__module.js @@ -6,6 +6,7 @@ import settingsModule from './settings'; import featureFlagModule from './feature-flags'; import userActivityModule from './user-activity'; import servicesModule from './services'; +import teamsModule from './teams'; async function initAuthentication(authManager, Authentication, $rootScope, $state) { authManager.checkAuthOnRefresh(); @@ -32,6 +33,7 @@ angular userActivityModule, 'portainer.shared.datatable', servicesModule, + teamsModule, ]) .config([ '$stateRegistryProvider', diff --git a/app/portainer/components/Button/Button.tsx b/app/portainer/components/Button/Button.tsx index 666a69c46..0c1b033af 100644 --- a/app/portainer/components/Button/Button.tsx +++ b/app/portainer/components/Button/Button.tsx @@ -1,17 +1,19 @@ import { PropsWithChildren } from 'react'; import clsx from 'clsx'; -type Type = 'submit' | 'reset' | 'button'; +type Type = 'submit' | 'button' | 'reset'; type Color = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'link'; type Size = 'xsmall' | 'small' | 'medium' | 'large'; + export interface Props { - type?: Type; color?: Color; size?: Size; disabled?: boolean; title?: string; className?: string; - onClick: () => void; + dataCy?: string; + type?: Type; + onClick?: () => void; } export function Button({ @@ -20,12 +22,14 @@ export function Button({ size = 'small', disabled = false, className, + dataCy, onClick, title, children, }: PropsWithChildren) { return (