diff --git a/src/components/agent/AgentSearch.tsx b/src/components/agent/AgentSearch.tsx index 81043d4..b9ad228 100644 --- a/src/components/agent/AgentSearch.tsx +++ b/src/components/agent/AgentSearch.tsx @@ -3,6 +3,15 @@ import { Search, FileText } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { ScrollArea } from "@/components/ui/scroll-area"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { + Pagination, + PaginationContent, + PaginationItem, + PaginationLink, + PaginationNext, + PaginationPrevious, +} from "@/components/ui/pagination"; import { LegalOpinion } from "./AgentView"; interface AgentSearchProps { @@ -51,6 +60,8 @@ const mockOpinionsDatabase: LegalOpinion[] = [ export const AgentSearch = ({ onSelectOpinion }: AgentSearchProps) => { const [searchTerm, setSearchTerm] = useState(""); const [searchResults, setSearchResults] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(5); const handleSearch = () => { if (!searchTerm.trim()) { @@ -66,8 +77,13 @@ export const AgentSearch = ({ onSelectOpinion }: AgentSearchProps) => { ); setSearchResults(results); + setCurrentPage(1); }; + const totalPages = Math.ceil(searchResults.length / itemsPerPage); + const startIndex = (currentPage - 1) * itemsPerPage; + const paginatedResults = searchResults.slice(startIndex, startIndex + itemsPerPage); + return (
@@ -89,41 +105,103 @@ export const AgentSearch = ({ onSelectOpinion }: AgentSearchProps) => {

- - {searchResults.length > 0 ? ( -
- {searchResults.map((opinion) => ( -
onSelectOpinion(opinion)} - > -
- -
-

{opinion.title}

-
- {opinion.category} - {new Date(opinion.createdAt).toLocaleDateString('pt-BR')} +
+ + {searchResults.length > 0 ? ( +
+ {paginatedResults.map((opinion) => ( +
onSelectOpinion(opinion)} + > +
+ +
+

{opinion.title}

+
+ {opinion.category} + {new Date(opinion.createdAt).toLocaleDateString('pt-BR')} +
+

+ {opinion.content} +

-

- {opinion.content} -

+ ))} +
+ ) : searchTerm ? ( +
+

Nenhum parecer encontrado para "{searchTerm}"

+
+ ) : ( +
+

Digite um termo para pesquisar na base de pareceres

+
+ )} +
+ + {searchResults.length > 0 && ( +
+
+
+ Itens por página: +
- ))} -
- ) : searchTerm ? ( -
-

Nenhum parecer encontrado para "{searchTerm}"

-
- ) : ( -
-

Digite um termo para pesquisar na base de pareceres

+ + Mostrando {startIndex + 1}-{Math.min(startIndex + itemsPerPage, searchResults.length)} de {searchResults.length} + +
+ + + + + setCurrentPage((prev) => Math.max(1, prev - 1))} + className={currentPage === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"} + /> + + + {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( + + setCurrentPage(page)} + isActive={currentPage === page} + className="cursor-pointer" + > + {page} + + + ))} + + + setCurrentPage((prev) => Math.min(totalPages, prev + 1))} + className={currentPage === totalPages ? "pointer-events-none opacity-50" : "cursor-pointer"} + /> + + +
)} - +
); };