From 6001a2db645990ddd5683a0c067be5dc9dfb0c7d Mon Sep 17 00:00:00 2001 From: rishalkv Date: Fri, 24 Apr 2026 17:25:47 +0530 Subject: [PATCH 1/2] fix:search pagination issue --- .../src/controllers/newsMedia.controller.js | 60 +++++++------------ 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/backend/src/controllers/newsMedia.controller.js b/backend/src/controllers/newsMedia.controller.js index 473da8f..4bf935f 100644 --- a/backend/src/controllers/newsMedia.controller.js +++ b/backend/src/controllers/newsMedia.controller.js @@ -4,53 +4,40 @@ import prisma from "../prisma/client.js"; export const getAllNews = async (req, res) => { try { - const page = parseInt(req.query.page); - const limit = parseInt(req.query.limit); + const page = parseInt(req.query.page) || 1; + const limit = parseInt(req.query.limit) || 10; + const search = req.query.search?.trim() || ""; const includeImages = { images: true, }; - if (!page && !limit) { - const news = await prisma.newsMedia.findMany({ - include: includeImages, - orderBy: { createdAt: "desc" }, - }); + const searchFilter = search + ? { + headline: { + contains: search, + mode: "insensitive", + }, + } + : {}; - const response = news.map((n) => ({ - Id: n.id.toString(), - Headline: n.headline, - Content: n.content, - FirstPara: n.firstPara, - SecondPara: n.secondPara, - Date: n.date, - Author: n.author, - Images: n.images.map((img) => ({ - id: img.id, - image: img.url, - })), - })); + const whereCondition = { + ...searchFilter, + }; - return res.status(200).json({ - success: true, - data: response, - meta: null, - }); - } - - const currentPage = page || 1; - const currentLimit = limit || 10; - - const skip = (currentPage - 1) * currentLimit; + const skip = (page - 1) * limit; const [news, total] = await Promise.all([ prisma.newsMedia.findMany({ + where: whereCondition, include: includeImages, orderBy: { createdAt: "desc" }, skip, - take: currentLimit, + take: limit, + }), + prisma.newsMedia.count({ + where: whereCondition, }), - prisma.newsMedia.count(), ]); const response = news.map((n) => ({ @@ -72,9 +59,9 @@ export const getAllNews = async (req, res) => { data: response, meta: { total, - page: currentPage, - limit: currentLimit, - totalPages: Math.ceil(total / currentLimit), + page, + limit, + totalPages: Math.ceil(total / limit), }, }); } catch (error) { @@ -85,7 +72,6 @@ export const getAllNews = async (req, res) => { }); } }; - // GET NEWS BY ID export const getNewsById = async (req, res) => { From c6fbd0dc309fe6c5d57b4cb94e8493eda24c3df6 Mon Sep 17 00:00:00 2001 From: rishalkv Date: Fri, 24 Apr 2026 17:27:15 +0530 Subject: [PATCH 2/2] refactor:change in the image path --- frontend/src/api/newsMedia.ts | 4 ++-- frontend/src/pages/newsMedia.tsx | 20 ++++++++------------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/frontend/src/api/newsMedia.ts b/frontend/src/api/newsMedia.ts index 8905b83..0b3605d 100644 --- a/frontend/src/api/newsMedia.ts +++ b/frontend/src/api/newsMedia.ts @@ -1,8 +1,8 @@ import apiClient from "@/api/client"; -export const getNewsApi = async (page = 1, limit = 10) => { +export const getNewsApi = async (page = 1, limit = 10, search = "") => { const res = await apiClient.get( - `/newsMedia/getAll?page=${page}&limit=${limit}`, + `/newsMedia/getAll?page=${page}&limit=${limit}&search=${search}`, ); return res.data; }; diff --git a/frontend/src/pages/newsMedia.tsx b/frontend/src/pages/newsMedia.tsx index b5a7de9..3e10021 100644 --- a/frontend/src/pages/newsMedia.tsx +++ b/frontend/src/pages/newsMedia.tsx @@ -73,7 +73,7 @@ export default function NewsPage() { const fetchAll = useCallback(async () => { setLoading(true); try { - const res = await getNewsApi(currentPage, itemsPerPage); + const res = await getNewsApi(currentPage, itemsPerPage, searchText); setNews(res?.data || []); setTotalItems(res?.meta?.total || 0); @@ -82,18 +82,12 @@ export default function NewsPage() { } finally { setLoading(false); } - }, [currentPage, itemsPerPage]); + }, [currentPage, itemsPerPage, searchText]); useEffect(() => { fetchAll(); }, [fetchAll]); - const filteredNews = news.filter( - (item) => - item.Headline?.toLowerCase().includes(searchText.toLowerCase()) || - item.Author?.toLowerCase().includes(searchText.toLowerCase()), - ); - const totalPages = Math.ceil(totalItems / itemsPerPage); function handleChange(e: any) { @@ -171,8 +165,10 @@ export default function NewsPage() { setSearchText(e.target.value)} - className="w-[250px] text-base" + onChange={(e) => { + setSearchText(e.target.value); + setCurrentPage(1); // reset page + }} />