diff --git a/src/pages/products/product-form/ProductFormPage.tsx b/src/pages/products/product-form/ProductFormPage.tsx index 83f7f66..b76533c 100644 --- a/src/pages/products/product-form/ProductFormPage.tsx +++ b/src/pages/products/product-form/ProductFormPage.tsx @@ -40,24 +40,24 @@ const productSchema = yup.object({ }); const toPublicUrl = (img: any): ProductImage => { - const rawUrl: string = img?.url || img?.file_url || img?.fileUrl || ''; - const serveKey: string | undefined = img?.serve_key || img?.serveKey; - const url = serveKey - ? `${API_GATE_WAY}/${API_ROUTES.DOWNLOAD_FILE(serveKey)}` - : rawUrl?.startsWith('http') - ? rawUrl - : rawUrl - ? `${API_GATE_WAY}${rawUrl.startsWith('/') ? '' : '/'}${rawUrl}` - : ''; - return { - id: (img?.id ?? img?.file_id ?? img?.FileID ?? img).toString(), - url, - alt: img?.alt || img?.original_name || '', - order: img?.order ?? 0, - type: img?.mime_type || img?.type || img?.file_type, - mime_type: img?.mime_type || img?.file_type, - size: img?.size, - }; + const rawUrl: string = img?.url || img?.file_url || img?.fileUrl || ''; + const serveKey: string | undefined = img?.serve_key || img?.serveKey; + const url = serveKey + ? `${API_GATE_WAY}/${API_ROUTES.DOWNLOAD_FILE(serveKey)}` + : rawUrl?.startsWith('http') + ? rawUrl + : rawUrl + ? `${API_GATE_WAY}${rawUrl.startsWith('/') ? '' : '/'}${rawUrl}` + : ''; + return { + id: (img?.id ?? img?.file_id ?? img?.FileID ?? img).toString(), + url, + alt: img?.alt || img?.original_name || '', + order: img?.order ?? 0, + type: img?.mime_type || img?.type || img?.file_type, + mime_type: img?.mime_type || img?.file_type, + size: img?.size, + }; }; const IMAGE_MAX_SIZE = 2 * 1024 * 1024; @@ -67,89 +67,89 @@ const isImageFile = (file: File) => file.type?.startsWith('image/'); const isVideoFile = (file: File) => file.type?.startsWith('video/'); const ensureSquareImage = (file: File) => - new Promise((resolve, reject) => { - const url = URL.createObjectURL(file); - const img = new Image(); - img.onload = () => { - URL.revokeObjectURL(url); - if (img.width === img.height) { - resolve(); - } else { - reject(new Error('ابعاد تصویر Explorer باید ۱ در ۱ باشد')); - } - }; - img.onerror = () => { - URL.revokeObjectURL(url); - reject(new Error('امکان بررسی ابعاد تصویر وجود ندارد')); - }; - img.src = url; - }); + new Promise((resolve, reject) => { + const url = URL.createObjectURL(file); + const img = new Image(); + img.onload = () => { + URL.revokeObjectURL(url); + if (img.width === img.height) { + resolve(); + } else { + reject(new Error('ابعاد تصویر Explorer باید ۱ در ۱ باشد')); + } + }; + img.onerror = () => { + URL.revokeObjectURL(url); + reject(new Error('امکان بررسی ابعاد تصویر وجود ندارد')); + }; + img.src = url; + }); const validateMediaFile = async (file: File, options?: { requireSquare?: boolean }) => { - if (isImageFile(file)) { - if (file.size > IMAGE_MAX_SIZE) { - throw new Error('حجم تصویر نباید بیشتر از ۲ مگابایت باشد'); + if (isImageFile(file)) { + if (file.size > IMAGE_MAX_SIZE) { + throw new Error('حجم تصویر نباید بیشتر از ۲ مگابایت باشد'); + } + if (options?.requireSquare) { + await ensureSquareImage(file); + } + } else if (isVideoFile(file)) { + if (file.size > VIDEO_MAX_SIZE) { + throw new Error('حجم ویدیو نباید بیشتر از ۲۵ مگابایت باشد'); + } + } else { + throw new Error('فقط تصاویر یا ویدیو مجاز است'); } - if (options?.requireSquare) { - await ensureSquareImage(file); - } - } else if (isVideoFile(file)) { - if (file.size > VIDEO_MAX_SIZE) { - throw new Error('حجم ویدیو نباید بیشتر از ۲۵ مگابایت باشد'); - } - } else { - throw new Error('فقط تصاویر یا ویدیو مجاز است'); - } }; const validateExplorerFile = async (file: File) => { - if (isImageFile(file)) { - await ensureSquareImage(file); - return; - } - if (isVideoFile(file)) { - return; - } - throw new Error('فقط تصاویر یا ویدیو مجاز است'); + if (isImageFile(file)) { + await ensureSquareImage(file); + return; + } + if (isVideoFile(file)) { + return; + } + throw new Error('فقط تصاویر یا ویدیو مجاز است'); }; const mapExplorerFiles = (entries: any[]): ProductImage[] => { - if (!entries || !Array.isArray(entries)) { - return []; - } - return entries.map((entry, index) => { - if (entry?.file) { - const media = toPublicUrl(entry.file); - return { ...media, order: index }; + if (!entries || !Array.isArray(entries)) { + return []; } - if (entry?.file_id) { - const normalized = toPublicUrl({ - ...entry, - id: entry.file_id, - url: entry.file_url || entry.url, - file_url: entry.file_url || entry.url, - mime_type: entry.mime_type || entry.file_type, - type: entry.file_type || entry.type, - original_name: entry.name || entry.original_name, - }); - return { ...normalized, order: index }; - } - if (entry?.FileID) { - const normalized = toPublicUrl({ - ...entry, - id: entry.FileID, - url: entry.file_url || entry.url, - file_url: entry.file_url || entry.url, - }); - return { ...normalized, order: index }; - } - if (typeof entry === 'number' || typeof entry === 'string') { - const normalized = toPublicUrl(entry); - return { ...normalized, order: index }; - } - const normalized = toPublicUrl(entry); - return { ...normalized, order: index }; - }); + return entries.map((entry, index) => { + if (entry?.file) { + const media = toPublicUrl(entry.file); + return { ...media, order: index }; + } + if (entry?.file_id) { + const normalized = toPublicUrl({ + ...entry, + id: entry.file_id, + url: entry.file_url || entry.url, + file_url: entry.file_url || entry.url, + mime_type: entry.mime_type || entry.file_type, + type: entry.file_type || entry.type, + original_name: entry.name || entry.original_name, + }); + return { ...normalized, order: index }; + } + if (entry?.FileID) { + const normalized = toPublicUrl({ + ...entry, + id: entry.FileID, + url: entry.file_url || entry.url, + file_url: entry.file_url || entry.url, + }); + return { ...normalized, order: index }; + } + if (typeof entry === 'number' || typeof entry === 'string') { + const normalized = toPublicUrl(entry); + return { ...normalized, order: index }; + } + const normalized = toPublicUrl(entry); + return { ...normalized, order: index }; + }); }; const ProductFormPage = () => {