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

feature: added scroll to top button #10174

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

SharadK10
Copy link

I added a scroll to top button which enhances user experiences by enabling them to quickly go to top of the page when they have many APIs in the page.

Description

I created a component to implement the functionality of the scroll to top and rendered it in the main app. When the user scrolls down the scroll to top icon appears on the bottom right of the page for 3 seconds until the users scrolls again. The button's appearance is consistent with the Swagger UI theme and style.

Fixes #10169

Screenshots (if appropriate):

REC-20241018213544.mp4

My PR contains...

  • No code changes (src/ is unmodified: changes to documentation, CI, metadata, etc.)
  • Dependency changes (any modification to dependencies in package.json)
  • Bug fixes (non-breaking change which fixes an issue)
  • Improvements (misc. changes to existing features)
  • Features (non-breaking change which adds functionality)

My changes...

  • are breaking changes to a public API (config options, System API, major UI change, etc).
  • are breaking changes to a private API (Redux, component props, utility functions, etc.).
  • are breaking changes to a developer API (npm script behavior changes, new dev system dependencies, etc).
  • are not breaking changes.

Documentation

  • My changes do not require a change to the project documentation.
  • My changes require a change to the project documentation.
  • If yes to above: I have updated the documentation accordingly.

@SharadK10
Copy link
Author

Hi @char0n, could you please review my PR or assign someone who can review.

Copy link

@dandrok dandrok left a comment

Choose a reason for hiding this comment

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

Need work.

const [isVisible, setIsVisible] = useState(false)
const [hideTimeout, setHideTimeout] = useState(null)

const styles = {
Copy link

Choose a reason for hiding this comment

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

Inline styles are not used in this project, so this code doesn't follow the convention.

Copy link

Choose a reason for hiding this comment

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

And for the future. Since the styles object doesn’t depend on any props, it’s best to define it outside the component. This avoids redefining the styles object on each render, improving performance.

},
}

const toggleVisibility = () => {
Copy link

Choose a reason for hiding this comment

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

The toggleVisibility function handles both the visibility toggle and timeout reset, which could make the code harder to follow. Consider breaking it up for simplicity: keep the scroll visibility logic and timeout logic separate. Instead of adding this logic directly to that file, consider creating a custom hook. This approach would improve readability and maintain cleaner code.

Copy link

Choose a reason for hiding this comment

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

Consider improving the variable names for better clarity and readability.

}, [hideTimeout])

return (
<div>
Copy link

Choose a reason for hiding this comment

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

Fragmen will be better here i think.

)
}

export default ScrollToTopButton
Copy link

Choose a reason for hiding this comment

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

question - why you prefer default export instead of named export ?


const ScrollToTopButton = () => {
const [isVisible, setIsVisible] = useState(false)
const [hideTimeout, setHideTimeout] = useState(null)
Copy link

Choose a reason for hiding this comment

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

consider using useRef insted of useState to store the timeout ID. This way, it will persist across renders without triggering unnecessary re-renders.

})
}

useEffect(() => {
Copy link

Choose a reason for hiding this comment

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

You’re adding an event listener to window inside useEffect, which is great, but since toggleVisibility depends on nothing external, it could be defined directly inside useEffect for clarity and potential memory efficiency.

Copy link

@dandrok dandrok left a comment

Choose a reason for hiding this comment

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

need work.

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.

Add Scroll-to-Top Button Feature
2 participants