Skip to content

feat(earns): revamp positions list and detail pages with new UI#3020

Open
tienkane wants to merge 66 commits intomainfrom
feat/positions-revamp
Open

feat(earns): revamp positions list and detail pages with new UI#3020
tienkane wants to merge 66 commits intomainfrom
feat/positions-revamp

Conversation

@tienkane
Copy link
Copy Markdown
Collaborator

@tienkane tienkane commented Mar 17, 2026

Summary

  • Revamp User Positions list page with updated table layout, price range visualization, and position banner
  • Revamp Position Detail page with a tabbed layout (Information, Earnings, History tabs)
  • Extract PositionDetailContext to eliminate prop drilling across detail sub-components
  • Add AnimatedNumber component and UX animations (fade-in, slide-up) to position list and detail pages
  • Improve price range visualization with tick-based positioning and interpolated current price indicator color
  • Consolidate duplicate hooks and fix re-render issues in position list for better performance

- Restyle table header and rows with theme tokens, inset borders via
  ::after pseudo-elements, and rounded corners
- Consolidate position protocol info into single badge (dex | fee | #id)
- Move status badge inline with token pair name
- Update pagination styling with subtle background and rounded corners
- Rename page title to 'My Liquidity Positions' and button to 'Claim All'
- Fix actions info helper icon alignment
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

ADPR instance has been created!

Information

@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

…I components

  Restructure position detail into two-column layout with tab navigation
  (Information, Earnings, History). Add EarningsTab with charts, HistoryTab
  with transaction history, and InformationTab extracted from RightSection.
  Update styled components to match new design (DarkCard, CompactPriceBox,
  ClaimButton, TabMenu). Extend PositionHistory API types with transaction
  details and new history types (WITHDRAW, COLLECT_FEE).
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

  Add onReady callback to LiquidityChart that fires when ticksAtLimit is
  computed. InformationTab now renders chart hidden until ready, preventing
  a layout jump between skeleton disappearing and chart appearing.
  in position detail
The revamp accidentally dropped the secondary action link that appears above the main action buttons, showing 'Reposition to new range' when in-range or 'Increase Liquidity' when out-of-range.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

…ling

  Introduce PositionDetailContext and provider to share position state across PositionDetail sub-components (Header, LeftSection, RightSection, InformationTab, EarningsTab, HistoryTab, RewardSection) instead of passing 15+ props through multiple levels. Also stabilize callbacks with useCallback/useMemo to reduce unnecessary re-renders.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

…oning

Replace hardcoded width/position (60%/80%/100%) with tick-based logarithmic
scale for accurate proportional display. Narrow ranges (stablecoins) now
appear visually narrower than wide ranges. Add smart price formatter that
adapts significant digits based on the difference between min/max prices
(e.g. 1.0003 vs 1.0007 shows full precision, 595.49 vs 716.42 stays concise).
Fix balance column text overflow with min-width: 0 on grid cells.
Replace the binary green/purple color logic with smooth RGB interpolation
based on the indicator's position on the range bar, matching the gradient.
Add max-width and text-overflow ellipsis to the protocol badge
(dex name, fee tier, position ID) to prevent long labels from
pushing other columns. Full text is shown on hover via tooltip.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

…position list

- Consolidate useKemRewards from 3 calls to 1 on UserPositions page
- Remove duplicate useZapMigrationWidget from TableContent
- Fix handleFetchUnclaimedFee stale closure with functional updater
- Memoize onSortChange and updateFiltersWithLoading callbacks
- Skip interval timer when feeInfoFromRpc is empty
- Remove unused positions prop from PositionBanner
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

- Add RefetchIndicator progress bar during background data polling
- Add staggered fade-in animation for position rows on load/filter
- Add AnimatedNumber component with roll transition on value changes
- Apply animated numbers to banner stats and table row values
- Respect prefers-reduced-motion for all animations
- Conditionally pause RefetchIndicator animation when hidden
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

…page

- Add fadeIn/slideDown animations to page enter, tab switch, dropdown,
  migration banner, and chart reveal
- Replace static numbers with AnimatedNumber roll transitions for fees,
  liquidity, APR, and reward values (consistent with position list)
- Fix ClaimButton disabled guards to explicitly check for undefined position
- Simplify RewardSection ClaimButton onClick to remove redundant guards
@tienkane tienkane changed the title feat(earns): revamp positions feat(earns): revamp positions list and detail pages with new UI Mar 23, 2026
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

tienkane added 3 commits April 7, 2026 11:15
…tions

Full-range positions (0 to ∞) showed misleading percentages like
-100.0000%. Skip percentage display when both isMinPrice and isMaxPrice
are true.
…e positions

Full-range positions (0 to ∞) caused broken zoom ratio calculation,
resulting in a skewed and unreadable chart. Use pool category zoom
levels instead to center the view around the current price.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

1 similar comment
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

tienkane added 2 commits April 7, 2026 12:13
… with graceful fade-out

Replace the pure CSS RefetchIndicator with a React component that
completes its current animation cycle before fading out, and handles
prefers-reduced-motion without deadlocking.
…rflow hidden

Move overflow:hidden from RightColumn to TabMenu so the remove liquidity
dropdown can render outside the container while tab backgrounds still
respect rounded corners.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

tienkane added 5 commits April 7, 2026 17:03
…llModal

- Add KS Rewards / Bonus tabs to ClaimAllModal with controlled tab state
- Implement on-chain Merkl distributor claim via useClaimMerklRewards hook
- Fetch Merkl API per-chain individually to avoid single unsupported chain
  failing the entire request
- Track Merkl claim txs via pendingClaims and refetch rewards on confirmation
- Group Merkl rewards by chain (chainRewards) in useMerklRewards
- Replace hardcoded hex colors with theme tokens in ClaimAllModal styles
Remove Uniswap-only restriction for Merkl bonus rewards - now all
protocols and non-farming positions can receive Merkl incentives.
Add campaignRewards grouping by protocol name from Merkl API breakdowns,
CampaignRewardInfo type, and updated reward tooltips across position
detail, pool explorer, and user positions views.
Replace generic AprDetailTooltip with PositionAprTooltip on position
detail page, showing per-campaign APR breakdown (EG, LM, Merkl campaigns)
with protocol icons. Also clean up useMerklRewards by removing console.log
and unused 'rewards' return field.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

- Pick chain with the highest claimableUsdValue instead of the first one
  in the list when opening the modal or switching tabs
- Remove stray cursor: pointer on PositionTableHeaderFlexItem
- Remove campaignRewards grouping from useMerklRewards; replace with
  token-level merge across Merkl entries (same chainId+address summed)
- Flatten PositionBanner merkl tooltip to a single per-token list
  under '3rd Party (Merkl) Incentives' header
- Merge tokens across positions in baseRewardsForReturn to avoid
  duplicate rows and inflated totals when positionsFilter is active
- Accumulate claimableUsdValue per entry to avoid stale-price math
  when the same token comes from multiple campaigns
- Fix unclaimedAmount to accumulate from existing.unclaimedAmount
- Remove unused CampaignRewardInfo type
Replace per-token Merkl link with a single underlined link on the
'3rd Party (Merkl) Incentives' tooltip title.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

Previously, the 'Claim All' button was disabled when there were no
KyberSwap rewards, even if the user had claimable Merkl bonus rewards.
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

- Add searchTokensBySymbol endpoint to ksSetting service
- Two-step logo lookup in useMerklRewards: fetch by address first,
  then fall back to symbol search for tokens missing in KS token DB
- Share logo caches and queried-symbols set at module level so all
  7 useMerklRewards instances dedupe API calls across the app
- Always apply resolved symbol logos from cache so concurrent hook
  instances pick up results fetched by a sibling instance
@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

@kyber-ci-bot
Copy link
Copy Markdown

Auto Deploy Pull Request

⚠️ Warning: Application's Ingress not ready after 1m0s

Notes:

  • Please contact SRE team to support investigate this issue.

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.

3 participants