This commit is contained in:
@@ -25,3 +25,14 @@ export const formatPrice = (price: number): string => {
|
|||||||
maximumFractionDigits: 0,
|
maximumFractionDigits: 0,
|
||||||
}).format(price);
|
}).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}`;
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import Button from "@/components/Button";
|
import Button from "@/components/Button";
|
||||||
import Input from "@/components/Input";
|
import Input from "@/components/Input";
|
||||||
import Select from "@/components/Select";
|
import Select from "@/components/Select";
|
||||||
|
import { normalizeLinkUrl } from "@/helpers/func";
|
||||||
import { clx } from "@/helpers/utils";
|
import { clx } from "@/helpers/utils";
|
||||||
import { useEditorStore, type ToolType } from "@/pages/editor/store/editorStore";
|
import { useEditorStore, type ToolType } from "@/pages/editor/store/editorStore";
|
||||||
import { Add, ArrowCircleLeft, ArrowCircleRight, ArrowLeft, ArrowRight, DocumentText, Link } from "iconsax-react";
|
import { Add, ArrowCircleLeft, ArrowCircleRight, ArrowLeft, ArrowRight, DocumentText, Link } from "iconsax-react";
|
||||||
@@ -51,7 +52,7 @@ const LinkInput = () => {
|
|||||||
|
|
||||||
const selectedLinkConfig = linkTypesConfig[selectedLinkType];
|
const selectedLinkConfig = linkTypesConfig[selectedLinkType];
|
||||||
const selectedPage = targetPageNumber ? pageOptions.find((page) => page.value === targetPageNumber) : undefined;
|
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 defaultLinkText = selectedLinkType === "link" ? resolvedLinkUrl : selectedLinkType === "page" ? selectedPage?.label || selectedLinkConfig.label : selectedLinkConfig.label;
|
||||||
const isAddDisabled = selectedLinkType === "link" ? !linkUrl.trim() : selectedLinkType === "page" && !targetPageNumber;
|
const isAddDisabled = selectedLinkType === "link" ? !linkUrl.trim() : selectedLinkType === "page" && !targetPageNumber;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import type { EditorObject } from "../../../store/editorStore";
|
import type { EditorObject } from "../../../store/editorStore";
|
||||||
import Input from "@/components/Input";
|
import Input from "@/components/Input";
|
||||||
|
import { normalizeLinkUrl } from "@/helpers/func";
|
||||||
import Select from "@/components/Select";
|
import Select from "@/components/Select";
|
||||||
import ColorPicker from "@/components/ColorPicker";
|
import ColorPicker from "@/components/ColorPicker";
|
||||||
|
|
||||||
@@ -21,6 +22,7 @@ const LinkSettings = ({ selectedObject, onUpdate }: LinkSettingsProps) => {
|
|||||||
label="آدرس لینک"
|
label="آدرس لینک"
|
||||||
value={selectedObject.linkUrl || ""}
|
value={selectedObject.linkUrl || ""}
|
||||||
onChange={(e) => onUpdate(selectedObject.id, { linkUrl: e.target.value })}
|
onChange={(e) => onUpdate(selectedObject.id, { linkUrl: e.target.value })}
|
||||||
|
onBlur={(e) => onUpdate(selectedObject.id, { linkUrl: normalizeLinkUrl(e.target.value) })}
|
||||||
placeholder="https://example.com"
|
placeholder="https://example.com"
|
||||||
/>
|
/>
|
||||||
<Input
|
<Input
|
||||||
|
|||||||
Reference in New Issue
Block a user