From 8060a578434889599b0a0ec5fc420937d2a99a75 Mon Sep 17 00:00:00 2001 From: CainaNascimentoMelo Date: Wed, 16 Sep 2026 21:47:11 -0300 Subject: [PATCH 01/10] feat(4): Add back front integration for DocumentList and Home --- src/components/Document/DocumentItem.jsx | 34 +++--- src/pages/Home.jsx | 148 +++++++++-------------- 2 files changed, 78 insertions(+), 104 deletions(-) diff --git a/src/components/Document/DocumentItem.jsx b/src/components/Document/DocumentItem.jsx index 4d89fdf..c4e695c 100644 --- a/src/components/Document/DocumentItem.jsx +++ b/src/components/Document/DocumentItem.jsx @@ -1,5 +1,18 @@ import "./DocumentItem.css"; +function formatarData(dataISO) { + if (!dataISO) return "-"; + + const data = new Date(dataISO); + if (isNaN(data.getTime())) return dataISO; + + return data.toLocaleDateString("pt-BR", { + day: "2-digit", + month: "2-digit", + year: "numeric", + }); +} + function DocumentItem({ document, onView }) { const typeClass = document.type ?.toLowerCase() @@ -12,31 +25,26 @@ function DocumentItem({ document, onView }) { return (
- {document.fileType} + {document.tipo_arquivo}
-
- {document.name} +
+ {document.nome}
- {document.type} + {document.setor}
- {document.updatedAt} + {formatarData(document.data_atualizacao)}
- - {document.accessLevel} + + {document.nivel}
@@ -54,7 +62,6 @@ function DocumentItem({ document, onView }) { stroke="currentColor" strokeWidth="1.8" /> - - Visualizar
diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index d6c4c21..358fc11 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -1,56 +1,57 @@ -import { useMemo, useState } from "react"; +import { useEffect, useState } from "react"; import SearchBar from "../components/SearchBar/SearchBar"; import DocumentList from "../components/Document/DocumentList"; import Pagination from "../components/Pagination/Pagination"; import DocumentModal from "../components/Document/DocumentModal"; -import documents from "../data/documents"; +import { fetchDocuments } from "../services/documentService"; import "./Home.css"; -const DOCUMENTS_PER_PAGE = 10; - function Home() { const [search, setSearch] = useState(""); + const [documents, setDocuments] = useState([]); + const [totalPages, setTotalPages] = useState(1); const [currentPage, setCurrentPage] = useState(1); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); const [selectedDocument, setSelectedDocument] = useState(null); - const filteredDocuments = useMemo(() => { - return documents.filter((document) => - document.name - .toLowerCase() - .includes(search.toLowerCase()) - ); - }, [search]); - - const totalPages = Math.ceil( - filteredDocuments.length / DOCUMENTS_PER_PAGE - ); - - const validPage = - totalPages === 0 - ? 1 - : Math.min(currentPage, totalPages); - - const firstDocumentIndex = - (validPage - 1) * DOCUMENTS_PER_PAGE; - - const currentDocuments = filteredDocuments.slice( - firstDocumentIndex, - firstDocumentIndex + DOCUMENTS_PER_PAGE - ); + useEffect(() => { + const timer = setTimeout(async () => { + setLoading(true); + setError(null); + + try { + const data = await fetchDocuments({ + nome: search, + page: currentPage, + }); + console.log(data); + + setDocuments(data.results || []); + setTotalPages(data.pages || 1); + } catch (err) { + console.error("Erro ao buscar documentos:", err); + setError("Não foi possível carregar os documentos."); + setDocuments([]); + setTotalPages(1); + } finally { + setLoading(false); + } + }, 400); + + return () => clearTimeout(timer); + }, [search, currentPage]); function handleSearch(value) { setSearch(value); - setCurrentPage(1); + setCurrentPage(1); } function handlePageChange(page) { - if (page < 1 || page > totalPages) { - return; - } - + if (page < 1 || page > totalPages) return; setCurrentPage(page); } @@ -59,82 +60,49 @@ function Home() { window.open(document.pdfUrl, "_blank"); return; } - - console.log( - "PDF ainda não disponível para o documento:", - document.name - ); + console.log("PDF ainda não disponível:", document.nome); } return (
- - - - - - + + + + -

Documentos

- - +
- - - + {loading &&

Carregando documentos...

} + {error &&

{error}

} + + {!loading && !error && ( + <> + + + + )}
Date: Wed, 16 Sep 2026 21:48:12 -0300 Subject: [PATCH 02/10] feat(4): Add axios and documentService --- src/services/api.js | 8 ++++++++ src/services/documentService.js | 12 ++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/services/api.js create mode 100644 src/services/documentService.js diff --git a/src/services/api.js b/src/services/api.js new file mode 100644 index 0000000..2a0f198 --- /dev/null +++ b/src/services/api.js @@ -0,0 +1,8 @@ + +import axios from 'axios'; + +const api = axios.create({ + baseURL: import.meta.env.VITE_API_URL || 'http://localhost:8000', +}); + +export default api; \ No newline at end of file diff --git a/src/services/documentService.js b/src/services/documentService.js new file mode 100644 index 0000000..469ecf6 --- /dev/null +++ b/src/services/documentService.js @@ -0,0 +1,12 @@ +import api from "./api"; + +export async function fetchDocuments({ nome = "", page = 1 } = {}) { + const response = await api.get("/api/documentos/", { + params: { + nome: nome, + page: page, + }, + }); + + return response.data; +} \ No newline at end of file From ebb0d2fb7351c5318f8fee2282c8fba7a569ace3 Mon Sep 17 00:00:00 2001 From: CainaNascimentoMelo Date: Wed, 16 Sep 2026 21:54:13 -0300 Subject: [PATCH 03/10] feat(4): Add axios in package.json --- package-lock.json | 311 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 310 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 47c0342..d0c88a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "iaazimmute", "version": "0.0.0", "dependencies": { + "axios": "^1.20.0", "react": "^19.2.8", "react-dom": "^19.2.8" }, @@ -921,6 +922,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", @@ -938,6 +951,24 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", + "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", @@ -1022,6 +1053,19 @@ "qified": "^0.10.1" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001810", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", @@ -1043,6 +1087,18 @@ ], "license": "CC-BY-4.0" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -1076,7 +1132,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1097,6 +1152,15 @@ "dev": true, "license": "MIT" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -1107,6 +1171,20 @@ "node": ">=8" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.422", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.422.tgz", @@ -1114,6 +1192,51 @@ "dev": true, "license": "ISC" }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -1407,6 +1530,42 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1422,6 +1581,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -1432,6 +1600,43 @@ "node": ">=6.9.0" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -1458,6 +1663,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hashery": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", @@ -1471,6 +1715,18 @@ "node": ">=20" } }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hermes-estree": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", @@ -1495,6 +1751,19 @@ "dev": true, "license": "MIT" }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -1903,6 +2172,36 @@ "yallist": "^3.0.2" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", @@ -1923,7 +2222,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -2091,6 +2389,15 @@ "node": ">= 0.8.0" } }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", diff --git a/package.json b/package.json index 6af50bd..94c5129 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "axios": "^1.20.0", "react": "^19.2.8", "react-dom": "^19.2.8" }, From 394e385a1f43da40bf177889f7041bfe336d232a Mon Sep 17 00:00:00 2001 From: CainaNascimentoMelo Date: Wed, 16 Sep 2026 22:06:25 -0300 Subject: [PATCH 04/10] feat(4): Add DocumentList and Home tests --- src/tests/coverage/DocumentoList.test.jsx | 58 +++++++++ src/tests/coverage/Home.test.jsx | 152 ++++++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100644 src/tests/coverage/DocumentoList.test.jsx create mode 100644 src/tests/coverage/Home.test.jsx diff --git a/src/tests/coverage/DocumentoList.test.jsx b/src/tests/coverage/DocumentoList.test.jsx new file mode 100644 index 0000000..ed82aa7 --- /dev/null +++ b/src/tests/coverage/DocumentoList.test.jsx @@ -0,0 +1,58 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { describe, expect, it, vi } from "vitest"; + +import DocumentList from "./DocumentList"; + +vi.mock("./DocumentItem", () => ({ + default: ({ document, onView }) => ( +
+ {document.name} + +
+ ), +})); + +describe("DocumentList", () => { + it("renderiza os cabeçalhos da lista", () => { + render(); + + expect(screen.getByText("Arquivo")).toBeInTheDocument(); + expect(screen.getByText("Nome do documento")).toBeInTheDocument(); + expect(screen.getByText("Setor/Tipo")).toBeInTheDocument(); + expect(screen.getByText("Atualizado")).toBeInTheDocument(); + expect(screen.getByText("Nível de Acesso")).toBeInTheDocument(); + }); + + it("renderiza os documentos recebidos", () => { + const documents = [ + { id: 1, name: "Documento 1" }, + { id: 2, name: "Documento 2" }, + ]; + + render(); + + expect(screen.getAllByTestId("document-item")).toHaveLength(2); + expect(screen.getByText("Documento 1")).toBeInTheDocument(); + expect(screen.getByText("Documento 2")).toBeInTheDocument(); + }); + + it("exibe mensagem quando não existem documentos", () => { + render(); + + expect( + screen.getByText("Nenhum documento encontrado.") + ).toBeInTheDocument(); + }); + + it("chama onView ao visualizar um documento", async () => { + const onView = vi.fn(); + const document = { id: 1, name: "Documento 1" }; + + render(); + + await userEvent.click(screen.getByRole("button", { name: "Visualizar" })); + + expect(onView).toHaveBeenCalledWith(document); + }); +}); \ No newline at end of file diff --git a/src/tests/coverage/Home.test.jsx b/src/tests/coverage/Home.test.jsx new file mode 100644 index 0000000..e123c46 --- /dev/null +++ b/src/tests/coverage/Home.test.jsx @@ -0,0 +1,152 @@ +import { act, fireEvent, render, screen } from "@testing-library/react"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import Home from "./Home"; +import { fetchDocuments } from "../services/documentService"; + +vi.mock("../services/documentService", () => ({ + fetchDocuments: vi.fn(), +})); + +vi.mock("../components/SearchBar/SearchBar", () => ({ + default: ({ value, onChange }) => ( + onChange(event.target.value)} + /> + ), +})); + +vi.mock("../components/Document/DocumentList", () => ({ + default: ({ documents, onView }) => ( +
+ {documents.map((document) => ( + + ))} +
+ ), +})); + +vi.mock("../components/Pagination/Pagination", () => ({ + default: ({ currentPage, totalPages, onPageChange }) => ( + + ), +})); + +vi.mock("../components/Document/DocumentModal", () => ({ + default: ({ document, onViewPdf }) => + document ? ( + + ) : null, +})); + +describe("Home", () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.clearAllMocks(); + }); + + it("carrega e exibe os documentos", async () => { + fetchDocuments.mockResolvedValue({ + results: [{ id: 1, nome: "Documento 1" }], + pages: 2, + }); + + render(); + + expect(screen.getByText("Carregando documentos...")).toBeInTheDocument(); + + await act(async () => { + await vi.advanceTimersByTimeAsync(400); + }); + + expect(fetchDocuments).toHaveBeenCalledWith({ + nome: "", + page: 1, + }); + expect(screen.getByText("Documento 1")).toBeInTheDocument(); + expect(screen.getByLabelText("Próxima página")).toBeEnabled(); + }); + + it("exibe mensagem de erro quando a busca falha", async () => { + fetchDocuments.mockRejectedValue(new Error("Erro na API")); + + render(); + + await act(async () => { + await vi.advanceTimersByTimeAsync(400); + }); + + expect( + screen.getByText("Não foi possível carregar os documentos.") + ).toBeInTheDocument(); + }); + + it("realiza uma nova busca ao alterar o texto", async () => { + fetchDocuments.mockResolvedValue({ + results: [], + pages: 1, + }); + + render(); + + await act(async () => { + await vi.advanceTimersByTimeAsync(400); + }); + + fireEvent.change(screen.getByLabelText("Pesquisar"), { + target: { value: "relatório" }, + }); + + await act(async () => { + await vi.advanceTimersByTimeAsync(400); + }); + + expect(fetchDocuments).toHaveBeenLastCalledWith({ + nome: "relatório", + page: 1, + }); + }); + + it("abre o PDF do documento selecionado", async () => { + const windowOpen = vi + .spyOn(window, "open") + .mockImplementation(() => null); + + fetchDocuments.mockResolvedValue({ + results: [ + { + id: 1, + nome: "Documento 1", + pdfUrl: "https://exemplo.com/documento.pdf", + }, + ], + pages: 1, + }); + + render(); + + await act(async () => { + await vi.advanceTimersByTimeAsync(400); + }); + + fireEvent.click(screen.getByText("Documento 1")); + fireEvent.click(screen.getByText("Abrir PDF")); + + expect(windowOpen).toHaveBeenCalledWith( + "https://exemplo.com/documento.pdf", + "_blank" + ); + + windowOpen.mockRestore(); + }); +}); \ No newline at end of file From d1bce1f89109418c04ce843ba2f37b75d1486da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Melo?= <163151125+CainaNascimentoMelo@users.noreply.github.com> Date: Wed, 16 Sep 2026 22:40:04 -0300 Subject: [PATCH 05/10] fix(4): Correct NaN error --- src/components/Document/DocumentItem.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Document/DocumentItem.jsx b/src/components/Document/DocumentItem.jsx index c4e695c..b230ecc 100644 --- a/src/components/Document/DocumentItem.jsx +++ b/src/components/Document/DocumentItem.jsx @@ -4,7 +4,7 @@ function formatarData(dataISO) { if (!dataISO) return "-"; const data = new Date(dataISO); - if (isNaN(data.getTime())) return dataISO; + if (Number.isNaN(data.getTime())) return dataISO; return data.toLocaleDateString("pt-BR", { day: "2-digit", From a05f552cb50393ca26ad2f30e03fb6a583197dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Melo?= <163151125+CainaNascimentoMelo@users.noreply.github.com> Date: Wed, 16 Sep 2026 22:46:18 -0300 Subject: [PATCH 06/10] style(4): Sort Documents and Home respective folders --- src/components/Document/{ => DocumentItem}/DocumentItem.css | 0 src/components/Document/{ => DocumentItem}/DocumentItem.jsx | 0 src/components/Document/{ => DocumentList}/DocumentList.css | 0 src/components/Document/{ => DocumentList}/DocumentList.jsx | 0 .../Document/{ => DocumentModal}/DocumentModal.css | 0 .../Document/{ => DocumentModal}/DocumentModal.jsx | 0 src/pages/{ => Home}/Home.css | 0 src/pages/{ => Home}/Home.jsx | 6 +++--- 8 files changed, 3 insertions(+), 3 deletions(-) rename src/components/Document/{ => DocumentItem}/DocumentItem.css (100%) rename src/components/Document/{ => DocumentItem}/DocumentItem.jsx (100%) rename src/components/Document/{ => DocumentList}/DocumentList.css (100%) rename src/components/Document/{ => DocumentList}/DocumentList.jsx (100%) rename src/components/Document/{ => DocumentModal}/DocumentModal.css (100%) rename src/components/Document/{ => DocumentModal}/DocumentModal.jsx (100%) rename src/pages/{ => Home}/Home.css (100%) rename src/pages/{ => Home}/Home.jsx (94%) diff --git a/src/components/Document/DocumentItem.css b/src/components/Document/DocumentItem/DocumentItem.css similarity index 100% rename from src/components/Document/DocumentItem.css rename to src/components/Document/DocumentItem/DocumentItem.css diff --git a/src/components/Document/DocumentItem.jsx b/src/components/Document/DocumentItem/DocumentItem.jsx similarity index 100% rename from src/components/Document/DocumentItem.jsx rename to src/components/Document/DocumentItem/DocumentItem.jsx diff --git a/src/components/Document/DocumentList.css b/src/components/Document/DocumentList/DocumentList.css similarity index 100% rename from src/components/Document/DocumentList.css rename to src/components/Document/DocumentList/DocumentList.css diff --git a/src/components/Document/DocumentList.jsx b/src/components/Document/DocumentList/DocumentList.jsx similarity index 100% rename from src/components/Document/DocumentList.jsx rename to src/components/Document/DocumentList/DocumentList.jsx diff --git a/src/components/Document/DocumentModal.css b/src/components/Document/DocumentModal/DocumentModal.css similarity index 100% rename from src/components/Document/DocumentModal.css rename to src/components/Document/DocumentModal/DocumentModal.css diff --git a/src/components/Document/DocumentModal.jsx b/src/components/Document/DocumentModal/DocumentModal.jsx similarity index 100% rename from src/components/Document/DocumentModal.jsx rename to src/components/Document/DocumentModal/DocumentModal.jsx diff --git a/src/pages/Home.css b/src/pages/Home/Home.css similarity index 100% rename from src/pages/Home.css rename to src/pages/Home/Home.css diff --git a/src/pages/Home.jsx b/src/pages/Home/Home.jsx similarity index 94% rename from src/pages/Home.jsx rename to src/pages/Home/Home.jsx index 358fc11..d94ab79 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home/Home.jsx @@ -1,11 +1,11 @@ import { useEffect, useState } from "react"; -import SearchBar from "../components/SearchBar/SearchBar"; +import SearchBar from "../../components/SearchBar/SearchBar"; import DocumentList from "../components/Document/DocumentList"; -import Pagination from "../components/Pagination/Pagination"; +import Pagination from "../../components/Pagination/Pagination"; import DocumentModal from "../components/Document/DocumentModal"; -import { fetchDocuments } from "../services/documentService"; +import { fetchDocuments } from "../../services/documentService"; import "./Home.css"; From e875431df4187aabe3aefcd36e6325aea4b75d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Melo?= <163151125+CainaNascimentoMelo@users.noreply.github.com> Date: Wed, 16 Sep 2026 23:14:38 -0300 Subject: [PATCH 07/10] feat(4): Add react-icons dependency --- package-lock.json | 258 ++++++++++++++++++++++++---------------------- package.json | 3 +- 2 files changed, 136 insertions(+), 125 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0c88a4..e9d706c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "dependencies": { "axios": "^1.20.0", "react": "^19.2.8", - "react-dom": "^19.2.8" + "react-dom": "^19.2.8", + "react-icons": "^5.7.0" }, "devDependencies": { "@eslint/js": "^10.0.1", @@ -557,9 +558,9 @@ "license": "MIT" }, "node_modules/@oxc-project/types": { - "version": "0.148.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", - "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "version": "0.150.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.150.0.tgz", + "integrity": "sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==", "dev": true, "license": "MIT", "funding": { @@ -567,9 +568,9 @@ } }, "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", - "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.9.tgz", + "integrity": "sha512-tNISae1QEf/vkb3xkRcjV5SEdzPE97We5IVaa2Z8jSszQPZ8U60B/YCYpw4QI7VidYsBtKavczXf+DyDs9WGxw==", "cpu": [ "arm" ], @@ -584,9 +585,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", - "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.9.tgz", + "integrity": "sha512-YC8YsI30o606GTZi0VyzYlsDKFP8W61i/QzayHDkLbNEz/IShqAmTa+hsJRj13xTHA0H+6fk4b2UmGn+Q/cMlg==", "cpu": [ "arm64" ], @@ -601,9 +602,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", - "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.9.tgz", + "integrity": "sha512-IwhlH3qK5urrY8hZiEgGkHKEFN901p/p2bjxCxJlr4GyNnF7wYpUvK+Y43uaRYuC4hpfjzbR3SJC3arX1jGvmw==", "cpu": [ "arm64" ], @@ -618,9 +619,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", - "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.9.tgz", + "integrity": "sha512-XxpJfVzFh+jilRxIXUqcfYAYcunIc/XEzIizsOL1fcJee5Sf7H3mH8WlLmfHfluz5amqR88QQo9izKtmMlavAw==", "cpu": [ "x64" ], @@ -635,9 +636,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", - "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.9.tgz", + "integrity": "sha512-kSfvhmgeWyfkbT3p/1s5vSgboogoah2zkm9fX2zjg2hHxSV7T4KhMWRUUaRk4OXNqoD3QAUeRqLcs1aZOK4U1g==", "cpu": [ "x64" ], @@ -652,9 +653,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", - "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.9.tgz", + "integrity": "sha512-1RVzG17pxqbTfYLC352JlLt6kKLG+6Hr30n8DlIJqsnV5luUDd2Qdx9Ayw1Cabfyb1K9k0jXEZ7evxkRoT+uiw==", "cpu": [ "arm" ], @@ -669,9 +670,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", - "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.9.tgz", + "integrity": "sha512-BXqPvZ2drqVD+/Z8UpKwcs4Mp7grM+eGFku4CAEKrEtcbAsUpzREphK1sogCRZGreVPiMkiiBtw0n3TPteuqvw==", "cpu": [ "arm64" ], @@ -686,9 +687,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", - "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.9.tgz", + "integrity": "sha512-11vWvo8YDwLzukt27J3aYDWU+gg2P7J+ZOmiJ0hkF5BXZDW7pVya7r40MXDy6ya0i9KamoENSVKIugvJNgFXIA==", "cpu": [ "arm64" ], @@ -703,9 +704,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", - "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.9.tgz", + "integrity": "sha512-a1tijMkdwsIARtc0F39ApURROkf3NwqinI6TOiSSWCTR7dT96dffNvMUtDHnq64wKNTIZOIlzKrFvvFUznJiyw==", "cpu": [ "ppc64" ], @@ -720,9 +721,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", - "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.9.tgz", + "integrity": "sha512-x6SQNdAvv4c3hWqTMaWuawzMX9myaCs/yEmlGsxJzkdClnHW7FbrjQuSiRDhuSYzEYoEMhsaJy9qHG/XNemJPQ==", "cpu": [ "s390x" ], @@ -737,9 +738,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", - "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.9.tgz", + "integrity": "sha512-9s0AZ8BFK5/n7B/TBoa2yJE3gI3KURrbXcPBlsAsvjU4VeJKgE90y1YtNxyEUIcHPQkg6/yfF3qihUrcM/Kf0Q==", "cpu": [ "x64" ], @@ -754,9 +755,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", - "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.9.tgz", + "integrity": "sha512-P7VWAmV+WdJluH7ovnRGoiv2i8To7GAZ+kGzfGup635cyL7SyYl3lSUaA3Gp5THf0n/Co5EyEqb2zbqq+nMOHQ==", "cpu": [ "x64" ], @@ -771,9 +772,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", - "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.9.tgz", + "integrity": "sha512-1qixtsE4BK8h+yS3BfmZ09UhA7O/N4IACva6YBr7EBvCJraByTuRcgOTaiA62Tm0vey3UcKXLOaoGHtYmNGEVg==", "cpu": [ "arm64" ], @@ -788,9 +789,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", - "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.9.tgz", + "integrity": "sha512-ok8IQjcEPs1AKZfuEUznVBrJw+gK4soq+bx8b1X2XoMqVClarc1q5JDmVtWXY1xfr6ZuHTAsPXHTgTrqKTZeww==", "cpu": [ "arm64" ], @@ -805,9 +806,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", - "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.9.tgz", + "integrity": "sha512-Ip2mXoU0hM0boq3Rf+ekuT653OROSo6aSYcPT1VHE4q52KvyxgFkQgrgb/IEsxOuvQ2fZZbs8khJAyCEPM24/g==", "cpu": [ "x64" ], @@ -850,9 +851,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", - "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", "dev": true, "license": "MIT", "dependencies": { @@ -860,13 +861,13 @@ } }, "node_modules/@types/react-dom": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.7.tgz", - "integrity": "sha512-I8bPpDLcHBv1qiIiXDCy71Rt8eQDKJP0sMSWJphDdAcdqiJ1sGpZamavoEIRZmYzjia9LuEb2HlYdDpmoENpvQ==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^19.2.0" + "@types/react": "^19.3.0" } }, "node_modules/@vitejs/plugin-react": { @@ -980,9 +981,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.11.21", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz", - "integrity": "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==", + "version": "2.11.24", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.24.tgz", + "integrity": "sha512-hYrgxie335U08WqICoGqKRzV1HFXv6zdxwJE4ekCb80CM9a0SVVsN4QPwT67RraRo+9h8IATk6uxHJw7QSkdOg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -993,9 +994,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1006,9 +1007,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz", - "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", "dev": true, "funding": [ { @@ -1026,11 +1027,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.20", + "baseline-browser-mapping": "^2.11.23", "caniuse-lite": "^1.0.30001810", - "electron-to-chromium": "^1.5.420", - "node-releases": "^2.0.54", - "update-browserslist-db": "^1.3.2" + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" }, "bin": { "browserslist": "cli.js" @@ -1186,9 +1187,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.422", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.422.tgz", - "integrity": "sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==", + "version": "1.5.430", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.430.tgz", + "integrity": "sha512-e1QEj72Y4zd8RlNZVmoTg+iCOSVwpk05IOiiQwdrkwCSVlZfPthevErhE+nckGd2YbsXfp1SkisznhGVIXP2NQ==", "dev": true, "license": "ISC" }, @@ -1340,9 +1341,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.6.tgz", - "integrity": "sha512-uZnh24On2bk478AkaDAKcpRiYhS3qFSaSNvpXxV6/Ek/BBDICkWGG7MnBSfjnIlCVBei5vsLlIeQYxbF22+Udg==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.7.tgz", + "integrity": "sha512-XhJSzLljuYD4UjNuFGJu2v7aD3sqNVK12w5/DCUfrNfHWegZo2+TsavNx8MuxMwEquuFAzNbNfXKU0WoZ+YUIg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2225,9 +2226,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", "dev": true, "funding": [ { @@ -2251,9 +2252,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.54", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", - "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", + "version": "2.0.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", + "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", "dev": true, "license": "MIT", "engines": { @@ -2429,34 +2430,43 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", - "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", - "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", "license": "MIT", "dependencies": { - "scheduler": "^0.27.0" + "scheduler": "^0.28.0" }, "peerDependencies": { - "react": "^19.2.8" + "react": "^19.3.0" + } + }, + "node_modules/react-icons": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz", + "integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==", + "license": "MIT", + "peerDependencies": { + "react": "*" } }, "node_modules/rolldown": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", - "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.9.tgz", + "integrity": "sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.148.0", + "@oxc-project/types": "=0.150.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -2466,27 +2476,27 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.7", - "@rolldown/binding-android-arm64": "1.2.7", - "@rolldown/binding-darwin-arm64": "1.2.7", - "@rolldown/binding-darwin-x64": "1.2.7", - "@rolldown/binding-freebsd-x64": "1.2.7", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", - "@rolldown/binding-linux-arm64-gnu": "1.2.7", - "@rolldown/binding-linux-arm64-musl": "1.2.7", - "@rolldown/binding-linux-ppc64-gnu": "1.2.7", - "@rolldown/binding-linux-s390x-gnu": "1.2.7", - "@rolldown/binding-linux-x64-gnu": "1.2.7", - "@rolldown/binding-linux-x64-musl": "1.2.7", - "@rolldown/binding-openharmony-arm64": "1.2.7", - "@rolldown/binding-win32-arm64-msvc": "1.2.7", - "@rolldown/binding-win32-x64-msvc": "1.2.7" + "@rolldown/binding-android-arm-eabi": "1.2.9", + "@rolldown/binding-android-arm64": "1.2.9", + "@rolldown/binding-darwin-arm64": "1.2.9", + "@rolldown/binding-darwin-x64": "1.2.9", + "@rolldown/binding-freebsd-x64": "1.2.9", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.9", + "@rolldown/binding-linux-arm64-gnu": "1.2.9", + "@rolldown/binding-linux-arm64-musl": "1.2.9", + "@rolldown/binding-linux-ppc64-gnu": "1.2.9", + "@rolldown/binding-linux-s390x-gnu": "1.2.9", + "@rolldown/binding-linux-x64-gnu": "1.2.9", + "@rolldown/binding-linux-x64-musl": "1.2.9", + "@rolldown/binding-openharmony-arm64": "1.2.9", + "@rolldown/binding-win32-arm64-msvc": "1.2.9", + "@rolldown/binding-win32-x64-msvc": "1.2.9" } }, "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", "license": "MIT" }, "node_modules/semver": { @@ -2563,9 +2573,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", - "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", "dev": true, "funding": [ { @@ -2604,16 +2614,16 @@ } }, "node_modules/vite": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", - "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.0.tgz", + "integrity": "sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.26", - "rolldown": "~1.2.4", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.6", "tinyglobby": "^0.2.17" }, "bin": { @@ -2630,7 +2640,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "@vitejs/devtools": "^0.7.1", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -2728,9 +2738,9 @@ } }, "node_modules/zod": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", - "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 94c5129..e53069e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "dependencies": { "axios": "^1.20.0", "react": "^19.2.8", - "react-dom": "^19.2.8" + "react-dom": "^19.2.8", + "react-icons": "^5.7.0" }, "devDependencies": { "@eslint/js": "^10.0.1", From 494db6009373ed868ccc643cdd1074fbc7d5ba8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Melo?= <163151125+CainaNascimentoMelo@users.noreply.github.com> Date: Wed, 16 Sep 2026 23:25:07 -0300 Subject: [PATCH 08/10] fix(4): Update import paths for Home, DocumentList and App --- src/App.jsx | 2 +- src/components/Document/DocumentList/DocumentList.jsx | 2 +- src/pages/Home/Home.jsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 2355b3d..3eb9b58 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,5 @@ import Layout from "./components/Layout/Layout"; -import Home from "./pages/Home"; +import Home from "./pages/Home/Home"; import "./App.css"; diff --git a/src/components/Document/DocumentList/DocumentList.jsx b/src/components/Document/DocumentList/DocumentList.jsx index 9ee58c5..4d74e42 100644 --- a/src/components/Document/DocumentList/DocumentList.jsx +++ b/src/components/Document/DocumentList/DocumentList.jsx @@ -1,4 +1,4 @@ -import DocumentItem from "./DocumentItem"; +import DocumentItem from "../DocumentItem/DocumentItem"; import "./DocumentList.css"; diff --git a/src/pages/Home/Home.jsx b/src/pages/Home/Home.jsx index d94ab79..0353ca2 100644 --- a/src/pages/Home/Home.jsx +++ b/src/pages/Home/Home.jsx @@ -1,9 +1,9 @@ import { useEffect, useState } from "react"; import SearchBar from "../../components/SearchBar/SearchBar"; -import DocumentList from "../components/Document/DocumentList"; +import DocumentList from "../../components/Document/DocumentList/DocumentList"; import Pagination from "../../components/Pagination/Pagination"; -import DocumentModal from "../components/Document/DocumentModal"; +import DocumentModal from "../../components/Document/DocumentModal/DocumentModal"; import { fetchDocuments } from "../../services/documentService"; From a38bafc85cbc7c28314aa8cf96bfab762dfe2bbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Melo?= <163151125+CainaNascimentoMelo@users.noreply.github.com> Date: Wed, 16 Sep 2026 23:33:18 -0300 Subject: [PATCH 09/10] feat(4): Replace SVG icons with react-icons in components --- .../Document/DocumentItem/DocumentItem.jsx | 22 +------- .../Document/DocumentModal/DocumentModal.jsx | 23 +------- src/components/SearchBar/SearchBar.jsx | 23 +------- src/components/Sidebar/Sidebar.jsx | 52 ++----------------- src/pages/Home/Home.jsx | 11 ++-- 5 files changed, 12 insertions(+), 119 deletions(-) diff --git a/src/components/Document/DocumentItem/DocumentItem.jsx b/src/components/Document/DocumentItem/DocumentItem.jsx index b230ecc..158a114 100644 --- a/src/components/Document/DocumentItem/DocumentItem.jsx +++ b/src/components/Document/DocumentItem/DocumentItem.jsx @@ -1,3 +1,4 @@ +import { FiEye } from "react-icons/fi"; import "./DocumentItem.css"; function formatarData(dataISO) { @@ -50,26 +51,7 @@ function DocumentItem({ document, onView }) {
diff --git a/src/components/Document/DocumentModal/DocumentModal.jsx b/src/components/Document/DocumentModal/DocumentModal.jsx index ad6b19d..0aa6771 100644 --- a/src/components/Document/DocumentModal/DocumentModal.jsx +++ b/src/components/Document/DocumentModal/DocumentModal.jsx @@ -1,3 +1,4 @@ +import { FiEye } from "react-icons/fi"; import "./DocumentModal.css"; function DocumentModal({ document, onClose, onViewPdf }) { @@ -164,27 +165,7 @@ function DocumentModal({ document, onClose, onViewPdf }) { className="modal-view-button" onClick={() => onViewPdf(document)} > - - - - - - + Visualizar diff --git a/src/components/SearchBar/SearchBar.jsx b/src/components/SearchBar/SearchBar.jsx index 2673612..440b685 100644 --- a/src/components/SearchBar/SearchBar.jsx +++ b/src/components/SearchBar/SearchBar.jsx @@ -1,3 +1,4 @@ +import { FiSearch } from "react-icons/fi"; import "./SearchBar.css"; function SearchBar({ value, onChange }) { @@ -11,27 +12,7 @@ function SearchBar({ value, onChange }) { />
); diff --git a/src/components/Sidebar/Sidebar.jsx b/src/components/Sidebar/Sidebar.jsx index 21778e2..5dd652c 100644 --- a/src/components/Sidebar/Sidebar.jsx +++ b/src/components/Sidebar/Sidebar.jsx @@ -1,3 +1,4 @@ +import { FiFileText, FiLogOut } from "react-icons/fi"; import logo from "../../assets/AkaerLogo.png"; import "./Sidebar.css"; @@ -12,60 +13,13 @@ function Sidebar() { diff --git a/src/pages/Home/Home.jsx b/src/pages/Home/Home.jsx index 0353ca2..9e1b651 100644 --- a/src/pages/Home/Home.jsx +++ b/src/pages/Home/Home.jsx @@ -1,3 +1,4 @@ +import { FiFileText, FiFilter } from "react-icons/fi"; import { useEffect, useState } from "react"; import SearchBar from "../../components/SearchBar/SearchBar"; @@ -67,20 +68,14 @@ function Home() {
- - - - - +

Documentos

From deb52b589bdae8bdea817fa7390a380b493332ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Melo?= <163151125+CainaNascimentoMelo@users.noreply.github.com> Date: Wed, 16 Sep 2026 23:38:36 -0300 Subject: [PATCH 10/10] feat(4): Add loading and error message styles to Home component --- src/pages/Home/Home.css | 46 ++++++++++++++++++++++++++++++++++++++++- src/pages/Home/Home.jsx | 17 ++++++++++++--- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/pages/Home/Home.css b/src/pages/Home/Home.css index e109809..d154e21 100644 --- a/src/pages/Home/Home.css +++ b/src/pages/Home/Home.css @@ -70,6 +70,51 @@ margin-top: 25px; } +/* ===== Mensagens de loading e erro ===== */ +.loading-message { + padding: 16px; + color: #6c757d; + font-size: 14px; +} + +.error-message { + display: flex; + align-items: center; + gap: 10px; + + padding: 14px 18px; + margin-top: 16px; + + border: 1px solid #f5c2c7; + border-radius: 8px; + + background-color: #fde8ea; + color: #842029; + + font-size: 14px; +} + +.error-message svg { + flex-shrink: 0; +} + +.error-message .error-text { + display: flex; + flex-direction: column; + gap: 2px; +} + +.error-message .error-title { + font-weight: 600; + font-size: 14px; +} + +.error-message .error-description { + font-size: 13px; + opacity: 0.85; +} + +/* ===== Responsividade ===== */ @media (max-width: 900px) { .page-header { align-items: flex-start; @@ -93,7 +138,6 @@ .header-actions { width: 100%; - justify-content: flex-start; } } \ No newline at end of file diff --git a/src/pages/Home/Home.jsx b/src/pages/Home/Home.jsx index 9e1b651..c9ad150 100644 --- a/src/pages/Home/Home.jsx +++ b/src/pages/Home/Home.jsx @@ -1,4 +1,4 @@ -import { FiFileText, FiFilter } from "react-icons/fi"; +import { FiFileText, FiFilter, FiAlertCircle } from "react-icons/fi"; import { useEffect, useState } from "react"; import SearchBar from "../../components/SearchBar/SearchBar"; @@ -82,8 +82,19 @@ function Home() {
- {loading &&

Carregando documentos...

} - {error &&

{error}

} + {loading && ( +

Carregando documentos...

+ )} + + {error && ( +
+ +
+ Erro ao carregar + {error} +
+
+ )} {!loading && !error && ( <>