├── .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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 |
© 2022 #VANLIFE
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 | }) --------------------------------------------------------------------------------