From a7defc19448aeda695aa73dee858dbe34d38e352 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:01:08 +0000 Subject: [PATCH] feat: Add search and pagination to Prompts page --- src/pages/Prompts.tsx | 166 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 150 insertions(+), 16 deletions(-) diff --git a/src/pages/Prompts.tsx b/src/pages/Prompts.tsx index 40428d9..e614feb 100644 --- a/src/pages/Prompts.tsx +++ b/src/pages/Prompts.tsx @@ -1,11 +1,26 @@ -import { useState } from "react"; +import { useState, useMemo } from "react"; import { PromptCard } from "@/components/prompts/PromptCard"; import { CreatePromptDialog } from "@/components/prompts/CreatePromptDialog"; import { Button } from "@/components/ui/button"; -import { Plus } from "lucide-react"; +import { Input } from "@/components/ui/input"; +import { + Pagination, + PaginationContent, + PaginationEllipsis, + PaginationItem, + PaginationLink, + PaginationNext, + PaginationPrevious, +} from "@/components/ui/pagination"; +import { Plus, Search } from "lucide-react"; + +const ITEMS_PER_PAGE = 6; export default function Prompts() { const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + const [currentPage, setCurrentPage] = useState(1); + const [prompts] = useState([ { id: 1, @@ -35,11 +50,54 @@ export default function Prompts() { lastModified: "3 dias atrás", status: "published" as const, }, + { + id: 5, + title: "Prompt de Suporte Técnico", + creator: "Carlos Mendes", + lastModified: "4 dias atrás", + status: "published" as const, + }, + { + id: 6, + title: "Prompt de Onboarding", + creator: "Fernanda Silva", + lastModified: "6 dias atrás", + status: "draft" as const, + }, + { + id: 7, + title: "Prompt de Follow-up", + creator: "Rafael Santos", + lastModified: "1 dia atrás", + status: "published" as const, + }, ]); + // Filtra prompts baseado na pesquisa + const filteredPrompts = useMemo(() => { + if (!searchQuery.trim()) return prompts; + + const query = searchQuery.toLowerCase(); + return prompts.filter(prompt => + prompt.title.toLowerCase().includes(query) || + prompt.creator.toLowerCase().includes(query) + ); + }, [prompts, searchQuery]); + + // Calcula paginação + const totalPages = Math.ceil(filteredPrompts.length / ITEMS_PER_PAGE); + const startIndex = (currentPage - 1) * ITEMS_PER_PAGE; + const paginatedPrompts = filteredPrompts.slice(startIndex, startIndex + ITEMS_PER_PAGE); + + // Reset para primeira página quando busca muda + const handleSearchChange = (value: string) => { + setSearchQuery(value); + setCurrentPage(1); + }; + return (
@@ -52,22 +110,98 @@ export default function Prompts() {
+ {filteredPrompts.length} {filteredPrompts.length === 1 ? 'prompt encontrado' : 'prompts encontrados'} +
Nenhum prompt encontrado com os critérios de busca.
+