Skip to content

Update DSR notification UX#7192

Merged
jack-gale-ethyca merged 50 commits intomainfrom
ENG-2303
Jan 28, 2026
Merged

Update DSR notification UX#7192
jack-gale-ethyca merged 50 commits intomainfrom
ENG-2303

Conversation

@jack-gale-ethyca
Copy link
Contributor

@jack-gale-ethyca jack-gale-ethyca commented Jan 7, 2026

ENG-2303

Updates the privacy request error notification email template with new branding, improved copy, and enhanced UX in the notification configuration drawer.

Ticket ENG-2303

Description Of Changes

  • Updated DSR notification UX
  • Updated chakra components to ANT
  • Improved information architecture
  • Removed robotic language, made tone more conversational

Code Changes

Frontend (ConfigureAlerts.tsx)

  • Refactored to Ant Design: Migrated from Chakra UI to Ant Design components for consistency
  • UX improvements:
    • Updated header to "Request notifications"
    • Added description text at top (trimmed from original)
    • Moved placeholder text to InfoTooltip
    • Improved spacing and layout
    • Buttons moved to footer with proper spacing

Email Input Component (EmailChipList.tsx)

  • Refactored to work with new Ant Design form structure
  • Simplified props interface (no longer requires Formik FieldArray)
  • Uses default tag color for email chips

Steps to Confirm

  • Email template renders correctly with new copy and branding from mailgun
  • All form validation and submission flows work correctly
  • Email is readable when forwarded to Slack (This is an known customer workflow, we should make sure the forwarded email in slack looks polished)

Pre-Merge Checklist

  • Issue requirements met
  • All CI pipelines succeeded
  • CHANGELOG.md updated
    • Add a db-migration This indicates that a change includes a database migration label to the entry if your change includes a DB migration
    • Add a high-risk This issue suggests changes that have a high-probability of breaking existing code label to the entry if your change includes a high-risk change (i.e. potential for performance impact or unexpected regression) that should be flagged
    • Updates unreleased work already in Changelog, no new entry necessary
  • UX feedback:
    • All UX related changes have been reviewed by a designer
    • No UX review needed
  • Followup issues:
    • Followup issues created
    • No followup issues
  • Database migrations:
    • Ensure that your downrev is up to date with the latest revision on main
    • Ensure that your downgrade() migration is correct and works
      • If a downgrade migration is not possible for this change, please call this out in the PR description!
    • No migrations
  • Documentation:
    • Documentation complete, PR opened in fidesdocs
    • Documentation issue created in fidesdocs
    • If there are any new client scopes created as part of the pull request, remember to update public-facing documentation that references our scope registry
    • No documentation updates required

ENG-2303

Updates the privacy request error notification email template with new branding, improved copy, and enhanced UX in the notification configuration drawer.
@jack-gale-ethyca jack-gale-ethyca requested review from a team as code owners January 7, 2026 19:18
@jack-gale-ethyca jack-gale-ethyca requested review from galvana and lucanovera and removed request for a team January 7, 2026 19:18
@vercel
Copy link
Contributor

vercel bot commented Jan 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
fides-plus-nightly Ready Ready Preview, Comment Jan 28, 2026 9:50pm
1 Skipped Deployment
Project Deployment Review Updated (UTC)
fides-privacy-center Ignored Ignored Jan 28, 2026 9:50pm

Request Review

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 7, 2026

Greptile Summary

This PR updates the DSR notification UX with improved branding and migrates the frontend from Chakra UI/Formik to Ant Design/React state.

Key changes:

  • Email template redesigned with Ethyca branding, responsive layout, and dark mode support
  • Backend now passes organization_name and company_logo_url to templates (previously missing unsent_errors)
  • Frontend refactored from Formik to React state management with Ant Design components

Critical issue:

  • The ConfigureAlerts drawer no longer loads existing notification settings from the API. When users open the drawer, they always see empty defaults instead of their current configuration. This breaks the edit flow.

Confidence Score: 3/5

  • Not safe to merge - breaks existing notification configuration editing
  • The PR contains a critical functional regression where users cannot view or edit their existing notification settings. The drawer always shows defaults instead of loading current values from the API.
  • ConfigureAlerts.tsx needs the data loading logic restored before merge

Important Files Changed

Filename Overview
clients/admin-ui/src/features/privacy-requests/drawers/ConfigureAlerts.tsx Migrated from Formik/Chakra to React state/Ant Design, but loses ability to load existing notification settings
src/fides/api/service/messaging/message_dispatch_service.py Added support for optional organization_name and company_logo_url variables, fixed unsent_errors bug
src/fides/api/email_templates/templates/privacy_request_error_notification.html Complete redesign with Ethyca branding, improved styling, responsive design, and dark mode support

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

