├── DesafiosdeCodigo
├── DesafiosBasicos
│ ├── 01-SomandoMultiplos.js
│ ├── 02-FizzBuzz.js
│ ├── 03-ChamadaRecursiva.js
│ ├── 04-NumerosIguais.js
│ └── 05-BuscaSequencial.js
└── DesafiosIntermediarios
│ ├── 01-Fatorialdesajeitado.js
│ ├── 02-ChecagemPalindromos.js
│ ├── 03-QuadradosPerfeitos.js
│ ├── 04-MatrizParImpar.js
│ └── 05-ValidacaoParenteses.js
├── DesafiosdeProjetos
├── desafio01-calculadora
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ └── index.html
│ ├── src
│ │ ├── App.tsx
│ │ ├── components
│ │ │ ├── Button
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.tsx
│ │ │ └── Input
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.tsx
│ │ ├── global.tsx
│ │ ├── index.tsx
│ │ └── styles.tsx
│ └── tsconfig.json
├── desafio02-gitwiki
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ └── index.html
│ ├── src
│ │ ├── @types
│ │ │ └── image.d.ts
│ │ ├── assets
│ │ │ └── github.png
│ │ ├── componentes
│ │ │ ├── Button
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.tsx
│ │ │ ├── Input
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.tsx
│ │ │ └── ItemRepo
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.tsx
│ │ │ │ └── types.tsx
│ │ ├── index.tsx
│ │ ├── pages
│ │ │ ├── App.tsx
│ │ │ └── styles.tsx
│ │ ├── services
│ │ │ └── api.tsx
│ │ └── styles.tsx
│ └── tsconfig.json
├── desafio03-dioclone
│ ├── .gitignore
│ ├── README.md
│ ├── db.json
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ ├── src
│ │ ├── @types
│ │ │ └── image.d.ts
│ │ ├── App.tsx
│ │ ├── assets
│ │ │ ├── banner.png
│ │ │ └── logo-dio.png
│ │ ├── componentes
│ │ │ ├── Button
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ ├── Card
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ │ ├── Header
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ ├── Input
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ └── UserInfo
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ ├── fonts
│ │ │ ├── OpenSans-Italic-VariableFont_wdth,wght.ttf
│ │ │ └── OpenSans-VariableFont_wdth,wght.ttf
│ │ ├── index.tsx
│ │ ├── pages
│ │ │ ├── cadastro
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ │ ├── feed
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ ├── home
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ │ └── login
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ ├── services
│ │ │ └── api.ts
│ │ └── styles
│ │ │ └── global.ts
│ └── tsconfig.json
└── desafio04-loginvalidacao
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ ├── src
│ ├── components
│ │ ├── Button
│ │ │ ├── index.tsx
│ │ │ └── styles.ts
│ │ └── Input
│ │ │ ├── index.tsx
│ │ │ └── styles.ts
│ ├── global.ts
│ ├── index.tsx
│ ├── pages
│ │ └── Login
│ │ │ ├── index.tsx
│ │ │ ├── styles.ts
│ │ │ └── types.ts
│ └── react-app-env.d.ts
│ ├── tsconfig.json
│ └── yarn.lock
├── FormacaoComplementar
├── Desafiosdecodigo
│ ├── Patinhos.js
│ ├── Tuitando.js
│ └── ValidacaoNota.js
└── README.md
├── ProjetosDeAula
├── dioclone
│ ├── .gitignore
│ ├── README.md
│ ├── db.json
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ ├── src
│ │ ├── @types
│ │ │ └── image.d.ts
│ │ ├── App.tsx
│ │ ├── assets
│ │ │ ├── banner.png
│ │ │ └── logo-dio.png
│ │ ├── componentes
│ │ │ ├── Button
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ ├── Card
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ │ ├── Header
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ ├── Input
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ └── UserInfo
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ ├── index.tsx
│ │ ├── pages
│ │ │ ├── feed
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.ts
│ │ │ │ └── types.ts
│ │ │ ├── home
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ │ └── login
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.ts
│ │ ├── services
│ │ │ └── api.ts
│ │ └── styles
│ │ │ └── global.ts
│ └── tsconfig.json
└── gitfind
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ └── index.html
│ ├── src
│ ├── @types
│ │ └── image.d.ts
│ ├── assets
│ │ └── background.png
│ ├── componentes
│ │ ├── Header
│ │ │ ├── index.tsx
│ │ │ └── styles.css
│ │ └── ItemList
│ │ │ ├── index.tsx
│ │ │ └── styles.css
│ ├── index.tsx
│ ├── pages
│ │ └── Home
│ │ │ ├── index.tsx
│ │ │ └── styles.css
│ └── styles.css
│ └── tsconfig.json
└── README.md
/DesafiosdeCodigo/DesafiosBasicos/01-SomandoMultiplos.js:
--------------------------------------------------------------------------------
1 | var a = parseInt(gets());
2 | var N = parseInt(gets());
3 | let soma = 0;
4 |
5 | for(let i = 0; i <= N; i++){
6 | if(i % a === 0) {
7 | soma += i;
8 | }
9 | }
10 |
11 | print(soma);
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosBasicos/02-FizzBuzz.js:
--------------------------------------------------------------------------------
1 | let resultado = gets();
2 | print(fizzBuzz(resultado));
3 |
4 | function fizzBuzz(resultado){
5 | if (resultado % 3 == 0 && resultado % 5 == 0) {
6 | return "FizzBuzz";
7 | } else if (resultado % 3 == 0 || resultado % 5 == 0) {
8 | if (resultado % 3 == 0){
9 | return "Fizz";
10 | } else {
11 | return "Buzz";
12 | }
13 | } else {
14 | return resultado;
15 | }
16 | }
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosBasicos/03-ChamadaRecursiva.js:
--------------------------------------------------------------------------------
1 | let n = parseInt(gets());
2 |
3 | print (somatorio(n))
4 |
5 | function somatorio(n){
6 | if (n > 0)
7 | return n + somatorio(n-1)
8 | else
9 | return 0
10 | }
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosBasicos/04-NumerosIguais.js:
--------------------------------------------------------------------------------
1 | let A = gets();
2 | let B = gets();
3 |
4 | if (A == B) {
5 | print("Sao iguais!");
6 | } else {
7 | print("Nao sao iguais!");
8 | }
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosBasicos/05-BuscaSequencial.js:
--------------------------------------------------------------------------------
1 | let elementos = [64, 137, -16, 43, 67, 81, -90, 212, 10, 75];
2 |
3 | let valor = parseInt(gets());
4 |
5 | let encontrado = elementos.find(elemento => elemento === valor);
6 |
7 | if (encontrado !== undefined){
8 | let index = elementos.indexOf(encontrado)
9 | print(`Achei ${encontrado} na posicao ${index}`)
10 | } else {
11 | print(`Numero ${valor} nao encontrado!`)
12 | }
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosIntermediarios/01-Fatorialdesajeitado.js:
--------------------------------------------------------------------------------
1 | let lines = gets().split("\n");
2 | let n = parseInt(lines.shift());
3 |
4 | if (n <= 2) {
5 |
6 | print(n);
7 |
8 | }
9 |
10 | let i = n;
11 | let arr = []
12 | let total = 0
13 |
14 |
15 | while (i >= 1) {
16 | arr[i] = i
17 | i--
18 | }
19 | arr.shift()
20 | let array = arr.reverse()
21 | let a = array.length
22 |
23 |
24 | while (array.length > 0) {
25 | if (array.length >= 4) {
26 | total += parseInt((array[0] * array[1]) / (array[2])) + array[3]
27 | array.splice(0, 4)
28 | while (array.length >= 4) {
29 | total = total - parseInt((array[0] * array[1]) / array[2]) + array[3]
30 | array.splice(0, 4)
31 | }
32 | if (array.lengh == 3) {
33 | total = total - parseInt((array[0] * array[1]) / array[2])
34 | array.splice(0, 3)
35 | }
36 | if (array.length == 2) {
37 | total = total - (array[0] * array[1])
38 | array.splice(0, 2)
39 | }
40 | if (array.length == 1) {
41 | total = total - array[0]
42 | array.splice(0, 1)
43 | }
44 | }
45 | if (array.lengh == 3) {
46 | total = total + parseInt((array[0] * array[1]) / array[2])
47 | array.splice(0, 3)
48 | if (array.length == 2) {
49 | total = total - (array[0] * array[1])
50 | array.splice(0, 2)
51 | }
52 | if (array.length == 1) {
53 | total = total - array[0]
54 | array.splice(0, 1)
55 | }
56 | }
57 | if (array.length == 2) {
58 | total = total - (array[0] * array[1])
59 | array.splice(0, 2)
60 | }
61 | }
62 | console.log(parseInt(total))
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosIntermediarios/02-ChecagemPalindromos.js:
--------------------------------------------------------------------------------
1 | let resultado = gets();
2 | print(checaPalindromo(resultado));
3 |
4 | function checaPalindromo(entrada){
5 | const letras = entrada.split('').reverse().join('')
6 | if(entrada === letras){
7 | return "TRUE"
8 | } else {
9 | return "FALSE"
10 | }
11 | }
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosIntermediarios/03-QuadradosPerfeitos.js:
--------------------------------------------------------------------------------
1 | let lines = gets().split("\n");
2 | let n = parseInt(lines.shift());
3 | let res;
4 | let count;
5 | let countTotal;
6 |
7 | const dp = new Array(n + 1).fill(Infinity);
8 |
9 | for (let i = 1; i < dp.length; i++) {
10 | if (i * i <= n) {
11 | dp[i] = i * i;
12 | } else {
13 | i = dp.length - 1;
14 | }
15 | }
16 |
17 | countTotal = 1000;
18 |
19 | for (let i = dp.length - 1; i > 0 && i <= n; i--) {
20 |
21 | if ((i > 0) && (dp[i] > 0)) {
22 |
23 | res = n;
24 | count = 0;
25 |
26 | for (let j = i; j > 0; j--) {
27 |
28 | while (res > 0) {
29 | if (res >= dp[j]) {
30 | res = res - dp[j];
31 | count++;
32 | } else {
33 | j--;
34 | }
35 | }
36 | }
37 |
38 | if (countTotal > count) {
39 | countTotal = count;
40 | }
41 |
42 | }
43 | }
44 |
45 | print(countTotal);
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosIntermediarios/04-MatrizParImpar.js:
--------------------------------------------------------------------------------
1 | let arr = gets().split('');
2 | let arrVazio = [];
3 |
4 | for (let i = 0; i < arr.length; i++){
5 | if(arr[i] % 2 === 0){
6 | arrVazio.unshift(arr[i])
7 | } else {
8 | arrVazio.push(arr[i])
9 | }
10 | }
11 |
12 | print(arrVazio)
--------------------------------------------------------------------------------
/DesafiosdeCodigo/DesafiosIntermediarios/05-ValidacaoParenteses.js:
--------------------------------------------------------------------------------
1 | let valor = gets()
2 |
3 | print(isValid(valor))
4 |
5 | function isValid(s) {
6 |
7 | let letras = s.split('')
8 | const stack = ["(",")","{","}","[","]"];
9 | let b = false
10 |
11 | for(let i = 0; i < stack.length; i++){
12 | if ((letras[0] === stack[i]) && (letras[1] === stack [i + 1])){
13 | b = true;
14 | }
15 | }
16 | return b;
17 | }
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/.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 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
39 |
40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "desafio01-calculadora",
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 | "@types/jest": "^27.5.2",
10 | "@types/node": "^16.18.3",
11 | "@types/react": "^18.0.25",
12 | "@types/react-dom": "^18.0.9",
13 | "react": "^18.2.0",
14 | "react-dom": "^18.2.0",
15 | "react-scripts": "5.0.1",
16 | "styled-components": "^5.3.6",
17 | "typescript": "^4.8.4",
18 | "web-vitals": "^2.1.4"
19 | },
20 | "scripts": {
21 | "start": "react-scripts start",
22 | "build": "react-scripts build",
23 | "test": "react-scripts test",
24 | "eject": "react-scripts eject"
25 | },
26 | "eslintConfig": {
27 | "extends": [
28 | "react-app",
29 | "react-app/jest"
30 | ]
31 | },
32 | "browserslist": {
33 | "production": [
34 | ">0.2%",
35 | "not dead",
36 | "not op_mini all"
37 | ],
38 | "development": [
39 | "last 1 chrome version",
40 | "last 1 firefox version",
41 | "last 1 safari version"
42 | ]
43 | },
44 | "devDependencies": {
45 | "@types/styled-components": "^5.1.26"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 | Calculadora
15 |
16 |
17 | You need to enable JavaScript to run this app.
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/App.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import Button from "./components/Button";
3 | import Input from "./components/Input";
4 | import { Container, Content, Row } from "./styles";
5 |
6 | const App = () => {
7 | const [currentNumber, setCurrentNumber] = useState('0');
8 | const [firstNumber, setfirstNumber] = useState('0');
9 | const [operation, setOperation] = useState('');
10 |
11 | const handleAddNumber = (number: string) => {
12 | if(operation !== '' && currentNumber !== '0'){
13 | setCurrentNumber('0')
14 | }
15 | setCurrentNumber(prev => `${prev === '0' ? '' : prev}${number}`)
16 | }
17 |
18 | const handleOnClear = () => {
19 | setCurrentNumber('0')
20 | setfirstNumber('0')
21 | setOperation('')
22 | }
23 |
24 | const handleEquals = () => {
25 | if (firstNumber !== '0' && operation !== '' && currentNumber !== '0') {
26 | switch (operation) {
27 | case '+':
28 | handSumNumber();
29 | setfirstNumber('0')
30 | setOperation('')
31 | break;
32 | case '-':
33 | handMinusNumber();
34 | setfirstNumber('0')
35 | setOperation('')
36 | break;
37 | case 'x':
38 | handMultiplicarNumber();
39 | setfirstNumber('0')
40 | setOperation('')
41 | break;
42 | case '/':
43 | handDividirNumber();
44 | setfirstNumber('0')
45 | setOperation('')
46 | break;
47 | default:
48 | break;
49 | }
50 | }
51 | }
52 |
53 | const handSumNumber = () => {
54 | if (firstNumber === '0') {
55 | setfirstNumber(currentNumber)
56 | setCurrentNumber('0')
57 | setOperation('+')
58 | } else {
59 | const sum = Number(firstNumber) + Number(currentNumber)
60 | setCurrentNumber(sum.toString())
61 | setfirstNumber(sum.toString())
62 | setOperation('+')
63 | }
64 |
65 | }
66 |
67 | const handMinusNumber = () => {
68 | if (firstNumber === '0') {
69 | setfirstNumber(currentNumber)
70 | setCurrentNumber('0')
71 | setOperation('-')
72 | } else {
73 | const minus = Number(firstNumber) - Number(currentNumber)
74 | setCurrentNumber(minus.toString())
75 | setfirstNumber(currentNumber)
76 | setOperation('-')
77 | }
78 | }
79 |
80 | const handMultiplicarNumber = () => {
81 | if (firstNumber === '0') {
82 | setfirstNumber(currentNumber)
83 | setCurrentNumber('0')
84 | setOperation('x')
85 | } else {
86 | const minus = Number(firstNumber) * Number(currentNumber)
87 | setCurrentNumber(minus.toString())
88 | setfirstNumber(currentNumber)
89 | setOperation('x')
90 | }
91 | }
92 |
93 | const handDividirNumber = () => {
94 | if (firstNumber === '0') {
95 | setfirstNumber(currentNumber)
96 | setCurrentNumber('0')
97 | setOperation('/')
98 | } else {
99 | const minus = Number(firstNumber) / Number(currentNumber)
100 | setCurrentNumber(minus.toString())
101 | setfirstNumber(currentNumber)
102 | setOperation('/')
103 | }
104 | }
105 |
106 | return (
107 |
108 |
109 |
110 |
111 | handleAddNumber('%')} />
112 |
113 |
114 |
115 |
116 |
117 | handleAddNumber('7')} />
118 | handleAddNumber('8')} />
119 | handleAddNumber('9')} />
120 |
121 |
122 |
123 | handleAddNumber('4')} />
124 | handleAddNumber('5')} />
125 | handleAddNumber('6')} />
126 |
127 |
128 |
129 | handleAddNumber('1')} />
130 | handleAddNumber('2')} />
131 | handleAddNumber('3')} />
132 |
133 |
134 |
135 | handleAddNumber('+/-')} />
136 | handleAddNumber('0')} />
137 | handleAddNumber(',')} />
138 |
139 |
140 |
141 |
142 | );
143 | }
144 |
145 | export default App;
146 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/components/Button/index.tsx:
--------------------------------------------------------------------------------
1 | import { ButtonContainer } from "./styles";
2 |
3 | interface Props {
4 | label: string
5 | onClick: () => void
6 | }
7 |
8 | const Button =({label, onClick}: Props) => {
9 | return (
10 |
11 | {label}
12 |
13 | );
14 | }
15 |
16 | export default Button;
17 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/components/Button/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | export const ButtonContainer = styled.button
4 | `
5 | padding: 20px;
6 | border: 1px solid #CDCDCD;
7 | background-color: #00AAF0;
8 | min-width: 95px;
9 | color: #FFFFFF;
10 | font-size: 24px;
11 | font-weight: 700;
12 | flex: 1;
13 |
14 | &:hover {
15 | opacity: 0.6;
16 | }
17 |
18 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/components/Input/index.tsx:
--------------------------------------------------------------------------------
1 | import { InputContainer } from "./styles";
2 |
3 | interface Props {
4 | value: string
5 | }
6 |
7 | const Input = ({value}: Props) => {
8 | return (
9 |
10 |
11 |
12 | );
13 | }
14 |
15 | export default Input;
16 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/components/Input/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | export const InputContainer = styled.div
4 | `
5 | width: 100vw;
6 | height: 250px;
7 | background-color: #AAFFAA;
8 |
9 | display: flex;
10 | align-items: center;
11 | justify-content: flex-end;
12 |
13 | font-size: 24px;
14 | font-family: 'Roboto';
15 |
16 | input {
17 | width: 100%;
18 | height: 100%;
19 | background-color: #AAAAFF;
20 | border: 0;
21 | display: flex;
22 | flex-direction: column;
23 | align-items: flex-end;
24 | padding: 0 10px;
25 | font-size: 24px;
26 | font-family: 'Roboto';
27 | color: #FFFFFF
28 | }
29 | `
30 |
31 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/global.tsx:
--------------------------------------------------------------------------------
1 | import { createGlobalStyle } from 'styled-components'
2 |
3 | export default createGlobalStyle
4 | `
5 | *, body {
6 | margin: 0;
7 | padding: 0;
8 | }
9 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 | import GlobalStyles from './global'
5 |
6 | const root = ReactDOM.createRoot(
7 | document.getElementById('root') as HTMLElement
8 | );
9 | root.render(
10 |
11 |
12 |
13 |
14 | );
15 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/src/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | export const Container = styled.div
4 | `
5 | width: 100%;
6 | height: 100vh;
7 | background-color: #CACACA;
8 |
9 | display: flex;
10 | align-items: center;
11 | justify-content: center;
12 | `
13 |
14 | export const Content = styled.div
15 | `
16 | displau: flex;
17 | background-color: #FFFFFF;
18 | width: 100vw;
19 | height: 100vh;
20 | `
21 | export const Row = styled.div
22 | `
23 | display: flex;
24 | flex-direction: row;
25 | justify-content: space-between;
26 | align-items: center;
27 | `
28 |
29 | export const Column = styled.div
30 | `
31 | display: flex;
32 | flex-direction: column;
33 | justify-content: space-between;
34 | align-items: center;
35 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio01-calculadora/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/.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 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
39 |
40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "desafio2-gitwiki",
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 | "@types/jest": "^27.5.2",
10 | "@types/node": "^16.18.3",
11 | "@types/react": "^18.0.25",
12 | "@types/react-dom": "^18.0.9",
13 | "axios": "^1.1.3",
14 | "react": "^18.2.0",
15 | "react-dom": "^18.2.0",
16 | "react-scripts": "5.0.1",
17 | "styled-components": "^5.3.6",
18 | "typescript": "^4.9.3",
19 | "web-vitals": "^2.1.4"
20 | },
21 | "scripts": {
22 | "start": "react-scripts start",
23 | "build": "react-scripts build",
24 | "test": "react-scripts test",
25 | "eject": "react-scripts eject"
26 | },
27 | "eslintConfig": {
28 | "extends": [
29 | "react-app",
30 | "react-app/jest"
31 | ]
32 | },
33 | "browserslist": {
34 | "production": [
35 | ">0.2%",
36 | "not dead",
37 | "not op_mini all"
38 | ],
39 | "development": [
40 | "last 1 chrome version",
41 | "last 1 firefox version",
42 | "last 1 safari version"
43 | ]
44 | },
45 | "devDependencies": {
46 | "@types/styled-components": "^5.1.26"
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 | React App
17 |
18 |
19 | You need to enable JavaScript to run this app.
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/@types/image.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.png'
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/assets/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio02-gitwiki/src/assets/github.png
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/Button/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { ButtonContainer } from './styles';
3 |
4 | interface IButton {
5 | name: string
6 | onClick: () => void
7 | }
8 |
9 | function Button({name, onClick}: IButton) {
10 | return (
11 |
12 | {name}
13 |
14 | )
15 | }
16 |
17 | export default Button
18 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/Button/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | export const ButtonContainer = styled.button`
4 |
5 | background-color: #FAFAFA;
6 | border: 1px solid #FAFAFA;
7 | border-radius: 20px;
8 |
9 | height: 62px;
10 | width: 80%;
11 |
12 | margin: 20px;
13 |
14 | &: hover {
15 | background-color: #FAFAFA40;
16 | cursor: pointer;
17 | }
18 |
19 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/Input/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | import { InputContainer } from './styles';
4 |
5 | interface IInput{
6 | value: string
7 | onChange: (e: any) => void
8 | }
9 |
10 | function Input({value, onChange}: IInput) {
11 | return (
12 |
13 |
14 |
15 | )
16 | }
17 |
18 | export default Input
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/Input/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | export const InputContainer = styled.div`
4 |
5 | border: 1px solid #FAFAFA;
6 | border-radius: 20px;
7 |
8 | height: 62px;
9 | width: 80%;
10 |
11 | margin: 20px;
12 |
13 |
14 | input {
15 | background: transparent;
16 | border: 0;
17 | width: 90%;
18 | height: 62px;
19 | padding: 0 20px;
20 | color: #FFFFFF;
21 | font-size: 20px
22 | }
23 |
24 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/ItemRepo/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Button from '../Button';
3 |
4 | import { ItemContainer } from './styles';
5 | import { IItemRepo } from './types';
6 |
7 | function ItemRepo({repo, handleRemoveRepo}: IItemRepo) {
8 |
9 | // const handleRemove = () => {
10 | // console.log(repo.id)
11 | // handleRemoveRepo(repo.id)
12 |
13 | // }
14 |
15 | return (
16 |
17 | {repo.name}
18 | {repo.full_name}
19 | Ver repositório
20 | handleRemoveRepo(repo.id)} />
21 |
22 |
23 | )
24 | }
25 |
26 | export default ItemRepo;
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/ItemRepo/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | export const ItemContainer = styled.div`
4 | width: 80%;
5 |
6 | h3 {
7 | font-size: 32px;
8 | color: #FAFAFA;
9 | }
10 |
11 | p {
12 | font-size:16px;
13 | color: #FAFAFA60;
14 | margin-bottom:20px;
15 | }
16 |
17 | a.remover {
18 | color: #FF0000;
19 | margin-top:20px;
20 | }
21 |
22 | hr {
23 | color: #FAFAFA60;
24 | margin: 20px 0;
25 | }
26 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/componentes/ItemRepo/types.tsx:
--------------------------------------------------------------------------------
1 | export interface IRepo {
2 | id: string
3 | name: string
4 | full_name: string
5 | html_url: string
6 | }
7 |
8 | export interface IItemRepo {
9 | repo: IRepo
10 | handleRemoveRepo: (id: string) => void
11 | }
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './pages/App';
4 |
5 | import GlobalStyles from './styles';
6 |
7 | const root = ReactDOM.createRoot(
8 | document.getElementById('root') as HTMLElement
9 | );
10 | root.render(
11 |
12 |
13 |
14 |
15 | );
16 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/pages/App.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import Button from '../componentes/Button';
3 | import Input from '../componentes/Input';
4 | import ItemRepo from '../componentes/ItemRepo';
5 | import { api } from '../services/api';
6 | import gitLogo from '../assets/github.png'
7 | import { Container } from './styles';
8 | import { IRepo } from '../componentes/ItemRepo/types';
9 |
10 | function App() {
11 | const [currentRepo, setCurrentRepo] = useState('');
12 | const [repos, setRepos] = useState([]);
13 |
14 | const handleSearchRepo = async () => {
15 |
16 | const {data} = await api.get(`repos/${currentRepo}`)
17 |
18 | if(data.id){
19 |
20 | const isExist = repos.find(repo => repo.id === data.id);
21 |
22 | if(!isExist){
23 | setRepos(prev => [...prev, data]);
24 | setCurrentRepo('')
25 | return
26 | }
27 |
28 | }
29 | alert('Repositório não encontrado ou já adicionado!')
30 |
31 | }
32 |
33 | const handleRemoveRepo = (id: string) => {
34 | console.log('Removendo registro', id);
35 | setRepos(repos.filter(repo => repo.id !== id))
36 | }
37 |
38 | return (
39 |
40 |
41 | setCurrentRepo(e.target.value)} />
42 |
43 | {repos.map(repo => )}
44 |
45 | );
46 | }
47 |
48 | export default App;
49 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/pages/styles.tsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 | export const Container = styled.div`
4 | width: 100%;
5 | height: 90vh;
6 |
7 | margin: 20px 0 0 0;
8 |
9 | display:flex;
10 | flex-direction: column;
11 | align-items: center;
12 | justify-content: flex-start;
13 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/services/api.tsx:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 |
3 | export const api = axios.create({
4 | baseURL: 'https://api.github.com'
5 | })
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/src/styles.tsx:
--------------------------------------------------------------------------------
1 | import { createGlobalStyle } from 'styled-components';
2 |
3 | export default createGlobalStyle`
4 |
5 | *, body{
6 | margin: 0;
7 | padding: 0;
8 | }
9 |
10 | body {
11 | background-color: #22272e;
12 | color: #FFFFFF;
13 | }
14 |
15 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio02-gitwiki/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx"
22 | },
23 | "include": [
24 | "src"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/.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 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
39 |
40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/db.json:
--------------------------------------------------------------------------------
1 | {
2 | "users": [
3 | { "id": 1, "name": "Pablo", "email": "pablo@email.com", "senha":"123456" },
4 | { "id": 2, "name": "José", "email": "jose@email.com", "senha":"123456" },
5 | { "id": 3, "name": "Thamyres", "email": "thamy@email.com", "senha":"123456" }
6 | ]
7 | }
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dioclone",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@hookform/resolvers": "^2.9.10",
7 | "@testing-library/jest-dom": "^5.16.5",
8 | "@testing-library/react": "^13.4.0",
9 | "@testing-library/user-event": "^13.5.0",
10 | "@types/jest": "^27.5.2",
11 | "@types/node": "^16.18.8",
12 | "@types/react": "^18.0.26",
13 | "@types/react-dom": "^18.0.9",
14 | "axios": "^1.2.1",
15 | "json-server": "^0.17.1",
16 | "react": "^18.2.0",
17 | "react-dom": "^18.2.0",
18 | "react-hook-form": "^7.40.0",
19 | "react-icons": "^4.7.1",
20 | "react-router-dom": "^6.4.5",
21 | "react-scripts": "5.0.1",
22 | "styled-components": "^5.3.6",
23 | "typescript": "^4.9.4",
24 | "web-vitals": "^2.1.4",
25 | "yup": "^0.32.11"
26 | },
27 | "scripts": {
28 | "start": "react-scripts start",
29 | "build": "react-scripts build",
30 | "test": "react-scripts test",
31 | "eject": "react-scripts eject",
32 | "api": "json-server --watch db.json -p 8001"
33 | },
34 | "eslintConfig": {
35 | "extends": [
36 | "react-app",
37 | "react-app/jest"
38 | ]
39 | },
40 | "browserslist": {
41 | "production": [
42 | ">0.2%",
43 | "not dead",
44 | "not op_mini all"
45 | ],
46 | "development": [
47 | "last 1 chrome version",
48 | "last 1 firefox version",
49 | "last 1 safari version"
50 | ]
51 | },
52 | "devDependencies": {
53 | "@types/styled-components": "^5.1.26"
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/public/favicon.ico
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 | You need to enable JavaScript to run this app.
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/public/logo192.png
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/public/logo512.png
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/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 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/@types/image.d.ts:
--------------------------------------------------------------------------------
1 | declare module "*.png";
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/App.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | BrowserRouter as Router,
3 | Routes,
4 | Route,
5 | } from "react-router-dom";
6 |
7 | import { Cadastro } from "./pages/cadastro";
8 | import { Feed } from "./pages/feed";
9 | import { Home } from './pages/home'
10 | import { Login } from "./pages/login";
11 |
12 | import { GlobalStyle } from "./styles/global";
13 |
14 | function App() {
15 | return (
16 |
17 |
18 |
19 | } />
20 | } />
21 | } />
22 | } />
23 |
24 |
25 | );
26 | }
27 |
28 | export default App;
29 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/assets/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/src/assets/banner.png
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/assets/logo-dio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/src/assets/logo-dio.png
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Button/index.tsx:
--------------------------------------------------------------------------------
1 | import { ButtonContainer } from './styles';
2 | import { IButton } from './types';
3 |
4 | const Button = ({title,variant = "primary", onClick}: IButton) => {
5 | return (
6 |
8 | {title}
9 |
10 | )
11 | }
12 |
13 | export { Button }
14 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Button/styles.ts:
--------------------------------------------------------------------------------
1 | import styled, {css} from 'styled-components';
2 | import { IVariante } from './types';
3 |
4 | export const ButtonContainer = styled.button`
5 | background: #565656;
6 | border-radius: 22px;
7 | position: relative;
8 |
9 | color: #FFFFFF;
10 | padding: 2px 12px;
11 | min-width: 120px;
12 | width: 100%;
13 |
14 | ${({variant}: IVariante) => variant !== "primary" && css`
15 | min-width: 167px;
16 | height: 33px;
17 |
18 | background: #E4105D;
19 |
20 | &:hover {
21 | opacity: 0.6;
22 | cursor: pointer;
23 | }
24 |
25 | &::after {
26 | content: '';
27 | position: absolute;
28 | border: 1px solid #E4105D;
29 | top: -5px;
30 | left: -6px;
31 | width: calc(100% + 10px);
32 | height: calc(100% + 10px);
33 | border-radius: 22px;
34 | }
35 | `}
36 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Button/types.ts:
--------------------------------------------------------------------------------
1 | export interface IButton {
2 | title: string
3 | variant?: string
4 | onClick?: () => void
5 | type?: string
6 | }
7 |
8 | export interface IVariante {
9 | variant: string
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Card/index.tsx:
--------------------------------------------------------------------------------
1 | import {FiThumbsUp} from 'react-icons/fi'
2 | import {
3 | CardContainer,
4 | ImageBackground,
5 | Content,
6 | UserInfo,
7 | UserPicture,
8 | PostInfo,
9 | HasInfo,
10 | } from './styles'
11 |
12 | const Card = () => {
13 | return (
14 |
15 |
16 |
17 |
18 |
19 |
20 |
Thamyres Magalhães
21 |
Há 8 minutos
22 |
23 |
24 |
25 | Projeto para curso de HTML e CSS
26 | Projeto feito no curso de html e css no bootcamp da dio do Global avanade...Saiba Mais
27 |
28 |
29 | #HTML #CSS #Javascript
30 |
31 | 10
32 |
33 |
34 |
35 |
36 | )
37 | }
38 |
39 | export { Card }
40 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Card/styles.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const CardContainer = styled.div`
4 | width: 100%;
5 | background-color: #3B4651;
6 | position: relative;
7 | margin-bottom: 24px;
8 | `
9 |
10 | export const ImageBackground = styled.img`
11 | width: 100%;
12 | height: 180px;
13 | `
14 |
15 | export const Content = styled.div`
16 | width: 100%;
17 | display: flex;
18 | flex-direction: column;
19 | padding: 12px;
20 | `
21 |
22 | export const UserInfo = styled.div`
23 | display: flex;
24 | flex-direction: row;
25 | margin-bottom: 12px;
26 |
27 | div {
28 | margin-left: 12px;
29 | }
30 |
31 | h4{
32 | font-family: 'Open Sans';
33 | font-style: normal;
34 | font-weight: 700;
35 | font-size: 18px;
36 | line-height: 25px;
37 | color: #FFFFFF;
38 | }
39 |
40 | p {
41 | font-family: 'Open Sans';
42 | font-style: normal;
43 | font-weight: 400;
44 | font-size: 12px;
45 | line-height: 16px;
46 | color: #FFFFFF;
47 | }
48 | `
49 |
50 | export const UserPicture = styled.img`
51 | width: 32px;
52 | height: 32px;
53 | border-radius: 22px;
54 | border: 3px solid #FFFFFF;
55 | `
56 |
57 | export const PostInfo = styled.div`
58 |
59 | margin-bottom: 12px;
60 |
61 | h4{
62 | font-family: 'Open Sans';
63 | font-style: normal;
64 | font-weight: 700;
65 | font-size: 18px;
66 | line-height: 25px;
67 | color: #FFFFFF;
68 | }
69 |
70 | p {
71 | font-family: 'Open Sans';
72 | font-style: normal;
73 | font-weight: 400;
74 | font-size: 12px;
75 | line-height: 16px;
76 | }
77 | `
78 |
79 | export const HasInfo = styled.div`
80 | margin-top: 12px;
81 |
82 | h4{
83 | font-family: 'Open Sans';
84 | font-style: normal;
85 | font-weight: 700;
86 | font-size: 12px;
87 | line-height: 16px;
88 | color: #FFFFFF80
89 | }
90 |
91 | p {
92 | font-family: 'Open Sans';
93 | font-style: normal;
94 | font-weight: 700;
95 | font-size: 16px;
96 | line-height: 22px;
97 | }
98 | `
99 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Header/index.tsx:
--------------------------------------------------------------------------------
1 |
2 | import logo from '../../assets/logo-dio.png';
3 |
4 | import { Button } from '../Button';
5 |
6 | import { Container, Wrapper, BuscarInputContainer, Input, Row, Menu, MenuRight, UserPicture} from './styles';
7 | import { IAuth } from './types';
8 |
9 | const Header = ({autenticado}: IAuth) => {
10 | return (
11 |
12 |
13 |
14 |
15 | {autenticado ? (
16 | <>
17 |
18 |
19 |
20 | Live Code
21 | Global
22 | >
23 | ) : null}
24 |
25 |
26 | {autenticado ? (
27 |
28 | ) : (
29 | <>
30 | Home
31 |
32 |
33 | >)}
34 |
35 |
36 |
37 | )
38 | }
39 |
40 | export { Header }
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Header/styles.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const Container = styled.div`
4 |
5 | width: 100%;
6 | max-width: 80%;
7 | height: 47px;
8 |
9 | display: flex;
10 | justify-content: space-between;
11 | align-items: center;
12 | margin: 0 auto;
13 | `
14 |
15 | export const Row = styled.div`
16 | display:flex;
17 | flex-direction: row;
18 | align-items: center;
19 | `;
20 |
21 | export const Wrapper = styled.div`
22 | background-color: #151515;
23 | width: 100%;
24 | height: 47px;
25 | display:flex
26 | justify-content: center;
27 | align-items: center
28 | `
29 |
30 | export const BuscarInputContainer = styled.div`
31 | width: 275px;
32 | height: 30px;
33 | background: #2D2D37;
34 | border-radius: 8px;
35 | padding: 2px 5px;
36 | margin: 0 12px;
37 |
38 | display:flex;
39 | `
40 |
41 | export const Menu = styled.a`
42 | font-family: 'Open Sans';
43 | font-style: normal;
44 | font-weight: 700;
45 | font-size: 18px;
46 | line-height: 25px;
47 | color: #FFFFFF;
48 | margin-right: 12px;
49 | `
50 |
51 | export const MenuRight = styled.a`
52 | font-family: 'Open Sans';
53 | font-style: normal;
54 | font-size: 12px;
55 | line-height: 25px;
56 | color: #FFFFFF;
57 | margin-right: 12px;
58 | text-decoration: none;
59 | `
60 |
61 | export const UserPicture = styled.img`
62 | width: 32px;
63 | height: 32px;
64 | border-radius: 22px;
65 | border: 3px solid #FFFFFF;
66 | `
67 |
68 | export const Input = styled.input`
69 | background: transparent;
70 | flex: 1;
71 | border: 0;
72 | color: #FFFFFF;
73 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Header/types.ts:
--------------------------------------------------------------------------------
1 | export interface IAuth {
2 | autenticado: boolean
3 | }
4 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Input/index.tsx:
--------------------------------------------------------------------------------
1 | import { Controller } from 'react-hook-form';
2 | import {InputContainer, InputText, IconContainer, ErrorText } from './styles';
3 | import { IInput } from './types';
4 |
5 | const Input = ({leftIcon, name, control, errorMessage, ...rest}: IInput) => {
6 |
7 | return (
8 | <>
9 |
10 | {leftIcon ? ({leftIcon} ) : null}
11 | }
16 | />
17 |
18 | {errorMessage ? {errorMessage} : null}
19 | >
20 | )
21 | }
22 |
23 | export { Input };
24 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Input/styles.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const InputContainer = styled.div`
4 | width: 100%;
5 | max-width: 275px;
6 | height: 30px;
7 | border-bottom: 1px solid #3B3450;
8 |
9 | display:flex;
10 | align-items: center;
11 | margin-bottom: 20px;
12 | `
13 |
14 | export const IconContainer = styled.div`
15 | margin-right: 10px;
16 | `
17 |
18 | export const InputText = styled.input`
19 | background-color: transparent;
20 | color: #FFFFFF;
21 | flex:1;
22 | border: 0;
23 | height: 30px;
24 |
25 | `
26 |
27 | export const ErrorText = styled.p`
28 | color: #FF0000;
29 | font-size: 12px;
30 | margin: 5px 0;
31 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/Input/types.ts:
--------------------------------------------------------------------------------
1 | import { ReactElement } from "react"
2 | import { Control } from "react-hook-form"
3 |
4 | export interface IInput {
5 | leftIcon?: ReactElement
6 | name: string
7 | placeholder: string
8 | type?: string
9 | control: Control
10 | errorMessage: any | undefined
11 | }
12 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/UserInfo/index.tsx:
--------------------------------------------------------------------------------
1 | import { Container, NameText, Progress, UserPicture} from './styles';
2 | import { IUser } from './types';
3 |
4 | const UserInfo = ({nome,image, percentual}: IUser) => {
5 | return (
6 |
7 |
8 |
12 |
13 | )
14 | }
15 |
16 | export { UserInfo }
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/UserInfo/styles.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import { IPercentual } from './types';
3 |
4 | export const Container = styled.div`
5 | display:flex;
6 | flex-direction: row;
7 | margin-bottom: 24px;
8 | `
9 |
10 | export const UserPicture = styled.img`
11 | width: 32px;
12 | height: 32px;
13 | border-radius: 22px;
14 | border: 3px solid #FFFFFF;
15 | margin-right: 12px;
16 | `
17 |
18 | export const NameText = styled.div`
19 | font-family: 'Open Sans';
20 | font-style: normal;
21 | font-weight: 700;
22 | font-size: 18px;
23 | line-height: 25px;
24 | color: #FFFFFF;
25 | `
26 |
27 | export const Progress = styled.div`
28 | width: 180px;
29 | height: 6px;
30 | background-color: #FFFFFF;
31 | border-radius: 3px;
32 | position: relative;
33 |
34 | &::after {
35 | content: '';
36 | position: absolute;
37 | top: 0;
38 | left: 0;
39 | width: ${({percentual}: IPercentual) => percentual}%;
40 | height: 6px;
41 | border-radius: 3px;
42 | background-color: #23DD7A;
43 | }
44 | `
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/componentes/UserInfo/types.ts:
--------------------------------------------------------------------------------
1 | export interface IUser {
2 | nome: string
3 | image: string
4 | percentual: number
5 | }
6 |
7 | export interface IPercentual {
8 | percentual: number
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/fonts/OpenSans-Italic-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/src/fonts/OpenSans-Italic-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/fonts/OpenSans-VariableFont_wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Thamyresarm/dio-bootcamp-Inter-Javascript/272998848594b6cf1b7065ac86ed31edd79af423/DesafiosdeProjetos/desafio03-dioclone/src/fonts/OpenSans-VariableFont_wdth,wght.ttf
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const root = ReactDOM.createRoot(
6 | document.getElementById('root') as HTMLElement
7 | );
8 | root.render(
9 |
10 |
11 |
12 | );
13 |
14 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/pages/cadastro/index.tsx:
--------------------------------------------------------------------------------
1 | import { MdEmail, MdLock, MdPerson } from 'react-icons/md';
2 | import { useNavigate } from 'react-router-dom';
3 | import { Button } from '../../componentes/Button';
4 | import { Header } from '../../componentes/Header';
5 | import { Input } from '../../componentes/Input';
6 | import { FieldValues, useForm } from 'react-hook-form';
7 | import { yupResolver } from '@hookform/resolvers/yup';
8 | import * as yup from 'yup';
9 |
10 | import { api } from "../../services/api"
11 |
12 | import { Container, Title, Column, TitleLogin, SubtitleLogin, Row, Wrapper, LoginText, TermosText } from './styles';
13 |
14 | const schema = yup.object({
15 | nome: yup.string().required('Campo Obrigatório').min(3, 'No minimo 3 caracteres'),
16 | email: yup.string().email('email não é valido').required('Campo Obrigatório'),
17 | senha: yup.string().min(3, 'No minimo 3 caracteres').required('Campo Obrigatório'),
18 | }).required();
19 |
20 | const Cadastro = () => {
21 |
22 | const navigate = useNavigate();
23 |
24 | const { control, handleSubmit, formState: { errors } } = useForm({
25 | resolver: yupResolver(schema),
26 | mode: 'onChange'
27 | });
28 |
29 | const onSubmit = async(formData: FieldValues) => {
30 | try {
31 | const { data } = await api.get(`users?email=${formData.email}&senha=${formData.senha}`)
32 | if(data.length === 1){
33 | navigate('/feed')
34 | } else {
35 | alert('Email ou senha inválido')
36 | }
37 | console.log('retorno api', data)
38 | } catch (error) {
39 | alert('Ocorreu um erro ' + error)
40 |
41 | }
42 | }
43 |
44 | return (<>
45 |
46 |
47 |
48 | A plataforma para você aprender com experts, dominar as principais tecnologias
49 | e entrar mais rápido nas empresas mais desejadas.
50 |
51 |
52 |
53 | Comece agora grátis
54 | Crie sua conta e make the change._
55 |
64 |
65 | Ao clicar em "criar minha conta grátis, declaro que aceito as Políticas de Privacidade e os Termos de Uso da DIO.
66 | Ja tenho conta. Fazer login
67 |
68 |
69 |
70 |
71 | >)
72 | }
73 |
74 | export { Cadastro }
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/pages/cadastro/styles.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const Container = styled.main`
4 | width: 100%;
5 | max-width: 80%;
6 | margin: 0 auto;
7 | margin-top: 120px;
8 |
9 | display: flex;
10 | flex-direction: row;
11 | justify-content: space-between;
12 | align-items: center;
13 | `
14 |
15 | export const Wrapper = styled.div`
16 | max-width: 300px;
17 | `
18 |
19 | export const Column = styled.div`
20 | flex: 1;
21 | `
22 |
23 | export const Row = styled.div`
24 | display: flex;
25 | flex-direction: column;
26 | justify-content: space-between;
27 | margin-top: 20px;
28 | `
29 |
30 | export const Title = styled.h2`
31 | font-family: 'Open Sans';
32 | font-style: normal;
33 | font-weight: 700;
34 | font-size: 32px;
35 | max-width: 90%;
36 | margin-bottom: 20px;
37 | line-height: 44px;
38 |
39 | color: #FFFFFF;
40 | `
41 |
42 | export const TitleLogin = styled.p`
43 | font-family: 'Open Sans';
44 | font-style: normal;
45 | font-weight: 700;
46 | font-size: 32px;
47 | line-height: 44px;
48 | margin-bottom: 8px;
49 | `
50 |
51 |
52 | export const SubtitleLogin = styled.p`
53 | font-family: 'Open Sans';
54 | font-style: normal;
55 | font-weight: 400;
56 | font-size: 18px;
57 | line-height: 25px;
58 | margin-bottom: 35px;
59 | `
60 |
61 | export const TermosText = styled.p`
62 | font-family: 'Open Sans';
63 | font-style: normal;
64 | font-weight: 400;
65 | font-size: 18px;
66 | line-height: 25px;
67 | margin-bottom: 35px;
68 | `
69 |
70 | export const LoginText = styled.span`
71 | font-family: 'Open Sans';
72 | font-style: normal;
73 | font-weight: 700;
74 | font-size: 14px;
75 | line-height: 19px;
76 |
77 | color: #23DD7A;
78 | `
79 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/pages/feed/index.tsx:
--------------------------------------------------------------------------------
1 | import { Card } from '../../componentes/Card';
2 | import { UserInfo } from '../../componentes/UserInfo';
3 |
4 | import { Header } from '../../componentes/Header';
5 |
6 | import { Container, Column, Title, TitleHighlight } from './styles';
7 |
8 | const Feed = () => {
9 | return (
10 | <>
11 |
12 |
13 |
14 | Feed
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | # RANKING 5 TOP DA SEMANA
28 |
29 |
30 |
31 |
32 |
33 |
34 | >
35 | )
36 | }
37 |
38 | export { Feed };
39 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/pages/feed/styles.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 | import { IFlex } from './types';
3 |
4 | export const Container = styled.main`
5 | width: 100%;
6 | max-width: 80%;
7 | margin: 0 auto;
8 | margin-top: 120px;
9 |
10 | display: flex;
11 | flex-direction: row;
12 | justify-content: space-between;
13 | `
14 |
15 | export const Title = styled.h3`
16 | font-family: 'Open Sans';
17 | font-style: normal;
18 | font-weight: 700;
19 | font-size: 18px;
20 | line-height: 25px;
21 | color: #FFFFFF;
22 | margin-bottom: 24px;
23 | `
24 |
25 | export const TitleHighlight = styled.h3`
26 | font-family: 'Open Sans';
27 | font-style: normal;
28 | font-weight: 700;
29 | font-size: 18px;
30 | line-height: 25px;
31 | color: #FFFFFF70;
32 | margin-bottom: 24px;
33 |
34 | `
35 |
36 | export const Column = styled.div`
37 | flex:${({flex}: IFlex) => flex};
38 | padding-right: 24px;
39 |
40 | `
41 |
42 |
43 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/pages/feed/types.ts:
--------------------------------------------------------------------------------
1 | export interface IFlex {
2 | flex: number
3 | }
4 |
5 |
--------------------------------------------------------------------------------
/DesafiosdeProjetos/desafio03-dioclone/src/pages/home/index.tsx:
--------------------------------------------------------------------------------
1 | import { useNavigate } from "react-router-dom";
2 |
3 | import bannerImage from '../../assets/banner.png'
4 |
5 | import { Button } from '../../componentes/Button';
6 |
7 | import { Header } from '../../componentes/Header';
8 |
9 | import { Container, Title, TitleHighlight, TextContent } from './styles';
10 |
11 | const Home = () => {
12 |
13 | const navigate = useNavigate();
14 |
15 | const handleClickSignIn = () => {
16 | navigate('/login')
17 | }
18 |
19 | return (<>
20 |