Skip to content

Commit 92a7ec5

Browse files
committed
2-DR2-TP2.11
1 parent 449da30 commit 92a7ec5

File tree

5 files changed

+97
-12
lines changed

5 files changed

+97
-12
lines changed

2-desenvolvimento-front-end/DR2-fundamentos-de-react/DR2-TP2.00-biblioteca-crud/src/App.jsx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ function App() {
1111
{ titulo: "O Senhor dos Anéis", autor: "J.R.R. Tolkien", ano: 1954 }
1212
]);
1313

14+
const [livroEditando, setLivroEditando] = useState(null);
15+
1416
const adicionarLivro = (novoLivro) => {
1517
setLivros([...livros, novoLivro]);
1618
};
@@ -19,12 +21,32 @@ function App() {
1921
setLivros(livros.filter((_, i) => i !== index));
2022
};
2123

24+
const editarLivro = (index) => {
25+
setLivroEditando({ ...livros[index], index });
26+
};
27+
28+
const atualizarLivro = (livroAtualizado) => {
29+
setLivros(livros.map((livro, i) =>
30+
i === livroEditando.index ? livroAtualizado : livro
31+
));
32+
setLivroEditando(null);
33+
};
34+
2235
return (
2336
<>
2437
<Header />
2538
<main>
26-
<BookForm onAddBook={adicionarLivro} />
27-
<BookList livros={livros} onRemoveBook={removerLivro} />
39+
<BookForm
40+
onAddBook={adicionarLivro}
41+
onUpdateBook={atualizarLivro}
42+
livroEditando={livroEditando}
43+
onCancelEdit={() => setLivroEditando(null)}
44+
/>
45+
<BookList
46+
livros={livros}
47+
onRemoveBook={removerLivro}
48+
onEditBook={editarLivro}
49+
/>
2850
</main>
2951
</>
3052
)

2-desenvolvimento-front-end/DR2-fundamentos-de-react/DR2-TP2.00-biblioteca-crud/src/components/bookform/index.jsx

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,52 @@
1-
import { useState } from "react";
1+
import { useState, useEffect } from "react";
22
import "./styles.css";
33

4-
export default function BookForm({ onAddBook }) {
4+
export default function BookForm({ onAddBook, onUpdateBook, livroEditando, onCancelEdit }) {
55
const [titulo, setTitulo] = useState("");
66
const [autor, setAutor] = useState("");
77
const [ano, setAno] = useState("");
88

9+
useEffect(() => {
10+
if (livroEditando) {
11+
setTitulo(livroEditando.titulo);
12+
setAutor(livroEditando.autor);
13+
setAno(livroEditando.ano.toString());
14+
}
15+
}, [livroEditando]);
16+
917
const handleSubmit = (e) => {
1018
e.preventDefault();
1119

1220
if (titulo && autor && ano) {
13-
onAddBook({
14-
titulo,
15-
autor,
16-
ano: Number(ano)
17-
});
21+
if (livroEditando) {
22+
onUpdateBook({
23+
titulo,
24+
autor,
25+
ano: Number(ano)
26+
});
27+
} else {
28+
onAddBook({
29+
titulo,
30+
autor,
31+
ano: Number(ano)
32+
});
33+
}
1834

1935
setTitulo("");
2036
setAutor("");
2137
setAno("");
2238
}
2339
};
2440

41+
const handleCancel = () => {
42+
setTitulo("");
43+
setAutor("");
44+
setAno("");
45+
if (livroEditando) {
46+
onCancelEdit();
47+
}
48+
};
49+
2550
return (
2651
<form className="book-form" onSubmit={handleSubmit}>
2752
<div className="form-row">
@@ -60,7 +85,12 @@ export default function BookForm({ onAddBook }) {
6085
</div>
6186

6287
<div className="button-container">
63-
<button type="submit">Adicionar Livro</button>
88+
<button type="button" className="btn-cancelar" onClick={handleCancel}>
89+
{livroEditando ? "Cancelar" : "Limpar"}
90+
</button>
91+
<button type="submit">
92+
{livroEditando ? "Atualizar Livro" : "Adicionar Livro"}
93+
</button>
6494
</div>
6595
</form>
6696
)

2-desenvolvimento-front-end/DR2-fundamentos-de-react/DR2-TP2.00-biblioteca-crud/src/components/bookform/styles.css

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
.button-container {
1313
display: flex;
1414
justify-content: center;
15+
gap: 12px;
16+
width: 80%;
17+
margin: 0 auto;
1518
}
1619

1720
button {
@@ -23,12 +26,20 @@
2326
cursor: pointer;
2427
font-size: 16px;
2528
font-weight: 500;
26-
width: 50%;
29+
flex: 1;
2730

2831
&:hover {
2932
background-color: #6b8f5a;
3033
}
3134
}
35+
36+
.btn-cancelar {
37+
background-color: #6b6b6b;
38+
39+
&:hover {
40+
background-color: #7a7a7a;
41+
}
42+
}
3243
}
3344

3445
.form-group {

2-desenvolvimento-front-end/DR2-fundamentos-de-react/DR2-TP2.00-biblioteca-crud/src/components/booklist/index.jsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import "./styles.css";
22

3-
export default function BookList({ livros, onRemoveBook }) {
3+
export default function BookList({ livros, onRemoveBook, onEditBook }) {
44
return (
55
<table>
66
<thead>
@@ -18,6 +18,12 @@ export default function BookList({ livros, onRemoveBook }) {
1818
<td>{livro.autor}</td>
1919
<td>{livro.ano}</td>
2020
<td>
21+
<button
22+
className="btn-editar"
23+
onClick={() => onEditBook(index)}
24+
>
25+
Editar
26+
</button>
2127
<button
2228
className="btn-excluir"
2329
onClick={() => onRemoveBook(index)}

2-desenvolvimento-front-end/DR2-fundamentos-de-react/DR2-TP2.00-biblioteca-crud/src/components/booklist/styles.css

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,19 @@ table {
6767
background-color: #c05555;
6868
}
6969
}
70+
71+
.btn-editar {
72+
background-color: #4a6aa8;
73+
color: #f8f4f0;
74+
border: none;
75+
padding: 8px 16px;
76+
border-radius: 4px;
77+
cursor: pointer;
78+
font-size: 14px;
79+
font-weight: 500;
80+
margin-right: 8px;
81+
82+
&:hover {
83+
background-color: #5580c0;
84+
}
85+
}

0 commit comments

Comments
 (0)