Fix the following React Review diagnostics in my codebase.
## Errors (1)
1. [error] no-mutable-in-deps — src/components/AppLayout.tsx:250
Mutable global "location.*" in deps — values like `location.pathname` can change without triggering a re-render, so they can't drive effect re-runs. Subscribe with useSyncExternalStore or read inside the effect
## Warnings (785)
2. [warning] no-inline-bounce-easing — src/components/SendReceiptModal.tsx:52
Bounce/elastic easing feels dated — real objects decelerate smoothly. Use ease-out or cubic-bezier(0.16, 1, 0.3, 1) instead
3. [warning] no-did-update-set-state — src/components/RouteErrorBoundary.tsx:35
Do not use `this.setState` in `componentDidUpdate` — it can cause infinite loops.
4. [warning] no-giant-component — src/components/AppLayout.tsx:36
Component "AppLayout" is 574 lines — consider breaking it into smaller focused components
5. [warning] prefer-useReducer — src/components/AppLayout.tsx:36
Component "AppLayout" has 9 useState calls — consider useReducer for related state
6. [warning] js-tosorted-immutable — src/components/AppLayout.tsx:97
[...array].sort() — use array.toSorted() for immutable sorting (ES2023)
7. [warning] async-defer-await — src/components/AppLayout.tsx:186
await blocks the function before an early-return that doesn't use the awaited value — move the await after the synchronous guard so the skip path stays fast
8. [warning] no-cascading-set-state — src/components/AppLayout.tsx:214
3 setState calls in a single useEffect — consider using useReducer or deriving state
9. [warning] no-chain-state-updates — src/components/AppLayout.tsx:287
Avoid chaining state changes. When possible, update all relevant state simultaneously.
10. [warning] no-chain-state-updates — src/components/AppLayout.tsx:288
Avoid chaining state changes. When possible, update all relevant state simultaneously.
11. [warning] no-chain-state-updates — src/components/AppLayout.tsx:296
Avoid chaining state changes. When possible, update all relevant state simultaneously.
12. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:316
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
13. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:451
Prefer the semantic `<dialog>` element over `role="dialog"` on a generic tag.
14. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:469
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
15. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:486
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
16. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:499
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
17. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:511
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
18. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:581
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
19. [warning] prefer-tag-over-role — src/components/AppLayout.tsx:599
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
20. [warning] design-no-three-period-ellipsis — src/components/AppLayout.tsx:599
Three-period ellipsis ("...") in JSX text — use the actual ellipsis character "…" (or `…`)
21. [warning] no-inline-bounce-easing — src/components/SwapReceiptModal.tsx:56
Bounce/elastic easing feels dated — real objects decelerate smoothly. Use ease-out or cubic-bezier(0.16, 1, 0.3, 1) instead
22. [warning] no-inline-bounce-easing — src/components/UnshieldReceiptModal.tsx:51
Bounce/elastic easing feels dated — real objects decelerate smoothly. Use ease-out or cubic-bezier(0.16, 1, 0.3, 1) instead
23. [warning] no-adjust-state-on-prop-change — src/components/TransactionStatusToast.tsx:64
Avoid adjusting state when a prop changes. Instead, adjust the state directly during render, or refactor your state to avoid this need entirely.
24. [warning] no-derived-state-effect — src/components/TransactionStatusToast.tsx:63
State reset in useEffect — use a key prop to reset component state when props change
25. [warning] no-reset-all-state-on-prop-change — src/components/TransactionStatusToast.tsx:63
Avoid resetting all state when a prop changes. Instead, if "phase" is a key, pass it as `key` so React will reset the component's state.
26. [warning] no-giant-component — src/data/context/PrivacyFlowContext.tsx:951
Component "PrivacyFlowProvider" is 2570 lines — consider breaking it into smaller focused components
27. [warning] prefer-useReducer — src/data/context/PrivacyFlowContext.tsx:951
Component "PrivacyFlowProvider" has 207 useState calls — consider useReducer for related state
28. [warning] no-cascading-set-state — src/data/context/PrivacyFlowContext.tsx:1879
6 setState calls in a single useEffect — consider using useReducer or deriving state
29. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:1982
React Hook `useEffect` is missing dependency `refreshPrivateCoreOperatorSummary` — list it in the dependency array, or call the hook unconditionally.
30. [warning] no-cascading-set-state — src/data/context/PrivacyFlowContext.tsx:1934
4 setState calls in a single useEffect — consider using useReducer or deriving state
31. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:2005
React Hook `useCallback` is missing dependency `refreshPrivateCoreOperatorSummary` — list it in the dependency array, or call the hook unconditionally.
32. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:2749
React Hook `useCallback` is missing dependency `refreshPrivateCoreOperatorSummary` — list it in the dependency array, or call the hook unconditionally.
33. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:2968
React Hook `useCallback` has an unnecessary dependency `privateCoreLedger` — it isn't referenced inside the callback.
34. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:3443
React Hook `useMemo` has duplicate dependency `privateCoreOperatorContractStateVersion`.
35. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:3444
React Hook `useMemo` has duplicate dependency `privateCoreOperatorContractVersion`.
36. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:3445
React Hook `useMemo` has duplicate dependency `privateCoreOperatorContractSummaryVersion`.
37. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:3446
React Hook `useMemo` has duplicate dependency `privateCoreOperatorStatusVersion`.
38. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:3447
React Hook `useMemo` has duplicate dependency `privateCoreOperatorStatusKind`.
39. [warning] exhaustive-deps — src/data/context/PrivacyFlowContext.tsx:3302
React Hook `useMemo` is missing dependency `privateCoreOperatorRawShippingDecisionNote, privateCoreOperatorRawShippingDecisionStatus, privateCoreOperatorSwapResultingRootLinkedProof, privateCoreOperatorSwapResultingRootRecord, privateCoreOperatorRawSwapContinuityNote, privateCoreOperatorRawSwapContinuityStatus, privateCoreOperatorRawSwapBoundaryNote, privateCoreOperatorRawSwapBoundaryStatus, privateCoreOperatorRawSwapResultingRootNote, privateCoreOperatorRawSwapResultingRootRegistrationNote, privateCoreOperatorRawSwapResultingRootRegistrationStatus, privateCoreOperatorSwapResultingRootProofLinkStatus, privateCoreOperatorRawSwapResultingRootStatus, privateCoreOperatorSwapBoundarySummary.primaryNote, privateCoreOperatorSwapBoundarySummary.statusLabel, privateCoreOperatorSwapContinuitySummary.primaryNote, privateCoreOperatorSwapContinuitySummary.statusLabel, privateCoreOperatorSwapResultingRootSummary.primaryNote, privateCoreOperatorSwapResultingRootRegistrationSummary.primaryNote, privateCoreOperatorSwapResultingRootRegistrationSummary.statusLabel, privateCoreOperatorSwapResultingRootSummary.statusLabel, privateCoreOperatorSendResultingRootSummary.primaryNote, privateCoreOperatorSendResultingRootRegistrationSummary.primaryNote, privateCoreOperatorSendResultingRootRegistrationSummary.statusLabel, privateCoreOperatorSendResultingRootSummary.statusLabel` — list it in the dependency array, or call the hook unconditionally.
40. [warning] js-min-max-loop — src/data/context/WalletContext.tsx:84
array.sort()[0] for min/max — use Math.min(...array) instead (O(n) vs O(n log n))
41. [warning] js-tosorted-immutable — src/data/context/WalletContext.tsx:84
[...array].sort() — use array.toSorted() for immutable sorting (ES2023)
42. [warning] async-await-in-loop — src/data/context/WalletContext.tsx:128
await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
43. [warning] async-await-in-loop — src/data/context/WalletContext.tsx:134
await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
44. [warning] no-cascading-set-state — src/data/context/WalletContext.tsx:185
14 setState calls in a single useEffect — consider using useReducer or deriving state
45. [warning] no-giant-component — src/pages/AppDashboardPage.tsx:39
Component "AppDashboardPage" is 334 lines — consider breaking it into smaller focused components
46. [warning] no-giant-component — src/components/InternalCanonicalLifecyclePanel.tsx:346
Component "InternalCanonicalLifecyclePanel" is 5088 lines — consider breaking it into smaller focused components
47. [warning] control-has-associated-label — src/components/InternalCanonicalLifecyclePanel.tsx:983
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
48. [warning] control-has-associated-label — src/components/InternalCanonicalLifecyclePanel.tsx:1001
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
49. [warning] no-initialize-state — src/pages/HomePage.tsx:159
Avoid initializing state in an effect. Instead, initialize "navScrolled"'s `useState()` with "undefined". For SSR hydration, prefer `useSyncExternalStore()`.
50. [warning] control-has-associated-label — src/pages/PayPage.tsx:82
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
51. [warning] no-giant-component — src/pages/PayPage.tsx:133
Component "PayPage" is 705 lines — consider breaking it into smaller focused components
52. [warning] prefer-useReducer — src/pages/PayPage.tsx:133
Component "PayPage" has 13 useState calls — consider useReducer for related state
53. [warning] design-no-em-dash-in-jsx-text — src/pages/PayPage.tsx:381
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
54. [warning] prefer-tag-over-role — src/pages/PayPage.tsx:478
Prefer the semantic `<address>` element over `role="group"` on a generic tag.
55. [warning] no-effect-chain — src/pages/SendPage.tsx:1117
useEffect reacts to "selectedAsset" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
56. [warning] no-effect-chain — src/pages/SendPage.tsx:1165
useEffect reacts to "pendingSpentMarker" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
57. [warning] no-effect-chain — src/pages/SendPage.tsx:1265
useEffect reacts to "pendingSendBridge" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
58. [warning] no-giant-component — src/pages/SendPage.tsx:199
Component "SendPage" is 2907 lines — consider breaking it into smaller focused components
59. [warning] prefer-useReducer — src/pages/SendPage.tsx:199
Component "SendPage" has 17 useState calls — consider useReducer for related state
60. [warning] rerender-state-only-in-handlers — src/pages/SendPage.tsx:441
useState "pendingSpentMarker" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
61. [warning] rerender-state-only-in-handlers — src/pages/SendPage.tsx:442
useState "pendingSendBridge" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
62. [warning] rerender-lazy-state-init — src/pages/SendPage.tsx:421
useState(getInitialSendAsset()) calls initializer on every render — use useState(() => getInitialSendAsset()) for lazy initialization
63. [warning] no-cascading-set-state — src/pages/SendPage.tsx:568
3 setState calls in a single useEffect — consider using useReducer or deriving state
64. [warning] no-chain-state-updates — src/pages/SendPage.tsx:579
Avoid chaining state changes. When possible, update all relevant state simultaneously.
65. [warning] no-chain-state-updates — src/pages/SendPage.tsx:580
Avoid chaining state changes. When possible, update all relevant state simultaneously.
66. [warning] no-chain-state-updates — src/pages/SendPage.tsx:581
Avoid chaining state changes. When possible, update all relevant state simultaneously.
67. [warning] no-cascading-set-state — src/pages/SendPage.tsx:584
4 setState calls in a single useEffect — consider using useReducer or deriving state
68. [warning] no-chain-state-updates — src/pages/SendPage.tsx:586
Avoid chaining state changes. When possible, update all relevant state simultaneously.
69. [warning] no-chain-state-updates — src/pages/SendPage.tsx:587
Avoid chaining state changes. When possible, update all relevant state simultaneously.
70. [warning] no-chain-state-updates — src/pages/SendPage.tsx:597
Avoid chaining state changes. When possible, update all relevant state simultaneously.
71. [warning] no-derived-state — src/pages/SendPage.tsx:596
Avoid storing derived state. Compute "selectedNoteId" directly during render, optionally with `useMemo` if it's expensive.
72. [warning] no-event-handler — src/pages/SendPage.tsx:592
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
73. [warning] no-event-handler — src/pages/SendPage.tsx:563
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
74. [warning] exhaustive-deps — src/pages/SendPage.tsx:926
React Hook `useMemo` is missing dependency `privateCoreOwner` — list it in the dependency array, or call the hook unconditionally.
75. [warning] exhaustive-deps — src/pages/SendPage.tsx:948
React Hook `useMemo` has an unnecessary dependency `status` — it isn't referenced inside the callback.
76. [warning] no-chain-state-updates — src/pages/SendPage.tsx:1059
Avoid chaining state changes. When possible, update all relevant state simultaneously.
77. [warning] no-event-handler — src/pages/SendPage.tsx:874
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
78. [warning] no-event-handler — src/pages/SendPage.tsx:602
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
79. [warning] no-event-handler — src/pages/SendPage.tsx:661
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
80. [warning] no-event-handler — src/pages/SendPage.tsx:675
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
81. [warning] no-event-handler — src/pages/SendPage.tsx:677
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
82. [warning] no-event-handler — src/pages/SendPage.tsx:988
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
83. [warning] no-event-handler — src/pages/SendPage.tsx:990
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
84. [warning] no-event-handler — src/pages/SendPage.tsx:996
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
85. [warning] no-event-handler — src/pages/SendPage.tsx:1019
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
86. [warning] no-event-handler — src/pages/SendPage.tsx:1032
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
87. [warning] no-chain-state-updates — src/pages/SendPage.tsx:1118
Avoid chaining state changes. When possible, update all relevant state simultaneously.
88. [warning] no-cascading-set-state — src/pages/SendPage.tsx:1129
4 setState calls in a single useEffect — consider using useReducer or deriving state
89. [warning] no-cascading-set-state — src/pages/SendPage.tsx:1150
4 setState calls in a single useEffect — consider using useReducer or deriving state
90. [warning] exhaustive-deps — src/pages/SendPage.tsx:1227
React Hook `useEffect` is missing dependency `recipient.trim` — list it in the dependency array, or call the hook unconditionally.
91. [warning] no-cascading-set-state — src/pages/SendPage.tsx:1165
4 setState calls in a single useEffect — consider using useReducer or deriving state
92. [warning] no-chain-state-updates — src/pages/SendPage.tsx:1175
Avoid chaining state changes. When possible, update all relevant state simultaneously.
93. [warning] no-cascading-set-state — src/pages/SendPage.tsx:1237
3 setState calls in a single useEffect — consider using useReducer or deriving state
94. [warning] no-cascading-set-state — src/pages/SendPage.tsx:1251
3 setState calls in a single useEffect — consider using useReducer or deriving state
95. [warning] design-no-em-dash-in-jsx-text — src/pages/SendPage.tsx:1616
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
96. [warning] control-has-associated-label — src/pages/SendPage.tsx:1695
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
97. [warning] label-has-associated-control — src/pages/SendPage.tsx:1785
A form label must be associated with a control — use `htmlFor` or nest the input.
98. [warning] no-effect-chain — src/pages/ShieldPage.tsx:816
useEffect reacts to "status" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
99. [warning] no-effect-chain — src/pages/ShieldPage.tsx:1426
useEffect reacts to "pendingPublicRoute" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
100. [warning] no-effect-chain — src/pages/ShieldPage.tsx:1446
useEffect reacts to "pendingPublicRoute" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
101. [warning] no-effect-chain — src/pages/ShieldPage.tsx:371
useEffect reacts to "pendingShieldAsset" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
102. [warning] no-giant-component — src/pages/ShieldPage.tsx:327
Component "ShieldPage" is 2177 lines — consider breaking it into smaller focused components
103. [warning] prefer-useReducer — src/pages/ShieldPage.tsx:327
Component "ShieldPage" has 22 useState calls — consider useReducer for related state
104. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:345
useState "pendingShieldAmount" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
105. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:346
useState "pendingShieldAmountDisplay" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
106. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:347
useState "pendingShieldMemoCreatedAt" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
107. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:348
useState "pendingDepositSignature" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
108. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:350
useState "pendingShieldTarget" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
109. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:351
useState "pendingShieldOwnerContext" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
110. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:353
useState "pendingPublicRoute" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
111. [warning] rerender-state-only-in-handlers — src/pages/ShieldPage.tsx:354
useState "pendingProtocolSettlement" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
112. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:373
Avoid chaining state changes. When possible, update all relevant state simultaneously.
113. [warning] no-event-handler — src/pages/ShieldPage.tsx:372
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
114. [warning] no-derived-state — src/pages/ShieldPage.tsx:426
Avoid storing derived state. Compute "selectedSourceAssetId" directly during render, optionally with `useMemo` if it's expensive.
115. [warning] no-event-handler — src/pages/ShieldPage.tsx:404
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
116. [warning] js-combine-iterations — src/pages/ShieldPage.tsx:540
.filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of
117. [warning] no-derived-state — src/pages/ShieldPage.tsx:604
Avoid storing derived state. Compute "selectedSourceAssetId" directly during render, optionally with `useMemo` if it's expensive.
118. [warning] async-await-in-loop — src/pages/ShieldPage.tsx:686
await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
119. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:699
9 setState calls in a single useEffect — consider using useReducer or deriving state
120. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:816
3 setState calls in a single useEffect — consider using useReducer or deriving state
121. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:827
Avoid chaining state changes. When possible, update all relevant state simultaneously.
122. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:828
Avoid chaining state changes. When possible, update all relevant state simultaneously.
123. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1282
13 setState calls in a single useEffect — consider using useReducer or deriving state
124. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1284
Avoid chaining state changes. When possible, update all relevant state simultaneously.
125. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1289
Avoid chaining state changes. When possible, update all relevant state simultaneously.
126. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1290
Avoid chaining state changes. When possible, update all relevant state simultaneously.
127. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1291
Avoid chaining state changes. When possible, update all relevant state simultaneously.
128. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1292
Avoid chaining state changes. When possible, update all relevant state simultaneously.
129. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1293
Avoid chaining state changes. When possible, update all relevant state simultaneously.
130. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1294
Avoid chaining state changes. When possible, update all relevant state simultaneously.
131. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1295
Avoid chaining state changes. When possible, update all relevant state simultaneously.
132. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1296
Avoid chaining state changes. When possible, update all relevant state simultaneously.
133. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1297
Avoid chaining state changes. When possible, update all relevant state simultaneously.
134. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1298
Avoid chaining state changes. When possible, update all relevant state simultaneously.
135. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1305
Avoid chaining state changes. When possible, update all relevant state simultaneously.
136. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1306
Avoid chaining state changes. When possible, update all relevant state simultaneously.
137. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1331
14 setState calls in a single useEffect — consider using useReducer or deriving state
138. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1333
Avoid chaining state changes. When possible, update all relevant state simultaneously.
139. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1338
Avoid chaining state changes. When possible, update all relevant state simultaneously.
140. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1339
Avoid chaining state changes. When possible, update all relevant state simultaneously.
141. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1340
Avoid chaining state changes. When possible, update all relevant state simultaneously.
142. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1341
Avoid chaining state changes. When possible, update all relevant state simultaneously.
143. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1342
Avoid chaining state changes. When possible, update all relevant state simultaneously.
144. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1343
Avoid chaining state changes. When possible, update all relevant state simultaneously.
145. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1344
Avoid chaining state changes. When possible, update all relevant state simultaneously.
146. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1345
Avoid chaining state changes. When possible, update all relevant state simultaneously.
147. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1346
Avoid chaining state changes. When possible, update all relevant state simultaneously.
148. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1347
Avoid chaining state changes. When possible, update all relevant state simultaneously.
149. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1391
Avoid chaining state changes. When possible, update all relevant state simultaneously.
150. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1392
Avoid chaining state changes. When possible, update all relevant state simultaneously.
151. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1408
4 setState calls in a single useEffect — consider using useReducer or deriving state
152. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1426
3 setState calls in a single useEffect — consider using useReducer or deriving state
153. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1436
Avoid chaining state changes. When possible, update all relevant state simultaneously.
154. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1437
Avoid chaining state changes. When possible, update all relevant state simultaneously.
155. [warning] no-chain-state-updates — src/pages/ShieldPage.tsx:1438
Avoid chaining state changes. When possible, update all relevant state simultaneously.
156. [warning] exhaustive-deps — src/pages/ShieldPage.tsx:1491
The `beginShieldTransfer` value makes the dependencies of `useEffect` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.
157. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1446
3 setState calls in a single useEffect — consider using useReducer or deriving state
158. [warning] no-event-handler — src/pages/ShieldPage.tsx:1460
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
159. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1499
10 setState calls in a single useEffect — consider using useReducer or deriving state
160. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1525
8 setState calls in a single useEffect — consider using useReducer or deriving state
161. [warning] no-cascading-set-state — src/pages/ShieldPage.tsx:1549
10 setState calls in a single useEffect — consider using useReducer or deriving state
162. [warning] no-event-handler — src/pages/ShieldPage.tsx:1633
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
163. [warning] no-event-handler — src/pages/ShieldPage.tsx:1637
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
164. [warning] no-event-handler — src/pages/ShieldPage.tsx:1559
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
165. [warning] no-event-handler — src/pages/ShieldPage.tsx:1554
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
166. [warning] no-event-handler — src/pages/ShieldPage.tsx:1671
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
167. [warning] design-no-em-dash-in-jsx-text — src/pages/ShieldPage.tsx:2065
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
168. [warning] control-has-associated-label — src/pages/ShieldPage.tsx:2107
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
169. [warning] js-min-max-loop — src/pages/UnshieldPage.tsx:245
array.sort()[0] for min/max — use Math.min(...array) instead (O(n) vs O(n log n))
170. [warning] js-tosorted-immutable — src/pages/UnshieldPage.tsx:245
[...array].sort() — use array.toSorted() for immutable sorting (ES2023)
171. [warning] no-effect-chain — src/pages/UnshieldPage.tsx:732
useEffect reacts to "selectedLane" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
172. [warning] no-effect-chain — src/pages/UnshieldPage.tsx:2107
useEffect reacts to "status" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
173. [warning] no-giant-component — src/pages/UnshieldPage.tsx:318
Component "UnshieldPage" is 3261 lines — consider breaking it into smaller focused components
174. [warning] prefer-useReducer — src/pages/UnshieldPage.tsx:318
Component "UnshieldPage" has 26 useState calls — consider useReducer for related state
175. [warning] rerender-state-only-in-handlers — src/pages/UnshieldPage.tsx:543
useState "pendingSplitMarker" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
176. [warning] rerender-state-only-in-handlers — src/pages/UnshieldPage.tsx:546
useState "pendingSplitFollowup" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
177. [warning] rerender-state-only-in-handlers — src/pages/UnshieldPage.tsx:547
useState "pendingUnshieldBridge" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
178. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:684
Avoid chaining state changes. When possible, update all relevant state simultaneously.
179. [warning] no-event-handler — src/pages/UnshieldPage.tsx:683
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
180. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:729
Avoid chaining state changes. When possible, update all relevant state simultaneously.
181. [warning] no-event-handler — src/pages/UnshieldPage.tsx:708
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
182. [warning] no-event-handler — src/pages/UnshieldPage.tsx:728
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
183. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:737
Avoid chaining state changes. When possible, update all relevant state simultaneously.
184. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:744
7 setState calls in a single useEffect — consider using useReducer or deriving state
185. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1002
6 setState calls in a single useEffect — consider using useReducer or deriving state
186. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1005
Avoid chaining state changes. When possible, update all relevant state simultaneously.
187. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1011
Avoid chaining state changes. When possible, update all relevant state simultaneously.
188. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1012
Avoid chaining state changes. When possible, update all relevant state simultaneously.
189. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1017
Avoid chaining state changes. When possible, update all relevant state simultaneously.
190. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1019
Avoid chaining state changes. When possible, update all relevant state simultaneously.
191. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1020
Avoid chaining state changes. When possible, update all relevant state simultaneously.
192. [warning] no-event-handler — src/pages/UnshieldPage.tsx:1004
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
193. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1024
5 setState calls in a single useEffect — consider using useReducer or deriving state
194. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1041
5 setState calls in a single useEffect — consider using useReducer or deriving state
195. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1060
4 setState calls in a single useEffect — consider using useReducer or deriving state
196. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1076
8 setState calls in a single useEffect — consider using useReducer or deriving state
197. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1086
Avoid chaining state changes. When possible, update all relevant state simultaneously.
198. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1160
5 setState calls in a single useEffect — consider using useReducer or deriving state
199. [warning] exhaustive-deps — src/pages/UnshieldPage.tsx:1207
React Hook `useCallback` has an unnecessary dependency `splitSpentMarkerTransaction.signature, splitSpentMarkerTransaction.status` — it isn't referenced inside the callback.
200. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1210
5 setState calls in a single useEffect — consider using useReducer or deriving state
201. [warning] exhaustive-deps — src/pages/UnshieldPage.tsx:1294
The `beginTokenUnshieldFromNote` value makes the dependencies of `useEffect` change on every render. Move it inside the hook callback or wrap it in its own memoization hook.
202. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1227
6 setState calls in a single useEffect — consider using useReducer or deriving state
203. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1239
Avoid chaining state changes. When possible, update all relevant state simultaneously.
204. [warning] no-event-handler — src/pages/UnshieldPage.tsx:697
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
205. [warning] no-event-handler — src/pages/UnshieldPage.tsx:1262
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
206. [warning] exhaustive-deps — src/pages/UnshieldPage.tsx:1338
React Hook `useMemo` has an unnecessary dependency `liveSwapPair.solUnshieldOperatorUrl` — it isn't referenced inside the callback.
207. [warning] exhaustive-deps — src/pages/UnshieldPage.tsx:1489
React Hook `useCallback` has an unnecessary dependency `liveSwapPair.solAssetId` — it isn't referenced inside the callback.
208. [warning] exhaustive-deps — src/pages/UnshieldPage.tsx:1548
React Hook `useCallback` has an unnecessary dependency `spentMarkerTransaction.signature, spentMarkerTransaction.status` — it isn't referenced inside the callback.
209. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:1568
Avoid chaining state changes. When possible, update all relevant state simultaneously.
210. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1578
4 setState calls in a single useEffect — consider using useReducer or deriving state
211. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1594
4 setState calls in a single useEffect — consider using useReducer or deriving state
212. [warning] no-cascading-set-state — src/pages/UnshieldPage.tsx:1610
4 setState calls in a single useEffect — consider using useReducer or deriving state
213. [warning] no-chain-state-updates — src/pages/UnshieldPage.tsx:2109
Avoid chaining state changes. When possible, update all relevant state simultaneously.
214. [warning] no-event-handler — src/pages/UnshieldPage.tsx:2108
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
215. [warning] design-no-em-dash-in-jsx-text — src/pages/UnshieldPage.tsx:2160
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
216. [warning] design-no-em-dash-in-jsx-text — src/pages/UnshieldPage.tsx:2194
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
217. [warning] design-no-em-dash-in-jsx-text — src/pages/UnshieldPage.tsx:2198
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
218. [warning] prefer-tag-over-role — src/pages/UnshieldPage.tsx:2864
Prefer the semantic `<img>` element over `role="img"` on a generic tag.
219. [warning] control-has-associated-label — src/pages/UnshieldPage.tsx:2931
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
220. [warning] no-effect-chain — src/pages/SwapPage.tsx:342
useEffect reacts to "status" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
221. [warning] no-effect-chain — src/pages/SwapPage.tsx:347
useEffect reacts to "status" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
222. [warning] no-effect-chain — src/pages/SwapPage.tsx:538
useEffect reacts to "selectedSourceAsset" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
223. [warning] no-effect-chain — src/pages/SwapPage.tsx:1138
useEffect reacts to "status" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
224. [warning] no-effect-chain — src/pages/SwapPage.tsx:1246
useEffect reacts to "status" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
225. [warning] no-effect-chain — src/pages/SwapPage.tsx:776
useEffect reacts to "operatorAuthorizationStarted" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
226. [warning] no-effect-chain — src/pages/SwapPage.tsx:1058
useEffect reacts to "pendingSpentMarker" which is set by another useEffect — chains of effects add an extra render per link and become rigid as code evolves. Compute what you can during render and write all related state inside the event handler that originally fires the chain
227. [warning] no-giant-component — src/pages/SwapPage.tsx:295
Component "SwapPage" is 1950 lines — consider breaking it into smaller focused components
228. [warning] prefer-useReducer — src/pages/SwapPage.tsx:295
Component "SwapPage" has 22 useState calls — consider useReducer for related state
229. [warning] rerender-state-only-in-handlers — src/pages/SwapPage.tsx:318
useState "quoteRefreshNonce" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
230. [warning] rerender-state-only-in-handlers — src/pages/SwapPage.tsx:320
useState "autoRefreshingQuoteId" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
231. [warning] rerender-state-only-in-handlers — src/pages/SwapPage.tsx:322
useState "pendingSpentMarker" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
232. [warning] rerender-state-only-in-handlers — src/pages/SwapPage.tsx:323
useState "pendingSwapBridge" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
233. [warning] rerender-state-only-in-handlers — src/pages/SwapPage.tsx:325
useState "operatorAuthorizationStarted" is updated but never read in the component's return — use useRef so updates don't trigger re-renders
234. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:344
Avoid chaining state changes. When possible, update all relevant state simultaneously.
235. [warning] no-event-handler — src/pages/SwapPage.tsx:343
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
236. [warning] no-derived-state — src/pages/SwapPage.tsx:350
Avoid storing derived state. Compute "recentSwapSummaries" directly during render, optionally with `useMemo` if it's expensive.
237. [warning] no-derived-state — src/pages/SwapPage.tsx:357
Avoid storing derived state. Compute "selectedSwapReceiptKey" directly during render, optionally with `useMemo` if it's expensive.
238. [warning] no-event-handler — src/pages/SwapPage.tsx:348
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
239. [warning] no-event-handler — src/pages/SwapPage.tsx:348
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
240. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:476
6 setState calls in a single useEffect — consider using useReducer or deriving state
241. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:489
Avoid chaining state changes. When possible, update all relevant state simultaneously.
242. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:490
Avoid chaining state changes. When possible, update all relevant state simultaneously.
243. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:491
Avoid chaining state changes. When possible, update all relevant state simultaneously.
244. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:492
Avoid chaining state changes. When possible, update all relevant state simultaneously.
245. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:493
Avoid chaining state changes. When possible, update all relevant state simultaneously.
246. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:501
Avoid chaining state changes. When possible, update all relevant state simultaneously.
247. [warning] no-event-handler — src/pages/SwapPage.tsx:495
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
248. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:534
Avoid chaining state changes. When possible, update all relevant state simultaneously.
249. [warning] no-event-handler — src/pages/SwapPage.tsx:514
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
250. [warning] no-event-handler — src/pages/SwapPage.tsx:519
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
251. [warning] no-event-handler — src/pages/SwapPage.tsx:533
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
252. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:549
Avoid chaining state changes. When possible, update all relevant state simultaneously.
253. [warning] no-event-handler — src/pages/SwapPage.tsx:544
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
254. [warning] no-event-handler — src/pages/SwapPage.tsx:548
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
255. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:640
4 setState calls in a single useEffect — consider using useReducer or deriving state
256. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:670
9 setState calls in a single useEffect — consider using useReducer or deriving state
257. [warning] async-defer-await — src/pages/SwapPage.tsx:690
await blocks the function before an early-return that doesn't use the awaited value — move the await after the synchronous guard so the skip path stays fast
258. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:741
6 setState calls in a single useEffect — consider using useReducer or deriving state
259. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:760
5 setState calls in a single useEffect — consider using useReducer or deriving state
260. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:776
18 setState calls in a single useEffect — consider using useReducer or deriving state
261. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:791
Avoid chaining state changes. When possible, update all relevant state simultaneously.
262. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:792
Avoid chaining state changes. When possible, update all relevant state simultaneously.
263. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:796
Avoid chaining state changes. When possible, update all relevant state simultaneously.
264. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:797
Avoid chaining state changes. When possible, update all relevant state simultaneously.
265. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:798
Avoid chaining state changes. When possible, update all relevant state simultaneously.
266. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:893
Avoid chaining state changes. When possible, update all relevant state simultaneously.
267. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:894
Avoid chaining state changes. When possible, update all relevant state simultaneously.
268. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:895
Avoid chaining state changes. When possible, update all relevant state simultaneously.
269. [warning] no-event-handler — src/pages/SwapPage.tsx:802
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
270. [warning] no-event-handler — src/pages/SwapPage.tsx:908
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
271. [warning] no-event-handler — src/pages/SwapPage.tsx:915
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
272. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:1029
4 setState calls in a single useEffect — consider using useReducer or deriving state
273. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:1044
3 setState calls in a single useEffect — consider using useReducer or deriving state
274. [warning] exhaustive-deps — src/pages/SwapPage.tsx:1094
React Hook `useEffect` is missing dependency `retainCanonicalSwapBridge` — list it in the dependency array, or call the hook unconditionally.
275. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:1058
3 setState calls in a single useEffect — consider using useReducer or deriving state
276. [warning] no-event-handler — src/pages/SwapPage.tsx:1069
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
277. [warning] no-event-handler — src/pages/SwapPage.tsx:1063
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
278. [warning] async-parallel — src/pages/SwapPage.tsx:1111
3 sequential await statements that appear independent — use Promise.all() for parallel execution
279. [warning] exhaustive-deps — src/pages/SwapPage.tsx:1193
React Hook `useEffect` is missing dependency `retainCanonicalSwapBridge` — list it in the dependency array, or call the hook unconditionally.
280. [warning] no-event-handler — src/pages/SwapPage.tsx:1179
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
281. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:1230
3 setState calls in a single useEffect — consider using useReducer or deriving state
282. [warning] no-cascading-set-state — src/pages/SwapPage.tsx:1246
3 setState calls in a single useEffect — consider using useReducer or deriving state
283. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:1253
Avoid chaining state changes. When possible, update all relevant state simultaneously.
284. [warning] no-chain-state-updates — src/pages/SwapPage.tsx:1269
Avoid chaining state changes. When possible, update all relevant state simultaneously.
285. [warning] no-derived-state — src/pages/SwapPage.tsx:1268
Avoid storing derived state. Compute "autoRefreshingQuoteId" directly during render, optionally with `useMemo` if it's expensive.
286. [warning] no-event-handler — src/pages/SwapPage.tsx:1251
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
287. [warning] no-event-handler — src/pages/SwapPage.tsx:1251
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
288. [warning] no-event-handler — src/pages/SwapPage.tsx:1252
Avoid using state and effects as an event handler. Instead, call the event handling code directly when the event occurs.
289. [warning] design-no-em-dash-in-jsx-text — src/pages/SwapPage.tsx:1874
Em dash (—) in JSX text reads as model output — replace with comma, colon, semicolon, or parentheses
290. [warning] prefer-tag-over-role — src/pages/SwapPage.tsx:1912
Prefer the semantic `<address>` element over `role="group"` on a generic tag.
291. [warning] prefer-tag-over-role — src/pages/SwapPage.tsx:1935
Prefer the semantic `<address>` element over `role="group"` on a generic tag.
292. [warning] control-has-associated-label — src/pages/SwapPage.tsx:1938
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
293. [warning] prefer-tag-over-role — src/pages/SwapPage.tsx:1979
Prefer the semantic `<address>` element over `role="group"` on a generic tag.
294. [warning] prefer-tag-over-role — src/pages/SwapPage.tsx:2001
Prefer the semantic `<address>` element over `role="group"` on a generic tag.
295. [warning] js-hoist-intl — src/components/PositionSummary.tsx:16
new Intl.DateTimeFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call
296. [warning] no-many-boolean-props — src/components/RecoveryPanel.tsx:37
Component "RecoveryPanel" takes 5 boolean-like props (canExportRecordSource, canResetRecoveryKey, canRestoreBackup…) — consider compound components or explicit variants instead of stacking flags
297. [warning] no-array-index-key — src/components/RecoveryPanel.tsx:92
Array index in `key` doesn't uniquely identify the element — re-renders may use stale state.
298. [warning] no-array-index-as-key — src/components/RecoveryPanel.tsx:92
Array index "index" used as key — causes bugs when list is reordered or filtered
299. [warning] control-has-associated-label — src/components/RecoveryPanel.tsx:116
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
300. [warning] control-has-associated-label — src/components/RecoveryPanel.tsx:124
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
301. [warning] control-has-associated-label — src/components/RecoveryPanel.tsx:166
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
302. [warning] control-has-associated-label — src/components/RecoveryPanel.tsx:174
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
303. [warning] server-sequential-independent-await — src/pay/vantaPayPrivateSettlementAdapter.ts:901
Sequential `await` without a data dependency on the previous result — wrap the independent calls in `Promise.all([...])` so they race instead of waterfalling
304. [warning] prefer-useReducer — src/components/RecoveryPanelController.tsx:140
Component "RecoveryPanelController" has 7 useState calls — consider useReducer for related state
305. [warning] no-giant-component — src/components/InternalCanonicalLifecycleProvingPanel.tsx:22
Component "InternalCanonicalLifecycleProvingPanel" is 515 lines — consider breaking it into smaller focused components
306. [warning] no-fetch-in-effect — src/components/LandingLiveStrip.tsx:30
fetch() inside useEffect — use a data fetching library (react-query, SWR) or server component
307. [warning] no-giant-component — src/components/VantaPrivateCoreStatePanel.tsx:358
Component "VantaPrivateCoreStatePanel" is 2409 lines — consider breaking it into smaller focused components
308. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:368
Default prop value [] creates a new array reference every render — extract to a module-level constant
309. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:472
Default prop value [] creates a new array reference every render — extract to a module-level constant
310. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:477
Default prop value [] creates a new array reference every render — extract to a module-level constant
311. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:481
Default prop value [] creates a new array reference every render — extract to a module-level constant
312. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:552
Default prop value [] creates a new array reference every render — extract to a module-level constant
313. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:554
Default prop value [] creates a new array reference every render — extract to a module-level constant
314. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:555
Default prop value [] creates a new array reference every render — extract to a module-level constant
315. [warning] rerender-memo-with-default-value — src/components/VantaPrivateCoreStatePanel.tsx:556
Default prop value [] creates a new array reference every render — extract to a module-level constant
316. [warning] no-giant-component — src/components/InternalCanonicalLifecycleRunnerExecutionPanel.tsx:1
Component "InternalCanonicalLifecycleRunnerExecutionPanel" is 312 lines — consider breaking it into smaller focused components
317. [warning] no-inline-bounce-easing — src/components/PayReceiptPacketCard.tsx:51
Bounce/elastic easing feels dated — real objects decelerate smoothly. Use ease-out or cubic-bezier(0.16, 1, 0.3, 1) instead
318. [warning] js-hoist-intl — src/components/LifecycleTimeline.tsx:25
new Intl.DateTimeFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call
319. [warning] js-hoist-intl — src/components/NoteStatePanel.tsx:29
new Intl.DateTimeFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call
320. [warning] rerender-memo-with-default-value — src/components/RecipientField.tsx:30
Default prop value [] creates a new array reference every render — extract to a module-level constant
321. [warning] control-has-associated-label — src/components/RecipientField.tsx:42
A control must be associated with a text label — add visible text, `aria-label`, or `aria-labelledby`.
322. [warning] prefer-tag-over-role — src/components/QuoteCountdownBar.tsx:35
Prefer the semantic `<progress>` element over `role="progressbar"` on a generic tag.
323. [warning] js-hoist-intl — src/pages/StrategyPage.tsx:161
new Intl.NumberFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call
324. [warning] no-giant-component — src/pages/StrategyPage.tsx:274
Component "StrategyPage" is 420 lines — consider breaking it into smaller focused components
325. [warning] no-noninteractive-tabindex — src/pages/StrategyPage.tsx:529
Don't add `tabIndex` to non-interactive elements — keyboard users would have no expected behavior on focus.
326. [warning] prefer-tag-over-role — src/pages/StrategyPage.tsx:527
Prefer the semantic `<img>` element over `role="img"` on a generic tag.
327. [warning] prefer-tag-over-role — src/pages/StrategyPage.tsx:608
Prefer the semantic `<output>` element over `role="status"` on a generic tag.
328. [warning] no-inline-exhaustive-style — src/components/DocsStatusBadge.tsx:39
9 inline style properties — extract to a CSS class, CSS module, or styled component for maintainability and reuse
329. [warning] js-hoist-intl — src/components/AnonymityDepthDisclosure.tsx:4
new Intl.NumberFormat() inside a function — hoist to module scope or wrap in useMemo so it isn't recreated each call
330. [warning] exhaustive-deps — src/ProductAppRoot.tsx:30
React Hook `useMemo` is missing dependency `walletConnectors` — list it in the dependency array, or call the hook unconditionally.
331. [warning] async-await-in-loop — src/solana/vantaShieldState.ts:195
await inside a for-loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
332. [warning] async-await-in-loop — src/solana/vantaShieldState.ts:1449
await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
333. [warning] js-set-map-lookups — src/solana/vantaShieldState.ts:1515
array.includes() in a loop is O(n) per call — convert to a Set for O(1) lookups
334. [warning] async-await-in-loop — src/solana/vantaShieldState.ts:1554
await inside a for…of loop runs the calls sequentially — for independent operations, collect them and use `await Promise.all(items.map(...))` to run them concurrently
335. [warning] js-combine-iterations — src/solana/vantaShieldState.ts:2613
.filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of
336. [warning] js-combine-iterations — src/solana/vantaShieldState.ts:2613
.map().filter() iterates the array twice — combine into a single loop with .reduce() or for...of
337. [warning] js-combine-iterations — src/solana/vantaShieldState.ts:3246
.filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of
338. [warning] js-combine-iterations — src/solana/vantaShieldState.ts:3277
.filter().map() iterates the array twice — combine into a single loop with .reduce() or for...of
339. [warning] js-combine-iterations — src/solana/vantaShieldState.ts:3309
.filter().map() iterates the array twice — combine into a single loop
---
_Issue body truncated. See the full report at [react.review/dashboard](https://react.review/dashboard)._
Copy as prompt