From 3402ad39f6a36f733eacbd91ce359e19fc7fa20d Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sat, 13 Jun 2026 10:37:35 +0330 Subject: [PATCH] fix link to out --- src/helpers/func.ts | 11 +++++++++++ .../components/sidebar/instructions/LinkInput.tsx | 3 ++- .../components/sidebar/settings/LinkSettings.tsx | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/helpers/func.ts b/src/helpers/func.ts index 3a11d9b..2399215 100644 --- a/src/helpers/func.ts +++ b/src/helpers/func.ts @@ -25,3 +25,14 @@ export const formatPrice = (price: number): string => { maximumFractionDigits: 0, }).format(price); }; + +export const normalizeLinkUrl = (url: string): string => { + const trimmed = url.trim(); + if (!trimmed || trimmed.startsWith("page://")) { + return trimmed; + } + if (/^https?:\/\//i.test(trimmed)) { + return trimmed; + } + return `https://${trimmed}`; +}; diff --git a/src/pages/editor/components/sidebar/instructions/LinkInput.tsx b/src/pages/editor/components/sidebar/instructions/LinkInput.tsx index 604095d..6f8a172 100644 --- a/src/pages/editor/components/sidebar/instructions/LinkInput.tsx +++ b/src/pages/editor/components/sidebar/instructions/LinkInput.tsx @@ -1,6 +1,7 @@ import Button from "@/components/Button"; import Input from "@/components/Input"; import Select from "@/components/Select"; +import { normalizeLinkUrl } from "@/helpers/func"; import { clx } from "@/helpers/utils"; import { useEditorStore, type ToolType } from "@/pages/editor/store/editorStore"; import { Add, ArrowCircleLeft, ArrowCircleRight, ArrowLeft, ArrowRight, DocumentText, Link } from "iconsax-react"; @@ -51,7 +52,7 @@ const LinkInput = () => { const selectedLinkConfig = linkTypesConfig[selectedLinkType]; const selectedPage = targetPageNumber ? pageOptions.find((page) => page.value === targetPageNumber) : undefined; - const resolvedLinkUrl = selectedLinkType === "link" ? linkUrl.trim() : (internalLinkUrls[selectedLinkType] ?? (targetPageNumber ? `page://${targetPageNumber}` : "")); + const resolvedLinkUrl = selectedLinkType === "link" ? normalizeLinkUrl(linkUrl) : (internalLinkUrls[selectedLinkType] ?? (targetPageNumber ? `page://${targetPageNumber}` : "")); const defaultLinkText = selectedLinkType === "link" ? resolvedLinkUrl : selectedLinkType === "page" ? selectedPage?.label || selectedLinkConfig.label : selectedLinkConfig.label; const isAddDisabled = selectedLinkType === "link" ? !linkUrl.trim() : selectedLinkType === "page" && !targetPageNumber; diff --git a/src/pages/editor/components/sidebar/settings/LinkSettings.tsx b/src/pages/editor/components/sidebar/settings/LinkSettings.tsx index 7a24f99..426b54d 100644 --- a/src/pages/editor/components/sidebar/settings/LinkSettings.tsx +++ b/src/pages/editor/components/sidebar/settings/LinkSettings.tsx @@ -1,5 +1,6 @@ import type { EditorObject } from "../../../store/editorStore"; import Input from "@/components/Input"; +import { normalizeLinkUrl } from "@/helpers/func"; import Select from "@/components/Select"; import ColorPicker from "@/components/ColorPicker"; @@ -21,6 +22,7 @@ const LinkSettings = ({ selectedObject, onUpdate }: LinkSettingsProps) => { label="آدرس لینک" value={selectedObject.linkUrl || ""} onChange={(e) => onUpdate(selectedObject.id, { linkUrl: e.target.value })} + onBlur={(e) => onUpdate(selectedObject.id, { linkUrl: normalizeLinkUrl(e.target.value) })} placeholder="https://example.com" />