├── .gitignore
├── 01 - Introduction to React Router
├── 01 - Introduction to React Router 6
│ ├── README.md
│ ├── api.js
│ ├── api
│ │ └── firebase.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── AuthRequired.jsx
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 02 - Multi-page vs single-page apps
│ ├── README.md
│ └── package.json
├── 03 - React Router Setup & BrowserRouter
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 04 - Routes
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 05 - BrowserRouter & Routes challenge
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 06 - Route, path, & element
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 07 - Quick Re-org
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 08 - Link
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 09 - VanLife project bootstrapping
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 10 - Initial Deploy to Netlify
│ ├── .gitignore
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ └── Home.jsx
│ └── vite.config.js
├── 11 - Mirage JS Server
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ └── Home.jsx
│ ├── server.js
│ └── vite.config.js
├── 12 - Challenge - Vans Page - Part 1
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ └── Home.jsx
│ ├── server.js
│ └── vite.config.js
├── 13 - Challenge - Vans Page - Part 2
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 14 - Route Params - part 1
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 15 - Route Params - part 2
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 16 - Route Params part 3.1 - useParams & challenge
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 17 - Route Params part 3.2 - useParams challenge
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
└── 18 - Route Params Quiz
│ ├── README.md
│ ├── package.json
│ └── quiz.md
├── 02 - Nested Routes
├── 01 - Nested Routes Intro
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 02 - Fixing the Navbar with a Layout Route
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 03 - Fixing the Navbar with a Layout Route part 2
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ └── Header.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 04 - Bootstrap the Host pages
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 05 - Nesting the host routes
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 06 - Creating the Host Layout
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 07 - Relative Paths
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 08 - Index Routes
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 09 - To nest or not to nest
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 10 - Nested Routes Quiz
│ ├── README.md
│ ├── package.json
│ └── quiz.md
├── 11 - Add Footer
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 12 - NavLink
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 13 - Active Link Styling with NavLink
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 14 - Active Link Styling with NavLink - Part 2
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 15 - Adding Host Vans Routes
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 16 - Optional Side Quest - Building out the Host Vans List and Detail Pages
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 17 - Building out the Host Van Detail Page
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 18 - Relative Links
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 19 - Back to all vans
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 20 - Add host vans id Nested Routes
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 21 - Add the Final Navbar
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 22 - Outlet Context
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
└── 23 - Update deployed version on Netlfiy
│ ├── .gitignore
│ ├── README.md
│ ├── assets
│ └── images
│ │ ├── about-hero.png
│ │ └── home-hero.png
│ ├── components
│ ├── Footer.jsx
│ ├── Header.jsx
│ ├── HostLayout.jsx
│ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ ├── About.jsx
│ ├── Home.jsx
│ ├── Host
│ │ ├── Dashboard.jsx
│ │ ├── HostVanDetail.jsx
│ │ ├── HostVanInfo.jsx
│ │ ├── HostVanPhotos.jsx
│ │ ├── HostVanPricing.jsx
│ │ ├── HostVans.jsx
│ │ ├── Income.jsx
│ │ └── Reviews.jsx
│ └── Vans
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 03 - Search Params and Links
├── 01 - Search Params Intro
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 02 - useSearchParams
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 03 - Challenge - Set up search params in VanLife
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 04 - Filter the array with the search param
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 05 - Challenge - Filter the vans in VanLife
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 06 - Using Links to add search params
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 07 - Challenge - Filter the vans with Links
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 08 - Using the search params setter function
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 09 - Challenge - Filter the vans with a setter function
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── hints.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 10 - Caveats to setting params
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 11 - Merging search params with Links
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 12 - Merging search params with the setSearchParams function
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 13 - Challenge - conditional rendering practice
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 14 - Fix remaining absolute paths
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 15 - Back to all vans
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 16 - Link state
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 17 - useLocation
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 18 - Challenge - conditionally render the back button text
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 19 - 404 Page
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 20 - Happy Path vs Sad Path
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 21 - Quick update to our fetching code
│ ├── README.md
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 22 - Coding the Sad Path - Loading state
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
└── 23 - Coding the Sad Path - Error Handling
│ ├── README.md
│ ├── api.js
│ ├── assets
│ └── images
│ │ ├── about-hero.png
│ │ └── home-hero.png
│ ├── components
│ ├── Footer.jsx
│ ├── Header.jsx
│ ├── HostLayout.jsx
│ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ ├── About.jsx
│ ├── Home.jsx
│ ├── Host
│ │ ├── Dashboard.jsx
│ │ ├── HostVanDetail.jsx
│ │ ├── HostVanInfo.jsx
│ │ ├── HostVanPhotos.jsx
│ │ ├── HostVanPricing.jsx
│ │ ├── HostVans.jsx
│ │ ├── Income.jsx
│ │ └── Reviews.jsx
│ ├── NotFound.jsx
│ └── Vans
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 04 - Loaders and Errors
├── 01 - Loaders Intro
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 02 - createBrowserRouter
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 03 - Setting up the data router
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 04 - Loader function
│ ├── Home.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 05 - Challenge - Vans List Loader
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 06 - useLoaderData
│ ├── Home.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 07 - Challenge - useLoaderData in Vans List page
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 08 - Use the loader data instead of the useEffect
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 09 - Loaders Quiz
│ ├── README.md
│ ├── package.json
│ └── quiz.md
├── 10 - Handling Errors
│ ├── Home.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 11 - Add errorElement to vans route
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
└── 12 - useRouteError
│ ├── README.md
│ ├── api.js
│ ├── assets
│ └── images
│ │ ├── about-hero.png
│ │ └── home-hero.png
│ ├── components
│ ├── Error.jsx
│ ├── Footer.jsx
│ ├── Header.jsx
│ ├── HostLayout.jsx
│ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ ├── About.jsx
│ ├── Home.jsx
│ ├── Host
│ │ ├── Dashboard.jsx
│ │ ├── HostVanDetail.jsx
│ │ ├── HostVanInfo.jsx
│ │ ├── HostVanPhotos.jsx
│ │ ├── HostVanPricing.jsx
│ │ ├── HostVans.jsx
│ │ ├── Income.jsx
│ │ └── Reviews.jsx
│ ├── NotFound.jsx
│ └── Vans
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 05 - Actions and Protected Routes
├── 01 - Initial Login Form
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 02 - Note from the future - importing image assets in Vite
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 03 - Protected Routes Intro
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 04 - Protected Routes - AuthRequired Layout Route
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 05 - Protected Routes - Conditionally send to login page
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 06 - Protected Routes Quiz
│ ├── README.md
│ ├── package.json
│ └── quiz.md
├── 07 - Protected Routes - with loaders
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 08 - Protected Routes w loaders
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 09 - Parallel Loaders demo
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 10 - Challenge - Protected Routes w loaders
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 11 - Challenge - Protected Routes in VanLife - Part 1
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 12 - Aside challenge - move remaining fetching to loaders - Part 1
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 13 - Aside challenge - move remaining fetching to loaders - part 2
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 14 - Challenge - Protected Routes in VanLife - Part 2
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ └── vite.config.js
├── 15 - Send login message prompt to login page
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── utils.js
│ └── vite.config.js
├── 16 - Consume message from search param on login page
│ ├── AuthRequired.jsx
│ ├── Layout.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── utils.js
│ └── vite.config.js
├── 17 - Pass message to Login page
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 18 - Hot Take - Forms in React are bad
│ ├── Form.js
│ ├── README.md
│ ├── index.html
│ ├── index.js
│ ├── package.json
│ ├── style.css
│ └── webpack.config.js
├── 19 - Setting up for authentication - happy path
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 20 - Setting up for authentication - sad path
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 21 - useNavigate()
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 22 - React Router Form Component
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 23 - Setting up the Action function
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 24 - Add form action to VanLife
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 25 - Action function - params
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 26 - Action function - request
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 27 - Get form data in VanLife
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 28 - Use data in action to log in
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 29 - Better but still fake auth
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 30 - Challenge - send user to host route after log in
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 31 - Form replace
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 32 - useActionData
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 33 - Action error handling
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 34 - Action error handling in VanLife
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 35 - useNavigation()
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ └── vite.config.js
├── 36 - useNavigation in VanLife
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 37 - get previous route pathname
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── Protected.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── requireAuth.js
│ └── vite.config.js
├── 38 - redirectTo - part 1
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── Protected.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── requireAuth.js
│ └── vite.config.js
├── 39 - redirectTo - part 2
│ ├── Layout.jsx
│ ├── Login.jsx
│ ├── Protected.jsx
│ ├── README.md
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── requireAuth.js
│ └── vite.config.js
└── 40 - redirectTo in VanLife
│ ├── README.md
│ ├── api.js
│ ├── assets
│ └── images
│ │ ├── about-hero.png
│ │ ├── avatar-icon.png
│ │ └── home-hero.png
│ ├── components
│ ├── Error.jsx
│ ├── Footer.jsx
│ ├── Header.jsx
│ ├── HostLayout.jsx
│ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ ├── About.jsx
│ ├── Home.jsx
│ ├── Host
│ │ ├── Dashboard.jsx
│ │ ├── HostVanDetail.jsx
│ │ ├── HostVanInfo.jsx
│ │ ├── HostVanPhotos.jsx
│ │ ├── HostVanPricing.jsx
│ │ ├── HostVans.jsx
│ │ ├── Income.jsx
│ │ └── Reviews.jsx
│ ├── Login.jsx
│ ├── NotFound.jsx
│ └── Vans
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 06 - Deferred Data
├── 01 - Deferring data
│ ├── Layout.jsx
│ ├── README.md
│ ├── Weather.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── utils.js
│ └── vite.config.js
├── 02 - Promises and defer()
│ ├── Layout.jsx
│ ├── README.md
│ ├── Weather.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── utils.js
│ └── vite.config.js
├── 03 - defer getVans()
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 04 - Await component
│ ├── Layout.jsx
│ ├── README.md
│ ├── Weather.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── utils.js
│ └── vite.config.js
├── 05 - Await in Vans route
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 06 - Await vans refactor
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 07 - React Suspense
│ ├── Layout.jsx
│ ├── README.md
│ ├── Weather.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── utils.js
│ └── vite.config.js
├── 08 - Suspense in VanLife
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 09 - Putting it all together - defer, Await, Suspense in HostVans
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 10 - errorElements in remaining van loading pages
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ └── home-hero.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 11 - Placeholders are gone
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 12 - Cloud Firestore setup
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 13 - Cloud Firestore Code Setup
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 14 - Collection reference and getVans() function
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 15 - Create getVan() function
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 16 - Refactor getHostVans function
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── 17 - Final Loose Ends
│ ├── README.md
│ ├── api.js
│ ├── assets
│ │ └── images
│ │ │ ├── about-hero.png
│ │ │ ├── avatar-icon.png
│ │ │ ├── home-hero.png
│ │ │ ├── income-graph.png
│ │ │ └── reviews-graph.png
│ ├── components
│ │ ├── Error.jsx
│ │ ├── Footer.jsx
│ │ ├── Header.jsx
│ │ ├── HostLayout.jsx
│ │ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ │ ├── About.jsx
│ │ ├── Home.jsx
│ │ ├── Host
│ │ │ ├── Dashboard.jsx
│ │ │ ├── HostVanDetail.jsx
│ │ │ ├── HostVanInfo.jsx
│ │ │ ├── HostVanPhotos.jsx
│ │ │ ├── HostVanPricing.jsx
│ │ │ ├── HostVans.jsx
│ │ │ ├── Income.jsx
│ │ │ └── Reviews.jsx
│ │ ├── Login.jsx
│ │ ├── NotFound.jsx
│ │ └── Vans
│ │ │ ├── VanDetail.jsx
│ │ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
└── 18 - Outro
│ ├── README.md
│ ├── api.js
│ ├── assets
│ └── images
│ │ ├── about-hero.png
│ │ ├── avatar-icon.png
│ │ ├── home-hero.png
│ │ ├── income-graph.png
│ │ └── reviews-graph.png
│ ├── components
│ ├── Error.jsx
│ ├── Footer.jsx
│ ├── Header.jsx
│ ├── HostLayout.jsx
│ └── Layout.jsx
│ ├── index.css
│ ├── index.html
│ ├── index.jsx
│ ├── package.json
│ ├── pages
│ ├── About.jsx
│ ├── Home.jsx
│ ├── Host
│ │ ├── Dashboard.jsx
│ │ ├── HostVanDetail.jsx
│ │ ├── HostVanInfo.jsx
│ │ ├── HostVanPhotos.jsx
│ │ ├── HostVanPricing.jsx
│ │ ├── HostVans.jsx
│ │ ├── Income.jsx
│ │ └── Reviews.jsx
│ ├── Login.jsx
│ ├── NotFound.jsx
│ └── Vans
│ │ ├── VanDetail.jsx
│ │ └── Vans.jsx
│ ├── server.js
│ ├── utils.js
│ └── vite.config.js
├── README.md
├── package-lock.json
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | .DS_Store
4 | *.env
--------------------------------------------------------------------------------
/01 - Introduction to React Router/01 - Introduction to React Router 6/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/01 - Introduction to React Router 6/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/01 - Introduction to React Router 6/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/01 - Introduction to React Router 6/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/01 - Introduction to React Router 6/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/01 - Introduction to React Router 6/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/01 - Introduction to React Router 6/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/01 - Introduction to React Router/01 - Introduction to React Router 6/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "01---introduction-to-react-router-6",
3 | "scripts": {
4 | "start": "vite",
5 | "dev": "vite",
6 | "build": "vite build",
7 | "preview": "vite preview"
8 | }
9 | }
--------------------------------------------------------------------------------
/01 - Introduction to React Router/01 - Introduction to React Router 6/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/02 - Multi-page vs single-page apps/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "02---multi-page-vs-single-page-apps",
3 | "dependencies": {},
4 | "devDependencies": {},
5 | "scripts": {}
6 | }
--------------------------------------------------------------------------------
/01 - Introduction to React Router/03 - React Router Setup & BrowserRouter/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/01 - Introduction to React Router/03 - React Router Setup & BrowserRouter/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/04 - Routes/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/01 - Introduction to React Router/04 - Routes/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/05 - BrowserRouter & Routes challenge/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/01 - Introduction to React Router/05 - BrowserRouter & Routes challenge/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/06 - Route, path, & element/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/01 - Introduction to React Router/06 - Route, path, & element/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/07 - Quick Re-org/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/01 - Introduction to React Router/07 - Quick Re-org/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/08 - Link/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/01 - Introduction to React Router/08 - Link/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/09 - VanLife project bootstrapping/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 | nav > a {
11 | text-decoration: none;
12 | }
--------------------------------------------------------------------------------
/01 - Introduction to React Router/09 - VanLife project bootstrapping/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/10 - Initial Deploy to Netlify/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | *.env
4 | .DS_Store
--------------------------------------------------------------------------------
/01 - Introduction to React Router/10 - Initial Deploy to Netlify/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/10 - Initial Deploy to Netlify/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/10 - Initial Deploy to Netlify/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/10 - Initial Deploy to Netlify/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/10 - Initial Deploy to Netlify/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/11 - Mirage JS Server/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/11 - Mirage JS Server/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/11 - Mirage JS Server/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/11 - Mirage JS Server/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/11 - Mirage JS Server/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/12 - Challenge - Vans Page - Part 1/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/12 - Challenge - Vans Page - Part 1/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/12 - Challenge - Vans Page - Part 1/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/12 - Challenge - Vans Page - Part 1/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/12 - Challenge - Vans Page - Part 1/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/13 - Challenge - Vans Page - Part 2/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/13 - Challenge - Vans Page - Part 2/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/13 - Challenge - Vans Page - Part 2/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/13 - Challenge - Vans Page - Part 2/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/13 - Challenge - Vans Page - Part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/14 - Route Params - part 1/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/14 - Route Params - part 1/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/14 - Route Params - part 1/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/14 - Route Params - part 1/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/14 - Route Params - part 1/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/15 - Route Params - part 2/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/15 - Route Params - part 2/assets/images/about-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/15 - Route Params - part 2/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/01 - Introduction to React Router/15 - Route Params - part 2/assets/images/home-hero.png
--------------------------------------------------------------------------------
/01 - Introduction to React Router/15 - Route Params - part 2/pages/VanDetail.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function VanDetail() {
4 | return
Van detail page goes here
5 | }
--------------------------------------------------------------------------------
/01 - Introduction to React Router/15 - Route Params - part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/16 - Route Params part 3.1 - useParams & challenge/pages/VanDetail.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function VanDetail() {
4 | return Van detail page goes here
5 | }
--------------------------------------------------------------------------------
/01 - Introduction to React Router/16 - Route Params part 3.1 - useParams & challenge/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/17 - Route Params part 3.2 - useParams challenge/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/01 - Introduction to React Router/18 - Route Params Quiz/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "18---route-params-quiz",
3 | "dependencies": {},
4 | "devDependencies": {},
5 | "scripts": {}
6 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/01 - Nested Routes Intro/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/01 - Nested Routes Intro/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/01 - Nested Routes Intro/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/01 - Nested Routes Intro/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/01 - Nested Routes Intro/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/02 - Fixing the Navbar with a Layout Route/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/02 - Fixing the Navbar with a Layout Route/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/02 - Fixing the Navbar with a Layout Route/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/02 - Fixing the Navbar with a Layout Route/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/02 - Fixing the Navbar with a Layout Route/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/03 - Fixing the Navbar with a Layout Route part 2/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/03 - Fixing the Navbar with a Layout Route part 2/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/03 - Fixing the Navbar with a Layout Route part 2/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/03 - Fixing the Navbar with a Layout Route part 2/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/03 - Fixing the Navbar with a Layout Route part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/04 - Bootstrap the Host pages/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/04 - Bootstrap the Host pages/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/04 - Bootstrap the Host pages/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/04 - Bootstrap the Host pages/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/04 - Bootstrap the Host pages/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/05 - Nesting the host routes/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/05 - Nesting the host routes/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/05 - Nesting the host routes/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/05 - Nesting the host routes/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/05 - Nesting the host routes/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/05 - Nesting the host routes/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/05 - Nesting the host routes/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/05 - Nesting the host routes/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/06 - Creating the Host Layout/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/06 - Creating the Host Layout/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/06 - Creating the Host Layout/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/06 - Creating the Host Layout/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/06 - Creating the Host Layout/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/06 - Creating the Host Layout/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/06 - Creating the Host Layout/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/07 - Relative Paths/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/07 - Relative Paths/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/07 - Relative Paths/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/07 - Relative Paths/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/07 - Relative Paths/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/07 - Relative Paths/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/07 - Relative Paths/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/07 - Relative Paths/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/08 - Index Routes/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/08 - Index Routes/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/08 - Index Routes/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/08 - Index Routes/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/08 - Index Routes/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/08 - Index Routes/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/08 - Index Routes/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/08 - Index Routes/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/09 - To nest or not to nest/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/09 - To nest or not to nest/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/09 - To nest or not to nest/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/09 - To nest or not to nest/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/09 - To nest or not to nest/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/09 - To nest or not to nest/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/09 - To nest or not to nest/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/09 - To nest or not to nest/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/10 - Nested Routes Quiz/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "10---nested-routes-quiz",
3 | "dependencies": {},
4 | "devDependencies": {},
5 | "scripts": {}
6 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/10 - Nested Routes Quiz/quiz.md:
--------------------------------------------------------------------------------
1 | 1. What is the primary reason to use a nested route?
2 |
3 |
4 |
5 | 2. What is a "Layout Route"?
6 |
7 |
8 |
9 | 3. What does the component do? When do you use it?
10 |
11 |
12 |
13 | 4. What is an "Index Route"?
14 |
--------------------------------------------------------------------------------
/02 - Nested Routes/11 - Add Footer/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/11 - Add Footer/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/11 - Add Footer/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/11 - Add Footer/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/11 - Add Footer/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/11 - Add Footer/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/11 - Add Footer/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/11 - Add Footer/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/12 - NavLink/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/13 - Active Link Styling with NavLink/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/13 - Active Link Styling with NavLink/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/13 - Active Link Styling with NavLink/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/14 - Active Link Styling with NavLink - Part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/15 - Adding Host Vans Routes/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/15 - Adding Host Vans Routes/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/15 - Adding Host Vans Routes/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/pages/Host/HostVanDetail.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanDetail() {
4 | return Host Van Detail Page
5 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/pages/Host/HostVans.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVans() {
4 | return (
5 | Host Vans List Page
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/16 - Optional Side Quest - Building out the Host Vans List and Detail Pages/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/17 - Building out the Host Van Detail Page/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/17 - Building out the Host Van Detail Page/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/17 - Building out the Host Van Detail Page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/18 - Relative Links/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/18 - Relative Links/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/18 - Relative Links/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/19 - Back to all vans/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/19 - Back to all vans/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/19 - Back to all vans/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/20 - Add host vans id Nested Routes/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/20 - Add host vans id Nested Routes/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/20 - Add host vans id Nested Routes/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/21 - Add the Final Navbar/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/21 - Add the Final Navbar/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/pages/Host/HostVanInfo.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanInfo() {
4 | return (
5 | Detailed info goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/pages/Host/HostVanPhotos.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanPhotos() {
4 | return (
5 | Photos go here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/pages/Host/HostVanPricing.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanPricing() {
4 | return (
5 | Pricing info goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/21 - Add the Final Navbar/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/22 - Outlet Context/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/22 - Outlet Context/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/pages/Host/HostVanInfo.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanInfo() {
4 | return (
5 | Detailed info goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/pages/Host/HostVanPhotos.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanPhotos() {
4 | return (
5 | Photos go here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/pages/Host/HostVanPricing.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HostVanPricing() {
4 | return (
5 | Pricing info goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/22 - Outlet Context/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | *.env
4 | .DS_Store
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/23 - Update deployed version on Netlfiy/assets/images/about-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/02 - Nested Routes/23 - Update deployed version on Netlfiy/assets/images/home-hero.png
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/02 - Nested Routes/23 - Update deployed version on Netlfiy/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/01 - Search Params Intro/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/01 - Search Params Intro/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/01 - Search Params Intro/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/02 - useSearchParams/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/02 - useSearchParams/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/03 - Challenge - Set up search params in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/03 - Challenge - Set up search params in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/03 - Challenge - Set up search params in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/03 - Challenge - Set up search params in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/03 - Challenge - Set up search params in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/04 - Filter the array with the search param/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/04 - Filter the array with the search param/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/05 - Challenge - Filter the vans in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/05 - Challenge - Filter the vans in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/05 - Challenge - Filter the vans in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/05 - Challenge - Filter the vans in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/05 - Challenge - Filter the vans in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/06 - Using Links to add search params/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/06 - Using Links to add search params/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/07 - Challenge - Filter the vans with Links/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/07 - Challenge - Filter the vans with Links/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/07 - Challenge - Filter the vans with Links/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/07 - Challenge - Filter the vans with Links/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/07 - Challenge - Filter the vans with Links/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/08 - Using the search params setter function/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/08 - Using the search params setter function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/09 - Challenge - Filter the vans with a setter function/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/09 - Challenge - Filter the vans with a setter function/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/09 - Challenge - Filter the vans with a setter function/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/09 - Challenge - Filter the vans with a setter function/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/09 - Challenge - Filter the vans with a setter function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/10 - Caveats to setting params/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/10 - Caveats to setting params/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/11 - Merging search params with Links/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/11 - Merging search params with Links/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/12 - Merging search params with the setSearchParams function/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/12 - Merging search params with the setSearchParams function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/13 - Challenge - conditional rendering practice/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/13 - Challenge - conditional rendering practice/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/13 - Challenge - conditional rendering practice/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/13 - Challenge - conditional rendering practice/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/13 - Challenge - conditional rendering practice/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/14 - Fix remaining absolute paths/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/14 - Fix remaining absolute paths/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/14 - Fix remaining absolute paths/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/15 - Back to all vans/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/15 - Back to all vans/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/15 - Back to all vans/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/16 - Link state/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/16 - Link state/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/16 - Link state/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/17 - useLocation/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/17 - useLocation/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/17 - useLocation/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/18 - Challenge - conditionally render the back button text/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/18 - Challenge - conditionally render the back button text/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/18 - Challenge - conditionally render the back button text/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/18 - Challenge - conditionally render the back button text/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/18 - Challenge - conditionally render the back button text/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/19 - 404 Page/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/19 - 404 Page/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/19 - 404 Page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/20 - Happy Path vs Sad Path/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/20 - Happy Path vs Sad Path/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/20 - Happy Path vs Sad Path/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/21 - Quick update to our fetching code/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/21 - Quick update to our fetching code/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/21 - Quick update to our fetching code/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/api.js:
--------------------------------------------------------------------------------
1 | export async function getVans() {
2 | const res = await fetch("/api/vans")
3 | const data = await res.json()
4 | return data.vans
5 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/22 - Coding the Sad Path - Loading state/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/assets/images/about-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/assets/images/home-hero.png
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/03 - Search Params and Links/23 - Coding the Sad Path - Error Handling/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/01 - Loaders Intro/assets/images/about-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/01 - Loaders Intro/assets/images/home-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/01 - Loaders Intro/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/02 - createBrowserRouter/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/02 - createBrowserRouter/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/03 - Setting up the data router/assets/images/about-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/03 - Setting up the data router/assets/images/home-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/03 - Setting up the data router/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/04 - Loader function/Home.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function HomePage() {
4 | return (
5 |
6 | Home page
7 |
8 | );
9 | }
10 |
--------------------------------------------------------------------------------
/04 - Loaders and Errors/04 - Loader function/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/04 - Loader function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/05 - Challenge - Vans List Loader/assets/images/about-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/05 - Challenge - Vans List Loader/assets/images/home-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/05 - Challenge - Vans List Loader/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/06 - useLoaderData/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/06 - useLoaderData/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/07 - Challenge - useLoaderData in Vans List page/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/07 - Challenge - useLoaderData in Vans List page/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/07 - Challenge - useLoaderData in Vans List page/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/07 - Challenge - useLoaderData in Vans List page/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/07 - Challenge - useLoaderData in Vans List page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/08 - Use the loader data instead of the useEffect/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/08 - Use the loader data instead of the useEffect/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/08 - Use the loader data instead of the useEffect/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/08 - Use the loader data instead of the useEffect/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/08 - Use the loader data instead of the useEffect/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/09 - Loaders Quiz/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "09---loaders-quiz",
3 | "dependencies": {},
4 | "devDependencies": {},
5 | "scripts": {}
6 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/10 - Handling Errors/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | padding-top: 0;
5 | background-color: whitesmoke;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/10 - Handling Errors/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/11 - Add errorElement to vans route/assets/images/about-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/11 - Add errorElement to vans route/assets/images/home-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/11 - Add errorElement to vans route/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/12 - useRouteError/assets/images/about-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/04 - Loaders and Errors/12 - useRouteError/assets/images/home-hero.png
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/components/Error.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Error() {
4 | return (
5 | An error occured!
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/04 - Loaders and Errors/12 - useRouteError/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/01 - Initial Login Form/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/01 - Initial Login Form/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/01 - Initial Login Form/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/01 - Initial Login Form/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/02 - Note from the future - importing image assets in Vite/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/02 - Note from the future - importing image assets in Vite/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/02 - Note from the future - importing image assets in Vite/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/02 - Note from the future - importing image assets in Vite/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/02 - Note from the future - importing image assets in Vite/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/03 - Protected Routes Intro/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | background-color: #FFF7ED;
5 | color: #161616;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | color: #161616;
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/03 - Protected Routes Intro/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/04 - Protected Routes - AuthRequired Layout Route/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/05 - Protected Routes - Conditionally send to login page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/06 - Protected Routes Quiz/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "06---protected-routes-quiz",
3 | "dependencies": {},
4 | "devDependencies": {},
5 | "scripts": {}
6 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/07 - Protected Routes - with loaders/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/08 - Protected Routes w loaders/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | background-color: #FFF7ED;
5 | color: #161616;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | color: #161616;
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/08 - Protected Routes w loaders/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/09 - Parallel Loaders demo/index.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0;
3 | padding: 10px;
4 | background-color: #FFF7ED;
5 | color: #161616;
6 | }
7 |
8 | a, button {
9 | margin-right: 15px;
10 | color: #161616;
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/09 - Parallel Loaders demo/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/10 - Challenge - Protected Routes w loaders/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/11 - Challenge - Protected Routes in VanLife - Part 1/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/11 - Challenge - Protected Routes in VanLife - Part 1/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/11 - Challenge - Protected Routes in VanLife - Part 1/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/11 - Challenge - Protected Routes in VanLife - Part 1/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/11 - Challenge - Protected Routes in VanLife - Part 1/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/12 - Aside challenge - move remaining fetching to loaders - Part 1/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/12 - Aside challenge - move remaining fetching to loaders - Part 1/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/12 - Aside challenge - move remaining fetching to loaders - Part 1/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/12 - Aside challenge - move remaining fetching to loaders - Part 1/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/12 - Aside challenge - move remaining fetching to loaders - Part 1/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/13 - Aside challenge - move remaining fetching to loaders - part 2/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/13 - Aside challenge - move remaining fetching to loaders - part 2/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/13 - Aside challenge - move remaining fetching to loaders - part 2/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/13 - Aside challenge - move remaining fetching to loaders - part 2/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/13 - Aside challenge - move remaining fetching to loaders - part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/14 - Challenge - Protected Routes in VanLife - Part 2/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/14 - Challenge - Protected Routes in VanLife - Part 2/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/14 - Challenge - Protected Routes in VanLife - Part 2/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/14 - Challenge - Protected Routes in VanLife - Part 2/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/14 - Challenge - Protected Routes in VanLife - Part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/15 - Send login message prompt to login page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/16 - Consume message from search param on login page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/17 - Pass message to Login page/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/17 - Pass message to Login page/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/17 - Pass message to Login page/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/utils.js:
--------------------------------------------------------------------------------
1 | import { redirect } from "react-router-dom"
2 |
3 | export async function requireAuth() {
4 | const isLoggedIn = false
5 |
6 | if (!isLoggedIn) {
7 | throw redirect("/login")
8 | }
9 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/17 - Pass message to Login page/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/18 - Hot Take - Forms in React are bad/index.js:
--------------------------------------------------------------------------------
1 | import React from "react"
2 | import ReactDOM from "react-dom/client"
3 | import Form from "./Form"
4 |
5 | ReactDOM
6 | .createRoot(document.getElementById('root'))
7 | .render();
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/19 - Setting up for authentication - happy path/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/19 - Setting up for authentication - happy path/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/19 - Setting up for authentication - happy path/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/19 - Setting up for authentication - happy path/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/19 - Setting up for authentication - happy path/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/20 - Setting up for authentication - sad path/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/20 - Setting up for authentication - sad path/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/20 - Setting up for authentication - sad path/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/20 - Setting up for authentication - sad path/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/20 - Setting up for authentication - sad path/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/21 - useNavigate()/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/21 - useNavigate()/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/21 - useNavigate()/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/21 - useNavigate()/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/22 - React Router Form Component/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/23 - Setting up the Action function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/24 - Add form action to VanLife/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/24 - Add form action to VanLife/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/24 - Add form action to VanLife/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/24 - Add form action to VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/25 - Action function - params/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/26 - Action function - request/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/27 - Get form data in VanLife/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/27 - Get form data in VanLife/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/27 - Get form data in VanLife/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/27 - Get form data in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/28 - Use data in action to log in/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/28 - Use data in action to log in/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/28 - Use data in action to log in/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/28 - Use data in action to log in/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/29 - Better but still fake auth/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/29 - Better but still fake auth/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/29 - Better but still fake auth/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/29 - Better but still fake auth/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/30 - Challenge - send user to host route after log in/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/30 - Challenge - send user to host route after log in/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/30 - Challenge - send user to host route after log in/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/30 - Challenge - send user to host route after log in/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/30 - Challenge - send user to host route after log in/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/31 - Form replace/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/31 - Form replace/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/31 - Form replace/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/31 - Form replace/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/32 - useActionData/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/33 - Action error handling/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/34 - Action error handling in VanLife/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/34 - Action error handling in VanLife/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/34 - Action error handling in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/34 - Action error handling in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/34 - Action error handling in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/34 - Action error handling in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/34 - Action error handling in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/35 - useNavigation()/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/36 - useNavigation in VanLife/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/36 - useNavigation in VanLife/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/36 - useNavigation in VanLife/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/36 - useNavigation in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/37 - get previous route pathname/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/38 - redirectTo - part 1/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/39 - redirectTo - part 2/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/40 - redirectTo in VanLife/assets/images/about-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/40 - redirectTo in VanLife/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/05 - Actions and Protected Routes/40 - redirectTo in VanLife/assets/images/home-hero.png
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/05 - Actions and Protected Routes/40 - redirectTo in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/01 - Deferring data/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/02 - Promises and defer()/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/03 - defer getVans()/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/03 - defer getVans()/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/03 - defer getVans()/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/03 - defer getVans()/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/04 - Await component/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/05 - Await in Vans route/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/05 - Await in Vans route/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/05 - Await in Vans route/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/05 - Await in Vans route/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/06 - Await vans refactor/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/06 - Await vans refactor/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/06 - Await vans refactor/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/06 - Await vans refactor/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/07 - React Suspense/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/08 - Suspense in VanLife/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/08 - Suspense in VanLife/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/08 - Suspense in VanLife/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/08 - Suspense in VanLife/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/09 - Putting it all together - defer, Await, Suspense in HostVans/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/09 - Putting it all together - defer, Await, Suspense in HostVans/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/09 - Putting it all together - defer, Await, Suspense in HostVans/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/09 - Putting it all together - defer, Await, Suspense in HostVans/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/09 - Putting it all together - defer, Await, Suspense in HostVans/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/10 - errorElements in remaining van loading pages/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/10 - errorElements in remaining van loading pages/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/10 - errorElements in remaining van loading pages/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/pages/Host/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Dashboard() {
4 | return (
5 | Dashboard goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/pages/Host/Income.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Income() {
4 | return (
5 | Income page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/pages/Host/Reviews.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Reviews() {
4 | return (
5 | Reviews page goes here
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/10 - errorElements in remaining van loading pages/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/11 - Placeholders are gone/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/11 - Placeholders are gone/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/11 - Placeholders are gone/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/11 - Placeholders are gone/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/11 - Placeholders are gone/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/11 - Placeholders are gone/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/12 - Cloud Firestore setup/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/12 - Cloud Firestore setup/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/13 - Cloud Firestore Code Setup/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/13 - Cloud Firestore Code Setup/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/14 - Collection reference and getVans() function/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/14 - Collection reference and getVans() function/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/14 - Collection reference and getVans() function/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/14 - Collection reference and getVans() function/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/14 - Collection reference and getVans() function/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/14 - Collection reference and getVans() function/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/14 - Collection reference and getVans() function/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/14 - Collection reference and getVans() function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/15 - Create getVan() function/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/15 - Create getVan() function/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/15 - Create getVan() function/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/15 - Create getVan() function/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/15 - Create getVan() function/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/15 - Create getVan() function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/16 - Refactor getHostVans function/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/16 - Refactor getHostVans function/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/17 - Final Loose Ends/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/17 - Final Loose Ends/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/17 - Final Loose Ends/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/17 - Final Loose Ends/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/17 - Final Loose Ends/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/17 - Final Loose Ends/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/assets/images/about-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/18 - Outro/assets/images/about-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/assets/images/avatar-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/18 - Outro/assets/images/avatar-icon.png
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/assets/images/home-hero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/18 - Outro/assets/images/home-hero.png
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/assets/images/income-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/18 - Outro/assets/images/income-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/assets/images/reviews-graph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scrimba/learn-react-router-6/fa80f103ac98bab4773b07fd00a7deab58227c72/06 - Deferred Data/18 - Outro/assets/images/reviews-graph.png
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export default function Footer() {
4 | return (
5 |
6 | )
7 | }
--------------------------------------------------------------------------------
/06 - Deferred Data/18 - Outro/vite.config.js:
--------------------------------------------------------------------------------
1 | import {defineConfig} from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | export default defineConfig({
5 | plugins: [react()]
6 | })
--------------------------------------------------------------------------------