From 3944cbb9cd503773a24862fad428e960e52a4344 Mon Sep 17 00:00:00 2001 From: victor immanuel <89346667+victorchrollo14@users.noreply.github.com> Date: Thu, 3 Apr 2025 08:10:55 +0530 Subject: [PATCH] fix: show proper validation error message when user inputs old path in redirect section (#5082) ## Description fixes: #5050 fixes the validation error message when user enters old path in redirects section. ![image](https://github.com/user-attachments/assets/e4f2793d-5179-467d-9655-95247b9e8439) ## Steps for reproduction 1. go to project settings. 2. redirects tab 3. enter a url like https://website.org in old path input field. 4. the validation error will we shown in the tooltip. ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [x] made a self-review - [x] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [x] tested locally and on preview environment (preview dev login: 0000) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file --- .../project-settings/section-redirects.tsx | 4 ++-- packages/sdk/src/schema/pages.ts | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/builder/app/builder/features/project-settings/section-redirects.tsx b/apps/builder/app/builder/features/project-settings/section-redirects.tsx index 350eb113c2..46522eb0b8 100644 --- a/apps/builder/app/builder/features/project-settings/section-redirects.tsx +++ b/apps/builder/app/builder/features/project-settings/section-redirects.tsx @@ -16,7 +16,7 @@ import { } from "@webstudio-is/design-system"; import { ArrowRightIcon, TrashIcon } from "@webstudio-is/icons"; import { - PagePath, + OldPagePath, PageRedirect, ProjectNewRedirectPath, } from "@webstudio-is/sdk"; @@ -58,7 +58,7 @@ export const SectionRedirects = () => { }; const validateOldPath = (oldPath: string): string[] => { - const oldPathValidationResult = PagePath.safeParse(oldPath); + const oldPathValidationResult = OldPagePath.safeParse(oldPath); if (oldPathValidationResult.success === true) { if (oldPath.startsWith("/") === true) { diff --git a/packages/sdk/src/schema/pages.ts b/packages/sdk/src/schema/pages.ts index e1688677b0..bb91c7e87a 100644 --- a/packages/sdk/src/schema/pages.ts +++ b/packages/sdk/src/schema/pages.ts @@ -88,14 +88,10 @@ const HomePage = z.object({ path: HomePagePath, }); -export const PagePath = z +const DefaultPagePage = z .string() .refine((path) => path !== "", "Can't be empty") .refine((path) => path !== "/", "Can't be just a /") - .refine( - (path) => path === "" || path.startsWith("/"), - "Must start with a / or a full URL e.g. https://website.org" - ) .refine((path) => path.endsWith("/") === false, "Can't end with a /") .refine((path) => path.includes("//") === false, "Can't contain repeating /") .refine( @@ -114,6 +110,17 @@ export const PagePath = z "/build prefix is reserved for the system" ); +export const PagePath = DefaultPagePage.refine( + (path) => path === "" || path.startsWith("/"), + "Must start with a / or a full URL e.g. https://website.org" +); + +// added this for old path input under redirect section of page settings +export const OldPagePath = DefaultPagePage.refine( + (path) => path === "" || path.startsWith("/"), + "Must start with a / and it must be full path e.g. /project/id" +); + const Page = z.object({ ...commonPageFields, path: PagePath,