diff --git a/src/app/(frontend)/layout.tsx b/src/app/(frontend)/layout.tsx index 21c01cb..244e264 100644 --- a/src/app/(frontend)/layout.tsx +++ b/src/app/(frontend)/layout.tsx @@ -65,7 +65,6 @@ export default async function RootLayout({ association={footerData.association} copyright={footerData.copyright} creator={footerData.creator} - availability={footerData.availabilityStatus} /> {/* Floating WhatsApp Button */} diff --git a/src/blocks/Hero/Component.tsx b/src/blocks/Hero/Component.tsx index 7ff3320..b5bab0f 100644 --- a/src/blocks/Hero/Component.tsx +++ b/src/blocks/Hero/Component.tsx @@ -109,9 +109,9 @@ export const HeroBlock: React.FC = ({ initial="hidden" animate="visible" variants={containerVariants} - className="w-full bg-background text-foreground pt-32 pb-16 md:pt-44 md:pb-24 overflow-hidden" + className="w-full bg-background text-foreground min-h-[calc(100svh-6rem)] flex items-center py-12 lg:py-0 overflow-hidden" > -
+
{/* Kolumna tekstowa z animacjami wejścia */} diff --git a/src/blocks/RenderBlocks.tsx b/src/blocks/RenderBlocks.tsx index 2bb7a06..2fc4e21 100644 --- a/src/blocks/RenderBlocks.tsx +++ b/src/blocks/RenderBlocks.tsx @@ -8,6 +8,7 @@ import { ServicesListBlock } from './ServicesList/Component' import { ProcessBlock } from './Process/Component' import { AffiliationBlock } from './Affiliation/Component' import { TestimonialsBlock } from './Testimonials/Component' +import { TestimonialsGridBlock } from './TestimonialsGrid/Component' import { FAQTeaserBlock } from './FAQTeaser/Component' import { FinalCTABlock } from './FinalCTA/Component' @@ -30,6 +31,7 @@ const blockComponents = { process: ProcessBlock, affiliation: AffiliationBlock, testimonials: TestimonialsBlock, + testimonialsGrid: TestimonialsGridBlock, faqTeaser: FAQTeaserBlock, finalCta: FinalCTABlock, TextSection: ({ text }: { text: string }) =>

{text}

, diff --git a/src/blocks/TestimonialsGrid/Component.tsx b/src/blocks/TestimonialsGrid/Component.tsx new file mode 100644 index 0000000..d9b405e --- /dev/null +++ b/src/blocks/TestimonialsGrid/Component.tsx @@ -0,0 +1,83 @@ +'use client' +import React from 'react' +import { motion } from 'framer-motion' +import type { Page } from '../../payload-types' + +type Props = Extract[0], { blockType: 'testimonialsGrid' }> + +interface ColumnProps { + items: NonNullable + duration: number + className?: string +} + +const ScrollingColumn: React.FC = ({ items, duration, className = '' }) => { + // Dublujemy x2 dla bezszwowej pętli + const doubledItems = [...items, ...items] + + return ( +
+ + {doubledItems.map((item, index) => ( +
+

+ “{item.quote}” +

+
+
+

+ {item.authorName} +

+ {item.authorRole && ( +

+ {item.authorRole} +

+ )} +
+
+ ))} + +
+ ) +} + +export const TestimonialsGridBlock: React.FC = ({ items }) => { + // WARUNEK KRYTYCZNY: komponent renderuje się TYLKO jeśli items.length >= 6 + if (!items || items.length < 6) return null + + // Podział na 3 kolumny + const col1 = items.filter((_, i) => i % 3 === 0) + const col2 = items.filter((_, i) => i % 3 === 1) + const col3 = items.filter((_, i) => i % 3 === 2) + + return ( +
+
+
+
+ + + +
+
+
+
+ ) +} diff --git a/src/blocks/TestimonialsGrid/config.ts b/src/blocks/TestimonialsGrid/config.ts new file mode 100644 index 0000000..87e2c14 --- /dev/null +++ b/src/blocks/TestimonialsGrid/config.ts @@ -0,0 +1,18 @@ +import type { Block } from 'payload' + +export const TestimonialsGrid: Block = { + slug: 'testimonialsGrid', + fields: [ + { + name: 'items', + type: 'array', + required: true, + minRows: 1, + fields: [ + { name: 'quote', type: 'textarea', required: true }, + { name: 'authorName', type: 'text', required: true }, + { name: 'authorRole', type: 'text' }, + ], + }, + ], +} diff --git a/src/collections/Pages.ts b/src/collections/Pages.ts index 29571f0..38c163f 100644 --- a/src/collections/Pages.ts +++ b/src/collections/Pages.ts @@ -15,6 +15,7 @@ import { ContactInfo } from '../blocks/ContactInfo/config' import { ServicesDetailed } from '../blocks/ServicesDetailed/config' import { Eligibility } from '../blocks/Eligibility/config' import { Stats } from '../blocks/Stats/config' +import { TestimonialsGrid } from '../blocks/TestimonialsGrid/config' export const Pages: CollectionConfig = { slug: 'pages', @@ -50,6 +51,7 @@ export const Pages: CollectionConfig = { Process, Affiliation, Testimonials, + TestimonialsGrid, FAQTeaser, FinalCTA, { diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx index f5e5174..a4d3a64 100644 --- a/src/components/Footer/index.tsx +++ b/src/components/Footer/index.tsx @@ -12,14 +12,12 @@ export function Footer({ association = {}, copyright, creator, - availability, }: { navItems?: any[]; companyInfo?: any; association?: any; copyright?: any; creator?: any; - availability?: any; }) { const pathname = usePathname(); @@ -50,11 +48,6 @@ export function Footer({ const creatorName = creator?.name; const creatorUrl = creator?.url; - const currentAvailability = availability?.[currentLocaleCode] || availability?.pl || availability || {}; - const defaultAvailText = currentLocaleCode === 'de' ? 'Ich nehme derzeit neue Mandanten an' : 'Przyjmuję obecnie nowych klientów'; - const availText = currentAvailability?.text || defaultAvailText; - const isAvailable = currentAvailability?.available !== false; - return (