diff --git a/src/blocks/Process/Component.tsx b/src/blocks/Process/Component.tsx index cdb022a..8ad6fed 100644 --- a/src/blocks/Process/Component.tsx +++ b/src/blocks/Process/Component.tsx @@ -1,21 +1,20 @@ 'use client' import React from 'react' -import Link from 'next/link' -import type { Page } from '../../payload-types' -import { ArrowRight } from 'lucide-react' +import type { Page, Media } from '../../payload-types' +import Image from 'next/image' +import { ArrowLink } from '../../components/ArrowLink' type Props = Extract[0], { blockType: 'process' }> -export const ProcessBlock: React.FC = ({ eyebrow, subtitle, title, steps, ctaText }) => { +export const ProcessBlock: React.FC = ({ subtitle, title, steps, ctaText, image }) => { + const processMedia = typeof image === 'object' && image !== null ? (image as Media) : null; + const imageUrl = processMedia?.url || 'https://images.unsplash.com/photo-1611162617474-5b21e879e113?auto=format&fit=crop&w=1200&q=80'; + const imageAlt = processMedia?.alt || 'Proces współpracy'; + return (
- {eyebrow && ( -
- // {eyebrow} -
- )}

{title}

@@ -53,24 +52,19 @@ export const ProcessBlock: React.FC = ({ eyebrow, subtitle, title, steps, {ctaText && (
- - {ctaText} -
- -
- + + {ctaText} +
)}
- {/* PLACEHOLDER - do podmiany na realne zdjęcia klienta */} - Osoba pisząca wiadomość na smartfonie, kontakt WhatsApp
diff --git a/src/blocks/Process/config.ts b/src/blocks/Process/config.ts index 82de151..e671336 100644 --- a/src/blocks/Process/config.ts +++ b/src/blocks/Process/config.ts @@ -18,5 +18,6 @@ export const Process: Block = { ], }, { name: 'ctaText', type: 'text', localized: true }, + { name: 'image', type: 'upload', relationTo: 'media', required: true }, ], } diff --git a/src/blocks/ServicesList/Component.tsx b/src/blocks/ServicesList/Component.tsx index 9db2406..9d42df7 100644 --- a/src/blocks/ServicesList/Component.tsx +++ b/src/blocks/ServicesList/Component.tsx @@ -1,21 +1,15 @@ 'use client' import React from 'react' -import Link from 'next/link' import type { Page } from '../../payload-types' -import { ArrowRight } from 'lucide-react' +import { ArrowLink } from '../../components/ArrowLink' type Props = Extract[0], { blockType: 'servicesList' }> -export const ServicesListBlock: React.FC = ({ eyebrow, title, services }) => { +export const ServicesListBlock: React.FC = ({ title, services }) => { return (
- {eyebrow && ( -
- // {eyebrow} -
- )}

{title}

@@ -38,15 +32,9 @@ export const ServicesListBlock: React.FC = ({ eyebrow, title, services })

- + {service.linkText} -
- -
- +
))} diff --git a/src/components/ArrowLink/index.tsx b/src/components/ArrowLink/index.tsx new file mode 100644 index 0000000..5d60164 --- /dev/null +++ b/src/components/ArrowLink/index.tsx @@ -0,0 +1,37 @@ +import React from 'react' +import Link from 'next/link' +import { ArrowRight } from 'lucide-react' + +type ArrowLinkProps = { + href: string + children?: React.ReactNode + size?: 'sm' | 'md' + className?: string +} + +// UWAGA: Komponent sam w sobie ma wbudowaną klasę "group" na tagu Link, +// co zapewnia poprawne działanie efektów hover na strzałce i obramowaniu (group-hover). +// Klasa "group" nie musi być podawana z zewnątrz, ale jeśli chcesz kontrolować ten +// element nadrzędnym hoverem, nadrzędny div nie będzie bezpośrednio triggerował +// group-hovera na strzałce bez modyfikacji - najlepiej polegać na najeździe na sam Link. +export const ArrowLink: React.FC = ({ + href, + children, + size = 'md', + className = '' +}) => { + const circleSize = size === 'sm' ? 'w-10 h-10' : 'w-12 h-12'; + const iconSize = size === 'sm' ? 'w-4 h-4' : 'w-5 h-5'; + + return ( + + {children} +
+ +
+ + ) +} diff --git a/src/payload-types.ts b/src/payload-types.ts index 5b69ce3..859f5f1 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -332,6 +332,7 @@ export interface Page { }[] | null; ctaText?: string | null; + image: number | Media; id?: string | null; blockName?: string | null; blockType: 'process'; @@ -702,6 +703,7 @@ export interface PagesSelect { id?: T; }; ctaText?: T; + image?: T; id?: T; blockName?: T; };