diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/README.md b/React-JS-Projects/Intermediate/Tspot-Travel-App/README.md new file mode 100644 index 00000000..1af83f00 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/README.md @@ -0,0 +1,70 @@ +

šŸ’„ TSPOT Travel App šŸ’„

+ + + +

Tech Stack Used šŸŽ®

+ + +
+ + ![HTML5](https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge&logo=html5&logoColor=white) + ![CSS3](https://img.shields.io/badge/css3-%231572B6.svg?style=for-the-badge&logo=css3&logoColor=white) + ![JavaScript](https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E) + ![React](https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB) +
+ + +![Line](https://github.com/Avdhesh-Varshney/WebMasterLog/assets/114330097/4b78510f-a941-45f8-a9d5-80ed0705e847) + + + +## :zap: Description šŸ“ƒ + +
+ +

This is a website made using reactjs to showcase the different places of the world to the tourist to go there for a tour. +

+

+ + + + + +## :zap: How to run it? šŸ•¹ļø + + +Steps to run this website in your local machine is as follows : +1. Fork this repository +2. Save the code on your local machine you can also clone the repository +3. Open terminal +4. Run following commands in the terminal : +5. npm install +6. npm run dev +7. Make sure you have installed node js before entering these code in the terminal + + + + +## :zap: Screenshots šŸ“ø + + + + + +![Line](https://github.com/Avdhesh-Varshney/WebMasterLog/assets/114330097/4b78510f-a941-45f8-a9d5-80ed0705e847) + + + +

Developed By Maheshwari Love šŸ‘¦

+

+ + + + + + +

+ +

Happy Coding šŸ§‘ā€šŸ’»

+ +

Show some  ā¤ļø  by  šŸŒŸ  this repository!

diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/final-readme.txt b/React-JS-Projects/Intermediate/Tspot-Travel-App/final-readme.txt new file mode 100644 index 00000000..008ede22 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/final-readme.txt @@ -0,0 +1,2 @@ +A react based travel website where everything is a component starting from the Navbar and ending with footer. Props are also passed down from one component to another. BrowserRouter, Link, Switch, Route are used to navigate between components or should I say pages. I've also created the sub-pages and added some additional features like photo gallery with filter, etc. I've also used useState hook for state management and useEffect to re-render while user-interaction :) +https://tspot-travel-app.netlify.app/ \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/package.json b/React-JS-Projects/Intermediate/Tspot-Travel-App/package.json new file mode 100644 index 00000000..c5ae3d22 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/package.json @@ -0,0 +1,48 @@ +{ + "name": "react-travel-website", + "version": "0.1.0", + "private": true, + "dependencies": { + "@material-ui/core": "^4.12.1", + "@material-ui/icons": "^4.11.2", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^11.2.7", + "@testing-library/user-event": "^12.8.3", + "bootstrap": "^5.0.2", + "node-sass": "^6.0.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-inner-image-zoom": "^2.0.2", + "react-router": "^5.2.0", + "react-router-dom": "^5.2.0", + "react-scripts": "4.0.3", + "reactstrap": "^8.9.0", + "simple-react-lightbox": "^3.6.6", + "styled-components": "^5.3.0", + "web-vitals": "^1.1.2" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/favicon.ico b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/favicon.ico new file mode 100644 index 00000000..a11777cc Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/favicon.ico differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img01.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img01.jpeg new file mode 100644 index 00000000..6cfdd93c Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img01.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img02.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img02.jpeg new file mode 100644 index 00000000..d8cd40ce Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img02.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img03.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img03.jpeg new file mode 100644 index 00000000..09940ede Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img03.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img04.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img04.jpeg new file mode 100644 index 00000000..3c40744e Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img04.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img05.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img05.jpeg new file mode 100644 index 00000000..79a17092 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img05.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img06.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img06.jpeg new file mode 100644 index 00000000..5c366823 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img06.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img07.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img07.jpeg new file mode 100644 index 00000000..7410d180 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img07.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img08.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img08.jpeg new file mode 100644 index 00000000..fd8c240e Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img08.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img09.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img09.jpeg new file mode 100644 index 00000000..50ee57fa Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img09.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img10.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img10.jpeg new file mode 100644 index 00000000..b0b5c5be Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img10.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img11.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img11.jpeg new file mode 100644 index 00000000..6a963763 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img11.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img12.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img12.jpeg new file mode 100644 index 00000000..f9259f2f Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img12.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img13.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img13.jpeg new file mode 100644 index 00000000..6c4ca49c Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img13.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img14.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img14.jpeg new file mode 100644 index 00000000..11e33cb4 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img14.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img15.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img15.jpeg new file mode 100644 index 00000000..ec0a04c3 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img15.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img16.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img16.jpeg new file mode 100644 index 00000000..a6beea14 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/destination-img16.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-1.jpg new file mode 100644 index 00000000..460b9fe2 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-2.jpg new file mode 100644 index 00000000..bac13a09 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-3.jpg new file mode 100644 index 00000000..3d6b0884 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-4.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-4.jpg new file mode 100644 index 00000000..538d5d7c Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-4.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-5.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-5.jpg new file mode 100644 index 00000000..4c438148 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-5.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-6.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-6.jpg new file mode 100644 index 00000000..a373b9af Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-6.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-7.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-7.jpg new file mode 100644 index 00000000..44a1502a Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-7.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-8.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-8.jpg new file mode 100644 index 00000000..a9ff2b51 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-8.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-9.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-9.jpg new file mode 100644 index 00000000..dbde0850 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-9.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-home.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-home.jpg new file mode 100644 index 00000000..9d214db3 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/img-home.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img1.jpg new file mode 100644 index 00000000..40063521 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img2.jpg new file mode 100644 index 00000000..a2a369bd Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img3.jpg new file mode 100644 index 00000000..30a3fc5e Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s1-img3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img1.jpg new file mode 100644 index 00000000..8791ec03 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img2.jpg new file mode 100644 index 00000000..cba33713 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img3.jpg new file mode 100644 index 00000000..7254e8bb Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s2-img3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img1.jpg new file mode 100644 index 00000000..65a9073d Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img2.jpg new file mode 100644 index 00000000..55c5c3d7 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img3.jpg new file mode 100644 index 00000000..6d824d55 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s3-img3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img1.jpg new file mode 100644 index 00000000..b3e814c8 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img2.jpg new file mode 100644 index 00000000..db1f91ed Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img3.jpg new file mode 100644 index 00000000..2c6769a1 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s4-img3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img1.jpg new file mode 100644 index 00000000..311687c1 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img2.jpg new file mode 100644 index 00000000..c707d71a Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img3.jpg new file mode 100644 index 00000000..4e9ad9a7 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s5-img3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img1.jpg new file mode 100644 index 00000000..3721ec1d Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img2.jpg new file mode 100644 index 00000000..933c1d36 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img3.jpg new file mode 100644 index 00000000..0a8aa8ff Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/images/s6-img3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/index.html b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/index.html new file mode 100644 index 00000000..5b14ae18 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/index.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + TSPOT app + + + +
+ + + diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/logo192.png b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/logo192.png new file mode 100644 index 00000000..fc44b0a3 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/logo192.png differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/logo512.png b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/logo512.png new file mode 100644 index 00000000..a4e47a65 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/logo512.png differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/manifest.json b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/manifest.json new file mode 100644 index 00000000..080d6c77 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/public/robots.txt b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/robots.txt new file mode 100644 index 00000000..e9e57dc4 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/screenshot.webp b/React-JS-Projects/Intermediate/Tspot-Travel-App/screenshot.webp new file mode 100644 index 00000000..71c71809 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/screenshot.webp differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.css b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.css new file mode 100644 index 00000000..74b5e053 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.js new file mode 100644 index 00000000..dd67ea69 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.js @@ -0,0 +1,34 @@ +import {BrowserRouter as Router, Switch, Route, Link} from 'react-router-dom'; + +import './App.scss'; +import Navbar from './components/Navbar' +import Footer from './components/Footer'; +import Home from './components/pages/Home'; +import Products from './components/pages/Products'; +import ProductDetail from './components/pages/ProductDetail'; +import Services from './components/pages/Services'; +import Destinations from './components/pages/Destinations'; +import SignUp from './components/pages/SignUp'; +import Login from './components/pages/Login'; +function App() { + return ( +
+ + + + + + + + + + + + +
+ ); +} + +export default App; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.scss b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.scss new file mode 100644 index 00000000..2fdc9ec4 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.scss @@ -0,0 +1,499 @@ +@import url('https://fonts.googleapis.com/css2?family=PT+Sans:wght@400;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Kaushan+Script&display=swap'); +$dark-red:#740316; +$dark-green: #1a8755; +$dark-green-hover: #084d2d; +$dark-blue:#180374; +$white:#fff; +$light-gray:#cfcfcf; +$clr-grey-5: hsl(210, 22%, 49%); +$font-family-kaushan-script:'Kaushan Script', cursive; +* { + box-sizing: border-box; + margin: 0; + padding: 0; + font-family: 'PT Sans', sans-serif; + } + p{ + margin-bottom:0 !important; + } + .img-fluid{ + max-width: 100%; + height:auto; + } + .home, + .services-banner, + .products, + .sign-up { + display: flex; + height: 90vh; + align-items: center; + justify-content: center; + font-size: 3rem; + } + + .services-banner { + background-image: url('./images/img-2.jpg'); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + color: #fff; + font-size: 100px; + } + + .products { + background-image: url('./images/img-1.jpg'); + background-position: center; + background-size: fill; + background-repeat: no-repeat; + color: #fff; + font-size: 100px; + } + + .sign-up { + background-image: url('./images/img-8.jpg'); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + color: #fff; + font-size: 100px; + } + +/*-- destinations gallery css starts --*/ +.destinations{ + .tags { + text-align: center; + padding: 20px 0px; + background-color: rgb(43, 92, 226); + } + + .tag { + outline: none; + border: none; + color: #eee; + margin: 0px 10px; + background-color: transparent; + cursor: pointer; + } + + .active { + font-weight: bold; + border-bottom: 1px solid #eee; + } + .container { + width: 80%; + margin: auto; + display: grid; + grid-template-columns: auto auto; + gap: 10px; + } + + .image-card { + padding: 5px; + margin: 5px; + border: 1px solid #ddd; + border-radius: 2px; + } + + .image { + width: 100%; + } +} + +/*-- destinations gallery css ends --*/ + +/*-- services page styles start --*/ + +.services{ + + .tags{ + display: flex; + justify-content: center; + width:100%; + height:90px; + align-items: center; + text-transform: uppercase; + margin: { + top:50px; + } + .tag{ + border: solid #19242f; + padding:10px 30px; + background-color: #fff; + } + .active{ + color: #fff; + background:#19242f !important; + } + } + .services-data{ + padding: { + top:0px; + bottom:50px; + } + .service-card{ + margin: { + bottom: 10px; + } + &:last-child{ + margin: { + bottom: 0px; + } + } + .service-data{ + background-color: #eff; + padding:1rem; + .service-data-heading{ + font-size: 2rem; + text-transform: uppercase; + margin: { + bottom: 15px; + } + border: { + bottom: 2px solid #ddd; + } + padding: { + bottom:5px; + } + } + .service-data-style, .service-data-setting, .service-data-tag{ + margin: { + bottom:15px; + } + display: flex; + width:100%; + p:nth-of-type(1){ + width:20%; + text-align: left; + padding: { + left: 20px; + } + font-size:1.2rem; + font-weight:700; + } + p:nth-of-type(2){ + flex-grow: 2; + text-align:left; + font-size:1.1rem; + } + } + .service-data-price{ + display: flex; + width:100%; + background-color: #eee; + padding:10px; + justify-content: center; + p:nth-of-type(1){ + font-size:1.4rem; + } + p:nth-of-type(2){ + font-size:1.4rem; + font-weight:bold; + padding: { + left: 20px; + } + color:$dark-red; + } + } + .view-service-btn{ + display: flex; + width:100%; + background-color: $dark-green; + margin: { + top:15px; + bottom: 0; + } + padding:15px; + color:$white; + justify-content: center; + text-transform: uppercase; + text-decoration: none; + border-radius: 2rem; + font-size:1.1rem; + transition:all 1s ease; + &:hover{ + background-color: $dark-green-hover; + } + } + } + } + } + +} + +/*-- services page styles end --*/ + +/*-- signup and login page starts --*/ + +.signup-layout{ + padding: { + top:50px; + bottom:50px; + } + .card-title{ + background-color: $dark-blue; + padding:10px 0; + color:$white; + font-size: 1.3rem; + } + .card-text{ + input[type="submit"]{ + background-color: $dark-green; + color:$white; + font-size:1.5rem; + } + } + .btn-login{ + background-color: $dark-blue; + color:$white; + &:hover{ + color: $light-gray; + } + } +} + +.login-layout{ + padding: { + top:50px; + bottom:50px; + } + .card-title{ + background-color: $dark-blue; + padding:10px 0; + color:$white; + font-size: 1.3rem; + } + .card-text{ + input[type="submit"]{ + background-color: $dark-green; + color:$white; + font-size:1.5rem; + } + } + .btn-signup{ + background-color: $dark-blue; + color:$white; + &:hover{ + color: $light-gray; + } + } +} + +/*-- signup and login page ends --*/ + +/*-- products listing page starts--*/ + +.product-lists{ + padding: { + bottom:50px; + } + .products-container{ + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; + .product{ + display: flex; + flex-direction: column; + box-shadow: 0px 3px 1px 0px rgba(0,0,0,0.5); + padding: { + right: 15px; + left:15px; + top:10px; + } + transition: all 0.5s; + &:hover{ + cursor: pointer; + box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.5); + } + .product-img{ + height: 300px; + object-fit: contain; + object-position: center; + } + .product-info{ + + .single-product-link{ + text-decoration: none; + color: $clr-grey-5; + h4{ + font-size: 1.2rem; + } + } + } + } + } +} + +/*-- products listing page ends --*/ + +.singleItem{ + padding: { + top:50px; + bottom:50px; + } + .single-product-img{ + img{ + height: 500px; + width: 100%; + object-fit: contain; + object-position: center; + } + + } + .single-product-right{ + display: flex; + flex-direction: column; + height: 500px; + justify-content: center; + .singleProductTitle{ + font-size: 1.7rem; + font-weight: bold; + margin:20px 0; + } + .singleProductDesc{ + margin: { + bottom:40px; + } + h4{ + border: { + bottom: 1px solid $clr-grey-5; + } + padding: { + bottom:10px; + } + } + p{ + font-size:1.2rem; + color:#09204d; + font-style: italic; + } + } + ul{ + padding: { + left: 0 !important; + } + li{ + margin:20px 0; + font-size: 1.2rem; + list-style-type: none; + &:nth-child(1){ + // background-color: red; + span{ + font-family: $font-family-kaushan-script; + color: $clr-grey-5; + } + } + &:nth-child(2){ + // background-color: yellow; + span{ + font-family: $font-family-kaushan-script; + text-transform: uppercase; + color: $dark-blue; + } + } + } + } + } +} + + +// Extra small devices (portrait phones, less than 576px) +@media (max-width: 575.98px) { + ol, ul { + padding-left: 0rem !important; +} + + .product-lists .products-container{ + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 1rem; + gap: 1rem; + } + .slider-caption { + height: 400px !important; + justify-content: center; + } + +.service-slider-images { + height: 400px !important; + } + .service-data-style, .service-data-setting, .service-data-tag { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + p{ + padding-left:0 !important; + } + } + .destinations .container{ + width: 100%; + margin: auto; + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 10px; + gap: 10px; + padding: { + top:20px; + bottom:20px; + } + } +} + +// Small devices (landscape phones, 576px and up) +@media (min-width: 576px) and (max-width: 767.98px) { + ol, ul { + padding-left: 0rem !important; +} + + .product-lists .products-container{ + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 1rem; + gap: 1rem; + } + .slider-caption { + height: 400px !important; + justify-content: center; + } + +.service-slider-images { + height: 400px !important; + } + .service-data-style, .service-data-setting, .service-data-tag { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + p{ + padding-left:0 !important; + } + } + .destinations .container{ + width: 100%; + margin: auto; + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-gap: 10px; + gap: 10px; + padding: { + top:20px; + bottom:20px; + } + } +} + +// Medium devices (tablets, 768px and up) +@media (min-width: 768px) and (max-width: 991.98px) { + +} + +// Large devices (desktops, 992px and up) +@media (min-width: 992px) and (max-width: 1199.98px) { + +} + +// Extra large devices (large desktops, 1200px and up) +@media (min-width: 1200px) { + +} \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.test.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.test.js new file mode 100644 index 00000000..1f03afee --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Button.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Button.js new file mode 100644 index 00000000..896ba277 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Button.js @@ -0,0 +1,33 @@ +import React from "react"; +import "./Button.scss"; +import { Link } from "react-router-dom"; + +const STYLES = ["btn--primary", "btn--outline"]; + +const SIZES = ["btn--medium", "btn--large"]; + +export const Button = ({ + children, + type, + onClick, + buttonStyle, + buttonSize, +}) => { + // conditional button class + const checkButtonStyle = STYLES.includes(buttonStyle) + ? buttonStyle + : STYLES[0]; + // conditional button size. + const checkButtonSize = SIZES.includes(buttonSize) ? buttonSize : SIZES[0]; + + return( + + + + ) +}; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Button.scss b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Button.scss new file mode 100644 index 00000000..addd8355 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Button.scss @@ -0,0 +1,49 @@ +:root{ + --primary:#fff; +} +.btn{ + padding:8px 20px !important; + border-radius: 2px !important; + outline: none !important; + border:none !important; + cursor:pointer !important; +} +.btn--primary{ + background-color: var(--primary) !important; + color:#242424 !important; + border:1px solid var(--primary) !important; +} +.btn--outline{ + background-color:transparent !important; + color:#fff !important; + padding:8px 20px !important; + border:1px solid var(--primary) !important; + transition:all 0.3s ease-out !important; + +} +.btn--medium{ + padding:8px 20px !important; + font-size:20px !important; +} +.btn--large{ + padding:12px 26px !important; + font-size:20px !important; +} + +.btn--medium:hover{ + background: var(--primary) !important; + color:#242424 !important; + transition:all 0.3s ease-out !important; +} +.btn--large:hover{ + background: var(--primary) !important; + color:#242424 !important; + transition:all 0.3s ease-out !important; +} +button.btn.btn--outline.btn--medium { + line-height: normal; + top: 0; + margin-top: 0; + height: auto; + margin-bottom: 15px; +} \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/CardItem.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/CardItem.js new file mode 100644 index 00000000..e908855a --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/CardItem.js @@ -0,0 +1,23 @@ +import React from "react"; +import { Link } from "react-router-dom"; + +function CardItem({itemImageSrc,itemText,itemLabel,path}) { + return ( + <> +
  • + +
    + {itemLabel} +
    +
    +
    + {itemText} +
    +
    + +
  • + + ); +} + +export default CardItem; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Cards.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Cards.js new file mode 100644 index 00000000..ac34d7bb --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Cards.js @@ -0,0 +1,58 @@ +import React from "react"; +import CardItem from "./CardItem"; +import "./Cards.scss"; + +import img01 from "../images/img-1.jpg"; +import img02 from "../images/img-2.jpg"; +import img03 from "../images/img-3.jpg"; +import img04 from "../images/img-4.jpg"; +import img08 from "../images/img-8.jpg"; + + +function Cards() { + return ( +
    +

    Look at these wonderful destinations :)

    +
    +
    +
      + + +
    +
      + + + +
    +
    +
    +
    + ); +} + +export default Cards; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Cards.scss b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Cards.scss new file mode 100644 index 00000000..d1e9c270 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Cards.scss @@ -0,0 +1,140 @@ +.cards { + padding: 4rem; + background: #fff; + h1 { + text-align: center; + } + + .cards__container { + display: flex; + flex-flow: column; + align-items: center; + max-width: 1120px; + width: 90%; + margin: 0 auto; + } + + .cards__wrapper { + position: relative; + margin: 50px 0 45px; + } + + .cards__items { + margin-bottom: 24px; + + .cards__item { + display: flex; + flex: 1; + margin: 0 1rem; + border-radius: 10px; + + .cards__item__link { + display: flex; + flex-flow: column; + width: 100%; + box-shadow: 0 6px 20px rgba(56, 125, 255, 0.17); + -webkit-filter: drop-shadow(0 6px 20px rgba(56, 125, 255, 0.017)); + filter: drop-shadow(0 6px 20px rgba(56, 125, 255, 0.017)); + border-radius: 10px; + overflow: hidden; + text-decoration: none; + + .cards__item__image{ + max-width: 100%; + height: 400px; + width: 100%; + object-fit: cover; + object-position: center; + } + } + + .cards__item__pic-wrap { + position: relative; + width: 100%; + // padding-top: 67%; + overflow: hidden; + } + + .cards__item__pic-wrap::after { + content: attr(data-category); // html data attribute value into the CSS. + position: absolute; + bottom: 10px; + left:0px; + margin-left: 0px; + padding: 6px 8px; + max-width: calc((100%) - 60px); + font-size: 12px; + font-weight: 700; + color: #fff; + background-color: #1f98f4; + box-sizing: border-box; + } + + .cards__item__img { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; + width: 100%; + max-width: 100%; + height: 100%; + max-height: 100%; + object-fit: cover; + transition: all 0.2s linear; + } + + .cards__item__img:hover { + transform: scale(1.1); + } + + .cards__item__info { + padding: 20px 30px 30px; + } + + .cards__item__text { + color: #252e48; + font-size: 18px; + line-height: 24px; + } + + } + } + + + + + .fade-img { + animation-name: fade-img; + animation-duration: 2s; + } + + + } + + + + @media only screen and (min-width: 1200px) { + .content__blog__container { + width: 84%; + } + } + + @media only screen and (min-width: 1024px) { + .cards__items { + display: flex; + } + .cards__item { + margin-bottom: 2rem; + } + } + + @media only screen and (max-width: 768px) { + .cards{ + padding:0rem; + } + .cards__item{ + margin-bottom:10px !important; + } + } \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Footer.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Footer.js new file mode 100644 index 00000000..9327a846 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Footer.js @@ -0,0 +1,84 @@ +import React from "react"; +import { Button } from "./Button"; +import './Footer.scss'; +import { Link } from "react-router-dom"; +function Footer() { + return ( +
    +
    +

    + Join the Adventure newsletter to receive the best deals on your + vacation. +

    +

    + You can unsubscribe at any time. +

    +
    +
    + +
    +
    +
    +
    +
    +

    About Us

    + How it works + Testiminials + Careers + Investors + Terms of Services +
    +
    +

    Contact Info

    + Get Support + Contact US + Careers + Be a Partner + Be a member +
    +
    +

    Our Assets

    + Submit Videos + Ambassadors + Agency + Influencer + Report an issue +
    +
    +
    +
    +
    +
    + + TSPOT + +
    + + TSPOT © 2022 + +
    + + + + + + + + + + + + + + + +
    +
    +
    +
    + ); +} + +export default Footer; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Footer.scss b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Footer.scss new file mode 100644 index 00000000..9163e1e4 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Footer.scss @@ -0,0 +1,166 @@ +.footer-container { + background-color: #242424; + padding: 4rem 0 2rem 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .footer-subscription { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + + margin-bottom: 24px; + padding: 24px; + color: #fff; + } + + .footer-subscription > p { + font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', + 'Lucida Sans', Arial, sans-serif; + } + + .footer-subscription-heading { + margin-bottom: 24px; + font-size: 24px; + } + + .footer-subscription-text { + margin-bottom: 24px; + font-size: 20px; + } + + .footer-input { + padding: 8px 20px; + border-radius: 2px; + margin-right: 10px; + outline: none; + border: none; + font-size: 18px; + margin-bottom: 16px; + border: 1px solid #fff; + } + + .footer-links { + width: 100%; + max-width: 1000px; + display: flex; + justify-content: center; + } + + .footer-link-wrapper { + display: flex; + width: 100vw; + } + + .footer-link-items { + display: flex; + flex-direction: column; + align-items: center; + margin: 16px; + text-align: left; + width: 160px; + box-sizing: border-box; + flex-grow: 1; + } + + .footer-link-items h2 { + margin-bottom: 16px; + } + + .footer-link-items > h2 { + color: #fff; + } + + .footer-link-items a { + color: #fff; + text-decoration: none; + margin-bottom: 0.5rem; + } + + .footer-link-items a:hover { + color: #e9e9e9; + transition: 0.3s ease-out; + } + + .footer-email-form h2 { + margin-bottom: 2rem; + } + + .footer-input::placeholder { + color: #b1b1b1; + } + + /* Social Icons */ + .social-icon-link { + color: #fff; + font-size: 24px; + } + + .social-media { + max-width: 1000px; + width: 100%; + } + + .social-media-wrap { + display: flex; + justify-content: space-between; + align-items: center; + width: 90%; + max-width: 1000px; + margin: 40px auto 0 auto; + } + + .social-icons { + display: flex; + justify-content: space-between; + align-items: center; + width: 240px; + } + + .social-logo { + color: #fff; + justify-self: start; + margin-left: 20px; + cursor: pointer; + text-decoration: none; + font-size: 2rem; + display: flex; + align-items: center; + margin-bottom: 16px; + } + + .website-rights { + color: #fff; + margin-bottom: 16px; + } + + @media screen and (max-width: 820px) { + .footer-links { + padding-top: 2rem; + } + + .footer-input { + width: 100%; + } + + .btn { + width: 100%; + } + + .footer-link-wrapper { + flex-direction: column; + width: fit-content; + } + + .social-media-wrap { + flex-direction: column; + } + } + + @media screen and (max-width: 768px) { + } \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/HeroSection.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/HeroSection.js new file mode 100644 index 00000000..4c5f446a --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/HeroSection.js @@ -0,0 +1,31 @@ +import React from "react"; +import { Button } from "./Button"; +import './HeroSection.scss'; + +import Video2 from '../videos/video-2.mp4'; + +function HeroSection() { + return ( +
    +
    + ); +} + +export default HeroSection; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/HeroSection.scss b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/HeroSection.scss new file mode 100644 index 00000000..c373c98b --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/HeroSection.scss @@ -0,0 +1,149 @@ +$font-white: #fff; +.hero-container{ + background: url('../images/img-home.jpg') center center/cover no-repeat; + height:100vh; + width:100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + box-shadow:inset 0 0 0 1000px rgba(0,0,0,0.2); + object-fit: contain; + video{ + object-fit: cover; + width:100%; + height:100%; + position:relative; + /* z-index: -1; */ + } + .video-overlay{ + z-index: 2; + position:absolute; + h1{ + color:$font-white; + font-size:100px; + /* margin-top:-100px; */ + } + p{ + margin:10px ; + color:$font-white; + font-size:40px; + } + .hero-btns{ + margin: { + top:30px; + bottom:30px; + } + .fa-play-circle{ + margin: { + left: 5px; + } + } + } + } +} + +@media screen and (max-width:960px) { + + .hero-container{ + background: url('../images/img-home.jpg') center center/cover no-repeat; + height:100vh; + width:100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + box-shadow:inset 0 0 0 1000px rgba(0,0,0,0.2); + object-fit: contain; + video{ + object-fit: cover; + width:100%; + height:100%; + position:relative; + /* z-index: -1; */ + } + .video-overlay{ + z-index: 2; + h1{ + color:$font-white; + font-size:50px; + /* margin-top:-100px; */ + } + p{ + margin:10px ; + color:$font-white; + font-size:40px; + } + .hero-btns{ + margin: { + top:30px; + bottom:30px; + } + button { + width: 90%; + margin: 10px 0; + } + .fa-play-circle{ + margin: { + left: 5px; + } + } + } + } + } + +} + +@media screen and (max-width:768px) { + + .hero-container{ + background: url('../images/img-home.jpg') center center/cover no-repeat; + height:100vh; + width:100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + box-shadow:inset 0 0 0 1000px rgba(0,0,0,0.2); + object-fit: contain; + video{ + object-fit: cover; + width:100%; + height:100%; + position:relative; + /* z-index: -1; */ + } + .video-overlay{ + z-index: 2; + h1{ + color:$font-white; + font-size:50px; + /* margin-top:-100px; */ + } + p{ + margin:10px ; + color:$font-white; + font-size:30px; + } + .hero-btns{ + margin: { + top:30px; + bottom:30px; + } + button { + width: 90%; + margin: 10px 0; + } + .fa-play-circle{ + margin: { + left: 5px; + } + } + } + } + } + +} \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/ImageSlider.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/ImageSlider.js new file mode 100644 index 00000000..1176cffa --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/ImageSlider.js @@ -0,0 +1,125 @@ +import React,{useState,useEffect} from 'react' +import styled from 'styled-components' + +// specifying our image path. +const imagePath = process.env.PUBLIC_URL + '/images/'; + +// creating styled components +const IndicatorWrapper = styled.div` + display: flex; + flex-wrap: nowrap; + position: absolute; + bottom: 15px; + right: 15px; +`; + +const Dot = styled.div` + width: 12px; + height: 12px; + border-radius: 6px; + background-color: white; + opacity: ${(props) => (props.isActive ? 1 : 0.5)}; + margin: 5px; + transition: 750ms all ease-in-out; + cursor: pointer; +`; +// sub component. +const Indicator = ({ currentSlide, amountSlides, nextSlide }) => { + return ( + + {Array(amountSlides) + .fill(1) + .map((_, i) => ( + nextSlide(i)} + /> + ))} + + ); + }; + +const Wrapper = styled.div` + height: 100%; + display: flex; + flex-wrap: nowrap; + overflow-x: hidden; + position: relative; +`; + +const Slide = styled.div` + height: 100%; + width: 100vw; + flex-shrink: 0; + background-position: center; + background-size: cover; + transition: 750ms all ease-in-out; +`; + +const ChildrenWrapper = styled.div` + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +`; + +const Gradient = styled.div` + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.6); +`; + + +function ImageSlider( + { + images = [], + autoPlay = true, + autoPlayTime = 3000, + children, + ...props + } +) { + // following state variable indicates the default slide. + const [currentSlide, setCurrentSlide] = useState(0); + // following method will go to the next slide + function nextSlide(slideIndex = currentSlide + 1) { + + const newSlideIndex = slideIndex >= images.length ? 0 : slideIndex; + setCurrentSlide(newSlideIndex); + } + // changing slide using useEffect hook + useEffect(() => { + const timer = setTimeout(() => { + nextSlide(); + }, autoPlayTime); + // The clearTimeout() method clears a timer set with the setTimeout() method. + return () => clearTimeout(timer); + }, [currentSlide]); + + return ( + + {images.map((image, index) => ( + + ))} + + + {children} + + ) +} + +export default ImageSlider diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Loader.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Loader.js new file mode 100644 index 00000000..968f6d7c --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Loader.js @@ -0,0 +1,23 @@ +import React,{useState, useEffect} from 'react' +// imports for material ui backdrop. +import Backdrop from '@material-ui/core/Backdrop'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import Button from '@material-ui/core/Button'; +import { makeStyles } from '@material-ui/core/styles'; + +const useStyles = makeStyles((theme) => ({ + backdrop: { + zIndex: theme.zIndex.drawer + 1, + color: '#ff0000', + }, +})); +function Loader(props) { + const classes = useStyles(); + return ( + + + + ) +} + +export default Loader diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Navbar.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Navbar.js new file mode 100644 index 00000000..f6695943 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Navbar.js @@ -0,0 +1,73 @@ +import React,{useState, useEffect} from 'react'; +import {BrowserRouter as Router, Switch, Route, Link} from 'react-router-dom'; +import { Button } from './Button'; +import './Navbar.scss'; +function Navbar() { + // states + const [click, setClick] = useState(false); + const [button, setButton] = useState(true); + // following function will handle toggling the click state variable value. + const handleHamburgerClick = ()=>{ + return setClick(!click); // toggle menu + } + const closeMobileMenu = ()=>{ + return setClick(false); // close menu + } + const showButton = ()=>{ + if(window.innerWidth <= 960){ + setButton(false); + }else{ + setButton(true); + } + } + useEffect(() => { + showButton() + }, []) + window.addEventListener('resize',showButton); // execute on resize. + + return ( + <> + + + ) +} + +export default Navbar + diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Navbar.scss b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Navbar.scss new file mode 100644 index 00000000..98a6996c --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/Navbar.scss @@ -0,0 +1,158 @@ +.navbar { + background: linear-gradient(90deg, rgb(28, 27, 27) 0%, rgb(26, 23, 23) 100%); + height: 80px; + display: flex; + justify-content: center; + align-items: center; + font-size: 1.2rem; + position: sticky; + top: 0; + z-index: 999; + } + + .navbar-container { + display: flex; + justify-content: center; + align-items: center; + height: 80px; + max-width: 1500px; + } + + .navbar-logo { + color: #fff; + justify-self: start; + margin-left: 20px; + cursor: pointer; + text-decoration: none; + font-size: 2rem; + display: flex; + align-items: center; + } + + .fa-typo3 { + margin-left: 0.5rem; + font-size: 1.8rem; + } + + .nav-menu { + display: grid; + grid-template-columns: repeat(5, auto); + grid-gap: 20px; + list-style: none; + text-align: center; + width: 60vw; + justify-content: end; + margin-right: 2rem; + } + + .nav-item { + height: 80px; + } + + .nav-links { + color: #fff; + display: flex; + align-items: center; + text-decoration: none; + padding: 0.5rem 1rem; + height: 100%; + } + + .nav-links:hover { + border-bottom: 4px solid #fff; + transition: all 0.2s ease-out; + } + + .fa-bars { + color: #fff; + } + + .nav-links-mobile { + display: none; + } + + .menu-icon { + display: none; + } + + @media screen and (max-width: 960px) { + .NavbarItems { + position: relative; + } + + .nav-menu { + display: flex; + flex-direction: column; + width: 100%; + height: 90vh; + position: absolute; + top: 80px; + left: -100%; + opacity: 1; + transition: all 0.5s ease; + } + + .nav-menu.active { + background: #242222; + left: 0; + opacity: 1; + transition: all 0.5s ease; + z-index: 1; + } + + .nav-links { + text-align: center; + padding: 2rem; + width: 100%; + display: table; + } + + .nav-links:hover { + background-color: #fff; + color: #242424; + border-radius: 0; + } + + .navbar-logo { + position: absolute; + top: 0; + left: 0; + transform: translate(25%, 50%); + } + + .menu-icon { + display: block; + position: absolute; + top: 0; + right: 0; + transform: translate(-100%, 60%); + font-size: 1.8rem; + cursor: pointer; + } + + .fa-times { + color: #fff; + font-size: 2rem; + } + + .nav-links-mobile { + display: block; + text-align: center; + margin: 2rem auto; + border-radius: 4px; + width: 80%; + text-decoration: none; + font-size: 1.5rem; + background-color: transparent; + color: #fff; + padding: 14px 20px; + border: 1px solid #fff; + transition: all 0.3s ease-out; + } + + .nav-links-mobile:hover { + background: #fff; + color: #242424; + transition: 250ms; + } + } \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Destinations.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Destinations.js new file mode 100644 index 00000000..8055bd2c --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Destinations.js @@ -0,0 +1,93 @@ +import React, {useState, useEffect} from 'react' +import {Link} from 'react-router-dom' +import destinationsData from '../../destinations-data'; +import SimpleReactLightbox, {SRLWrapper} from 'simple-react-lightbox'; +import '../../App.scss'; +import Loader from '../Loader'; +// specifying our image path. +const imagePath = process.env.PUBLIC_URL + '/images/'; + + +// a functional sub component that create various types of buttons. +const TagButton = ({name, handleSetTag, tagActive})=>{ + + return( + + ); + +} +const options = { + // settings: { + // overlayColor: 'rgb(25, 136, 124)', + // autoplaySpeed: 1500, + // transitionSpeed: 900 + // }, + // buttons: { + // backgroundColor: 'red', + // iconColor: 'rgba(126, 172, 139, 0.8)' + // }, + // caption: { + // captionColor: '#a6cfa5', + // captionFontFamily: 'Raleway, sans-serif', + // captionFontWeight: '300', + // captionTextTransform: 'uppercase' + // }, + // progressBar: { + // height: '20px', + // fillColor: 'blue', + // backgroundColor: 'white' + // } +}; +function Destinations() { + const [tag, setTag] = useState('all'); + const [filteredImages, setFilteredImages] = useState([]); + // for loader to open or close + const [open, setOpen] = useState(true); + useEffect( + () => { + // image filtering is done. + tag === 'all' ? setFilteredImages(destinationsData) : setFilteredImages(destinationsData.filter(image => image.tag === tag)); + }, + [tag] + ); + // following useState is for loader + useEffect(()=>{ + setInterval(() => { + if (document.readyState === 'complete') { + setOpen(false); + } + }, 100); + },[]) + + return ( +
    + {open===true ? : } +
    + + + + +
    + + +
    + {filteredImages.map((image)=>{ + return( +
    + + + + {} +
    + ) + })} +
    +
    +
    +
    + ) +} + +export default Destinations diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Home.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Home.js new file mode 100644 index 00000000..8284d4d6 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Home.js @@ -0,0 +1,32 @@ +import React,{useState, useEffect} from 'react' +import '../../App.scss'; +import Cards from '../Cards'; +import HeroSection from '../HeroSection'; +import Loader from '../Loader'; + + +function Home() { + // for loader to open or close + const [open, setOpen] = useState(true); + + // following useState is for loader + useEffect(()=>{ + setInterval(() => { + if (document.readyState === 'complete') { + setOpen(false); + } + }, 100); + },[]) + + + return ( + <> + {open===true ? : } + + + + + ) +} + +export default Home diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Login.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Login.js new file mode 100644 index 00000000..0692685c --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Login.js @@ -0,0 +1,109 @@ +import React, { useState, useEffect } from "react"; +import { Link } from "react-router-dom"; +import { + Container, + Row, + Col, + Card, + CardText, + CardBody, + CardFooter, + CardLink, + CardTitle, + CardSubtitle, + Button, + Form, + FormGroup, + Label, + Input, + FormText, +} from "reactstrap"; +import "../../App.scss"; + +function Login() { + + const [password, setPassword] = useState(""); + const [emailId, setEmailId] = useState(""); + + return ( + + + +
    + + + + Access Your Account + + +
    + + + + + + setEmailId(e.target.value)} + autoFocus + /> + + + + + + + + + + + + setPassword(e.target.value)} + /> + + + + + + + + + + + + + +
    +
    +
    + +

    Don't have an Account! Sign Up

    +
    +
    +
    + +
    +
    + ) +} + +export default Login diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/ProductDetail.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/ProductDetail.js new file mode 100644 index 00000000..c8188c7e --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/ProductDetail.js @@ -0,0 +1,51 @@ +import React,{useState, useEffect} from 'react' +import { Link } from 'react-router-dom'; +import { Container, Row, Col } from 'reactstrap'; +import '../../App.scss'; +import 'react-inner-image-zoom/lib/InnerImageZoom/styles.min.css'; +import InnerImageZoom from 'react-inner-image-zoom'; + +function ProductDetail({match}) { + // item state variable will hold an object + const [item, setItem] = useState({}); + useEffect(()=>{ + fetchItem(); + },[]); + const fetchItem = async ()=>{ + const data = await fetch(`https://fakestoreapi.com/products/${match.params.id}`); + const item = await data.json(); + setItem(item); + } + + return ( +
    + + + +
    + {/* */} + +
    + + +
    +

    {item.title}

    +
      +
    • Price: ${item.price}
    • +
    • Category: {item.category}
    • +
    +
    +

    Description:

    +

    {item.description}

    +
    + Add to Cart +
    + +
    +
    + +
    + ) +} + +export default ProductDetail diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Products.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Products.js new file mode 100644 index 00000000..034cb03e --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Products.js @@ -0,0 +1,69 @@ +import React,{useState, useEffect} from 'react' +import { Container, Row, Col } from 'reactstrap'; +import '../../App.scss'; +import {Link} from 'react-router-dom'; +import Loader from '../Loader'; + + +function Products() { + + useEffect(() => { + fetchItems() + }, []); + // following state variable will hold the actual array of datas + const [items, setItems] = useState([]); + // for loader to open or close + const [open, setOpen] = useState(true); + // following method is fetching the products data. + const fetchItems = async ()=>{ + try{ + const data = await fetch(`https://fakestoreapi.com/products`); + const items = await data.json(); + console.log(items); + setItems(items); + setOpen(false); + }catch(error){ + console.log(error); + } + } + // to show the backdrop untill the page is loaded + const renderBackdrop = ()=>{ + if(open){ + return ( + + ) + }else{ + return; + } + } + + return ( +
    + {renderBackdrop()} +

    Products

    + + + +
    + { + items.map((item, index)=>{ + return( +
    + +
    +

    {item.title}

    +
    {`$${item.price}`}
    +
    +
    + ) + }) + } +
    + +
    +
    +
    + ) +} + +export default Products diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Services.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Services.js new file mode 100644 index 00000000..dc170395 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/Services.js @@ -0,0 +1,134 @@ +import React,{useState, useEffect} from 'react' +import styled from "styled-components"; +import { Container, Row, Col } from 'reactstrap'; +import {Link} from 'react-router-dom'; +import ImageSlider from '../ImageSlider'; +import servicesData from '../../services-data'; +import '../../App.scss'; +import Loader from '../Loader'; + + +// specifying our image path. +const imagePath = process.env.PUBLIC_URL + '/images/'; + + +// a functional sub component that create various types of buttons. +const TagButton = ({name, handleSetTag, tagActive})=>{ + + return( + + ); + +} + +function Services() { + // state variables for changing tags and filtering services. + const [tag, setTag] = useState('all'); + const [filteredServices, setFilteredServices] = useState([]); + // for loader to open or close + const [open, setOpen] = useState(true); + + useEffect( + () => { + // destination filtering is done. + tag === 'all' ? setFilteredServices(servicesData) : setFilteredServices(servicesData.filter(service => service.tag === tag)); + }, [tag]) + + // following useState is for loader + useEffect(()=>{ + setInterval(() => { + if (document.readyState === 'complete') { + setOpen(false); + } + }, 100); + },[]) + + return ( +
    + {open===true ? : } +

    Services

    + + + +
    + + + +
    + + +
    + {filteredServices.map((service,index)=>{ + var imgArr = new Array(); + return( +
    + + + { + service.images.map((image)=> imgArr.push(`${image.src}`)) + } + +
    +

    {service.name}

    +

    {service.Setting}

    +
    +
    + {/* {`${service.images[0].title}${service.images[0].description}`} */} + + + +

    + {service.name} +

    + + +
    +

    Style:

    +

    {service.style}

    +
    + + +
    +

    Setting:

    +

    {service.Setting}

    +
    + + +
    +

    Setting:

    +

    {service.tag}

    +
    + + +
    +

    Price per night from:

    +

    {`$${service.price}`}

    +
    + + + More... + + +
    +
    + ) + })} +
    + +
    +
    +
    + ) +} + +export default Services diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/SignUp.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/SignUp.js new file mode 100644 index 00000000..53495f65 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/components/pages/SignUp.js @@ -0,0 +1,148 @@ +import React, { useState, useEffect } from "react"; +import { Link } from "react-router-dom"; +import { + Container, + Row, + Col, + Card, + CardText, + CardBody, + CardFooter, + CardLink, + CardTitle, + CardSubtitle, + Button, + Form, + FormGroup, + Label, + Input, + FormText, +} from "reactstrap"; +import "../../App.scss"; +function SignUp() { + // states for form field values. + const [name, setName] = useState(""); + const [password, setPassword] = useState(""); + const [emailId, setEmailId] = useState(""); + const [phoneNo, setPhoneNo] = useState(""); + + return ( + + + +
    + + + + Create New Account + + +
    + + + + + + setName(e.target.value)} + autoFocus + /> + + + + + + + + + + setEmailId(e.target.value)} + /> + + + + + + + + + + setPhoneNo(e.target.value)} + /> + + + + + + + + + + setPassword(e.target.value)} + /> + + + + + + + + + + + + + +
    +
    +
    + +

    Already have an Account! Log In

    +
    +
    +
    + +
    +
    + ); +} + +export default SignUp; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/destinations-data.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/destinations-data.js new file mode 100644 index 00000000..33b8cc49 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/destinations-data.js @@ -0,0 +1,18 @@ +export default [ + { id: "1", imageName: "destination-img01.jpeg", tag: "popular" }, + { id: "2", imageName: "destination-img02.jpeg", tag: "new" }, + { id: "3", imageName: "destination-img03.jpeg", tag: "romantic" }, + { id: "4", imageName: "destination-img04.jpeg", tag: "romantic" }, + { id: "5", imageName: "destination-img05.jpeg", tag: "popular" }, + { id: "6", imageName: "destination-img06.jpeg", tag: "new" }, + { id: "7", imageName: "destination-img07.jpeg", tag: "romantic" }, + { id: "8", imageName: "destination-img08.jpeg", tag: "popular" }, + { id: "9", imageName: "destination-img09.jpeg", tag: "new" }, + { id: "10", imageName: "destination-img10.jpeg", tag: "new" }, + { id: "11", imageName: "destination-img11.jpeg", tag: "new" }, + { id: "12", imageName: "destination-img12.jpeg", tag: "new" }, + { id: "13", imageName: "destination-img13.jpeg", tag: "popular" }, + { id: "14", imageName: "destination-img14.jpeg", tag: "romantic" }, + { id: "15", imageName: "destination-img15.jpeg", tag: "popular" }, + { id: "16", imageName: "destination-img16.jpeg", tag: "new" }, +]; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img01.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img01.jpeg new file mode 100644 index 00000000..6cfdd93c Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img01.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img02.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img02.jpeg new file mode 100644 index 00000000..d8cd40ce Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img02.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img03.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img03.jpeg new file mode 100644 index 00000000..09940ede Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img03.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img04.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img04.jpeg new file mode 100644 index 00000000..3c40744e Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img04.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img05.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img05.jpeg new file mode 100644 index 00000000..79a17092 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img05.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img06.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img06.jpeg new file mode 100644 index 00000000..5c366823 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img06.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img07.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img07.jpeg new file mode 100644 index 00000000..7410d180 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img07.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img08.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img08.jpeg new file mode 100644 index 00000000..fd8c240e Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img08.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img09.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img09.jpeg new file mode 100644 index 00000000..50ee57fa Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img09.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img10.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img10.jpeg new file mode 100644 index 00000000..b0b5c5be Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img10.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img11.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img11.jpeg new file mode 100644 index 00000000..6a963763 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img11.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img12.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img12.jpeg new file mode 100644 index 00000000..f9259f2f Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img12.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img13.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img13.jpeg new file mode 100644 index 00000000..6c4ca49c Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img13.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img14.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img14.jpeg new file mode 100644 index 00000000..11e33cb4 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img14.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img15.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img15.jpeg new file mode 100644 index 00000000..ec0a04c3 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img15.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img16.jpeg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img16.jpeg new file mode 100644 index 00000000..a6beea14 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/destination-img16.jpeg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-1.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-1.jpg new file mode 100644 index 00000000..460b9fe2 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-1.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-2.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-2.jpg new file mode 100644 index 00000000..bac13a09 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-2.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-3.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-3.jpg new file mode 100644 index 00000000..3d6b0884 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-3.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-4.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-4.jpg new file mode 100644 index 00000000..538d5d7c Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-4.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-5.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-5.jpg new file mode 100644 index 00000000..4c438148 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-5.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-6.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-6.jpg new file mode 100644 index 00000000..a373b9af Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-6.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-7.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-7.jpg new file mode 100644 index 00000000..44a1502a Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-7.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-8.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-8.jpg new file mode 100644 index 00000000..a9ff2b51 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-8.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-9.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-9.jpg new file mode 100644 index 00000000..dbde0850 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-9.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-home.jpg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-home.jpg new file mode 100644 index 00000000..9d214db3 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/images/img-home.jpg differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/index.css b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/index.css new file mode 100644 index 00000000..ec2585e8 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/index.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/index.js new file mode 100644 index 00000000..6ab5bc45 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/index.js @@ -0,0 +1,18 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; +import 'bootstrap/dist/css/bootstrap.css'; + +ReactDOM.render( + + + , + document.getElementById('root') +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/logo.svg b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/logo.svg new file mode 100644 index 00000000..9dfc1c05 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/reportWebVitals.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/reportWebVitals.js new file mode 100644 index 00000000..5253d3ad --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/services-data.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/services-data.js new file mode 100644 index 00000000..a649d538 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/services-data.js @@ -0,0 +1,144 @@ +export default [ + { + id: 1, + name: 'Erosantorini', + images: [ + { id: 1, src: 's1-img1.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's1-img2.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's1-img3.jpg', title: 'foo', description: 'bar' } + ], + tag: "hotel", + style: 'Whitewashed wonder', + Setting: 'Clifftop seclusion', + description: 'A two-acre estate with a whitewashed villa at its heart, Erosantorini in Greece is a four-room clifftop hideaway with impeccable service and volcano views. While you lounge in the infinity pool, gazing at the Aegean from your secluded spot on Santorini, itā€™s easy to imagine itā€™s not a hotel at all, but your fanciest friendsā€™ island home. You can even book the entire place to yourself, so let your imagination run riot.', + facilities: [ + 'Yoga and pilates classes.', + 'books and films to borrow.', + 'WiFi throughout. In rooms.', + 'All ages are welcome', + 'Jacuzzi on each private terrace.', + 'Lounge by the three-tiered infinity pool.', + 'Get steamy in the marble hammam, or book a massage or facial in the treatment room.' + ], + price: 9757 + }, + { + id: 2, + name: 'The Ranch at Rock Creek', + images: [ + { id: 1, src: 's2-img1.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's2-img2.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's2-img3.jpg', title: 'foo', description: 'bar' } + ], + tag: "hotel", + style: 'Frontier luxe', + Setting: 'Wild Montana countryside', + description: "More hotels in Montana More hotels in United States Saddle up and play cowboy at The Ranch at Rock Creek hotel in Granite County, a working ranch in the middle of mountain-surrounded nowhere. Thereā€™s no town for miles, but with a spa, ice rink, giant movie screen, bowling alley and acres of big-sky outdoors, no-oneā€™s complaining. If thatā€™s not quite enough diversion, thereā€™s more than a holidayā€™s worth of outdoor fun to be had: ride, bike, fish in the creek or hop on a horse-drawn sleigh all included in your room rate.", + facilities: [ + 'Rodeo grounds (for the weekly rodeo).', + 'cinema.', + 'the Buckle Barn event space.', + 'library.', + 'bowling alley.', + 'Spa.', + 'The thousands of acres have room for a heated outdoor pool.', + ], + price: 8702 + }, + { + id: 3, + name: 'Severin\'s Alpine Retreat', + images: [ + { id: 1, src: 's3-img1.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's3-img2.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's3-img3.jpg', title: 'foo', description: 'bar' } + ], + tag: "hotel", + style: 'Peak sophistication', + Setting: 'Venerated ski village', + description: "More hotels in Lech More hotels in Austria Lech ski hotel Severinā€™s Alpine Retreat is a haven of high-altitude indulgence, combining chic chalet looks, cutting-edge Tyrolean cuisine and a suave spa. Clad in thick timber and overlooking the soaring peaks, the suites have no shortage of Alpine charm, which is elevated from its rustic origins by sumptuous Minotti furniture, glass-encased fireplaces and slate soaking tubs. In the restaurant, a cobalt-blue stove and chrome-covered lamps set the scene for the nightly four-course dinners, which give the local cuisine the fine-dining treatment. With the world-famous Arlberg resort on the doorstep, most guests make a beeline for the lifts each morning, reached via private shuttle in a matter of minutes. If youā€™d rather take a spa day, the impressive pool, saunas and 3,000-bottle-strong wine cellar are equally enticing.", + facilities: [ + 'Heated ski lockers.', + 'wine cellar.', + 'childrenā€™s playroom.', + 'free WiFi throughout.', + 'laundry service.', + 'All ages are welcome', + 'Walled with thick timber, each suite has a glass-encased fireplace.', + 'The heated pool is in the spa area, and cuts a suave figure thanks to its slate-clad walls.', + ], + price: 3466 + }, + { + id: 4, + name: 'Rosewood Castiglion del Bosco Villa Oddi', + images: [ + { id: 1, src: 's4-img1.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's4-img2.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's4-img3.jpg', title: 'foo', description: 'bar' } + ], + tag: "villa", + style: 'Fetching family farmhouse', + Setting: 'Cypress-strewn estate', + description: "Restored from an ancient farmhouse (using the original Tuscan stone), six-bedroom Villa Oddi is a traditionally charming, centuries-old Italian casa, with added modern touches like a slick, steel kitchen and private infinity pool. Vaulted brick ceilings, wooden beams and flagstone floors are offset by comfortable, modern touches: cosy up in the TV room in front of the 82-inch screen; whip up an antipasti feast in the slick kitchen; and gaze over panoramic views of the Val dā€™Orcia from the private infinity pool. On warm evenings, have a lazy game of tennis on your own court, then pop a few pizzas in the outdoor, wood-firing oven and stretch out on the pergola-shaded terrace. To cap it all, a cypress-lined road leads to the village of Borgo, a historic rural enclave, authentically restored by the hotel Rosewood Castiglion del Bosco; the cobbled streets are dotted with restaurants, a fitness centre, a spa and a cookery school.", + facilities: [ + 'In the TV room: 82-inch flatscreen TV with Apple TV. Playstation 4.', + 'Flatscreen TVs in all bedrooms.', + 'Free WiFi throughout.', + 'Smartphone-enabled sound-system.', + 'Coal barbecue, on request.', + 'Air-conditioning throughout.', + 'Two hours of housekeeping and turndown service daily.', + 'Welcome groceries on arrival.', + ], + price: 11259 + }, + { + id: 5, + name: 'EroSantorini Estate', + images: [ + { id: 1, src: 's5-img1.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's5-img2.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's5-img3.jpg', title: 'foo', description: 'bar' } + ], + tag: "villa", + style: 'Fetching family farmhouse', + Setting: 'Cypress-strewn estate', + description: "Clifftop hideaway Erosantorini is a luxury villa with views over Santoriniā€™s famous caldera. The five suites could be self-contained holiday stays in their own rights; each has a private Aegean-view terrace with a plunge pool and sunloungers. The main infinity pool ā€“ all three tiers of it ā€“ juts out over the cliffā€™s edge, and the pool terrace is dotted with daybeds and loungers. The alfresco kitchen and dining area have sunset views, and the wellness terrace is aptly placed for sun salutations too. Enjoy leisurely breakfasts in the poolside cave and evenings by the caldera-view fire pit.", + facilities: [ + 'This luxury stayā€™s buildings and outdoor living spaces are laid out over three levels.', + 'Fully equipped kitchen with wine- and gourmet-food-stocked Smeg refrigerator and a Nespresso coffee machines.', + 'Working floating fireplaces.', + 'A marble-lined spa with heated floors, a traditional hammam steam room, aromatherapy shower, treatment room and relaxation zone.', + 'Stocked wine cellar.', + 'The triangular, triple-tiered infinity pool is positioned at the edge of the cliff and looks out over the caldera.', + 'Two hours of housekeeping and turndown service daily.', + 'The pool has an underwater sound system; itā€™s unheated and ranges in depth from 1.60 to 1.90 metres.', + ], + price: 9757 + }, + { + id: 6, + name: 'Amanpuri Eight-Bedroom Ocean Villa', + images: [ + { id: 1, src: 's6-img1.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's6-img2.jpg', title: 'foo', description: 'bar' }, + { id: 1, src: 's6-img3.jpg', title: 'foo', description: 'bar' } + ], + tag: "villa", + style: 'Palatial pavilio', + Setting: 'Coconut-grove coastline', + description: "The Amanpuri 8-Bedroom Ocean Villa, with its sea-facing, coconut-plantation setting, is guaranteed to live up to the hotelā€™s moniker, which translates as ā€˜place of peaceā€™. It would be hard not to find tranquillity amid the gleaming feng shui of the wood-lined interiors, which afford glimpses of the outdoor vegetation and shimmering shores at every opportunity through floor-to-ceiling windows. A spectacular Aman spa is a short walk or buggy jaunt away, but thereā€™s an in-villa massage room in case you couldnā€™t possibly bear to leave ā€“ though you probably should, since the resortā€™s five restaurants await.", + facilities: [ + 'The spacious villas (9,908sq m) come complete with a luxurious lounge, a media room, a library and a fully-equipped kitchen manned by a private chef; some also boast a gym, massage room and steam room.', + 'Enjoy the great outdoor views through floor-to-ceiling windows from the comfort of the wood-filled living space, decorated with luxe fabrics and perfectly positioned artworks and antiques.', + 'There are eight ocean-facing bedrooms, each with a king-size bed and an ensuite bathroom with a sunken bath tub and separate shower.', + 'Just a few steps from the living room, the 25-metre heated private pool has panoramic ocean views and is surrounded by sunbeds and 12 sunloungers.', + 'The living room leads out onto an expansive private terrace overlooking the ocean.', + 'The pool is the main focal point, but there are various outdoor dining and lounging salas to park yourself on.', + 'Two hours of housekeeping and turndown service daily.', + 'During high season (December to April), hotel transfers are free.', + ], + price: 9000 + } +] \ No newline at end of file diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/setupTests.js b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/setupTests.js new file mode 100644 index 00000000..8f2609b7 --- /dev/null +++ b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/videos/video-1.mp4 b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/videos/video-1.mp4 new file mode 100644 index 00000000..3951f2e5 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/videos/video-1.mp4 differ diff --git a/React-JS-Projects/Intermediate/Tspot-Travel-App/src/videos/video-2.mp4 b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/videos/video-2.mp4 new file mode 100644 index 00000000..97587b05 Binary files /dev/null and b/React-JS-Projects/Intermediate/Tspot-Travel-App/src/videos/video-2.mp4 differ diff --git a/React-JS-Projects/README.md b/React-JS-Projects/README.md index 2532f8aa..ada4f3e8 100644 --- a/React-JS-Projects/README.md +++ b/React-JS-Projects/README.md @@ -52,6 +52,7 @@ | 25 | [Motivation For The Day](./Basic/Motivation-For-The-Day/) | ![Basic](https://img.shields.io/badge/Basic-00FF00?style=for-the-badge) | | 26 | [Job Portal](./Advanced/Job-Portal/) | ![Advanced](https://img.shields.io/badge/Advanced-FF0000?style=for-the-badge) | | 27 | [Cakes n Cookies](./Intermediate/Cakes-N-Cookies/) | ![Intermediate](https://img.shields.io/badge/Intermediate-FFD700?style=for-the-badge) | +| 28 | [TSPOT](./Intermediate/Tspot-Travel-App/) | ![Intermediate](https://img.shields.io/badge/Intermediate-FFD700?style=for-the-badge) |