Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: add unbonding period time to staking #1443

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

charymalloju
Copy link
Contributor

@charymalloju charymalloju commented Sep 30, 2024

Summary by CodeRabbit

Release Notes

  • New Features

    • Dynamic display of unbonding periods for staking across various components, ensuring accurate information based on the selected chain.
    • Enhanced user interface for re-delegation and undelegation processes, including loading indicators for transactions.
  • Bug Fixes

    • Corrected method name from getAvaiailableAmount to getAvailableAmount for accurate functionality.
  • Enhancements

    • Added new utility functions for improved data handling and user interface interactions, such as formatting funds and handling network errors.

Copy link

vercel bot commented Sep 30, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
resolute ✅ Ready (Inspect) Visit Preview 💬 Add feedback Sep 30, 2024 4:49am

Copy link
Contributor

coderabbitai bot commented Sep 30, 2024

Walkthrough

The pull request introduces modifications across multiple components and a custom hook within the frontend application. Key changes include replacing hardcoded unbonding period values with dynamic values retrieved from a custom hook, ensuring accurate display of staking information. Additionally, minor adjustments were made to method names and UI elements to enhance user experience and functionality.

Changes

File Path Change Summary
frontend/src/app/(routes)/staking/components/DelegatePopup.tsx
frontend/src/app/(routes)/staking/components/NewDelegationDialog.tsx
frontend/src/app/(routes)/staking/components/ReDelegatePopup.tsx
frontend/src/app/(routes)/staking/components/UndelegatePopup.tsx
Updated unbonding period display to use dynamic values from singleStake.getChainUnbondingPeriod(chainID). Adjusted method names and improved UI responsiveness.
frontend/src/custom-hooks/useSingleStaking.tsx Added getChainUnbondingPeriod function to calculate unbonding periods dynamically and updated imports and effects.
frontend/src/utils/util.ts Introduced new utility functions and modified existing ones to enhance data handling and user interface interactions.

Poem

🐰 In the meadow, changes bloom,
Dynamic values chase away gloom.
Unbonding periods now take flight,
With hooks and functions shining bright.
A hop, a skip, the code aligns,
In the world of staking, all is fine! 🌼


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between b45426d and f9746a2.

📒 Files selected for processing (1)
  • frontend/src/custom-hooks/useSingleStaking.tsx (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/custom-hooks/useSingleStaking.tsx

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (10)
frontend/src/app/(routes)/staking/components/DelegatePopup.tsx (2)

124-126: Approve: Dynamic unbonding period display

The replacement of the hardcoded "21 days" with a dynamic value from singleStake.getChainUnbondingPeriod(chainID) is a good improvement. It allows the component to accurately display the unbonding period for different chains.

Consider adding a unit (e.g., "days") to the displayed value for clarity:

- Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.
+ Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.

This assumes that the getChainUnbondingPeriod method returns a number. If it returns a formatted string including the unit, this change is not necessary.


128-130: Approve: Consistent dynamic unbonding period display

The replacement of the hardcoded "21 days" with {singleStake.getChainUnbondingPeriod(chainID)} in the undelegation information is consistent with the previous change and improves the accuracy of the displayed information.

As suggested for the previous instance, consider adding a unit (e.g., "days") to the displayed value for clarity:

- To make your staked assets liquid, undelegation will take {singleStake.getChainUnbondingPeriod(chainID)} days.
+ To make your staked assets liquid, undelegation will take {singleStake.getChainUnbondingPeriod(chainID)} days.

Again, this assumes that the getChainUnbondingPeriod method returns a number. If it returns a formatted string including the unit, this change is not necessary.

frontend/src/app/(routes)/staking/components/UndelegatePopup.tsx (3)

122-122: Approve: Dynamic unbonding period display

The change from a hardcoded value to singleStake.getChainUnbondingPeriod(chainID) improves the flexibility of the component by displaying chain-specific unbonding periods. This aligns well with the PR objective.

Consider adding a unit (e.g., "days") to the output for clarity:

-Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.
+Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.

This assumes that getChainUnbondingPeriod returns a number. If it returns a formatted string including the unit, disregard this suggestion.


126-126: Approve: Consistent use of dynamic unbonding period

This change is consistent with the previous one, ensuring that both instances of the unbonding period information use the dynamic getChainUnbondingPeriod method.

Consider extracting the unbonding period into a variable to avoid multiple calls to getChainUnbondingPeriod:

+const unbondingPeriod = singleStake.getChainUnbondingPeriod(chainID);
...
-Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.
+Staking will lock your funds for {unbondingPeriod} days.
...
-To make your staked assets liquid, undelegation will take {singleStake.getChainUnbondingPeriod(chainID)} days.
+To make your staked assets liquid, undelegation will take {unbondingPeriod} days.

This would slightly improve readability and potentially performance if getChainUnbondingPeriod is a computationally expensive operation.


Consistency Check Needed for Unbonding Periods

While the update in UndelegatePopup.tsx correctly implements dynamic unbonding periods, the search results indicate that there are other instances of hardcoded day values in the codebase, particularly within governance and staking-related components. To ensure consistency and maintainability, it's recommended to refactor these instances to utilize dynamic unbonding periods similar to the changes made in UndelegatePopup.tsx.

🔗 Analysis chain

Line range hint 1-146: Summary: Successful implementation of dynamic unbonding period

The changes in this file successfully implement a dynamic unbonding period display, replacing hardcoded values with chain-specific ones. This improves the accuracy and flexibility of the UndelegatePopup component.

To ensure consistency across the codebase, it would be beneficial to verify if similar updates are needed in other components. Run the following script to check for other occurrences of hardcoded unbonding periods:

This will help identify any other places where similar updates might be necessary to maintain consistency in displaying unbonding periods across the application.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for potential hardcoded unbonding periods in other files

# Test: Search for occurrences of "21 days" or similar in TypeScript/JavaScript files
rg --type-add 'web:*.{ts,tsx,js,jsx}' -t web '(\d+\s*(day|days))'

# Test: Search for other components or files that might need similar updates
rg --type-add 'web:*.{ts,tsx,js,jsx}' -t web -i '(undelegate|unbonding|staking)'

Length of output: 92916

frontend/src/app/(routes)/staking/components/NewDelegationDialog.tsx (3)

122-123: Approve: Dynamic unbonding period display

Great job on replacing the hardcoded value with a dynamic one! This change improves the flexibility and accuracy of the staking information displayed to users.

Consider adding the word "approximately" before the unbonding period to account for potential slight variations:

- Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.
+ Staking will lock your funds for approximately {singleStake.getChainUnbondingPeriod(chainID)} days.

126-127: Approve: Consistent use of dynamic unbonding period

Excellent work on maintaining consistency by updating the undelegation period information as well. This ensures that users receive accurate information throughout the dialog.

Consider storing the unbonding period in a variable to avoid repeated method calls:

+ const unbondingPeriod = singleStake.getChainUnbondingPeriod(chainID);
  // ...
- Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days.
+ Staking will lock your funds for {unbondingPeriod} days.
  // ...
- To make your staked assets liquid, undelegation will take {singleStake.getChainUnbondingPeriod(chainID)} days.
+ To make your staked assets liquid, undelegation will take {unbondingPeriod} days.

This small optimization improves readability and ensures consistent values are displayed.


Method Name Correction Not Applied

The method getAvaiailableAmount is still present in frontend/src/app/(routes)/staking/components/NewDelegationDialog.tsx. Please rename it to getAvailableAmount to ensure consistency and correctness.

🔗 Analysis chain

Line range hint 1-150: Verify: Method name correction

The AI summary mentions a correction of the method name from getAvaiailableAmount to getAvailableAmount. However, this change is not visible in the provided code. Could you please verify if this correction has been made?

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for the presence of both method names in the file.
rg --type typescript 'getAvaiailableAmount|getAvailableAmount' frontend/src/app/\(routes\)/staking/components/NewDelegationDialog.tsx

Length of output: 170


Script:

#!/bin/bash
# Description: Check for the presence of both method names in the specified file without using the --type flag.
rg 'getAvaiailableAmount|getAvailableAmount' "frontend/src/app/(routes)/staking/components/NewDelegationDialog.tsx"

Length of output: 186

frontend/src/app/(routes)/staking/components/ReDelegatePopup.tsx (1)

219-219: Improve accuracy of unbonding period information

The change from a hardcoded value to singleStake.getChainUnbondingPeriod(chainID) is a good improvement, as it provides chain-specific unbonding periods to users. This enhances the accuracy of the information presented.

However, there are a couple of points to consider:

  1. Error handling: Consider adding a fallback value or error handling in case getChainUnbondingPeriod fails or returns an unexpected value.
  2. Consistency: The next line still mentions "21+ days". Consider updating this to be consistent with the dynamic value.

To address these points, consider the following changes:

- Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID)} days
+ Staking will lock your funds for {singleStake.getChainUnbondingPeriod(chainID) || 21} days

