From f2882ba6edb5eae047eacf9ebb2f199692041ac1 Mon Sep 17 00:00:00 2001 From: aelassas Date: Tue, 25 Feb 2025 21:04:30 +0000 Subject: [PATCH] Fix: update NotificationList component to properly manage notification read/unread state --- backend/src/components/NotificationList.tsx | 28 +++++++------- frontend/src/components/NotificationList.tsx | 39 ++++++++++---------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/backend/src/components/NotificationList.tsx b/backend/src/components/NotificationList.tsx index c516cdbd..2d3d28c7 100644 --- a/backend/src/components/NotificationList.tsx +++ b/backend/src/components/NotificationList.tsx @@ -204,7 +204,7 @@ const NotificationList = ({ user }: NotificationListProps) => {
- {rows.map((row) => ( + {rows.map((row, index) => (
{ const status = await NotificationService.markAsRead(user._id, [row._id]) if (status === 200) { - row.isRead = true - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.cloneArray(rows) as movininTypes.Notification[] + _rows[index].isRead = true + setRows(_rows) setNotificationCount((prev) => prev - 1) __navigate__() } else { @@ -276,8 +277,9 @@ const NotificationList = ({ user }: NotificationListProps) => { const status = await NotificationService.markAsRead(user._id, [row._id]) if (status === 200) { - row.isRead = true - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.cloneArray(rows) as movininTypes.Notification[] + _rows[index].isRead = true + setRows(_rows) setNotificationCount((prev) => prev - 1) } else { helper.error() @@ -303,8 +305,9 @@ const NotificationList = ({ user }: NotificationListProps) => { const status = await NotificationService.markAsUnread(user._id, [row._id]) if (status === 200) { - row.isRead = false - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.cloneArray(rows) as movininTypes.Notification[] + _rows[index].isRead = false + setRows(_rows) setNotificationCount((prev) => prev + 1) } else { helper.error() @@ -397,17 +400,12 @@ const NotificationList = ({ user }: NotificationListProps) => { fetch() } } else { - selectedRows.forEach((row) => { - rows.splice( - rows.findIndex((_row) => _row._id === row._id), - 1, - ) - }) - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.clone(rows) as movininTypes.Notification[] + setRows(_rows.filter((row) => !ids.includes(row._id))) setRowCount(rowCount - selectedRows.length) setTotalRecords(totalRecords - selectedRows.length) } - setNotificationCount((prev) => prev - selectedRows.length) + setNotificationCount((prev) => prev - selectedRows.filter((row) => !row.isRead).length) setOpenDeleteDialog(false) } else { helper.error() diff --git a/frontend/src/components/NotificationList.tsx b/frontend/src/components/NotificationList.tsx index 47e2f668..733e69a8 100644 --- a/frontend/src/components/NotificationList.tsx +++ b/frontend/src/components/NotificationList.tsx @@ -143,9 +143,9 @@ const NotificationList = ({ user }: NotificationListProps) => { if (status === 200) { const __rows = movininHelper.clone(rows) as movininTypes.Notification[] - for (const row of __rows) { + __rows.filter((row) => ids.includes(row._id)).forEach((row) => { row.isRead = true - } + }) setRows(__rows) setNotificationCount((prev) => prev - _rows.length) } else { @@ -175,9 +175,9 @@ const NotificationList = ({ user }: NotificationListProps) => { if (status === 200) { const __rows = movininHelper.clone(rows) as movininTypes.Notification[] - for (const row of __rows) { + __rows.filter((row) => ids.includes(row._id)).forEach((row) => { row.isRead = false - } + }) setRows(__rows) setNotificationCount((prev) => prev + _rows.length) } else { @@ -207,7 +207,7 @@ const NotificationList = ({ user }: NotificationListProps) => {
- {rows.map((row) => ( + {rows.map((row, index) => (
{ const status = await NotificationService.markAsRead(user._id, [row._id]) if (status === 200) { - row.isRead = true - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.cloneArray(rows) as movininTypes.Notification[] + _rows[index].isRead = true + setRows(_rows) setNotificationCount((prev) => prev - 1) __navigate__() } else { @@ -279,8 +280,9 @@ const NotificationList = ({ user }: NotificationListProps) => { const status = await NotificationService.markAsRead(user._id, [row._id]) if (status === 200) { - row.isRead = true - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.cloneArray(rows) as movininTypes.Notification[] + _rows[index].isRead = true + setRows(_rows) setNotificationCount((prev) => prev - 1) } else { helper.error() @@ -306,8 +308,9 @@ const NotificationList = ({ user }: NotificationListProps) => { const status = await NotificationService.markAsUnread(user._id, [row._id]) if (status === 200) { - row.isRead = false - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.cloneArray(rows) as movininTypes.Notification[] + _rows[index].isRead = false + setRows(_rows) setNotificationCount((prev) => prev + 1) } else { helper.error() @@ -399,17 +402,13 @@ const NotificationList = ({ user }: NotificationListProps) => { fetch() } } else { - selectedRows.forEach((row) => { - rows.splice( - rows.findIndex((_row) => _row._id === row._id), - 1, - ) - }) - setRows(movininHelper.clone(rows)) + const _rows = movininHelper.clone(rows) as movininTypes.Notification[] + setRows(_rows.filter((row) => !ids.includes(row._id))) setRowCount(rowCount - selectedRows.length) setTotalRecords(totalRecords - selectedRows.length) } - setNotificationCount((prev) => prev - selectedRows.length) + setNotificationCount((prev) => prev - selectedRows.filter((row) => !row.isRead).length) + console.log(selectedRows.length) setOpenDeleteDialog(false) } else { helper.error() @@ -419,7 +418,7 @@ const NotificationList = ({ user }: NotificationListProps) => { } }} variant="contained" - color="error" + color="primary" > {commonStrings.DELETE}