From ff6a2481ded776c00f51bf1f3d123d49135d7c61 Mon Sep 17 00:00:00 2001 From: Denis Thiessen Date: Wed, 5 Jun 2024 00:09:15 +0200 Subject: [PATCH] feat: Added somewhat complete study page 2 --- package-lock.json | 135 ++++++++++++++++++ package.json | 6 + public/images/lodgingluxe_logo.png | Bin 0 -> 29648 bytes public/index.html | 6 + src/components/ScrollableTab.jsx | 16 +-- src/index.css | 6 + src/pages/study_site_2/StartPage2.jsx | 68 ++++++--- src/pages/study_site_2/TourOperators.jsx | 1 - .../tab_content/HotelCatering.jsx | 16 +++ .../tab_content/HotelFacilities.jsx | 20 +++ .../tab_content/HotelFeatures.jsx | 21 +++ .../study_site_2/tab_content/HotelFlights.jsx | 14 ++ .../tab_content/HotelInformation.jsx | 18 +++ .../tab_content/HotelLocation.jsx | 45 ++++++ .../study_site_2/tab_content/HotelMap.jsx | 33 +++++ .../study_site_2/tab_content/HotelRatings.jsx | 75 ++++++++++ .../study_site_2/tab_content/HotelRooms.jsx | 40 ++++++ 17 files changed, 486 insertions(+), 34 deletions(-) create mode 100644 public/images/lodgingluxe_logo.png create mode 100644 src/pages/study_site_2/tab_content/HotelCatering.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelFacilities.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelFeatures.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelFlights.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelInformation.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelLocation.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelMap.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelRatings.jsx create mode 100644 src/pages/study_site_2/tab_content/HotelRooms.jsx diff --git a/package-lock.json b/package-lock.json index e494c6c..b92e40c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,26 +8,37 @@ "name": "sonification-study-framework", "version": "0.1.0", "dependencies": { + "-": "^0.0.1", "@geist-ui/core": "^2.3.8", "@geist-ui/icons": "^1.0.2", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/leaflet": "^1.9.12", "heatmap.js": "^2.0.5", "i18next": "^23.11.3", "i18next-browser-languagedetector": "^7.2.1", "i18next-http-backend": "^2.5.1", + "leaflet": "^1.9.4", + "leaflet-gesture-handling": "^1.2.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-i18next": "^14.1.1", + "react-leaflet": "^4.2.1", "react-router-dom": "^6.23.0", "react-scripts": "5.0.1", "react-tabs-scrollable": "^2.0.6", + "save": "^2.9.0", "tone": "^15.0.4", "web-vitals": "^2.1.4", "zustand": "^4.5.2" } }, + "node_modules/-": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/-/-/--0.0.1.tgz", + "integrity": "sha512-3HfneK3DGAm05fpyj20sT3apkNcvPpCuccOThOPdzz8sY7GgQGe0l93XH9bt+YzibcTIgUAIMoyVJI740RtgyQ==" + }, "node_modules/@adobe/css-tools": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", @@ -3342,6 +3353,16 @@ } } }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/@remix-run/router": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", @@ -4098,6 +4119,11 @@ "@types/send": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -4391,6 +4417,14 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "node_modules/@types/leaflet": { + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz", + "integrity": "sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -8287,6 +8321,20 @@ "node": ">= 0.6" } }, + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -8868,6 +8916,11 @@ "node": ">= 0.6" } }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -12487,6 +12540,16 @@ "shell-quote": "^1.8.1" } }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, + "node_modules/leaflet-gesture-handling": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/leaflet-gesture-handling/-/leaflet-gesture-handling-1.2.2.tgz", + "integrity": "sha512-Blf5V4PoNphWkzL7Y1qge+Spkd4OCQ2atjwUNhMhLIcjKzPcBH++x/lwOinaR9jSqLWqJ6oKYO8d0XdTffy4hQ==" + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12557,6 +12620,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -12655,6 +12723,11 @@ "tmpl": "1.0.5" } }, + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -12763,6 +12836,11 @@ "node": ">=4" } }, + "node_modules/mingo": { + "version": "6.4.15", + "resolved": "https://registry.npmjs.org/mingo/-/mingo-6.4.15.tgz", + "integrity": "sha512-fKUCGr7fUxrb7YBK6whm5O5VouXfKAVtxnb+6g3Xuwsj9Jt9u8hhMOgiUoKO4kp3DmuiN0qgpYX2H/nP3zD1Hw==" + }, "node_modules/mini-css-extract-plugin": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", @@ -13466,6 +13544,14 @@ "node": ">=8" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dependencies": { + "through": "~2.3" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -15252,6 +15338,19 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-leaflet": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", + "dependencies": { + "@react-leaflet/core": "^2.1.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -15901,6 +16000,17 @@ } } }, + "node_modules/save": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/save/-/save-2.9.0.tgz", + "integrity": "sha512-eg8+g8CjvehE/2C6EbLdtK1pINVD27pcJLj4M9PjWWhoeha/y5bWf4dp/0RF+OzbKTcG1bae9qi3PAqiR8CJTg==", + "dependencies": { + "async": "^3.2.2", + "event-stream": "^4.0.1", + "lodash.assign": "^4.2.0", + "mingo": "^6.1.0" + } + }, "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -16321,6 +16431,17 @@ "wbuf": "^1.7.3" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -16478,6 +16599,15 @@ "node": ">= 0.4" } }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -17130,6 +17260,11 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", diff --git a/package.json b/package.json index 6418aae..8d27fb4 100644 --- a/package.json +++ b/package.json @@ -3,21 +3,27 @@ "version": "0.1.0", "private": true, "dependencies": { + "-": "^0.0.1", "@geist-ui/core": "^2.3.8", "@geist-ui/icons": "^1.0.2", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "@types/leaflet": "^1.9.12", "heatmap.js": "^2.0.5", "i18next": "^23.11.3", "i18next-browser-languagedetector": "^7.2.1", "i18next-http-backend": "^2.5.1", + "leaflet": "^1.9.4", + "leaflet-gesture-handling": "^1.2.2", "react": "^18.3.1", "react-dom": "^18.3.1", "react-i18next": "^14.1.1", + "react-leaflet": "^4.2.1", "react-router-dom": "^6.23.0", "react-scripts": "5.0.1", "react-tabs-scrollable": "^2.0.6", + "save": "^2.9.0", "tone": "^15.0.4", "web-vitals": "^2.1.4", "zustand": "^4.5.2" diff --git a/public/images/lodgingluxe_logo.png b/public/images/lodgingluxe_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6bd4de7b4d3f3cd2fd4c12d70cb65e0db0647e GIT binary patch literal 29648 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
  • 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 React App + diff --git a/src/components/ScrollableTab.jsx b/src/components/ScrollableTab.jsx index 987543d..f16cb51 100644 --- a/src/components/ScrollableTab.jsx +++ b/src/components/ScrollableTab.jsx @@ -1,18 +1,14 @@ import React, { useState } from "react"; -import ReactDOM from "react-dom"; import { Tabs, Tab } from "react-tabs-scrollable"; import "react-tabs-scrollable/dist/rts.css"; -import { Modal } from "@geist-ui/core"; -import PopupModal from "./PopupModal"; var amountTabs = 0; var reachedEndValue = false; var rightSideEnd = true; var endElement = amountTabs; -function ScrollableTab({ children }) { - const [activeTab, setActiveTab] = useState(1); - const [modalVisible, setModalVisible] = useState(false); +function ScrollableTab({ onActiveTabChange, children }) { + const [activeTab, setActiveTab] = useState(0); // define a onClick function to bind the value on tab click const onTabClick = (e, index) => { @@ -27,10 +23,9 @@ function ScrollableTab({ children }) { if (actionType === "button") { window.location.href = redirectLoc; - } else if (actionType === "modal") { - setModalVisible(true); } setActiveTab(index); + onActiveTabChange(index); }; /* @@ -44,10 +39,6 @@ function ScrollableTab({ children }) { }; */ - const closeModal = () => { - setModalVisible(false); - }; - const onHoverElement = () => {}; const onHoverTab = (key) => { @@ -112,7 +103,6 @@ function ScrollableTab({ children }) { redirectLoc={k.props.redirectLoc} > {k.props.children} - ); }); diff --git a/src/index.css b/src/index.css index 04689fd..70961ba 100644 --- a/src/index.css +++ b/src/index.css @@ -34,4 +34,10 @@ canvas { .centeredLogo { display: block; margin: 0 auto; +} + +.leaflet-container { + height: 75vh; + width: 95%; + margin: 10px auto; } \ No newline at end of file diff --git a/src/pages/study_site_2/StartPage2.jsx b/src/pages/study_site_2/StartPage2.jsx index 72e2f0a..36bc788 100644 --- a/src/pages/study_site_2/StartPage2.jsx +++ b/src/pages/study_site_2/StartPage2.jsx @@ -1,13 +1,12 @@ -import React from "react"; -import { getTranslation } from "../../core/i18n/I18NHandler"; +import React, { useState } from "react"; import WebpageBanner from "../../components/webpage_container/WebpageBanner"; import { Tab } from "react-tabs-scrollable"; import { StudySite, getHeatmapData, } from "../../components/webpage_container/StudySite"; -import { pushToMouseLog, getSensorLog } from "../../core/log/SensorLogger"; -import { Collapse, Text, Spacer } from "@geist-ui/core"; +import { pushToMouseLog } from "../../core/log/SensorLogger"; +import { Spacer } from "@geist-ui/core"; import ScrollableTab from "../../components/ScrollableTab"; import { Emoji, @@ -21,11 +20,38 @@ import { User, ArrowUpRight, } from "@geist-ui/icons"; +import HotelInformation from "./tab_content/HotelInformation"; +import HotelRatings from "./tab_content/HotelRatings"; +import HotelFeatures from "./tab_content/HotelFeatures"; +import HotelRooms from "./tab_content/HotelRooms"; +import HotelFacilities from "./tab_content/HotelFacilities"; +import HotelLocation from "./tab_content/HotelLocation"; +import HotelFlights from "./tab_content/HotelFlights"; +import HotelCatering from "./tab_content/HotelCatering"; + + +const tabContent = [ + (), + (), + (), + (), + (), + (), + "", + "", + (), + (), +]; function StartPage2({ redirectLoc }) { + const [activeTabIndex, setActiveTabIndex] = useState(0); + var saveMouseLog = function () { pushToMouseLog(getHeatmapData()); - //window.location.href = "./" + redirectLoc; + }; + + var onActiveTabChange = (index) => { + setActiveTabIndex(index); }; // TODO THINK IF I WANT TO JUST USE AN OVERLAY FOR OTHER DUMMY LINKS, WHICH ARENT CORRECT??? @@ -36,60 +62,62 @@ function StartPage2({ redirectLoc }) { - +

    Hotel Le Laboratoire

    - - - + + {tabContent[activeTabIndex]} + + Features - + Facilities - + Location - + Flights - + Rooms - + Catering - + Tour Operators - + Map - + Ratings - + Useful Information diff --git a/src/pages/study_site_2/TourOperators.jsx b/src/pages/study_site_2/TourOperators.jsx index f21f5a9..38d588d 100644 --- a/src/pages/study_site_2/TourOperators.jsx +++ b/src/pages/study_site_2/TourOperators.jsx @@ -1,5 +1,4 @@ import React from "react"; -import { getTranslation } from "../../core/i18n/I18NHandler"; import WebpageBanner from "../../components/webpage_container/WebpageBanner"; import { Tab } from "react-tabs-scrollable"; import { diff --git a/src/pages/study_site_2/tab_content/HotelCatering.jsx b/src/pages/study_site_2/tab_content/HotelCatering.jsx new file mode 100644 index 0000000..8e3a7c5 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelCatering.jsx @@ -0,0 +1,16 @@ +import { Text } from "@geist-ui/core"; + +function HotelCatering() { + return ( + + Our on-site restaurant, The Alchemist, serves a menu inspired by molecular + gastronomy and scientific innovation. Guests can enjoy a range of dishes + that combine traditional flavors with modern techniques, creating a dining + experience that is both delicious and visually stunning. The rooftop bar, + The Observatory, offers a selection of cocktails and snacks with a + panoramic view of the city. + + ); +} + +export default HotelCatering; diff --git a/src/pages/study_site_2/tab_content/HotelFacilities.jsx b/src/pages/study_site_2/tab_content/HotelFacilities.jsx new file mode 100644 index 0000000..d752879 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelFacilities.jsx @@ -0,0 +1,20 @@ +import { Text } from "@geist-ui/core"; + +function HotelFacilities() { + return ( +
    + + The hotel boasts state-of-the-art facilities designed to enhance your + stay: + +
      +
    • Fully equipped fitness center
    • +
    • Indoor swimming pool
    • +
    • Spa and wellness center
    • +
    • Conference rooms and event spaces
    • +
    +
    + ); +} + +export default HotelFacilities; diff --git a/src/pages/study_site_2/tab_content/HotelFeatures.jsx b/src/pages/study_site_2/tab_content/HotelFeatures.jsx new file mode 100644 index 0000000..d7f473d --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelFeatures.jsx @@ -0,0 +1,21 @@ +import { Text } from "@geist-ui/core"; + +function HotelFeatures() { + return ( +
    + + Hotel Le Laboratoire offers a unique experience inspired by scientific + research and laboratories. Enjoy cutting-edge technology, interactive + exhibits, and a futuristic ambiance. Features include: + +
      +
    • Modern, science-themed rooms
    • +
    • On-site science museum
    • +
    • Interactive lab experiences
    • +
    • Rooftop observatory
    • +
    +
    + ); +} + +export default HotelFeatures; diff --git a/src/pages/study_site_2/tab_content/HotelFlights.jsx b/src/pages/study_site_2/tab_content/HotelFlights.jsx new file mode 100644 index 0000000..aab8684 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelFlights.jsx @@ -0,0 +1,14 @@ +import { Text } from "@geist-ui/core"; + +function HotelFlights() { + return ( + + Amsterdam Schiphol Airport is the main international gateway to the city. + It offers numerous direct flights to major cities worldwide. Our concierge + service can assist you with booking flights and arranging airport + transfers. + + ); +} + +export default HotelFlights; diff --git a/src/pages/study_site_2/tab_content/HotelInformation.jsx b/src/pages/study_site_2/tab_content/HotelInformation.jsx new file mode 100644 index 0000000..e2cc360 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelInformation.jsx @@ -0,0 +1,18 @@ +import { Description, Spacer } from "@geist-ui/core"; + +function HotelInformation() { + return ( +
    + + + + + + + + +
    + ); +} + +export default HotelInformation; diff --git a/src/pages/study_site_2/tab_content/HotelLocation.jsx b/src/pages/study_site_2/tab_content/HotelLocation.jsx new file mode 100644 index 0000000..f72be3e --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelLocation.jsx @@ -0,0 +1,45 @@ +import { Text, Image } from "@geist-ui/core"; +import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; + +function HotelLocation() { + const positionCenter = [52.368, 4.88]; + const rijksmuseumCoordinates = [52.36, 4.885]; + const anneFrankCoordinates = [52.3749, 4.8839]; + const vondelparkCoordinates = [52.3577, 4.8665]; + const leidsepleinCoordinates = [52.3641, 4.883]; + + return ( +
    + + Located in the heart of Amsterdam, Hotel Le Laboratoire is conveniently + situated near popular attractions such as: + +
      +
    • Rijksmuseum
    • +
    • Anne Frank House
    • +
    • Vondelpark
    • +
    • Leidseplein
    • +
    + + + + Rijksmuseum + + + Anne Frank House + + + Vondelpark + + + Leidseplein + + +
    + ); +} + +export default HotelLocation; diff --git a/src/pages/study_site_2/tab_content/HotelMap.jsx b/src/pages/study_site_2/tab_content/HotelMap.jsx new file mode 100644 index 0000000..553a213 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelMap.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import WebpageBanner from "../../../components/webpage_container/WebpageBanner"; +import { MapContainer, TileLayer, Marker, Popup } from "react-leaflet"; +import { StudySite } from "../../../components/webpage_container/StudySite"; + +const MapSection = () => { + const position = [52.366, 4.8794]; + + return ( + + + + + Hotel Le Laboratoire
    Amsterdam City Center. +
    +
    +
    + ); +}; + +function HotelMap() { + return ( + + + + + ); +} + +export default HotelMap; diff --git a/src/pages/study_site_2/tab_content/HotelRatings.jsx b/src/pages/study_site_2/tab_content/HotelRatings.jsx new file mode 100644 index 0000000..eb7b1c5 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelRatings.jsx @@ -0,0 +1,75 @@ +import React from "react"; +import { Card, Text, Grid, Avatar, Divider } from "@geist-ui/core"; +import { Star } from "@geist-ui/icons"; + +const RatingCard = ({ name, avatar, rating, review }) => { + return ( + + + + + + + {name} +
    + {[...Array(rating)].map((_, i) => ( + + ))} +
    + {review} +
    +
    +
    + ); +}; + +function HotelRatings() { + const ratings = [ + { + name: "John Doe", + avatar: "https://i.pravatar.cc/150?img=3", + rating: 5, + review: + "An amazing experience! The scientific theme is fascinating and the service was excellent. Highly recommend.", + }, + { + name: "Jane Smith", + avatar: "https://i.pravatar.cc/150?img=5", + rating: 4, + review: + "Loved the unique theme and the amenities were top-notch. Would love to stay here again.", + }, + { + name: "Alex Johnson", + avatar: "https://i.pravatar.cc/150?img=7", + rating: 3, + review: + "Interesting concept, but the rooms were a bit small. Overall, a decent stay.", + }, + ]; + + return ( + + + {ratings.map((rating, index) => ( + + ))} + + + ); +} + +export default HotelRatings; diff --git a/src/pages/study_site_2/tab_content/HotelRooms.jsx b/src/pages/study_site_2/tab_content/HotelRooms.jsx new file mode 100644 index 0000000..1ba0b72 --- /dev/null +++ b/src/pages/study_site_2/tab_content/HotelRooms.jsx @@ -0,0 +1,40 @@ +import { Grid, Text, Card, Image } from "@geist-ui/core"; + +function HotelRooms() { + return ( + + + + Standard Room + Standard Room + + Comfortable room with modern amenities and a scientific theme. + + + + + + Deluxe Room + Deluxe Room + + Spacious room with enhanced features and a stylish design. + + + + + + Suite + Suite + + Luxurious suite with separate living area and premium amenities. + + + + + ); +} + +export default HotelRooms;