diff --git a/src/assets/css/globals.css b/src/assets/css/globals.css new file mode 100644 index 000000000..320c18ed4 --- /dev/null +++ b/src/assets/css/globals.css @@ -0,0 +1,11 @@ +/* styles/globals.css */ + +@keyframes fall { + to { + transform: translateY(calc(100vh + 100%)); + } +} + +.emoji-fall { + animation: fall 5s linear forwards; +} diff --git a/src/components/EmojiRain/index.tsx b/src/components/EmojiRain/index.tsx new file mode 100644 index 000000000..62a8ed9cd --- /dev/null +++ b/src/components/EmojiRain/index.tsx @@ -0,0 +1,21 @@ +const EmojiRain = () => { + return ( +
+ {Array.from({ length: 100 }).map((_, index) => ( +
+ 🎖️ +
+ ))} +
+ ); +}; + +export default EmojiRain; diff --git a/src/components/forms/contact-form.tsx b/src/components/forms/contact-form.tsx index ffa61bba5..fa763a470 100644 --- a/src/components/forms/contact-form.tsx +++ b/src/components/forms/contact-form.tsx @@ -1,3 +1,4 @@ +import EmojiRain from "@components/EmojiRain"; import React, { forwardRef, useState } from "react"; import axios from "axios"; import clsx from "clsx"; @@ -23,29 +24,29 @@ interface TProps { const ContactForm = forwardRef( ({ className }, ref) => { const [serverMessage, setServerMessage] = useState(""); - - const { - register, - handleSubmit, - formState: { errors }, - reset, - } = useForm(); + const [showEmojiRain, setShowEmojiRain] = useState(false); + + const { register, handleSubmit, formState: { errors }, reset } = useForm(); const onSubmit: SubmitHandler = async (data) => { try { const response = await axios.post("/api/contact", data); if (response.status === 200) { setServerMessage("Thank you for your message!"); - reset(); + setShowEmojiRain(true); // Trigger the Emoji Rain on successful submission + + // Optional: Hide the EmojiRain after a set duration + setTimeout(() => setShowEmojiRain(false), 5000); // Adjust duration as necessary + + reset(); // Reset the form fields } else { - setServerMessage( - "There was an error. Please try again later." - ); + setServerMessage("There was an error. Please try again later."); } } catch (error) { setServerMessage("There was an error. Please try again later."); } }; + return (
( {serverMessage && ( {serverMessage} )} + {showEmojiRain && } ); } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 0d89dd270..d966e0dea 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -8,6 +8,7 @@ import "@assets/css/font-linea.css"; import "@assets/css/fonts.css"; import "@assets/css/tailwind.css"; import "@assets/css/swiper.css"; +import "@assets/css/globals.css" import { UIProvider } from "../contexts/ui-context"; import { UserProvider } from "../contexts/user-context"; diff --git a/src/pages/contact-us.tsx b/src/pages/contact-us.tsx index 9f955b99b..875dfe8b3 100644 --- a/src/pages/contact-us.tsx +++ b/src/pages/contact-us.tsx @@ -1,30 +1,25 @@ -import type { NextPage } from "next"; -import { GetStaticProps } from "next"; -import SEO from "@components/seo/page-seo"; -import Layout from "@layout/layout-01"; -import Breadcrumb from "@components/breadcrumb"; -import ContactInfo from "@containers/contact-info/layout-02"; -import ContactForm from "@containers/contact-form/layout-02"; -import { normalizedData } from "@utils/methods"; -import { getPageData } from "../lib/page"; +import type { NextPage, GetStaticProps } from 'next'; +import SEO from '@components/seo/page-seo'; +import Layout from '@layout/layout-01'; +import Breadcrumb from '@components/breadcrumb'; +import ContactInfo from '@containers/contact-info/layout-02'; +import ContactForm from '@containers/contact-form/layout-02'; +import { normalizedData } from '@utils/methods'; +import { getPageData } from '../lib/page'; interface PageContent { section: string; } -type TProps = { +interface Props { data: { page: { content: PageContent[]; }; }; -}; - -type PageProps = NextPage & { - Layout: typeof Layout; -}; +} -const ContactMe: PageProps = ({ data }) => { +const ContactUs: NextPage & { Layout: typeof Layout; } = ({ data }) => { const content = normalizedData(data.page?.content, "section"); return ( @@ -41,22 +36,17 @@ const ContactMe: PageProps = ({ data }) => { ); }; -ContactMe.Layout = Layout; +ContactUs.Layout = Layout; -export const getStaticProps: GetStaticProps = () => { - const page = getPageData("inner", "contact-us"); +export const getStaticProps: GetStaticProps = async () => { + const page = await getPageData("inner", "contact-us"); return { props: { data: { page, }, - layout: { - headerShadow: true, - headerFluid: false, - footerMode: "light", - }, }, }; }; -export default ContactMe; +export default ContactUs;