fix: linting cleanup, TS errors, mobile cookie banner and hero max-width

This commit is contained in:
MichalC
2026-08-01 12:27:14 +02:00
parent 02cb49e180
commit 88cb4c516d
49 changed files with 167 additions and 125 deletions
+1 -1
View File
@@ -53,7 +53,7 @@ export default function DostawaPage() {
<h2 id="instalatorzy">2. Dostawa podczas montażu</h2>
<p>
Jeśli wybierzesz wariant zakupu "Z montażem", urządzenie nie jest wysyłane z wyprzedzeniem za pośrednictwem zewnętrznej firmy kurierskiej. Sprzęt w dniu umówionej instalacji przywozi nasza własna ekipa monterska, dzięki czemu minimalizujemy ryzyko uszkodzenia urządzenia w transporcie i zdejmujemy z Ciebie obowiązek składowania gabarytowych kartonów.
Jeśli wybierzesz wariant zakupu &quot;Z montażem&quot;, urządzenie nie jest wysyłane z wyprzedzeniem za pośrednictwem zewnętrznej firmy kurierskiej. Sprzęt w dniu umówionej instalacji przywozi nasza własna ekipa monterska, dzięki czemu minimalizujemy ryzyko uszkodzenia urządzenia w transporcie i zdejmujemy z Ciebie obowiązek składowania gabarytowych kartonów.
</p>
<h2 id="platnosci">3. Metody płatności</h2>
+1 -1
View File
@@ -47,7 +47,7 @@ export default function PolitykaPrywatnosciPage() {
<h2 id="cookies" className="text-2xl font-bold mt-8 mb-4">4. Pliki Cookies i Analityka (Google Analytics 4 / Tag Manager)</h2>
<p>
Nasz serwis wykorzystuje pliki cookies (tzw. "ciasteczka") – dane informatyczne, w szczególności pliki tekstowe, które przechowywane są w urządzeniu końcowym Użytkownika i przeznaczone są do korzystania z naszej strony internetowej.
Nasz serwis wykorzystuje pliki cookies (tzw. &quot;ciasteczka&quot;) – dane informatyczne, w szczególności pliki tekstowe, które przechowywane są w urządzeniu końcowym Użytkownika i przeznaczone są do korzystania z naszej strony internetowej.
</p>
<h3 className="text-xl font-semibold mt-6 mb-3">Google Analytics 4 (GA4) i Google Tag Manager (GTM)</h3>
+2 -2
View File
@@ -188,7 +188,7 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
{/* Główny obraz */}
<div className="relative w-full aspect-video rounded-2xl overflow-hidden mb-12 shadow-md">
<Image
src={post.image || 'https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=1600&q=80'}
src={post.image || '/images/hero/hero-section-image.webp'}
alt={post.title}
fill
priority
@@ -231,7 +231,7 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) {
<Link key={related.slug} href={`/blog/${related.slug}`} className="group block">
<div className="relative aspect-[16/10] rounded-xl overflow-hidden mb-4">
<Image
src={related.image || 'https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=800&q=80'}
src={related.image || '/images/hero/hero-section-image.webp'}
alt={related.title}
fill
className="object-cover transition-transform duration-500 group-hover:scale-105"
+1 -1
View File
@@ -31,7 +31,7 @@ export default function BlogPage() {
ctaLink="/kontakt"
secondaryCtaText="Nasze usługi"
secondaryCtaLink="/uslugi-domowe"
backgroundImage="https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=1600&q=80"
backgroundImage="/images/hero/hero-section-image.webp"
/>
<section className="py-16 md:py-24 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
+2 -2
View File
@@ -159,11 +159,11 @@
}
body {
@apply bg-background text-foreground;
@apply bg-background text-foreground overflow-x-hidden;
}
html {
@apply font-sans;
@apply font-sans overflow-x-hidden scroll-smooth;
}
h1,
+1 -1
View File
@@ -1,7 +1,7 @@
import type { Metadata } from 'next';
import Link from 'next/link';
import Image from 'next/image';
import { Check, Phone, Wrench, ArrowRight, Home, Thermometer, Wind, Zap } from 'lucide-react';
import { Phone, Wrench, ArrowRight, Home, Thermometer, Wind, Zap } from 'lucide-react';
import { companyDetails } from '@/content/company';
import { buttonClasses, Button } from '@/components/ui/Button';
+1 -1
View File
@@ -1,7 +1,7 @@
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import Link from 'next/link';
import { MapPin, Clock, Phone, ArrowRight, ThermometerSun } from 'lucide-react';
import { Clock, Phone, ArrowRight } from 'lucide-react';
import { getCityBySlug, getAllCitySlugs, dolnySlaskCities } from '@/content/cities';
import { HeroSection } from '@/components/sections/HeroSection';
import { ProcessSteps } from '@/components/sections/ProcessSteps';
@@ -1,7 +1,7 @@
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import Link from 'next/link';
import { MapPin, Clock, Phone, ArrowRight, ThermometerSun } from 'lucide-react';
import { MapPin, Clock, Phone, ArrowRight } from 'lucide-react';
import { getDistrictBySlug, getAllDistrictSlugs, wroclawDistricts } from '@/content/wroclaw-districts';
import { HeroSection } from '@/components/sections/HeroSection';
import { ProcessSteps } from '@/components/sections/ProcessSteps';
+1 -1
View File
@@ -17,7 +17,7 @@ const contactFormSchema = z.object({
consent: z.boolean().refine((val) => val === true, "Zgoda RODO jest wymagana"),
});
export async function submitContactForm(prevState: any, formData: FormData) {
export async function submitContactForm(prevState: unknown, formData: FormData) {
try {
if (process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY && process.env.RECAPTCHA_SECRET_KEY) {
const token = formData.get('recaptchaToken') as string;
+1 -1
View File
@@ -23,7 +23,7 @@ export default function KontaktPage() {
ctaLink={`tel:${companyDetails.phoneRaw}`}
secondaryCtaText="Napisz maila"
secondaryCtaLink={`mailto:${companyDetails.email}`}
backgroundImage="https://images.unsplash.com/photo-1516387938699-a93567ec168e?w=1600&q=80"
backgroundImage="/images/hero/hero-section-image.webp"
/>
<ContactSection />
+1 -1
View File
@@ -27,7 +27,7 @@ export default function ONasPage() {
ctaLink="/kontakt"
secondaryCtaText="Nasze realizacje"
secondaryCtaLink="/realizacje"
backgroundImage="https://images.unsplash.com/photo-1504307651254-35680f356f12?w=1600&q=80"
backgroundImage="/images/about/about-story.webp"
/>
<AboutStory />
+1 -1
View File
@@ -23,7 +23,7 @@ export default function RealizacjePage() {
ctaLink="/uslugi-domowe"
secondaryCtaText="Skontaktuj się"
secondaryCtaLink="/kontakt"
backgroundImage="https://images.unsplash.com/photo-1503387762-592deb58ef4e?w=1600&q=80"
backgroundImage="/images/hero/hero-section-image.webp"
/>
<ProjectsGrid />
+3 -3
View File
@@ -17,7 +17,7 @@ const orderSchema = z.object({
total: z.string(),
});
export async function submitOrderForm(prevState: any, formData: FormData) {
export async function submitOrderForm(prevState: unknown, formData: FormData) {
try {
if (process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY && process.env.RECAPTCHA_SECRET_KEY) {
const token = formData.get('recaptchaToken') as string;
@@ -44,7 +44,7 @@ export async function submitOrderForm(prevState: any, formData: FormData) {
const products = JSON.parse(data.products);
const total = parseFloat(data.total);
const productRows = products.map((p: any) =>
const productRows = products.map((p: { name: string; quantity: number; price: number }) =>
`<tr><td style="padding:8px;border-bottom:1px solid #f1f5f9;">${p.name}</td><td style="padding:8px;border-bottom:1px solid #f1f5f9;text-align:center;">${p.quantity}</td><td style="padding:8px;border-bottom:1px solid #f1f5f9;text-align:right;">${(p.price * p.quantity).toLocaleString('pl-PL')} zł</td></tr>`
).join('');
@@ -85,7 +85,7 @@ export async function submitOrderForm(prevState: any, formData: FormData) {
});
return { success: true, message: 'Dziękujemy! Skontaktujemy się z Tobą w ciągu 24 godzin, aby potwierdzić zamówienie i ustalić termin montażu.' };
} catch (e) {
} catch {
return { success: false, message: 'Wystąpił błąd. Spróbuj ponownie lub zadzwoń do nas bezpośrednio.' };
}
}
+1 -1
View File
@@ -18,7 +18,7 @@ export default function ZamowieniePage() {
useEffect(() => {
if (state.success) clearCart();
}, [state.success]);
}, [state.success, clearCart]);
if (items.length === 0 && !state.success) {
return (
+1 -1
View File
@@ -32,7 +32,7 @@ export default async function MultisplitInquiryPage({ params }: Props) {
const product = getProductBySlug(slug);
if (!product || product.category !== 'multisplit') notFound();
const specIcons: Record<string, any> = {
const specIcons: Record<string, React.ElementType> = {
'Moc chłodnicza': Zap,
'Moc grzewcza': Thermometer,
'Głośność wewnętrzna (dB)': Volume2,
+2 -1
View File
@@ -18,7 +18,8 @@ const multisplitFormSchema = z.object({
productSku: z.string(),
});
export async function submitMultisplitForm(data: any) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export async function submitMultisplitForm(data: Record<string, any>) {
try {
if (process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY && process.env.RECAPTCHA_SECRET_KEY) {
if (!data.recaptchaToken) {