├── 2019
├── .gitignore
├── Introduction Lessons 1-7
│ ├── Section 3 - Understanding the base Features and Syntax
│ │ └── section-3
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ ├── logo192.png
│ │ │ ├── logo512.png
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ │ └── src
│ │ │ └── logo.svg
│ ├── Section 4 - Working with Lists and Conditionals
│ │ └── section-4
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ ├── logo192.png
│ │ │ ├── logo512.png
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ │ └── src
│ │ │ └── logo.svg
│ ├── Section 5 - Styling React Components & Elements
│ │ └── section-5
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ ├── logo192.png
│ │ │ ├── logo512.png
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ │ └── src
│ │ │ └── logo.svg
│ ├── Section 6 - Debugging React Apps
│ │ └── section-6
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ ├── logo192.png
│ │ │ ├── logo512.png
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ │ └── src
│ │ │ └── logo.svg
│ └── Section 7 - Diving Deeper Into Components & React Internals
│ │ └── section-7
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ └── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
├── Section 10 - Burger Builder Project - Accessing the Server
│ └── section10
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 11 - Multi-Page-Feeling in a Single-Page-App Routing
│ ├── routing--react-suspense
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ └── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ └── routing
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ └── logo.svg
├── Section 12 - Adding Routing to our Burger Project
│ └── section12npx
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 13 - Forms and Form Validation
│ └── section13
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 14 - Redux
│ ├── redux--assignment-2
│ │ ├── README.md
│ │ ├── package.json
│ │ └── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ ├── redux--in-practice
│ │ ├── README.md
│ │ ├── how-to-use.txt
│ │ ├── package.json
│ │ └── public
│ │ │ ├── favicon.ico
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ └── redux
│ │ ├── README.md
│ │ ├── package.json
│ │ └── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── manifest.json
├── Section 15 - Adding Redux to our Project
│ └── section15
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 16 - Redux Advanced
│ └── section16
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 17 - Redux Advanced Burger Project
│ └── section17
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 18 - Adding Authentication to our Burger Project
│ └── section18
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 19 - Improving our Burger Project
│ └── section19
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── images
│ │ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 20 - Testing
│ └── section20
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 21 - Deploying the App to the Web
│ └── section21
│ │ ├── .firebase
│ │ └── hosting.YnVpbGQ.cache
│ │ ├── .firebaserc
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── firebase.json
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ ├── assets
│ │ └── burger-logo.png
│ │ └── logo.svg
├── Section 8 - A Real App - The Burger Builder (Basic Version)
│ └── the-burger-builder
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ │ └── src
│ │ └── assets
│ │ └── burger-logo.png
└── Section 9 - Reaching out to the web (Http, Ajax)
│ ├── http-01
│ ├── .gitignore
│ ├── README.md
│ ├── how-to-use.txt
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ └── logo.svg
│ └── the-burger-builder-with-ajax
│ ├── .gitignore
│ ├── README.md
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ └── src
│ └── assets
│ └── burger-logo.png
├── 2023
├── .DS_Store
├── 01-expense-manager
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── components
│ │ ├── Chart
│ │ │ ├── Chart.css
│ │ │ ├── Chart.js
│ │ │ ├── ChartBar.css
│ │ │ └── ChartBar.js
│ │ ├── Expenses
│ │ │ ├── ExpenseDate.css
│ │ │ ├── ExpenseDate.js
│ │ │ ├── ExpenseFilter.css
│ │ │ ├── ExpenseFilter.js
│ │ │ ├── ExpenseItem.css
│ │ │ ├── ExpenseItem.js
│ │ │ ├── Expenses.css
│ │ │ ├── Expenses.js
│ │ │ ├── ExpensesChart.js
│ │ │ ├── ExpensesList.css
│ │ │ └── ExpensesList.js
│ │ ├── NewExpense
│ │ │ ├── ExpenseForm.css
│ │ │ ├── ExpenseForm.js
│ │ │ ├── NewExpense.css
│ │ │ └── NewExpense.js
│ │ └── UI
│ │ │ ├── Card.css
│ │ │ └── Card.js
│ │ ├── index.css
│ │ └── index.js
├── 02-React-key-concepts
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── assets
│ │ └── images
│ │ │ ├── components.png
│ │ │ ├── events.png
│ │ │ ├── key-concepts.png
│ │ │ └── state.png
│ │ ├── components
│ │ ├── Concept.js
│ │ └── Header.js
│ │ ├── index.css
│ │ └── index.js
├── 03-styling-practice
│ ├── package-lock.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.css
│ │ ├── App.js
│ │ ├── components
│ │ ├── CourseGoals
│ │ │ ├── CourseGoalItem
│ │ │ │ ├── CourseGoalItem.css
│ │ │ │ └── CourseGoalItem.js
│ │ │ ├── CourseGoalList
│ │ │ │ ├── CourseGoalList.css
│ │ │ │ └── CourseGoalList.js
│ │ │ └── CourseInput
│ │ │ │ ├── CourseInput.css
│ │ │ │ └── CourseInput.js
│ │ └── UI
│ │ │ └── Button
│ │ │ └── Button.js
│ │ ├── index.css
│ │ └── index.js
├── 04-investment-calculator
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── assets
│ │ └── investment-calculator-logo.png
│ │ ├── components
│ │ ├── Header
│ │ │ ├── Header.js
│ │ │ └── Header.module.css
│ │ ├── ResultsTable
│ │ │ ├── ResultsTable.js
│ │ │ └── ResultsTable.module.css
│ │ └── UserInputs
│ │ │ ├── UserInputs.js
│ │ │ └── UserInputs.module.css
│ │ ├── index.css
│ │ └── index.js
├── 05-Add-User-WithModal
│ ├── package-lock.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── components
│ │ ├── UI
│ │ │ ├── Button.js
│ │ │ ├── Button.module.css
│ │ │ ├── Card.js
│ │ │ ├── Card.module.css
│ │ │ ├── ErrorModal.js
│ │ │ └── ErrorModal.module.css
│ │ └── Users
│ │ │ ├── AddUser.js
│ │ │ ├── AddUser.module.css
│ │ │ ├── UsersList.js
│ │ │ └── UsersList.module.css
│ │ ├── index.css
│ │ └── index.js
├── 06-dummy-login-useEffect
│ ├── .gitignore
│ ├── package-lock.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── components
│ │ ├── Home
│ │ │ ├── Home.js
│ │ │ └── Home.module.css
│ │ ├── Login
│ │ │ ├── Login.js
│ │ │ └── Login.module.css
│ │ ├── MainHeader
│ │ │ ├── MainHeader.js
│ │ │ ├── MainHeader.module.css
│ │ │ ├── Navigation.js
│ │ │ └── Navigation.module.css
│ │ └── UI
│ │ │ ├── Button
│ │ │ ├── Button.js
│ │ │ └── Button.module.css
│ │ │ └── Card
│ │ │ ├── Card.js
│ │ │ └── Card.module.css
│ │ ├── index.css
│ │ └── index.js
├── 07-food-ordering-app
│ ├── package-lock.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── .DS_Store
│ │ ├── App.js
│ │ ├── assets
│ │ └── meals.jpg
│ │ ├── components
│ │ ├── .DS_Store
│ │ ├── Cart
│ │ │ ├── Cart.js
│ │ │ ├── Cart.module.css
│ │ │ ├── CartIcon.js
│ │ │ ├── CartItem.js
│ │ │ └── CartItem.module.css
│ │ ├── Layout
│ │ │ ├── Header.js
│ │ │ ├── Header.module.css
│ │ │ ├── HeaderCartButton.js
│ │ │ └── HeaderCartButton.module.css
│ │ ├── Meals
│ │ │ ├── AvailableMeals.js
│ │ │ ├── AvailableMeals.module.css
│ │ │ ├── MealItem
│ │ │ │ ├── MealItem.js
│ │ │ │ ├── MealItem.module.css
│ │ │ │ ├── MealItemForm.js
│ │ │ │ └── MealItemForm.module.css
│ │ │ ├── Meals.js
│ │ │ ├── MealsSummary.js
│ │ │ └── MealsSummary.module.css
│ │ └── UI
│ │ │ ├── Card.js
│ │ │ ├── Card.module.css
│ │ │ ├── Input.js
│ │ │ ├── Input.module.css
│ │ │ ├── Modal.js
│ │ │ └── Modal.module.css
│ │ ├── index.css
│ │ ├── index.js
│ │ └── store
│ │ ├── CartProvider.js
│ │ └── cart-context.js
├── 08-custom-hooks
│ ├── .DS_Store
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── components
│ │ ├── BackwardCounter.js
│ │ ├── Card.js
│ │ ├── Card.module.css
│ │ └── ForwardCounter.js
│ │ ├── hooks
│ │ └── use-counter.js
│ │ ├── index.css
│ │ └── index.js
├── 09-onwards-to-a-more-realistic-example
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── App.js
│ │ ├── components
│ │ ├── NewTask
│ │ │ ├── NewTask.js
│ │ │ ├── TaskForm.js
│ │ │ └── TaskForm.module.css
│ │ ├── Tasks
│ │ │ ├── TaskItem.js
│ │ │ ├── TaskItem.module.css
│ │ │ ├── Tasks.js
│ │ │ └── Tasks.module.css
│ │ └── UI
│ │ │ ├── Section.js
│ │ │ └── Section.module.css
│ │ ├── hooks
│ │ └── use-http.js
│ │ ├── index.css
│ │ └── index.js
├── 10-forms
│ ├── .DS_Store
│ ├── package-lock.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── .DS_Store
│ │ ├── App.js
│ │ ├── components
│ │ ├── BasicForm.js
│ │ └── SimpleInput.js
│ │ ├── hooks
│ │ └── use-input.js
│ │ ├── index.css
│ │ └── index.js
├── 11-food-ordering-app-advanced
│ ├── .DS_Store
│ ├── package-lock.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ └── src
│ │ ├── .DS_Store
│ │ ├── App.js
│ │ ├── assets
│ │ └── meals.jpg
│ │ ├── components
│ │ ├── .DS_Store
│ │ ├── Cart
│ │ │ ├── Cart.js
│ │ │ ├── Cart.module.css
│ │ │ ├── CartIcon.js
│ │ │ ├── CartItem.js
│ │ │ └── CartItem.module.css
│ │ ├── Layout
│ │ │ ├── Header.js
│ │ │ ├── Header.module.css
│ │ │ ├── HeaderCartButton.js
│ │ │ └── HeaderCartButton.module.css
│ │ ├── Meals
│ │ │ ├── AvailableMeals.js
│ │ │ ├── AvailableMeals.module.css
│ │ │ ├── MealItem
│ │ │ │ ├── MealItem.js
│ │ │ │ ├── MealItem.module.css
│ │ │ │ ├── MealItemForm.js
│ │ │ │ └── MealItemForm.module.css
│ │ │ ├── Meals.js
│ │ │ ├── MealsSummary.js
│ │ │ └── MealsSummary.module.css
│ │ └── UI
│ │ │ ├── Card.js
│ │ │ ├── Card.module.css
│ │ │ ├── Input.js
│ │ │ ├── Input.module.css
│ │ │ ├── Modal.js
│ │ │ └── Modal.module.css
│ │ ├── index.css
│ │ ├── index.js
│ │ └── store
│ │ ├── CartProvider.js
│ │ └── cart-context.js
└── 12-Redux
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ └── src
│ ├── App.js
│ ├── components
│ ├── Auth.js
│ ├── Auth.module.css
│ ├── Counter.js
│ ├── Counter.module.css
│ ├── Header.js
│ ├── Header.module.css
│ ├── UserProfile.js
│ └── UserProfile.module.css
│ ├── index.css
│ ├── index.js
│ └── store
│ ├── auth.js
│ ├── counter.js
│ └── index.js
├── .DS_Store
├── .gitattributes
├── .gitignore
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/.DS_Store
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 |
3 | # Ignore node_modules in all apps under 2019 and 2023 folders
4 | /2019/*/node_modules
5 | /2023/*/node_modules
6 |
7 | # Ignore npm-debug.log files globally
8 | npm-debug.log*
9 |
10 | # Ignore yarn.lock files globally
11 | yarn.lock
12 |
--------------------------------------------------------------------------------
/2019/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependency directories
2 | node_modules/
3 | dist/
4 | build/
5 |
6 | # Environment files
7 | .env
8 | .env.local
9 | .env.development.local
10 | .env.test.local
11 | .env.production.local
12 |
13 | # Log files
14 | npm-debug.log*
15 | yarn-debug.log*
16 | yarn-error.log*
17 |
18 | # Build files
19 | *.log
20 | *.zip
21 | *.gz
22 | *.tar
23 | *.tar.gz
24 | *.tgz
25 | *.map
26 |
27 | # Editor-specific files
28 | .vscode/
29 | .idea/
30 | *.sublime-*
31 |
32 | # Compiled output
33 | *.js
34 | *.jsx
35 | *.css
36 | *.min.js
37 | *.min.css
38 |
39 | # Dependency lock files
40 | yarn.lock
41 | package-lock.json
42 |
43 | # macOS specific files
44 | .DS_Store
45 |
46 | # Compiled TypeScript output
47 | *.tsbuildinfo
48 |
49 | # Testing artifacts
50 | coverage/
51 |
52 | # Cache directories
53 | .cache/
54 | dist/
55 | build/
56 |
57 | # Ignore all local .env files
58 | !.env.example
59 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section-3",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.10.2",
7 | "react-dom": "^16.10.2",
8 | "react-scripts": "3.2.0"
9 | },
10 | "scripts": {
11 | "start": "react-scripts start",
12 | "build": "react-scripts build",
13 | "test": "react-scripts test",
14 | "eject": "react-scripts eject"
15 | },
16 | "eslintConfig": {
17 | "extends": "react-app"
18 | },
19 | "browserslist": {
20 | "production": [
21 | ">0.2%",
22 | "not dead",
23 | "not op_mini all"
24 | ],
25 | "development": [
26 | "last 1 chrome version",
27 | "last 1 firefox version",
28 | "last 1 safari version"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/logo192.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/logo512.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 3 - Understanding the base Features and Syntax/section-3/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section-4",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.11.0",
7 | "react-dom": "^16.11.0",
8 | "react-scripts": "3.2.0"
9 | },
10 | "scripts": {
11 | "start": "react-scripts start",
12 | "build": "react-scripts build",
13 | "test": "react-scripts test",
14 | "eject": "react-scripts eject"
15 | },
16 | "eslintConfig": {
17 | "extends": "react-app"
18 | },
19 | "browserslist": {
20 | "production": [
21 | ">0.2%",
22 | "not dead",
23 | "not op_mini all"
24 | ],
25 | "development": [
26 | "last 1 chrome version",
27 | "last 1 firefox version",
28 | "last 1 safari version"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/logo192.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/logo512.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 4 - Working with Lists and Conditionals/section-4/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section-5",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "radium": "^0.26.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-scripts": "3.2.0"
10 | },
11 | "scripts": {
12 | "start": "react-scripts start",
13 | "build": "react-scripts build",
14 | "test": "react-scripts test",
15 | "eject": "react-scripts eject"
16 | },
17 | "eslintConfig": {
18 | "extends": "react-app"
19 | },
20 | "browserslist": {
21 | "production": [
22 | ">0.2%",
23 | "not dead",
24 | "not op_mini all"
25 | ],
26 | "development": [
27 | "last 1 chrome version",
28 | "last 1 firefox version",
29 | "last 1 safari version"
30 | ]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/logo192.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/logo512.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 5 - Styling React Components & Elements/section-5/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section-6",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "radium": "^0.26.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-scripts": "3.2.0"
10 | },
11 | "scripts": {
12 | "start": "react-scripts start",
13 | "build": "react-scripts build",
14 | "test": "react-scripts test",
15 | "eject": "react-scripts eject"
16 | },
17 | "eslintConfig": {
18 | "extends": "react-app"
19 | },
20 | "browserslist": {
21 | "production": [
22 | ">0.2%",
23 | "not dead",
24 | "not op_mini all"
25 | ],
26 | "development": [
27 | "last 1 chrome version",
28 | "last 1 firefox version",
29 | "last 1 safari version"
30 | ]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/logo192.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/logo512.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 6 - Debugging React Apps/section-6/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section-7",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "prop-types": "^15.7.2",
7 | "radium": "^0.26.0",
8 | "react": "^16.11.0",
9 | "react-dom": "^16.11.0",
10 | "react-scripts": "3.2.0"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test",
16 | "eject": "react-scripts eject"
17 | },
18 | "eslintConfig": {
19 | "extends": "react-app"
20 | },
21 | "browserslist": {
22 | "production": [
23 | ">0.2%",
24 | "not dead",
25 | "not op_mini all"
26 | ],
27 | "development": [
28 | "last 1 chrome version",
29 | "last 1 firefox version",
30 | "last 1 safari version"
31 | ]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/logo192.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/logo512.png
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Introduction Lessons 1-7/Section 7 - Diving Deeper Into Components & React Internals/section-7/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section10",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-scripts": "3.2.0"
10 | },
11 | "scripts": {
12 | "start": "react-scripts start",
13 | "build": "react-scripts build",
14 | "test": "react-scripts test",
15 | "eject": "react-scripts eject"
16 | },
17 | "eslintConfig": {
18 | "extends": "react-app"
19 | },
20 | "browserslist": {
21 | "production": [
22 | ">0.2%",
23 | "not dead",
24 | "not op_mini all"
25 | ],
26 | "development": [
27 | "last 1 chrome version",
28 | "last 1 firefox version",
29 | "last 1 safari version"
30 | ]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 10 - Burger Builder Project - Accessing the Server/section10/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing--react-suspense/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 |
12 | # misc
13 | .DS_Store
14 | .env.local
15 | .env.development.local
16 | .env.test.local
17 | .env.production.local
18 |
19 | npm-debug.log*
20 | yarn-debug.log*
21 | yarn-error.log*
22 |
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing--react-suspense/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-16.6",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.6.0",
7 | "react-dom": "^16.6.0",
8 | "react-router-dom": "^4.3.1",
9 | "react-scripts": "2.0.5"
10 | },
11 | "scripts": {
12 | "start": "react-scripts start",
13 | "build": "react-scripts build",
14 | "test": "react-scripts test",
15 | "eject": "react-scripts eject"
16 | },
17 | "eslintConfig": {
18 | "extends": "react-app"
19 | },
20 | "browserslist": [
21 | ">0.2%",
22 | "not dead",
23 | "not ie <= 11",
24 | "not op_mini all"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing--react-suspense/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing--react-suspense/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing--react-suspense/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "routing",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-router": "^5.1.2",
10 | "react-router-dom": "^5.1.2",
11 | "react-scripts": "3.2.0"
12 | },
13 | "scripts": {
14 | "start": "react-scripts start",
15 | "build": "react-scripts build",
16 | "test": "react-scripts test",
17 | "eject": "react-scripts eject"
18 | },
19 | "eslintConfig": {
20 | "extends": "react-app"
21 | },
22 | "browserslist": {
23 | "production": [
24 | ">0.2%",
25 | "not dead",
26 | "not op_mini all"
27 | ],
28 | "development": [
29 | "last 1 chrome version",
30 | "last 1 firefox version",
31 | "last 1 safari version"
32 | ]
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 11 - Multi-Page-Feeling in a Single-Page-App Routing/routing/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section12npx",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-router-dom": "^5.1.2",
10 | "react-scripts": "3.2.0"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test",
16 | "eject": "react-scripts eject"
17 | },
18 | "eslintConfig": {
19 | "extends": "react-app"
20 | },
21 | "browserslist": {
22 | "production": [
23 | ">0.2%",
24 | "not dead",
25 | "not op_mini all"
26 | ],
27 | "development": [
28 | "last 1 chrome version",
29 | "last 1 firefox version",
30 | "last 1 safari version"
31 | ]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 12 - Adding Routing to our Burger Project/section12npx/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 12 - Adding Routing to our Burger Project/section12npx/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section13",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-router-dom": "^5.1.2",
10 | "react-scripts": "3.2.0"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test",
16 | "eject": "react-scripts eject"
17 | },
18 | "eslintConfig": {
19 | "extends": "react-app"
20 | },
21 | "browserslist": {
22 | "production": [
23 | ">0.2%",
24 | "not dead",
25 | "not op_mini all"
26 | ],
27 | "development": [
28 | "last 1 chrome version",
29 | "last 1 firefox version",
30 | "last 1 safari version"
31 | ]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 13 - Forms and Form Validation/section13/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 13 - Forms and Form Validation/section13/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 13 - Forms and Form Validation/section13/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 13 - Forms and Form Validation/section13/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 13 - Forms and Form Validation/section13/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--assignment-2/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-complete-guide",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.11.0",
7 | "react-dom": "^16.11.0",
8 | "react-redux": "^7.1.3",
9 | "react-scripts": "1.0.13",
10 | "redux": "^4.0.4"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test --env=jsdom",
16 | "eject": "react-scripts eject"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--assignment-2/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 14 - Redux/redux--assignment-2/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--assignment-2/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--in-practice/how-to-use.txt:
--------------------------------------------------------------------------------
1 | How to use the downloaded files
2 |
3 | 1) Run "npm install" in the extracted folder
4 | 2) Run "npm start" to view the project
5 |
6 | Compare my code to yours to solve issues you might encounter. You may also copy the content of src/ into your own project's src/ folder to use your project setup (which might've been created with a different create-react-app version) and still use my code.
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--in-practice/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-complete-guide",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.11.0",
7 | "react-dom": "^16.11.0",
8 | "react-redux": "^7.1.3",
9 | "react-scripts": "1.0.13",
10 | "redux": "^4.0.4"
11 | },
12 | "scripts": {
13 | "start": "react-scripts start",
14 | "build": "react-scripts build",
15 | "test": "react-scripts test --env=jsdom",
16 | "eject": "react-scripts eject"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--in-practice/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 14 - Redux/redux--in-practice/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux--in-practice/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 14 - Redux/redux/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 14 - Redux/redux/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section15",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-redux": "^7.1.3",
10 | "react-router-dom": "^5.1.2",
11 | "react-scripts": "3.2.0",
12 | "redux": "^4.0.4"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": "react-app"
22 | },
23 | "browserslist": {
24 | "production": [
25 | ">0.2%",
26 | "not dead",
27 | "not op_mini all"
28 | ],
29 | "development": [
30 | "last 1 chrome version",
31 | "last 1 firefox version",
32 | "last 1 safari version"
33 | ]
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 15 - Adding Redux to our Project/section15/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 15 - Adding Redux to our Project/section15/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 15 - Adding Redux to our Project/section15/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 15 - Adding Redux to our Project/section15/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 15 - Adding Redux to our Project/section15/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section16",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-redux": "^7.1.3",
10 | "react-router-dom": "^5.1.2",
11 | "react-scripts": "3.2.0",
12 | "redux": "^4.0.4",
13 | "redux-thunk": "^2.3.0"
14 | },
15 | "scripts": {
16 | "start": "react-scripts start",
17 | "build": "react-scripts build",
18 | "test": "react-scripts test",
19 | "eject": "react-scripts eject"
20 | },
21 | "eslintConfig": {
22 | "extends": "react-app"
23 | },
24 | "browserslist": {
25 | "production": [
26 | ">0.2%",
27 | "not dead",
28 | "not op_mini all"
29 | ],
30 | "development": [
31 | "last 1 chrome version",
32 | "last 1 firefox version",
33 | "last 1 safari version"
34 | ]
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 16 - Redux Advanced/section16/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 16 - Redux Advanced/section16/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 16 - Redux Advanced/section16/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 16 - Redux Advanced/section16/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 16 - Redux Advanced/section16/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section17",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-redux": "^7.1.3",
10 | "react-router": "^5.1.2",
11 | "react-router-dom": "^5.1.2",
12 | "react-scripts": "3.2.0",
13 | "redux": "^4.0.4",
14 | "redux-thunk": "^2.3.0"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "test": "react-scripts test",
20 | "eject": "react-scripts eject"
21 | },
22 | "eslintConfig": {
23 | "extends": "react-app"
24 | },
25 | "browserslist": {
26 | "production": [
27 | ">0.2%",
28 | "not dead",
29 | "not op_mini all"
30 | ],
31 | "development": [
32 | "last 1 chrome version",
33 | "last 1 firefox version",
34 | "last 1 safari version"
35 | ]
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 17 - Redux Advanced Burger Project/section17/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 17 - Redux Advanced Burger Project/section17/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 17 - Redux Advanced Burger Project/section17/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 17 - Redux Advanced Burger Project/section17/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 17 - Redux Advanced Burger Project/section17/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section18",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-redux": "^7.1.3",
10 | "react-router-dom": "^5.1.2",
11 | "react-scripts": "3.2.0",
12 | "redux": "^4.0.4",
13 | "redux-thunk": "^2.3.0"
14 | },
15 | "scripts": {
16 | "start": "react-scripts start",
17 | "build": "react-scripts build",
18 | "test": "react-scripts test",
19 | "eject": "react-scripts eject"
20 | },
21 | "eslintConfig": {
22 | "extends": "react-app"
23 | },
24 | "browserslist": {
25 | "production": [
26 | ">0.2%",
27 | "not dead",
28 | "not op_mini all"
29 | ],
30 | "development": [
31 | "last 1 chrome version",
32 | "last 1 firefox version",
33 | "last 1 safari version"
34 | ]
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 18 - Adding Authentication to our Burger Project/section18/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 18 - Adding Authentication to our Burger Project/section18/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section19",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.11.0",
7 | "react-dom": "^16.11.0",
8 | "react-scripts": "3.2.0"
9 | },
10 | "scripts": {
11 | "start": "react-scripts start",
12 | "build": "react-scripts build",
13 | "test": "react-scripts test",
14 | "eject": "react-scripts eject"
15 | },
16 | "eslintConfig": {
17 | "extends": "react-app"
18 | },
19 | "browserslist": {
20 | "production": [
21 | ">0.2%",
22 | "not dead",
23 | "not op_mini all"
24 | ],
25 | "development": [
26 | "last 1 chrome version",
27 | "last 1 firefox version",
28 | "last 1 safari version"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 19 - Improving our Burger Project/section19/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 19 - Improving our Burger Project/section19/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 19 - Improving our Burger Project/section19/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 19 - Improving our Burger Project/section19/src/assets/images/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 19 - Improving our Burger Project/section19/src/assets/images/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section20",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "enzyme": "^3.10.0",
8 | "enzyme-adapter-react-16": "^1.15.1",
9 | "react": "^16.11.0",
10 | "react-dom": "^16.11.0",
11 | "react-redux": "^7.1.3",
12 | "react-router-dom": "^5.1.2",
13 | "react-scripts": "3.2.0",
14 | "react-test-renderer": "^16.11.0",
15 | "redux": "^4.0.4",
16 | "redux-thunk": "^2.3.0"
17 | },
18 | "scripts": {
19 | "start": "react-scripts start",
20 | "build": "react-scripts build",
21 | "test": "react-scripts test",
22 | "eject": "react-scripts eject"
23 | },
24 | "eslintConfig": {
25 | "extends": "react-app"
26 | },
27 | "browserslist": {
28 | "production": [
29 | ">0.2%",
30 | "not dead",
31 | "not op_mini all"
32 | ],
33 | "development": [
34 | "last 1 chrome version",
35 | "last 1 firefox version",
36 | "last 1 safari version"
37 | ]
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 20 - Testing/section20/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 20 - Testing/section20/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 20 - Testing/section20/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 20 - Testing/section20/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 20 - Testing/section20/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "react-my-burger-4ea57"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "build",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "**",
12 | "destination": "/index.html"
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "section21",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-redux": "^7.1.3",
10 | "react-router-dom": "^5.1.2",
11 | "react-scripts": "3.2.0",
12 | "redux": "^4.0.4",
13 | "redux-thunk": "^2.3.0"
14 | },
15 | "scripts": {
16 | "start": "react-scripts start",
17 | "build": "react-scripts build",
18 | "test": "react-scripts test",
19 | "eject": "react-scripts eject"
20 | },
21 | "eslintConfig": {
22 | "extends": "react-app"
23 | },
24 | "browserslist": {
25 | "production": [
26 | ">0.2%",
27 | "not dead",
28 | "not op_mini all"
29 | ],
30 | "development": [
31 | "last 1 chrome version",
32 | "last 1 firefox version",
33 | "last 1 safari version"
34 | ]
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 21 - Deploying the App to the Web/section21/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 21 - Deploying the App to the Web/section21/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 21 - Deploying the App to the Web/section21/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 21 - Deploying the App to the Web/section21/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 21 - Deploying the App to the Web/section21/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "the-burger-builder",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "prop-types": "^15.7.2",
7 | "react": "^16.11.0",
8 | "react-dom": "^16.11.0",
9 | "react-scripts": "3.2.0"
10 | },
11 | "scripts": {
12 | "start": "react-scripts start",
13 | "build": "react-scripts build",
14 | "test": "react-scripts test",
15 | "eject": "react-scripts eject"
16 | },
17 | "eslintConfig": {
18 | "extends": "react-app"
19 | },
20 | "browserslist": {
21 | "production": [
22 | ">0.2%",
23 | "not dead",
24 | "not op_mini all"
25 | ],
26 | "development": [
27 | "last 1 chrome version",
28 | "last 1 firefox version",
29 | "last 1 safari version"
30 | ]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 8 - A Real App - The Burger Builder (Basic Version)/the-burger-builder/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/how-to-use.txt:
--------------------------------------------------------------------------------
1 | How to use the downloaded files
2 |
3 | 1) Run "npm install" in the extracted folder
4 | 2) Run "npm start" to view the project
5 |
6 | Compare my code to yours to solve issues you might encounter. You may also copy the content of src/ into your own project's src/ folder to use your project setup (which might've been created with a different create-react-app version) and still use my code.
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-complete-guide",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "axios": "^0.19.0",
7 | "react": "^16.0.0",
8 | "react-dom": "^16.0.0",
9 | "react-scripts": "1.0.13"
10 | },
11 | "scripts": {
12 | "start": "react-scripts start",
13 | "build": "react-scripts build",
14 | "test": "react-scripts test --env=jsdom",
15 | "eject": "react-scripts eject"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/http-01/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "the-burger-builder-with-ajax",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "react": "^16.11.0",
7 | "react-dom": "^16.11.0",
8 | "react-scripts": "3.2.0"
9 | },
10 | "scripts": {
11 | "start": "react-scripts start",
12 | "build": "react-scripts build",
13 | "test": "react-scripts test",
14 | "eject": "react-scripts eject"
15 | },
16 | "eslintConfig": {
17 | "extends": "react-app"
18 | },
19 | "browserslist": {
20 | "production": [
21 | ">0.2%",
22 | "not dead",
23 | "not op_mini all"
24 | ],
25 | "development": [
26 | "last 1 chrome version",
27 | "last 1 firefox version",
28 | "last 1 safari version"
29 | ]
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/favicon.ico
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/logo192.png
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/logo512.png
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/src/assets/burger-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2019/Section 9 - Reaching out to the web (Http, Ajax)/the-burger-builder-with-ajax/src/assets/burger-logo.png
--------------------------------------------------------------------------------
/2023/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/.DS_Store
--------------------------------------------------------------------------------
/2023/01-expense-manager/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-complete-guide",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.11.6",
7 | "@testing-library/react": "^11.2.2",
8 | "@testing-library/user-event": "^12.5.0",
9 | "react": "^18.0.0",
10 | "react-dom": "^18.0.0",
11 | "react-scripts": "^5.0.1",
12 | "web-vitals": "^0.2.4"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/01-expense-manager/public/favicon.ico
--------------------------------------------------------------------------------
/2023/01-expense-manager/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/01-expense-manager/public/logo192.png
--------------------------------------------------------------------------------
/2023/01-expense-manager/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/01-expense-manager/public/logo512.png
--------------------------------------------------------------------------------
/2023/01-expense-manager/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 |
3 | import Expenses from "./components/Expenses/Expenses";
4 | import NewExpense from "./components/NewExpense/NewExpense";
5 | function App() {
6 | const DUMMY_EXPENSES = [
7 | {
8 | id: "e1",
9 | title: "Toilet Paper",
10 | amount: 94.12,
11 | date: new Date(2020, 7, 14),
12 | },
13 | { id: "e2", title: "New TV", amount: 799.49, date: new Date(2021, 2, 12) },
14 | {
15 | id: "e3",
16 | title: "Car Insurance",
17 | amount: 294.67,
18 | date: new Date(2021, 2, 28),
19 | },
20 | {
21 | id: "e4",
22 | title: "New Desk (Wooden)",
23 | amount: 450,
24 | date: new Date(2021, 5, 12),
25 | },
26 | ];
27 | const [expenses, setExpenses] = useState(DUMMY_EXPENSES);
28 |
29 | function addExpenseHandler(expense) {
30 | setExpenses((prevExpenses) => {
31 | return [expense, ...prevExpenses];
32 | });
33 | }
34 |
35 | return (
36 |
37 |
38 |
39 |
40 | );
41 | }
42 |
43 | export default App;
44 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Chart/Chart.css:
--------------------------------------------------------------------------------
1 | .chart {
2 | padding: 1rem;
3 | border-radius: 12px;
4 | background-color: #f8dfff;
5 | text-align: center;
6 | display: flex;
7 | justify-content: space-around;
8 | height: 10rem;
9 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Chart/Chart.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./Chart.css";
3 | import ChartBar from "./ChartBar";
4 |
5 | function Chart(props) {
6 | const dataPointsValues = props.dataPoints.map((dataPoint) => dataPoint.value);
7 | const totalMaximum = Math.max(...dataPointsValues);
8 |
9 | return (
10 |
11 | {props.dataPoints.map((dataPoint) => (
12 |
18 | ))}
19 |
20 | );
21 | }
22 |
23 | export default Chart;
24 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Chart/ChartBar.css:
--------------------------------------------------------------------------------
1 | .chart-bar {
2 | height: 100%;
3 | display: flex;
4 | flex-direction: column;
5 | align-items: center;
6 | }
7 |
8 | .chart-bar__inner {
9 | height: 100%;
10 | width: 100%;
11 | border: 1px solid #313131;
12 | border-radius: 12px;
13 | background-color: #c3b4f3;
14 | overflow: hidden;
15 | display: flex;
16 | flex-direction: column;
17 | justify-content: flex-end;
18 | }
19 |
20 | .chart-bar__fill {
21 | background-color: #4826b9;
22 | width: 100%;
23 | transition: all 0.3s ease-out;
24 | }
25 |
26 | .chart-bar__label {
27 | font-weight: bold;
28 | font-size: 0.5rem;
29 | text-align: center;
30 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Chart/ChartBar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./ChartBar.css";
3 |
4 | function ChartBar(props) {
5 | let barFillHeight = "0%";
6 |
7 | if (props.maxValue > 0) {
8 | barFillHeight = Math.round((props.value / props.maxValue) * 100) + "%";
9 | }
10 | return (
11 |
12 |
18 |
{props.label}
19 |
20 | );
21 | }
22 |
23 | export default ChartBar;
24 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpenseDate.css:
--------------------------------------------------------------------------------
1 | .expense-date {
2 | display: flex;
3 | flex-direction: column;
4 | width: 5.5rem;
5 | height: 5.5rem;
6 | border: 1px solid #ececec;
7 | background-color: #2a2a2a;
8 | color: white;
9 | border-radius: 12px;
10 | align-items: center;
11 | justify-content: center;
12 | }
13 |
14 | .expense-date__month {
15 | font-size: 0.75rem;
16 | font-weight: bold;
17 | }
18 |
19 | .expense-date__year {
20 | font-size: 0.75rem;
21 | }
22 |
23 | .expense-date__day {
24 | font-size: 1.5rem;
25 | font-weight: bold;
26 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpenseDate.js:
--------------------------------------------------------------------------------
1 | import "./ExpenseDate.css";
2 |
3 | function ExpenseDate(props) {
4 | const month = props.date.toLocaleString("en-US", { month: "long" });
5 | const day = props.date.toLocaleString("en-US", { day: "2-digit" });
6 | const year = props.date.getFullYear();
7 |
8 | return (
9 |
10 |
{month}
11 |
{year}
12 |
{day}
13 |
14 | );
15 | }
16 |
17 | export default ExpenseDate;
18 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpenseFilter.css:
--------------------------------------------------------------------------------
1 | .expenses-filter {
2 | color: white;
3 | padding: 0 1rem;
4 | }
5 |
6 | .expenses-filter__control {
7 | display: flex;
8 | width: 100%;
9 | align-items: center;
10 | justify-content: space-between;
11 | margin: 1rem 0;
12 | }
13 |
14 | .expenses-filter label {
15 | font-weight: bold;
16 | margin-bottom: 0.5rem;
17 | }
18 |
19 | .expenses-filter select {
20 | font: inherit;
21 | padding: 0.5rem 3rem;
22 | font-weight: bold;
23 | border-radius: 6px;
24 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpenseFilter.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import "./ExpenseFilter.css";
4 |
5 | const ExpensesFilter = (props) => {
6 | function yearChangeHandler(event) {
7 | props.onChangeFilter(event.target.value);
8 | }
9 | return (
10 |
11 |
12 |
13 |
19 |
20 |
21 | );
22 | };
23 |
24 | export default ExpensesFilter;
25 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpenseItem.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | import "./ExpenseItem.css";
4 | import ExpenseDate from "./ExpenseDate";
5 | import Card from "../UI/Card";
6 |
7 | function ExpenseItem(props) {
8 | return (
9 |
10 |
11 |
12 |
13 |
{props.title}
14 |
${props.amount}
15 |
16 |
17 |
18 | );
19 | }
20 |
21 | export default ExpenseItem;
22 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/Expenses.css:
--------------------------------------------------------------------------------
1 | .expenses {
2 | padding: 1rem;
3 | background-color: rgb(31, 31, 31);
4 | margin: 2rem auto;
5 | width: 50rem;
6 | max-width: 95%;
7 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/Expenses.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 |
3 | import Card from "../UI/Card";
4 | import ExpensesFilter from "./ExpenseFilter";
5 | import "./Expenses.css";
6 | import ExpensesList from "./ExpensesList";
7 | import ExpensesChart from "./ExpensesChart";
8 |
9 | export default function Expenses(props) {
10 | const [filteredYear, setFilteredYear] = useState("2020");
11 |
12 | const filteredExpenses = props.items.filter(
13 | (exp) => exp.date.getFullYear().toString() === filteredYear
14 | );
15 |
16 | function filterChangeHandler(selectedYear) {
17 | setFilteredYear(selectedYear);
18 | }
19 | return (
20 |
21 |
22 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpensesChart.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Chart from "../Chart/Chart";
3 |
4 | function ExpensesChart(props) {
5 | const chartDataPoints = [
6 | { label: "jan", value: 0 },
7 | { label: "feb", value: 0 },
8 | { label: "mar", value: 0 },
9 | { label: "apr", value: 0 },
10 | { label: "may", value: 0 },
11 | { label: "jun", value: 0 },
12 | { label: "jul", value: 0 },
13 | { label: "aug", value: 0 },
14 | { label: "sep", value: 0 },
15 | { label: "oct", value: 0 },
16 | { label: "nov", value: 0 },
17 | { label: "dec", value: 0 },
18 | ];
19 |
20 | for (const expense of props.expenses) {
21 | const expenseMonth = expense.date.getMonth(); // jan is 0
22 | chartDataPoints[expenseMonth].value += expense.amount;
23 | }
24 |
25 | return ;
26 | }
27 |
28 | export default ExpensesChart;
29 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpensesList.css:
--------------------------------------------------------------------------------
1 | .expenses-list {
2 | list-style: none;
3 | padding: 0;
4 | }
5 |
6 | .expenses-list__fallback {
7 | color: white;
8 | text-align: center;
9 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/Expenses/ExpensesList.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ExpenseItem from "./ExpenseItem";
3 | import "./ExpensesList.css";
4 |
5 | function ExpensesList(props) {
6 | if (props.items.length === 0) {
7 | return Found no expenses.
;
8 | }
9 | return (
10 |
11 | {props.items.map((expense) => (
12 |
18 | ))}
19 |
20 | );
21 | }
22 |
23 | export default ExpensesList;
24 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/NewExpense/ExpenseForm.css:
--------------------------------------------------------------------------------
1 | .new-expense__controls {
2 | display: flex;
3 | flex-wrap: wrap;
4 | gap: 1rem;
5 | margin-bottom: 1rem;
6 | text-align: left;
7 | }
8 |
9 | .new-expense__control label {
10 | font-weight: bold;
11 | margin-bottom: 0.5rem;
12 | display: block;
13 | }
14 |
15 | .new-expense__control input {
16 | font: inherit;
17 | padding: 0.5rem;
18 | border-radius: 6px;
19 | border: 1px solid #ccc;
20 | width: 20rem;
21 | max-width: 100%;
22 | }
23 |
24 | .new-expense__actions {
25 | text-align: right;
26 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/NewExpense/NewExpense.css:
--------------------------------------------------------------------------------
1 | .new-expense {
2 | background-color: #a892ee;
3 | padding: 1rem;
4 | margin: 2rem auto;
5 | width: 50rem;
6 | max-width: 95%;
7 | border-radius: 12px;
8 | text-align: center;
9 | box-shadow: 0 1px 8px rgba(0, 0, 0, 0.25);
10 | }
11 |
12 | .new-expense button {
13 | font: inherit;
14 | cursor: pointer;
15 | padding: 1rem 2rem;
16 | border: 1px solid #40005d;
17 | background-color: #40005d;
18 | color: white;
19 | border-radius: 12px;
20 | margin-right: 1rem;
21 | }
22 |
23 | .new-expense button:hover,
24 | .new-expense button:active {
25 | background-color: #510674;
26 | border-color: #510674;
27 | }
28 |
29 | .new-expense button.alternative {
30 | color: #220131;
31 | border-color: transparent;
32 | background-color: transparent;
33 | }
34 |
35 | .new-expense button.alternative:hover,
36 | .new-expense button.alternative:active {
37 | background-color: #ddb3f8;
38 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/NewExpense/NewExpense.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import "./NewExpense.css";
3 | import ExpenseForm from "./ExpenseForm";
4 |
5 | function NewExpense(props) {
6 | const [isEditing, setIsEditing] = useState(false);
7 | function saveExpenseDataHandler(enteredExpenseData) {
8 | const expenseData = {
9 | ...enteredExpenseData,
10 | id: Math.random().toString(),
11 | };
12 | props.onAddExpense(expenseData);
13 | setIsEditing(false);
14 | }
15 |
16 | function stopEditingHandler() {
17 | setIsEditing(false);
18 | }
19 |
20 | return (
21 |
22 | {!isEditing && (
23 | //show the button is isEditing is false
24 | )}
25 |
26 | {
27 | isEditing && (
28 |
32 | ) //show the form if isEditing if true
33 | }
34 |
35 | );
36 | }
37 |
38 | export default NewExpense;
39 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/UI/Card.css:
--------------------------------------------------------------------------------
1 | .card {
2 | border-radius: 12px;
3 | box-shadow: 0 1px 8px rgba(0, 0, 0, 0.25);
4 | }
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/components/UI/Card.js:
--------------------------------------------------------------------------------
1 | import "./Card.css";
2 |
3 | export default function Card(props) {
4 | const classes = "card " + props.className;
5 | return {props.children}
;
6 | }
7 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | html {
8 | font-family: 'Noto Sans JP', sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0;
13 | background-color: #3f3f3f;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/2023/01-expense-manager/src/index.js:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 |
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render();
8 |
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-key-concepts",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.16.5",
7 | "@testing-library/react": "^13.4.0",
8 | "@testing-library/user-event": "^13.5.0",
9 | "react": "^18.2.0",
10 | "react-dom": "^18.2.0",
11 | "react-scripts": "5.0.1",
12 | "web-vitals": "^2.1.4"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/public/favicon.ico
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/public/logo192.png
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/public/logo512.png
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/assets/images/components.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/src/assets/images/components.png
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/assets/images/events.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/src/assets/images/events.png
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/assets/images/key-concepts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/src/assets/images/key-concepts.png
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/assets/images/state.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/02-React-key-concepts/src/assets/images/state.png
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/components/Concept.js:
--------------------------------------------------------------------------------
1 | function Concept(props) {
2 | return (
3 |
4 |
5 | {props.title}
6 | {props.description}
7 |
8 | );
9 | }
10 |
11 | export default Concept;
12 |
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/components/Header.js:
--------------------------------------------------------------------------------
1 | import keyConceptsImage from "../assets/images/key-concepts.png";
2 |
3 | function Header() {
4 | return (
5 |
10 | );
11 | }
12 |
13 | export default Header;
14 |
--------------------------------------------------------------------------------
/2023/02-React-key-concepts/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 |
4 | import './index.css';
5 | import App from './App';
6 |
7 | const root = ReactDOM.createRoot(document.getElementById('root'));
8 | root.render(
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/03-styling-practice/public/favicon.ico
--------------------------------------------------------------------------------
/2023/03-styling-practice/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/03-styling-practice/public/logo192.png
--------------------------------------------------------------------------------
/2023/03-styling-practice/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/03-styling-practice/public/logo512.png
--------------------------------------------------------------------------------
/2023/03-styling-practice/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/App.css:
--------------------------------------------------------------------------------
1 | #goals {
2 | width: 35rem;
3 | max-width: 90%;
4 | margin: 3rem auto;
5 | }
6 |
7 | #goal-form {
8 | width: 30rem;
9 | max-width: 90%;
10 | margin: 3rem auto;
11 | padding: 2rem;
12 | box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
13 | border-radius: 10px;
14 | }
15 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/components/CourseGoals/CourseGoalItem/CourseGoalItem.css:
--------------------------------------------------------------------------------
1 | .goal-item {
2 | margin: 1rem 0;
3 | background: #8b005d;
4 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
5 | color: white;
6 | padding: 1rem 2rem;
7 | cursor: pointer;
8 | }
9 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/components/CourseGoals/CourseGoalItem/CourseGoalItem.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import './CourseGoalItem.css';
4 |
5 | const CourseGoalItem = props => {
6 | // const [deleteText, setDeleteText] = useState('');
7 |
8 | const deleteHandler = () => {
9 | // setDeleteText('(Deleted!)');
10 | props.onDelete(props.id);
11 | };
12 |
13 | return (
14 |
15 | {props.children}
16 |
17 | );
18 | };
19 |
20 | export default CourseGoalItem;
21 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/components/CourseGoals/CourseGoalList/CourseGoalList.css:
--------------------------------------------------------------------------------
1 | .goal-list {
2 | list-style: none;
3 | margin: 0;
4 | padding: 0;
5 | }
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/components/CourseGoals/CourseGoalList/CourseGoalList.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import CourseGoalItem from '../CourseGoalItem/CourseGoalItem';
4 | import './CourseGoalList.css';
5 |
6 | const CourseGoalList = props => {
7 | return (
8 |
9 | {props.items.map(goal => (
10 |
15 | {goal.text}
16 |
17 | ))}
18 |
19 | );
20 | };
21 |
22 | export default CourseGoalList;
23 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/components/CourseGoals/CourseInput/CourseInput.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/03-styling-practice/src/components/CourseGoals/CourseInput/CourseInput.css
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/components/UI/Button/Button.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | const Button = styled.button`
4 | width: 100%;
5 | font: inherit;
6 | padding: 0.5rem 1.5rem;
7 | border: 1px solid #8b005d;
8 | color: white;
9 | background: #8b005d;
10 | box-shadow: 0 0 4px rgba(0, 0, 0, 0.26);
11 | cursor: pointer;
12 |
13 | @media (min-width: 768px) {
14 | width: auto;
15 | }
16 |
17 | &:focus {
18 | outline: none;
19 | }
20 |
21 | &:hover,
22 | &:active {
23 | background: #ac0e77;
24 | border-color: #ac0e77;
25 | box-shadow: 0 0 8px rgba(0, 0, 0, 0.26);
26 | }
27 | `;
28 |
29 | export default Button;
30 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html {
6 | font-family: sans-serif;
7 | }
8 |
9 | body {
10 | margin: 0;
11 | }
12 |
--------------------------------------------------------------------------------
/2023/03-styling-practice/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 |
4 | import './index.css';
5 | import App from './App';
6 |
7 | const root = ReactDOM.createRoot(document.getElementById('root'));
8 | root.render();
9 |
--------------------------------------------------------------------------------
/2023/04-investment-calculator/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-investment-calculator",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.16.5",
7 | "@testing-library/react": "^13.4.0",
8 | "@testing-library/user-event": "^13.5.0",
9 | "react": "^18.2.0",
10 | "react-dom": "^18.2.0",
11 | "react-scripts": "5.0.1",
12 | "web-vitals": "^2.1.4"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/2023/04-investment-calculator/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/04-investment-calculator/public/favicon.ico
--------------------------------------------------------------------------------
/2023/04-investment-calculator/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/04-investment-calculator/public/logo192.png
--------------------------------------------------------------------------------
/2023/04-investment-calculator/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/04-investment-calculator/public/logo512.png
--------------------------------------------------------------------------------
/2023/04-investment-calculator/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/04-investment-calculator/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/04-investment-calculator/src/assets/investment-calculator-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/04-investment-calculator/src/assets/investment-calculator-logo.png
--------------------------------------------------------------------------------
/2023/04-investment-calculator/src/components/Header/Header.js:
--------------------------------------------------------------------------------
1 | import logo from "../../assets/investment-calculator-logo.png";
2 | import classes from "./Header.module.css";
3 | function Header() {
4 | return (
5 |
6 |
7 | Investment Calculator
8 |
9 | );
10 | }
11 |
12 | export default Header;
13 |
--------------------------------------------------------------------------------
/2023/04-investment-calculator/src/components/Header/Header.module.css:
--------------------------------------------------------------------------------
1 | .header {
2 | text-align: center;
3 | margin: 3rem auto;
4 | }
5 |
6 | .header img {
7 | width: 5rem;
8 | height: 5rem;
9 | object-fit: contain;
10 | background-color: transparent;
11 | }
12 |
13 | .header h1 {
14 | font-size: 1.5rem;
15 | }
--------------------------------------------------------------------------------
/2023/04-investment-calculator/src/components/ResultsTable/ResultsTable.module.css:
--------------------------------------------------------------------------------
1 | .result {
2 | max-width: 50rem;
3 | margin: 2rem auto;
4 | padding: 1rem;
5 | table-layout: fixed;
6 | border-spacing: 1rem;
7 | text-align: right;
8 | }
9 |
10 | .result thead {
11 | font-size: 0.7rem;
12 | color: #83e6c0;
13 | }
14 |
15 | .result tbody {
16 | font-family: 'Roboto Condensed', sans-serif;
17 | font-size: 0.85rem;
18 | color: #c2e9e0;
19 | }
--------------------------------------------------------------------------------
/2023/04-investment-calculator/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@400;700&family=Roboto+Condensed:wght@400;700&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | margin: 0;
9 | font-family: 'Quicksand', sans-serif;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | /* background-color: #242a28; */
13 | background: radial-gradient(#303b37, #1a1f1d);
14 | color: #e1eeeb;
15 | }
16 |
--------------------------------------------------------------------------------
/2023/04-investment-calculator/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 |
4 | import './index.css';
5 | import App from './App';
6 |
7 | const root = ReactDOM.createRoot(document.getElementById('root'));
8 | root.render(
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/05-Add-User-WithModal/public/favicon.ico
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/05-Add-User-WithModal/public/logo192.png
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/05-Add-User-WithModal/public/logo512.png
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import AddUser from "./components/Users/AddUser";
3 | import UsersList from "./components/Users/UsersList";
4 |
5 | function App() {
6 | const [usersList, setUsersList] = useState([]);
7 |
8 | function addUserHandler(userName, userAge) {
9 | setUsersList((prevUsersList) => {
10 | return [
11 | ...prevUsersList,
12 | { name: userName, age: userAge, id: Math.random().toString() },
13 | ];
14 | });
15 | }
16 | return (
17 |
21 | );
22 | }
23 |
24 | export default App;
25 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/UI/Button.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import classes from "./Button.module.css";
3 |
4 | export default function Button(props) {
5 | return (
6 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/UI/Button.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | font: inherit;
3 | border: 1px solid #4f005f;
4 | background: #4f005f;
5 | color: white;
6 | padding: 0.25rem 1rem;
7 | cursor: pointer;
8 | }
9 |
10 | .button:hover,
11 | .button:active {
12 | background: #741188;
13 | border-color: #741188;
14 | }
15 |
16 | .button:focus {
17 | outline: none;
18 | }
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/UI/Card.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import classes from "./Card.module.css";
3 |
4 | function Card(props) {
5 | // props.className
6 | return (
7 | {props.children}
8 | );
9 | }
10 |
11 | export default Card;
12 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/UI/Card.module.css:
--------------------------------------------------------------------------------
1 | .card {
2 | background: white;
3 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.22);
4 | border-radius: 10px;
5 | }
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/UI/ErrorModal.module.css:
--------------------------------------------------------------------------------
1 | .backdrop {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 100vh;
7 | z-index: 10;
8 | background: rgba(0, 0, 0, 0.75);
9 | }
10 |
11 | .modal {
12 | position: fixed;
13 | top: 30vh;
14 | left: 10%;
15 | width: 80%;
16 | z-index: 100;
17 | overflow: hidden;
18 | }
19 |
20 | .header {
21 | background: #4f005f;
22 | padding: 1rem;
23 | }
24 |
25 | .header h2 {
26 | margin: 0;
27 | color: white;
28 | }
29 |
30 | .content {
31 | padding: 1rem;
32 | }
33 |
34 | .actions {
35 | padding: 1rem;
36 | display: flex;
37 | justify-content: flex-end;
38 | }
39 |
40 | @media (min-width: 768px) {
41 | .modal {
42 | left: calc(50% - 20rem);
43 | width: 40rem;
44 | }
45 | }
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/Users/AddUser.module.css:
--------------------------------------------------------------------------------
1 | .input {
2 | margin: 2rem auto;
3 | padding: 1rem;
4 | width: 90%;
5 | max-width: 40rem;
6 | }
7 |
8 | .input label {
9 | display: block;
10 | font-weight: bold;
11 | margin-bottom: 0.5rem;
12 | }
13 |
14 | .input input {
15 | font: inherit;
16 | display: block;
17 | width: 100%;
18 | border: 1px solid #ccc;
19 | padding: 0.15rem;
20 | margin-bottom: 0.5rem;
21 | }
22 |
23 | .input input:focus {
24 | outline: none;
25 | border-color: #4f005f;
26 | }
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/Users/UsersList.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Card from "../UI/Card";
3 | import classes from "./UsersList.module.css";
4 |
5 | function UsersList(props) {
6 | return (
7 |
8 |
9 | {props.users.map((user) => {
10 | return (
11 | -
12 | {user.name} ({user.age} years old)
13 |
14 | );
15 | })}
16 |
17 |
18 | );
19 | }
20 |
21 | export default UsersList;
22 |
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/components/Users/UsersList.module.css:
--------------------------------------------------------------------------------
1 | .users {
2 | margin: 2rem auto;
3 | width: 90%;
4 | max-width: 40rem;
5 | }
6 |
7 | .users ul {
8 | list-style: none;
9 | padding: 1rem;
10 | }
11 |
12 | .users li {
13 | border: 1px solid #ccc;
14 | margin: 0.5rem 0;
15 | padding: 0.5rem;
16 | }
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html {
6 | font-family: sans-serif;
7 | background: #1f1f1f;
8 | }
9 |
10 | body {
11 | margin: 0;
12 | }
--------------------------------------------------------------------------------
/2023/05-Add-User-WithModal/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 |
4 | import './index.css';
5 | import App from './App';
6 |
7 | const root = ReactDOM.createRoot(document.getElementById('root'));
8 | root.render();
9 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependency directories
2 | node_modules/
3 | dist/
4 | build/
5 |
6 | # Environment files
7 | .env
8 | .env.local
9 | .env.development.local
10 | .env.test.local
11 | .env.production.local
12 |
13 | # Log files
14 | npm-debug.log*
15 | yarn-debug.log*
16 | yarn-error.log*
17 |
18 | # Build files
19 | *.log
20 | *.zip
21 | *.gz
22 | *.tar
23 | *.tar.gz
24 | *.tgz
25 | *.map
26 |
27 | # Editor-specific files
28 | .vscode/
29 | .idea/
30 | *.sublime-*
31 |
32 | # Compiled output
33 | *.js
34 | *.jsx
35 | *.css
36 | *.min.js
37 | *.min.css
38 |
39 | # Dependency lock files
40 | yarn.lock
41 | package-lock.json
42 |
43 | # macOS specific files
44 | .DS_Store
45 |
46 | # Compiled TypeScript output
47 | *.tsbuildinfo
48 |
49 | # Testing artifacts
50 | coverage/
51 |
52 | # Cache directories
53 | .cache/
54 | dist/
55 | build/
56 |
57 | # Ignore all local .env files
58 | !.env.example
59 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/06-dummy-login-useEffect/public/favicon.ico
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/06-dummy-login-useEffect/public/logo192.png
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/06-dummy-login-useEffect/public/logo512.png
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/Home/Home.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import Card from '../UI/Card/Card';
4 | import classes from './Home.module.css';
5 |
6 | const Home = (props) => {
7 | return (
8 |
9 | Welcome back!
10 |
11 | );
12 | };
13 |
14 | export default Home;
15 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/Home/Home.module.css:
--------------------------------------------------------------------------------
1 | .home {
2 | width: 90%;
3 | max-width: 40rem;
4 | padding: 3rem;
5 | margin: 2rem auto;
6 | text-align: center;
7 | }
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/Login/Login.module.css:
--------------------------------------------------------------------------------
1 | .login {
2 | width: 90%;
3 | max-width: 40rem;
4 | margin: 2rem auto;
5 | padding: 2rem;
6 | }
7 |
8 | .control {
9 | margin: 1rem 0;
10 | display: flex;
11 | align-items: stretch;
12 | flex-direction: column;
13 | }
14 |
15 | .control label,
16 | .control input {
17 | display: block;
18 | }
19 |
20 | .control label {
21 | font-weight: bold;
22 | flex: 1;
23 | color: #464646;
24 | margin-bottom: 0.5rem;
25 | }
26 |
27 | .control input {
28 | flex: 3;
29 | font: inherit;
30 | padding: 0.35rem 0.35rem;
31 | border-radius: 6px;
32 | border: 1px solid #ccc;
33 | }
34 |
35 | .control input:focus {
36 | outline: none;
37 | border-color: #4f005f;
38 | background: #f6dbfc;
39 | }
40 |
41 | .control.invalid input {
42 | border-color: red;
43 | background: #fbdada;
44 | }
45 |
46 | .actions {
47 | text-align: center;
48 | }
49 |
50 | @media (min-width: 768px) {
51 | .control {
52 | align-items: center;
53 | flex-direction: row;
54 | }
55 |
56 | }
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/MainHeader/MainHeader.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import Navigation from './Navigation';
4 | import classes from './MainHeader.module.css';
5 |
6 | const MainHeader = (props) => {
7 | return (
8 |
9 | A Typical Page
10 |
11 |
12 | );
13 | };
14 |
15 | export default MainHeader;
16 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/MainHeader/MainHeader.module.css:
--------------------------------------------------------------------------------
1 | .main-header {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 5rem;
7 | display: flex;
8 | justify-content: space-between;
9 | align-items: center;
10 | background: #741188;
11 | padding: 0 2rem;
12 | }
13 |
14 | .main-header h1 {
15 | color: white;
16 | }
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/MainHeader/Navigation.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import classes from './Navigation.module.css';
4 |
5 | const Navigation = (props) => {
6 | return (
7 |
26 | );
27 | };
28 |
29 | export default Navigation;
30 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/MainHeader/Navigation.module.css:
--------------------------------------------------------------------------------
1 | .nav ul {
2 | list-style: none;
3 | margin: 0;
4 | padding: 0;
5 | display: flex;
6 | align-items: center;
7 | }
8 |
9 | .nav li {
10 | margin: 0;
11 | margin-left: 2rem;
12 | }
13 |
14 | .nav a {
15 | text-decoration: none;
16 | color: white;
17 | }
18 |
19 | .nav a:hover,
20 | .nav a:active {
21 | color: #f3cafb;
22 | }
23 |
24 | .nav button {
25 | font: inherit;
26 | background: #dd0db0;
27 | border: 1px solid #dd0db0;
28 | padding: 0.5rem 1.5rem;
29 | color: white;
30 | cursor: pointer;
31 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.26);
32 | border-radius: 20px;
33 | }
34 |
35 | .nav button:focus {
36 | outline: none;
37 | }
38 |
39 | .nav button:hover,
40 | .nav button:active {
41 | color: #f3cafb;
42 | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.26);
43 | }
44 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/UI/Button/Button.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import classes from './Button.module.css';
4 |
5 | const Button = (props) => {
6 | return (
7 |
15 | );
16 | };
17 |
18 | export default Button;
19 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/UI/Button/Button.module.css:
--------------------------------------------------------------------------------
1 | .button {
2 | font: inherit;
3 | border: 1px solid #4f005f;
4 | background: #4f005f;
5 | color: white;
6 | padding: 0.75rem 3.5rem;
7 | cursor: pointer;
8 | font-size: 1.15rem;
9 | border-radius: 30px;
10 | }
11 |
12 | .button:hover,
13 | .button:active {
14 | background: #741188;
15 | border-color: #741188;
16 | }
17 |
18 | .button:focus {
19 | outline: none;
20 | }
21 |
22 | button:disabled,
23 | button:focus:disabled,
24 | button:hover:disabled,
25 | button:active:disabled {
26 | background: #ccc;
27 | border-color: #ccc;
28 | color: #666666;
29 | cursor: not-allowed;
30 | }
31 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/UI/Card/Card.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import classes from './Card.module.css';
4 |
5 | const Card = (props) => {
6 | return (
7 | {props.children}
8 | );
9 | };
10 |
11 | export default Card;
12 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/components/UI/Card/Card.module.css:
--------------------------------------------------------------------------------
1 | .card {
2 | background: white;
3 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
4 | border-radius: 10px;
5 | }
6 |
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | html {
6 | font-family: sans-serif;
7 | background: #fff;
8 | }
9 |
10 | body {
11 | margin: 0;
12 | }
13 |
14 | main {
15 | margin-top: 6rem;
16 | }
--------------------------------------------------------------------------------
/2023/06-dummy-login-useEffect/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 |
4 | import './index.css';
5 | import App from './App';
6 |
7 | const root = ReactDOM.createRoot(document.getElementById('root'));
8 | root.render();
9 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/07-food-ordering-app/public/favicon.ico
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/07-food-ordering-app/public/logo192.png
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/07-food-ordering-app/public/logo512.png
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/07-food-ordering-app/src/.DS_Store
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Header from "./components/Layout/Header";
3 | import Meals from "./components/Meals/Meals";
4 | import Cart from "./components/Cart/Cart";
5 | import CartProvider from "./store/CartProvider";
6 |
7 | function App() {
8 | const [cartIsShown, setCartIsShown] = useState(false);
9 |
10 | function showCartHandler() {
11 | setCartIsShown(true);
12 | }
13 |
14 | function hideCartHandler() {
15 | setCartIsShown(false);
16 | }
17 | return (
18 |
19 |
20 | {cartIsShown && }
21 |
22 |
23 |
24 |
25 | );
26 | }
27 |
28 | export default App;
29 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/assets/meals.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/07-food-ordering-app/src/assets/meals.jpg
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/07-food-ordering-app/src/components/.DS_Store
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Cart/Cart.module.css:
--------------------------------------------------------------------------------
1 | .cart-items {
2 | list-style: none;
3 | margin: 0;
4 | padding: 0;
5 | max-height: 20rem;
6 | overflow: auto;
7 | }
8 |
9 | .total {
10 | display: flex;
11 | justify-content: space-between;
12 | align-items: center;
13 | font-weight: bold;
14 | font-size: 1.5rem;
15 | margin: 1rem 0;
16 | }
17 |
18 | .actions {
19 | text-align: right;
20 | }
21 |
22 | .actions button {
23 | font: inherit;
24 | cursor: pointer;
25 | background-color: transparent;
26 | border: 1px solid #8a2b06;
27 | padding: 0.5rem 2rem;
28 | border-radius: 25px;
29 | margin-left: 1rem;
30 | }
31 |
32 | .actions button:hover,
33 | .actions button:active {
34 | background-color: #5a1a01;
35 | border-color: #5a1a01;
36 | color: white;
37 | }
38 |
39 | .actions .button--alt {
40 | color: #8a2b06;
41 | }
42 |
43 | .actions .button {
44 | background-color: #8a2b06;
45 | color: white;
46 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Cart/CartIcon.js:
--------------------------------------------------------------------------------
1 | const CartIcon = () => {
2 | return (
3 |
10 | );
11 | };
12 |
13 | export default CartIcon;
14 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Cart/CartItem.js:
--------------------------------------------------------------------------------
1 | import classes from './CartItem.module.css';
2 |
3 | const CartItem = (props) => {
4 | const price = `$${props.price.toFixed(2)}`;
5 |
6 | return (
7 |
8 |
9 |
{props.name}
10 |
11 | {price}
12 | x {props.amount}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | );
21 | };
22 |
23 | export default CartItem;
24 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Layout/Header.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import mealsImage from "../../assets/meals.jpg";
3 | import classes from "./Header.module.css";
4 | import HeaderCartButton from "./HeaderCartButton";
5 |
6 | export default function Header(props) {
7 | return (
8 |
9 |
10 | ReactMeals
11 |
12 |
13 |
14 |

15 |
16 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Layout/Header.module.css:
--------------------------------------------------------------------------------
1 | .header {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 5rem;
7 | background-color: #8a2b06;
8 | color: white;
9 | display: flex;
10 | justify-content: space-between;
11 | align-items: center;
12 | padding: 0 10%;
13 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
14 | z-index: 10;
15 | }
16 |
17 | .main-image {
18 | width: 100%;
19 | height: 25rem;
20 | z-index: 0;
21 | overflow: hidden;
22 | }
23 |
24 | .main-image img {
25 | width: 110%;
26 | height: 100%;
27 | object-fit: cover;
28 | transform: rotateZ(-5deg) translateY(-4rem) translateX(-1rem);
29 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/AvailableMeals.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import classes from "./AvailableMeals.module.css";
3 | import Card from "../UI/Card";
4 | import MealItem from "./MealItem/MealItem";
5 | const DUMMY_MEALS = [
6 | {
7 | id: "m1",
8 | name: "Sushi",
9 | description: "Finest fish and veggies",
10 | price: 22.99,
11 | },
12 | {
13 | id: "m2",
14 | name: "Schnitzel",
15 | description: "A german specialty!",
16 | price: 16.5,
17 | },
18 | {
19 | id: "m3",
20 | name: "Barbecue Burger",
21 | description: "American, raw, meaty",
22 | price: 12.99,
23 | },
24 | {
25 | id: "m4",
26 | name: "Green Bowl",
27 | description: "Healthy...and green...",
28 | price: 18.99,
29 | },
30 | ];
31 |
32 | export default function AvailableMeals(props) {
33 | const mealsList = DUMMY_MEALS.map((meal) => (
34 |
41 | ));
42 |
43 | return (
44 |
49 | );
50 | }
51 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/AvailableMeals.module.css:
--------------------------------------------------------------------------------
1 | .meals {
2 | max-width: 60rem;
3 | width: 90%;
4 | margin: 2rem auto;
5 | animation: meals-appear 1s ease-out forwards;
6 | }
7 |
8 | .meals ul {
9 | list-style: none;
10 | margin: 0;
11 | padding: 0;
12 | }
13 |
14 | @keyframes meals-appear {
15 | from {
16 | opacity: 0;
17 | transform: translateY(3rem);
18 | }
19 |
20 | to {
21 | opacity: 1;
22 | transform: translateY(0);
23 | }
24 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/MealItem/MealItem.js:
--------------------------------------------------------------------------------
1 | import React, { useContext } from "react";
2 | import classes from "./MealItem.module.css";
3 | import MealItemForm from "./MealItemForm";
4 | import CartContext from "../../../store/cart-context";
5 |
6 | export default function MealItem(props) {
7 | const price = `$${props.price.toFixed(2)}`;
8 |
9 | const cartCtx = useContext(CartContext);
10 |
11 | function addToCartHandler(amount) {
12 | cartCtx.addItem({
13 | id: props.id,
14 | name: props.name,
15 | amount: amount,
16 | price: props.price,
17 | });
18 | }
19 | return (
20 |
21 |
22 |
{props.name}
23 |
{props.description}
24 |
{price}
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/MealItem/MealItem.module.css:
--------------------------------------------------------------------------------
1 | .meal {
2 | display: flex;
3 | justify-content: space-between;
4 | margin: 1rem;
5 | padding-bottom: 1rem;
6 | border-bottom: 1px solid #ccc;
7 | }
8 |
9 | .meal h3 {
10 | margin: 0 0 0.25rem 0;
11 | }
12 |
13 | .description {
14 | font-style: italic;
15 | }
16 |
17 | .price {
18 | margin-top: 0.25rem;
19 | font-weight: bold;
20 | color: #ad5502;
21 | font-size: 1.25rem;
22 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/MealItem/MealItemForm.module.css:
--------------------------------------------------------------------------------
1 | .form {
2 | text-align: right;
3 | }
4 |
5 | .form button {
6 | font: inherit;
7 | cursor: pointer;
8 | background-color: #8a2b06;
9 | border: 1px solid #8a2b06;
10 | color: white;
11 | padding: 0.25rem 2rem;
12 | border-radius: 20px;
13 | font-weight: bold;
14 | }
15 |
16 | .form button:hover,
17 | .form button:active {
18 | background-color: #641e03;
19 | border-color: #641e03;
20 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/Meals.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import MealsSummary from "./MealsSummary";
3 | import AvailableMeals from "./AvailableMeals";
4 |
5 | export default function Meals(props) {
6 | return (
7 |
8 |
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/MealsSummary.js:
--------------------------------------------------------------------------------
1 | import classes from "./MealsSummary.module.css";
2 |
3 | const MealsSummary = () => {
4 | return (
5 |
6 | Delicious Food, Delivered To You
7 |
8 | Choose your favorite meal from our broad selection of available meals
9 | and enjoy a delicious lunch or dinner at home.
10 |
11 |
12 | All our meals are cooked with high-quality ingredients, just-in-time and
13 | of course by experienced chefs!
14 |
15 |
16 | );
17 | };
18 |
19 | export default MealsSummary;
20 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/Meals/MealsSummary.module.css:
--------------------------------------------------------------------------------
1 | .summary {
2 | text-align: center;
3 | max-width: 45rem;
4 | width: 90%;
5 | margin: auto;
6 | margin-top: -10rem;
7 | position: relative;
8 | background-color: #383838;
9 | color: white;
10 | border-radius: 14px;
11 | padding: 1rem;
12 | box-shadow: 0 1px 18px 10px rgba(0, 0, 0, 0.25);
13 | }
14 |
15 | .summary h2 {
16 | font-size: 2rem;
17 | margin-top: 0;
18 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/UI/Card.js:
--------------------------------------------------------------------------------
1 | import classes from "./Card.module.css";
2 |
3 | export default function Card(props) {
4 | return {props.children}
;
5 | }
6 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/UI/Card.module.css:
--------------------------------------------------------------------------------
1 | .card {
2 | padding: 1rem;
3 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
4 | border-radius: 14px;
5 | background-color: white;
6 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/UI/Input.js:
--------------------------------------------------------------------------------
1 | import React, { forwardRef } from "react";
2 | import classes from "./Input.module.css";
3 |
4 | const Input = forwardRef((props, ref) => {
5 | return (
6 |
7 |
8 |
9 |
10 | );
11 | });
12 |
13 | export default Input;
14 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/UI/Input.module.css:
--------------------------------------------------------------------------------
1 | .input {
2 | display: flex;
3 | align-items: center;
4 | margin-bottom: 0.5rem;
5 | }
6 |
7 | .input label {
8 | font-weight: bold;
9 | margin-right: 1rem;
10 | }
11 |
12 | .input input {
13 | width: 3rem;
14 | border-radius: 5px;
15 | border: 1px solid #ccc;
16 | font: inherit;
17 | padding-left: 0.5rem;
18 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/UI/Modal.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import classes from "./Modal.module.css";
3 | import ReactDOM from "react-dom";
4 |
5 | function Backdrop(props) {
6 | return ;
7 | }
8 |
9 | function ModalOverlay(props) {
10 | return (
11 |
12 |
{props.children}
13 |
14 | );
15 | }
16 |
17 | const portalElement = document.getElementById("overlays");
18 |
19 | export default function Modal(props) {
20 | return (
21 |
22 | {ReactDOM.createPortal(
23 | ,
24 | portalElement
25 | )}
26 | {ReactDOM.createPortal(
27 | {props.children},
28 | portalElement
29 | )}
30 |
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/components/UI/Modal.module.css:
--------------------------------------------------------------------------------
1 | .backdrop {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 100vh;
7 | z-index: 20;
8 | background-color: rgba(0, 0, 0, 0.75);
9 | }
10 |
11 | .modal {
12 | position: fixed;
13 | top: 20vh;
14 | left: 5%;
15 | width: 90%;
16 | background-color: white;
17 | padding: 1rem;
18 | border-radius: 14px;
19 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
20 | z-index: 30;
21 | animation: slide-down 300ms ease-out forwards;
22 | }
23 |
24 | @media (min-width: 768px) {
25 | .modal {
26 | width: 40rem;
27 | left: calc(50% - 20rem);
28 | }
29 | }
30 |
31 | @keyframes slide-down {
32 | from {
33 | opacity: 0;
34 | transform: translateY(-3rem);
35 | }
36 | to {
37 | opacity: 1;
38 | transform: translateY(0);
39 | }
40 | }
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | html {
8 | font-family: 'Noto Sans JP', sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0;
13 | background-color: #3f3f3f;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/index.js:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 |
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render();
8 |
--------------------------------------------------------------------------------
/2023/07-food-ordering-app/src/store/cart-context.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const CartContext = React.createContext({
4 | items: [],
5 | totalAmount: 0,
6 | addItem: (item) => {},
7 | removeItem: (id) => {},
8 | });
9 |
10 | export default CartContext;
11 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/08-custom-hooks/.DS_Store
--------------------------------------------------------------------------------
/2023/08-custom-hooks/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/08-custom-hooks/public/favicon.ico
--------------------------------------------------------------------------------
/2023/08-custom-hooks/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/08-custom-hooks/public/logo192.png
--------------------------------------------------------------------------------
/2023/08-custom-hooks/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/08-custom-hooks/public/logo512.png
--------------------------------------------------------------------------------
/2023/08-custom-hooks/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import BackwardCounter from './components/BackwardCounter';
3 | import ForwardCounter from './components/ForwardCounter';
4 |
5 | function App() {
6 | return (
7 |
8 |
9 |
10 |
11 | );
12 | }
13 |
14 | export default App;
15 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/components/BackwardCounter.js:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 |
3 | import Card from "./Card";
4 | import useCounter from "../hooks/use-counter";
5 |
6 | const BackwardCounter = () => {
7 | const counter = useCounter(false);
8 |
9 | return {counter};
10 | };
11 |
12 | export default BackwardCounter;
13 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/components/Card.js:
--------------------------------------------------------------------------------
1 | import classes from './Card.module.css';
2 |
3 | const Card = (props) => {
4 | return {props.children}
;
5 | };
6 |
7 | export default Card;
8 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/components/Card.module.css:
--------------------------------------------------------------------------------
1 | .card {
2 | max-width: 40rem;
3 | margin: 3rem auto;
4 | background-color: white;
5 | padding: 1rem;
6 | border-radius: 12px;
7 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
8 | text-align: center;
9 | font-size: 2.5rem;
10 | font-weight: bold;
11 | }
12 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/components/ForwardCounter.js:
--------------------------------------------------------------------------------
1 | import useCounter from "../hooks/use-counter";
2 | import Card from "./Card";
3 |
4 | const ForwardCounter = () => {
5 | const counter = useCounter();
6 |
7 | return {counter};
8 | };
9 |
10 | export default ForwardCounter;
11 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/hooks/use-counter.js:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 |
3 | const useCounter = (forwards = true) => {
4 | const [counter, setCounter] = useState(0);
5 |
6 | useEffect(() => {
7 | const interval = setInterval(() => {
8 | if (forwards) {
9 | setCounter((prevCounter) => prevCounter + 1);
10 | } else {
11 | setCounter((prevCounter) => prevCounter - 1);
12 | }
13 | }, 1000);
14 |
15 | return () => clearInterval(interval);
16 | }, [forwards]);
17 |
18 | return counter;
19 | };
20 |
21 | export default useCounter;
22 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | html {
8 | font-family: 'Noto Sans JP', sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0;
13 | background-color: #3f3f3f;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/2023/08-custom-hooks/src/index.js:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 |
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render();
8 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-complete-guide",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.11.6",
7 | "@testing-library/react": "^11.2.2",
8 | "@testing-library/user-event": "^12.5.0",
9 | "react": "^18.0.0",
10 | "react-dom": "^18.0.0",
11 | "react-scripts": "^5.0.1",
12 | "web-vitals": "^0.2.4"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/09-onwards-to-a-more-realistic-example/public/favicon.ico
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/09-onwards-to-a-more-realistic-example/public/logo192.png
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/09-onwards-to-a-more-realistic-example/public/logo512.png
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useCallback, useEffect, useState } from "react";
2 |
3 | import Tasks from "./components/Tasks/Tasks";
4 | import NewTask from "./components/NewTask/NewTask";
5 | import useHttp from "./hooks/use-http";
6 |
7 | function App() {
8 | const [tasks, setTasks] = useState([]);
9 |
10 | const transformTasks = (tasksObj) => {
11 | const loadedTasks = [];
12 | for (const taskKey in data) {
13 | loadedTasks.push({ id: taskKey, text: data[taskKey].text });
14 | }
15 | setTasks(loadedTasks);
16 | };
17 |
18 | const { isLoading, error, sendRequest: fetchTasks } = useHttp();
19 |
20 | useEffect(() => {
21 | fetchTasks(
22 | { url: "https://react-http-6b4a6.firebaseio.com/tasks.json" },
23 | transformTasks
24 | );
25 | }, [fetchTasks]);
26 |
27 | const taskAddHandler = (task) => {
28 | setTasks((prevTasks) => prevTasks.concat(task));
29 | };
30 |
31 | return (
32 |
33 |
34 |
40 |
41 | );
42 | }
43 |
44 | export default App;
45 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/NewTask/TaskForm.js:
--------------------------------------------------------------------------------
1 | import { useRef } from 'react';
2 |
3 | import classes from './TaskForm.module.css';
4 |
5 | const TaskForm = (props) => {
6 | const taskInputRef = useRef();
7 |
8 | const submitHandler = (event) => {
9 | event.preventDefault();
10 |
11 | const enteredValue = taskInputRef.current.value;
12 |
13 | if (enteredValue.trim().length > 0) {
14 | props.onEnterTask(enteredValue);
15 | }
16 | };
17 |
18 | return (
19 |
23 | );
24 | };
25 |
26 | export default TaskForm;
27 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/NewTask/TaskForm.module.css:
--------------------------------------------------------------------------------
1 | .form {
2 | display: flex;
3 | justify-content: space-between;
4 | }
5 |
6 | .form input {
7 | font:inherit;
8 | padding: 0.25rem;
9 | border: none;
10 | border-bottom: 3px solid #ccc;
11 | flex: 1;
12 | margin-right: 2rem;
13 | }
14 |
15 | .form input:focus {
16 | outline: none;
17 | border-color: #7a0144;
18 | }
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/Tasks/TaskItem.js:
--------------------------------------------------------------------------------
1 | import classes from './TaskItem.module.css';
2 |
3 | const TaskItem = (props) => {
4 | return {props.children}
5 | };
6 |
7 | export default TaskItem;
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/Tasks/TaskItem.module.css:
--------------------------------------------------------------------------------
1 | .task {
2 | border-bottom: 1px solid #ccc;
3 | padding: 1rem;
4 | font-weight: bold;
5 | font-size: 1.25rem;
6 | }
7 |
8 | .task:last-of-type {
9 | border-bottom: none;
10 | }
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/Tasks/Tasks.js:
--------------------------------------------------------------------------------
1 | import Section from "../UI/Section";
2 | import TaskItem from "./TaskItem";
3 | import classes from "./Tasks.module.css";
4 |
5 | const Tasks = (props) => {
6 | let taskList = No tasks found. Start adding some!
;
7 |
8 | if (props.items.length > 0) {
9 | taskList = (
10 |
11 | {props.items.map((task) => (
12 | {task.text}
13 | ))}
14 |
15 | );
16 | }
17 |
18 | let content = taskList;
19 |
20 | if (props.error) {
21 | content = ;
22 | }
23 |
24 | if (props.loading) {
25 | content = "Loading tasks...";
26 | }
27 |
28 | return (
29 |
32 | );
33 | };
34 |
35 | export default Tasks;
36 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/Tasks/Tasks.module.css:
--------------------------------------------------------------------------------
1 | .container {
2 | text-align: center;
3 | }
4 |
5 | .container ul {
6 | list-style: none;
7 | margin: 0;
8 | padding: 0;
9 | text-align: left;
10 | }
11 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/UI/Section.js:
--------------------------------------------------------------------------------
1 | import classes from './Section.module.css';
2 |
3 | const Section = (props) => {
4 | return ;
5 | };
6 |
7 | export default Section;
8 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/components/UI/Section.module.css:
--------------------------------------------------------------------------------
1 | .section {
2 | max-width: 40rem;
3 | margin: 2rem auto;
4 | background-color: white;
5 | padding: 1rem;
6 | border-radius: 12px;
7 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
8 | }
9 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/hooks/use-http.js:
--------------------------------------------------------------------------------
1 | import { useCallback, useState } from "react";
2 |
3 | const useHttp = () => {
4 | const [isLoading, setIsLoading] = useState(false);
5 | const [error, setError] = useState(null);
6 |
7 | const sendRequest = useCallback(async (requestConfig, applyData) => {
8 | setIsLoading(true);
9 | setError(null);
10 | try {
11 | const response = await fetch(requestConfig.url, {
12 | method: requestConfig.method ? requestConfig.method : "GET",
13 | headers: requestConfig.headers ? requestConfig.headers : {},
14 | body: requestConfig.body ? JSON.stringify(requestConfig.body) : null,
15 | });
16 |
17 | if (!response.ok) {
18 | throw new Error("Request failed!");
19 | }
20 |
21 | const data = await response.json();
22 |
23 | applyData(data);
24 | } catch (err) {
25 | setError(err.message || "Something went wrong!");
26 | }
27 | setIsLoading(false);
28 | }, []);
29 |
30 | return { isLoading, error, sendRequest };
31 | };
32 |
33 | export default useHttp;
34 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | html {
8 | font-family: 'Noto Sans JP', sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0;
13 | background-color: #3f3f3f;
14 | }
15 |
16 | button {
17 | cursor: pointer;
18 | font: inherit;
19 | background-color: #7a0144;
20 | border: 1px solid #7a0144;
21 | border-radius: 20px;
22 | padding: 0.5rem 2rem;
23 | color: white;
24 | }
25 |
26 | button:hover,
27 | button:active {
28 | background-color: #9c095a;
29 | border-color: #9c095a;
30 | }
31 |
--------------------------------------------------------------------------------
/2023/09-onwards-to-a-more-realistic-example/src/index.js:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 |
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render();
8 |
--------------------------------------------------------------------------------
/2023/10-forms/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/10-forms/.DS_Store
--------------------------------------------------------------------------------
/2023/10-forms/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/10-forms/public/favicon.ico
--------------------------------------------------------------------------------
/2023/10-forms/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/10-forms/public/logo192.png
--------------------------------------------------------------------------------
/2023/10-forms/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/10-forms/public/logo512.png
--------------------------------------------------------------------------------
/2023/10-forms/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/10-forms/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/10-forms/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/10-forms/src/.DS_Store
--------------------------------------------------------------------------------
/2023/10-forms/src/App.js:
--------------------------------------------------------------------------------
1 | import BasicForm from "./components/BasicForm";
2 |
3 | function App() {
4 | return (
5 |
6 |
7 |
8 | );
9 | }
10 |
11 | export default App;
12 |
--------------------------------------------------------------------------------
/2023/10-forms/src/index.js:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 |
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render();
8 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/.DS_Store
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/public/favicon.ico
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/public/logo192.png
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/public/logo512.png
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/src/.DS_Store
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Header from "./components/Layout/Header";
3 | import Meals from "./components/Meals/Meals";
4 | import Cart from "./components/Cart/Cart";
5 | import CartProvider from "./store/CartProvider";
6 |
7 | function App() {
8 | const [cartIsShown, setCartIsShown] = useState(false);
9 |
10 | function showCartHandler() {
11 | setCartIsShown(true);
12 | }
13 |
14 | function hideCartHandler() {
15 | setCartIsShown(false);
16 | }
17 | return (
18 |
19 |
20 | {cartIsShown && }
21 |
22 |
23 |
24 |
25 | );
26 | }
27 |
28 | export default App;
29 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/assets/meals.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/src/assets/meals.jpg
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/11-food-ordering-app-advanced/src/components/.DS_Store
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Cart/Cart.module.css:
--------------------------------------------------------------------------------
1 | .cart-items {
2 | list-style: none;
3 | margin: 0;
4 | padding: 0;
5 | max-height: 20rem;
6 | overflow: auto;
7 | }
8 |
9 | .total {
10 | display: flex;
11 | justify-content: space-between;
12 | align-items: center;
13 | font-weight: bold;
14 | font-size: 1.5rem;
15 | margin: 1rem 0;
16 | }
17 |
18 | .actions {
19 | text-align: right;
20 | }
21 |
22 | .actions button {
23 | font: inherit;
24 | cursor: pointer;
25 | background-color: transparent;
26 | border: 1px solid #8a2b06;
27 | padding: 0.5rem 2rem;
28 | border-radius: 25px;
29 | margin-left: 1rem;
30 | }
31 |
32 | .actions button:hover,
33 | .actions button:active {
34 | background-color: #5a1a01;
35 | border-color: #5a1a01;
36 | color: white;
37 | }
38 |
39 | .actions .button--alt {
40 | color: #8a2b06;
41 | }
42 |
43 | .actions .button {
44 | background-color: #8a2b06;
45 | color: white;
46 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Cart/CartIcon.js:
--------------------------------------------------------------------------------
1 | const CartIcon = () => {
2 | return (
3 |
10 | );
11 | };
12 |
13 | export default CartIcon;
14 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Cart/CartItem.js:
--------------------------------------------------------------------------------
1 | import classes from './CartItem.module.css';
2 |
3 | const CartItem = (props) => {
4 | const price = `$${props.price.toFixed(2)}`;
5 |
6 | return (
7 |
8 |
9 |
{props.name}
10 |
11 | {price}
12 | x {props.amount}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | );
21 | };
22 |
23 | export default CartItem;
24 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Layout/Header.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import mealsImage from "../../assets/meals.jpg";
3 | import classes from "./Header.module.css";
4 | import HeaderCartButton from "./HeaderCartButton";
5 |
6 | export default function Header(props) {
7 | return (
8 |
9 |
10 | ReactMeals
11 |
12 |
13 |
14 |

15 |
16 |
17 | );
18 | }
19 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Layout/Header.module.css:
--------------------------------------------------------------------------------
1 | .header {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 5rem;
7 | background-color: #8a2b06;
8 | color: white;
9 | display: flex;
10 | justify-content: space-between;
11 | align-items: center;
12 | padding: 0 10%;
13 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
14 | z-index: 10;
15 | }
16 |
17 | .main-image {
18 | width: 100%;
19 | height: 25rem;
20 | z-index: 0;
21 | overflow: hidden;
22 | }
23 |
24 | .main-image img {
25 | width: 110%;
26 | height: 100%;
27 | object-fit: cover;
28 | transform: rotateZ(-5deg) translateY(-4rem) translateX(-1rem);
29 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/AvailableMeals.module.css:
--------------------------------------------------------------------------------
1 | .meals {
2 | max-width: 60rem;
3 | width: 90%;
4 | margin: 2rem auto;
5 | animation: meals-appear 1s ease-out forwards;
6 | }
7 |
8 | .meals ul {
9 | list-style: none;
10 | margin: 0;
11 | padding: 0;
12 | }
13 |
14 | .MealsLoading {
15 | text-align: center;
16 | color: white;
17 | }
18 |
19 | .MealsError {
20 | text-align: center;
21 | color: rgb(210, 79, 79);
22 | }
23 |
24 | @keyframes meals-appear {
25 | from {
26 | opacity: 0;
27 | transform: translateY(3rem);
28 | }
29 |
30 | to {
31 | opacity: 1;
32 | transform: translateY(0);
33 | }
34 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/MealItem/MealItem.js:
--------------------------------------------------------------------------------
1 | import React, { useContext } from "react";
2 | import classes from "./MealItem.module.css";
3 | import MealItemForm from "./MealItemForm";
4 | import CartContext from "../../../store/cart-context";
5 |
6 | export default function MealItem(props) {
7 | const price = `$${props.price.toFixed(2)}`;
8 |
9 | const cartCtx = useContext(CartContext);
10 |
11 | function addToCartHandler(amount) {
12 | cartCtx.addItem({
13 | id: props.id,
14 | name: props.name,
15 | amount: amount,
16 | price: props.price,
17 | });
18 | }
19 | return (
20 |
21 |
22 |
{props.name}
23 |
{props.description}
24 |
{price}
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/MealItem/MealItem.module.css:
--------------------------------------------------------------------------------
1 | .meal {
2 | display: flex;
3 | justify-content: space-between;
4 | margin: 1rem;
5 | padding-bottom: 1rem;
6 | border-bottom: 1px solid #ccc;
7 | }
8 |
9 | .meal h3 {
10 | margin: 0 0 0.25rem 0;
11 | }
12 |
13 | .description {
14 | font-style: italic;
15 | }
16 |
17 | .price {
18 | margin-top: 0.25rem;
19 | font-weight: bold;
20 | color: #ad5502;
21 | font-size: 1.25rem;
22 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/MealItem/MealItemForm.module.css:
--------------------------------------------------------------------------------
1 | .form {
2 | text-align: right;
3 | }
4 |
5 | .form button {
6 | font: inherit;
7 | cursor: pointer;
8 | background-color: #8a2b06;
9 | border: 1px solid #8a2b06;
10 | color: white;
11 | padding: 0.25rem 2rem;
12 | border-radius: 20px;
13 | font-weight: bold;
14 | }
15 |
16 | .form button:hover,
17 | .form button:active {
18 | background-color: #641e03;
19 | border-color: #641e03;
20 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/Meals.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import MealsSummary from "./MealsSummary";
3 | import AvailableMeals from "./AvailableMeals";
4 |
5 | export default function Meals(props) {
6 | return (
7 |
8 |
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/MealsSummary.js:
--------------------------------------------------------------------------------
1 | import classes from "./MealsSummary.module.css";
2 |
3 | const MealsSummary = () => {
4 | return (
5 |
6 | Delicious Food, Delivered To You
7 |
8 | Choose your favorite meal from our broad selection of available meals
9 | and enjoy a delicious lunch or dinner at home.
10 |
11 |
12 | All our meals are cooked with high-quality ingredients, just-in-time and
13 | of course by experienced chefs!
14 |
15 |
16 | );
17 | };
18 |
19 | export default MealsSummary;
20 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/Meals/MealsSummary.module.css:
--------------------------------------------------------------------------------
1 | .summary {
2 | text-align: center;
3 | max-width: 45rem;
4 | width: 90%;
5 | margin: auto;
6 | margin-top: -10rem;
7 | position: relative;
8 | background-color: #383838;
9 | color: white;
10 | border-radius: 14px;
11 | padding: 1rem;
12 | box-shadow: 0 1px 18px 10px rgba(0, 0, 0, 0.25);
13 | }
14 |
15 | .summary h2 {
16 | font-size: 2rem;
17 | margin-top: 0;
18 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/UI/Card.js:
--------------------------------------------------------------------------------
1 | import classes from "./Card.module.css";
2 |
3 | export default function Card(props) {
4 | return {props.children}
;
5 | }
6 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/UI/Card.module.css:
--------------------------------------------------------------------------------
1 | .card {
2 | padding: 1rem;
3 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
4 | border-radius: 14px;
5 | background-color: white;
6 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/UI/Input.js:
--------------------------------------------------------------------------------
1 | import React, { forwardRef } from "react";
2 | import classes from "./Input.module.css";
3 |
4 | const Input = forwardRef((props, ref) => {
5 | return (
6 |
7 |
8 |
9 |
10 | );
11 | });
12 |
13 | export default Input;
14 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/UI/Input.module.css:
--------------------------------------------------------------------------------
1 | .input {
2 | display: flex;
3 | align-items: center;
4 | margin-bottom: 0.5rem;
5 | }
6 |
7 | .input label {
8 | font-weight: bold;
9 | margin-right: 1rem;
10 | }
11 |
12 | .input input {
13 | width: 3rem;
14 | border-radius: 5px;
15 | border: 1px solid #ccc;
16 | font: inherit;
17 | padding-left: 0.5rem;
18 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/UI/Modal.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import classes from "./Modal.module.css";
3 | import ReactDOM from "react-dom";
4 |
5 | function Backdrop(props) {
6 | return ;
7 | }
8 |
9 | function ModalOverlay(props) {
10 | return (
11 |
12 |
{props.children}
13 |
14 | );
15 | }
16 |
17 | const portalElement = document.getElementById("overlays");
18 |
19 | export default function Modal(props) {
20 | return (
21 |
22 | {ReactDOM.createPortal(
23 | ,
24 | portalElement
25 | )}
26 | {ReactDOM.createPortal(
27 | {props.children},
28 | portalElement
29 | )}
30 |
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/components/UI/Modal.module.css:
--------------------------------------------------------------------------------
1 | .backdrop {
2 | position: fixed;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 100vh;
7 | z-index: 20;
8 | background-color: rgba(0, 0, 0, 0.75);
9 | }
10 |
11 | .modal {
12 | position: fixed;
13 | top: 20vh;
14 | left: 5%;
15 | width: 90%;
16 | background-color: white;
17 | padding: 1rem;
18 | border-radius: 14px;
19 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
20 | z-index: 30;
21 | animation: slide-down 300ms ease-out forwards;
22 | }
23 |
24 | @media (min-width: 768px) {
25 | .modal {
26 | width: 40rem;
27 | left: calc(50% - 20rem);
28 | }
29 | }
30 |
31 | @keyframes slide-down {
32 | from {
33 | opacity: 0;
34 | transform: translateY(-3rem);
35 | }
36 | to {
37 | opacity: 1;
38 | transform: translateY(0);
39 | }
40 | }
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | html {
8 | font-family: 'Noto Sans JP', sans-serif;
9 | }
10 |
11 | body {
12 | margin: 0;
13 | background-color: #3f3f3f;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/index.js:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom/client';
2 |
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render();
8 |
--------------------------------------------------------------------------------
/2023/11-food-ordering-app-advanced/src/store/cart-context.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const CartContext = React.createContext({
4 | items: [],
5 | totalAmount: 0,
6 | addItem: (item) => {},
7 | removeItem: (id) => {},
8 | });
9 |
10 | export default CartContext;
11 |
--------------------------------------------------------------------------------
/2023/12-Redux/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "redux-basics",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@reduxjs/toolkit": "^1.9.5",
7 | "@testing-library/jest-dom": "^5.11.9",
8 | "@testing-library/react": "^11.2.5",
9 | "@testing-library/user-event": "^12.6.3",
10 | "react": "^18.0.0",
11 | "react-dom": "^18.0.0",
12 | "react-redux": "^8.1.2",
13 | "react-scripts": "^5.0.1",
14 | "redux": "^4.2.1",
15 | "web-vitals": "^1.1.0"
16 | },
17 | "scripts": {
18 | "start": "react-scripts start",
19 | "build": "react-scripts build",
20 | "test": "react-scripts test",
21 | "eject": "react-scripts eject"
22 | },
23 | "eslintConfig": {
24 | "extends": [
25 | "react-app",
26 | "react-app/jest"
27 | ]
28 | },
29 | "browserslist": {
30 | "production": [
31 | ">0.2%",
32 | "not dead",
33 | "not op_mini all"
34 | ],
35 | "development": [
36 | "last 1 chrome version",
37 | "last 1 firefox version",
38 | "last 1 safari version"
39 | ]
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/2023/12-Redux/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/12-Redux/public/favicon.ico
--------------------------------------------------------------------------------
/2023/12-Redux/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/12-Redux/public/logo192.png
--------------------------------------------------------------------------------
/2023/12-Redux/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yudi43/React---The-Complete-Guide--incl-Hooks--React-Router--Redux-/eac3b357f4052a431dd9b98b904080d9dc211e4d/2023/12-Redux/public/logo512.png
--------------------------------------------------------------------------------
/2023/12-Redux/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/2023/12-Redux/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/App.js:
--------------------------------------------------------------------------------
1 | import Counter from "./components/Counter";
2 | import React from "react";
3 | import Header from "./components/Header";
4 | import Auth from "./components/Auth";
5 | import UserProfile from "./components/UserProfile";
6 | import { useSelector } from "react-redux";
7 |
8 | function App() {
9 | const isAuth = useSelector((state) => state.auth.isAuthenticated);
10 | return (
11 |
12 |
13 | {!isAuth && }
14 | {isAuth && }
15 |
16 |
17 | );
18 | }
19 |
20 | export default App;
21 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/Auth.js:
--------------------------------------------------------------------------------
1 | import { useDispatch } from "react-redux";
2 | import classes from "./Auth.module.css";
3 | import { authActions } from "../store";
4 |
5 | const Auth = () => {
6 | const dispatch = useDispatch();
7 | const submitHandler = (event) => {
8 | event.preventDefault();
9 | dispatch(authActions.login());
10 | };
11 | return (
12 |
13 |
26 |
27 | );
28 | };
29 |
30 | export default Auth;
31 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/Auth.module.css:
--------------------------------------------------------------------------------
1 | .auth {
2 | margin: 5rem auto;
3 | box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2);
4 | width: 25rem;
5 | border-radius: 8px;
6 | padding: 1rem;
7 | text-align: center;
8 | background-color: #f4f0fa;
9 | }
10 |
11 | .control {
12 | margin-bottom: 0.5rem;
13 | }
14 |
15 | .control label {
16 | display: block;
17 | color: #616161;
18 | text-transform: uppercase;
19 | margin-bottom: 0.5rem;
20 | }
21 |
22 | .control input {
23 | display: block;
24 | width: 20rem;
25 | margin: auto;
26 | border-radius: 4px;
27 | padding: 0.25rem;
28 | border: 1px solid #ccc;
29 | }
30 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/Counter.module.css:
--------------------------------------------------------------------------------
1 | .counter {
2 | margin: 5rem auto;
3 | box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2);
4 | width: 40rem;
5 | border-radius: 8px;
6 | padding: 1rem;
7 | text-align: center;
8 | background-color: #f4f0fa;
9 | }
10 |
11 | .counter h1 {
12 | text-transform: uppercase;
13 | color: #575757;
14 | margin: 0;
15 | font-size: 1rem;
16 | }
17 |
18 | .value {
19 | font-size: 2rem;
20 | color: #3c0080;
21 | margin: 2rem 0;
22 | font-weight: bold;
23 | }
24 |
25 | .counter button {
26 | margin: 1rem;
27 | }
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/Header.js:
--------------------------------------------------------------------------------
1 | import { useDispatch, useSelector } from "react-redux";
2 | import classes from "./Header.module.css";
3 | import { authActions } from "../store";
4 |
5 | const Header = () => {
6 | const dispatch = useDispatch();
7 | const isAuth = useSelector((state) => state.auth.isAuthenticated);
8 | const logoutHandler = () => {
9 | dispatch(authActions.logout());
10 | };
11 | return (
12 |
13 | Redux Auth
14 | {isAuth && (
15 |
28 | )}
29 |
30 | );
31 | };
32 |
33 | export default Header;
34 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/Header.module.css:
--------------------------------------------------------------------------------
1 | .header {
2 | width: 100%;
3 | height: 5rem;
4 | display: flex;
5 | justify-content: space-between;
6 | align-items: center;
7 | background-color: #3c0080;
8 | color: white;
9 | padding: 0 10%;
10 | }
11 |
12 | .header ul {
13 | display: flex;
14 | list-style: none;
15 | margin: 0;
16 | padding: 0;
17 | align-items: center;
18 | }
19 |
20 | .header li {
21 | margin: 0 1rem;
22 | }
23 |
24 | .header a {
25 | text-decoration: none;
26 | color: white;
27 | font-size: 1.25rem;
28 | }
29 |
30 | .header a:hover,
31 | .header a:active {
32 | color: #b864da;
33 | }
34 |
35 | .header button {
36 | font-size: 1.25rem;
37 | background-color: #ffbb00;
38 | border: 1px solid #ffbb00;
39 | padding: 0.5rem 1.5rem;
40 | box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
41 | color: #2c2922;
42 | }
43 |
44 | .header button:hover,
45 | .header button:active {
46 | background-color: #ffa600;
47 | border-color: #ffa600;
48 | }
49 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/UserProfile.js:
--------------------------------------------------------------------------------
1 | import classes from './UserProfile.module.css';
2 |
3 | const UserProfile = () => {
4 | return (
5 |
6 | My User Profile
7 |
8 | );
9 | };
10 |
11 | export default UserProfile;
12 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/components/UserProfile.module.css:
--------------------------------------------------------------------------------
1 | .profile {
2 | margin: 5rem auto;
3 | box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2);
4 | width: 40rem;
5 | border-radius: 8px;
6 | padding: 1rem;
7 | text-align: center;
8 | background-color: #f4f0fa;
9 | }
10 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/index.css:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | }
4 |
5 | body {
6 | margin: 0;
7 | font-family: sans-serif;
8 | color: #252525;
9 | background-color: #252525;
10 | }
11 |
12 | button {
13 | font: inherit;
14 | cursor: pointer;
15 | background-color: #3c0080;
16 | border: 1px solid #3c0080;
17 | color: white;
18 | padding: 0.5rem 1.5rem;
19 | border-radius: 6px;
20 | }
21 |
22 | button:hover,
23 | button:active {
24 | background-color: #5b14ac;
25 | border-color: #5b14ac;
26 | }
--------------------------------------------------------------------------------
/2023/12-Redux/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import { Provider } from "react-redux";
4 | import "./index.css";
5 | import App from "./App";
6 | import store from "./store/index";
7 |
8 | const root = ReactDOM.createRoot(document.getElementById("root"));
9 | root.render(
10 |
11 |
12 |
13 | );
14 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/store/auth.js:
--------------------------------------------------------------------------------
1 | import { createSlice, configureStore } from "@reduxjs/toolkit";
2 |
3 | const initialAuth = {
4 | isAuthenticated: false,
5 | };
6 |
7 | const authSlice = createSlice({
8 | name: "auth",
9 | initialState: initialAuth,
10 | reducers: {
11 | login(state) {
12 | state.isAuthenticated = true;
13 | },
14 | logout(state) {
15 | state.isAuthenticated = false;
16 | },
17 | },
18 | });
19 |
20 | export default authSlice;
21 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/store/counter.js:
--------------------------------------------------------------------------------
1 | import { createSlice } from "@reduxjs/toolkit";
2 |
3 | const initialCounterState = { counter: 0, showCounter: true };
4 |
5 | const counterSlice = createSlice({
6 | name: "counter",
7 | initialState: initialCounterState,
8 | reducers: {
9 | increment(state) {
10 | state.counter++;
11 | },
12 | decrement(state) {
13 | state.counter--;
14 | },
15 | increase(state, action) {
16 | console.log("this is action.payload:", action.payload);
17 | state.counter += action.payload;
18 | },
19 | toggleCounter(state) {
20 | state.showCounter = !state.showCounter;
21 | },
22 | },
23 | });
24 |
25 | export default counterSlice;
26 |
--------------------------------------------------------------------------------
/2023/12-Redux/src/store/index.js:
--------------------------------------------------------------------------------
1 | import { configureStore } from "@reduxjs/toolkit";
2 | import counterSlice from "./counter";
3 | import authSlice from "./auth";
4 |
5 | const store = configureStore({
6 | reducer: { counter: counterSlice.reducer, auth: authSlice.reducer },
7 | });
8 |
9 | export const authActions = authSlice.actions;
10 | export const counterActions = counterSlice.actions;
11 | export default store;
12 |
13 | // const counterReducer = (state = initialState, action) => {
14 | // if (action.type === "increment") {
15 | // return {
16 | // counter: state.counter + 1,
17 | // showCounter: state.showCounter,
18 | // };
19 | // }
20 |
21 | // if (action.type === "increase") {
22 | // return {
23 | // counter: state.counter + action.amount,
24 | // showCounter: state.showCounter,
25 | // };
26 | // }
27 |
28 | // if (action.type === "decrement") {
29 | // return {
30 | // counter: state.counter - 1,
31 | // showCounter: state.showCounter,
32 | // };
33 | // }
34 |
35 | // if (action.type === "toggleCounter") {
36 | // return {
37 | // counter: state.counter,
38 | // showCounter: !state.showCounter,
39 | // };
40 | // }
41 |
42 | // return state;
43 | // };
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React - The Complete Guide (incl Hooks, React Router, Redux)
2 | Course files for the React Course by Maximilian Schwarzmüller
3 |
--------------------------------------------------------------------------------