feat(newsletter): Member subscription self management - #678
Closed
libby-correctiv wants to merge 37 commits into
Closed
feat(newsletter): Member subscription self management#678libby-correctiv wants to merge 37 commits into
libby-correctiv wants to merge 37 commits into
Conversation
frontend-old must keep the pre-migration wording while apps/frontend picks up the new copy, so changed values now live under a "-nuxt" suffixed sibling key instead of overwriting the original. Also restores mfa.result.successful/title and mfa.secretInput.desc, which this branch had deleted but frontend-old still references. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Nothing imports reka-ui directly; @nuxt/ui already depends on the same version (2.9.9) transitively. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ContactUpdateAccount, SetupForm, reset-password, and the admin contacts page are still 1:1 copies of their frontend-old counterparts (not yet redesigned with Nuxt UI), so they should keep the original wording like frontend-old rather than the new copy. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Extracts the inline copy-to-clipboard + checkmark-feedback logic in SetMFA.vue into a reusable Nuxt UI component, mirroring AppCopyButton's "just pass text" API. Replaces the @vueuse/core useClipboard usage, so the dependency is no longer needed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AppCodeInput's modelValue now stores raw number|undefined per box instead of converting to strings, matching what UPinInput actually emits. isCodeComplete (moved to utils/pin-input.ts) checks for holes anywhere in the array, not just via .length, which previously let a code with a backspaced middle digit pass as complete. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AppIconBadge is only used by AppSectionCard now, not modal titles; AppModalActions' usage list was redundant elaboration. addressLine2 now matches the other delivery-address fields (plain '' default) since none of them are unconditionally required. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…den loading state Renames the enable-side identifiers (createMfa, createError, creating, onCreateError, pin, showMFASettingsModal, etc.) to match the disable side's naming (enableMfa, enableError, enabling, onEnableError, enableToken, showEnableModal), and drops "Confirm" from the disable modal's names to match the enable modal's shorter naming. Also wraps the loading-state toggle in try/finally so it can't get stuck if something unexpected throws. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Notes that the rule also applies to teleported UModal content, not just the page root, so a future reader isn't left guessing why a modal's <p>/<h2> picked up page-level sizing.
Replaces the two standalone refs bridged into a reactive() wrapper (only to satisfy UForm's :state prop) with one reactive object as the single source of truth, matching AccountForm's pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
libby-correctiv
force-pushed
the
feat/nuxt-ui-account-page
branch
from
August 19, 2026 15:34
586ed87 to
7624d96
Compare
Contributor
Author
|
Rebasing |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a "Subscriptions" tab to the account page where members can view and unsubscribe from individual newsletter groups. Also makes group updates safer against a narrow race condition where a group added on Mailchimp's side could get overwritten if the sync webhook is down or hasn't caught up yet.
Changes
Frontend
AccountNewsletterSubscriptions.vuecomponent and locale stringsGET/DELETE /contact/:id/newsletter-groups[/:groupId]endpoints + client methodsBackend
mergeGroupsoption withNewsletterGroupChange('add' | 'remove' | 'replace') -add/removenow scope the Mailchimpinterestspayload to only the group(s) being changed, instead of reasserting the full list, to avoid overwriting a group Mailchimp already knows about that beabee's local DB hasn't caught up on yetinterestsfrom the Mailchimp payload entirely, instead of reaffirming the full list on unrelated updatesNewsletterService.upsertContact's invalid-group recovery - previously retried indefinitely if a group ID was permanently invalid (not just stale), silently hanging instead of surfacing an errorTesting
mailchimp.test.tscovering the payload shape for add/remove/replace;newsletter.test.tsupdated.yarn testpassing.Screenshots
Checklist before requesting a review
yarn checkand addressed any problemsChecklist before merging