diff --git a/.gitignore b/.gitignore index 16607eacaa35e..031661119573b 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ site/stats/ # direnv .envrc +.direnv *.test # Loadtesting diff --git a/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx b/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx index d6b3dbdb57509..735c4160c9f67 100644 --- a/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx +++ b/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; +import { userEvent, within } from "@storybook/test"; import { mockApiError } from "testHelpers/entities"; import { CreateGroupPageView } from "./CreateGroupPageView"; @@ -21,3 +22,13 @@ export const WithError: Story = { initialTouched: { name: true }, }, }; + +export const InvalidName: Story = { + play: async ({ canvasElement }) => { + const user = userEvent.setup(); + const body = within(canvasElement.ownerDocument.body); + const input = await body.findByLabelText("Name"); + await user.type(input, "$om3 !nv@lid Name"); + input.blur(); + }, +}; diff --git a/site/src/pages/GroupsPage/CreateGroupPageView.tsx b/site/src/pages/GroupsPage/CreateGroupPageView.tsx index fe2ed5158f6de..e1432d78e2716 100644 --- a/site/src/pages/GroupsPage/CreateGroupPageView.tsx +++ b/site/src/pages/GroupsPage/CreateGroupPageView.tsx @@ -12,11 +12,15 @@ import { Stack } from "components/Stack/Stack"; import { type FormikTouched, useFormik } from "formik"; import type { FC } from "react"; import { useNavigate } from "react-router-dom"; -import { getFormHelpers, onChangeTrimmed } from "utils/formUtils"; +import { + getFormHelpers, + nameValidator, + onChangeTrimmed, +} from "utils/formUtils"; import * as Yup from "yup"; const validationSchema = Yup.object({ - name: Yup.string().required().label("Name"), + name: nameValidator("Name"), }); export type CreateGroupPageViewProps = { @@ -62,6 +66,8 @@ export const CreateGroupPageView: FC = ({ autoFocus fullWidth label="Name" + onChange={onChangeTrimmed(form)} + autoComplete="name" /> = ({ })} fullWidth label="Display Name" + autoComplete="display_name" /> { + const user = userEvent.setup(); + const body = within(canvasElement.ownerDocument.body); + const input = await body.findByLabelText("Name"); + await user.type(input, "$om3 !nv@lid Name"); + input.blur(); + }, +}; diff --git a/site/src/pages/ManagementSettingsPage/GroupsPage/CreateGroupPageView.tsx b/site/src/pages/ManagementSettingsPage/GroupsPage/CreateGroupPageView.tsx index 050a42890900a..3f695020d21a9 100644 --- a/site/src/pages/ManagementSettingsPage/GroupsPage/CreateGroupPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/GroupsPage/CreateGroupPageView.tsx @@ -15,11 +15,15 @@ import { Spinner } from "components/Spinner/Spinner"; import { useFormik } from "formik"; import type { FC } from "react"; import { useNavigate } from "react-router-dom"; -import { getFormHelpers, onChangeTrimmed } from "utils/formUtils"; +import { + getFormHelpers, + nameValidator, + onChangeTrimmed, +} from "utils/formUtils"; import * as Yup from "yup"; const validationSchema = Yup.object({ - name: Yup.string().required().label("Name"), + name: nameValidator("Name"), }); export type CreateGroupPageViewProps = { @@ -69,6 +73,8 @@ export const CreateGroupPageView: FC = ({ autoFocus fullWidth label="Name" + onChange={onChangeTrimmed(form)} + autoComplete="name" /> = ({ })} fullWidth label="Display Name" + autoComplete="display_name" /> pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy