diff --git a/.env b/.env new file mode 100644 index 0000000..2195540 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +API_TOKEN=f0f109ba4defabee302ac9e21340977a6e29043d709448024cf23442aebd61f0ac9ba11e129a26dae5a57496004cb3746626b606274e0fbead40e19a6cab9f003209ebbeac50c89bf2735fd76d8b9211f5766af0ec72898dd0e049650dfa9c862d101b3648b9f35db8bdd6847d46590020afec419765270482bd8a886050adb8 \ No newline at end of file diff --git a/assets/Arrow-Left.png b/assets/Arrow-Left.png new file mode 100644 index 0000000..19f58fa Binary files /dev/null and b/assets/Arrow-Left.png differ diff --git a/assets/Button (1).png b/assets/Button (1).png new file mode 100644 index 0000000..dd39b00 Binary files /dev/null and b/assets/Button (1).png differ diff --git a/assets/Button.png b/assets/Button.png new file mode 100644 index 0000000..575b004 Binary files /dev/null and b/assets/Button.png differ diff --git a/assets/banner.png b/assets/banner.png new file mode 100644 index 0000000..8a23132 Binary files /dev/null and b/assets/banner.png differ diff --git a/assets/card-image-2.png b/assets/card-image-2.png new file mode 100644 index 0000000..edfa52f Binary files /dev/null and b/assets/card-image-2.png differ diff --git a/assets/card-image-3.png b/assets/card-image-3.png new file mode 100644 index 0000000..120aace Binary files /dev/null and b/assets/card-image-3.png differ diff --git a/assets/card-image.png b/assets/card-image.png new file mode 100644 index 0000000..e16aace Binary files /dev/null and b/assets/card-image.png differ diff --git a/assets/clients.png b/assets/clients.png new file mode 100644 index 0000000..722f034 Binary files /dev/null and b/assets/clients.png differ diff --git a/assets/home-banner.png b/assets/home-banner.png new file mode 100644 index 0000000..8008b62 Binary files /dev/null and b/assets/home-banner.png differ diff --git a/assets/image1.png b/assets/image1.png new file mode 100644 index 0000000..a737713 Binary files /dev/null and b/assets/image1.png differ diff --git a/assets/image2.png b/assets/image2.png new file mode 100644 index 0000000..d03379e Binary files /dev/null and b/assets/image2.png differ diff --git a/assets/image3.png b/assets/image3.png new file mode 100644 index 0000000..76e720b Binary files /dev/null and b/assets/image3.png differ diff --git a/package-lock.json b/package-lock.json index 9fde774..88bd75d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,8 @@ "@types/react": "^18.2.73", "@types/react-dom": "^18.2.23", "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.18", + "postcss": "^8.4.36", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^5.4.3", @@ -1841,6 +1843,7 @@ "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, "funding": [ { "type": "opencollective", @@ -1941,6 +1944,7 @@ "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -1988,6 +1992,7 @@ "version": "1.0.30001600", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2255,7 +2260,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.715", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", - "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -2312,6 +2318,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -2458,6 +2465,7 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, "engines": { "node": "*" }, @@ -3000,7 +3008,8 @@ "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", @@ -3014,6 +3023,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3904,6 +3914,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5268,6 +5279,7 @@ "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, "requires": { "browserslist": "^4.23.0", "caniuse-lite": "^1.0.30001599", @@ -5332,6 +5344,7 @@ "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -5352,7 +5365,8 @@ "caniuse-lite": { "version": "1.0.30001600", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==" + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "dev": true }, "chalk": { "version": "2.4.2", @@ -5548,7 +5562,8 @@ "electron-to-chromium": { "version": "1.4.715", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", - "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" + "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==", + "dev": true }, "emoji-regex": { "version": "9.2.2", @@ -5597,7 +5612,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", @@ -5700,7 +5716,8 @@ "fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true }, "fsevents": { "version": "2.3.3", @@ -6071,7 +6088,8 @@ "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "normalize-path": { "version": "3.0.0", @@ -6081,7 +6099,8 @@ "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -6680,6 +6699,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" diff --git a/package.json b/package.json index 6742409..48b0f10 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,8 @@ "@types/react": "^18.2.73", "@types/react-dom": "^18.2.23", "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.18", + "postcss": "^8.4.36", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^5.4.3", diff --git a/src/App.css b/src/App.css index 7150519..57fd959 100644 --- a/src/App.css +++ b/src/App.css @@ -1,2 +1,16 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + + + main { +} + +.mapboxgl-ctrl-attrib-inner { + display: none; +} + +.mapboxgl-ctrl-bottom-left { + display: none; } \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..b9c24c9 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,21 @@ +import { BrowserRouter, Routes, Route } from "react-router-dom"; +import Map from "./components/Map.jsx"; +import Homepage from "./components/Homepage.jsx"; +import Notifications from "./components/Notifications.jsx"; +import Event from "./components/Event.jsx"; +import SendEmail from "./components/sendEmail.jsx"; +import "./index.css"; +import "./App.css"; + +export default function App() { + return ( + + + } /> + } /> + } /> + } /> + + + ); +} diff --git a/src/components/Event.jsx b/src/components/Event.jsx new file mode 100644 index 0000000..78b18e3 --- /dev/null +++ b/src/components/Event.jsx @@ -0,0 +1,140 @@ +import React, { useState, useEffect } from "react"; +import axios from "axios"; + +const Event = () => { + const [eventData, setEventData] = useState(null); + const [baseUrl, setBaseUrl] = useState("https://eventhive.creeknet.xyz/api"); + const pathname = window.location.pathname; + + // URL to fetch + const url = baseUrl + pathname + "/?populate=*"; + + useEffect(() => { + console.log(baseUrl); + const fetchEvent = async () => { + try { + // console.log("Event URL:", baseUrl + pathname); // Add this line to log eventUrl + const response = await axios.get(url); + setEventData(response.data); + } catch (error) { + console.error("Error fetching event:", error); + } + }; + + fetchEvent(); + }, []); + + if (!eventData) { + return
Loading...
; + } + + // Declare data + const event = eventData.data.attributes; + + // Extract data from response + const { title, description, date, price, multimedia, venue } = event; + const venueData = venue.data.attributes; + + // Inline style for the background image + const bannerStyle = { + backgroundImage: `url(https://eventhive.creeknet.xyz${multimedia.data[0].attributes.url})`, + backgroundSize: "cover", + backgroundPosition: "center", + width: "80%", + }; + + return ( +
+
+
+
+
+
+
+ + +
+
+ {title} +
+
+ {venue.name} +
+
{description}
+
+
+
+
+
Date & time
+
+ {new Date(date).toLocaleString()} {/* Use dynamic date */} +
+
Add to calendar
+
+ Book now +
+
+ Program promoter +
+
+ No Refunds +
+
+
+
+
+
+ +
+ + View map + +
+
+
+
+

