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) => {
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
+ }}
/>
- ) : filteredNews.length === 0 ? (
+ ) : news.length === 0 ? (
) : (
- filteredNews.map((item) => (
+ news.map((item) => (
{item.Id}