Skip to content

Conversation

@ekraffmiller
Copy link
Contributor

What this PR does / why we need it:

Adds paging to Notifications UI

Which issue(s) this PR closes:

Special notes for your reviewer:

I created a separate "base branch" because 775 actually has all the commits for 775 and 881.

Suggestions on how to test this:

Does this PR introduce a user interface change? If mockups are available, please link/include them here:

Is there a release notes or changelog update needed for this change?:

Additional documentation:

@github-actions github-actions bot added FY26 Sprint 10 FY26 Sprint 10 (2025-11-05 - 2025-11-19) FY26 Sprint 11 FY26 Sprint 11 (2025-11-20 - 2025-12-03) FY26 Sprint 12 FY26 Sprint 12 (2025-12-03 - 2025-12-17) FY26 Sprint 9 FY26 Sprint 9 (2025-10-22 - 2025-11-05) GREI Re-arch GREI re-architecture-related SPA SPA.Q3.2025.6 Account Page: Notifications labels Dec 15, 2025
@ekraffmiller ekraffmiller moved this to Ready for Review ⏩ in IQSS Dataverse Project Dec 15, 2025
@jp-tosca jp-tosca self-assigned this Dec 15, 2025
@jp-tosca jp-tosca moved this from Ready for Review ⏩ to In Review 🔎 in IQSS Dataverse Project Dec 16, 2025
@cmbz cmbz added the FY26 Sprint 13 FY26 Sprint 13 (2025-12-17 - 2025-12-31) label Dec 17, 2025
@ekraffmiller ekraffmiller linked an issue Dec 18, 2025 that may be closed by this pull request
@coveralls
Copy link

coveralls commented Dec 19, 2025

Coverage Status

coverage: 97.781% (-0.03%) from 97.808%
when pulling 79b702e on 881-notifications-with-paging
into fd58260 on 775-base.

@cmbz cmbz added the FY26 Sprint 14 FY26 Sprint 14 (2025-12-31 - 2026-01-14) label Dec 31, 2025
Copy link
Contributor

@jp-tosca jp-tosca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made some comments, we also discussed that in the future we probably should create a mechanism for when a component makes an operation that may generate a notification it should trigger a refresh to check the most recent number of notifications, otherwise the user won't see the notifications until next update, not a big deal but probably would improve the user experience.

"userGuideLinkText": "User Guide",
"demoServerLinkText": "Demo Site",
"clearAll": "Clear All",
"clearAllOnThisPage": "Clear Notifications",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this may make sense in the context it is used but do you think it would be good to have a key: "description" that is closer in meaning? "Clear notifications" is specific, while "clearAllOnThisPage" is very vague. 🤔

import { PaginationInfo } from '../../../shared/pagination/domain/models/PaginationInfo'

export class NotificationsPaginationInfo extends PaginationInfo<NotificationsPaginationInfo> {
constructor(page = 1, pageSize = 10, totalItems = 0, itemName = 'result') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be better to have these parameters configurable somewhere outside the functions 😅

<div>{t('notifications.displayingNotifications', { start, end, total })}</div>

{notifications.length > 0 && (
<Button
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It feels like the button’s behavior could be confusing. When there are multiple pages, the button says “Clear notifications”. The first time I saw that, I wasn’t sure—does it clear all notifications or just the ones on this page? After testing, I realized it only clears the current page, but that wasn’t obvious at first.

If there’s only one page, the text changes to “Clear all”, and in that case, it does clear everything.
This difference in wording and behavior feels inconsistent. I’d suggest making it static—something like “Clear all notifications”—and have it clear everything across all pages. We can chat more about this in standup.

void (async () => {
await markAsRead(unreadIds)
setReadIds((prev) => [...prev, ...unreadIds])
console.log('calling refetch after marking as read')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Console log.

.filter((n) => !n.displayAsRead && !readIds.includes(n.id))
.map((n) => n.id)

console.log('in useEffect, unreadIds:', unreadIds)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Console log.

@jp-tosca jp-tosca removed their assignment Jan 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

FY26 Sprint 9 FY26 Sprint 9 (2025-10-22 - 2025-11-05) FY26 Sprint 10 FY26 Sprint 10 (2025-11-05 - 2025-11-19) FY26 Sprint 11 FY26 Sprint 11 (2025-11-20 - 2025-12-03) FY26 Sprint 12 FY26 Sprint 12 (2025-12-03 - 2025-12-17) FY26 Sprint 13 FY26 Sprint 13 (2025-12-17 - 2025-12-31) FY26 Sprint 14 FY26 Sprint 14 (2025-12-31 - 2026-01-14) GREI Re-arch GREI re-architecture-related SPA.Q3.2025.6 Account Page: Notifications SPA

Projects

Status: In Review 🔎

Development

Successfully merging this pull request may close these issues.

Add paging to Notifications table

5 participants