Repository navigation
fix(frontend): guard campaign loading, filter a11y, SSE backoff cap, and referral copy (#1477, #1479, #1480, #1481) - #1506
Merged
joelpeace48-cell merged 1 commit intoOct 22, 2026
Conversation
…and referral copy (FinesseStudioLab#1477, FinesseStudioLab#1479, FinesseStudioLab#1480, FinesseStudioLab#1481) - FinesseStudioLab#1477: Guard campaign property accesses with optional chaining, support loading/error/fallback states, and add Vitest tests for undefined campaign data - FinesseStudioLab#1479: Add accessible combobox dropdown with full keyboard navigation (arrow keys, Enter, Escape) and ARIA attributes to campaign filters, with axe-core e2e test - FinesseStudioLab#1480: Enforce 30s cap on SSE reconnection exponential backoff, add visible 'reconnecting…' indicator in UI, and unit test backoff curve hitting the cap - FinesseStudioLab#1481: Add execCommand fallback for non-HTTPS contexts on referral link copy, show error toast prompting manual copy on failure, and add unit test simulating clipboard API unavailability Closes FinesseStudioLab#1477, Closes FinesseStudioLab#1479, Closes FinesseStudioLab#1480, Closes FinesseStudioLab#1481
|
@Rampop01 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
joelpeace48-cell
merged commit Oct 22, 2026
44e5b5d
into
FinesseStudioLab:main
5 of 21 checks passed
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.
Summary
Targeted fixes addressing 4 assigned frontend issues (#1477, #1479, #1480, #1481) for Stellar Wave:
frontend: campaign detail page crashes with undefined when campaign data is loading #1477 — Campaign detail loading crash guard
campaignproperty accesses (campaign?.id,campaign?.name,campaign?.status,campaign?.description,campaign?.rewardPerAction,campaign?.createdAt,campaign?.tasks,campaign?.referralBonusPoints,campaign?.contractId) with optional chaining and fallback defaults inCampaignDetail.jsxandCampaignDetail.tsx.frontend/src/CampaignDetail.test.jsxcovering undefined campaign data, loading states, and error states.frontend: no keyboard navigation support in campaign filter dropdowns #1479 — Campaign filter dropdown keyboard navigation & ARIA
CampaignFilters.jsx.ArrowDown/ArrowUpto navigate options,Enter/Spaceto select,Escapeto close,Home/Endto jump, andTabto blur.role="combobox",aria-haspopup="listbox",aria-expanded,aria-controls,aria-activedescendant,role="listbox",role="option",aria-selected.frontend/tests/e2e/accessibility.spec.tsand unit tests inCampaignFilters.test.jsx.frontend: SSE event reconnection logic has exponential backoff but no max retry cap #1480 — SSE reconnection backoff cap & UI indicator
DEFAULT_MAX_DELAY_MS = 30_000).CampaignDetail.jsxandLiveCampaignUpdates.jsx.frontend/src/hooks/realtimeClient.test.jsverifying the backoff curve doubles and stays capped at 30 seconds across repeated connection failures.frontend: referral link copy button does not fall back when clipboard API is unavailable #1481 — Referral link copy fallback & failure toast
document.execCommand('copy')fallback for non-HTTPS contexts or older browsers whennavigator.clipboardis unavailable.useToastprompting manual copy if both clipboard API and fallback fail.frontend/src/ReferralLinkGenerator.test.jsxverifying standard clipboard copy, execCommand fallback when clipboard is undefined, and failure toast notification.Motivation / Context
Closes #1477
Closes #1479
Closes #1480
Closes #1481
Changes
frontend/src/CampaignDetail.jsx: Optional chaining guards on all nested campaign properties, loading/error states, reconnecting badge, execCommand fallback.frontend/src/CampaignDetail.css: Added.detail-reconnecting-badgestyle with pulse animation.frontend/src/CampaignDetail.test.jsx: Vitest snapshot test suite with undefined campaign data.frontend/src/components/CampaignDetail.tsx: Guarded stats grid nested accesses with optional chaining.frontend/src/components/CampaignFilters.jsx: Accessible keyboard combobox/listbox with ARIA roles and expanded state.frontend/src/components/CampaignFilters.test.jsx: Unit tests for arrow keys, Enter, and Escape navigation.frontend/src/components/LiveCampaignUpdates.jsx: Added 'Reconnecting…' indicator state.frontend/src/hooks/realtimeClient.test.js: Unit test verifying backoff delay caps at 30s.frontend/src/ReferralLinkGenerator.jsx: Added execCommand fallback and toast on copy failure.frontend/src/ReferralLinkGenerator.test.jsx: Unit tests simulating clipboard API unavailability and fallback/toast behavior.frontend/tests/e2e/accessibility.spec.ts: Added axe-core test for campaign filter dropdowns.