And for the next line:

- No staking rewards, cancellation of unbonding, or fund withdrawals
- until 21+ days post-undelegation.
+ No staking rewards, cancellation of unbonding, or fund withdrawals
+ until {singleStake.getChainUnbondingPeriod(chainID) || 21}+ days post-undelegation.

These changes ensure a fallback value and maintain consistency throughout the message.

frontend/src/custom-hooks/useSingleStaking.tsx (1)

65-65: Consider making the default unbonding period a configurable constant

The function returns 21 as a default unbonding period when the unbonding time is not available. Consider defining this default value as a constant or fetching it from a configuration to improve maintainability and make it easier to update in the future.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between c4170f4 and b45426d.

📒 Files selected for processing (6)
  • frontend/src/app/(routes)/staking/components/DelegatePopup.tsx (1 hunks)
  • frontend/src/app/(routes)/staking/components/NewDelegationDialog.tsx (1 hunks)
  • frontend/src/app/(routes)/staking/components/ReDelegatePopup.tsx (1 hunks)
  • frontend/src/app/(routes)/staking/components/UndelegatePopup.tsx (1 hunks)
  • frontend/src/custom-hooks/useSingleStaking.tsx (4 hunks)
  • frontend/src/utils/util.ts (0 hunks)
💤 Files with no reviewable changes (1)
  • frontend/src/utils/util.ts
🔇 Additional comments (2)
frontend/src/app/(routes)/staking/components/DelegatePopup.tsx (1)

124-130: Verify the implementation of getChainUnbondingPeriod method

The changes improve the component by using a dynamic value for the unbonding period. To ensure the accuracy of the displayed information, it's important to verify the implementation of the getChainUnbondingPeriod method in the useSingleStaking hook.

Please run the following script to check the implementation of getChainUnbondingPeriod:

This script will help us verify:

  1. The correct implementation of getChainUnbondingPeriod.
  2. Any remaining instances of hardcoded unbonding periods that might need to be replaced.

Please review the results to ensure the method is implemented correctly and returns the appropriate values for different chain IDs.

frontend/src/app/(routes)/staking/components/NewDelegationDialog.tsx (1)

Line range hint 1-150: Summary: PR Objective Achievement

The changes made in this file successfully address the PR objective of adding unbonding period time to staking. The implementation dynamically retrieves and displays the unbonding period for both staking and undelegation processes, enhancing the accuracy and flexibility of the information presented to users.

frontend/src/custom-hooks/useSingleStaking.tsx Outdated Show resolved Hide resolved
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.

2 participants