Skip to content

Commit 6922704

Browse files
chore: add missing workspace name validation to settings and admin forms
1 parent 1066d77 commit 6922704

2 files changed

Lines changed: 6 additions & 19 deletions

File tree

apps/admin/app/(all)/(dashboard)/workspace/create/form.tsx

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Button, getButtonStyling } from "@plane/propel/button";
88
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
99
import { InstanceWorkspaceService } from "@plane/services";
1010
import type { IWorkspace } from "@plane/types";
11+
import { validateSlug, validateWorkspaceName } from "@plane/utils";
1112
// components
1213
import { CustomSelect, Input } from "@plane/ui";
1314
// hooks
@@ -90,14 +91,7 @@ export function WorkspaceCreateForm() {
9091
control={control}
9192
name="name"
9293
rules={{
93-
required: "This is a required field.",
94-
validate: (value) =>
95-
/^[\w\s-]*$/.test(value) ||
96-
`Workspaces names can contain only (" "), ( - ), ( _ ) and alphanumeric characters.`,
97-
maxLength: {
98-
value: 80,
99-
message: "Limit your name to 80 characters.",
100-
},
94+
validate: (value) => validateWorkspaceName(value, true),
10195
}}
10296
render={({ field: { value, ref, onChange } }) => (
10397
<Input
@@ -129,11 +123,7 @@ export function WorkspaceCreateForm() {
129123
control={control}
130124
name="slug"
131125
rules={{
132-
required: "The URL is a required field.",
133-
maxLength: {
134-
value: 48,
135-
message: "Limit your URL to 48 characters.",
136-
},
126+
validate: (value) => validateSlug(value),
137127
}}
138128
render={({ field: { onChange, value, ref } }) => (
139129
<Input

apps/web/core/components/workspace/settings/workspace-details.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { EditIcon } from "@plane/propel/icons";
99
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
1010
import type { IWorkspace } from "@plane/types";
1111
import { CustomSelect, Input } from "@plane/ui";
12-
import { copyUrlToClipboard, getFileURL } from "@plane/utils";
12+
import { copyUrlToClipboard, getFileURL, validateWorkspaceName } from "@plane/utils";
1313
// components
1414
import { WorkspaceImageUploadModal } from "@/components/core/modals/workspace-image-upload-modal";
1515
import { TimezoneSelect } from "@/components/global/timezone-select";
@@ -188,11 +188,7 @@ export const WorkspaceDetails = observer(function WorkspaceDetails() {
188188
control={control}
189189
name="name"
190190
rules={{
191-
required: t("workspace_settings.settings.general.errors.name.required"),
192-
maxLength: {
193-
value: 80,
194-
message: t("workspace_settings.settings.general.errors.name.max_length"),
195-
},
191+
validate: (value) => validateWorkspaceName(value, true),
196192
}}
197193
render={({ field: { value, onChange, ref } }) => (
198194
<Input
@@ -209,6 +205,7 @@ export const WorkspaceDetails = observer(function WorkspaceDetails() {
209205
/>
210206
)}
211207
/>
208+
{errors.name && <p className="text-caption-sm-regular text-danger-primary">{errors.name.message}</p>}
212209
</div>
213210

214211
<div className="flex flex-col gap-1 ">

0 commit comments

Comments
 (0)