"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Mail } from "lucide-react"; import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import z from "zod"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { Button } from "@/components/ui/button"; import { Field, FieldError } from "@/components/ui/field"; import { InputGroup, InputGroupAddon, InputGroupInput, } from "@/components/ui/input-group"; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useMediaQuery } from "@/hooks/useMediaQuery"; import { cn } from "@/lib/utils"; type FooterLink = { title?: string; text: string; href?: string; }; type SocialIcon = { title: string; light: string; dark: string; }; type SocialLink = { link: string; icon: SocialIcon; }; type FooterLinksSection = { title: string; id: string; links?: FooterLink[]; items?: FooterLink[]; socialMediaLinks?: SocialLink[]; }; type ContactForm = { title?: string; text?: string; }; type HomeLink = { logo: { light: string; dark: string; }; link: string; }; type FooterData = { sections: FooterLinksSection[]; contactForm: ContactForm; submenu?: FooterLink[]; paymentMethods?: string[]; copyrightCaption?: string; homeLink: HomeLink; image: string; }; type ContactFormProps = ContactForm; interface FooterLinksProps { links?: FooterLink[]; } interface FooterContactInfoProps { items?: FooterLink[]; socialMediaLinks?: SocialLink[]; } interface SocialMediaSectionProps { links?: SocialLink[]; } interface EcommerceFooter18Props extends FooterData { className?: string; } const SOCIAL_ICONS = { facebook: { title: "Facebook", light: "/block-media/shadcnblocks/block/logos/facebook-icon.svg", dark: "/block-media/shadcnblocks/block/logos/facebook-icon.svg", }, x: { title: "X", light: "/block-media/shadcnblocks/block/logos/x.svg", dark: "/block-media/shadcnblocks/block/logos/x.svg", }, instagram: { title: "Instagram", light: "/block-media/shadcnblocks/block/logos/instagram-icon.svg", dark: "/block-media/shadcnblocks/block/logos/instagram-icon.svg", }, } as const; const FOOTER_DATA: FooterData = { homeLink: { logo: { light: "/block-media/shadcnblocks/block/logos/ShadcnBlockscom-wordmark.svg", dark: "/block-media/shadcnblocks/block/logos/ShadcnBlockscom-wordmark-white.svg", }, link: "#", }, sections: [ { title: "تماس با ما", id: "contact_us", items: [ { title: "پشتیبانی مشتریان", text: "شنبه تا پنج‌شنبه، ۹ صبح تا ۷ شب", }, { title: "با ما تماس بگیرید", text: "+1 855-987-4420 (رایگان)", href: "tel:+18559874420", }, { title: "به ما ایمیل بزنید", text: "support@lumiskin.co", href: "mailto:support@lumiskin.co", }, { title: "آدرس", text: "خیابان گلستان، پلاک ۱۲۵، واحد ۲۱۰، تهران", }, ], socialMediaLinks: [ { icon: SOCIAL_ICONS.facebook, link: "#", }, { icon: SOCIAL_ICONS.x, link: "#", }, { icon: SOCIAL_ICONS.instagram, link: "#", }, ], }, { title: "فروشگاه", id: "shop", links: [ { text: "محصولات جدید", href: "#", }, { text: "پرفروش‌ترین‌ها", href: "#", }, { text: "روتین پوست", href: "#", }, { text: "هدیه و ست‌ها", href: "#", }, ], }, { title: "پشتیبانی", id: "support", links: [ { text: "تماس با ما", href: "#", }, { text: "سؤالات متداول", href: "#", }, { text: "پیگیری سفارش", href: "#", }, { text: "مرجوعی و تعویض", href: "#", }, ], }, { title: "درباره ما", id: "about", links: [ { text: "درباره ما", href: "#", }, { text: "مواد تشکیل‌دهنده", href: "#", }, { text: "پایداری", href: "#", }, { text: "مطبوعات", href: "#", }, ], }, ], contactForm: { title: "جایی که مد روز با راحتی پیوند می‌خورد", text: "لباس‌هایی طراحی می‌کنیم که به زنان کمک می‌کند با جزئیات دقیق، برش‌های مناسب و پایه‌های باکیفیت، شخصیت خود را بیان کنند.", }, submenu: [ { text: "سیاست مرجوعی", href: "#", }, { text: "شرایط استفاده", href: "#", }, { text: "حریم خصوصی", href: "#", }, ], paymentMethods: [ "/block-media/shadcnblocks/block/ecommerce/payment-methods/amazonpay.svg", "/block-media/shadcnblocks/block/ecommerce/payment-methods/applepay.svg", "/block-media/shadcnblocks/block/ecommerce/payment-methods/mastercard.svg", "/block-media/shadcnblocks/block/ecommerce/payment-methods/paypal.svg", "/block-media/shadcnblocks/block/ecommerce/payment-methods/visa.svg", "/block-media/shadcnblocks/block/ecommerce/payment-methods/discover.svg", ], copyrightCaption: "© ۲۲۶ ساخته‌شده با ❤️ توسط ShadcnBlocks", image: "/block-media/shadcnblocks/block/ecommerce/promotional/Neatly-Organized-Clothing-Selection-2.png", }; const EcommerceFooter18 = ({ className, sections = FOOTER_DATA.sections, contactForm = FOOTER_DATA.contactForm, homeLink = FOOTER_DATA.homeLink, paymentMethods = FOOTER_DATA.paymentMethods, image = FOOTER_DATA.image, copyrightCaption = FOOTER_DATA.copyrightCaption, submenu = FOOTER_DATA.submenu, }: EcommerceFooter18Props) => { const isDesktop = useMediaQuery("(min-width: 1024px)"); const allAccordionIds = sections.map(({ id }) => id); const [activeAccordionItem, setActiveAccordionItem] = useState(allAccordionIds); const handleOnChange = (ids: string[]) => { setActiveAccordionItem(ids); }; return ( ); }; const newsletterFormSchema = z.object({ email: z .string() .min(1, "ایمیل الزامی است") .email("آدرس ایمیل نامعتبر است"), }); type newsletterFormType = z.infer; const ContactFormSection = ({ title, text }: ContactFormProps) => { const form = useForm({ resolver: zodResolver(newsletterFormSchema), defaultValues: { email: "", }, }); const onSubmit = (data: newsletterFormType) => { console.log(data); }; return (

{title}

{text}

( {fieldState.invalid && ( )} )} />
); }; const FooterLinks = ({ links }: FooterLinksProps) => { if (!links) return; return ( ); }; const FooterContactInfo = ({ items, socialMediaLinks, }: FooterContactInfoProps) => { if (!items) return; return (
{items.map(({ text, href, title }, index) => (
{title}:
{href ? (
{text}
) : (
{text}
)}
))}
); }; const PaymentMethods = ({ cards }: { cards?: string[] }) => { if (!cards) return; return (

روش‌های پرداخت

    {cards.map((card) => (
  • روش پرداخت
  • ))}
); }; const SocialMediaSection = ({ links }: SocialMediaSectionProps) => { if (!links) return; return ( ); }; const FooterSubMenu = ({ links }: { links?: FooterLink[] }) => { if (!links) return; return ( ); }; export { EcommerceFooter18 };