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 (
);
}
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;