Skip to content

Conversation

@lionellbriones
Copy link
Contributor

@lionellbriones lionellbriones commented Nov 28, 2025

Description

Updated claims navigation and UI

https://www.figma.com/design/HTAO1SrmixV4ppv7qIvLoa/Metamask-Transaction-Shield?node-id=14873-117456&t=Vl0Gf1X669HvXRaY-4

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Updated claims navigation and UI

Related issues

Fixes:

Manual testing steps

  1. Go to this page...

Screenshots/Recordings

Before

After

Empty list
Screenshot 2025-12-04 at 2 10 26 AM

Navigation and UI changes

Screen.Recording.2025-12-04.at.2.25.46.AM.mov

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Revamps Transaction Shield claims management with a tabbed claims list (Pending/History), new empty states, updated routing, and aligned tests/i18n.

  • UI (Settings > Transaction Shield):
    • Claims List: Replaces list with tabbed view (Pending, Claim history); groups claims into Active, Completed, and Rejected; shows created date; adds primary/secondary "Submit a claim" buttons; removes per-item status tags.
    • Empty States: New empty views with CTA and icon (app/images/activity.svg).
    • Claims Form: Removes pending-claims banner; keeps guidelines link; no functional submit changes.
    • Navigation: "Submit a claim" from membership page now routes to claims list (TRANSACTION_SHIELD_CLAIM_ROUTES.BASE); back routes adjusted between list/new/view pages; settings title uses shieldClaimsListTitle.
  • State/Context:
    • ui/contexts/claims: Derives completedClaims (APPROVED) and rejectedClaims (REJECTED); keeps pendingClaims; removes claimNumber augmentation.
  • i18n:
    • Adds strings for groups, tabs, empty states; renames labels to Claims and Claims #$1; removes individual status label keys and legacy history/pending titles.
  • E2E Tests:
    • Updates flow to land on claims list then open the form via new CTA; removes status assertion; adds helpers for new buttons/selectors.
  • Assets:
    • Adds app/images/activity.svg for empty states.

Written by Cursor Bugbot for commit 622ab49. This will update automatically on new commits. Configure here.

@metamaskbot metamaskbot added the team-onboarding Onboarding team label Nov 28, 2025
@github-actions
Copy link
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbot
Copy link
Collaborator

metamaskbot commented Nov 28, 2025

✨ Files requiring CODEOWNER review ✨

🧪 @MetaMask/qa (1 files, +16 -9)
  • 📁 test/
    • 📁 e2e/
      • 📁 page-objects/
        • 📁 pages/
          • 📁 settings/
            • 📁 shield/
              • 📄 shield-claims-list-page.ts +16 -9

🔐 @MetaMask/web3auth (4 files, +211 -134)
  • 📁 ui/
    • 📁 contexts/
      • 📁 claims/
        • 📄 claims.tsx +20 -10
    • 📁 pages/
      • 📁 settings/
        • 📁 transaction-shield-tab/
          • 📁 claims-form/
            • 📄 claims-form.tsx +1 -14
          • 📁 claims-list/
            • 📄 claims-list.tsx +189 -109
            • 📄 transaction-shield.tsx +1 -1

@metamaskbot
Copy link
Collaborator

