├── README.md ├── build ├── asset-manifest.json ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json ├── precache-manifest.f1be03ed3fe24c2ffe57966a8cb62800.js ├── robots.txt ├── service-worker.js └── static │ ├── css │ ├── 2.bf0413c3.chunk.css │ ├── 2.bf0413c3.chunk.css.map │ ├── main.432a882b.chunk.css │ └── main.432a882b.chunk.css.map │ ├── js │ ├── 2.41ebc643.chunk.js │ ├── 2.41ebc643.chunk.js.LICENSE.txt │ ├── 2.41ebc643.chunk.js.map │ ├── main.96f83bbf.chunk.js │ ├── main.96f83bbf.chunk.js.map │ ├── runtime-main.5e45bd3a.js │ └── runtime-main.5e45bd3a.js.map │ └── media │ ├── Lebron17monstars.fe231b7c.jpg │ ├── airJordan.234e4bb4.jpg │ ├── airMax.0024ccc7.jpg │ ├── airMax.6d8501ea.jpg │ ├── airMid.0b24573d.jpg │ ├── airMonarch.080e3ccf.jpg │ ├── airOg.75f3350e.jpg │ ├── airZoom.4438394b.jpg │ ├── airZoom.dc439a38.jpg │ ├── allDay.314ef6ac.jpg │ ├── delta.e5b83429.jpg │ ├── downshifter10.076d95de.jpg │ ├── flex8.15686d8a.jpg │ ├── fly3.3f8af68f.jpg │ ├── freak1.4fd23ded.jpg │ ├── freak2.22f85c68.jpg │ ├── gravity2.4856f612.jpg │ ├── headerLogo.52345051.png │ ├── infinityRun.76c1110e.jpg │ ├── jordanOG.fa0e20e4.jpg │ ├── jumpman.0c303463.jpg │ ├── kybridS2.bb8f6dbc.jpg │ ├── kyrie3.e203b0cf.jpg │ ├── kyrie4.ccd86735.jpg │ ├── kyrie6.7a75dff6.jpg │ ├── latitude.14d38814.jpg │ ├── lebron17.17679786.jpg │ ├── lebron17.2adea8b9.jpg │ ├── lebron17FP.74b6299d.jpg │ ├── legend.23e22627.jpg │ ├── legend8.73c9f1db.jpg │ ├── lite2.2cb62578.jpg │ ├── lite2.eb8354bf.jpg │ ├── low11.58fe363a.jpg │ ├── mBasketball.ef974f7f.jpg │ ├── mGym.472da13e.jpg │ ├── mJordan.42e606aa.jpg │ ├── mRunning.1b24030f.jpg │ ├── mTennis.110989fb.jpeg │ ├── matFraser.4fe4959e.jpg │ ├── max200.728b187e.jpg │ ├── maxAlpha.9cddea7b.jpg │ ├── metcon3.64f6717b.jpg │ ├── metcon6.32d2904c.jpg │ ├── metcon6.7b9471bc.jpg │ ├── metcon6you.5f8ef5ce.jpg │ ├── miler.55e222a0.jpg │ ├── nikeBlazers.ed30defe.jpg │ ├── pegasus37.27bded50.jpg │ ├── pegasus37.33939a9e.jpg │ ├── pg4.c3ef6fa6.jpg │ ├── phantomGT.17a5c09f.jpg │ ├── phantomGTclub.b2c47ac9.jpg │ ├── phantomRun.5c113044.jpg │ ├── precision4.a150741c.jpg │ ├── protoZ.a5fde00b.jpg │ ├── quest2.de327a30.jpg │ ├── react3.2577af43.jpg │ ├── reactPhantom.28c4ec23.jpg │ ├── retro14.7f0c902c.jpg │ ├── retro4.d24d99d1.jpg │ ├── retro5.a88d9203.jpg │ ├── revolution5.0ce3895b.jpg │ ├── romaleos4.6345a13f.jpg │ ├── slick.b7c9e1e4.woff │ ├── slick.ced611da.eot │ ├── slick.d41f55a7.ttf │ ├── slick.f97e3bbf.svg │ ├── soldier14.5cc43e81.jpg │ ├── superfly7.8c9c3f25.jpg │ ├── superfly7pro.82883abf.jpg │ ├── superrep.4d283465.jpg │ ├── tech20.2a088463.jpg │ ├── tiempo8.8a251e16.jpg │ ├── trey5.42b129c8.jpg │ ├── vapor13.3d10f3da.jpg │ ├── vapor13mds.4bc9ed37.jpg │ ├── vapor13neymar.f73e22d3.jpg │ ├── vaporWing.c2ea847f.jpg │ ├── vaporX.d84a77bc.jpg │ ├── vision2.353813cd.jpg │ ├── wBasketball.0dd7ccab.jpg │ ├── wFootball.8b7405ae.jpg │ ├── wGym.375d02d2.jpg │ ├── wJordan.798b5dac.jpg │ ├── wRunning.f2a685ef.jpg │ ├── wTennis.addea994.jpg │ ├── wallpaper.afc03c12.jpg │ ├── westbrook.39033d07.jpg │ ├── wildcard.200ae3d7.jpg │ ├── wildcard.a05efb17.jpg │ ├── zoom92.36161f98.jpg │ ├── zoomGP.3c5bb422.jpg │ ├── zoomTrunner.a2ff8043.jpg │ ├── zoomTurbo.f8f6ab4a.jpg │ ├── zoomX.e53c7760.jpg │ ├── zoomZero.14182fea.jpg │ └── zoomZero.6308004f.jpg ├── firebase.json ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt └── src ├── App.js ├── components ├── AllShoes │ ├── AllShoes.css │ ├── AllShoes_Navbar │ │ ├── AllShoes_Navbar.css │ │ └── AllShoes_Navbar.js │ ├── Men │ │ ├── Men.css │ │ ├── Men.js │ │ ├── MenBasketball │ │ │ ├── Lebron17monstars.jpg │ │ │ ├── MenBasketball.js │ │ │ ├── freak2.jpg │ │ │ ├── kybridS2.jpg │ │ │ ├── kyrie3.jpg │ │ │ ├── kyrie6.jpg │ │ │ ├── lebron17.jpg │ │ │ ├── lebron17FP.jpg │ │ │ └── pg4.jpg │ │ ├── MenFootball │ │ │ ├── MenFootball.js │ │ │ ├── legend8.jpg │ │ │ ├── phantomGT.jpg │ │ │ ├── phantomGTclub.jpg │ │ │ ├── superfly7.jpg │ │ │ ├── superfly7pro.jpg │ │ │ ├── tiempo8.jpg │ │ │ ├── vapor13.jpg │ │ │ ├── vapor13mds.jpg │ │ │ ├── vapor13neymar.jpg │ │ │ └── vision2.jpg │ │ ├── MenGym │ │ │ ├── MenGym.js │ │ │ ├── airMonarch.jpg │ │ │ ├── airZoom.jpg │ │ │ ├── matFraser.jpg │ │ │ ├── maxAlpha.jpg │ │ │ ├── metcon6.jpg │ │ │ └── romaleos4.jpg │ │ ├── MenJordan │ │ │ ├── MenJordan.js │ │ │ ├── airMid.jpg │ │ │ ├── airOg.jpg │ │ │ ├── jumpman.jpg │ │ │ ├── protoZ.jpg │ │ │ ├── retro14.jpg │ │ │ ├── retro5.jpg │ │ │ ├── westbrook.jpg │ │ │ ├── zoom92.jpg │ │ │ └── zoomTrunner.jpg │ │ ├── MenRunning │ │ │ ├── MenRunning.js │ │ │ ├── downshifter10.jpg │ │ │ ├── gravity2.jpg │ │ │ ├── miler.jpg │ │ │ ├── pegasus37.jpg │ │ │ ├── quest2.jpg │ │ │ ├── reactPhantom.jpg │ │ │ └── revolution5.jpg │ │ ├── MenTennis │ │ │ ├── MenTennis.js │ │ │ ├── lite2.jpg │ │ │ ├── tech20.jpg │ │ │ ├── vaporWing.jpg │ │ │ ├── wildcard.jpg │ │ │ ├── zoomTurbo.jpg │ │ │ ├── zoomX.jpg │ │ │ └── zoomZero.jpg │ │ ├── mBasketball.jpg │ │ ├── mFootball.jpg │ │ ├── mGym.jpg │ │ ├── mJordan.jpg │ │ ├── mRunning.jpg │ │ └── mTennis.jpeg │ ├── MenWomenFootwear │ │ ├── MenWomenFootwear.css │ │ └── MenWomenFootwear.js │ ├── ShoeComponent │ │ ├── ShoeComponent.css │ │ └── ShoeComponent.js │ └── Women │ │ ├── Women.css │ │ ├── Women.js │ │ ├── WomenBasketball │ │ ├── WomenBasketball.js │ │ ├── airMax.jpg │ │ ├── freak1.jpg │ │ ├── kyrie4.jpg │ │ ├── lebron17.jpg │ │ ├── precision4.jpg │ │ ├── soldier14.jpg │ │ └── trey5.jpg │ │ ├── WomenFootball │ │ └── WomenFootball.js │ │ ├── WomenGym │ │ ├── WomenGym.js │ │ ├── airZoom.jpg │ │ ├── legend.jpg │ │ ├── metcon3.jpg │ │ ├── metcon6.jpg │ │ ├── metcon6you.jpg │ │ └── superrep.jpg │ │ ├── WomenJordan │ │ ├── WomenJordan.js │ │ ├── delta.jpg │ │ ├── jordanOG.jpg │ │ ├── latitude.jpg │ │ ├── low11.jpg │ │ ├── max200.jpg │ │ └── retro4.jpg │ │ ├── WomenRunning │ │ ├── WomenRunning.js │ │ ├── allDay.jpg │ │ ├── flex8.jpg │ │ ├── fly3.jpg │ │ ├── infinityRun.jpg │ │ ├── pegasus37.jpg │ │ ├── phantomRun.jpg │ │ └── react3.jpg │ │ ├── WomenTennis │ │ ├── WomenTennis.js │ │ ├── lite2.jpg │ │ ├── vaporX.jpg │ │ ├── wildcard.jpg │ │ ├── zoomGP.jpg │ │ └── zoomZero.jpg │ │ ├── wBasketball.jpg │ │ ├── wFootball.jpg │ │ ├── wGym.jpg │ │ ├── wJordan.jpg │ │ ├── wRunning.jpg │ │ └── wTennis.jpg ├── Checkout │ ├── Checkout.css │ ├── Checkout.js │ ├── ShoeItem │ │ ├── ShoeItem.css │ │ └── ShoeItem.js │ └── TotalPrice │ │ ├── TotalPrice.css │ │ └── TotalPrice.js ├── Header │ ├── Header.css │ ├── Header.js │ ├── headerLogo.png │ └── logo.jpg ├── Home │ ├── Home.css │ ├── Home.js │ └── SlideView │ │ ├── SlideView.css │ │ ├── SlideView.js │ │ └── Slides │ │ ├── Slides.css │ │ ├── Slides.js │ │ ├── airJordan.jpg │ │ ├── airMax.jpg │ │ └── nikeBlazers.jpg ├── Login │ ├── Login.css │ ├── Login.js │ ├── wallpaper.jpg │ └── wallpaper2.jpg └── StateProvider │ ├── StateProvider.js │ └── reducer.js ├── firebase.js ├── index.css ├── index.js ├── serviceWorker.js └── setupTests.js /README.md: -------------------------------------------------------------------------------- 1 | # Nike-Shoes-ECommerce-Web-App 2 | 3 | ## SPA link : https://nike-10001.web.app/ 4 | 5 | This Full Stack e-commerce SPA (single page application) has been created by me which uses React js at the client's side and firebase for the backend and deployment purposes. 6 | The project includes user authentication, user tracking, react routing, react hooks, react-context API, react dom manipulation, reusable components, react slick implementation, device responsiveness, dummy payment gateway API integration and the SPA's deployment on Firebase. 7 | 8 | 9 | ### Dependencies used: 10 | 11 | -> npm (Node's packet manager) 12 | 13 | -> create-react-app (for default react js project setup) 14 | 15 | -> react-dom 16 | 17 | -> react-router-dom (for implementing SPA's page routing without page refresh) 18 | 19 | -> react-slick (for implementing slick carousel) 20 | 21 | -> react-currency-format (to standardize the calculated price of the total items) 22 | 23 | -> react-stripe-checkout (to implement a dummy payment gateway API's integration) 24 | 25 | -> material-core 26 | 27 | -> material-ui (icon components) 28 | 29 | -> firebase (for user authentication and tracking purposes and hosting the web app) 30 | 31 | 32 | ### Repository Folder Structure: 33 | 34 | -> build: Generated output compressed folder on running the 'npm run build' command for web app's production purposes. 35 | 36 | -> public: Contains the index.html file which is used for lesser common purposes, but remains unchanged in this project. 37 | 38 | -> src: Contains all the js and css files and subdirectories involved in the creation of the project. 39 | 40 | -> firebase.json: This file is the root of the project directory created automatically by Firebase on running the 'firebase init' command. 41 | 42 | -> package-lock.json: Generated automatically for any operations where npm modifies either the node-modules tree or package.json. 43 | 44 | -> package.json: This file holds all the packages and dependencies required by the project. 45 | 46 | 47 | ### Basic steps involved to create and deploy the project to production: 48 | 1) Install a text editor of your choice (VS code is my preferance). 49 | 2) Slide in the CLI (Command Line Interface) and install react's framework provided by Facebook by running the command 'npm install -g create-react-app' 50 | 3) Now to install the default necessary dependancies of a react js project, navigate into the path where you would like to create the project and run the command 'create-react-app name_of_your_app' 51 | 4) Navigate into the folder and install the other libraries and dependancies which your project will require. ( npm install react-dom react-router-dom react-slick react-currency-format react-stripe-checkout), in my case. 52 | 5) 'npm install @material-ui/core' and 'npm install @material-ui/icons'. Run these commands if your project requires material UI components. 53 | 6) Open the react js folder in your IDE and do some default clean-up work. 54 | 7) Create a components folder in your src folder and start creating the components of your project. 55 | 8) Make sure you use Browser Router, Route, Switch, Link and NavLink in your project to implement your SPA routing without page refresh. 56 | 9) Create a Firebase account with your google account. 57 | 10) Go to console in Firebase and add a new project. Complete the basic firebase project creation steps. Make sure you select checkbox of app hosting. 58 | 11) Then go to the project settings of your firebase project and look for Firebase SDK snippet in it. Select the config part and copy the firebase config snippet. 59 | 12) Create a new javascript file in the src folder of your react project naming 'firebase.js'. Export the authentication and database instances by using the firebase config snippet keys copied in the previous step. Use these exports in your project wherever you require them for authentication and realtime database creation and manipulation purposes. 60 | 13) To avoid the headache of prop-drilling you can use either React's context API or Redux as per your requirement and convenience. (In this project I used React's Context API) 61 | 14) Also, in your firebase project, enable the required sign-in method for the authentication your project uses. 62 | 15) If your project requires payment processes (dummy payments in my project), then integrate any payment gateway API in your project. (I used stripe in my project). 63 | 16) After the completion of your project, the next step is to deploy your project to production. We can do this using firebase hosting. 64 | 17) Open up the terminal of your IDE and run the command 'firebase login' command if this is your first time hosting an app on firebase. Do the default login steps and enable the scripts' access rights through your Windows Powershell. 65 | 18) Then run the command 'firebase init' to which creates and adds a firebase.json file in the root of your project. It is also required to deploy the assets used by your project with the firebase CLI. 66 | 19) Navigate to the hosting method from the options generated on running the 'firebase init' command amd press 'Spacebar' on your keyboard to select the option and then press enter. 67 | 20) Then from the options given further, select 'use an existing project'. And then select your firebase project. 68 | 21) In the next step type the 'build' command in your terminal and then type 'Y' to configure the app as an SPA. 69 | 22) Run the following command in the next step; 'npm run build' 70 | 23) On execution of the previous command, it will generate an optimized production build version of your entire app project in the form of a folder named 'build' in your root directory. 71 | 24) The final step is to run 'firebase deploy' command and on execution of it you will get an http link of your deployed app. 72 | 25) You can also get the link of your deployed app from your firebase project. 73 | 26) In the meanwhile, if you ever change any bit of code later on, you need to run the 'npm run build' command again. 74 | 75 | 76 | -> If you want to create your own backend using node js and express js, and database using (,say) MongoDB, then you can use Netlify, Heroku or AWS for deployment purposes instead of Firebase. 77 | -------------------------------------------------------------------------------- /build/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "main.css": "/static/css/main.432a882b.chunk.css", 4 | "main.js": "/static/js/main.96f83bbf.chunk.js", 5 | "main.js.map": "/static/js/main.96f83bbf.chunk.js.map", 6 | "runtime-main.js": "/static/js/runtime-main.5e45bd3a.js", 7 | "runtime-main.js.map": "/static/js/runtime-main.5e45bd3a.js.map", 8 | "static/css/2.bf0413c3.chunk.css": "/static/css/2.bf0413c3.chunk.css", 9 | "static/js/2.41ebc643.chunk.js": "/static/js/2.41ebc643.chunk.js", 10 | "static/js/2.41ebc643.chunk.js.map": "/static/js/2.41ebc643.chunk.js.map", 11 | "index.html": "/index.html", 12 | "precache-manifest.f1be03ed3fe24c2ffe57966a8cb62800.js": "/precache-manifest.f1be03ed3fe24c2ffe57966a8cb62800.js", 13 | "service-worker.js": "/service-worker.js", 14 | "static/css/2.bf0413c3.chunk.css.map": "/static/css/2.bf0413c3.chunk.css.map", 15 | "static/css/main.432a882b.chunk.css.map": "/static/css/main.432a882b.chunk.css.map", 16 | "static/js/2.41ebc643.chunk.js.LICENSE.txt": "/static/js/2.41ebc643.chunk.js.LICENSE.txt", 17 | "static/media/Lebron17monstars.jpg": "/static/media/Lebron17monstars.fe231b7c.jpg", 18 | "static/media/airJordan.jpg": "/static/media/airJordan.234e4bb4.jpg", 19 | "static/media/airMax.jpg": "/static/media/airMax.6d8501ea.jpg", 20 | "static/media/airMid.jpg": "/static/media/airMid.0b24573d.jpg", 21 | "static/media/airMonarch.jpg": "/static/media/airMonarch.080e3ccf.jpg", 22 | "static/media/airOg.jpg": "/static/media/airOg.75f3350e.jpg", 23 | "static/media/airZoom.jpg": "/static/media/airZoom.dc439a38.jpg", 24 | "static/media/allDay.jpg": "/static/media/allDay.314ef6ac.jpg", 25 | "static/media/delta.jpg": "/static/media/delta.e5b83429.jpg", 26 | "static/media/downshifter10.jpg": "/static/media/downshifter10.076d95de.jpg", 27 | "static/media/flex8.jpg": "/static/media/flex8.15686d8a.jpg", 28 | "static/media/fly3.jpg": "/static/media/fly3.3f8af68f.jpg", 29 | "static/media/freak1.jpg": "/static/media/freak1.4fd23ded.jpg", 30 | "static/media/freak2.jpg": "/static/media/freak2.22f85c68.jpg", 31 | "static/media/gravity2.jpg": "/static/media/gravity2.4856f612.jpg", 32 | "static/media/headerLogo.png": "/static/media/headerLogo.52345051.png", 33 | "static/media/infinityRun.jpg": "/static/media/infinityRun.76c1110e.jpg", 34 | "static/media/jordanOG.jpg": "/static/media/jordanOG.fa0e20e4.jpg", 35 | "static/media/jumpman.jpg": "/static/media/jumpman.0c303463.jpg", 36 | "static/media/kybridS2.jpg": "/static/media/kybridS2.bb8f6dbc.jpg", 37 | "static/media/kyrie3.jpg": "/static/media/kyrie3.e203b0cf.jpg", 38 | "static/media/kyrie4.jpg": "/static/media/kyrie4.ccd86735.jpg", 39 | "static/media/kyrie6.jpg": "/static/media/kyrie6.7a75dff6.jpg", 40 | "static/media/latitude.jpg": "/static/media/latitude.14d38814.jpg", 41 | "static/media/lebron17.jpg": "/static/media/lebron17.2adea8b9.jpg", 42 | "static/media/lebron17FP.jpg": "/static/media/lebron17FP.74b6299d.jpg", 43 | "static/media/legend.jpg": "/static/media/legend.23e22627.jpg", 44 | "static/media/legend8.jpg": "/static/media/legend8.73c9f1db.jpg", 45 | "static/media/lite2.jpg": "/static/media/lite2.eb8354bf.jpg", 46 | "static/media/low11.jpg": "/static/media/low11.58fe363a.jpg", 47 | "static/media/mBasketball.jpg": "/static/media/mBasketball.ef974f7f.jpg", 48 | "static/media/mGym.jpg": "/static/media/mGym.472da13e.jpg", 49 | "static/media/mJordan.jpg": "/static/media/mJordan.42e606aa.jpg", 50 | "static/media/mRunning.jpg": "/static/media/mRunning.1b24030f.jpg", 51 | "static/media/mTennis.jpeg": "/static/media/mTennis.110989fb.jpeg", 52 | "static/media/matFraser.jpg": "/static/media/matFraser.4fe4959e.jpg", 53 | "static/media/max200.jpg": "/static/media/max200.728b187e.jpg", 54 | "static/media/maxAlpha.jpg": "/static/media/maxAlpha.9cddea7b.jpg", 55 | "static/media/metcon3.jpg": "/static/media/metcon3.64f6717b.jpg", 56 | "static/media/metcon6.jpg": "/static/media/metcon6.7b9471bc.jpg", 57 | "static/media/metcon6you.jpg": "/static/media/metcon6you.5f8ef5ce.jpg", 58 | "static/media/miler.jpg": "/static/media/miler.55e222a0.jpg", 59 | "static/media/nikeBlazers.jpg": "/static/media/nikeBlazers.ed30defe.jpg", 60 | "static/media/pegasus37.jpg": "/static/media/pegasus37.33939a9e.jpg", 61 | "static/media/pg4.jpg": "/static/media/pg4.c3ef6fa6.jpg", 62 | "static/media/phantomGT.jpg": "/static/media/phantomGT.17a5c09f.jpg", 63 | "static/media/phantomGTclub.jpg": "/static/media/phantomGTclub.b2c47ac9.jpg", 64 | "static/media/phantomRun.jpg": "/static/media/phantomRun.5c113044.jpg", 65 | "static/media/precision4.jpg": "/static/media/precision4.a150741c.jpg", 66 | "static/media/protoZ.jpg": "/static/media/protoZ.a5fde00b.jpg", 67 | "static/media/quest2.jpg": "/static/media/quest2.de327a30.jpg", 68 | "static/media/react3.jpg": "/static/media/react3.2577af43.jpg", 69 | "static/media/reactPhantom.jpg": "/static/media/reactPhantom.28c4ec23.jpg", 70 | "static/media/retro14.jpg": "/static/media/retro14.7f0c902c.jpg", 71 | "static/media/retro4.jpg": "/static/media/retro4.d24d99d1.jpg", 72 | "static/media/retro5.jpg": "/static/media/retro5.a88d9203.jpg", 73 | "static/media/revolution5.jpg": "/static/media/revolution5.0ce3895b.jpg", 74 | "static/media/romaleos4.jpg": "/static/media/romaleos4.6345a13f.jpg", 75 | "static/media/slick-theme.css": "/static/media/slick.f97e3bbf.svg", 76 | "static/media/soldier14.jpg": "/static/media/soldier14.5cc43e81.jpg", 77 | "static/media/superfly7.jpg": "/static/media/superfly7.8c9c3f25.jpg", 78 | "static/media/superfly7pro.jpg": "/static/media/superfly7pro.82883abf.jpg", 79 | "static/media/superrep.jpg": "/static/media/superrep.4d283465.jpg", 80 | "static/media/tech20.jpg": "/static/media/tech20.2a088463.jpg", 81 | "static/media/tiempo8.jpg": "/static/media/tiempo8.8a251e16.jpg", 82 | "static/media/trey5.jpg": "/static/media/trey5.42b129c8.jpg", 83 | "static/media/vapor13.jpg": "/static/media/vapor13.3d10f3da.jpg", 84 | "static/media/vapor13mds.jpg": "/static/media/vapor13mds.4bc9ed37.jpg", 85 | "static/media/vapor13neymar.jpg": "/static/media/vapor13neymar.f73e22d3.jpg", 86 | "static/media/vaporWing.jpg": "/static/media/vaporWing.c2ea847f.jpg", 87 | "static/media/vaporX.jpg": "/static/media/vaporX.d84a77bc.jpg", 88 | "static/media/vision2.jpg": "/static/media/vision2.353813cd.jpg", 89 | "static/media/wBasketball.jpg": "/static/media/wBasketball.0dd7ccab.jpg", 90 | "static/media/wFootball.jpg": "/static/media/wFootball.8b7405ae.jpg", 91 | "static/media/wGym.jpg": "/static/media/wGym.375d02d2.jpg", 92 | "static/media/wJordan.jpg": "/static/media/wJordan.798b5dac.jpg", 93 | "static/media/wRunning.jpg": "/static/media/wRunning.f2a685ef.jpg", 94 | "static/media/wTennis.jpg": "/static/media/wTennis.addea994.jpg", 95 | "static/media/wallpaper.jpg": "/static/media/wallpaper.afc03c12.jpg", 96 | "static/media/westbrook.jpg": "/static/media/westbrook.39033d07.jpg", 97 | "static/media/wildcard.jpg": "/static/media/wildcard.a05efb17.jpg", 98 | "static/media/zoom92.jpg": "/static/media/zoom92.36161f98.jpg", 99 | "static/media/zoomGP.jpg": "/static/media/zoomGP.3c5bb422.jpg", 100 | "static/media/zoomTrunner.jpg": "/static/media/zoomTrunner.a2ff8043.jpg", 101 | "static/media/zoomTurbo.jpg": "/static/media/zoomTurbo.f8f6ab4a.jpg", 102 | "static/media/zoomX.jpg": "/static/media/zoomX.e53c7760.jpg", 103 | "static/media/zoomZero.jpg": "/static/media/zoomZero.6308004f.jpg" 104 | }, 105 | "entrypoints": [ 106 | "static/js/runtime-main.5e45bd3a.js", 107 | "static/css/2.bf0413c3.chunk.css", 108 | "static/js/2.41ebc643.chunk.js", 109 | "static/css/main.432a882b.chunk.css", 110 | "static/js/main.96f83bbf.chunk.js" 111 | ] 112 | } -------------------------------------------------------------------------------- /build/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/favicon.ico -------------------------------------------------------------------------------- /build/index.html: -------------------------------------------------------------------------------- 1 | React App
-------------------------------------------------------------------------------- /build/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/logo192.png -------------------------------------------------------------------------------- /build/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/logo512.png -------------------------------------------------------------------------------- /build/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /build/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /build/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welcome to your Workbox-powered service worker! 3 | * 4 | * You'll need to register this file in your web app and you should 5 | * disable HTTP caching for this file too. 6 | * See https://goo.gl/nhQhGp 7 | * 8 | * The rest of the code is auto-generated. Please don't update this file 9 | * directly; instead, make changes to your Workbox build configuration 10 | * and re-run your build process. 11 | * See https://goo.gl/2aRDsh 12 | */ 13 | 14 | importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); 15 | 16 | importScripts( 17 | "/precache-manifest.f1be03ed3fe24c2ffe57966a8cb62800.js" 18 | ); 19 | 20 | self.addEventListener('message', (event) => { 21 | if (event.data && event.data.type === 'SKIP_WAITING') { 22 | self.skipWaiting(); 23 | } 24 | }); 25 | 26 | workbox.core.clientsClaim(); 27 | 28 | /** 29 | * The workboxSW.precacheAndRoute() method efficiently caches and responds to 30 | * requests for URLs in the manifest. 31 | * See https://goo.gl/S9QRab 32 | */ 33 | self.__precacheManifest = [].concat(self.__precacheManifest || []); 34 | workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); 35 | 36 | workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/index.html"), { 37 | 38 | blacklist: [/^\/_/,/\/[^/?]+\.[^/]+$/], 39 | }); 40 | -------------------------------------------------------------------------------- /build/static/css/2.bf0413c3.chunk.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["slick-theme.css","slick.css"],"names":[],"mappings":"AAwFA,gBAGA,CC1FA,cAKI,qBAAsB,CAEtB,wBAAyB,CACtB,qBAAsB,CACrB,oBAAqB,CACjB,gBAAiB,CAEzB,0BAA2B,CAC3B,uBAAwB,CAEpB,kBAAmB,CACvB,uCACJ,CAEA,0BAjBI,iBAAkB,CAElB,aAwBJ,CATA,YAKI,eAAgB,CAEhB,QAAS,CACT,SACJ,CACA,kBAEI,YACJ,CACA,qBAEI,cAAe,CACf,WACJ,CAEA,qDAOY,uBACZ,CAEA,aAEI,iBAAkB,CAClB,KAAM,CACN,MAAO,CAEP,aAAc,CACd,gBAAiB,CACjB,iBACJ,CACA,uCAGI,aAAc,CAEd,UACJ,CACA,mBAEI,UACJ,CACA,4BAEI,iBACJ,CAEA,aAEI,YAAa,CACb,UAAW,CAEX,WAAY,CACZ,cACJ,CACA,uBAEI,WACJ,CACA,iBAEI,aACJ,CACA,+BAEI,YACJ,CACA,0BAEI,mBACJ,CACA,gCAEI,aACJ,CACA,4BAEI,iBACJ,CACA,6BAEI,aAAc,CAEd,WAAY,CAEZ,4BACJ,CACA,0BACI,YACJ,CDpHA,2BAEI,6/KACJ,CAGA,WAEI,mBAAoB,CACpB,eAAmB,CACnB,iBAAkB,CAElB,yCAAA,CACA,qPACJ,CAEA,wBAGI,WAAY,CACZ,aAAc,CAEd,iBAAkB,CAClB,OAAQ,CAER,aAAc,CAEd,UAAW,CACX,WAAY,CACZ,SAAU,CAGV,0BAA6B,CAE7B,cAAe,CAGf,WAGJ,CACA,gGALI,iBAAkB,CAElB,YAAa,CACb,sBAUJ,CACA,oGAKI,SACJ,CACA,oEAGI,WACJ,CAEA,sCAGI,mBAAoB,CACpB,cAAe,CACf,aAAc,CAEd,WAAY,CACZ,UAAY,CAEZ,kCAAmC,CACnC,iCACJ,CAEA,YAEI,UACJ,CACA,sBAEI,WAAY,CACZ,SACJ,CACA,mBAEI,WACJ,CACA,6BAEI,WACJ,CAEA,YAEI,WACJ,CACA,sBAEI,UAAW,CACX,UACJ,CACA,mBAEI,WACJ,CACA,6BAEI,WACJ,CAGA,2BAEI,kBACJ,CAEA,YAEI,iBAAkB,CAClB,YAAa,CAEb,aAAc,CAEd,UAAW,CACX,SAAU,CACV,QAAS,CAET,eAAgB,CAEhB,iBACJ,CACA,eAEI,iBAAkB,CAElB,oBAAqB,CAIrB,YAAa,CACb,SAGJ,CACA,qCAPI,UAAW,CACX,WAAY,CAIZ,cAmBJ,CAjBA,sBAEI,WAAY,CACZ,aAAc,CAEd,aAAc,CAId,WAAY,CAIZ,iBAAkB,CAClB,QAAS,CACT,YAAa,CACb,sBACJ,CACA,wDAGI,YACJ,CACA,sEAGI,SACJ,CACA,6BAEI,mBAAoB,CACpB,aAAc,CACd,gBAAiB,CAEjB,iBAAkB,CAClB,KAAM,CACN,MAAO,CAEP,UAAW,CACX,WAAY,CAEZ,WAAY,CACZ,iBAAkB,CAElB,WAAY,CACZ,UAAY,CAEZ,kCAAmC,CACnC,iCACJ,CACA,0CAEI,WAAY,CACZ,UACJ","file":"2.bf0413c3.chunk.css","sourcesContent":["@charset 'UTF-8';\n/* Slider */\n.slick-loading .slick-list\n{\n background: #fff url('./ajax-loader.gif') center center no-repeat;\n}\n\n/* Icons */\n@font-face\n{\n font-family: 'slick';\n font-weight: normal;\n font-style: normal;\n\n src: url('./fonts/slick.eot');\n src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');\n}\n/* Arrows */\n.slick-prev,\n.slick-next\n{\n font-size: 0;\n line-height: 0;\n\n position: absolute;\n top: 50%;\n\n display: block;\n\n width: 20px;\n height: 20px;\n padding: 0;\n -webkit-transform: translate(0, -50%);\n -ms-transform: translate(0, -50%);\n transform: translate(0, -50%);\n\n cursor: pointer;\n\n color: transparent;\n border: none;\n outline: none;\n background: transparent;\n}\n.slick-prev:hover,\n.slick-prev:focus,\n.slick-next:hover,\n.slick-next:focus\n{\n color: transparent;\n outline: none;\n background: transparent;\n}\n.slick-prev:hover:before,\n.slick-prev:focus:before,\n.slick-next:hover:before,\n.slick-next:focus:before\n{\n opacity: 1;\n}\n.slick-prev.slick-disabled:before,\n.slick-next.slick-disabled:before\n{\n opacity: .25;\n}\n\n.slick-prev:before,\n.slick-next:before\n{\n font-family: 'slick';\n font-size: 20px;\n line-height: 1;\n\n opacity: .75;\n color: white;\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.slick-prev\n{\n left: -25px;\n}\n[dir='rtl'] .slick-prev\n{\n right: -25px;\n left: auto;\n}\n.slick-prev:before\n{\n content: '←';\n}\n[dir='rtl'] .slick-prev:before\n{\n content: '→';\n}\n\n.slick-next\n{\n right: -25px;\n}\n[dir='rtl'] .slick-next\n{\n right: auto;\n left: -25px;\n}\n.slick-next:before\n{\n content: '→';\n}\n[dir='rtl'] .slick-next:before\n{\n content: '←';\n}\n\n/* Dots */\n.slick-dotted.slick-slider\n{\n margin-bottom: 30px;\n}\n\n.slick-dots\n{\n position: absolute;\n bottom: -25px;\n\n display: block;\n\n width: 100%;\n padding: 0;\n margin: 0;\n\n list-style: none;\n\n text-align: center;\n}\n.slick-dots li\n{\n position: relative;\n\n display: inline-block;\n\n width: 20px;\n height: 20px;\n margin: 0 5px;\n padding: 0;\n\n cursor: pointer;\n}\n.slick-dots li button\n{\n font-size: 0;\n line-height: 0;\n\n display: block;\n\n width: 20px;\n height: 20px;\n padding: 5px;\n\n cursor: pointer;\n\n color: transparent;\n border: 0;\n outline: none;\n background: transparent;\n}\n.slick-dots li button:hover,\n.slick-dots li button:focus\n{\n outline: none;\n}\n.slick-dots li button:hover:before,\n.slick-dots li button:focus:before\n{\n opacity: 1;\n}\n.slick-dots li button:before\n{\n font-family: 'slick';\n font-size: 6px;\n line-height: 20px;\n\n position: absolute;\n top: 0;\n left: 0;\n\n width: 20px;\n height: 20px;\n\n content: '•';\n text-align: center;\n\n opacity: .25;\n color: black;\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.slick-dots li.slick-active button:before\n{\n opacity: .75;\n color: black;\n}\n","/* Slider */\n.slick-slider\n{\n position: relative;\n\n display: block;\n box-sizing: border-box;\n\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n -webkit-touch-callout: none;\n -khtml-user-select: none;\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n -webkit-tap-highlight-color: transparent;\n}\n\n.slick-list\n{\n position: relative;\n\n display: block;\n overflow: hidden;\n\n margin: 0;\n padding: 0;\n}\n.slick-list:focus\n{\n outline: none;\n}\n.slick-list.dragging\n{\n cursor: pointer;\n cursor: hand;\n}\n\n.slick-slider .slick-track,\n.slick-slider .slick-list\n{\n -webkit-transform: translate3d(0, 0, 0);\n -moz-transform: translate3d(0, 0, 0);\n -ms-transform: translate3d(0, 0, 0);\n -o-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n}\n\n.slick-track\n{\n position: relative;\n top: 0;\n left: 0;\n\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.slick-track:before,\n.slick-track:after\n{\n display: table;\n\n content: '';\n}\n.slick-track:after\n{\n clear: both;\n}\n.slick-loading .slick-track\n{\n visibility: hidden;\n}\n\n.slick-slide\n{\n display: none;\n float: left;\n\n height: 100%;\n min-height: 1px;\n}\n[dir='rtl'] .slick-slide\n{\n float: right;\n}\n.slick-slide img\n{\n display: block;\n}\n.slick-slide.slick-loading img\n{\n display: none;\n}\n.slick-slide.dragging img\n{\n pointer-events: none;\n}\n.slick-initialized .slick-slide\n{\n display: block;\n}\n.slick-loading .slick-slide\n{\n visibility: hidden;\n}\n.slick-vertical .slick-slide\n{\n display: block;\n\n height: auto;\n\n border: 1px solid transparent;\n}\n.slick-arrow.slick-hidden {\n display: none;\n}\n"]} -------------------------------------------------------------------------------- /build/static/js/runtime-main.5e45bd3a.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(r){for(var n,i,l=r[0],c=r[1],f=r[2],p=0,s=[];p 2 | 3 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /build/static/media/soldier14.5cc43e81.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/soldier14.5cc43e81.jpg -------------------------------------------------------------------------------- /build/static/media/superfly7.8c9c3f25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/superfly7.8c9c3f25.jpg -------------------------------------------------------------------------------- /build/static/media/superfly7pro.82883abf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/superfly7pro.82883abf.jpg -------------------------------------------------------------------------------- /build/static/media/superrep.4d283465.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/superrep.4d283465.jpg -------------------------------------------------------------------------------- /build/static/media/tech20.2a088463.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/tech20.2a088463.jpg -------------------------------------------------------------------------------- /build/static/media/tiempo8.8a251e16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/tiempo8.8a251e16.jpg -------------------------------------------------------------------------------- /build/static/media/trey5.42b129c8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/trey5.42b129c8.jpg -------------------------------------------------------------------------------- /build/static/media/vapor13.3d10f3da.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/vapor13.3d10f3da.jpg -------------------------------------------------------------------------------- /build/static/media/vapor13mds.4bc9ed37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/vapor13mds.4bc9ed37.jpg -------------------------------------------------------------------------------- /build/static/media/vapor13neymar.f73e22d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/vapor13neymar.f73e22d3.jpg -------------------------------------------------------------------------------- /build/static/media/vaporWing.c2ea847f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/vaporWing.c2ea847f.jpg -------------------------------------------------------------------------------- /build/static/media/vaporX.d84a77bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/vaporX.d84a77bc.jpg -------------------------------------------------------------------------------- /build/static/media/vision2.353813cd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/vision2.353813cd.jpg -------------------------------------------------------------------------------- /build/static/media/wBasketball.0dd7ccab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wBasketball.0dd7ccab.jpg -------------------------------------------------------------------------------- /build/static/media/wFootball.8b7405ae.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wFootball.8b7405ae.jpg -------------------------------------------------------------------------------- /build/static/media/wGym.375d02d2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wGym.375d02d2.jpg -------------------------------------------------------------------------------- /build/static/media/wJordan.798b5dac.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wJordan.798b5dac.jpg -------------------------------------------------------------------------------- /build/static/media/wRunning.f2a685ef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wRunning.f2a685ef.jpg -------------------------------------------------------------------------------- /build/static/media/wTennis.addea994.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wTennis.addea994.jpg -------------------------------------------------------------------------------- /build/static/media/wallpaper.afc03c12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wallpaper.afc03c12.jpg -------------------------------------------------------------------------------- /build/static/media/westbrook.39033d07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/westbrook.39033d07.jpg -------------------------------------------------------------------------------- /build/static/media/wildcard.200ae3d7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wildcard.200ae3d7.jpg -------------------------------------------------------------------------------- /build/static/media/wildcard.a05efb17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/wildcard.a05efb17.jpg -------------------------------------------------------------------------------- /build/static/media/zoom92.36161f98.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoom92.36161f98.jpg -------------------------------------------------------------------------------- /build/static/media/zoomGP.3c5bb422.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoomGP.3c5bb422.jpg -------------------------------------------------------------------------------- /build/static/media/zoomTrunner.a2ff8043.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoomTrunner.a2ff8043.jpg -------------------------------------------------------------------------------- /build/static/media/zoomTurbo.f8f6ab4a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoomTurbo.f8f6ab4a.jpg -------------------------------------------------------------------------------- /build/static/media/zoomX.e53c7760.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoomX.e53c7760.jpg -------------------------------------------------------------------------------- /build/static/media/zoomZero.14182fea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoomZero.14182fea.jpg -------------------------------------------------------------------------------- /build/static/media/zoomZero.6308004f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/build/static/media/zoomZero.6308004f.jpg -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "build", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ], 9 | "rewrites": [ 10 | { 11 | "source": "**", 12 | "destination": "/index.html" 13 | } 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ecommerce-site", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@material-ui/core": "^4.11.0", 7 | "@material-ui/icons": "^4.9.1", 8 | "@testing-library/jest-dom": "^4.2.4", 9 | "@testing-library/react": "^9.5.0", 10 | "@testing-library/user-event": "^7.2.1", 11 | "firebase": "^7.18.0", 12 | "react": "^16.13.1", 13 | "react-currency-format": "^1.0.0", 14 | "react-dom": "^16.13.1", 15 | "react-router-dom": "^5.2.0", 16 | "react-scripts": "3.4.3", 17 | "react-slick": "^0.27.9", 18 | "react-stripe-checkout": "^2.6.3", 19 | "slick-carousel": "^1.8.1" 20 | }, 21 | "scripts": { 22 | "start": "react-scripts start", 23 | "build": "react-scripts build", 24 | "test": "react-scripts test", 25 | "eject": "react-scripts eject" 26 | }, 27 | "eslintConfig": { 28 | "extends": "react-app" 29 | }, 30 | "browserslist": { 31 | "production": [ 32 | ">0.2%", 33 | "not dead", 34 | "not op_mini all" 35 | ], 36 | "development": [ 37 | "last 1 chrome version", 38 | "last 1 firefox version", 39 | "last 1 safari version" 40 | ] 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | 45 | 46 | 47 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; 3 | import { useStateValue } from './components/StateProvider/StateProvider'; 4 | import { auth } from './firebase'; 5 | 6 | import './App.css'; 7 | import Header from './components/Header/Header'; 8 | import Home from './components/Home/Home'; 9 | import Men from './components/AllShoes/Men/Men'; 10 | import Women from './components/AllShoes/Women/Women'; 11 | import Checkout from './components/Checkout/Checkout'; 12 | import Login from './components/Login/Login'; 13 | 14 | import MenGym from './components/AllShoes/Men/MenGym/MenGym'; 15 | import MenJordan from './components/AllShoes/Men/MenJordan/MenJordan'; 16 | import MenRunning from './components/AllShoes/Men/MenRunning/MenRunning'; 17 | import MenFootball from './components/AllShoes/Men/MenFootball/MenFootball'; 18 | import MenTennis from './components/AllShoes/Men/MenTennis/MenTennis'; 19 | import MenBasketball from './components/AllShoes/Men/MenBasketball/MenBasketball'; 20 | 21 | import WomenTennis from './components/AllShoes/Women/WomenTennis/WomenTennis'; 22 | import WomenRunning from './components/AllShoes/Women/WomenRunning/WomenRunning'; 23 | import WomenFootball from './components/AllShoes/Women/WomenFootball/WomenFootball'; 24 | import WomenBasketball from './components/AllShoes/Women/WomenBasketball/WomenBasketball'; 25 | import WomenGym from './components/AllShoes/Women/WomenGym/WomenGym'; 26 | import WomenJordan from './components/AllShoes/Women/WomenJordan/WomenJordan'; 27 | 28 | function App() { 29 | 30 | const [{ user }, dispatch] = useStateValue(); 31 | 32 | useEffect(() =>{ 33 | const unsubscribe = auth.onAuthStateChanged((authUser) => { 34 | if (authUser) { 35 | dispatch({ 36 | type: 'SET_USER', 37 | user: authUser 38 | }); 39 | } else { 40 | dispatch({ 41 | type: 'SET_USER', 42 | user: null 43 | }); 44 | } 45 | }); 46 | 47 | return () => { 48 | unsubscribe(); 49 | } 50 | 51 | }, []); 52 | 53 | console.log('User is >>>', user); 54 | 55 | return ( 56 | 57 |
58 | 59 | 60 | 61 |
62 | 63 | 64 | 65 |
66 | 67 | 68 | 69 |
70 | 71 | 72 | 73 |
74 | 75 | 76 | 77 |
78 | 79 | 80 | 81 |
82 | 83 | 84 | 85 |
86 | 87 | 88 | 89 | 90 | 91 |
92 | 93 | 94 | 95 |
96 | 97 | 98 | 99 |
100 | 101 | 102 | 103 |
104 | 105 | 106 | 107 |
108 | 109 | 110 | 111 |
112 | 113 | 114 | 115 |
116 | 117 | 118 | 119 | 120 | {/*
*/} 121 | 122 | 123 | 124 | 125 |
126 | 127 | 128 | 129 | 130 |
131 | 132 | 133 | 134 | 135 |
136 |
137 | ); 138 | } 139 | 140 | export default App; 141 | -------------------------------------------------------------------------------- /src/components/AllShoes/AllShoes.css: -------------------------------------------------------------------------------- 1 | .allShoes { 2 | max-width: 100vw; 3 | /* background: linear-gradient(to right, rgb(187, 0, 0), rgb(252, 27, 27)); */ 4 | } 5 | .allShoes__shoes { 6 | margin-left: 15vw; 7 | margin-right: 30px; 8 | margin-top: 30px; 9 | /* border: 1px solid black; */ 10 | display: flex; 11 | flex-wrap: wrap; 12 | justify-content: space-between; 13 | align-items: center; 14 | } 15 | 16 | @media screen and (max-width: 500px) { 17 | .allShoes__shoes { 18 | margin-left: 0; 19 | margin-top: 80px; 20 | flex-direction: column; 21 | align-items: center; 22 | } 23 | } 24 | 25 | @media screen and (min-width: 500px) and (max-width: 980px) { 26 | .allShoes__shoes { 27 | margin-left: 0; 28 | margin-top: 80px; 29 | align-items: center; 30 | } 31 | } -------------------------------------------------------------------------------- /src/components/AllShoes/AllShoes_Navbar/AllShoes_Navbar.css: -------------------------------------------------------------------------------- 1 | .allShoesNavbar { 2 | height: 350px; 3 | width: 30vh; 4 | background: linear-gradient(to bottom right, black, darkslategray); 5 | position: fixed; 6 | margin-top: 60px; 7 | margin-left: 0; 8 | color: white; 9 | border-top-right-radius: 15px; 10 | border-bottom-right-radius: 15px; 11 | display: flex; 12 | flex-direction: column; 13 | align-items: center; 14 | padding-top: 10px; 15 | } 16 | 17 | .allShoesNavbar__section { 18 | font-size: 20px; 19 | font-weight: 500; 20 | color: white; 21 | border-bottom: 1px solid white; 22 | margin-bottom: 20px; 23 | } 24 | 25 | .allShoesNavbar__category { 26 | display: flex; 27 | flex-direction: column; 28 | align-items: center; 29 | width: 100%; 30 | } 31 | 32 | .allShoesNavbar__items { 33 | margin-top: 10px; 34 | color: rgb(224, 224, 224); 35 | font-size: 16px; 36 | display: block; 37 | padding: 5px 20px; 38 | border-radius: 5px; 39 | transition: all 0.5s ease; 40 | } 41 | 42 | .allShoesNavbar__items:hover { 43 | background-color: rgb(173, 173, 173); 44 | color: black; 45 | } 46 | 47 | .allShoesNavbar__active { 48 | border-bottom: 1px solid gray; 49 | } 50 | 51 | .allShoesNavbar2 { 52 | display: none; 53 | } 54 | 55 | @media screen and (max-width: 400px) { 56 | .allShoesNavbar { 57 | display: none; 58 | } 59 | 60 | .allShoesNavbar2 { 61 | display: flex; 62 | flex-direction: column; 63 | align-items: center; 64 | position: fixed; 65 | top: 50px; 66 | left: 0; 67 | background: linear-gradient(to right, rgb(39, 39, 39), rgb(62, 126, 126)); 68 | width: 100vw; 69 | overflow-y: scroll; 70 | } 71 | 72 | .allShoesNavbar2__section { 73 | color: rgb(226, 226, 226); 74 | margin-top: 5px; 75 | text-decoration: underline; 76 | margin-bottom: 2px; 77 | font-size: 13px; 78 | } 79 | 80 | .allShoesNavbar2__category { 81 | margin-bottom: 7px; 82 | } 83 | 84 | .allShoesNavbar2__items { 85 | color: rgb(201, 201, 201); 86 | margin: 0 3px; 87 | font-size: 10px; 88 | padding: 2px 1px; 89 | border-radius: 3px; 90 | cursor: pointer; 91 | transition: all 0.5s ease; 92 | } 93 | 94 | .allShoesNavbar2__items:hover { 95 | background: linear-gradient(to right, rgb(173, 173, 173), rgb(223, 223, 223)); 96 | color: rgb(37, 37, 37); 97 | } 98 | 99 | .allShoesNavbar2__active { 100 | border-bottom: 1px solid rgb(189, 189, 189); 101 | } 102 | } 103 | 104 | @media screen and (min-width: 400px) and (max-width: 980px) { 105 | .allShoesNavbar { 106 | display: none; 107 | } 108 | 109 | .allShoesNavbar2 { 110 | display: flex; 111 | flex-direction: column; 112 | align-items: center; 113 | position: fixed; 114 | top: 50px; 115 | left: 0; 116 | background: linear-gradient(to right, rgb(39, 39, 39), rgb(62, 126, 126)); 117 | width: 100vw; 118 | overflow-y: scroll; 119 | } 120 | 121 | .allShoesNavbar2__section { 122 | color: rgb(226, 226, 226); 123 | margin-top: 5px; 124 | text-decoration: underline; 125 | margin-bottom: 2px; 126 | font-size: 15px; 127 | } 128 | 129 | .allShoesNavbar2__category { 130 | margin-bottom: 7px; 131 | } 132 | 133 | .allShoesNavbar2__items { 134 | color: rgb(201, 201, 201); 135 | margin: 0 5px; 136 | font-size: 12px; 137 | padding: 2px 3px; 138 | border-radius: 3px; 139 | cursor: pointer; 140 | transition: all 0.5s ease; 141 | } 142 | 143 | .allShoesNavbar2__items:hover { 144 | background: linear-gradient(to right, rgb(173, 173, 173), rgb(223, 223, 223)); 145 | color: rgb(37, 37, 37); 146 | } 147 | 148 | .allShoesNavbar2__active { 149 | border-bottom: 1px solid rgb(189, 189, 189); 150 | } 151 | } -------------------------------------------------------------------------------- /src/components/AllShoes/AllShoes_Navbar/AllShoes_Navbar.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { Link, NavLink } from 'react-router-dom'; 3 | 4 | import './AllShoes_Navbar.css'; 5 | import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; 6 | import ArrowDropUpIcon from '@material-ui/icons/ArrowDropUp'; 7 | 8 | // pathWalking = pathRunning , pathAthletics = pathTennis 9 | 10 | const AllShoes_Navbar = ({ title, pathGym, pathJordan, pathWalking, pathFootball, pathAthletics, pathBasketball }) => { 11 | 12 | const [shoesBar, setShoesBar] = useState(false); 13 | 14 | const showShoesBar = () => setShoesBar(!shoesBar); 15 | 16 | return ( 17 | <> 18 |
19 | {title} Shoes 20 |
21 | 22 | Gym 23 | 24 | 25 | Tennis 26 | 27 | 28 | Jordan 29 | 30 | 31 | Running 32 | 33 | 34 | Football 35 | 36 | 37 | Basketball 38 | 39 |
40 |
41 | 42 |
43 | {title} Shoes 44 |
45 | 46 | Gym 47 | 48 | 49 | Tennis 50 | 51 | 52 | Jordan 53 | 54 | 55 | Running 56 | 57 | 58 | Football 59 | 60 | 61 | Basketball 62 | 63 |
64 |
65 | 66 | {/*
67 | 68 |
69 |
70 | {title} Shoes 71 |
72 | 73 | Gym 74 | 75 | 76 | Tennis 77 | 78 | 79 | Jordan 80 | 81 | 82 | Running 83 | 84 | 85 | Football 86 | 87 | 88 | Basketball 89 | 90 |
91 |
92 | 93 |
94 |
*/} 95 | 96 | ); 97 | } 98 | 99 | export default AllShoes_Navbar; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/Men.css: -------------------------------------------------------------------------------- 1 | /* .men { 2 | max-width: 100vw; 3 | background: linear-gradient(to right, rgb(187, 0, 0), rgb(252, 27, 27)); 4 | } 5 | 6 | .men__shoes { 7 | margin-left: 20vw; 8 | margin-right: 30px; 9 | margin-top: 30px; 10 | border: 1px solid black; 11 | height: 100vh; 12 | } */ 13 | 14 | .men { 15 | max-width: 100vw; 16 | height: 100%; 17 | background: linear-gradient(to right, rgb(226, 151, 151), rgb(214, 211, 211)); 18 | } 19 | 20 | .men__categories { 21 | margin: 50px; 22 | display: flex; 23 | flex-wrap: wrap; 24 | justify-content: space-between; 25 | } 26 | 27 | @media screen and (max-width: 500px) { 28 | .men__categories { 29 | margin: 0; 30 | margin-top: 18px; 31 | /* margin: 0 15px; */ 32 | flex-direction: column; 33 | align-items: center; 34 | } 35 | } 36 | 37 | @media screen and (min-width: 500px) and (max-width: 785px) { 38 | .men__categories { 39 | margin: 0; 40 | margin-top: 20px; 41 | /* margin: 0 15px; */ 42 | flex-direction: column; 43 | align-items: center; 44 | } 45 | } -------------------------------------------------------------------------------- /src/components/AllShoes/Men/Men.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import './Men.css'; 4 | // import AllShoes_Navbar from '../AllShoes_Navbar/AllShoes_Navbar'; 5 | import MenWomenFootwear from '../MenWomenFootwear/MenWomenFootwear'; 6 | import MGym from './mGym.jpg'; 7 | import MTennis from './mTennis.jpeg'; 8 | import MJordan from './mJordan.jpg'; 9 | import MRunning from './mRunning.jpg'; 10 | import MFootball from './mFootball.jpg'; 11 | import MBasketball from './mBasketball.jpg'; 12 | 13 | const Men = () => { 14 | return ( 15 |
16 | {/* 25 |
26 | hi 27 |
*/} 28 | . 29 |
30 | 35 | 40 | 45 | 50 | 55 | 60 |
61 | . 62 |
63 | ); 64 | } 65 | 66 | export default Men; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/Lebron17monstars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/Lebron17monstars.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/MenBasketball.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './MenBasketball.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import Kyrie3 from './kyrie3.jpg'; 9 | import Lebron17 from './lebron17.jpg'; 10 | import Pg4 from './pg4.jpg'; 11 | import Lebron17FP from './lebron17FP.jpg'; 12 | import KybridS2 from './kybridS2.jpg'; 13 | import Freak2 from './freak2.jpg'; 14 | import Lebron17Monstars from './Lebron17monstars.jpg'; 15 | import Kyrie6 from './kyrie6.jpg'; 16 | 17 | const MenBasketball = () => { 18 | return ( 19 |
20 | 30 |
31 | 39 | 47 | 55 | 63 | 71 | 79 | 87 | 95 |
96 |
97 | ); 98 | } 99 | 100 | export default MenBasketball; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/freak2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/freak2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/kybridS2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/kybridS2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/kyrie3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/kyrie3.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/kyrie6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/kyrie6.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/lebron17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/lebron17.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/lebron17FP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/lebron17FP.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenBasketball/pg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenBasketball/pg4.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/MenFootball.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './MenFootball.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import PhantomGT from './phantomGT.jpg'; 9 | import PhantomGTclub from './phantomGTclub.jpg'; 10 | import Superfly7 from './superfly7.jpg'; 11 | import Tiempo8 from './tiempo8.jpg'; 12 | import Superfly7pro from './superfly7pro.jpg'; 13 | import Vapor13 from './vapor13.jpg'; 14 | import Vapor13mds from './vapor13mds.jpg'; 15 | import Vision2 from './vision2.jpg'; 16 | import Vapor13neymar from './vapor13neymar.jpg'; 17 | import Legend8 from './legend8.jpg'; 18 | 19 | const MenFootball = () => { 20 | return ( 21 |
22 | 31 |
32 | 40 | 48 | 56 | 64 | 72 | 80 | 88 | 96 | 104 | 112 |
113 |
114 | ); 115 | } 116 | 117 | export default MenFootball; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/legend8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/legend8.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/phantomGT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/phantomGT.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/phantomGTclub.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/phantomGTclub.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/superfly7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/superfly7.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/superfly7pro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/superfly7pro.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/tiempo8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/tiempo8.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/vapor13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/vapor13.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/vapor13mds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/vapor13mds.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/vapor13neymar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/vapor13neymar.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenFootball/vision2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenFootball/vision2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/MenGym.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './MenGym.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import Metcon6 from './metcon6.jpg'; 9 | import AirMonarch from './airMonarch.jpg'; 10 | import MatFraser from './matFraser.jpg'; 11 | import MaxAlpha from './maxAlpha.jpg'; 12 | import AirZoom from './airZoom.jpg'; 13 | import Romaleos4 from './romaleos4.jpg'; 14 | 15 | const MenGym = () => { 16 | return ( 17 |
18 | 27 |
28 | 36 | 44 | 52 | 60 | 68 | 76 |
77 |
78 | ); 79 | } 80 | 81 | export default MenGym; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/airMonarch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenGym/airMonarch.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/airZoom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenGym/airZoom.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/matFraser.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenGym/matFraser.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/maxAlpha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenGym/maxAlpha.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/metcon6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenGym/metcon6.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenGym/romaleos4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenGym/romaleos4.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/MenJordan.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './MenJordan.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import AirMid from './airMid.jpg'; 9 | import AirOg from './airOg.jpg'; 10 | import Jumpman from './jumpman.jpg'; 11 | import ProtoZ from './protoZ.jpg'; 12 | import Retro5 from './retro5.jpg'; 13 | import Retro14 from './retro14.jpg'; 14 | import Westbrook from './westbrook.jpg'; 15 | import Zoom92 from './zoom92.jpg'; 16 | import ZoomTrunner from './zoomTrunner.jpg'; 17 | 18 | const MenJordan = () => { 19 | return ( 20 |
21 | 30 |
31 | 39 | 47 | 55 | 63 | 71 | 79 | 87 | 95 | 103 |
104 |
105 | ); 106 | } 107 | 108 | export default MenJordan; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/airMid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/airMid.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/airOg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/airOg.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/jumpman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/jumpman.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/protoZ.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/protoZ.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/retro14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/retro14.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/retro5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/retro5.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/westbrook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/westbrook.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/zoom92.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/zoom92.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenJordan/zoomTrunner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenJordan/zoomTrunner.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/MenRunning.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './MenRunning.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import Gravity2 from './gravity2.jpg'; 9 | import Pegasus37 from './pegasus37.jpg'; 10 | import Quest2 from './quest2.jpg'; 11 | import Downshifter10 from './downshifter10.jpg'; 12 | import ReactPhantom from './reactPhantom.jpg'; 13 | import Miler from './miler.jpg'; 14 | import Revolution5 from './revolution5.jpg'; 15 | 16 | const MenRunning = () => { 17 | return ( 18 |
19 | 28 |
29 | 37 | 45 | 53 | 61 | 69 | 77 | 85 |
86 |
87 | ); 88 | } 89 | 90 | export default MenRunning; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/downshifter10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/downshifter10.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/gravity2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/gravity2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/miler.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/miler.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/pegasus37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/pegasus37.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/quest2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/quest2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/reactPhantom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/reactPhantom.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenRunning/revolution5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenRunning/revolution5.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/MenTennis.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './MenTennis.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import Lite2 from './lite2.jpg'; 9 | import ZoomX from './zoomX.jpg'; 10 | import ZoomTurbo from './zoomTurbo.jpg'; 11 | import VaporWing from './vaporWing.jpg'; 12 | import Wildcard from './wildcard.jpg'; 13 | import Tech20 from './tech20.jpg'; 14 | import ZoomZero from './zoomZero.jpg'; 15 | 16 | const MenTennis = () => { 17 | return ( 18 |
19 | 28 |
29 | 37 | 45 | 53 | 61 | 69 | 77 | 85 |
86 |
87 | ); 88 | } 89 | 90 | export default MenTennis; -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/lite2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/lite2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/tech20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/tech20.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/vaporWing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/vaporWing.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/wildcard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/wildcard.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/zoomTurbo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/zoomTurbo.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/zoomX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/zoomX.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/MenTennis/zoomZero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/MenTennis/zoomZero.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/mBasketball.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/mBasketball.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/mFootball.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/mFootball.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/mGym.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/mGym.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/mJordan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/mJordan.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/mRunning.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/mRunning.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Men/mTennis.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Men/mTennis.jpeg -------------------------------------------------------------------------------- /src/components/AllShoes/MenWomenFootwear/MenWomenFootwear.css: -------------------------------------------------------------------------------- 1 | .menWomenFootwear { 2 | width: 320px; 3 | height: 398px; 4 | display: flex; 5 | flex-direction: column; 6 | border: 1px solid rgb(177, 177, 177); 7 | box-shadow: 5px 5px 5px rgb(0, 0, 0); 8 | border-radius: 10px; 9 | margin-bottom: 50px; 10 | margin-right: 20px; 11 | } 12 | 13 | .menWomenFootwear > span { 14 | text-align: center; 15 | padding: 10px 0; 16 | font-size: 22px; 17 | font-weight: 500; 18 | text-transform: uppercase; 19 | border-top-left-radius: 10px; 20 | border-top-right-radius: 10px; 21 | border-bottom: 1px solid black; 22 | background: linear-gradient(to right, black, rgb(52, 109, 109)); 23 | color: rgb(241, 197, 197); 24 | } 25 | 26 | .shoesimage { 27 | width: 100%; 28 | height: 280px; 29 | filter: brightness(60%); 30 | } 31 | 32 | .view { 33 | width: 95%; 34 | margin: 0 auto; 35 | background: linear-gradient(to left, black, rgb(52, 109, 109)); 36 | text-align: center; 37 | padding: 10px 0; 38 | border-radius: 7px; 39 | transition: all 0.5s ease; 40 | cursor: pointer; 41 | } 42 | 43 | .menWomenFootwear__view { 44 | font-size: 20px; 45 | font-weight: 500; 46 | color: rgb(209, 209, 209); 47 | } 48 | 49 | .view:hover { 50 | color: darkslategray; 51 | background: linear-gradient(to left, rgb(255, 137, 156), rgb(53, 43, 43)); 52 | } 53 | 54 | @media screen and (max-width: 500px) { 55 | .menWomenFootwear { 56 | width: 240px; 57 | height: 350px; 58 | margin: 0; 59 | margin-bottom: 37px; 60 | } 61 | 62 | .shoesimage { 63 | height: 232px; 64 | } 65 | } 66 | 67 | @media screen and (min-width: 500px) and (max-width: 785px) { 68 | .menWomenFootwear { 69 | width: 270px; 70 | height: 378px; 71 | margin: 0; 72 | margin-bottom: 40px; 73 | } 74 | 75 | .shoesimage { 76 | height: 260px; 77 | } 78 | } -------------------------------------------------------------------------------- /src/components/AllShoes/MenWomenFootwear/MenWomenFootwear.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | import './MenWomenFootwear.css'; 5 | import MGym from '../Men/mGym.jpg'; 6 | 7 | const MenWomenFootwear = ({ title, image, pathTo }) => { 8 | return ( 9 |
10 | {title} 11 | 12 | 13 |
14 | Click here to View All 15 |
16 | 17 |
18 | ); 19 | } 20 | 21 | export default MenWomenFootwear; -------------------------------------------------------------------------------- /src/components/AllShoes/ShoeComponent/ShoeComponent.css: -------------------------------------------------------------------------------- 1 | .shoeComponent { 2 | width: 300px; 3 | height: 500px; 4 | border: 1px solid rgb(212, 212, 212); 5 | box-shadow: 5px 5px 5px rgb(179, 179, 179); 6 | margin-left: 25px; 7 | margin-bottom: 55px; 8 | display: flex; 9 | flex-direction: column; 10 | } 11 | 12 | .shoeComponent > img { 13 | width: 300px; 14 | height: 300px; 15 | } 16 | 17 | .shoeComponent__name1 { 18 | background: linear-gradient(to right, rgb(211, 210, 210), rgb(236, 143, 143)); 19 | text-align: center; 20 | padding: 7px 0; 21 | font-size: 20px; 22 | font-weight: 500; 23 | } 24 | /* .shoeComponent__name2 { 25 | background: linear-gradient(to right, rgb(211, 210, 210), rgb(236, 143, 143)); 26 | text-align: center; 27 | padding: 7px 0; 28 | font-size: 20px; 29 | font-weight: 500; 30 | } 31 | .shoeComponent__name3 { 32 | background: linear-gradient(to right, rgb(211, 210, 210), rgb(236, 143, 143)); 33 | text-align: center; 34 | padding: 7px 0; 35 | font-size: 20px; 36 | font-weight: 500; 37 | } */ 38 | 39 | .shoeComponent__price { 40 | display: flex; 41 | align-items: center; 42 | justify-content: space-between; 43 | padding: 8px 10px; 44 | border-bottom: 1px solid rgb(206, 206, 206); 45 | } 46 | 47 | .shoeComponent__before { 48 | width: 50%; 49 | border-right: 1px solid rgb(175, 175, 175); 50 | color: rgb(54, 54, 54); 51 | font-size: 16px; 52 | font-weight: 400; 53 | } 54 | 55 | .shoeComponent__beforePrice { 56 | color: red; 57 | font-size: 20px; 58 | font-weight: 500; 59 | text-decoration: line-through; 60 | } 61 | 62 | .shoeComponent__after { 63 | width: 50%; 64 | text-align: right; 65 | color: rgb(54, 54, 54); 66 | font-size: 16px; 67 | font-weight: 400; 68 | } 69 | 70 | .shoeComponent__afterPrice { 71 | color: rgb(3, 161, 3); 72 | font-size: 20px; 73 | font-weight: 500; 74 | } 75 | 76 | .shoeComponent__category { 77 | color: rgb(109, 109, 109); 78 | margin: 7px; 79 | font-size: 16px; 80 | font-weight: 400; 81 | } 82 | 83 | .shoeComponent__add { 84 | background: linear-gradient(to right, black, darkslategray); 85 | color: rgb(221, 221, 221); 86 | min-width: 91%; 87 | margin: 0 auto; 88 | margin-top: 15px; 89 | padding: 7px 0; 90 | display: flex; 91 | flex-direction: column; 92 | align-items: center; 93 | border-radius: 7px; 94 | border: 1px solid black; 95 | cursor: pointer; 96 | transition: all 0.5s ease; 97 | } 98 | 99 | .shoeComponent__add:hover { 100 | background: white; 101 | color: black; 102 | } 103 | 104 | .oneMore { 105 | display: flex; 106 | align-items: center; 107 | /* background: linear-gradient(to right, black, darkslategray); 108 | color: rgb(221, 221, 221); 109 | width: 50%; 110 | margin: 0 auto; 111 | margin-top: 15px; 112 | padding: 6px 7px; 113 | border-radius: 7px; 114 | border: 1px solid black; 115 | cursor: pointer; 116 | transition: all 0.5s ease; */ 117 | } 118 | 119 | /* .oneMore:hover { 120 | background: white; 121 | color: black; 122 | } */ 123 | 124 | .oneMore > span { 125 | font-size: 18px; 126 | margin-right: 13px; 127 | } 128 | 129 | @media screen and (max-width: 600px) { 130 | .shoeComponent { 131 | width: 200px; 132 | height: 340px; 133 | /* margin-left: 25px; 134 | margin-bottom: 55px; */ 135 | /* margin-left: 15px; */ 136 | /* margin-left: 10px; */ 137 | margin-bottom: 40px; 138 | } 139 | 140 | .shoeComponent > img { 141 | width: 200px; 142 | height: 200px; 143 | } 144 | 145 | .shoeComponent__name1 { 146 | padding: 5px 0; 147 | font-size: 13px; 148 | } 149 | 150 | .shoeComponent__price { 151 | padding: 4px 8px; 152 | } 153 | 154 | .shoeComponent__before { 155 | font-size: 12px; 156 | } 157 | 158 | .shoeComponent__beforePrice { 159 | font-size: 14px; 160 | } 161 | 162 | .shoeComponent__after { 163 | font-size: 12px; 164 | } 165 | 166 | .shoeComponent__afterPrice { 167 | font-size: 14px; 168 | } 169 | 170 | .shoeComponent__category { 171 | margin: 4px; 172 | font-size: 11px; 173 | } 174 | 175 | .shoeComponent__add { 176 | min-width: 80%; 177 | margin-top: 10px; 178 | padding: 5px 0; 179 | border-radius: 5px; 180 | } 181 | 182 | .shoeComponent__add:hover { 183 | background: white; 184 | color: black; 185 | } 186 | 187 | .oneMore > span { 188 | font-size: 15px; 189 | margin-right: 13px; 190 | } 191 | } 192 | 193 | @media screen and (min-width: 600px) and (max-width: 980px) { 194 | .shoeComponent { 195 | width: 200px; 196 | height: 340px; 197 | /* margin-left: 25px; 198 | margin-bottom: 55px; */ 199 | /* margin-left: 15px; */ 200 | /* margin-left: 10px; */ 201 | margin-bottom: 40px; 202 | } 203 | 204 | .shoeComponent > img { 205 | width: 200px; 206 | height: 200px; 207 | } 208 | 209 | .shoeComponent__name1 { 210 | padding: 5px 0; 211 | font-size: 13px; 212 | } 213 | 214 | .shoeComponent__price { 215 | padding: 4px 8px; 216 | } 217 | 218 | .shoeComponent__before { 219 | font-size: 12px; 220 | } 221 | 222 | .shoeComponent__beforePrice { 223 | font-size: 14px; 224 | } 225 | 226 | .shoeComponent__after { 227 | font-size: 12px; 228 | } 229 | 230 | .shoeComponent__afterPrice { 231 | font-size: 14px; 232 | } 233 | 234 | .shoeComponent__category { 235 | margin: 4px; 236 | font-size: 11px; 237 | } 238 | 239 | .shoeComponent__add { 240 | min-width: 80%; 241 | margin-top: 10px; 242 | padding: 5px 0; 243 | border-radius: 5px; 244 | } 245 | 246 | .shoeComponent__add:hover { 247 | background: white; 248 | color: black; 249 | } 250 | 251 | .oneMore > span { 252 | font-size: 15px; 253 | margin-right: 13px; 254 | } 255 | } -------------------------------------------------------------------------------- /src/components/AllShoes/ShoeComponent/ShoeComponent.js: -------------------------------------------------------------------------------- 1 | // MEN 2 | // 1- mengym --- 100000 3 | // 2- mentennis --- 200000 4 | // 3- menjordan --- 300000 5 | // 4- menrunning --- 400000 6 | // 5- menfootball --- 500000 7 | // 6- menbasketball --- 600000 8 | 9 | // WOMEN 10 | // 1- womengym --- 110000 11 | // 2- womentennis --- 220000 12 | // 3- womenjordan --- 330000 13 | // 4- womenrunning --- 440000 14 | // 5- womenfootball --- 550000 15 | // 6- womenbasketball --- 660000 16 | 17 | import React from 'react'; 18 | 19 | import ShoppingCartRoundedIcon from '@material-ui/icons/ShoppingCartRounded'; 20 | 21 | import './ShoeComponent.css'; 22 | import { useStateValue } from '../../StateProvider/StateProvider'; 23 | 24 | const ShoeComponent = ({ image, id, title, before, after, category }) => { 25 | 26 | const [{ cart }, dispatch] = useStateValue(); 27 | 28 | const addToCart = () => { 29 | dispatch({ 30 | type: 'ADD_TO_CART', 31 | item: { 32 | id: id, 33 | image: image, 34 | title: title, 35 | before: before, 36 | after: after, 37 | category: category, 38 | }, 39 | }) 40 | }; 41 | 42 | return ( 43 |
44 | Nike Metcon 6 45 |
46 | {title} 47 |
48 |
49 | Before: ${before} 50 | Now: ${after} 51 |
52 | {category} 53 |
54 |
55 | Add To Cart 56 | 57 |
58 |
59 | {/* */} 60 |
61 | ); 62 | } 63 | 64 | export default ShoeComponent; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/Women.css: -------------------------------------------------------------------------------- 1 | /* .men { 2 | max-width: 100vw; 3 | background: linear-gradient(to right, rgb(187, 0, 0), rgb(252, 27, 27)); 4 | } 5 | 6 | .men__shoes { 7 | margin-left: 20vw; 8 | margin-right: 30px; 9 | margin-top: 30px; 10 | border: 1px solid black; 11 | height: 100vh; 12 | } */ 13 | 14 | .women { 15 | max-width: 100vw; 16 | height: 100%; 17 | background: linear-gradient(to right, rgb(226, 151, 151), rgb(214, 211, 211)); 18 | } 19 | 20 | .women__categories { 21 | margin: 50px; 22 | display: flex; 23 | flex-wrap: wrap; 24 | justify-content: space-between; 25 | } 26 | 27 | @media screen and (max-width: 500px) { 28 | .women__categories { 29 | margin: 0; 30 | margin-top: 18px; 31 | /* margin: 0 15px; */ 32 | flex-direction: column; 33 | align-items: center; 34 | } 35 | } 36 | 37 | @media screen and (min-width: 500px) and (max-width: 785px) { 38 | .women__categories { 39 | margin: 0; 40 | margin-top: 20px; 41 | /* margin: 0 15px; */ 42 | flex-direction: column; 43 | align-items: center; 44 | } 45 | } -------------------------------------------------------------------------------- /src/components/AllShoes/Women/Women.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import './Women.css'; 4 | import MenWomenFootwear from '../MenWomenFootwear/MenWomenFootwear'; 5 | // import AllShoes_Navbar from '../AllShoes_Navbar/AllShoes_Navbar'; 6 | import WGym from './wGym.jpg'; 7 | import WTennis from './wTennis.jpg'; 8 | import WJordan from './wJordan.jpg'; 9 | import WRunning from './wRunning.jpg'; 10 | import WFootball from './wFootball.jpg'; 11 | import WBasketball from './wBasketball.jpg'; 12 | 13 | const Women = () => { 14 | return ( 15 |
16 | {/* */} 25 | . 26 |
27 | 32 | 37 | 42 | 47 | 52 | 57 |
58 | . 59 |
60 | ); 61 | } 62 | 63 | export default Women; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/WomenBasketball.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './WomenBasketball.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import AirMax from './airMax.jpg'; 9 | import Freak1 from './freak1.jpg'; 10 | import Kyrie4 from './kyrie4.jpg'; 11 | import Lebron17 from './lebron17.jpg'; 12 | import Precision4 from './precision4.jpg'; 13 | import Soldier14 from './soldier14.jpg'; 14 | import Trey5 from './trey5.jpg'; 15 | 16 | 17 | const WomenBasketball = () => { 18 | return ( 19 |
20 | 29 |
30 | 38 | 46 | 54 | 62 | 70 | 78 | 86 |
87 |
88 | ); 89 | } 90 | 91 | export default WomenBasketball; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/airMax.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/airMax.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/freak1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/freak1.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/kyrie4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/kyrie4.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/lebron17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/lebron17.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/precision4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/precision4.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/soldier14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/soldier14.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenBasketball/trey5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenBasketball/trey5.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenFootball/WomenFootball.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './WomenFootball.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import PhantomGT from '../../Men/MenFootball/phantomGT.jpg'; 9 | import PhantomGTclub from '../../Men/MenFootball/phantomGTclub.jpg'; 10 | import Superfly7 from '../../Men/MenFootball/superfly7.jpg'; 11 | import Tiempo8 from '../../Men/MenFootball/tiempo8.jpg'; 12 | import Superfly7pro from '../../Men/MenFootball/superfly7pro.jpg'; 13 | import Vapor13 from '../../Men/MenFootball/vapor13.jpg'; 14 | import Vapor13mds from '../../Men/MenFootball/vapor13mds.jpg'; 15 | import Vision2 from '../../Men/MenFootball/vision2.jpg'; 16 | import Vapor13neymar from '../../Men/MenFootball/vapor13neymar.jpg'; 17 | import Legend8 from '../../Men/MenFootball/legend8.jpg'; 18 | 19 | const WomenFootball = () => { 20 | return ( 21 |
22 | 31 |
32 | 40 | 48 | 56 | 64 | 72 | 80 | 88 | 96 | 104 | 112 |
113 |
114 | ); 115 | } 116 | 117 | export default WomenFootball; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/WomenGym.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './WomenGym.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import AirZoom from './airZoom.jpg'; 9 | import Metcon3 from './metcon3.jpg'; 10 | import SuperRep from './superrep.jpg'; 11 | import Metcon6 from './metcon6.jpg'; 12 | import Metcon6You from './metcon6you.jpg'; 13 | import Legend from './legend.jpg'; 14 | 15 | const WomenGym = () => { 16 | return ( 17 |
18 | 27 |
28 | 36 | 44 | 52 | 60 | 68 | 76 |
77 |
78 | ); 79 | } 80 | 81 | export default WomenGym; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/airZoom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenGym/airZoom.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/legend.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenGym/legend.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/metcon3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenGym/metcon3.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/metcon6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenGym/metcon6.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/metcon6you.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenGym/metcon6you.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenGym/superrep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenGym/superrep.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/WomenJordan.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './WomenJordan.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import Retro4 from './retro4.jpg'; 9 | import Delta from './delta.jpg'; 10 | import Max200 from './max200.jpg'; 11 | import Latitude from './latitude.jpg'; 12 | import JordanOG from './jordanOG.jpg'; 13 | import Low11 from './low11.jpg'; 14 | 15 | const WomenJordan = () => { 16 | return ( 17 |
18 | 27 |
28 | 36 | 44 | 52 | 60 | 68 | 76 |
77 |
78 | ); 79 | } 80 | 81 | export default WomenJordan; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/delta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenJordan/delta.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/jordanOG.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenJordan/jordanOG.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/latitude.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenJordan/latitude.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/low11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenJordan/low11.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/max200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenJordan/max200.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenJordan/retro4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenJordan/retro4.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/WomenRunning.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './WomenRunning.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import Pegasus37 from './pegasus37.jpg'; 9 | import Fly3 from './fly3.jpg'; 10 | import InfinityRun from './infinityRun.jpg'; 11 | import AllDay from './allDay.jpg'; 12 | import PhantomRun from './phantomRun.jpg'; 13 | import React3 from './react3.jpg'; 14 | import Flex8 from './flex8.jpg'; 15 | 16 | const WomenRunning = () => { 17 | return ( 18 |
19 | 28 |
29 | 37 | 45 | 53 | 61 | 69 | 77 | 85 |
86 |
87 | ); 88 | } 89 | 90 | export default WomenRunning; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/allDay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/allDay.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/flex8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/flex8.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/fly3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/fly3.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/infinityRun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/infinityRun.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/pegasus37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/pegasus37.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/phantomRun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/phantomRun.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenRunning/react3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenRunning/react3.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenTennis/WomenTennis.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // import './WomenTennis.css'; 4 | import AllShoes_Navbar from '../../AllShoes_Navbar/AllShoes_Navbar'; 5 | import ShoeComponent from '../../ShoeComponent/ShoeComponent'; 6 | import AllShoes from '../../AllShoes.css'; 7 | 8 | import VaporX from './vaporX.jpg'; 9 | import Wildcard from './wildcard.jpg'; 10 | import ZoomZero from './zoomZero.jpg'; 11 | import ZoomGP from './zoomGP.jpg'; 12 | import Lite2 from './lite2.jpg'; 13 | 14 | const WomenTennis = () => { 15 | return ( 16 |
17 | 26 |
27 | 35 | 43 | 51 | 59 | 67 |
68 |
69 | ); 70 | } 71 | 72 | export default WomenTennis; -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenTennis/lite2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenTennis/lite2.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenTennis/vaporX.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenTennis/vaporX.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenTennis/wildcard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenTennis/wildcard.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenTennis/zoomGP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenTennis/zoomGP.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/WomenTennis/zoomZero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/WomenTennis/zoomZero.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/wBasketball.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/wBasketball.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/wFootball.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/wFootball.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/wGym.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/wGym.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/wJordan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/wJordan.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/wRunning.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/wRunning.jpg -------------------------------------------------------------------------------- /src/components/AllShoes/Women/wTennis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/AllShoes/Women/wTennis.jpg -------------------------------------------------------------------------------- /src/components/Checkout/Checkout.css: -------------------------------------------------------------------------------- 1 | .checkout { 2 | max-width: 100vw; 3 | min-height: 100vh; 4 | background: linear-gradient(to right, rgb(39, 39, 39), rgb(71, 126, 126)); 5 | } 6 | 7 | .checkout__empty { 8 | margin-top: 40px; 9 | background: linear-gradient(to right, pink, rgb(228, 228, 228)); 10 | display: flex; 11 | flex-direction: column; 12 | width: 70%; 13 | margin-left: auto; 14 | margin-right: auto; 15 | align-items: center; 16 | border: 1px solid pink; 17 | box-shadow: 2px 2px 2px pink; 18 | border-radius: 40px; 19 | padding: 20px 0; 20 | } 21 | 22 | .checkout__empty1 { 23 | color: rgb(43, 43, 43); 24 | font-size: 30px; 25 | text-decoration: underline; 26 | margin-bottom: 25px; 27 | width: 80%; 28 | text-align: center; 29 | } 30 | 31 | .checkout__empty2 { 32 | font-size: 20px; 33 | color: rgb(88, 88, 88); 34 | width: 80%; 35 | text-align: center; 36 | } 37 | 38 | .checkout__notEmpty { 39 | max-width: 100%; 40 | display: flex; 41 | flex-direction: column; 42 | align-items: center; 43 | } 44 | 45 | .checkout__notEmpty > span { 46 | margin-top: 35px; 47 | margin-bottom: 50px; 48 | color: rgb(226, 225, 225); 49 | text-decoration: underline; 50 | font-size: 30px; 51 | } 52 | 53 | @media screen and (max-width: 450px) { 54 | .checkout__empty { 55 | margin-top: 25px; 56 | width: 70%; 57 | border-radius: 20px; 58 | padding: 15px 0; 59 | } 60 | 61 | .checkout__empty1 { 62 | font-size: 20px; 63 | margin-bottom: 18px; 64 | width: 80%; 65 | } 66 | 67 | .checkout__empty2 { 68 | font-size: 16px; 69 | width: 80%; 70 | } 71 | 72 | .checkout__notEmpty > span { 73 | margin-top: 12px; 74 | margin-bottom: 33px; 75 | color: rgb(226, 225, 225); 76 | text-decoration: underline; 77 | font-size: 20px; 78 | } 79 | } -------------------------------------------------------------------------------- /src/components/Checkout/Checkout.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useStateValue } from '../StateProvider/StateProvider'; 3 | 4 | import './Checkout.css'; 5 | import ShoeItem from './ShoeItem/ShoeItem'; 6 | import TotalPrice from './TotalPrice/TotalPrice'; 7 | 8 | const Checkout = () => { 9 | 10 | const [{ cart }, dispatch] = useStateValue(); 11 | 12 | return ( 13 |
14 | . 15 |
16 | {cart?.length === 0 ? ( 17 |
18 | Your Shopping Cart is Empty 19 | You have no items in your cart. To buy one or more items, click 'Add To Cart' next to the item. 20 |
21 | ) : ( 22 |
23 | Your Shopping Cart 24 | {cart?.map(item => ( 25 | 33 | ))} 34 |
35 | )} 36 |
37 | {cart?.length > 0 && ( 38 |
39 | 40 |
41 | )} 42 |
43 | ); 44 | } 45 | 46 | export default Checkout; -------------------------------------------------------------------------------- /src/components/Checkout/ShoeItem/ShoeItem.css: -------------------------------------------------------------------------------- 1 | .shoeItem { 2 | margin-bottom: 60px; 3 | border: 3px solid black; 4 | box-shadow: 5px 5px 5px black; 5 | border-radius: 20px; 6 | width: 60%; 7 | margin-left: auto; 8 | margin-right: auto; 9 | display: flex; 10 | } 11 | 12 | .shoeItem > img { 13 | width: 320px; 14 | height: 300px; 15 | border-right: 1px solid black; 16 | width: 40%; 17 | border-top-left-radius: 20px; 18 | border-bottom-left-radius: 20px; 19 | } 20 | 21 | .shoeItem__right { 22 | display: flex; 23 | flex-direction: column; 24 | width: 60%; 25 | background: linear-gradient(to right, rgb(233, 233, 233), rgb(199, 199, 199)); 26 | border-top-right-radius: 20px; 27 | border-bottom-right-radius: 20px; 28 | } 29 | 30 | .shoeItem__title { 31 | background: linear-gradient(to right, rgb(123, 191, 214), rgb(245, 198, 198)); 32 | width: 100%; 33 | font-size: 25px; 34 | font-weight: 600; 35 | text-align: center; 36 | padding: 15px 0; 37 | color: rgb(58, 57, 57); 38 | border-top-right-radius: 20px; 39 | border-bottom: 1px solid black; 40 | } 41 | 42 | .shoeItem__category { 43 | margin-top: 10px; 44 | font-size: 17px; 45 | font-weight: 400; 46 | color: rgb(94, 93, 93); 47 | text-align: center; 48 | } 49 | 50 | .shoeItem__price { 51 | margin-top: 60px; 52 | text-align: center; 53 | color: rgb(0, 87, 0); 54 | font-size: 25px; 55 | } 56 | 57 | .shoeItem__afterPrice { 58 | letter-spacing: 1px; 59 | color: rgb(0, 179, 0); 60 | font-size: 35px; 61 | font-weight: 500; 62 | } 63 | 64 | .shoeItem__remove { 65 | background: linear-gradient(to right, brown, rgb(223, 102, 102)); 66 | margin-top: 18px; 67 | width: 250px; 68 | margin-left: auto; 69 | margin-right: auto; 70 | display: flex; 71 | align-items: center; 72 | color: rgb(216, 216, 216); 73 | font-size: 20px; 74 | font-weight: 500; 75 | padding: 7px 0; 76 | border-radius: 10px; 77 | cursor: pointer; 78 | border: 1px solid brown; 79 | transition: all 0.5s ease; 80 | } 81 | 82 | .shoeItem__click { 83 | padding-left: 15px; 84 | padding-right: 7px; 85 | } 86 | 87 | .shoeItem__remove:hover { 88 | background: linear-gradient(to left, rgb(184, 183, 183), white); 89 | color: black; 90 | } 91 | 92 | @media screen and (max-width: 360px) { 93 | .shoeItem { 94 | margin-bottom: 40px; 95 | border-radius: 10px; 96 | width: 80%; 97 | height: 400px; 98 | flex-direction: column; 99 | align-items: center; 100 | } 101 | 102 | .shoeItem > img { 103 | width: 100%; 104 | height: 220px; 105 | border-top-left-radius: 10px; 106 | border-top-right-radius: 10px; 107 | border-bottom-left-radius: 0; 108 | } 109 | 110 | .shoeItem__right { 111 | width: 100%; 112 | height: 100%; 113 | border-top-right-radius: 0; 114 | border-bottom-right-radius: 10px; 115 | border-bottom-left-radius: 10px; 116 | } 117 | 118 | .shoeItem__title { 119 | width: 100%; 120 | font-size: 15px; 121 | padding: 7px 0; 122 | border-top-right-radius: 0; 123 | border-top: 1px solid black; 124 | } 125 | 126 | .shoeItem__category { 127 | margin-top: 10px; 128 | font-size: 14px; 129 | } 130 | 131 | .shoeItem__price { 132 | margin-top: 16px; 133 | font-size: 18px; 134 | } 135 | 136 | .shoeItem__afterPrice { 137 | font-size: 21px; 138 | } 139 | 140 | .shoeItem__remove { 141 | margin-top: 13px; 142 | width: 180px; 143 | font-size: 14px; 144 | padding: 6px 0; 145 | border-radius: 7px; 146 | } 147 | } 148 | 149 | @media screen and (min-width: 360px) and (max-width: 550px) { 150 | .shoeItem { 151 | margin-bottom: 40px; 152 | border-radius: 10px; 153 | width: 60%; 154 | height: 400px; 155 | flex-direction: column; 156 | align-items: center; 157 | } 158 | 159 | .shoeItem > img { 160 | width: 100%; 161 | height: 220px; 162 | border-top-left-radius: 10px; 163 | border-top-right-radius: 10px; 164 | border-bottom-left-radius: 0; 165 | } 166 | 167 | .shoeItem__right { 168 | width: 100%; 169 | height: 100%; 170 | border-top-right-radius: 0; 171 | border-bottom-right-radius: 10px; 172 | border-bottom-left-radius: 10px; 173 | } 174 | 175 | .shoeItem__title { 176 | width: 100%; 177 | font-size: 15px; 178 | padding: 7px 0; 179 | border-top-right-radius: 0; 180 | border-top: 1px solid black; 181 | } 182 | 183 | .shoeItem__category { 184 | margin-top: 10px; 185 | font-size: 14px; 186 | } 187 | 188 | .shoeItem__price { 189 | margin-top: 16px; 190 | font-size: 18px; 191 | } 192 | 193 | .shoeItem__afterPrice { 194 | font-size: 21px; 195 | } 196 | 197 | .shoeItem__remove { 198 | margin-top: 13px; 199 | width: 180px; 200 | font-size: 14px; 201 | padding: 6px 0; 202 | border-radius: 7px; 203 | } 204 | } 205 | 206 | @media screen and (min-width: 550px) and (max-width: 800px) { 207 | .shoeItem { 208 | margin-bottom: 40px; 209 | border-radius: 10px; 210 | width: 40%; 211 | height: 400px; 212 | flex-direction: column; 213 | align-items: center; 214 | } 215 | 216 | .shoeItem > img { 217 | width: 100%; 218 | height: 220px; 219 | border-top-left-radius: 10px; 220 | border-top-right-radius: 10px; 221 | border-bottom-left-radius: 0; 222 | } 223 | 224 | .shoeItem__right { 225 | width: 100%; 226 | height: 100%; 227 | border-top-right-radius: 0; 228 | border-bottom-right-radius: 10px; 229 | border-bottom-left-radius: 10px; 230 | } 231 | 232 | .shoeItem__title { 233 | width: 100%; 234 | font-size: 15px; 235 | padding: 7px 0; 236 | border-top-right-radius: 0; 237 | border-top: 1px solid black; 238 | } 239 | 240 | .shoeItem__category { 241 | margin-top: 10px; 242 | font-size: 14px; 243 | } 244 | 245 | .shoeItem__price { 246 | margin-top: 16px; 247 | font-size: 18px; 248 | } 249 | 250 | .shoeItem__afterPrice { 251 | font-size: 21px; 252 | } 253 | 254 | .shoeItem__remove { 255 | margin-top: 13px; 256 | width: 180px; 257 | font-size: 14px; 258 | padding: 6px 0; 259 | border-radius: 7px; 260 | } 261 | } 262 | 263 | @media screen and (min-width: 800px) and (max-width: 1000px) { 264 | .shoeItem { 265 | width: 80%; 266 | margin-left: auto; 267 | margin-right: auto; 268 | display: flex; 269 | } 270 | 271 | .shoeItem > img { 272 | width: 320px; 273 | height: 270px; 274 | width: 40%; 275 | } 276 | 277 | .shoeItem__title { 278 | font-size: 20px; 279 | padding: 12px 0; 280 | } 281 | 282 | .shoeItem__category { 283 | font-size: 15px; 284 | } 285 | 286 | .shoeItem__price { 287 | margin-top: 60px; 288 | font-size: 20px; 289 | } 290 | 291 | .shoeItem__afterPrice { 292 | font-size: 30px; 293 | } 294 | } -------------------------------------------------------------------------------- /src/components/Checkout/ShoeItem/ShoeItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import './ShoeItem.css'; 4 | import ShoppingCartRoundedIcon from '@material-ui/icons/ShoppingCartRounded'; 5 | import { useStateValue } from '../../StateProvider/StateProvider'; 6 | 7 | const ShoeItem = ({ id, image, title, before, after, category }) => { 8 | 9 | const [{ cart }, dispatch] = useStateValue(); 10 | 11 | const removeFromCart = () => { 12 | dispatch({ 13 | type: "REMOVE_FROM_CART", 14 | id: id, 15 | }); 16 | } 17 | 18 | return ( 19 |
20 | shoe 21 |
22 | {title} 23 | {category} 24 | {/*
25 | Before: {before} 26 | After: {after} 27 |
*/} 28 | Price: ${after} 29 |
30 | Remove From Cart 31 | 32 |
33 |
34 |
35 | ); 36 | } 37 | 38 | export default ShoeItem; -------------------------------------------------------------------------------- /src/components/Checkout/TotalPrice/TotalPrice.css: -------------------------------------------------------------------------------- 1 | .totalPrice { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | background: linear-gradient(to right, rgb(187, 187, 187), rgb(223, 223, 223)); 6 | max-width: 100%; 7 | } 8 | 9 | .totalPrice__items { 10 | margin-top: 25px; 11 | margin-bottom: 10px; 12 | font-size: 20px; 13 | color: rgb(39, 39, 39); 14 | font-weight: 500; 15 | } 16 | 17 | .totalPrice__total { 18 | margin-bottom: 20px; 19 | font-size: 20px; 20 | font-weight: 500; 21 | color: rgb(39, 39, 39); 22 | } 23 | 24 | button { 25 | width: 220px; 26 | margin-bottom: 25px; 27 | outline: none; 28 | border: none; 29 | border: 1px solid black; 30 | font-size: 20px; 31 | font-weight: 400; 32 | background: linear-gradient(to left, rgb(36, 36, 36), rgb(65, 110, 110)); 33 | color: rgb(221, 221, 221); 34 | padding: 7px 0; 35 | align-items: center; 36 | border-radius: 6px; 37 | cursor: pointer; 38 | transition: all 0.5s ease; 39 | } 40 | 41 | button:hover { 42 | background: linear-gradient(to left, rgb(255, 184, 196), rgb(184, 184, 184)); 43 | color: black; 44 | } 45 | 46 | @media screen and (max-width: 470px) { 47 | .totalPrice__items { 48 | width: 85%; 49 | margin-left: auto; 50 | margin-right: auto; 51 | text-align: center; 52 | margin-top: 17px; 53 | margin-bottom: 8px; 54 | font-size: 15px; 55 | } 56 | 57 | .totalPrice__total { 58 | width: 85%; 59 | margin-left: auto; 60 | margin-right: auto; 61 | text-align: center; 62 | margin-bottom: 15px; 63 | font-size: 15px; 64 | } 65 | 66 | button { 67 | width: 170px; 68 | margin-bottom: 20px; 69 | font-size: 15px; 70 | padding: 6px 0; 71 | border-radius: 5px; 72 | } 73 | } -------------------------------------------------------------------------------- /src/components/Checkout/TotalPrice/TotalPrice.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import './TotalPrice.css'; 4 | import CurrencyFormat from 'react-currency-format'; 5 | import { useStateValue } from '../../StateProvider/StateProvider'; 6 | import { getCartTotal } from '../../StateProvider/reducer'; 7 | import stripeCheckout from 'react-stripe-checkout'; 8 | import StripeCheckout from 'react-stripe-checkout'; 9 | 10 | const TotalPrice = () => { 11 | 12 | const [{ cart }, dispatch] = useStateValue(); 13 | 14 | const handleToken = (token, addresses) => { 15 | console.log({ token, addresses }); 16 | alert("Cannot recognize your payment info. Please enter correct data to proceed further."); 17 | } 18 | 19 | return ( 20 |
21 | ( 24 | <> 25 | Total number of Items in your cart: {cart?.length} 26 | Total Price of your items: {`${value}`} 27 | 28 | )} 29 | 30 | decimalScale={2} 31 | value={getCartTotal(cart)} 32 | displayType={"text"} 33 | thousandSeparator={true} 34 | prefix={"$"} 35 | /> 36 | {/* */} 37 |
38 | 42 |
43 |
44 | ); 45 | } 46 | 47 | export default TotalPrice; -------------------------------------------------------------------------------- /src/components/Header/Header.css: -------------------------------------------------------------------------------- 1 | .header { 2 | max-width: 100vw; 3 | height: 60px; 4 | top: 0; 5 | left: 0; 6 | background: linear-gradient(to right, rgb(221, 221, 221), white); 7 | box-shadow: 0 2px 2px rgb(185, 185, 185); 8 | position: sticky; 9 | z-index: 100; 10 | display: flex; 11 | justify-content: space-between; 12 | align-items: center; 13 | padding: 0 15px; 14 | } 15 | 16 | .header__menu { 17 | display: none; 18 | } 19 | 20 | .header__logo { 21 | width: 130px; 22 | height: 100px; 23 | object-fit: contain; 24 | cursor: pointer; 25 | /* flex: 0.2; */ 26 | } 27 | 28 | .header__nav { 29 | display: flex; 30 | /* width: 60%; */ 31 | /* justify-content: space-between; */ 32 | align-items: center; 33 | /* flex: 0.8; */ 34 | } 35 | 36 | .header__navItems { 37 | /* padding-right: 35px; */ 38 | font-size: 17px; 39 | font-weight: 500; 40 | color: black; 41 | padding: 6px 13px; 42 | margin-right: 30px; 43 | border-radius: 12px; 44 | transition: 0.5s all ease; 45 | } 46 | 47 | .header__navItems:hover { 48 | /* background-color: rgb(27, 27, 27); */ 49 | background-color: rgb(221, 4, 4); 50 | color: white; 51 | cursor: pointer; 52 | box-shadow: 2px 2px 5px rgb(224, 6, 6); 53 | text-shadow: 0 0 2px rgb(219, 219, 219); 54 | } 55 | 56 | .header__navRight { 57 | display: flex; 58 | align-items: center; 59 | } 60 | 61 | .header__user { 62 | display: flex; 63 | flex-direction: column; 64 | align-items: center; 65 | margin-right: 12px; 66 | } 67 | 68 | .header__hello { 69 | color: rgb(15, 15, 15); 70 | font-size: 14px; 71 | } 72 | 73 | .header__mail { 74 | font-size: 12px; 75 | color: rgb(65, 65, 65); 76 | } 77 | 78 | .header__navRightItems { 79 | color: rgb(196, 0, 0); 80 | margin-right: 25px; 81 | /* padding: 10px 5px; */ 82 | transition: all 0.5s ease; 83 | font-size: 14px; 84 | } 85 | 86 | .header__navRightItems:hover { 87 | color: black; 88 | text-shadow: 0 0 1px black; 89 | } 90 | 91 | .header__cart { 92 | color: black; 93 | margin-top: 7px; 94 | } 95 | 96 | .header__cartItems { 97 | background-color: rgb(221, 3, 3); 98 | color: white; 99 | font-size: 12px; 100 | padding: 0 3px; 101 | border-radius: 3px; 102 | margin-top: -23px; 103 | margin-left: -6px; 104 | z-index: -1; 105 | } 106 | 107 | .header2 { 108 | display: none; 109 | } 110 | 111 | @media screen and (max-width: 900px) { 112 | .header { 113 | height: 50px; 114 | } 115 | 116 | .header__nav { 117 | display: none; 118 | } 119 | 120 | .header__user { 121 | display: none; 122 | } 123 | 124 | .header__logo { 125 | width: 100px; 126 | height: 55px; 127 | } 128 | 129 | .header__menu { 130 | display: block; 131 | } 132 | 133 | .header2 { 134 | display: flex; 135 | flex-direction: column; 136 | align-items: center; 137 | width: 100%; 138 | background: linear-gradient(to right, rgb(43, 43, 43), rgb(49, 116, 116)); 139 | height: 100vh; 140 | position: fixed; 141 | z-index: 300; 142 | top: 0; 143 | right: 100%; 144 | /* transform: translateX(-100%); */ 145 | transition: 850ms; 146 | } 147 | 148 | .header2.active { 149 | right: 0; 150 | /* transform: translateX(100%); */ 151 | transition: 350ms; 152 | } 153 | 154 | .header2__close { 155 | color: rgb(31, 31, 31); 156 | margin-top: 20px; 157 | margin-bottom: 40px; 158 | cursor: pointer; 159 | background-color: rgb(216, 216, 216); 160 | border-radius: 50%; 161 | padding-top: 5px; 162 | padding-left: 5px; 163 | padding-right: 5px; 164 | } 165 | 166 | .header2__nav { 167 | /* position: absolute; 168 | margin-top: 50px; */ 169 | display: flex; 170 | flex-direction: column; 171 | align-items: center; 172 | max-width: 100%; 173 | } 174 | 175 | .header2__user { 176 | display: flex; 177 | flex-direction: column; 178 | align-items: center; 179 | margin-bottom: 30px; 180 | background: linear-gradient(to right, rgb(175, 175, 175), rgb(233, 233, 233)); 181 | width: 100%; 182 | border-radius: 10px; 183 | padding: 10px 5px; 184 | } 185 | 186 | .header2__hello { 187 | font-size: 17px; 188 | margin-bottom: 20px; 189 | color: black; 190 | } 191 | 192 | .header2__mail { 193 | color: rgb(61, 61, 61); 194 | font-size: 13px; 195 | } 196 | 197 | .header2__navSign { 198 | background: linear-gradient(to right, rgb(43, 43, 43), rgb(49, 116, 116)); 199 | /* background: linear-gradient(to right, rgb(131, 0, 0), rgb(219, 0, 0)); */ 200 | color: rgb(231, 231, 231); 201 | padding: 5px 10px; 202 | border-radius: 7px; 203 | cursor: pointer; 204 | border: 1px solid black; 205 | transition: all 0.5 ease; 206 | } 207 | 208 | .header2__navSign:hover { 209 | background: linear-gradient(to right,rgb(160, 160, 160), rgb(236, 236, 236)); 210 | color: black; 211 | } 212 | 213 | .header2__navItem { 214 | margin-top: 40px; 215 | } 216 | 217 | .header2__navItems { 218 | position: relative; 219 | /* background-color: black; */ 220 | font-size: 18px; 221 | color: rgb(224, 224, 224); 222 | font-weight: 500; 223 | padding: 8px 15px; 224 | cursor: pointer; 225 | border-radius: 10px; 226 | transition: all 0.5s ease; 227 | border: 1px solid rgb(209, 209, 209); 228 | } 229 | 230 | .header2__navItems:hover { 231 | background: linear-gradient(to right, rgb(156, 156, 156), rgb(219, 219, 219)); 232 | color: rgb(26, 26, 26); 233 | } 234 | } -------------------------------------------------------------------------------- /src/components/Header/Header.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | import './Header.css'; 5 | import HeaderLogo from './headerLogo.png'; 6 | import ShoppingCartRoundedIcon from '@material-ui/icons/ShoppingCartRounded'; 7 | import MenuIcon from '@material-ui/icons/Menu'; 8 | import CloseIcon from '@material-ui/icons/Close'; 9 | import { useStateValue } from '../StateProvider/StateProvider'; 10 | import { auth } from '../../firebase'; 11 | 12 | const Header = () => { 13 | 14 | const [navBar, setNavBar] = useState(false); 15 | 16 | const [{ cart, user }] = useStateValue(); 17 | 18 | const showNavBar = () => setNavBar(!navBar); 19 | 20 | const onLogin = () => { 21 | if(user) { 22 | auth.signOut(); 23 | } 24 | } 25 | 26 | return ( 27 | <> 28 |
29 |
30 | 31 |
32 | 33 | {/* */} 34 | Nike logo 35 | 36 |
37 | 38 | Home 39 | 40 | {/* 41 | Kids 42 | */} 43 | 44 | Men's Footwear 45 | 46 | 47 | Women's Footwear 48 | 49 |
50 |
51 | 52 |
53 | Hello, {user?.email} 54 | {user ? 'Sign Out' : 'Log In/Sign Up'} 55 |
56 | 57 | {/* 58 |
59 | Hello, abcabc@gmail.com 60 | Log In/Sign Up 61 |
62 | */} 63 | {/* 64 | Log In/Sign Up 65 | */} 66 | 67 | 68 | 69 | {cart?.length} 70 | 71 |
72 |
73 | 74 |
75 |
76 | 77 |
78 |
79 | 80 |
81 | Hello, {user?.email} 82 | {user ? 'Sign Out' : 'Log In/Sign Up'} 83 |
84 | 85 |
86 | 87 | Home 88 | 89 |
90 |
91 | 92 | Men's Footwear 93 | 94 |
95 |
96 | 97 | Women's Footwear 98 | 99 |
100 |
101 |
102 | 103 | 104 | ); 105 | } 106 | 107 | export default Header; -------------------------------------------------------------------------------- /src/components/Header/headerLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Header/headerLogo.png -------------------------------------------------------------------------------- /src/components/Header/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Header/logo.jpg -------------------------------------------------------------------------------- /src/components/Home/Home.css: -------------------------------------------------------------------------------- 1 | .home { 2 | max-width: 100vw; 3 | height: 100%; 4 | /* background: linear-gradient(to right, black, rgb(60, 102, 102)); */ 5 | background: linear-gradient(to right, rgb(155, 1, 1), rgb(240, 12, 12)); 6 | } -------------------------------------------------------------------------------- /src/components/Home/Home.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import './Home.css'; 4 | import SlideView from './SlideView/SlideView'; 5 | 6 | const Home = () => { 7 | return ( 8 |
9 | 10 | 11 |
12 | ); 13 | } 14 | 15 | export default Home; -------------------------------------------------------------------------------- /src/components/Home/SlideView/SlideView.css: -------------------------------------------------------------------------------- 1 | .slideView__wrapper { 2 | max-width: 90%; 3 | height: 100%; 4 | margin-left: auto; 5 | margin-right: auto; 6 | 7 | /* background-color: red; */ 8 | } 9 | 10 | .slideView__page { 11 | max-width: 100%; 12 | margin-top: 50px; 13 | color: black; 14 | background: linear-gradient(to right, rgb(216, 216, 216), white); 15 | border-radius: 100px; 16 | margin-bottom: 60px; 17 | } 18 | 19 | @media screen and (max-width: 400px) { 20 | .slideView__wrapper { 21 | max-width: 80%; 22 | } 23 | 24 | .slideView__page { 25 | border-radius: 15px; 26 | margin-bottom: 30px; 27 | } 28 | } 29 | 30 | @media screen and (min-width: 400px) and (max-width: 630px) { 31 | .slideView__wrapper { 32 | max-width: 80%; 33 | } 34 | 35 | .slideView__page { 36 | border-radius: 20px; 37 | margin-bottom: 30px; 38 | } 39 | } 40 | 41 | @media screen and (min-width: 630px) and (max-width: 900px) { 42 | .slideView__wrapper { 43 | max-width: 80%; 44 | } 45 | 46 | .slideView__page { 47 | border-radius: 40px; 48 | margin-bottom: 30px; 49 | } 50 | } -------------------------------------------------------------------------------- /src/components/Home/SlideView/SlideView.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | import "slick-carousel/slick/slick.css"; 4 | import "slick-carousel/slick/slick-theme.css"; 5 | 6 | import './SlideView.css'; 7 | import Slider from 'react-slick'; 8 | import Slides from './Slides/Slides'; 9 | import AirJordan from './Slides/airJordan.jpg'; 10 | import NikeBlazers from './Slides/nikeBlazers.jpg'; 11 | import AirMax from './Slides/airMax.jpg'; 12 | 13 | const SlideView = () => { 14 | return ( 15 |
16 | 23 | 24 |
25 | 32 |
33 |
34 | 41 |
42 |
43 | 50 |
51 | 52 |
53 | . 54 |
55 | ); 56 | } 57 | 58 | export default SlideView; -------------------------------------------------------------------------------- /src/components/Home/SlideView/Slides/Slides.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | import './Slides.css'; 5 | import AirJordan from './airJordan.jpg'; 6 | import NikeBlazers from './nikeBlazers.jpg'; 7 | import AirMax from './airMax.jpg'; 8 | 9 | import LoyaltyIcon from '@material-ui/icons/Loyalty'; 10 | 11 | const Slides = ({ image, alternate, shoes, off, pathTo }) => { 12 | return ( 13 | <> 14 |
15 | Clearance Sale 16 | 17 |
18 |
19 | {alternate} 20 |
21 | Exclusive {shoes} for Sale 22 |
23 | Upto 24 | {off}% off 25 |
26 | 27 | 28 | 29 |
30 |
31 | 32 | ); 33 | } 34 | 35 | export default Slides; -------------------------------------------------------------------------------- /src/components/Home/SlideView/Slides/airJordan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Home/SlideView/Slides/airJordan.jpg -------------------------------------------------------------------------------- /src/components/Home/SlideView/Slides/airMax.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Home/SlideView/Slides/airMax.jpg -------------------------------------------------------------------------------- /src/components/Home/SlideView/Slides/nikeBlazers.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Home/SlideView/Slides/nikeBlazers.jpg -------------------------------------------------------------------------------- /src/components/Login/Login.css: -------------------------------------------------------------------------------- 1 | .login { 2 | background-image: url('./wallpaper.jpg'); 3 | max-width: 100vw; 4 | height: 100%; 5 | background-size: cover; 6 | background-repeat: no-repeat; 7 | filter: brightness(70%); 8 | color: white; 9 | } 10 | 11 | .login__page { 12 | box-shadow: 15px 15px 15px black, 5px 5px 5px black; 13 | /* border: 1px solid rgb(68, 68, 68); */ 14 | width: 400px; 15 | height: 550px; 16 | margin-left: auto; 17 | margin-right: auto; 18 | margin-top: 20px; 19 | margin-bottom: 40px; 20 | display: flex; 21 | flex-direction: column; 22 | align-items: center; 23 | } 24 | 25 | .logo { 26 | width: 100%; 27 | /* background-color: #fff; */ 28 | display: flex; 29 | flex-direction: column; 30 | align-items: center; 31 | } 32 | 33 | .login__logo { 34 | background-color: #fff; 35 | margin-top: 10px; 36 | width: 100px; 37 | height: 100px; 38 | border-radius: 50%; 39 | } 40 | 41 | .login__head1 { 42 | width: 100%; 43 | text-align: center; 44 | text-transform: uppercase; 45 | font-size: 17px; 46 | font-weight: 500; 47 | margin-top: 13px; 48 | margin-bottom: 9px; 49 | } 50 | 51 | .login__page > form { 52 | /* background-color: red; */ 53 | width: 100%; 54 | margin-top: 14px; 55 | display: flex; 56 | flex-direction: column; 57 | align-items: center; 58 | } 59 | 60 | .login__email , .login__password { 61 | font-size: 16px; 62 | font-weight: 500; 63 | margin-bottom: 6px; 64 | } 65 | 66 | .login__input { 67 | margin-bottom: 15px; 68 | width: 250px; 69 | height: 30px; 70 | outline: none; 71 | border: none; 72 | font-size: 15px; 73 | border-radius: 18px; 74 | text-align: center; 75 | } 76 | 77 | .login__button { 78 | background: linear-gradient(to right, rgb(241, 241, 241), rgb(252, 125, 146)); 79 | color: black; 80 | font-size: 15px; 81 | font-weight: 500; 82 | width: 180px; 83 | margin-top: 10px; 84 | /* margin-bottom: 0px; */ 85 | cursor: pointer; 86 | transition: all 0.5s ease; 87 | } 88 | 89 | .login__button:hover { 90 | background: linear-gradient(to left, rgb(241, 241, 241), rgb(240, 122, 141)); 91 | } 92 | 93 | .login__head2 { 94 | /* margin-top: 2px; */ 95 | width: 85%; 96 | margin-left: auto; 97 | margin-right: auto; 98 | text-align: center; 99 | font-size: 13px; 100 | font-weight: 400; 101 | color: rgb(216, 214, 214); 102 | } 103 | 104 | .login__head3 { 105 | width: 85%; 106 | margin-left: auto; 107 | margin-right: auto; 108 | text-align: center; 109 | font-size: 13px; 110 | font-weight: 400; 111 | color: rgb(216, 214, 214); 112 | } 113 | 114 | .underlineHead3 { 115 | text-decoration: underline; 116 | cursor: pointer; 117 | } 118 | 119 | @media screen and (max-width: 500px) { 120 | .login { 121 | background-image: url(./wallpaper2.jpg); 122 | } 123 | 124 | .login__page { 125 | box-shadow: 15px 15px 15px rgb(59, 59, 59), 5px 5px 5px rgb(54, 54, 54); 126 | width: 240px; 127 | height: 480px; 128 | margin-top: 0; 129 | margin-top: 5px; 130 | } 131 | 132 | .login__logo { 133 | width: 70px; 134 | height: 70px; 135 | } 136 | 137 | .login__head1 { 138 | font-size: 14px; 139 | margin-top: 10px; 140 | margin-bottom: 7px; 141 | } 142 | 143 | .login__email , .login__password { 144 | font-size: 13px; 145 | margin-bottom: 5px; 146 | } 147 | 148 | .login__input { 149 | margin-bottom: 11px; 150 | width: 220px; 151 | height: 25px; 152 | font-size: 13px; 153 | border-radius: 14px; 154 | } 155 | 156 | .login__button { 157 | font-size: 13px; 158 | width: 150px; 159 | margin-top: 8px; 160 | margin-bottom: 0; 161 | margin-bottom: 10px; 162 | } 163 | 164 | .login__head2 { 165 | width: 85%; 166 | font-size: 11px; 167 | } 168 | 169 | .login__head3 { 170 | width: 85%; 171 | font-size: 11px; 172 | margin-top: 0px; 173 | } 174 | } -------------------------------------------------------------------------------- /src/components/Login/Login.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | 3 | import './Login.css'; 4 | import Wallpaper from './wallpaper.jpg'; 5 | import { auth } from '../../firebase'; 6 | import { useHistory } from 'react-router-dom'; 7 | 8 | const Login = () => { 9 | 10 | const history = useHistory(); 11 | const [email, setEmail] = useState(''); 12 | const [password, setPassword] = useState(''); 13 | 14 | const loginAccount = (event) => { 15 | event.preventDefault(); 16 | auth.signInWithEmailAndPassword(email, password) 17 | .then((auth) => { 18 | history.push('/'); 19 | }) 20 | .catch(e => alert(e.message)); 21 | }; 22 | 23 | const createAccount = (event) => { 24 | event.preventDefault(); 25 | auth.createUserWithEmailAndPassword(email, password) 26 | .then((auth) => { 27 | history.push('/'); 28 | }) 29 | .catch(e => alert(e.message)); 30 | }; 31 | 32 | return ( 33 |
34 | . 35 |
36 |
37 | Nike logo 38 |
39 | Get News and Offers from Nike 40 |
41 | Email Address: 42 | setEmail(event.target.value)} 45 | className="login__input" 46 | type="email" 47 | placeholder="Email" 48 | required 49 | /> 50 | Password: 51 | setPassword(event.target.value)} 54 | className="login__input" 55 | type="password" 56 | placeholder="Password" 57 | required 58 | /> 59 | 60 | Sign Up for emails to get special news and offers from the Nike family of brands 61 | 62 | By signing up, you agree to Nike's Privacy Policy and Terms of Use 63 |
64 |
65 | . 66 |
67 | ); 68 | } 69 | 70 | export default Login; -------------------------------------------------------------------------------- /src/components/Login/wallpaper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Login/wallpaper.jpg -------------------------------------------------------------------------------- /src/components/Login/wallpaper2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SMQuadri/Reactjs-ECommerce-Web-App/f09130bc10bf2e7bfe8f7850384177713eb223ce/src/components/Login/wallpaper2.jpg -------------------------------------------------------------------------------- /src/components/StateProvider/StateProvider.js: -------------------------------------------------------------------------------- 1 | // We need this to track the cart 2 | import React, { createContext, useContext, useReducer } from 'react'; 3 | 4 | // Setting up the Data Layer 5 | export const StateContext = createContext(); 6 | 7 | // Provider 8 | export const StateProvider = ({ reducer, initialState, children }) => ( 9 | 10 | {children} 11 | 12 | ) 13 | 14 | // Use this inside of a component 15 | export const useStateValue = () => useContext(StateContext); -------------------------------------------------------------------------------- /src/components/StateProvider/reducer.js: -------------------------------------------------------------------------------- 1 | // { 2 | // id: "100000", 3 | // image: "1", 4 | // title: "Nike Metcon 6", 5 | // before: "170", 6 | // after: "140", 7 | // category: "Gym Shoe", 8 | // }, 9 | 10 | import Metcon6 from '../AllShoes/Men/MenGym/metcon6.jpg'; 11 | 12 | export const initialState = { 13 | cart: [], 14 | user: null, 15 | }; 16 | 17 | export const getCartTotal = (cart) => 18 | cart?.reduce((amount, item) => item.after + amount, 0); 19 | 20 | const reducer = (state, action) => { 21 | console.log(action); 22 | switch(action.type) { 23 | case 'SET_USER': 24 | return { 25 | ...state, 26 | user: action.user 27 | } 28 | 29 | case 'ADD_TO_CART': 30 | return { 31 | ...state, 32 | cart: [...state.cart, action.item] 33 | } 34 | break; 35 | 36 | case 'REMOVE_FROM_CART': 37 | let newCart = [...state.cart]; 38 | const index = state.cart.findIndex((cartItem) => cartItem.id === action.id); 39 | if(index >= 0) { 40 | newCart.splice(index, 1); 41 | } else { 42 | console.warn( 43 | `Cant remove product (id: ${action.id}) as its not in your cart` 44 | ); 45 | } 46 | return { 47 | ...state, 48 | cart: newCart, 49 | } 50 | break; 51 | 52 | default: 53 | return state; 54 | } 55 | } 56 | 57 | export default reducer; -------------------------------------------------------------------------------- /src/firebase.js: -------------------------------------------------------------------------------- 1 | import firebase from 'firebase'; 2 | 3 | const firebaseApp = firebase.initializeApp({ 4 | // Paste your Firebase config snippet here, as guided in the steps in README.md 5 | }); 6 | 7 | const auth = firebase.auth(); 8 | 9 | export { auth }; 10 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,800;0,900;1,600&display=swap'); 2 | 3 | * { 4 | margin: 0; 5 | padding: 0; 6 | } 7 | 8 | body { 9 | margin: 0; 10 | font-family: 'Poppins', sans-serif; 11 | -webkit-font-smoothing: antialiased; 12 | -moz-osx-font-smoothing: grayscale; 13 | } 14 | 15 | code { 16 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 17 | monospace; 18 | } 19 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import * as serviceWorker from './serviceWorker'; 6 | import { StateProvider } from './components/StateProvider/StateProvider'; 7 | import reducer, { initialState } from './components/StateProvider/reducer'; 8 | 9 | ReactDOM.render( 10 | 11 | 12 | 13 | 14 | 15 | 16 | , 17 | document.getElementById('root') 18 | ); 19 | 20 | // If you want your app to work offline and load faster, you can change 21 | // unregister() to register() below. Note this comes with some pitfalls. 22 | // Learn more about service workers: https://bit.ly/CRA-PWA 23 | serviceWorker.unregister(); 24 | -------------------------------------------------------------------------------- /src/serviceWorker.js: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read https://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.0/8 are considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 20 | ) 21 | ); 22 | 23 | export function register(config) { 24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 25 | // The URL constructor is available in all browsers that support SW. 26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 27 | if (publicUrl.origin !== window.location.origin) { 28 | // Our service worker won't work if PUBLIC_URL is on a different origin 29 | // from what our page is served on. This might happen if a CDN is used to 30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 31 | return; 32 | } 33 | 34 | window.addEventListener('load', () => { 35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 36 | 37 | if (isLocalhost) { 38 | // This is running on localhost. Let's check if a service worker still exists or not. 39 | checkValidServiceWorker(swUrl, config); 40 | 41 | // Add some additional logging to localhost, pointing developers to the 42 | // service worker/PWA documentation. 43 | navigator.serviceWorker.ready.then(() => { 44 | console.log( 45 | 'This web app is being served cache-first by a service ' + 46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA' 47 | ); 48 | }); 49 | } else { 50 | // Is not localhost. Just register service worker 51 | registerValidSW(swUrl, config); 52 | } 53 | }); 54 | } 55 | } 56 | 57 | function registerValidSW(swUrl, config) { 58 | navigator.serviceWorker 59 | .register(swUrl) 60 | .then(registration => { 61 | registration.onupdatefound = () => { 62 | const installingWorker = registration.installing; 63 | if (installingWorker == null) { 64 | return; 65 | } 66 | installingWorker.onstatechange = () => { 67 | if (installingWorker.state === 'installed') { 68 | if (navigator.serviceWorker.controller) { 69 | // At this point, the updated precached content has been fetched, 70 | // but the previous service worker will still serve the older 71 | // content until all client tabs are closed. 72 | console.log( 73 | 'New content is available and will be used when all ' + 74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' 75 | ); 76 | 77 | // Execute callback 78 | if (config && config.onUpdate) { 79 | config.onUpdate(registration); 80 | } 81 | } else { 82 | // At this point, everything has been precached. 83 | // It's the perfect time to display a 84 | // "Content is cached for offline use." message. 85 | console.log('Content is cached for offline use.'); 86 | 87 | // Execute callback 88 | if (config && config.onSuccess) { 89 | config.onSuccess(registration); 90 | } 91 | } 92 | } 93 | }; 94 | }; 95 | }) 96 | .catch(error => { 97 | console.error('Error during service worker registration:', error); 98 | }); 99 | } 100 | 101 | function checkValidServiceWorker(swUrl, config) { 102 | // Check if the service worker can be found. If it can't reload the page. 103 | fetch(swUrl, { 104 | headers: { 'Service-Worker': 'script' }, 105 | }) 106 | .then(response => { 107 | // Ensure service worker exists, and that we really are getting a JS file. 108 | const contentType = response.headers.get('content-type'); 109 | if ( 110 | response.status === 404 || 111 | (contentType != null && contentType.indexOf('javascript') === -1) 112 | ) { 113 | // No service worker found. Probably a different app. Reload the page. 114 | navigator.serviceWorker.ready.then(registration => { 115 | registration.unregister().then(() => { 116 | window.location.reload(); 117 | }); 118 | }); 119 | } else { 120 | // Service worker found. Proceed as normal. 121 | registerValidSW(swUrl, config); 122 | } 123 | }) 124 | .catch(() => { 125 | console.log( 126 | 'No internet connection found. App is running in offline mode.' 127 | ); 128 | }); 129 | } 130 | 131 | export function unregister() { 132 | if ('serviceWorker' in navigator) { 133 | navigator.serviceWorker.ready 134 | .then(registration => { 135 | registration.unregister(); 136 | }) 137 | .catch(error => { 138 | console.error(error.message); 139 | }); 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom/extend-expect'; 6 | --------------------------------------------------------------------------------