From 3c7cb521b617d0cbdb720556a9eb8a697a8555ff Mon Sep 17 00:00:00 2001 From: meet Date: Sat, 1 Jun 2024 12:59:17 +0530 Subject: [PATCH 1/2] Added dynamic search Bar in the posts section --- frontend/src/pages/Posts.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/Posts.tsx b/frontend/src/pages/Posts.tsx index 71441bbe..84b4d11d 100644 --- a/frontend/src/pages/Posts.tsx +++ b/frontend/src/pages/Posts.tsx @@ -12,6 +12,7 @@ const Posts = () => { const [tagInput, setTagInput] = useState(''); const [filterTags, setFilterTags] = useState([]); const filterRef = useRef(null); + const [searchQuery, setSearchQuery] = useState(''); useEffect(() => { const fetchPosts = async () => { @@ -64,11 +65,14 @@ const Posts = () => { }; const filteredPosts = posts.filter(post => - filterTags.every(tag => post.tags.map(t => t.toLowerCase()).includes(tag)) + filterTags.every(tag => post.tags.map(t => t.toLowerCase()).includes(tag)) && + (post.title.toLowerCase().includes(searchQuery.toLowerCase()) || + post.description.toLowerCase().includes(searchQuery.toLowerCase()) || + post.author.username.toLowerCase().includes(searchQuery.toLowerCase())) ); if (loading) { - return ; + return ; } if (error) { @@ -126,10 +130,17 @@ const Posts = () => { )} + setSearchQuery(e.target.value)} + placeholder="🔍 Search anything" + className="p-2 w-full max-w-xs rounded-md bg-gray-700 text-white focus:outline-none focus:ring-2 focus:ring-blue-500" + />
- {filteredPosts.map((post) => ( - + {filteredPosts.map((post, index) => ( + ))}
From f50a2f0a38159cb0b039a1ff719c59674b0236c7 Mon Sep 17 00:00:00 2001 From: meet Date: Sat, 1 Jun 2024 13:37:12 +0530 Subject: [PATCH 2/2] Added pagination 9 posts / page in posts.tsx --- frontend/src/pages/Posts.tsx | 48 +++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/Posts.tsx b/frontend/src/pages/Posts.tsx index 84b4d11d..19c4358b 100644 --- a/frontend/src/pages/Posts.tsx +++ b/frontend/src/pages/Posts.tsx @@ -13,6 +13,8 @@ const Posts = () => { const [filterTags, setFilterTags] = useState([]); const filterRef = useRef(null); const [searchQuery, setSearchQuery] = useState(''); + const [currentPage, setCurrentPage] = useState(1); + const postsPerPage = 9; useEffect(() => { const fetchPosts = async () => { @@ -71,6 +73,25 @@ const Posts = () => { post.author.username.toLowerCase().includes(searchQuery.toLowerCase())) ); + const totalPages = Math.ceil(filteredPosts.length / postsPerPage); + + const currentPosts = filteredPosts.slice( + (currentPage - 1) * postsPerPage, + currentPage * postsPerPage + ); + + const handlePreviousPage = () => { + if (currentPage > 1) { + setCurrentPage(currentPage - 1); + } + }; + + const handleNextPage = () => { + if (currentPage < totalPages) { + setCurrentPage(currentPage + 1); + } + }; + if (loading) { return ; } @@ -139,10 +160,35 @@ const Posts = () => { />
- {filteredPosts.map((post, index) => ( + {currentPosts.map((post, index) => ( ))}
+
+ + {[...Array(totalPages)].map((_, index) => ( + + ))} + +
); };