diff --git a/src/api/notification.jsx b/src/api/notification.jsx index 3c526ed..fa8efdf 100644 --- a/src/api/notification.jsx +++ b/src/api/notification.jsx @@ -82,6 +82,15 @@ const resendChatAllUser = async (notificationId) => { return response.data; }; +// Searching +const searchData = async (queryParams) => { + const response = await SendRequest({ + method: 'get', + prefix: `notification?criteria=${queryParams}`, + }); + return response.data; +}; + export { getAllNotification, getNotificationById, @@ -92,4 +101,5 @@ export { resendNotificationToUser, resendChatByUser, resendChatAllUser, + searchData, }; diff --git a/src/pages/notification/component/ListNotification.jsx b/src/pages/notification/component/ListNotification.jsx index 5ab0f87..01f9e31 100644 --- a/src/pages/notification/component/ListNotification.jsx +++ b/src/pages/notification/component/ListNotification.jsx @@ -44,6 +44,7 @@ import { getNotificationDetail, resendChatByUser, resendChatAllUser, + searchData, } from '../../../api/notification'; const { Text, Paragraph, Link: AntdLink } = Typography; @@ -219,13 +220,49 @@ const ListNotification = memo(function ListNotification(props) { ); }; + const fetchSearch = async (data) => { + setLoading(true); + try { + const response = await searchData(data); + if (response && response.data) { + const transformedData = transformNotificationData(response.data); + setNotifications(transformedData); + + // Update pagination with API response or calculate from data + if (response.paging) { + setPagination({ + current_page: response.paging.current_page || page, + current_limit: response.paging.current_limit || limit, + total_limit: response.paging.total_limit || transformedData.length, + total_page: + response.paging.total_page || Math.ceil(transformedData.length / limit), + }); + } else { + // Fallback: calculate pagination from data + const totalItems = transformedData.length; + setPagination((prev) => ({ + ...prev, + current_page: page, + current_limit: limit, + total_limit: totalItems, + total_page: Math.ceil(totalItems / limit), + })); + } + } + } catch (error) { + console.error(error); + } finally { + setLoading(false); + } + }; + const handleSearch = () => { - setSearchTerm(searchValue); + fetchSearch(searchValue); }; const handleSearchClear = () => { setSearchValue(''); - setSearchTerm(''); + fetchSearch(''); }; const getUnreadCount = () => notifications.filter((n) => !n.isRead).length;