Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 08c5f07be3 | |||
| 8d8b3b9090 | |||
| a0a312c7b0 | |||
| 36b251456f | |||
| 795546ef27 | |||
| 8bf2336f3c | |||
| f82411b3ac | |||
| 438c75fd54 | |||
| 21b9442a5b | |||
| 36f47b4b99 |
225
src/app/apartment/[id]/page.tsx
Normal file
225
src/app/apartment/[id]/page.tsx
Normal file
@@ -0,0 +1,225 @@
|
||||
"use client";
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple";
|
||||
import HeroBillboardRotatedCarousel from "@/components/sections/hero/HeroBillboardRotatedCarousel";
|
||||
import MediaAbout from "@/components/sections/about/MediaAbout";
|
||||
import FeatureBorderGlow from "@/components/sections/feature/featureBorderGlow/FeatureBorderGlow";
|
||||
import ProductCardFour from "@/components/sections/product/ProductCardFour";
|
||||
import ContactSplitForm from "@/components/sections/contact/ContactSplitForm";
|
||||
import FooterCard from "@/components/sections/footer/FooterCard";
|
||||
import { MapPin, Wifi, Utensils, Waves, Wind, Tv, Instagram, Facebook, Phone, Home, DoorOpen, Sofa, Droplets } from "lucide-react";
|
||||
import { useParams } from "next/navigation";
|
||||
|
||||
// Sample apartment data - in a real app, this would come from a database or API
|
||||
const apartmentDatabase: Record<string, any> = {
|
||||
"apt1": {
|
||||
name: "Largo Sant'Antonio", price: "70 eur/noc", description: "Spacious and fully equipped apartment in the heart of Agrigento", fullDescription: "Our flagship apartment Largo Sant'Antonio offers a perfect blend of comfort and authentic Sicilian charm. Located in the historic center of Agrigento, this apartment is ideal for families and small groups. The fully equipped modern kitchen, comfortable bedrooms, and bright living areas make it the perfect home away from home.", capacity: "5 osób", features: "W pełni wyposażony", gallery: [
|
||||
"https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729829229-jo0kwpyi.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728322270-i8b4polo.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728631816-9afwb5o6.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727637321-4bj5mbbw.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727548071-bca1pdj2.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727586302-s4wcrms6.jpg"],
|
||||
amenities: [
|
||||
{ icon: Wifi, title: "High-Speed WiFi", description: "Stay connected with fast internet throughout the apartment" },
|
||||
{ icon: Utensils, title: "Fully Equipped Kitchen", description: "Modern appliances and cookware for your culinary needs" },
|
||||
{ icon: Waves, title: "Beach Access", description: "Walking distance to beautiful Sicilian beaches" },
|
||||
{ icon: Wind, title: "Air Conditioning", description: "Stay cool during hot Mediterranean summers" },
|
||||
{ icon: Tv, title: "Smart TV", description: "Entertainment system with streaming services" },
|
||||
{ icon: Home, title: "Spacious Living Area", description: "Comfortable common spaces for relaxation" },
|
||||
],
|
||||
},
|
||||
"apt2": {
|
||||
name: "Porto Empedocle", price: "70 eur/noc", description: "Premium apartment with stunning sea views", fullDescription: "Porto Empedocle is our premium offering, featuring breathtaking views of the Mediterranean Sea. This carefully designed apartment combines modern comfort with traditional Sicilian aesthetics. Perfect for couples or small families seeking a romantic getaway with beach proximity.", capacity: "4 osoby", features: "blisko plaży", gallery: [
|
||||
"https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729841141-o33h2wus.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728322270-i8b4polo.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728631816-9afwb5o6.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727637321-4bj5mbbw.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727548071-bca1pdj2.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728337634-ga6soch3.jpg"],
|
||||
amenities: [
|
||||
{ icon: Waves, title: "Sea View Balcony", description: "Private balcony overlooking the Mediterranean" },
|
||||
{ icon: Utensils, title: "Chef's Kitchen", description: "Premium appliances and complete kitchenware" },
|
||||
{ icon: Wifi, title: "High-Speed WiFi", description: "Fast and reliable internet connection" },
|
||||
{ icon: Droplets, title: "Luxury Bathroom", description: "Modern bathroom with premium amenities" },
|
||||
{ icon: Wind, title: "Air Conditioning", description: "Climate control for year-round comfort" },
|
||||
{ icon: Sofa, title: "Premium Furnishings", description: "Comfortable and stylish furniture" },
|
||||
],
|
||||
},
|
||||
"apt3": {
|
||||
name: "Via Garibaldi", price: "50 eur/noc", description: "Charming apartment in the heart of Agrigento", fullDescription: "Via Garibaldi offers a budget-friendly option without compromising on comfort. Located in the bustling center of Agrigento, this cozy apartment is surrounded by historic sites, restaurants, and local culture. Ideal for budget-conscious travelers who want to experience authentic Sicilian living.", capacity: "4 osoby", features: "W centrum Agrigento", gallery: [
|
||||
"https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729717575-eicb2kqb.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728322270-i8b4polo.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728631816-9afwb5o6.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727637321-4bj5mbbw.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772728337634-ga6soch3.jpg", "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772727586302-s4wcrms6.jpg"],
|
||||
amenities: [
|
||||
{ icon: Home, title: "Cozy Living Space", description: "Comfortable and well-designed interior" },
|
||||
{ icon: Utensils, title: "Complete Kitchen", description: "All essentials for home cooking" },
|
||||
{ icon: Wifi, title: "WiFi Internet", description: "Stay connected during your stay" },
|
||||
{ icon: Wind, title: "Air Conditioning", description: "Cool comfort in warm weather" },
|
||||
{ icon: DoorOpen, title: "Central Location", description: "Walking distance to attractions and dining" },
|
||||
{ icon: Tv, title: "Entertainment", description: "TV with local and international channels" },
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
const navItems = [
|
||||
{ name: "Apartamenty", id: "/" },
|
||||
{ name: "O nas", id: "about" },
|
||||
{ name: "Oferta", id: "offer" },
|
||||
{ name: "Atrakcje", id: "attractions" },
|
||||
{ name: "Kontakt", id: "contact" },
|
||||
];
|
||||
|
||||
const socialLinks = [
|
||||
{ icon: Instagram, href: "https://instagram.com", ariaLabel: "Instagram" },
|
||||
{ icon: Facebook, href: "https://facebook.com", ariaLabel: "Facebook" },
|
||||
{ icon: Phone, href: "tel:+48123456789", ariaLabel: "Phone" },
|
||||
];
|
||||
|
||||
export default function ApartmentPage() {
|
||||
const params = useParams();
|
||||
const apartmentId = params.id as string;
|
||||
const apartment = apartmentDatabase[apartmentId];
|
||||
|
||||
if (!apartment) {
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="text-stagger"
|
||||
defaultTextAnimation="reveal-blur"
|
||||
borderRadius="pill"
|
||||
contentWidth="smallMedium"
|
||||
sizing="medium"
|
||||
background="aurora"
|
||||
cardStyle="glass-depth"
|
||||
primaryButtonStyle="primary-glow"
|
||||
secondaryButtonStyle="solid"
|
||||
headingFontWeight="light"
|
||||
>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarStyleApple brandName="Buongiorno Sicily" navItems={navItems} />
|
||||
</div>
|
||||
<div className="flex items-center justify-center min-h-screen">
|
||||
<p className="text-2xl">Apartment not found</p>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
|
||||
const galleryProducts = apartment.gallery.map((src: string, idx: number) => ({
|
||||
id: `gallery-${idx}`,
|
||||
name: `${apartment.name} - Photo ${idx + 1}`,
|
||||
price: apartment.price,
|
||||
variant: apartment.features,
|
||||
imageSrc: src,
|
||||
imageAlt: `${apartment.name} - Photo ${idx + 1}`,
|
||||
}));
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="text-stagger"
|
||||
defaultTextAnimation="reveal-blur"
|
||||
borderRadius="pill"
|
||||
contentWidth="smallMedium"
|
||||
sizing="medium"
|
||||
background="aurora"
|
||||
cardStyle="glass-depth"
|
||||
primaryButtonStyle="primary-glow"
|
||||
secondaryButtonStyle="solid"
|
||||
headingFontWeight="light"
|
||||
>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarStyleApple brandName="Buongiorno Sicily" navItems={navItems} />
|
||||
</div>
|
||||
|
||||
<div id="hero" data-section="hero">
|
||||
<HeroBillboardRotatedCarousel
|
||||
title={apartment.name}
|
||||
description={apartment.fullDescription}
|
||||
tag="Apartment Details"
|
||||
tagIcon={MapPin}
|
||||
tagAnimation="slide-up"
|
||||
buttons={[
|
||||
{ text: "Back to Apartments", href: "/" },
|
||||
{ text: "Book Now", href: "#contact" },
|
||||
]}
|
||||
buttonAnimation="slide-up"
|
||||
carouselItems={apartment.gallery.map((src: string, idx: number) => ({
|
||||
id: `slide-${idx}`,
|
||||
imageSrc: src,
|
||||
imageAlt: `${apartment.name} - Image ${idx + 1}`,
|
||||
}))}
|
||||
autoPlay={true}
|
||||
autoPlayInterval={5000}
|
||||
background={{ variant: "radial-gradient" }}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<MediaAbout
|
||||
title={apartment.name}
|
||||
description={apartment.fullDescription}
|
||||
tag="Details"
|
||||
tagIcon={Home}
|
||||
tagAnimation="slide-up"
|
||||
buttons={[{ text: "View Gallery", href: "#gallery" }]}
|
||||
imageSrc={apartment.gallery[0]}
|
||||
imageAlt={apartment.name}
|
||||
useInvertedBackground={false}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="gallery" data-section="gallery">
|
||||
<ProductCardFour
|
||||
title="Photo Gallery"
|
||||
description="Explore our apartment through these beautiful photos"
|
||||
tag="Gallery"
|
||||
tagIcon={MapPin}
|
||||
tagAnimation="slide-up"
|
||||
buttons={[{ text: "Reserve Now", href: "#contact" }]}
|
||||
textboxLayout="default"
|
||||
animationType="slide-up"
|
||||
useInvertedBackground={true}
|
||||
gridVariant="three-columns-all-equal-width"
|
||||
carouselMode="buttons"
|
||||
products={galleryProducts}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="offer" data-section="offer">
|
||||
<FeatureBorderGlow
|
||||
title="Amenities & Features"
|
||||
description={`Everything you need for a comfortable stay at ${apartment.name}`}
|
||||
tag="What's Included"
|
||||
tagIcon={Home}
|
||||
tagAnimation="slide-up"
|
||||
textboxLayout="default"
|
||||
animationType="slide-up"
|
||||
useInvertedBackground={false}
|
||||
features={apartment.amenities}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<ContactSplitForm
|
||||
title="Make Your Reservation"
|
||||
description={`Ready to book ${apartment.name}? Contact us today to reserve your dates. Our team will help you with availability, pricing, and any special requests you may have.`}
|
||||
inputs={[
|
||||
{
|
||||
name: "name", type: "text", placeholder: "Your name", required: true,
|
||||
},
|
||||
{
|
||||
name: "email", type: "email", placeholder: "Your email", required: true,
|
||||
},
|
||||
]}
|
||||
textarea={{
|
||||
name: "message", placeholder: "Tell us your dates and special requests...", rows: 5,
|
||||
required: true,
|
||||
}}
|
||||
useInvertedBackground={true}
|
||||
imageSrc={apartment.gallery[1] || apartment.gallery[0]}
|
||||
imageAlt="Booking reservation"
|
||||
mediaAnimation="slide-up"
|
||||
mediaPosition="right"
|
||||
buttonText="Send Booking Request"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterCard
|
||||
logoText="Buongiorno Sicily"
|
||||
copyrightText="© 2025 Buongiorno Sicily. All rights reserved."
|
||||
socialLinks={socialLinks}
|
||||
/>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
@@ -37,11 +37,11 @@ const heroCarouselItems = [
|
||||
|
||||
const apartmentProducts = [
|
||||
{
|
||||
id: "apt1", name: "Largo Sant’Antonio", price: "od 70 eur/noc", variant: "5 osób • W pełni wyposażony", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729829229-jo0kwpyi.jpg", imageAlt: "Classic apartment"},
|
||||
id: "apt1", name: "Largo Sant'Antonio", price: "od 70 eur/noc", variant: "5 osób • W pełni wyposażony", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729829229-jo0kwpyi.jpg", imageAlt: "Classic apartment", onProductClick: () => window.location.href = '/apartment/apt1'},
|
||||
{
|
||||
id: "apt2", name: "Porto Empedocle ", price: "od 70 eur/noc", variant: "4 osoby • blisko plaży", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729841141-o33h2wus.jpg", imageAlt: "Premium apartment with sea view"},
|
||||
id: "apt2", name: "Porto Empedocle ", price: "od 70 eur/noc", variant: "4 osoby • blisko plaży", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729841141-o33h2wus.jpg", imageAlt: "Premium apartment with sea view", onProductClick: () => window.location.href = '/apartment/apt2'},
|
||||
{
|
||||
id: "apt3", name: "Via Garibaldi", price: "od 50 eur/noc", variant: "4 osoby • W centrum Agrigento", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729717575-eicb2kqb.jpg", imageAlt: "Deluxe apartment with terrace"},
|
||||
id: "apt3", name: "Via Garibaldi", price: "od 50 eur/noc", variant: "4 osoby • W centrum Agrigento", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AUmUSVZpEZXvuP6mzJyNvtL19A/uploaded-1772729717575-eicb2kqb.jpg", imageAlt: "Deluxe apartment with terrace", onProductClick: () => window.location.href = '/apartment/apt3'},
|
||||
];
|
||||
|
||||
const features = [
|
||||
|
||||
Reference in New Issue
Block a user