From 9c4e6ea39f727241f9be7981c794c85883f78109 Mon Sep 17 00:00:00 2001 From: Rafael Gonzaga Date: Sat, 27 Sep 2025 11:25:24 -0300 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20adiciona=20lista=20de=20adotantes?= =?UTF-8?q?=20com=20visualiza=C3=A7=C3=A3o,=20edi=C3=A7=C3=A3o=20e=20exclu?= =?UTF-8?q?s=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cria AdopterList.tsx com grid responsivo de adotantes - Implementa modais de detalhes, edição e confirmação de exclusão - Adiciona validação de campos e formatação de CPF, CEP e telefone - Inclui avatars masculino, feminino e outros - Atualiza serviços de adotantes em adopterService.ts - Adiciona formatação em formatters.ts --- src/App.tsx | 23 ++ src/Components/Sidebar/Sidebar.tsx | 2 + src/assets/images/avatars/female.jpg | Bin 0 -> 8223 bytes src/assets/images/avatars/male.jpg | Bin 0 -> 29575 bytes src/assets/images/avatars/other.jpg | Bin 0 -> 10069 bytes src/pages/Adopter/AdopterList.tsx | 542 ++++++++++++++++++++++++++ src/pages/Adopter/AdopterRegister.tsx | 436 +++++++++++++++++++++ src/pages/Adopter/formatters.ts | 15 + src/services/adopterService.ts | 60 +++ 9 files changed, 1078 insertions(+) create mode 100644 src/assets/images/avatars/female.jpg create mode 100644 src/assets/images/avatars/male.jpg create mode 100644 src/assets/images/avatars/other.jpg create mode 100644 src/pages/Adopter/AdopterList.tsx create mode 100644 src/pages/Adopter/AdopterRegister.tsx create mode 100644 src/pages/Adopter/formatters.ts create mode 100644 src/services/adopterService.ts diff --git a/src/App.tsx b/src/App.tsx index d791615..06ca32f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,6 +12,9 @@ import { AuthProvider } from "./context/AuthContext"; import { Toaster } from "react-hot-toast"; // <-- import do Toaster import type { JSX } from "react"; import StaffList from "./pages/Staff/StaffList.tsx"; +import AdopterRegister from "./pages/Adopter/AdopterRegister.tsx"; +import AdopterList from "./pages/Adopter/AdopterList.tsx"; + const ProtectedLayout = ({ children }: { children: JSX.Element }) => (
@@ -89,6 +92,26 @@ export default function App() { } /> + + + + + + } + /> + + + + + + } + /> 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/avatars/male.jpg b/src/assets/images/avatars/male.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9d9a2b206d54bd292c8778e9f1dab8f7bf8ece1 GIT binary patch literal 29575 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/avatars/other.jpg b/src/assets/images/avatars/other.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05cf969b0194f9712c0a2a7f6e67d9eb4515f9a7 GIT binary patch literal 10069 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 ( + message ? {message} : null +); + +export default function AdopterList() { + const [adopters, setAdopters] = useState([]); + const [selectedAdopter, setSelectedAdopter] = useState(null); + const [editing, setEditing] = useState(null); + const [deleteAdopter, setDeleteAdopter] = useState(null); + const [loading, setLoading] = useState(true); + const [saving, setSaving] = useState(false); + const [searchTerm, setSearchTerm] = useState(""); + const [errors, setErrors] = useState({}); + const navigate = useNavigate(); + + useEffect(() => { + const fetchData = async () => { + try { + const data = await getAdopter(); + setAdopters(data); + } catch (err) { + console.error(err); + toast.error("Erro ao carregar adotantes."); + } finally { + setLoading(false); + } + }; + fetchData(); + }, []); + + const filteredAdopters = adopters.filter(a => + [a.name, a.email, a.phone, a.cpf, a.rg].some(field => + field?.toLowerCase().includes(searchTerm.toLowerCase()) + ) + ); + + const inputStyle = (hasError?: boolean) => + `w-full px-4 py-3 rounded-xl shadow-sm focus:ring-2 focus:outline-none transition placeholder-gray-400 text-gray-800 bg-gray-100/70 ${hasError ? "ring-red-500 focus:ring-red-500" : "focus:ring-blue-500"}`; + + const handleEditChange = ( + e: ChangeEvent + ) => { + if (!editing) return; + + const { name, value, type } = e.target; + let newValue: string | boolean = value; + + if (name === "cpf") newValue = formatCPF(value); + if (name === "cep") newValue = formatCEP(value); + if (name === "phone") newValue = formatPhone(value); + + if (type === "checkbox") newValue = (e.target as HTMLInputElement).checked; + if (name === "hasPets") newValue = value === "true"; + + setEditing({ ...editing, [name]: newValue }); + }; + + const validateEdit = () => { + if (!editing) return false; + + const otherAdopters = adopters.filter(a => a.id !== editing.id); + const newErrors: Errors = {}; + + if (!editing.name || editing.name.trim() === "") newErrors.name = "Campo obrigatório"; + if (!editing.email || editing.email.trim() === "") newErrors.email = "Campo obrigatório"; + else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(editing.email)) newErrors.email = "Email inválido"; + else if (otherAdopters.some(a => a.email === editing.email)) newErrors.email = "Email já cadastrado"; + + if (!editing.phone || editing.phone.trim() === "") newErrors.phone = "Campo obrigatório"; + else if (!/^\(?\d{2}\)?\s?\d{4,5}-?\d{4}$/.test(editing.phone)) newErrors.phone = "Telefone inválido"; + else if (otherAdopters.some(a => a.phone === editing.phone)) newErrors.phone = "Telefone já cadastrado"; + + if (!editing.cpf || editing.cpf.trim() === "") newErrors.cpf = "Campo obrigatório"; + else { + const cpfNumbers = editing.cpf.replace(/\D/g, ""); + if (!/^\d{11}$/.test(cpfNumbers)) newErrors.cpf = "CPF inválido"; + else if (otherAdopters.some(a => a.cpf === editing.cpf)) newErrors.cpf = "CPF já cadastrado"; + } + + if (!editing.rg || editing.rg.trim() === "") newErrors.rg = "Campo obrigatório"; + else if (otherAdopters.some(a => a.rg === editing.rg)) newErrors.rg = "RG já cadastrado"; + + if (!editing.sex || editing.sex === "") newErrors.sex = "Campo obrigatório"; + + if (editing.hasPets === undefined || editing.hasPets === null) newErrors.hasPets = "Campo obrigatório"; + + if (!editing.state || editing.state === "") newErrors.state = "Campo obrigatório"; + if (!editing.city || editing.city.trim() === "") newErrors.city = "Campo obrigatório"; + if (!editing.district || editing.district.trim() === "") newErrors.district = "Campo obrigatório"; + if (!editing.street || editing.street.trim() === "") newErrors.street = "Campo obrigatório"; + if (!editing.number || editing.number.trim() === "") newErrors.number = "Campo obrigatório"; + if (!editing.cep || editing.cep.trim() === "") newErrors.cep = "Campo obrigatório"; + + setErrors(newErrors); + + if (Object.keys(newErrors).length > 0) { + toast.error("Corrija os campos destacados."); + return false; + } + + return true; + }; + + const handleEditSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + if (!editing) return; + if (!validateEdit()) return; + + setSaving(true); + await toast.promise( + updateAdopterById(editing.id, editing), + { + loading: "Salvando...", + success: "Adotante atualizado com sucesso!", + error: "Erro ao atualizar adotante." + } + ); + setAdopters(prev => prev.map(a => (a.id === editing.id ? editing : a))); + setEditing(null); + setSaving(false); + }; + + const confirmDelete = async () => { + if (!deleteAdopter) return; + await toast.promise( + deleteAdopterById(deleteAdopter.id), + { + loading: "Excluindo...", + success: "Adotante removido com sucesso!", + error: "Erro ao excluir adotante." + } + ); + setAdopters(prev => prev.filter(a => a.id !== deleteAdopter.id)); + setDeleteAdopter(null); + }; + + return ( +
+ {/* Header */} +
+

Adotantes

+
+ setSearchTerm(e.target.value)} + className="flex-1 sm:w-64 px-4 py-2 border border-gray-300 rounded-xl shadow-inner focus:outline-none focus:ring-2 focus:ring-blue-500 transition" + /> + +
+
+ + {/* Grid de adotantes */} + {loading ? ( +
+ {[...Array(6)].map((_, i) => ( +
+ ))} +
+ ) : filteredAdopters.length === 0 ? ( +
Nenhum adotante encontrado.
+ ) : ( +
+ {filteredAdopters.map(a => ( +
+
+ {a.sex === "Feminino" ? ( + Avatar feminino + ) : a.sex === "Masculino" ? ( + Avatar masculino + ) : ( + Avatar outros + )} + + +
+
+

{a.name}

+

{a.email}

+

{a.phone}

+

{a.sex || "Não informado"}

+ +
+
+ ))} +
+ )} + + + {/* Modal detalhes */} + {selectedAdopter && ( + + + +

{selectedAdopter.name}

+
+

Email: {selectedAdopter.email}

+

Telefone: {selectedAdopter.phone}

+

Sexo: {selectedAdopter.sex || "Não informado"}

+

RG: {selectedAdopter.rg || "Não informado"}

+

CPF: {selectedAdopter.cpf || "Não informado"}

+

Endereço: {`${selectedAdopter.street || ""} ${selectedAdopter.number || ""}, ${selectedAdopter.district || ""}, ${selectedAdopter.city || ""} - ${selectedAdopter.state || ""}`}

+

CEP: {selectedAdopter.cep || "Não informado"}

+

Estado Civil: {selectedAdopter.maritalStatus || "Não informado"}

+

Possui pets: {selectedAdopter.hasPets ? "Sim" : "Não"}

+

Observações: {selectedAdopter.notes || "Nenhuma"}

+
+
+ + +
+
+
+ )} + + {/* Modal edição */} + {editing && ( + + + +

Editar Adotante

+
+
+ {/* Inputs */} +
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+ {/* Estado Civil */} +
+ + + +
+ {/* Estado */} +
+ + + +
+ {/* Cidade */} +
+ + + +
+ {/* Bairro */} +
+ + + +
+ {/* Rua */} +
+ + + +
+ + {/* Número */} +
+ + + +
+ + {/* Complemento */} +
+ + + +
+ + {/* CEP */} +
+ + + +
+ +
+ + + +
+ +
+ +
+ + + +
+
+ + {/* Observações */} +
+ +