Skip to content

Conversation

@0xApotheosis
Copy link
Member

feat: bring new wallet switcher to mobile app (#11135)
feat: react compiler PoC (#11006)
fix: restore translation strings (#11167)
feat: regenerate asset data 11/21/2025 (#11163)
feat: near affiliate fees (#11164)
fix: restore translation strings (#11162)
fix: extract gridplus sdk from the build bundle (#11155)

NeOMakinG and others added 7 commits November 21, 2025 02:27
fix: restore translaton strings
* feat: near affiliate fees

* feat: add referral

* feat: cleanup
feat: regenerate asset data 11/23/2025

Co-authored-by: asset-generation-bot <action@github.com>
fix: restore translaton strings
* feat: react compiler

* feat: proper semver

* feat: more semver bits

* feat: one more

* feat: cleanup

* feat: go ham

* feat: clean shit up

* feat: more clean more up

* fix: unrug trade page after #11050

Added 'use no memo' directive to TopAssetsCarousel component to opt it out of React Compiler optimization.

The component's useTopAssets hook conditionally calls different query hooks based on category (via CATEGORY_TO_QUERY_HOOK), which violates the Rules of Hooks. This pattern causes React Compiler's useMemoCache to allocate different cache sizes on different renders, resulting in:

- "Expected a constant size argument for each invocation of useMemoCache" error
- "React has detected a change in the order of Hooks" error
- Trade page crashes

The 'use no memo' directive follows the same opt-out pattern used for 13 other components in the React Compiler integration (PR #11006).

TODO: Refactor useTopAssets to call all hooks unconditionally to enable compiler optimization in the future.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: resolve TCY stale state bug with React Compiler

Added 'use no memo' directives to TCY components to opt out of React Compiler optimization.

Root Cause:
The StakeInput component had a stale closure issue where form validation state (isValid from react-hook-form) and React Query state (isEstimatedFeesDataError) weren't updating through React Compiler's memoization boundaries. This caused the Confirm button to show red error state on initial Stake tab load.

The bug occurred because:
- Form renders with empty values on initial mount
- React Query's estimateFees is disabled (enabled: false)
- isEstimatedFeesDataError starts as undefined
- React Compiler aggressively memoizes this initial state
- Form validation runs AFTER first render
- Button's isValid prop gets stale value from compiler memo
- Button shows red because it thinks form is invalid

Tab switching fixed it temporarily by forcing component unmount/remount, confirming the state initialization race condition.

Components opted out:
- StakeInput.tsx (critical - has the confirm button with complex state)
- UnstakeInput.tsx (consistency - similar structure to StakeInput)
- useSendThorTx.tsx (60+ line estimateFeesArgs useMemo, complex state)
- Widget.tsx (tab container managing switching state)

This follows the same opt-out pattern used for 13+ other components in PR #11006.

TODO: Investigate if useSendThorTx can be refactored to avoid the giant useMemo chain and enable compiler optimization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: add 'use no memo' to TCY form providers (Stake/Unstake)

Completes the React Compiler opt-out chain for TCY components by adding 'use no memo' to the parent form provider components.

Root Cause Analysis:
The previous commit added 'use no memo' to StakeInput/UnstakeInput (child components), but the parent components Stake.tsx and Unstake.tsx (which contain FormProvider and useForm hooks) were still being compiled by React Compiler.

React Compiler's optimization was interfering with React Hook Form's Proxy-based formState reactivity system. The Proxy needs proper initialization timing to track which properties (like isValid) are accessed and make them reactive.

Why it failed:
1. Stake.tsx creates useForm with empty defaultValues
2. React Compiler memoizes the methods object aggressively
3. FormProvider wraps children
4. StakeInput calls useFormContext() to access formState.isValid
5. Proxy doesn't initialize correctly due to compiler optimization
6. isValid = false (WRONG - empty string should pass validation)

Why tab switching "fixed" it:
- Tab switch triggers re-render of component tree
- FormProvider re-initializes without stale memoization
- Proxy works correctly on second mount
- isValid = true (CORRECT)

The Fix:
Added 'use no memo' to Stake.tsx and Unstake.tsx to prevent React Compiler from optimizing the form initialization layer, allowing React Hook Form's Proxy to initialize correctly on first mount.

This completes the full opt-out chain:
- Widget.tsx ✅ (tab container)
- Stake.tsx ✅ (form provider) - NEW
- StakeInput.tsx ✅ (form consumer)
- Unstake.tsx ✅ (form provider) - NEW
- UnstakeInput.tsx ✅ (form consumer)
- useSendThorTx.tsx ✅ (complex hook)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: aaaand more

---------

Co-authored-by: Jibles <premiumjibles@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
* add new routes

* move

* move views router for wallet

* remove unused onClose

* Update MobileWalletDialog.tsx
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 24, 2025

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch release

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Revert "feat: bring new wallet switcher to mobile app (#11135)"

This reverts commit 950082f.
@0xApotheosis 0xApotheosis merged commit 8079a47 into main Nov 25, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants