From f10aef7f5854ab53c72f6d7c4e5f56af3816840d Mon Sep 17 00:00:00 2001 From: Marcus Farrell Date: Thu, 3 Jul 2025 18:02:13 -0700 Subject: [PATCH] Create link error message and bug fix Changed the error message from "Invalid key" to "Enter a valid short link". Found a bug that the destination URL allowed spaces, and then those links went to 404 pages. So now it shows an error if the user tries to create a short link with spaces in the destination url. --- apps/web/ui/links/destination-url-input.tsx | 1 - .../link-builder-destination-url-input.tsx | 11 +++++++--- .../ui/partners/add-partner-link-modal.tsx | 22 +++++++++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/apps/web/ui/links/destination-url-input.tsx b/apps/web/ui/links/destination-url-input.tsx index ab427dc45d..f48a10d725 100644 --- a/apps/web/ui/links/destination-url-input.tsx +++ b/apps/web/ui/links/destination-url-input.tsx @@ -97,7 +97,6 @@ export const DestinationUrlInput = forwardRef< {...(formContext && { onChange: (e) => { const url = e.target.value; - formContext.setValue("url", url); const parentParams = getParamsFromURL(url); diff --git a/apps/web/ui/links/link-builder/controls/link-builder-destination-url-input.tsx b/apps/web/ui/links/link-builder/controls/link-builder-destination-url-input.tsx index 31fd3e7f48..18670c2a9b 100644 --- a/apps/web/ui/links/link-builder/controls/link-builder-destination-url-input.tsx +++ b/apps/web/ui/links/link-builder/controls/link-builder-destination-url-input.tsx @@ -17,7 +17,7 @@ import { useAvailableDomains } from "../../use-available-domains"; */ export const LinkBuilderDestinationUrlInput = memo( forwardRef((_, ref) => { - const { control, setValue, clearErrors } = useFormContext(); + const { control, setValue, clearErrors, setError } = useFormContext(); 0; const { errors } = useFormState({ control, name: ["url"] }); @@ -42,8 +42,13 @@ export const LinkBuilderDestinationUrlInput = memo( value={field.value} domains={domains} onChange={(e: React.ChangeEvent) => { - clearErrors("url"); - field.onChange(e.target.value); + const value = e.target.value; + if (/\s/.test(value)) { + setError("url", { message: "Enter a valid URL" }); + } else { + clearErrors("url"); + field.onChange(value); + } }} required={key !== "_root"} error={errors.url?.message || undefined} diff --git a/apps/web/ui/partners/add-partner-link-modal.tsx b/apps/web/ui/partners/add-partner-link-modal.tsx index 767d4889a1..d7b292356d 100644 --- a/apps/web/ui/partners/add-partner-link-modal.tsx +++ b/apps/web/ui/partners/add-partner-link-modal.tsx @@ -40,7 +40,7 @@ const AddPartnerLinkModal = ({ const [isSubmitting, setIsSubmitting] = useState(false); const [errorMessage, setErrorMessage] = useState(null); - const { register, handleSubmit, watch } = useForm({ + const { register, handleSubmit, watch, setError, clearErrors, formState } = useForm({ defaultValues: { url: "", key: "", @@ -91,7 +91,11 @@ const AddPartnerLinkModal = ({ copyToClipboard(data.shortLink); } catch (error) { setErrorMessage( - error instanceof Error ? error.message : "Failed to create link.", + error instanceof Error && error.message === "Invalid key." + ? "Enter a valid short link" + : error instanceof Error + ? error.message + : "Failed to create link." ); } finally { setIsSubmitting(false); @@ -188,9 +192,14 @@ const AddPartnerLinkModal = ({ {destinationDomain} - + value && /\s/.test(value) + ? "Enter a valid URL" + : true + })} type="text" id="url" placeholder="(optional)" @@ -209,6 +218,11 @@ const AddPartnerLinkModal = ({ }} /> + {formState.errors.url && ( + + {formState.errors.url.message} + + )}