73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import { getProducts } from './products';
|
|
|
|
export interface VariantOption {
|
|
slug: string;
|
|
moc?: string;
|
|
moc_float?: number;
|
|
wykończenie?: string;
|
|
cena: number;
|
|
}
|
|
|
|
export interface ProductVariants {
|
|
series: string;
|
|
currentMoc: string;
|
|
currentWykończenie: string;
|
|
moce: VariantOption[];
|
|
wykończenia: VariantOption[];
|
|
}
|
|
|
|
export function getProductVariants(slug: string): ProductVariants | null {
|
|
const products = getProducts();
|
|
const currentProduct = products.find(p => p.slug === slug);
|
|
if (!currentProduct) return null;
|
|
|
|
// Extract series from SKU (e.g., GREE-PULAR-PU09S -> GREE-PULAR)
|
|
const skuParts = currentProduct.sku.split('-');
|
|
if (skuParts.length < 2) return null;
|
|
const series = skuParts.slice(0, -1).join('-');
|
|
|
|
const seriesProducts = products.filter(p => p.sku.startsWith(series + '-'));
|
|
|
|
const currentMoc = currentProduct.specs['Moc chłodnicza'] || '';
|
|
const currentWykończenie = currentProduct.specs['Wykończenie'] || '';
|
|
|
|
// Moce: same series, same wykończenie
|
|
const moceProducts = seriesProducts.filter(p => (p.specs['Wykończenie'] || '') === currentWykończenie);
|
|
const moce = moceProducts
|
|
.filter(p => p.specs['Moc chłodnicza'] && p.price)
|
|
.map(p => {
|
|
const m = p.specs['Moc chłodnicza'] as string;
|
|
return {
|
|
slug: p.slug,
|
|
moc: m,
|
|
moc_float: parseFloat(m.replace(',', '.')),
|
|
cena: p.price as number,
|
|
};
|
|
})
|
|
.sort((a, b) => (a.moc_float || 0) - (b.moc_float || 0));
|
|
|
|
// Wykończenia: same series, same moc
|
|
const wykończeniaProducts = seriesProducts.filter(p => (p.specs['Moc chłodnicza'] || '') === currentMoc);
|
|
let wykończenia = wykończeniaProducts
|
|
.filter(p => p.specs['Wykończenie'] && p.price)
|
|
.map(p => ({
|
|
slug: p.slug,
|
|
wykończenie: p.specs['Wykończenie'] as string,
|
|
cena: p.price as number,
|
|
}));
|
|
|
|
// If there's only 1 finish available in the entire series, don't show the variants selector
|
|
const allFinishesInSeries = new Set(seriesProducts.map(p => p.specs['Wykończenie'] || '').filter(Boolean));
|
|
if (allFinishesInSeries.size <= 1) {
|
|
wykończenia = [];
|
|
}
|
|
|
|
return {
|
|
series,
|
|
currentMoc,
|
|
currentWykończenie,
|
|
moce: moce.length > 1 ? moce : [],
|
|
wykończenia,
|
|
};
|
|
}
|