From 5c2f7f374e949e6094e347ca8f383b71063bc0df Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 4 Mar 2026 19:07:11 +0000 Subject: [PATCH] Switch to version 1: modified src/components/sections/contact/ContactSplit.tsx --- .../sections/contact/ContactSplit.tsx | 253 +++++++++++------- 1 file changed, 160 insertions(+), 93 deletions(-) diff --git a/src/components/sections/contact/ContactSplit.tsx b/src/components/sections/contact/ContactSplit.tsx index 79c5619..9f7ca93 100644 --- a/src/components/sections/contact/ContactSplit.tsx +++ b/src/components/sections/contact/ContactSplit.tsx @@ -1,104 +1,171 @@ "use client"; -import React, { useState } from 'react'; -import { Mail, Phone, MapPin } from 'lucide-react'; +import ContactForm from "@/components/form/ContactForm"; +import MediaContent from "@/components/shared/MediaContent"; +import HeroBackgrounds, { type HeroBackgroundVariantProps } from "@/components/background/HeroBackgrounds"; +import { cls } from "@/lib/utils"; +import { useButtonAnimation } from "@/components/hooks/useButtonAnimation"; +import { LucideIcon } from "lucide-react"; +import { sendContactEmail } from "@/utils/sendContactEmail"; +import type { ButtonAnimationType } from "@/types/button"; -interface ContactFormData { - name: string; - email: string; - message: string; +type ContactSplitBackgroundProps = Extract< + HeroBackgroundVariantProps, + | { variant: "plain" } + | { variant: "animated-grid" } + | { variant: "canvas-reveal" } + | { variant: "cell-wave" } + | { variant: "downward-rays-animated" } + | { variant: "downward-rays-animated-grid" } + | { variant: "downward-rays-static" } + | { variant: "downward-rays-static-grid" } + | { variant: "gradient-bars" } + | { variant: "radial-gradient" } + | { variant: "rotated-rays-animated" } + | { variant: "rotated-rays-animated-grid" } + | { variant: "rotated-rays-static" } + | { variant: "rotated-rays-static-grid" } + | { variant: "sparkles-gradient" } +>; + +interface ContactSplitProps { + title: string; + description: string; + tag: string; + tagIcon?: LucideIcon; + tagAnimation?: ButtonAnimationType; + background: ContactSplitBackgroundProps; + useInvertedBackground: boolean; + imageSrc?: string; + videoSrc?: string; + imageAlt?: string; + videoAriaLabel?: string; + mediaPosition?: "left" | "right"; + mediaAnimation: ButtonAnimationType; + inputPlaceholder?: string; + buttonText?: string; + termsText?: string; + onSubmit?: (email: string) => void; + ariaLabel?: string; + className?: string; + containerClassName?: string; + contentClassName?: string; + contactFormClassName?: string; + tagClassName?: string; + titleClassName?: string; + descriptionClassName?: string; + formWrapperClassName?: string; + formClassName?: string; + inputClassName?: string; + buttonClassName?: string; + buttonTextClassName?: string; + termsClassName?: string; + mediaWrapperClassName?: string; + mediaClassName?: string; } -export const ContactSplit: React.FC = () => { - const [formData, setFormData] = useState({ - name: '', - email: '', - message: '', - }); - const [isSubmitted, setIsSubmitted] = useState(false); +const ContactSplit = ({ + title, + description, + tag, + tagIcon, + tagAnimation, + background, + useInvertedBackground, + imageSrc, + videoSrc, + imageAlt = "", + videoAriaLabel = "Contact section video", + mediaPosition = "right", + mediaAnimation, + inputPlaceholder = "Enter your email", + buttonText = "Sign Up", + termsText = "By clicking Sign Up you're confirming that you agree with our Terms and Conditions.", + onSubmit, + ariaLabel = "Contact section", + className = "", + containerClassName = "", + contentClassName = "", + contactFormClassName = "", + tagClassName = "", + titleClassName = "", + descriptionClassName = "", + formWrapperClassName = "", + formClassName = "", + inputClassName = "", + buttonClassName = "", + buttonTextClassName = "", + termsClassName = "", + mediaWrapperClassName = "", + mediaClassName = "", +}: ContactSplitProps) => { + const { containerRef: mediaContainerRef } = useButtonAnimation({ animationType: mediaAnimation }); - const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setFormData(prev => ({ ...prev, [name]: value })); - }; + const handleSubmit = async (email: string) => { + try { + await sendContactEmail({ email }); + console.log("Email send successfully"); + } catch (error) { + console.error("Failed to send email:", error); + } + }; - const handleFormSubmit = (e: React.FormEvent) => { - e.preventDefault(); - setIsSubmitted(true); - setFormData({ name: '', email: '', message: '' }); - setTimeout(() => setIsSubmitted(false), 3000); - }; - - return ( -
-
-
-
-

Get in Touch

-

We're here to help and answer any questions you might have.

-
- -
-
- -
-

Email

-

hello@company.com

-
+ const contactContent = ( +
+ +
+
-
- -
-

Phone

-

+1 (555) 123-4567

-
-
-
- -
-

Address

-

123 Main Street, City, State 12345

-
-
-
+ ); -
- - -