feat: nowe strony SEO, zdjęcia miast, loga marek, dane firmy, nawigacja, cennik

This commit is contained in:
MichalC
2026-07-04 19:38:22 +02:00
parent cdbc76cf79
commit 03d425d4b1
59 changed files with 71 additions and 675 deletions
+9 -10
View File
@@ -10,16 +10,15 @@ import { useState } from 'react';
const brandLogos: Record<string, string> = {
'Gree': '/brands/gree.webp',
'Rotenso': '/brands/rotenso.png',
'Toshiba': '/brands/toshiba.jpg',
'Daikin': '/brands/daikin.png',
'CHV': '/brands/chv.jpeg',
'Haier': '/brands/haier.jpg',
'Aux': '/brands/aux.png',
'LG': '/brands/lg.png',
'Samsung': '/brands/samsung.png',
'Mitsubishi Electric': '/brands/mitsubishi-electric.png',
'Fuji Electric': '/brands/fuji-electric.png',
'Rotenso': '/brands/rotenso.webp',
'Toshiba': '/brands/toshiba.webp',
'Daikin': '/brands/daikin.webp',
'CHV': '/brands/chv.webp',
'Haier': '/brands/haier.webp',
'LG': '/brands/lg.webp',
'Samsung': '/brands/samsung.webp',
'Mitsubishi Electric': '/brands/mitsubishi.webp',
'Fuji Electric': '/brands/fuji.webp',
};
interface ProductCardProps {
+9 -10
View File
@@ -14,16 +14,15 @@ import { getProductVariants } from '@/content/product-variants';
const brandLogos: Record<string, string> = {
'Gree': '/brands/gree.webp',
'Rotenso': '/brands/rotenso.png',
'Toshiba': '/brands/toshiba.jpg',
'Daikin': '/brands/daikin.png',
'CHV': '/brands/chv.jpeg',
'Haier': '/brands/haier.jpg',
'Aux': '/brands/aux.png',
'LG': '/brands/lg.png',
'Samsung': '/brands/samsung.png',
'Mitsubishi Electric': '/brands/mitsubishi-electric.png',
'Fuji Electric': '/brands/fuji-electric.png',
'Rotenso': '/brands/rotenso.webp',
'Toshiba': '/brands/toshiba.webp',
'Daikin': '/brands/daikin.webp',
'CHV': '/brands/chv.webp',
'Haier': '/brands/haier.webp',
'LG': '/brands/lg.webp',
'Samsung': '/brands/samsung.webp',
'Mitsubishi Electric': '/brands/mitsubishi.webp',
'Fuji Electric': '/brands/fuji.webp',
};
interface Props {
+3 -5
View File
@@ -81,8 +81,8 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
const urlBrand = searchParams.get('brand') || '';
const urlCategory = searchParams.get('category') || 'all';
const [category, setCategory] = useState<'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'kanalowe' | 'konsolowe' | 'podlogowe' | 'jednostka-scienna'>(
urlCategory as 'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'kanalowe' | 'konsolowe' | 'podlogowe' | 'jednostka-scienna'
const [category, setCategory] = useState<'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'podlogowe' | 'jednostka-scienna'>(
urlCategory as 'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'podlogowe' | 'jednostka-scienna'
);
const [selectedBrands, setSelectedBrands] = useState<string[]>(urlBrand ? [urlBrand] : []);
const [searchQuery, setSearchQuery] = useState(urlSearch);
@@ -99,7 +99,7 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
setSearchQuery(urlSearch);
setSelectedBrands(urlBrand ? [urlBrand] : []);
if (urlCategory !== 'all') {
setCategory(urlCategory as 'scienne' | 'multisplit' | 'kasetonowe' | 'kanalowe' | 'konsolowe' | 'podlogowe' | 'jednostka-scienna');
setCategory(urlCategory as 'scienne' | 'multisplit' | 'kasetonowe' | 'podlogowe' | 'jednostka-scienna');
} else {
setCategory('all');
}
@@ -227,8 +227,6 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
{ val: 'scienne', label: 'Ścienne split' },
{ val: 'multisplit', label: 'Multisplit' },
{ val: 'kasetonowe', label: 'Kasetonowe' },
{ val: 'konsolowe', label: 'Konsolowe' },
{ val: 'kanalowe', label: 'Kanałowe' },
].map(opt => (
<li key={opt.val}>
<button