16 Commits

Author SHA1 Message Date
582164f568 Update src/app/shop/page.tsx 2026-02-17 14:52:31 +00:00
52c2c78555 Update src/app/shop/[id]/page.tsx 2026-02-17 14:52:31 +00:00
0757b71881 Update src/app/page.tsx 2026-02-17 14:52:30 +00:00
ea8d0a08e6 Update src/app/blog/page.tsx 2026-02-17 14:52:29 +00:00
27ee924a64 Merge version_3 into main
Merge version_3 into main
2026-02-17 14:49:07 +00:00
36a7f4ab01 Update src/app/shop/page.tsx 2026-02-17 14:49:02 +00:00
181289c180 Update src/app/shop/[id]/page.tsx 2026-02-17 14:49:02 +00:00
4f176e37e4 Update src/app/page.tsx 2026-02-17 14:49:01 +00:00
b2923a8947 Update src/app/blog/page.tsx 2026-02-17 14:49:00 +00:00
36f1ed7fef Merge version_3 into main
Merge version_3 into main
2026-02-17 14:46:21 +00:00
1c4c35fe85 Update src/app/styles/variables.css 2026-02-17 14:46:17 +00:00
19803f83b2 Update src/app/shop/page.tsx 2026-02-17 14:46:16 +00:00
5bdd4b4c1c Update src/app/shop/[id]/page.tsx 2026-02-17 14:46:16 +00:00
bf69496106 Update src/app/page.tsx 2026-02-17 14:46:15 +00:00
0d7c3c6920 Update src/app/blog/page.tsx 2026-02-17 14:46:14 +00:00
7c7870cee2 Merge version_2 into main
Merge version_2 into main
2026-02-17 14:32:25 +00:00
5 changed files with 109 additions and 50 deletions

View File

@@ -6,6 +6,7 @@ import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatin
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis'; import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import BlogCardTwo from '@/components/sections/blog/BlogCardTwo'; import BlogCardTwo from '@/components/sections/blog/BlogCardTwo';
import { useBlogPosts } from "@/hooks/useBlogPosts"; import { useBlogPosts } from "@/hooks/useBlogPosts";
import Link from 'next/link';
export default function BlogPage() { export default function BlogPage() {
const { posts, isLoading } = useBlogPosts(); const { posts, isLoading } = useBlogPosts();
@@ -33,6 +34,7 @@ export default function BlogPage() {
{ name: "Меню", id: "/#menu" }, { name: "Меню", id: "/#menu" },
{ name: "Банкети", id: "/#banquets" }, { name: "Банкети", id: "/#banquets" },
{ name: "Доставка", id: "/#delivery" }, { name: "Доставка", id: "/#delivery" },
{ name: "Відгуки", id: "/#testimonials" },
{ name: "Контакти", id: "/#contacts" } { name: "Контакти", id: "/#contacts" }
]} ]}
button={{ text: "Забронювати Столик", href: "/#contacts" }} button={{ text: "Забронювати Столик", href: "/#contacts" }}
@@ -50,7 +52,7 @@ export default function BlogPage() {
) : ( ) : (
<div id="blog" data-section="blog"> <div id="blog" data-section="blog">
<BlogCardTwo <BlogCardTwo
blogs={posts} blogs={posts.map(post => ({...post, onBlogClick: () => window.location.href = `/blog/${post.id}`}))}
title="Останні Статті" title="Останні Статті"
description="Огляди та новини від нашої команди" description="Огляди та новини від нашої команди"
textboxLayout="default" textboxLayout="default"
@@ -72,6 +74,9 @@ export default function BlogPage() {
]}, ]},
{ items: [ { items: [
{ label: "Доставка", href: "/#delivery" }, { label: "Доставка", href: "/#delivery" },
{ label: "Відгуки", href: "/#testimonials" },
{ label: "Блог", href: "/blog" },
{ label: "Магазин", href: "/shop" },
{ label: "Контакти", href: "/#contacts" }, { label: "Контакти", href: "/#contacts" },
{ label: "Забронювати Столик", href: "/#contacts" } { label: "Забронювати Столик", href: "/#contacts" }
]} ]}

View File

