Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 36a7f4ab01 | |||
| 181289c180 | |||
| 4f176e37e4 | |||
| b2923a8947 | |||
| 1c4c35fe85 | |||
| 19803f83b2 | |||
| 5bdd4b4c1c | |||
| bf69496106 | |||
| 0d7c3c6920 | |||
| 7c7870cee2 |
@@ -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();
|
||||||
@@ -50,7 +51,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 +73,8 @@ export default function BlogPage() {
|
|||||||
]},
|
]},
|
||||||
{ items: [
|
{ items: [
|
||||||
{ label: "Доставка", href: "/#delivery" },
|
{ label: "Доставка", href: "/#delivery" },
|
||||||
|
{ label: "Блог", href: "/blog" },
|
||||||
|
{ label: "Магазин", href: "/shop" },
|
||||||
{ label: "Контакти", href: "/#contacts" },
|
{ label: "Контакти", href: "/#contacts" },
|
||||||
{ label: "Забронювати Столик", href: "/#contacts" }
|
{ label: "Забронювати Столик", href: "/#contacts" }
|
||||||
]}
|
]}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import ProductCardTwo from '@/components/sections/product/ProductCardTwo';
|
|||||||
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 +29,14 @@ 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: "/#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 +49,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"
|
||||||
@@ -170,14 +172,16 @@ 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: "/blog" },
|
||||||
{ label: "Забронювати Столик", href: "#contacts" }
|
{ label: "Магазин", href: "/shop" },
|
||||||
|
{ label: "Контакти", href: "/#contacts" },
|
||||||
|
{ label: "Забронювати Столик", href: "/#contacts" }
|
||||||
]}
|
]}
|
||||||
]}
|
]}
|
||||||
ariaLabel="Нижній колонтитул сайту"
|
ariaLabel="Нижній колонтитул сайту"
|
||||||
|
|||||||
@@ -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,30 @@ 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: "/#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: "/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 +109,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 +140,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 +178,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 +209,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,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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,30 @@ 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: "/#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: "/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 +59,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 +89,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="Пошук товарів..."
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user