52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import defaultImg from '@/assets/img/defaultAbshodeh.svg'
|
|
import goyImg from '@/assets/img/goyImg.svg'
|
|
import mokaabImg from '@/assets/img/mokaabImg.svg'
|
|
import sekkeImg from '@/assets/img/sekkeImg.svg'
|
|
import parsianImg from '@/assets/img/parsianImg.svg'
|
|
import venusImg from '@/assets/img/venousImg.svg'
|
|
|
|
export type ProductImageSource = {
|
|
file?: { src?: string | null } | null
|
|
group_type?: string | null
|
|
} | null | undefined
|
|
|
|
function isUsableImageSrc(src?: string | null): boolean {
|
|
if (!src) return false
|
|
const value = src.trim()
|
|
return value !== '' && value !== 'null' && value !== 'undefined'
|
|
}
|
|
|
|
export function getProductFallbackImage(product?: ProductImageSource): string {
|
|
const type = (product?.group_type ?? '').trim()
|
|
if (!type) return defaultImg
|
|
|
|
const exactMap: Record<string, string> = {
|
|
گوی: goyImg,
|
|
مکعب: mokaabImg,
|
|
سکه: sekkeImg,
|
|
'شمش ونوس': venusImg,
|
|
'سکه پارسیان': parsianImg,
|
|
شمش: defaultImg,
|
|
آبشده: defaultImg,
|
|
}
|
|
|
|
if (exactMap[type]) return exactMap[type]
|
|
|
|
if (type.includes('پارسیان')) return parsianImg
|
|
if (type.includes('ونوس')) return venusImg
|
|
if (type.includes('گوی')) return goyImg
|
|
if (type.includes('مکعب')) return mokaabImg
|
|
if (type.includes('سکه')) return sekkeImg
|
|
if (type.includes('شمش')) return defaultImg
|
|
|
|
return defaultImg
|
|
}
|
|
|
|
export function resolveProductImageSrc(product?: ProductImageSource): string {
|
|
const remoteSrc = product?.file?.src
|
|
if (isUsableImageSrc(remoteSrc)) {
|
|
return remoteSrc!.trim()
|
|
}
|
|
return getProductFallbackImage(product)
|
|
}
|