@@ -6,9 +6,11 @@ import HeroLogoBillboard from '@/components/sections/hero/HeroLogoBillboard';
import InlineImageSplitTextAbout from '@/components/sections/about/InlineImageSplitTextAbout'; import InlineImageSplitTextAbout from '@/components/sections/about/InlineImageSplitTextAbout';
import FeatureCardSix from '@/components/sections/feature/FeatureCardSix'; import FeatureCardSix from '@/components/sections/feature/FeatureCardSix';
import ProductCardTwo from '@/components/sections/product/ProductCardTwo'; import ProductCardTwo from '@/components/sections/product/ProductCardTwo';
import TestimonialCardTwelve from '@/components/sections/testimonial/TestimonialCardTwelve';
import ContactCTA from '@/components/sections/contact/ContactCTA'; import ContactCTA from '@/components/sections/contact/ContactCTA';
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis'; import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import { Mail } from 'lucide-react'; import { Mail } from 'lucide-react';
import Link from 'next/link';
export default function LandingPage() { export default function LandingPage() {
return ( return (
@@ -28,13 +30,15 @@ export default function LandingPage() {
<NavbarLayoutFloatingOverlay <NavbarLayoutFloatingOverlay
brandName="Бандура: Серце і Зала" brandName="Бандура: Серце і Зала"
navItems={[ navItems={[
{ name: "Філософія", id: "#philosophy" }, { name: "Головна", id: "/" },
{ name: "Меню", id: "#menu" }, { name: "Філософія", id: "/#philosophy" },
{ name: "Банкети", id: "#banquets" }, { name: "Меню", id: "/#menu" },
{ name: "Доставка", id: "#delivery" }, { name: "Банкети", id: "/#banquets" },
{ name: "Контакти", id: "#contacts" } { name: "Доставка", id: "/#delivery" },
{ name: "Відгуки", id: "/#testimonials" },
{ name: "Контакти", id: "/#contacts" }
]} ]}
button={{ text: "Забронювати Столик", href: "#contacts" }} button={{ text: "Забронювати Столик", href: "/#contacts" }}
className="py-4 px-6 md:px-8" className="py-4 px-6 md:px-8"
buttonClassName="bg-primary-cta text-primary-cta-foreground hover:bg-primary-cta/90 transition-colors duration-300" buttonClassName="bg-primary-cta text-primary-cta-foreground hover:bg-primary-cta/90 transition-colors duration-300"
buttonTextClassName="font-semibold text-lg" buttonTextClassName="font-semibold text-lg"
@@ -47,8 +51,8 @@ export default function LandingPage() {
logoText="Бандура: Серце і Зала" logoText="Бандура: Серце і Зала"
description="Де українська душа зустрічається з кулінарним мистецтвом відчуйте справжні банкети та смаки." description="Де українська душа зустрічається з кулінарним мистецтвом відчуйте справжні банкети та смаки."
buttons={[ buttons={[
{ text: "Забронювати Столик", href: "#contacts" }, { text: "Забронювати Столик", href: "/#contacts" },
{ text: "Переглянути Меню", href: "#menu" } { text: "Переглянути Меню", href: "/#menu" }
]} ]}
background={{ variant: "plain" }} background={{ variant: "plain" }}
imageSrc="https://img.b2bpic.net/free-photo/cafe-with-burning-candles-tables_140725-7784.jpg" imageSrc="https://img.b2bpic.net/free-photo/cafe-with-burning-candles-tables_140725-7784.jpg"
@@ -81,12 +85,12 @@ export default function LandingPage() {
<div id="menu" data-section="menu"> <div id="menu" data-section="menu">
<FeatureCardSix <FeatureCardSix
title="Наше Меню: Кулінарна Подорож" title="Наше Меню: Кулінарна Подорож"
description="Насолоджуйтеся смаками України та світу, приготованими з пристрастю та поданими з теплотою. Дослідіть наші різноманітні пропозиції, від ситних традиційних страв до вишуканих барних добірок. Не забудьте про нашу затишну лаунж-зону та терасу, де доступні кальяни." description="Насолоджуйтеся смаками України та світу, приготованими з пристрастю та поданими з теплотою. Дослідьте наші різноманітні пропозиції, від ситних традиційних страв до вишуканих барних добірок. Не забудьте про нашу затишну лаунж-зону та терасу, де доступні кальяни."
textboxLayout="default" textboxLayout="default"
useInvertedBackground={true} useInvertedBackground={true}
features={[ features={[
{ id: 1, title: "Кухонні Делікатеси", description: "Відчуйте справжню українську кухню з нашими стравами ручної роботи. Від наваристого борщу до смачних вареників, кожна страва — це свято традицій та смаку. Наше меню також містить сезонні страви та сучасні інтерпретації.", imageSrc: "https://img.b2bpic.net/free-photo/dumplings-served-with-sour-cream-eggplant-rolls-pickles_141793-599.jpg", imageAlt: "Традиційний український стіл з їжею" }, { id: 1, title: "Кухонні Делікатеси", description: "Відчуйте справжню українську кухню з нашими стравами ручної роботи. Від наваристого борщу до смачних вареників, кожна страва — це свято традицій та смаку. Наше меню також містить сезонні страви та сучасні інтерпретації.", imageSrc: "https://img.b2bpic.net/free-photo/dumplings-served-with-sour-cream-eggplant-rolls-pickles_141793-599.jpg", imageAlt: "Традиційний український стіл з їжею" },
{ id: 2, title: "Бар та Коктейлі", description: "Наш бар пропонує вишуканий вибір напоїв, від класичних коктейлів з етно-нотками до освіжаючих безалкогольних варіантів. Доповніть свій обід або насолодіться напоєм у нашій затишній лаунж-зоні або на сезонній терасі.", imageSrc: "https://img.b2bpic.net/free-photo/restaurant-with-leather-sofa-paintings-wall_140725-9715.jpg", imageAlt: "Витончено приготований коктейль у рустикальному барі" }, { id: 2, title: "Бар та Коктейлі", description: "Наш бар пропонує вишуканий вибір напоїв, від класичних коктейлів з етно-нотками до освіжаючих безалкогольних варіантів. Доповніть свій обід або насолоджуйтеся напоєм у нашій затишній лаунж-зоні або на сезонній терасі.", imageSrc: "https://img.b2bpic.net/free-photo/restaurant-with-leather-sofa-paintings-wall_140725-9715.jpg", imageAlt: "Витончено приготований коктейль у рустикальному барі" },
{ id: 3, title: "Вишукана Винна Карта", description: "Відкрийте для себе нашу велику винну карту, ретельно підібрану для ідеального поєднання з нашим меню. Представляючи місцеві українські вина та міжнародні фаворити, у нас є ідеальна пляшка для кожного смаку та випадку.", imageSrc: "https://img.b2bpic.net/free-photo/glasses-flowers-arrangement_23-2149617131.jpg", imageAlt: "Винні пляшки в етно-стилізованому льоху" }, { id: 3, title: "Вишукана Винна Карта", description: "Відкрийте для себе нашу велику винну карту, ретельно підібрану для ідеального поєднання з нашим меню. Представляючи місцеві українські вина та міжнародні фаворити, у нас є ідеальна пляшка для кожного смаку та випадку.", imageSrc: "https://img.b2bpic.net/free-photo/glasses-flowers-arrangement_23-2149617131.jpg", imageAlt: "Винні пляшки в етно-стилізованому льоху" },
{ id: 4, title: "Навинос та Доставка", description: "Насолоджуйтесь смаком Бандура: Серце і Зала в затишку вашого дому. Наше меню навинос пропонує вибір популярних страв, свіжо приготованих для вашої зручності. Ідеально для сімейних зустрічей або затишного вечора.", imageSrc: "https://img.b2bpic.net/free-photo/smoked-vegetable-slices-aubergine-tomato-bell-pepper-onion_140725-5933.jpg", imageAlt: "Елегантно упакована їжа навинос" } { id: 4, title: "Навинос та Доставка", description: "Насолоджуйтесь смаком Бандура: Серце і Зала в затишку вашого дому. Наше меню навинос пропонує вибір популярних страв, свіжо приготованих для вашої зручності. Ідеально для сімейних зустрічей або затишного вечора.", imageSrc: "https://img.b2bpic.net/free-photo/smoked-vegetable-slices-aubergine-tomato-bell-pepper-onion_140725-5933.jpg", imageAlt: "Елегантно упакована їжа навинос" }
]} ]}
@@ -117,7 +121,7 @@ export default function LandingPage() {
{ id: "cottage-2", brand: "Котеджі", name: "Банкетний Котедж 2", price: "Місткість: 10-12 гостей", rating: 5, reviewCount: "Затишні Зустрічі", imageSrc: "https://img.b2bpic.net/free-photo/close-view-baked-bread-embroidery-towel-placed-wooden-table-near-glass-box-which-prepared-wedding-ceremony-outdoor_8353-12389.jpg", imageAlt: "Приватний банкетний котедж" }, { id: "cottage-2", brand: "Котеджі", name: "Банкетний Котедж 2", price: "Місткість: 10-12 гостей", rating: 5, reviewCount: "Затишні Зустрічі", imageSrc: "https://img.b2bpic.net/free-photo/close-view-baked-bread-embroidery-towel-placed-wooden-table-near-glass-box-which-prepared-wedding-ceremony-outdoor_8353-12389.jpg", imageAlt: "Приватний банкетний котедж" },
{ id: "cottage-3", brand: "Котеджі", name: "Банкетний Котедж 3", price: "Місткість: 10-12 гостей", rating: 5, reviewCount: "Затишні Зустрічі", imageSrc: "https://img.b2bpic.net/free-photo/white-vases-with-greenery-stand-wooden-boxes_1304-5606.jpg", imageAlt: "Приватний банкетний котедж" }, { id: "cottage-3", brand: "Котеджі", name: "Банкетний Котедж 3", price: "Місткість: 10-12 гостей", rating: 5, reviewCount: "Затишні Зустрічі", imageSrc: "https://img.b2bpic.net/free-photo/white-vases-with-greenery-stand-wooden-boxes_1304-5606.jpg", imageAlt: "Приватний банкетний котедж" },
{ id: "cottage-4", brand: "Котеджі", name: "Банкетний Котедж 4", price: "Місткість: 10-12 гостей", rating: 5, reviewCount: "Затишні Зустрічі", imageSrc: "https://img.b2bpic.net/free-photo/home-celebration-friends-family-festive-table-with-pear-cake-top-view-celebration-concept_169016-4836.jpg", imageAlt: "Приватний банкетний котедж" } { id: "cottage-4", brand: "Котеджі", name: "Банкетний Котедж 4", price: "Місткість: 10-12 гостей", rating: 5, reviewCount: "Затишні Зустрічі", imageSrc: "https://img.b2bpic.net/free-photo/home-celebration-friends-family-festive-table-with-pear-cake-top-view-celebration-concept_169016-4836.jpg", imageAlt: "Приватний банкетний котедж" }
]} ]
/> />
</div> </div>
@@ -144,6 +148,22 @@ export default function LandingPage() {
/> />
</div> </div>
<div id="testimonials" data-section="testimonials">
<TestimonialCardTwelve
testimonials={[
{ id: '1', name: 'Олена Коваль', imageSrc: 'https://images.unsplash.com/photo-1573496359142-b8d87734032c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NDcxMzR8MHwxfHNlYXJjaHwxfHxwb3J0cmFpdCUyMGZhY2V8ZW58MHx8fHwxNzEyODIzMzQ5fDA&ixlib=rb-4.0.3&q=80&w=1080', imageAlt: 'Олена Коваль' },
{ id: '2', name: 'Максим Петренко', imageSrc: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NDcxMzR8MHwxfHxtYWxlJTIwcG9ydHJhaXR8ZW58MHx8fHwxNzEyODIzNDgyfDA&ixlib=rb-4.0.3&q=80&w=1080', imageAlt: 'Максим Петренко' },
{ id: '3', name: 'Софія Мельник', imageSrc: 'https://images.unsplash.com/photo-1494790108377-be9c29b29329?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NDcxMzR8MHwxfHxwZXJzb24lMjBjbG9zZXVwfGVufHwwfHx8fDE3MTI4MjM0MzJ8MA&ixlib=rb-4.0.3&q=80&w=1080', imageAlt: 'Софія Мельник' },
{ id: '4', name: 'Андрій Сидоренко', imageSrc: 'https://images.unsplash.com/photo-1544005313-94ddf0286df2?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w0NDcxMzR8MHwxfHxwZXJzb24lMjBoZWFkc2hvdHxlbnwwfHx8fDE3MTI4MjMzOTJ8MA&ixlib=rb-4.0.3&q=80&w=1080', imageAlt: 'Андрій Сидоренко' }
]}
cardTitle="Подивіться, що кажуть наші гості"
cardTag="Відгуки"
cardAnimation="slide-up"
useInvertedBackground={false}
className="py-20 md:py-32"
/>
</div>
<div id="contacts" data-section="contacts"> <div id="contacts" data-section="contacts">
<ContactCTA <ContactCTA
tag="Зв'яжіться з Нами" tag="Зв'яжіться з Нами"
@@ -170,14 +190,17 @@ export default function LandingPage() {
logoText="Бандура: Серце і Зала" logoText="Бандура: Серце і Зала"
columns={[ columns={[
{ items: [ { items: [
{ label: "Філософія", href: "#philosophy" }, { label: "Філософія", href: "/#philosophy" },
{ label: "Меню", href: "#menu" }, { label: "Меню", href: "/#menu" },
{ label: "Банкети", href: "#banquets" } { label: "Банкети", href: "/#banquets" }
]}, ]},
{ items: [ { items: [
{ label: "Доставка", href: "#delivery" }, { label: "Доставка", href: "/#delivery" },
{ label: "Контакти", href: "#contacts" }, { label: "Відгуки", href: "/#testimonials" },
{ label: "Забронювати Столик", href: "#contacts" } { label: "Блог", href: "/blog" },
{ label: "Магазин", href: "/shop" },
{ label: "Контакти", href: "/#contacts" },
{ label: "Забронювати Столик", href: "/#contacts" }
]} ]}
]} ]}
ariaLabel="Нижній колонтитул сайту" ariaLabel="Нижній колонтитул сайту"

View File

@@ -11,6 +11,7 @@ import ProductCart from "@/components/ecommerce/cart/ProductCart";
import { useProductDetail } from "@/hooks/useProductDetail"; import { useProductDetail } from "@/hooks/useProductDetail";
import { useCart } from "@/hooks/useCart"; import { useCart } from "@/hooks/useCart";
import { useCheckout } from "@/hooks/useCheckout"; import { useCheckout } from "@/hooks/useCheckout";
import Link from 'next/link';
interface ProductPageProps { interface ProductPageProps {
params: Promise<{ id: string }>; params: Promise<{ id: string }>;
@@ -67,17 +68,31 @@ export default function ProductPage({ params }: ProductPageProps) {
}, [cartItems, checkout, getCheckoutItems]); }, [cartItems, checkout, getCheckoutItems]);
const navbarProps = { const navbarProps = {
brandName: "Бандура: Серце і Зала", navItems: [{ name: "Головна", id: "/" }], brandName: "Бандура: Серце і Зала",
navItems: [
{ name: "Головна", id: "/" },
{ name: "Філософія", id: "/#philosophy" },
{ name: "Меню", id: "/#menu" },
{ name: "Банкети", id: "/#banquets" },
{ name: "Доставка", id: "/#delivery" },
{ name: "Відгуки", id: "/#testimonials" },
{ name: "Контакти", id: "/#contacts" }
],
button: { text: "Кошик", onClick: () => setCartOpen(true) }, button: { text: "Кошик", onClick: () => setCartOpen(true) },
className: "py-4 px-6 md:px-8", buttonClassName: "bg-primary-cta text-primary-cta-foreground hover:bg-primary-cta/90 transition-colors duration-300", buttonTextClassName: "font-semibold text-lg", logoOnClick: () => console.log('Logo clicked') className: "py-4 px-6 md:px-8",
buttonClassName: "bg-primary-cta text-primary-cta-foreground hover:bg-primary-cta/90 transition-colors duration-300",
buttonTextClassName: "font-semibold text-lg",
logoOnClick: () => console.log('Logo clicked')
}; };
const footerProps = { const footerProps = {
logoText: "Бандура: Серце і Зала", columns: [ logoText: "Бандура: Серце і Зала",
columns: [
{ items: [{ label: "Філософія", href: "/#philosophy" }, { label: "Меню", href: "/#menu" }, { label: "Банкети", href: "/#banquets" }] }, { items: [{ label: "Філософія", href: "/#philosophy" }, { label: "Меню", href: "/#menu" }, { label: "Банкети", href: "/#banquets" }] },
{ items: [{ label: "Доставка", href: "/#delivery" }, { label: "Контакти", href: "/#contacts" }, { label: "Забронювати Столик", href: "/#contacts" }] } { items: [{ label: "Доставка", href: "/#delivery" }, { label: "Відгуки", href: "/#testimonials" }, { label: "Блог", href: "/blog" }, { label: "Магазин", href: "/shop" }, { label: "Контакти", href: "/#contacts" }, { label: "Забронювати Столик", href: "/#contacts" }] }
], ],
ariaLabel: "Нижній колонтитул сайту", containerClassName: "py-16 md:py-24" ariaLabel: "Нижній колонтитул сайту",
containerClassName: "py-16 md:py-24"
}; };
if (isLoading) { if (isLoading) {
@@ -95,7 +110,7 @@ export default function ProductPage({ params }: ProductPageProps) {
headingFontWeight="bold" headingFontWeight="bold"
> >
<ReactLenis root> <ReactLenis root>
<div id="navbar" data-section="navbar"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay {...navbarProps} /> <NavbarLayoutFloatingOverlay {...navbarProps} />
</div> </div>
<div id="loading-indicator" data-section="loading-indicator"> <div id="loading-indicator" data-section="loading-indicator">
@@ -126,7 +141,7 @@ export default function ProductPage({ params }: ProductPageProps) {
headingFontWeight="bold" headingFontWeight="bold"
> >
<ReactLenis root> <ReactLenis root>
<div id="navbar" data-section="navbar"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay {...navbarProps} /> <NavbarLayoutFloatingOverlay {...navbarProps} />
</div> </div>
<div id="not-found" data-section="not-found"> <div id="not-found" data-section="not-found">
@@ -164,7 +179,7 @@ export default function ProductPage({ params }: ProductPageProps) {
headingFontWeight="bold" headingFontWeight="bold"
> >
<ReactLenis root> <ReactLenis root>
<div id="navbar" data-section="navbar"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay {...navbarProps} /> <NavbarLayoutFloatingOverlay {...navbarProps} />
</div> </div>
<div id="product-detail-card" data-section="product-detail-card"> <div id="product-detail-card" data-section="product-detail-card">
@@ -195,10 +210,11 @@ export default function ProductPage({ params }: ProductPageProps) {
items={cartItems} items={cartItems}
onQuantityChange={updateQuantity} onQuantityChange={updateQuantity}
onRemove={removeItem} onRemove={removeItem}
total={`$${cartTotal}`} total={`${cartTotal}`}
buttons={[ buttons={[
{ {
text: isCheckoutLoading ? "Обробка..." : "Оформити Замовлення", onClick: handleCheckout, text: isCheckoutLoading ? "Обробка..." : "Оформити Замовлення",
onClick: handleCheckout,
}, },
]} ]}
/> />

View File

@@ -6,6 +6,7 @@ import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatin
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis'; import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
import ProductCatalog from "@/components/ecommerce/productCatalog/ProductCatalog"; import ProductCatalog from "@/components/ecommerce/productCatalog/ProductCatalog";
import { useProductCatalog } from "@/hooks/useProductCatalog"; import { useProductCatalog } from "@/hooks/useProductCatalog";
import Link from 'next/link';
export default function ShopPage() { export default function ShopPage() {
const { const {
@@ -17,17 +18,31 @@ export default function ShopPage() {
} = useProductCatalog({ basePath: "/shop" }); } = useProductCatalog({ basePath: "/shop" });
const navbarProps = { const navbarProps = {
brandName: "Бандура: Серце і Зала", navItems: [{ name: "Головна", id: "/" }], brandName: "Бандура: Серце і Зала",
navItems: [
{ name: "Головна", id: "/" },
{ name: "Філософія", id: "/#philosophy" },
{ name: "Меню", id: "/#menu" },
{ name: "Банкети", id: "/#banquets" },
{ name: "Доставка", id: "/#delivery" },
{ name: "Відгуки", id: "/#testimonials" },
{ name: "Контакти", id: "/#contacts" }
],
button: { text: "Кошик", onClick: () => console.log('Cart button clicked on catalog page') }, button: { text: "Кошик", onClick: () => console.log('Cart button clicked on catalog page') },
className: "py-4 px-6 md:px-8", buttonClassName: "bg-primary-cta text-primary-cta-foreground hover:bg-primary-cta/90 transition-colors duration-300", buttonTextClassName: "font-semibold text-lg", logoOnClick: () => console.log('Logo clicked') className: "py-4 px-6 md:px-8",
buttonClassName: "bg-primary-cta text-primary-cta-foreground hover:bg-primary-cta/90 transition-colors duration-300",
buttonTextClassName: "font-semibold text-lg",
logoOnClick: () => console.log('Logo clicked')
}; };
const footerProps = { const footerProps = {
logoText: "Бандура: Серце і Зала", columns: [ logoText: "Бандура: Серце і Зала",
columns: [
{ items: [{ label: "Філософія", href: "/#philosophy" }, { label: "Меню", href: "/#menu" }, { label: "Банкети", href: "/#banquets" }] }, { items: [{ label: "Філософія", href: "/#philosophy" }, { label: "Меню", href: "/#menu" }, { label: "Банкети", href: "/#banquets" }] },
{ items: [{ label: "Доставка", href: "/#delivery" }, { label: "Контакти", href: "/#contacts" }, { label: "Забронювати Столик", href: "/#contacts" }] } { items: [{ label: "Доставка", href: "/#delivery" }, { label: "Відгуки", href: "/#testimonials" }, { label: "Блог", href: "/blog" }, { label: "Магазин", href: "/shop" }, { label: "Контакти", href: "/#contacts" }, { label: "Забронювати Столик", href: "/#contacts" }] }
], ],
ariaLabel: "Нижній колонтитул сайту", containerClassName: "py-16 md:py-24" ariaLabel: "Нижній колонтитул сайту",
containerClassName: "py-16 md:py-24"
}; };
if (isLoading) { if (isLoading) {
@@ -45,7 +60,7 @@ export default function ShopPage() {
headingFontWeight="bold" headingFontWeight="bold"
> >
<ReactLenis root> <ReactLenis root>
<div id="navbar" data-section="navbar"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay {...navbarProps} /> <NavbarLayoutFloatingOverlay {...navbarProps} />
</div> </div>
<div id="loading-indicator" data-section="loading-indicator"> <div id="loading-indicator" data-section="loading-indicator">
@@ -75,13 +90,13 @@ export default function ShopPage() {
headingFontWeight="bold" headingFontWeight="bold"
> >
<ReactLenis root> <ReactLenis root>
<div id="navbar" data-section="navbar"> <div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay {...navbarProps} /> <NavbarLayoutFloatingOverlay {...navbarProps} />
</div> </div>
<div id="product-catalog" data-section="product-catalog"> <div id="product-catalog" data-section="product-catalog">
<ProductCatalog <ProductCatalog
layout="page" layout="page"
products={products} products={products.map(p => ({...p, onProductClick: () => window.location.href = `/shop/${p.id}`}))}
searchValue={search} searchValue={search}
onSearchChange={setSearch} onSearchChange={setSearch}
searchPlaceholder="Пошук товарів..." searchPlaceholder="Пошук товарів..."

View File

@@ -2,21 +2,21 @@
/* Base units */ /* Base units */
/* --vw is set by ThemeProvider */ /* --vw is set by ThemeProvider */
/* --background: #080200;; /* --background: #050012;;
--card: #1a0d0b;; --card: #040121;;
--foreground: #ffe6d5;; --foreground: #f0e6ff;;
--primary-cta: #ffaa70;; --primary-cta: #c89bff;;
--secondary-cta: #170b07;; --secondary-cta: #1d123b;;
--accent: #7b5e4a;; --accent: #684f7b;;
--background-accent: #b8541e;; */ --background-accent: #65417c;; */
--background: #080200;; --background: #050012;;
--card: #1a0d0b;; --card: #040121;;
--foreground: #ffe6d5;; --foreground: #f0e6ff;;
--primary-cta: #ffaa70;; --primary-cta: #c89bff;;
--secondary-cta: #170b07;; --secondary-cta: #1d123b;;
--accent: #7b5e4a;; --accent: #684f7b;;
--background-accent: #b8541e;; --background-accent: #65417c;;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);