6 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

If you saved an email, then closed and reopened the tray, the email would disappear. this Fixes that.
@jack-gale-ethyca
Copy link
Contributor Author

@galvana There is technically a BE change here, cursor found a bug and updated it. If we don't want to include that we don't have to. LMK.

ConfigureAlerts.tsx:
Reorganized UI: global "Enable email notifications" toggle at top (defaults to ON)
Updated copy: "Email addresses", "Send notification after [N] error(s)" with help text
Form resets to defaults when drawer closes
Split useEffect: one for query enable, one for data population
Replaced div separators with Divider component
Added array safety check to prevent dummy emails
EmailChipList.tsx:
Added disabled prop support
Disables input and prevents email removal when disabled
ProtectedRoute.tsx:
Removed "/" from REDIRECT_IGNORES to fix 404 — unauthenticated users now redirect to login
Result: Clearer UX with notifications enabled by default, threshold controls frequency, and no dummy emails pre-seeded.
@galvana
Copy link
Contributor

galvana commented Jan 12, 2026

Hey @jack-gale-ethyca what was the BE bug that Cursor found?

@jack-gale-ethyca
Copy link
Contributor Author

@galvana

The PUT endpoint for updating privacy request notifications was inconsistent: it used a hardcoded ", " to split email addresses, while the GET endpoint used the EMAIL_JOIN_STRING constant. This could cause issues if the constant changed and made the code harder to maintain.

Code Changes Made
The fix changed line 735 in src/fides/api/api/v1/endpoints/privacy_request_endpoints.py:

Before:
return PrivacyRequestNotificationInfo( email_addresses=info.email.split(", "), # ❌ Hardcoded string notify_after_failures=info.notify_after_failures,)

After:
return PrivacyRequestNotificationInfo( email_addresses=info.email.split(EMAIL_JOIN_STRING), # ✅ Uses constant notify_after_failures=info.notify_after_failures,)

This aligns the PUT endpoint with the GET endpoint (line 674), which already used EMAIL_JOIN_STRING, ensuring consistent behavior and maintainability.

Curious if you agree?

Removed all BE code, redirects, etc.

Simplifies the privacy request error notification email template to plain text copy, removing all styling, branding, and HTML structure.
Changes
Removed all CSS styling and complex HTML structure
Removed branding elements (logos, banners, footer)
Removed test email functionality
Simplified to minimal HTML with plain text copy only
Updated email copy to the new messaging
Rationale
Mailgun handles header, footer, and formatting. The template now provides only the email body copy, allowing Mailgun to apply consistent branding and styling.
Email Copy
The template now contains:
Subject: Important information about your privacy request
Body: Notification about processing issues and guidance to review in the admin dashboard
This change ensures Mailgun can properly inject branding and formatting while maintaining the required notification content.
Made sure the description copy styling is consistent
jack-gale-ethyca and others added 6 commits January 20, 2026 12:37
ENG-2303

Updates the privacy request error notification email template with new branding, improved copy, and enhanced UX in the notification configuration drawer.
If you saved an email, then closed and reopened the tray, the email would disappear. this Fixes that.
Co-authored-by: 3nder <speaker_ender@protonmail.com>
Co-authored-by: Adrian Galvan <adrian@ethyca.com>
jack-gale-ethyca and others added 9 commits January 28, 2026 10:00
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
…reAlerts.tsx

Co-authored-by: Jason Gill <jason.gill@ethyca.com>
- Fix import sorting in ConfigureAlerts.tsx
- Fix Prettier formatting (multiline to single line)
- Fix Tailwind classnames order
- Add changelog/7192.yaml entry
Copy link
Contributor

@gilluminate gilluminate left a comment

Choose a reason for hiding this comment

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

Code looks good overall! Nice work. There is one remaining bug I'm seeing, however. If there are email addresses saved, but the user clicks the Cancel button...reopening the drawer shows no email addresses saved. It seems to clear the field instead of restoring original values.

@gilluminate gilluminate self-requested a review January 28, 2026 16:56
Copy link
Contributor

@gilluminate gilluminate left a comment

Choose a reason for hiding this comment

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

Working great now. Nice work!

@jack-gale-ethyca jack-gale-ethyca added this pull request to the merge queue Jan 28, 2026
Merged via the queue into main with commit d54470c Jan 28, 2026
46 checks passed
@jack-gale-ethyca jack-gale-ethyca deleted the ENG-2303 branch January 28, 2026 22:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants