diff --git a/package-lock.json b/package-lock.json
index 82e5da5..a2312c9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
"next": "14.1.4",
"react": "^18",
"react-burger-menu": "^3.0.9",
+ "react-datepicker": "^7.5.0",
"react-dom": "^18",
"react-icons": "^5.2.1",
"react-loading-overlay-ts": "^2.0.2",
@@ -435,6 +436,54 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/react": {
+ "version": "0.26.28",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz",
+ "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.1.2",
+ "@floating-ui/utils": "^0.2.8",
+ "tabbable": "^6.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
@@ -1947,6 +1996,14 @@
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
},
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -2222,6 +2279,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/dayjs": {
"version": "1.11.10",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
@@ -5598,6 +5664,21 @@
"react-dom": ">=0.14.0"
}
},
+ "node_modules/react-datepicker": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-7.5.0.tgz",
+ "integrity": "sha512-6MzeamV8cWSOcduwePHfGqY40acuGlS1cG//ePHT6bVbLxWyqngaStenfH03n1wbzOibFggF66kWaBTb1SbTtQ==",
+ "dependencies": {
+ "@floating-ui/react": "^0.26.23",
+ "clsx": "^2.1.1",
+ "date-fns": "^3.6.0",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17 || ^18",
+ "react-dom": "^16.9.0 || ^17 || ^18"
+ }
+ },
"node_modules/react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
@@ -6433,6 +6514,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
+ },
"node_modules/tailwindcss": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
diff --git a/package.json b/package.json
index d622f5e..e912101 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"next": "14.1.4",
"react": "^18",
"react-burger-menu": "^3.0.9",
+ "react-datepicker": "^7.5.0",
"react-dom": "^18",
"react-icons": "^5.2.1",
"react-loading-overlay-ts": "^2.0.2",
diff --git a/src/app/components/Agenda.tsx b/src/app/components/Agenda.tsx
index d8b8539..99bc594 100644
--- a/src/app/components/Agenda.tsx
+++ b/src/app/components/Agenda.tsx
@@ -1,71 +1,67 @@
const CALENDAR_URL =
- "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=NXM5c2RnN2k4NTlnNWxlMDEzbWluM29hZnQgc2FtLmhldy5yQG0&tmsrc=sam.hew.r%40gmail.com";
+ "https://calendar.google.com/calendar/event?action=TEMPLATE&tmeid=NXM5c2RnN2k4NTlnNWxlMDEzbWluM29hZnQgc2FtLmhldy5yQG0&tmsrc=sam.hew.r%40gmail.com";
interface AgendaProps {
- title?: string;
- date?: string;
- idx?: number;
+ title?: string;
+ date?: string;
+ idx?: number;
}
const AgendaItem = ({ title, date, idx }: AgendaProps) => {
- return (
-
-
- {title}
-
-
- {date}
-
-
- );
+ return (
+
+
+ {title}
+
+
+ {date}
+
+
+ );
};
const agendaItems = [
- {
- title: "Mardi Gras",
- date: "Feb 28 - March 4",
- },
- {
- title: "Ceremony & Reception",
- date: "March 8",
- },
- {
- title: "Farewell Brunch",
- date: "March 9",
- },
+ {
+ title: "Mardi Gras",
+ date: "Feb 28 - March 4",
+ },
+ {
+ title: "Ceremony & Reception",
+ date: "March 8",
+ },
];
const Agenda = () => {
- return (
-
-
- Our wedding will be held on:
-
-
- March 8, 2025
-
-
+ return (
+
+
+ Our wedding will be held on:
+
+
+ March 8, 2025
+
+
-
-
Festivities
-
+
+
Festivities
+
- {agendaItems.map((item, idx) => (
-
- ))}
-
- );
+ {agendaItems.map((item, idx) => (
+
+ ))}
+
+ );
};
export default Agenda;
diff --git a/src/app/components/BurgerMenu.tsx b/src/app/components/BurgerMenu.tsx
index ff05b51..cff97f0 100644
--- a/src/app/components/BurgerMenu.tsx
+++ b/src/app/components/BurgerMenu.tsx
@@ -2,140 +2,140 @@ import { slide as Menu } from "react-burger-menu";
import { useState } from "react";
const styles = {
- bmBurgerButton: {
- position: "fixed",
- width: "36px",
- height: "30px",
- left: "15px",
- top: "15px",
- },
- bmBurgerBars: {
- background: "#0f2e31",
+ bmBurgerButton: {
+ position: "fixed",
+ width: "36px",
+ height: "30px",
+ left: "15px",
+ top: "15px",
+ },
+ bmBurgerBars: {
+ background: "#354834",
+ },
+ bmBurgerBarsHover: {
+ background: "#0f2e31",
+ },
+ bmCrossButton: {
+ height: "24px",
+ width: "24px",
+ },
+ bmCross: {
+ background: "#bdc3c7",
+ },
+ bmMenuWrap: {
+ position: "fixed",
+ height: "62%",
+ width: "250px",
+ },
+ bmMenu: {
+ background: "#354834",
+ padding: "0.5em 1.5em 0",
+ fontSize: "1.15em",
+ borderRadius: "10px",
+ },
+ bmMorphShape: {
+ fill: "#373a47",
+ },
+ bmItemList: {
+ color: "#b8b7ad",
+ padding: "0.8em",
+ display: "flex",
+ flexDirection: "column",
+ justifyContent: "space-between",
+ },
+ bmOverlay: {
+ background: "rgba(0, 0, 0, 0.3)",
+ top: "0",
+ left: "0",
+ },
+};
+
+const BurgerMenu = () => {
+ const [isOpen, setOpen] = useState(false);
+
+ const handleIsOpen = () => {
+ setOpen(!isOpen);
+ };
+
+ const executeScroll = (divName: string) => {
+ const element = document.getElementById(divName);
+ if (element) {
+ element.scrollIntoView({ behavior: "smooth" });
+ setOpen(false);
+ }
+ };
+
+ const navItems = [
+ {
+ div_id: "home_page_div",
+ name: "Home",
},
- bmBurgerBarsHover: {
- background: "#0f2e31",
+ {
+ div_id: "bride_and_groom_div",
+ name: "Bride & Groom",
},
- bmCrossButton: {
- height: "24px",
- width: "24px",
+ {
+ div_id: "agenda_div",
+ name: "Festivities",
},
- bmCross: {
- background: "#bdc3c7",
+ {
+ div_id: "bridal_party_div",
+ name: "Bridal Party",
},
- bmMenuWrap: {
- position: "fixed",
- height: "62%",
- width: "250px",
+ {
+ div_id: "location_div",
+ name: "Wedding Location",
},
- bmMenu: {
- background: "#354834",
- padding: "0.5em 1.5em 0",
- fontSize: "1.15em",
- borderRadius: "10px",
+ {
+ div_id: "lodging_div",
+ name: "Lodging",
},
- bmMorphShape: {
- fill: "#373a47",
+ {
+ div_id: "ttd_dev",
+ name: "Things To Do",
},
- bmItemList: {
- color: "#b8b7ad",
- padding: "0.8em",
+ {
+ div_id: "carousel_div",
+ name: "Gallery",
},
- bmItem: {
- display: "inline-block",
+ {
+ div_id: "spotify_div",
+ name: "Spotify Playlist",
},
- bmOverlay: {
- background: "rgba(0, 0, 0, 0.3)",
- top: "0",
- left: "0",
+ {
+ div_id: "rsvp_div",
+ name: "RSVP",
},
-};
-
-const BurgerMenu = () => {
- const [isOpen, setOpen] = useState(false);
-
- const handleIsOpen = () => {
- setOpen(!isOpen);
- };
-
- const executeScroll = (divName: string) => {
- const element = document.getElementById(divName);
- if (element) {
- element.scrollIntoView({ behavior: "smooth" });
- setOpen(false);
- }
- };
-
- const navItems = [
- {
- div_id: "home_page_div",
- name: "Home",
- },
- {
- div_id: "bride_and_groom_div",
- name: "Bride & Groom",
- },
- {
- div_id: "agenda_div",
- name: "Festivities",
- },
- {
- div_id: "bridal_party_div",
- name: "Bridal Party",
- },
- {
- div_id: "location_div",
- name: "Wedding Location",
- },
- {
- div_id: "lodging_div",
- name: "Lodging",
- },
- {
- div_id: "ttd_dev",
- name: "Things To Do",
- },
- {
- div_id: "carousel_div",
- name: "Gallery",
- },
- {
- div_id: "spotify_div",
- name: "Spotify Playlist",
- },
- {
- div_id: "rsvp_div",
- name: "RSVP",
- },
- ];
+ ];
- return (
-
-
+ ))}
+
+
+ );
};
export default BurgerMenu;
diff --git a/src/app/components/Message.tsx b/src/app/components/Message.tsx
index 2edfce1..7b76c08 100644
--- a/src/app/components/Message.tsx
+++ b/src/app/components/Message.tsx
@@ -1,12 +1,17 @@
-import { memo, useRef, useState } from "react";
+import { memo, useRef, useState, useEffect } from "react";
import LoadingOverlay from "react-loading-overlay-ts";
import MessageInformationIcon from "./MessageInfo";
+import DatePicker from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
const Message = () => {
const formRef = useRef(null);
const [commentSubmitted, setCommentSubmitted] = useState(false);
const [loading, setLoading] = useState(false);
+ const [startDate, setStartDate] = useState();
+ const [endDate, setEndDate] = useState();
+
const scriptUrl =
"https://script.google.com/macros/s/AKfycbyrSwUKoDYzFOHqPmMulr_Ij6AD53-N2QAZDdik2S9gQwq4sB6d_BnFyKJJl3CLMj7g/exec";
@@ -62,7 +67,7 @@ const Message = () => {
-
+
{
-
-
-
-
+
+
+ What are your arrival and departure dates?
+
+
+ Arrival
+
+
setStartDate(date)}
+ />
+
+
+ Departure
+
+ setEndDate(date)}
+ />
+
+
{
name="message"
maxLength={750}
/>
+