diff --git a/README.md b/README.md index 4b4bb17..fdf5031 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ # SEG3125-LAB8 -The Real Estate Website using React made by Ruchira Perrera, Sam Oyediran, Batuhan Basoglu, and Kene Ojukwu +The Real Estate Website using React made by Ruchira Perrera, Sam Oyediran, Batuhan Basoglu, and Kene Ojukwu. +After npm start execute the command "node src/shared-components/contact-us/index.js" in order to set up the backend of the contact form. + # Authors - Batuhan Basoglu, 300001274 - ArcticHawk1 diff --git a/package-lock.json b/package-lock.json index 3c81fb4..1110de5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1310,6 +1310,15 @@ "@hapi/hoek": "^8.3.0" } }, + "@hypnosphi/create-react-context": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", + "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", + "requires": { + "gud": "^1.0.0", + "warning": "^4.0.3" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2542,6 +2551,11 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" }, + "@types/lodash": { + "version": "4.14.168", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", + "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==" + }, "@types/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", @@ -3315,6 +3329,14 @@ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.3.tgz", "integrity": "sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ==" }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -4691,6 +4713,15 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -5715,6 +5746,11 @@ } } }, + "email-validator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz", + "integrity": "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==" + }, "emittery": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", @@ -7024,6 +7060,11 @@ "path-exists": "^4.0.0" } }, + "flag-icon-css": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.5.0.tgz", + "integrity": "sha512-pgJnJLrtb0tcDgU1fzGaQXmR8h++nXvILJ+r5SmOXaaL/2pocunQo2a8TAXhjQnBpRLPtZ1KCz/TYpqeNuE2ew==" + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -7081,6 +7122,11 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -7217,6 +7263,35 @@ "mime-types": "^2.1.12" } }, + "formik": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.6.tgz", + "integrity": "sha512-Kxk2zQRafy56zhLmrzcbryUpMBvT0tal5IvcifK5+4YNGelKsnrODFJ0sZQRMQboblWNym4lAW3bt+tf2vApSA==", + "requires": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.14", + "lodash-es": "^4.17.14", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + } + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -7473,6 +7548,11 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "optional": true }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -7775,6 +7855,14 @@ "terser": "^4.6.3" } }, + "html-parse-stringify2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz", + "integrity": "sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o=", + "requires": { + "void-elements": "^2.0.1" + } + }, "html-webpack-plugin": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", @@ -8007,6 +8095,37 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" }, + "i18next": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.1.tgz", + "integrity": "sha512-JLruWDEQ3T6tKT6P7u+DsNtToMHUwUcQIYOMRcnNBdUhSfKkoIDUKdVDKgGtmqr//LrirxjADUdr3d5Gwbow6g==", + "requires": { + "@babel/runtime": "^7.12.0" + } + }, + "i18next-browser-languagedetector": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.0.tgz", + "integrity": "sha512-NXbr/qPqkg6VyUwPrzmVOAafqIk1zdjzhYVxZWoSi338XEGmuOeroEglLdR8nJUJcf5BfOSHva80tqCPwXFTFQ==", + "requires": { + "@babel/runtime": "^7.5.5" + } + }, + "i18next-http-backend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-1.2.1.tgz", + "integrity": "sha512-9L2sa+wybqi57/+VsrJPo5DCI7WLoudaK12xz0okYSmsi3Izyj7sCgrYL52WHy/O3BFY9HGORBwSwlD1WYuH6Q==", + "requires": { + "node-fetch": "2.6.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10060,6 +10179,16 @@ } } }, + "joi-browser": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/joi-browser/-/joi-browser-13.4.0.tgz", + "integrity": "sha512-TfzJd2JaJ/lg/gU+q5j9rLAjnfUNF9DUmXTP9w+GfmG79LjFOXFeM7hIFuXCBcZCivUDFwd9l1btTV9rhHumtQ==" + }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10803,6 +10932,11 @@ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "optional": true }, + "nanoclone": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==" + }, "nanoid": { "version": "3.1.22", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", @@ -11042,6 +11176,11 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==" }, + "nodemailer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.5.0.tgz", + "integrity": "sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw==" + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -11672,6 +11811,11 @@ "ts-pnp": "^1.1.6" } }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -12819,6 +12963,11 @@ "warning": "^4.0.0" } }, + "property-expr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.4.tgz", + "integrity": "sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg==" + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -12989,6 +13138,20 @@ "object-assign": "^4.1.1" } }, + "react-alert": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-alert/-/react-alert-7.0.2.tgz", + "integrity": "sha512-oUxPk9DMaEm93Y33mdAmy4vDPZauMj30di4p4+QuZ3JOyoFSFteLSsjlhTkDjkyvJuVxToi3bbnsxehRHEPpeg==", + "requires": { + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" + } + }, + "react-alert-template-basic": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/react-alert-template-basic/-/react-alert-template-basic-1.0.0.tgz", + "integrity": "sha512-6x5Us0oc+jj8BDNkvSWfQMESk5SdyGKitXdLb7CwIlIlecyATjCTKSWpLABg8tpKAPOSJu4Dv/fYUqxXEio/XA==" + }, "react-app-polyfill": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", @@ -13153,6 +13316,33 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, + "react-fa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-fa/-/react-fa-5.0.0.tgz", + "integrity": "sha512-pBEJigNkDJPAP/P9mQXT55VbJbbtwqi4ayieXuFvGpd+gl3aZ9IbjjVKJihdhdysJP0XRgrSa3sT3yOmkQi8wQ==", + "requires": { + "font-awesome": "^4.3.0", + "prop-types": "^15.5.8" + } + }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "react-form-with-constraints": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/react-form-with-constraints/-/react-form-with-constraints-0.16.0.tgz", + "integrity": "sha512-xt6geBao/+i3pcfNKDHYIJCHI+Ii6mhNN5rhL5l7BnKnQ04KPIRkWmrBNrhfptwV2LIc21hLH6lYZMN5BaKkvQ==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-form-with-constraints-bootstrap4": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/react-form-with-constraints-bootstrap4/-/react-form-with-constraints-bootstrap4-0.16.0.tgz", + "integrity": "sha512-eauxGmqAdLEFCAwZxWWO6QtAP10rS/mvZRWC9qHqGeRj1qIlVZ73egi5pJSgnpDUDeqScmwADQvmn8GsUyNdXg==" + }, "react-google-maps": { "version": "9.4.5", "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", @@ -13181,6 +13371,20 @@ } } }, + "react-hook-form": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.0.0.tgz", + "integrity": "sha512-cXoKnNnQe5IxieesTu+enDS7Jfh8lyX8mSMwzNvC4L0k6R6yQ2F8rIhvBbzlFOGSoeEnsR64dvMZ1izWRCAw6A==" + }, + "react-i18next": { + "version": "11.8.12", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.8.12.tgz", + "integrity": "sha512-M2PSVP9MzT/7yofXfCOF5gAVotinrM4BXWiguk8uFSznJsfFzTjrp3K9CBWcXitpoCBVZGZJ2AnbaWGSNkJqfw==", + "requires": { + "@babel/runtime": "^7.13.6", + "html-parse-stringify2": "^2.0.1" + } + }, "react-input-autosize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", @@ -13214,6 +13418,20 @@ "warning": "^4.0.3" } }, + "react-popper": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", + "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", + "requires": { + "@babel/runtime": "^7.1.2", + "@hypnosphi/create-react-context": "^0.3.1", + "deep-equal": "^1.1.1", + "popper.js": "^1.14.4", + "prop-types": "^15.6.1", + "typed-styles": "^0.0.7", + "warning": "^4.0.2" + } + }, "react-refresh": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", @@ -13364,6 +13582,39 @@ "prop-types": "^15.6.2" } }, + "reactstrap": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-8.9.0.tgz", + "integrity": "sha512-pmf33YjpNZk1IfrjqpWCUMq9hk6GzSnMWBAofTBNIRJQB1zQ0Au2kzv3lPUAFsBYgWEuI9iYa/xKXHaboSiMkQ==", + "requires": { + "@babel/runtime": "^7.12.5", + "classnames": "^2.2.3", + "prop-types": "^15.5.8", + "react-popper": "^1.3.6", + "react-transition-group": "^2.3.1" + }, + "dependencies": { + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + } + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -15500,6 +15751,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -15619,6 +15875,11 @@ "mime-types": "~2.1.24" } }, + "typed-styles": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", + "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -15974,6 +16235,11 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -17502,6 +17768,20 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "yup": { + "version": "0.32.9", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.9.tgz", + "integrity": "sha512-Ci1qN+i2H0XpY7syDQ0k5zKQ/DoxO0LzPg8PAR/X4Mpj6DqaeCoIYEEjDJwhArh3Fa7GWbQQVDZKeXYlSH4JMg==", + "requires": { + "@babel/runtime": "^7.10.5", + "@types/lodash": "^4.14.165", + "lodash": "^4.17.20", + "lodash-es": "^4.17.15", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + } } } } diff --git a/package.json b/package.json index 7730a1c..0a896a8 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,31 @@ "@testing-library/jest-dom": "^5.11.10", "@testing-library/react": "^11.2.5", "@testing-library/user-event": "^12.8.3", + "axios": "^0.21.1", "bootstrap": "^4.6.0", + "cors": "^2.8.5", + "email-validator": "^2.0.4", + "express": "^4.17.1", + "flag-icon-css": "^3.5.0", + "formik": "^2.2.6", + "i18next": "^20.2.1", + "i18next-browser-languagedetector": "^6.1.0", + "i18next-http-backend": "^1.2.1", + "joi-browser": "^13.4.0", + "js-cookie": "^2.2.1", + "nodemailer": "^6.5.0", "react": "^17.0.2", + "react-alert": "^7.0.2", + "react-alert-template-basic": "^1.0.0", "react-bootstrap": "^1.5.2", "react-bootstrap-carousel": "^4.1.1", "react-dom": "^17.0.2", + "react-fa": "^5.0.0", + "react-form-with-constraints": "^0.16.0", + "react-form-with-constraints-bootstrap4": "^0.16.0", "react-google-maps": "^9.4.5", + "react-hook-form": "^7.0.0", + "react-i18next": "^11.8.12", "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", "react-select": "^4.3.0", @@ -20,7 +39,9 @@ "@reach/combobox": "^0.10.2", "@react-google-maps/api": "^1.9.0", "date-fns": "^2.13.0", - "use-places-autocomplete": "^1.3.5" + "use-places-autocomplete": "^1.3.5", + "reactstrap": "^8.9.0", + "yup": "^0.32.9" }, "scripts": { "start": "react-scripts start", @@ -48,5 +69,18 @@ }, "devDependencies": { "create-react-component-folder": "^0.3.7" - } + }, + "description": "The Real Estate Website using React made by Ruchira Perrera, Sam Oyediran, Batuhan Basoglu, and Kene Ojukwu.", + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/ArcticHawk1/SEG3125-LAB8.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/ArcticHawk1/SEG3125-LAB8/issues" + }, + "homepage": "" } diff --git a/public/assets/locales/en/translations.json b/public/assets/locales/en/translations.json new file mode 100644 index 0000000..02efad8 --- /dev/null +++ b/public/assets/locales/en/translations.json @@ -0,0 +1,56 @@ +{ + "Welcome_to_React": "Welcome to React and react-i18next", + "Login_header": "Kene's Cribs", + "Login_message": "Welcome please back, please sign in!", + "Login_email": "Email address", + "Login_password": "Password", + "Login_remember_me": "remember me", + "Login_submit_button": "Submit", + "Account_header": "Personal Information", + "Account_message": "You can update/edit your account information here", + "Account_first_name": "First Name", + "Account_last_name": "Last Name", + "Account_email": "Email", + "Account_phone_number": "Phone Number", + "Account_current_password": "Current Password", + "Account_new_password": "New password", + "Account_update_button": "Update", + "Footer_message": "Copyright SEG3125 - Group 3", + "Nav_brand": "Kene's Cribs", + "Nav_Home": "Home", + "Nav_Listings": "Listings", + "Nav_Agents": "Agents", + "Nav_Contact_Us": "Contact Us", + "Nav_listing_page": "listing-page", + "Nav_Login": "Login", + "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." + + + +} \ No newline at end of file diff --git a/public/assets/locales/fr/translations.json b/public/assets/locales/fr/translations.json new file mode 100644 index 0000000..80b4871 --- /dev/null +++ b/public/assets/locales/fr/translations.json @@ -0,0 +1,53 @@ +{ + "Welcome_to_React": "Bienvenue a react et react-i18next", + "Login_header": "Berceaux de Kene", + "Login_message": "Bienvenue, merci de vous connecter!", + "Login_email": "Adresse e-mail", + "Login_password": "Mot de passe", + "Login_remember_me": "souviens-toi de moi", + "Login_submit_button": "Nous faire parvenir", + "Account_header": "Informations personnelles", + "Account_message": "Vous pouvez mettre à jour / modifier les informations de votre compte ici", + "Account_first_name": "Prénom", + "Account_last_name": "Nom de famille", + "Account_email": "E-mail", + "Account_phone_number": "Numéro de téléphone", + "Account_current_password": "Mot de passe actuel", + "Account_new_password": "Nouveau mot de passe", + "Account_update_button": "Mettre à jour", + "Footer_message": "Copyright SEG3125 - Groupe 3", + "Nav_brand": "Berceaux de Kene", + "Nav_Home": "Accueil", + "Nav_Listings": "Annonces", + "Nav_Agents": "Agents", + "Nav_Contact_Us": "Nous contacter", + "Nav_listing_page": "page de liste", + "Nav_Login": "Connexion", + "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." +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico index a11777c..1c48648 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index 39d0714..c776bdf 100644 --- a/public/index.html +++ b/public/index.html @@ -57,7 +57,7 @@ Kene's Cribs - +
*/} +
+ + +
+ + + + + - - - - ); - } + + + + + + + + + ); } export default App; diff --git a/src/agent-page/AgentPage.js b/src/agent-page/AgentPage.js index 0d90622..e3fe3c9 100644 --- a/src/agent-page/AgentPage.js +++ b/src/agent-page/AgentPage.js @@ -1,39 +1,42 @@ import React, { Component } from "react"; import Agents from './Agents' import './agent-page.css'; -import Carousel from 'react-bootstrap/Carousel' import Agent1 from "../images/Agent1.jpg"; import Agent2 from "../images/Agent2.jpg"; import Agent3 from "../images/Agent3.jpg"; import Agent4 from "../images/Agent4.jpg"; import Agent5 from "../images/Agent5.jpg"; import Agent6 from "../images/Agent6.jpg"; - class AgentPage extends Component { - state={ - agents: [ - - {title:'head sales assistant',name: 'Michael', src: Agent1,word:'Michael has a genuine passion for helping others and for giving back to the community.',id:1}, - {title:'sales assistant',name: 'Jin', src: Agent2,word:'I have a passion for assisting clients with various real estate needs.',id:2}, - {title:'sales assistant',name: 'Anita', src: Agent3,word:'Anita looks forward to servicing you to her fullest potential, building long-lasting relationships and making your real estate experience a smooth and memorable one.',id:3}, - {title:'sales assistant',name: 'Alex', src: Agent4,word:'Since getting licensed in 2010 Alex has consistently been a top producing agent in the GTA',id:4}, - {title:'sales assistant',name: 'Xuan', src: Agent5,word:'Xuan grew up in the GTA, and he explored many different neighborhoods in and surrounding Toronto. ',id:5}, - {title:'sales assistant',name: 'Walter', src: Agent6,word:'Walter Henry has always been one to follow his passion. At 13 years old, he started his career as a competitive gymnast.Walter will be certain that you feel informed and at ease throughout the entire process.',id:6}, +class AgentPage extends Component { + state = { + agents: [ - - ] - } - render(){ - return( -
-
-

Meet the team

-
- - -
- ) + { title: 'head sales assistant', name: 'Michael', src: Agent1, word: 'Michael has a genuine passion for helping others and for giving back to the community.', id: 1 }, + { title: 'sales assistant', name: 'Jin', src: Agent2, word: 'I have a passion for assisting clients with various real estate needs.', id: 2 }, + { title: 'sales assistant', name: 'Anita', src: Agent3, word: 'Anita looks forward to servicing you to her fullest potential, building long-lasting relationships and making your real estate experience a smooth and memorable one.', id: 3 }, + { title: 'sales assistant', name: 'Alex', src: Agent4, word: 'Since getting licensed in 2010 Alex has consistently been a top producing agent in the GTA', id: 4 }, + { title: 'sales assistant', name: 'Xuan', src: Agent5, word: 'Xuan grew up in the GTA, and he explored many different neighborhoods in and surrounding Toronto.', id: 5 }, + { title: 'sales assistant', name: 'Walter', src: Agent6, word: 'Walter Henry has always been one to follow his passion. At 13 years old, he started his career as a competitive gymnast.Walter will be certain that you feel informed and at ease throughout the entire process.', id: 6 }, + + + ] } - displayAgents= (agent) => { + render() { + return ( +
+
+

Meet the Team

+
+ +
+ +
+ + +
+ ) + } + displayAgents = (agent) => { console.log(agent); } diff --git a/src/agent-page/Agents.js b/src/agent-page/Agents.js index ef8b34e..d1f583f 100644 --- a/src/agent-page/Agents.js +++ b/src/agent-page/Agents.js @@ -1,5 +1,4 @@ import React from "react"; -import AgentPage from "./AgentPage"; /* import {Link} from 'react-router-dom' */ import Card from "react-bootstrap/Card"; import Button from "react-bootstrap/Button"; @@ -9,17 +8,19 @@ const Agents = ({ agents }) => { return (
{} - - - - {agent.title} - {agent.name} - - {agent.word} - - - - + + + + {agent.title} + {agent.name} + + {agent.word} + +
+ +
+
+
); }); diff --git a/src/agent-page/agent-page.css b/src/agent-page/agent-page.css index 6126416..e55a5b4 100644 --- a/src/agent-page/agent-page.css +++ b/src/agent-page/agent-page.css @@ -16,4 +16,14 @@ display: flex; justify-content: center; align-items: center; + } + + .agent{ + padding-left: 16%; + padding-top: 15px; + } + + .buttonfriend{ + padding-top: 15px; + padding-left: 120px; } \ No newline at end of file diff --git a/src/homePage/Homepage.css b/src/homePage/Homepage.css index 2d082b7..018d5c6 100644 --- a/src/homePage/Homepage.css +++ b/src/homePage/Homepage.css @@ -1,21 +1,33 @@ .colored-section { - background-color: #ffe609; + background-color: #e7dec8; color: #000000; white-space: nowrap; } + .white-section { background-color: #ffffff; + padding-top: 10rem; + padding-bottom: 5rem; + padding-left: 18%; } #title .container-fluid { - padding: 4% 34% 6%; + padding: 5% 34% 6%; text-align: left; font-family: "Georgia"; } +#features .container-fluid { + padding: 2% 14% 4%; + text-align: left; + font-family: "Georgia"; +} + + .housesIntro{ - padding: 4% 5%; + width: 1200px; + height: 800px; } .contactIntro{ @@ -24,23 +36,9 @@ padding-bottom: 80px; } -.carouselSection { - margin: 2% 8%; -} - .headerImg{ - width: 2000px; - height: 600px; -} - -.heading-1{ - padding-left: 40%; - padding-top: 10%; - padding-bottom: 20px; -} - -.formhelper{ - padding-bottom: 15px; + width: 1200px; + height: 800px; } .button-1 { @@ -59,4 +57,70 @@ .buttonhelper { padding-left: 45%; padding-top: 15px; +} + +.buttonka{ + padding-top: 2px; +} + +.prev-icon, +.next-icon { + height: 210px; + width: 100px; + outline: black; + background-size: 100%, 100%; + border-radius: 50%; + background-image: none; + text-shadow: 2px 2px 5px black; +} + +.next-icon:after +{ + content: '>'; + font-size: 140px; + color: rgb(255, 255, 255); + text-shadow: 2px 2px 5px black; +} + +.prev-icon:after { + content: '<'; + font-size: 140px; + color: rgb(255, 255, 255); + text-shadow: 2px 2px 5px black; +} + +ol.carousel-indicators { + position: absolute; + bottom: 5px; + margin: 0; + left: 0; + right: 0; + width: auto; + } + + ol.carousel-indicators li, + ol.carousel-indicators li.active { + width: 1rem; + height: 1rem; + margin: 0; + border-radius: 50%; + border: 0; + background: transparent; + box-shadow: 0 0 1px 1px black; + } + + ol.carousel-indicators li { + background: rgb(255, 255, 255); + margin-left: .5rem; + margin-right: .5rem; + box-shadow: 0 0 1px 1px black; + } + + ol.carousel-indicators li.active { + background: #17a2b8; + box-shadow: 0 0 1px 1px black; + } + +.homePage{ + padding-bottom: 15%; } \ No newline at end of file diff --git a/src/homePage/Homepage.js b/src/homePage/Homepage.js index f95a614..dc2ce32 100644 --- a/src/homePage/Homepage.js +++ b/src/homePage/Homepage.js @@ -1,107 +1,103 @@ import { Component } from "react"; -import './Homepage.css'; -import house1 from '../images/house1.jpg'; -import house2 from '../images/house2.jpg'; -import house3 from '../images/house3.jpg'; -import Carousel from 'react-bootstrap/Carousel' +import "./Homepage.css"; +import house1 from "../images/house1.jpg"; +import house2 from "../images/house2.jpg"; +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"; + + class Homepage extends Component { - constructor(props) { - super(props); - this.state = { - firstname: '', - lastname: '', - email: '', - message: '' - } - } + constructor(props) { + super(props); + this.state = { + nextIcon: , + prevIcon: , + }; + } - render() { - return ( -
-
-
-
-
-

YOU ARE NOT BUYING A HOUSE,

-

YOU ARE BUYING A LIFESTYLE.

-
-
-
-
-
-
- - - First House - - - Second House - - - - Third House - - - -
-
-
-
-
-

Contact Us

-
-
-
- -
-
- -
-
-
- -
-
-