Builds ready [879bc27]
UI Startup Metrics (1322 ± 108 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13221059161610814061501
load110790813639411681258
domContentLoaded110090413539311621240
domInteractive2816102212490
firstPaint54898126641410511204
backgroundConnect23220831418241272
firstReactRender322080113857
getState3816194234373
initialActions107112
loadScripts8756951102909371027
setupStore1374671433
numNetworkReqs1257821573
BrowserifyPower User HomeuiStartup19931639271823121332536
load99487314291209981304
domContentLoaded98086514211209821298
domInteractive3217149233188
firstPaint5069213253709271228
backgroundConnect249197709101225549
firstReactRender543999105974
getState18213965669184217
initialActions104112
loadScripts77866312101197821093
setupStore19114162331
numNetworkReqs1256840865139264
WebpackStandard HomeuiStartup8316981187878701009
load64357092677679815
domContentLoaded63856692177674809
domInteractive2715174262098
firstPaint23592888185212701
backgroundConnect12576101229
firstReactRender27204063236
getState251279113242
initialActions103112
loadScripts63556490475672800
setupStore1072131318
numNetworkReqs1257720575
WebpackPower User HomeuiStartup16791320256826819432176
load6895951190106703962
domContentLoaded6795871183107693957
domInteractive37191473033124
firstPaint294901195213314726
backgroundConnect104864418871597
firstReactRender6147123116578
getState18314168986177245
initialActions103112
loadScripts6765851174106691947
setupStore201050102347
numNetworkReqs1726841279213387
FirefoxBrowserifyStandard HomeuiStartup13661100184115214731652
load1118952142310111731337
domContentLoaded1117951142310111721337
domInteractive70311442990123
firstPaint------
backgroundConnect47221632953106
firstReactRender26195992748
getState1177481122
initialActions102122
loadScripts108793513699111411272
setupStore166211291323
numNetworkReqs1256817764
BrowserifyPower User HomeuiStartup26401900547859628414014
load1174937258929811331711
domContentLoaded1174936258229811321711
domInteractive10933566106104400
firstPaint------
backgroundConnect115231132128124285
firstReactRender59331461760103
getState27852860207360764
initialActions2032324
loadScripts1127916234323810971504
setupStore1805974224245695
numNetworkReqs102623116380247
WebpackStandard HomeuiStartup15001274213816315761792
load12391078152110512951450
domContentLoaded12381078152110512941450
domInteractive66272414291154
firstPaint------
backgroundConnect48162323446109
firstReactRender26207772737
getState157134191348
initialActions103122
loadScripts1211106214469712701418
setupStore165275281435
numNetworkReqs1256816761
WebpackPower User HomeuiStartup29462343535868130014734
load14531141298537514552590
domContentLoaded14531141298437514552589
domInteractive1103151611597469
firstPaint------
backgroundConnect155331672240129480
firstReactRender67381902771132
getState285691239233380813
initialActions3089923
loadScripts13771123260526113731812
setupStore16251150207191650
numNetworkReqs1006124752101231
📊 Page Load Benchmark Results

Current Commit: 879bc27 | Date: 11/28/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±41ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 727ms (±39ms) 🟢 | historical mean value: 720ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±13ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 41ms 1.02s 1.35s 1.08s 1.35s
domContentLoaded 727ms 39ms 705ms 1.03s 747ms 1.03s
firstPaint 77ms 13ms 64ms 196ms 84ms 196ms
firstContentfulPaint 77ms 13ms 64ms 196ms 84ms 196ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 58 Bytes (0%)
  • ui: 511 Bytes (0.01%)
  • common: -295 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [477ee7e]
UI Startup Metrics (1240 ± 105 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12401034150510512991448
load103387612779210821223
domContentLoaded102787212679110751216
domInteractive241597182180
firstPaint4558112863849501209
backgroundConnect21719927312223242
firstReactRender311963103851
getState3316100134157
initialActions107113
loadScripts8176581067898521006
setupStore1262641320
numNetworkReqs1056416562
BrowserifyPower User HomeuiStartup20481751259121821742475
load1040906172914110831350
domContentLoaded1028896172214110761330
domInteractive33182052729102
firstPaint6059914334149851300
backgroundConnect283206809143241679
firstReactRender52417775764
getState20415272578207298
initialActions103112
loadScripts81569114981398421124
setupStore1774271736
numNetworkReqs79641662275140
WebpackStandard HomeuiStartup799690102778824990
load62055583562650766
domContentLoaded61555182961646761
domInteractive2414103192184
firstPaint20684834157192726
backgroundConnect10581101018
firstReactRender26193963137
getState251363103243
initialActions104111
loadScripts61354982060644759
setupStore1052941218
numNetworkReqs1057416557
WebpackPower User HomeuiStartup15811212224126718262101
load6765671222109698891
domContentLoaded6685611217108686885
domInteractive36173764429117
firstPaint292106898213307744
backgroundConnect88862817924557
firstReactRender584595106478
getState18214466453191227
initialActions103112
loadScripts6655591207107684876
setupStore17965111543
numNetworkReqs81622523574150
FirefoxBrowserifyStandard HomeuiStartup14331166253318615321714
load1170999223314412331369
domContentLoaded1170999223314412321369
domInteractive67351693489138
firstPaint------
backgroundConnect53222513857135
firstReactRender26204862839
getState14775111429
initialActions103122
loadScripts1142981220513912021310
setupStore157126171635
numNetworkReqs1256817763
BrowserifyPower User HomeuiStartup30912186474886240014548
load1388975276747713382507
domContentLoaded1388975276647713362507
domInteractive973336664104250
firstPaint------
backgroundConnect2522712173322941148
firstReactRender66362683567113
getState301821225268287995
initialActions207123
loadScripts1257959260933512832192
setupStore14861219232132762
numNetworkReqs85462183895179
WebpackStandard HomeuiStartup15131273187814316001816
load12501083154410413181450
domContentLoaded12501083154410413181450
domInteractive57271633280132
firstPaint------
backgroundConnect55223304450136
firstReactRender282084102938
getState137213211320
initialActions103122
loadScripts1219106215089412801381
setupStore156106161442
numNetworkReqs1256717764
WebpackPower User HomeuiStartup31402387524375238114473
load15791116275745216312606
domContentLoaded15791115275745216312605
domInteractive117321135150108282
firstPaint------
backgroundConnect2262814193211981066
firstReactRender72413304169145
getState330801137283552858
initialActions40448323
loadScripts14291099260730714772162
setupStore1139763153109469
numNetworkReqs865617633105161
📊 Page Load Benchmark Results

Current Commit: 477ee7e | Date: 12/3/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±98ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 722ms (±116ms) 🟢 | historical mean value: 724ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 93ms (±184ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 98ms 1.00s 1.97s 1.04s 1.97s
domContentLoaded 722ms 116ms 693ms 1.85s 730ms 1.85s
firstPaint 93ms 184ms 60ms 1.92s 84ms 1.92s
firstContentfulPaint 93ms 184ms 60ms 1.92s 84ms 1.92s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 58 Bytes (0%)
  • ui: 492 Bytes (0.01%)
  • common: -302 Bytes (0%)

@github-actions github-actions bot added size-L and removed size-M labels Dec 3, 2025
@lionellbriones lionellbriones marked this pull request as ready for review December 3, 2025 18:28
@lionellbriones lionellbriones requested a review from a team as a code owner December 3, 2025 18:28
}, [claims]);

const rejectedClaims = useMemo(() => {
return claims.filter((claim) => claim.status === ClaimStatusEnum.REJECTED);
Copy link

Choose a reason for hiding this comment

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

Bug: Claims with UNKNOWN status are silently dropped from UI

The previous historyClaims filter used negation (!PENDING_CLAIM_STATUSES.includes(claim.status)) to capture all non-pending claims, including those with UNKNOWN status. The new implementation only filters for APPROVED into completedClaims and REJECTED into rejectedClaims, which means any claim with UNKNOWN status (as shown in the removed CLAIM_STATUS_MAP) will not appear in any list and users will be unable to see or access these claims.

Fix in Cursor Fix in Web

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is ok. Claims unknown shouldn't be shown on UI. can you confirm @hieu-w ?

},
"shieldClaimsNumber": {
"message": "Claim #$1",
"message": "Claims #$1",
Copy link

Choose a reason for hiding this comment

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

Bug: Grammar error in claim number locale string

The shieldClaimsNumber locale message was changed from "Claim #$1" to "Claims #$1". When displaying an individual claim number (used in claims-list.tsx line 65 to render each claim item), the output would be "Claims #123" instead of the grammatically correct "Claim #123". The singular form is appropriate when referencing a specific claim's identifier.

Additional Locations (1)

Fix in Cursor Fix in Web

@lionellbriones lionellbriones requested a review from a team as a code owner December 3, 2025 20:17
@metamaskbot
Copy link
Collaborator

Builds ready [622ab49]
UI Startup Metrics (1320 ± 122 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13201077172112214011526
load1099902152711011541277
domContentLoaded1092899152110911481271
domInteractive30161752623102
firstPaint50888137142510451270
backgroundConnect23020627914239257
firstReactRender31207293552
getState3716114174568
initialActions106112
loadScripts86969012651049191042
setupStore1373461426
numNetworkReqs1157116559
BrowserifyPower User HomeuiStartup20711600277123521962525
load1067910143312111021339
domContentLoaded1055905142612110911332
domInteractive3418118223592
firstPaint551109140541310081323
backgroundConnect278207839138245683
firstReactRender5740132136184
getState20614671880216306
initialActions103112
loadScripts83470412031188651113
setupStore17105981738
numNetworkReqs77632142572144
WebpackStandard HomeuiStartup838705123982874985
load64657695370677798
domContentLoaded64157194669673791
domInteractive2817139222391
firstPaint215102817143200640
backgroundConnect1053751118
firstReactRender3020203193439
getState261359103447
initialActions104112
loadScripts63856893768671782
setupStore1152131317
numNetworkReqs1057316558
WebpackPower User HomeuiStartup16701260222027119012185
load6905901202103700924
domContentLoaded6825841184103694917
domInteractive33171532730114
firstPaint280981202208279676
backgroundConnect118861820485565
firstReactRender6047119106379
getState18014225222192233
initialActions104112
loadScripts6795821174102692908
setupStore171061111646
numNetworkReqs79622373173156
FirefoxBrowserifyStandard HomeuiStartup13151098170614614201628
load108692713559611361289
domContentLoaded108692713559711351288
domInteractive59311973282131
firstPaint------
backgroundConnect45221852946105
firstReactRender24185782442
getState14620422932
initialActions103122
loadScripts105991013269111161234
setupStore135210221130
numNetworkReqs1256817662
BrowserifyPower User HomeuiStartup29741913485881638164437
load1304950252542913032413
domContentLoaded1303950252542913032412
domInteractive93313446997298
firstPaint------
backgroundConnect2143011913111811141
firstReactRender61371382466116
getState301861882309335857
initialActions2033323
loadScripts1180931230428712391897
setupStore14971028237117759
numNetworkReqs77591412372131
WebpackStandard HomeuiStartup15741301216516316461991
load1290108915289413461477
domContentLoaded1290108915289413461476
domInteractive71281583494137
firstPaint------
backgroundConnect55221993565136
firstReactRender29228983239
getState15771131451
initialActions103122
loadScripts1259107414848513201426
setupStore206239321685
numNetworkReqs1257018765
WebpackPower User HomeuiStartup33002351556186341334583
load16571144293252720762712
domContentLoaded16561144293252720762712
domInteractive138301391223102370
firstPaint------
backgroundConnect2252613172942481020
firstReactRender70382914764201
getState30474980259437841
initialActions3034523
loadScripts15591128286946416332692
setupStore11761159216114647
numNetworkReqs77571332372129
📊 Page Load Benchmark Results

Current Commit: 622ab49 | Date: 12/3/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±113ms) 🟡 | historical mean value: 1.04s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 725ms (±111ms) 🟢 | historical mean value: 724ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 84ms (±93ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 113ms 1.01s 2.14s 1.06s 2.14s
domContentLoaded 725ms 111ms 699ms 1.80s 747ms 1.80s
firstPaint 84ms 93ms 56ms 1.00s 84ms 1.00s
firstContentfulPaint 84ms 93ms 56ms 1.00s 84ms 1.00s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 910 Bytes (0.01%)
  • common: -39 Bytes (0%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants