Skip to content

Conversation

@SherlockShemol
Copy link
Contributor

@SherlockShemol SherlockShemol commented Jan 21, 2026

Closes #31314

Summary

I noticed the copy-to-clipboard logic was duplicated in 4 different components, so I extracted it into a reusable useCopyToClipboard hook.

Changes:

  • Created hooks/use-copy-to-clipboard.ts with shared logic
  • Refactored CopyIcon, CopyFeedback, CopyFeedbackNew, and InputWithCopy to use the new hook
  • Reduced ~67 lines of duplicate code

Test plan

  • pnpm lint:fix passes
  • pnpm type-check:tsgo passes
  • Manual testing: verify copy functionality works as before in each component

@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jan 21, 2026
@github-actions github-actions bot added the web This relates to changes on the web. label Jan 21, 2026
@dosubot dosubot bot added the refactor label Jan 21, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @SherlockShemol, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly improves the codebase by extracting redundant copy-to-clipboard functionality into a single, reusable custom React hook. This change streamlines the implementation of copy features across various UI components, making the code cleaner, more modular, and easier to maintain.

Highlights

  • New useCopyToClipboard Hook: A new custom React hook, useCopyToClipboard, has been introduced to centralize the logic for copying text to the clipboard and managing the copied state.
  • Component Refactoring: Four components (CopyFeedback, CopyFeedbackNew, CopyIcon, and InputWithCopy) have been refactored to utilize this new hook, removing duplicated clipboard handling logic.
  • Code Reduction: This refactoring effort has successfully reduced approximately 67 lines of duplicate code across the codebase, enhancing maintainability.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request is a great initiative to reduce code duplication by extracting the copy-to-clipboard logic into a reusable useCopyToClipboard hook. The refactoring is clean and improves maintainability. However, the new hook has a few issues: it introduces a functional regression for one of the components, has a performance issue due to an unstable dependency, and lacks cleanup for debounced functions which could lead to state updates on unmounted components. I've provided detailed comments and suggestions to address these points and make the hook more robust.

Copy link
Member

@hyoban hyoban left a comment

Choose a reason for hiding this comment

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

https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md#pull-request-process

Please link the issue in the PR description, fixes #<issue_number>

@hyoban hyoban added the awaiting response Issues waiting for a reply from the OP or another party label Jan 21, 2026
@SherlockShemol
Copy link
Contributor Author

https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md#pull-request-process

Please link the issue in the PR description, fixes #<issue_number>

thanks.Done

@hyoban hyoban removed the awaiting response Issues waiting for a reply from the OP or another party label Jan 21, 2026
Copy link
Member

@hyoban hyoban left a comment

Choose a reason for hiding this comment

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

@hyoban hyoban added the awaiting response Issues waiting for a reply from the OP or another party label Jan 21, 2026
@SherlockShemol SherlockShemol force-pushed the refactor/extract-copy-to-clipboard-hook branch 2 times, most recently from ff1075e to a0d07dc Compare January 21, 2026 02:48
@SherlockShemol
Copy link
Contributor Author

Let's use https://foxact.skk.moe/use-clipboard/

done.Thanks!

Replaced duplicated copy-to-clipboard logic across 4 components
with foxact's useClipboard hook.

Components refactored:
- CopyIcon
- CopyFeedback
- CopyFeedbackNew
- InputWithCopy

Signed-off-by: SherlockShemol <shemol@163.com>
@SherlockShemol SherlockShemol force-pushed the refactor/extract-copy-to-clipboard-hook branch from 13d4426 to 7e5b0cc Compare January 21, 2026 03:07
The onCopy prop received from parent may be unstable (not wrapped
in useCallback), making the useCallback here ineffective.
@hyoban hyoban removed the awaiting response Issues waiting for a reply from the OP or another party label Jan 21, 2026
@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Jan 21, 2026
@hyoban hyoban merged commit 1d778d5 into langgenius:main Jan 21, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer refactor size:L This PR changes 100-499 lines, ignoring generated files. web This relates to changes on the web.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor: Extract duplicated copy-to-clipboard logic into reusable hook

2 participants