Description

+

{description}

+

Date

+

{new Date(date).toLocaleDateString()}

+

Organizer

+

+ Organizer contact: {venueData.contactNumber} +

+

Category

+

+ {eventData.data.attributes.categories.data[0].attributes.name} +

+

Venue

+

{venueData.name}

+

+ Address: {venueData.address}, {venueData.city}, {venue.postcode} +

+

{venueData.description}

+

Contact Email: {venueData.contactEmail}

+

Contact Number: {venueData.contactNumber}

+

+ Website:{" "} + + {venueData.website} + +

+

Price

+

£{price}

+
+
+ ); +}; + +export default Event; diff --git a/src/components/Map.jsx b/src/components/Map.jsx index 763431b..4b3a8f1 100644 --- a/src/components/Map.jsx +++ b/src/components/Map.jsx @@ -1,91 +1,156 @@ -/** - * Map - */ - import React, { useState, useEffect } from "react"; import mapboxgl from "mapbox-gl"; +import axios from "axios"; +import Event from "./Event.jsx"; +import { Link } from "react-router-dom"; const MapComponent = () => { const [mapData, setMapData] = useState(null); - const [selectedMarker, setSelectedMarker] = useState(null); // State for selected marker - - const dummyData = [ - { - coordinates: [-73.935242, 40.73061], // New York City - title: "Example Marker 1", - description: "This is example marker 1 on the map.", - category: "Example Category 1", - imageUrl: "https://example.com/image1.jpg", - }, - { - coordinates: [-74.0059, 40.7128], // New York City - title: "Example Marker 2", - description: "This is example marker 2 on the map.", - category: "Example Category 2", - imageUrl: "https://example.com/image2.jpg", - }, - // Add more markers around the UK - { - coordinates: [-0.1276, 51.5074], // London - title: "London Marker", - description: "This is a marker in London.", - category: "UK", - imageUrl: "https://example.com/london.jpg", - }, - { - coordinates: [-1.9036, 52.4828], // Birmingham - title: "Birmingham Marker", - description: "This is a marker in Birmingham.", - category: "UK", - imageUrl: "https://example.com/birmingham.jpg", - }, - { - coordinates: [-3.1883, 55.9533], // Edinburgh - title: "Edinburgh Marker", - description: "This is a marker in Edinburgh.", - category: "UK", - imageUrl: "https://example.com/edinburgh.jpg", - }, - // Add more markers as needed - ]; + const [selectedMarker, setSelectedMarker] = useState(null); + const [selectedVenueEvents, setSelectedVenueEvents] = useState([]); + const [venues, setVenues] = useState([]); + const [multimediaUrl, setMultimediaUrl] = useState(""); // State for multimedia URL + const [baseUrl, setBaseUrl] = useState(""); // State for base URL + + const fetchVenues = async () => { + try { + const response = await axios.get( + "https://eventhive.creeknet.xyz/api/venues?populate=*" + ); + setVenues(response.data.data); + } catch (error) { + console.error("Error fetching venues:", error); + } + }; + + const fetchCoordinates = async (address) => { + try { + const response = await axios.get( + `https://api.mapbox.com/geocoding/v5/mapbox.places/${address}.json`, + { + params: { + access_token: + "pk.eyJ1Ijoic3RlZmFuazc3NyIsImEiOiJjbHN0Z2xpeGIxcnNxMmpwczhjNGNzbm5sIn0.9K8UicMtbutDLrXWgxiF7A", + }, + } + ); + return response.data.features[0].geometry.coordinates; + } catch (error) { + console.error("Error fetching coordinates:", error); + } + }; + + useEffect(() => { + fetchVenues(); + }, []); useEffect(() => { + if (!venues.length) return; + + setBaseUrl("https://eventhive.creeknet.xyz"); // Set base URL + mapboxgl.accessToken = - import.meta.env.VITE_MAPBOX_API_KEY; + "pk.eyJ1Ijoic3RlZmFuazc3NyIsImEiOiJjbHN0Z2xpeGIxcnNxMmpwczhjNGNzbm5sIn0.9K8UicMtbutDLrXWgxiF7A"; const map = new mapboxgl.Map({ container: "map-container", style: "mapbox://styles/mapbox/streets-v12", - center: [-2.941, 54.293], // Centered around the UK - zoom: 5, + center: [-1.6174, 54.9783], + zoom: 12, }); - // Add markers and click event listener - dummyData.forEach((marker) => { - const markerElement = new mapboxgl.Marker() - .setLngLat(marker.coordinates) + venues.forEach(async (venue) => { + const coordinates = await fetchCoordinates(venue.attributes.postcode); + const marker = new mapboxgl.Marker() + .setLngLat(coordinates) + .setPopup( + new mapboxgl.Popup().setHTML( + `

${venue.attributes.name}

+ ${ + venue.attributes.multimedia && + venue.attributes.multimedia.data.length > 0 && + venue.attributes.multimedia.data[0].attributes.formats?.small + ? `${venue.attributes.name}` + : "" + } +

${venue.attributes.description}

` + ) + ) .addTo(map); - markerElement.getElement().addEventListener("click", () => { - setSelectedMarker(marker); // Update selectedMarker state + marker.getElement().addEventListener("click", () => { + setSelectedMarker(venue); + setSelectedVenueEvents(venue.attributes.events.data); + setMultimediaUrl(venue.attributes.multimedia.data[0].attributes.formats.thumbnail.url); }); }); + console.log(multimediaUrl); + // console.log(baseUrl); + console.log(venues); + setMapData(map); return () => map.remove(); - }, []); + }, [venues]); return ( -
- {" "} - {/* Wrapper for map and info panel */} -
- {selectedMarker && ( -
-

{selectedMarker.title}

-

{selectedMarker.description}

- Book - {/* Add more fields here as needed */} +
+
+ + {selectedVenueEvents.length > 0 && ( +
+ {multimediaUrl && ( + {selectedMarker + )} +

+ Events at {selectedMarker && selectedMarker.attributes.name} +

+
    + {selectedVenueEvents.map((event) => ( +
  • +
    +
    +

    + {event.attributes.title} +

    +

    + {event.attributes.description} +

    +

    + Date:{" "} + {new Date(event.attributes.date).toLocaleDateString()} +

    +

    + Price: {event.attributes.price} +

    + {/* + Book + */} + + + View Details + +
    +
    +
  • + ))} +
)}
diff --git a/src/components/SendEmail.jsx b/src/components/SendEmail.jsx new file mode 100644 index 0000000..1d3939f --- /dev/null +++ b/src/components/SendEmail.jsx @@ -0,0 +1,15 @@ +import axios from 'axios'; + +const sendEmail = async (to, subject, text, html) => { + try { + const response = await axios.post('https://apis-sk.vercel.app/api/send-email', to, subject, text, html); + // const response = await axios.post('http://localhost:5174/api/sendEmail', data); -- for testing + console.log(response.data); // Log success message + return response.data; + } catch (error) { + console.error('Error:', error); + throw new Error('Error sending email'); + } +}; + +export default sendEmail; diff --git a/src/components/emailTemplates/BookingCancellationEmail.jsx b/src/components/emailTemplates/BookingCancellationEmail.jsx index b90f7c3..5bb5dff 100644 --- a/src/components/emailTemplates/BookingCancellationEmail.jsx +++ b/src/components/emailTemplates/BookingCancellationEmail.jsx @@ -2,15 +2,15 @@ import React from 'react'; const BookingCancellationEmail = ({ eventName, eventDate, eventLocation }) => { return ( -
-

Booking Cancellation: {eventName}

-

Dear Guest,

-

We regret to inform you that your booking for the following event has been cancelled:

-

Event Name: {eventName}

-

Date: {eventDate}

-

Location: {eventLocation}

-

We apologize for any inconvenience caused. If you have any questions, please feel free to contact us.

-

Best regards,
The Event Management Team

+
+

Booking Cancellation: {eventName}

+

Dear Guest,

+

We regret to inform you that your booking for the following event has been cancelled:

+

Event Name: {eventName}

+

Date: {eventDate}

+

Location: {eventLocation}

+

We apologize for any inconvenience caused. If you have any questions, please feel free to contact us.

+

Best regards,
EventHive

); }; diff --git a/src/components/emailTemplates/BookingConfirmationEmail.jsx b/src/components/emailTemplates/BookingConfirmationEmail.jsx index ac030f0..5446f67 100644 --- a/src/components/emailTemplates/BookingConfirmationEmail.jsx +++ b/src/components/emailTemplates/BookingConfirmationEmail.jsx @@ -2,15 +2,15 @@ import React from 'react'; const BookingConfirmationEmail = ({ eventName, eventDate, eventLocation }) => { return ( -
-

Booking Confirmation: {eventName}

-

Dear Guest,

-

We are pleased to confirm your booking for the following event:

-

Event Name: {eventName}

-

Date: {eventDate}

-

Location: {eventLocation}

-

Thank you for choosing to attend our event. We look forward to seeing you there!

-

Best regards,
The Event Management Team

+
+

Booking Confirmation: {eventName}

+

Dear Guest,

+

We are pleased to confirm your booking for the following event:

+

Event Name: {eventName}

+

Date: {eventDate}

+

Location: {eventLocation}

+

Thank you for choosing to attend our event. We look forward to seeing you there!

+

Best regards,
EventHive

); }; diff --git a/src/index.css b/src/index.css index 5be59b4..a31e444 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,3 @@ @import 'tailwindcss/base'; @import 'tailwindcss/components'; -@import 'tailwindcss/utilities'; \ No newline at end of file +@import 'tailwindcss/utilities';