diff --git a/package-lock.json b/package-lock.json index b7192cb..1110de5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1271,6 +1271,11 @@ } } }, + "@googlemaps/js-api-loader": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@googlemaps/js-api-loader/-/js-api-loader-1.6.0.tgz", + "integrity": "sha512-amuilneCf7q5A/jDUE3ml83c9NjW/3DzIqiBDFIKZcraD0JSKbetkEQa5s57Z6QY7jxcequXgoL9CKJUY1xZ5A==" + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -1916,6 +1921,156 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz", "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==" }, + "@reach/auto-id": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.10.5.tgz", + "integrity": "sha512-we4/bwjFxJ3F+2eaddQ1HltbKvJ7AB8clkN719El7Zugpn/vOjfPMOVUiBqTmPGLUvkYrq4tpuFwLvk2HyOVHg==", + "requires": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@reach/combobox": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/combobox/-/combobox-0.10.5.tgz", + "integrity": "sha512-UrvdELLk+rnxK0o2e+jWmw6b7dteBWAylX4CEHE9KJuBbdwZ1PJY3YIAwJuvWM13Lcll2Pk7OlFJqRT90r2mRg==", + "requires": { + "@reach/auto-id": "0.10.5", + "@reach/descendants": "0.10.5", + "@reach/popover": "0.10.5", + "@reach/portal": "0.10.5", + "@reach/utils": "0.10.5", + "highlight-words-core": "1.2.2", + "prop-types": "^15.7.2", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@reach/descendants": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.10.5.tgz", + "integrity": "sha512-8HhN4DwS/HsPQ+Ym/Ft/XJ1spXBYdE8hqpnbYR9UcU7Nx3oDbTIdhjA6JXXt23t5avYIx2jRa8YHCtVKSHuiwA==", + "requires": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@reach/observe-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", + "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" + }, + "@reach/popover": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.10.5.tgz", + "integrity": "sha512-S+qWIsjrN1yMpHjgELhjpdGc4Q3q1plJtXBGGQRxUAjmCUA/5OY7t5w5C8iqMNAEBwCvYXKvK/pLcXFxxLykSw==", + "requires": { + "@reach/portal": "0.10.5", + "@reach/rect": "0.10.5", + "@reach/utils": "0.10.5", + "tabbable": "^4.0.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@reach/portal": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.10.5.tgz", + "integrity": "sha512-K5K8gW99yqDPDCWQjEfSNZAbGOQWSx5AN2lpuR1gDVoz4xyWpTJ0k0LbetYJTDVvLP/InEcR7AU42JaDYDCXQw==", + "requires": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@reach/rect": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.10.5.tgz", + "integrity": "sha512-JBKs2HniYecq5zLO6UFReX28SUBPM3n0aizdNgHuvwZmDcTfNV4jsuJYQLqJ+FbCQsrSHkBxKZqWpfGXY9bUEg==", + "requires": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.10.5", + "prop-types": "^15.7.2", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@reach/utils": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.10.5.tgz", + "integrity": "sha512-5E/xxQnUbmpI/LrufBAOXjunl96DnqX6B4zC2MO2KH/dRzLug5gM5VuOwV26egsp0jvsSPxojwciOhS43px3qw==", + "requires": { + "@types/warning": "^3.0.0", + "tslib": "^2.0.0", + "warning": "^4.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@react-google-maps/api": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@react-google-maps/api/-/api-1.13.0.tgz", + "integrity": "sha512-mKwXziG5MbOvvcWG53FyZVZ8zjAuPNYkcS/+nYX9STMFNrI96AFq5l/zUn2QifRJnPzE8iO4V1vyMM+Ie9LpGg==", + "requires": { + "@googlemaps/js-api-loader": "1.6.0", + "@react-google-maps/infobox": "1.12.1", + "@react-google-maps/marker-clusterer": "1.12.1", + "invariant": "2.2.4" + } + }, + "@react-google-maps/infobox": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@react-google-maps/infobox/-/infobox-1.12.1.tgz", + "integrity": "sha512-tD/xijqRtKK/LNRzuerzuyvybnRaD8SLgCA064len4/enTo1abhQN215ZYqwbTOn7RgYt9qMgNnwoX//u3xoWw==" + }, + "@react-google-maps/marker-clusterer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@react-google-maps/marker-clusterer/-/marker-clusterer-1.12.1.tgz", + "integrity": "sha512-JBSO5VJuouP/boBnSdRDCWq0UKO7jr3HvZVhis3ew+VGJ/BoCPu3lpU0HDsjjulfng+xwqLfVOIzP3QnvBPdCA==" + }, "@restart/context": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", @@ -5108,6 +5263,11 @@ "whatwg-url": "^8.0.0" } }, + "date-fns": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz", + "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==" + }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -7570,6 +7730,11 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "highlight-words-core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", + "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" + }, "history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", @@ -15242,6 +15407,11 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "tabbable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", + "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" + }, "table": { "version": "6.0.7", "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", @@ -15952,6 +16122,11 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-places-autocomplete": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/use-places-autocomplete/-/use-places-autocomplete-1.9.1.tgz", + "integrity": "sha512-ZIkCob6qFBT5kP5wvtiDHV2Dw+DjlVSOj8RoM0XRkDB95PPQzICTjWHOhe4ClY0gO2Nq1bFG5K2WfIYYlIYtfg==" + }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", diff --git a/package.json b/package.json index 2879447..0a896a8 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,13 @@ "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", "react-select": "^4.3.0", - "reactstrap": "^8.9.0", "spectre.css": "^0.5.9", "web-vitals": "^1.1.1", + "@reach/combobox": "^0.10.2", + "@react-google-maps/api": "^1.9.0", + "date-fns": "^2.13.0", + "use-places-autocomplete": "^1.3.5", + "reactstrap": "^8.9.0", "yup": "^0.32.9" }, "scripts": { diff --git a/public/assets/locales/en/translations.json b/public/assets/locales/en/translations.json index 8f6e961..54441dd 100644 --- a/public/assets/locales/en/translations.json +++ b/public/assets/locales/en/translations.json @@ -23,11 +23,43 @@ "Nav_Contact_Us": "Contact Us", "Nav_listing_page": "listing-page", "Nav_Login": "Login", +<<<<<<< HEAD "View_Button": "View", "MeetTeam": "Meet the Team", "Sales_Ass":"sales assistant" +======= + "Slogan_1": "YOU ARE NOT BUYING A HOUSE, ", + "Slogan_2": "YOU ARE BUYING A LIFESTYLE. ", + "Info": "Click for Details", + "Home1": "Welcome to Kene's Cribs. Kene's Cribs is a real estator company which provides the clients with the houses.", + "Home2": "The houses limited to the clients are only limited to the clients' dreams. In order to further navigate the", + "Home3": "website, use the navigation bar to switch between pages. Listings page is for browsing houses, Agents page", + "Home4": "is for browsing the estators, the Contact Us page is for the contacting us and the login page is for our", + "Home5": "members who want to benefit from our deals. Above are some houses which can interest you. Feel free to", + "Home6": "click the buttons above to explore the houses you want.", + "Desc": "Description", + "Rooms": "1 Bedroom, 2 Bathroom", + "Danger1": "Message could not send.", + "Danger2": "There are some errors in your contact form.", + "Success1": "The message is successfully sent.", + "Success2": "You contact form will be delivered to our support team.", + "Contact-Title": "Contact to Us", + "Contact-House": "Select an Agent", + "Contact-Agent": "Select a House", + "No-Pref": "No preference", + "Contact-First": "First Name", + "Contact-Last": "Last Name", + "Contact-Mail": "Email Address", + "Contact-Message": "Message", + "Contact-Submit": "Submit", + "Contact-Error1": "Please select an item in the list.", + "Contact-Error2": "Please fill out this field.", + "Contact-Error3": "Invalid email address." + + +>>>>>>> 540f8f4cac411d798ced6e126b65de938da68ad1 } \ No newline at end of file diff --git a/public/assets/locales/fr/translations.json b/public/assets/locales/fr/translations.json index 30d89db..97f8b00 100644 --- a/public/assets/locales/fr/translations.json +++ b/public/assets/locales/fr/translations.json @@ -23,7 +23,37 @@ "Nav_Contact_Us": "Nous contacter", "Nav_listing_page": "page de liste", "Nav_Login": "Connexion", +<<<<<<< HEAD "View_Button": "vue", "MeetTeam": "Rencontrer l'équipe", "Sales_Ass":"assistant des ventes" +======= + "Slogan_1": "VOUS N'ACHETEZ PAS UNE MAISON, ", + "Slogan_2": "VOUS ACHETEZ UN STYLE DE VIE. ", + "Info": "Cliquer pour les détails", + "Home1": "Bienvenue chez Kene's Cribs. Kene's Cribs est une véritable société d'estateur qui fournit les maisons aux clients.", + "Home2": "Les maisons limitées aux clients ne se limitent qu'aux rêves des clients. Afin de mieux naviguer dans site Web, utilisez", + "Home3": "la barre de navigation pour basculer entre les pages. La page des listes sert à parcourir les maisons, la page Agents", + "Home4": "est pour parcourir les estators, la page Contactez-nous est pour nous contacter et la page de connexion est pour notre", + "Home5": "membres qui souhaitent bénéficier de nos offres. Ci-dessus, quelques maisons qui peuvent vous intéresser. N'hésitez", + "Home6": "pas à cliquez sur les boutons ci-dessus pour explorer les maisons que vous souhaitez.", + "Desc": "La Description", + "Rooms": "1 chambre, 2 salles de bains", + "Danger1": "Le message n'a pas pu être envoyé.", + "Danger2": "Il y a des erreurs dans votre formulaire de contact.", + "Success1": "Le message a été envoyé avec succès.", + "Success2": "Votre formulaire de contact sera envoyé à notre équipe d'assistance.", + "Contact-Title": "Contactez-Nous", + "Contact-House": "Sélectionnez un Agent", + "Contact-Agent": "Sélectionnez une Maison", + "No-Pref": "Aucune préférence", + "Contact-First": "Prénom", + "Contact-Last": "Nom de Famille", + "Contact-Mail": "Adresse E-mail", + "Contact-Message": "Le Message", + "Contact-Submit": "Soumettre", + "Contact-Error1": "Veuillez sélectionner un élément dans la liste.", + "Contact-Error2": "Veuillez remplir ce champ.", + "Contact-Error3": "Adresse e-mail invalide." +>>>>>>> 540f8f4cac411d798ced6e126b65de938da68ad1 } \ No newline at end of file diff --git a/src/App.js b/src/App.js index 4050129..75af360 100644 --- a/src/App.js +++ b/src/App.js @@ -3,7 +3,6 @@ import Footer from "./shared-components/footer-component/Footer"; import Navbar from "./shared-components/navbar-component/Navbar"; import { BrowserRouter, Route, Switch } from "react-router-dom"; import i18next from "i18next"; -import { useTranslation } from "react-i18next"; import Cookies from "js-cookie"; import HomePage from "./homePage/Homepage"; import ListingsPage from "./listings-page/ListingsPage"; @@ -31,7 +30,6 @@ function App() { const currentLanguage = langauges.find( (lang) => lang.code === currentLanguageCode ); - const { t } = useTranslation(); useEffect(() => { document.body.dir = currentLanguage.dir || "ltr"; @@ -69,9 +67,6 @@ function App() { -
- {t("Welcome_to_React")} -
diff --git a/src/homePage/Homepage.js b/src/homePage/Homepage.js index e209f3f..dc2ce32 100644 --- a/src/homePage/Homepage.js +++ b/src/homePage/Homepage.js @@ -6,6 +6,7 @@ import house3 from "../images/house3.jpg"; import house4 from "../images/house4.jpg"; import Carousel from "react-bootstrap/Carousel"; import Button from "react-bootstrap/Button"; +import { withTranslation } from "react-i18next"; @@ -19,6 +20,7 @@ class Homepage extends Component { } render() { + const { t } = this.props; const { nextIcon, prevIcon } = this.state; return (
@@ -26,8 +28,8 @@ class Homepage extends Component {
-

YOU ARE NOT BUYING A HOUSE,

-

YOU ARE BUYING A LIFESTYLE.

+

{t("Slogan_1")}

+

{t("Slogan_2")}

@@ -39,9 +41,9 @@ class Homepage extends Component { First House

100 Charlie Rogers, Kanata, ON K2V 1A7

-

1 Bedroom, 2 Bathroom

+

{t("Rooms")}

- +
@@ -49,9 +51,9 @@ class Homepage extends Component { Second House

1490 Youville Drive, Orléans, ON K1C 2X8

-

1 Bedroom, 2 Bathroom

+

{t("Rooms")}

- +
@@ -59,9 +61,9 @@ class Homepage extends Component { Third House

8720 Russell Road, Navan, ON K4B 1J1

-

1 Bedroom, 2 Bathroom

+

{t("Rooms")}

- +
@@ -69,9 +71,9 @@ class Homepage extends Component { Fourth House

2785 8th Line Road, Metcalfe, ON K0A 2P0

-

1 Bedroom, 2 Bathroom

+

{t("Rooms")}

- +
@@ -80,13 +82,13 @@ class Homepage extends Component {
-

Description

-

Welcome to Kene's Cribs. Kene's Cribs is a real estator company which provides the clients with the houses.

- The houses limited to the clients are only limited to the clients' dreams. In order to further navigate the

- website, use the navigation bar to switch between pages. Listings page is for browsing houses, Agents page

- is for browsing the estators, the Contact Us page is for the contacting us and the login page is for our

- members who want to benefit from our deals. Above are some houses which can interest you. Feel free to

- click the buttons above to explore the houses you want.

+

{t("Desc")}

+

{t("Home1")}

+ {t("Home2")}

+ {t("Home3")}

+ {t("Home4")}

+ {t("Home5")}

+ {t("Home6")}

@@ -98,4 +100,4 @@ class Homepage extends Component { } } -export default Homepage; +export default withTranslation()(Homepage); diff --git a/src/images/bg1.jpg b/src/images/bg1.jpg new file mode 100644 index 0000000..9caa986 Binary files /dev/null and b/src/images/bg1.jpg differ diff --git a/src/images/fbg1.png b/src/images/fbg1.png new file mode 100644 index 0000000..1e09172 Binary files /dev/null and b/src/images/fbg1.png differ diff --git a/src/images/fbg2.png b/src/images/fbg2.png new file mode 100644 index 0000000..fe37465 Binary files /dev/null and b/src/images/fbg2.png differ diff --git a/src/images/fbg3.png b/src/images/fbg3.png new file mode 100644 index 0000000..8b8019e Binary files /dev/null and b/src/images/fbg3.png differ diff --git a/src/listings-page/ListingsPage.css b/src/listings-page/ListingsPage.css index 80ebdc9..706b707 100644 --- a/src/listings-page/ListingsPage.css +++ b/src/listings-page/ListingsPage.css @@ -1,3 +1,9 @@ +body{ + /*background-image: url("../images/bg1.jpg"); + background-position: 0px 60px; + */ +} + .booking_button{ text-align: right; } @@ -6,4 +12,33 @@ font-size: 40px; font-weight:bolder; padding-right: 5%; -}; \ No newline at end of file +} + +.search{ + display:inline-block; + margin:3% 0%; +} + +.compass{ + height:25px; + width:25px; +} +.buttonImg{ + background-color: transparent; + border: none !important; + +} + +.main_borders{ + padding:0% 10% 4% 10%; + +} + +.map_style{ + text-align: center; +} + +.filters{ + margin: 2% 0% +} + diff --git a/src/listings-page/ListingsPage.js b/src/listings-page/ListingsPage.js index 4d17a58..c9bbe8c 100644 --- a/src/listings-page/ListingsPage.js +++ b/src/listings-page/ListingsPage.js @@ -2,198 +2,354 @@ import React, { useState, useEffect, Component } from "react"; import { GoogleMap, - withScriptjs, - withGoogleMap, + useLoadScript, Marker, - InfoWindow -} from "react-google-maps"; -import * as listingData from "./data/property-data.json"; + InfoWindow, +} from "@react-google-maps/api"; +import usePlacesAutocomplete, { + getGeocode, + getLatLng, +} from "use-places-autocomplete"; +import { + Combobox, + ComboboxInput, + ComboboxPopover, + ComboboxList, + ComboboxOption, +} from "@reach/combobox"; +import { formatRelative } from "date-fns"; +import Select from "react-select"; + +import "@reach/combobox/styles.css"; import mapStyles from "./mapStyles"; +import * as listingData from "./data/property-data.json"; import "./ListingsPage.css"; -function Map() { +import compassImg from "./compass.svg"; - const [selectedProperty, setSelectedProperty] = useState(null); +const libraries = ["places"]; +const mapContainerStyle = { + height: "700px", + width: "100vm", +}; +const options = { + styles: mapStyles, + disableDefaultUI: true, + zoomControl: true, +}; +const center = { + lat: 45.4231, + lng: -75.6931, +}; + +export default function ListingsPage() { + const price_filter = [ + { + value: null, + label: "Any", + }, + { + value: 100000, + label: "$100000", + }, + { + value: 200000, + label: "$200000", + }, + { + value: 300000, + label: "$300000", + }, + { + value: 400000, + label: "$400000", + } + ]; + + const bed_filter = [ + { + value: null, + label: "Any", + }, + { + value: 1, + label: "One Bed", + }, + { + value: 2, + label: "Two Beds", + }, + { + value: 3, + label: "Three Beds", + } + + ]; + + const bath_filter = [ + { + value: null, + label: "Any", + }, + { + value: 1, + label: "One Bath", + }, + { + value: 2, + label: "Two Baths", + }, + { + value: 3, + label: "Three Baths", + } + ]; + + //console.log(data1[0]); + + const { isLoaded, loadError } = useLoadScript({ + googleMapsApiKey: `https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places&key= + AIzaSyC5TiZoTEwEcB_HUZRhe_rXrcSWW1Z5x8I`, + libraries, + }); + + const [selectedBudget, setSelectedBudget] = useState(null); + const [selectedBeds, setSelectedBeds] = useState(null); + const [selectedBaths, setSelectedBaths] = useState(null); + + const [markers, setMarkers] = React.useState([]); + const [selected, setSelected] = React.useState(null); + + const [budget, setBudget] = useState(null); + const [bed, setBed] = useState(null); + const [bath, setBath] = useState(null); + + const mapRef = React.useRef(); + const onMapLoad = React.useCallback((map) => { + mapRef.current = map; + //console.log(current); + }, []); + + const panTo = React.useCallback(({ lat, lng }) => { + mapRef.current.panTo({ lat, lng }); + mapRef.current.setZoom(10); + }, []); + + if (loadError) return "Error"; + if (!isLoaded) return "Loading..."; + + // handle onChange event of the dropdown + const handleBudgetChange = (e) => { + setSelectedBudget(e); + setBudget(e.value); + + //https://stackoverflow.com/questions/54150783/react-hooks-usestate-with-object + //https://stackoverflow.com/questions/57341541/removing-object-from-array-using-hooks-usestate/57341724 + }; + const handleBedChange = (e) => { + setSelectedBeds(e); + setBed(e.value); + }; + const handleBathChange = (e) => { + setSelectedBaths(e); + setBath(e.value); + }; return ( - - - {listingData.Properties.map(house => ( - - { - setSelectedProperty(house) - }} - - icon={{ - url: "homes-3.svg", - scaledSize: new window.google.maps.Size(50, 50) - }} +
+
+ + + - - ))} - - - {selectedProperty && ( - - { - setSelectedProperty(null); - }} - > -
-

{selectedProperty.ADDRESS}

-

{selectedProperty.DESC}

-
-
- -
- 1 - 2 - - - -
- -
- - - -
- -
- - -
- - -
-
- - )} - - - - - - - - - ); - -} - -const MapWrapped = withScriptjs(withGoogleMap(Map)) - - -class ListingsPage extends Component { - render() { - return ( - -
- -
- - - {/* - - - -
- - -
- - - - - -
- -
- */} - -
- -
- -
-
-

Map

-
-
- -
- } - containerElement={
} - mapElement={
} - /> -
- - - - -
- -
- - - - -
- - + - + - + - + + {t("Contact-Error1")} +
- - + + + {t("Contact-Error1")} +
@@ -90,24 +96,28 @@ class ContactUs extends Component { - - + + + {t("Contact-Error2")} +
- - + + + {t("Contact-Error2")} +
@@ -115,31 +125,34 @@ class ContactUs extends Component { - + value.length === 0}>{t("Contact-Error2")} + !/\S+@\S+/.test(value)}>{t("Contact-Error3")}