47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
type StockSource = {
|
|
totalStock?: number | null;
|
|
stock_count?: number | null;
|
|
variants?: { available_stock?: number | null }[] | null;
|
|
};
|
|
|
|
export function resolveStockQty(source: StockSource): number | null {
|
|
if (typeof source.totalStock === 'number') return source.totalStock;
|
|
if (typeof source.stock_count === 'number') return source.stock_count;
|
|
const stocks = (source.variants || [])
|
|
.map((v) => v.available_stock)
|
|
.filter((n): n is number => typeof n === 'number');
|
|
if (!stocks.length) return null;
|
|
return stocks.reduce((sum, n) => sum + n, 0);
|
|
}
|
|
|
|
export function ProductCardMeta({
|
|
sku,
|
|
discount,
|
|
brand,
|
|
className = '',
|
|
}: {
|
|
stock?: number | null;
|
|
sku?: string | null;
|
|
discount?: number | null;
|
|
brand?: string | null;
|
|
className?: string;
|
|
}) {
|
|
const extra =
|
|
discount && discount > 0
|
|
? `${discount}% off`
|
|
: sku
|
|
? String(sku)
|
|
: brand && brand !== 'iFixKart'
|
|
? String(brand)
|
|
: '';
|
|
|
|
if (!extra) return null;
|
|
|
|
return (
|
|
<p className={`text-[11px] leading-snug mb-1.5 text-gray-400 ${className}`}>
|
|
{extra}
|
|
</p>
|
|
);
|
|
}
|