Skip to content

React Review Audit #2

Description

@react-doctor
1 error, ⚠️ 785 warnings 69 score
Copy as prompt
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 `&hellip;`)

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)._

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions