Skip to content

Commit d88e0fd

Browse files
Msg Clipboard to checkmark (optimistic UX) (danny-avila#247)
* revert unintended package-lock.json change * used default checkmark which is included in project --------- Co-authored-by: Danny Avila <[email protected]>
1 parent 9cd5ba8 commit d88e0fd

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

client/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/src/components/Messages/HoverButtons.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import Clipboard from '../svg/Clipboard';
3+
import CheckMark from '../svg/CheckMark';
34
import EditIcon from '../svg/EditIcon';
45
import RegenerateIcon from '../svg/RegenerateIcon';
56

@@ -13,6 +14,7 @@ export default function HoverButtons({
1314
regenerate
1415
}) {
1516
const { endpoint, jailbreak = false } = conversation;
17+
const [isCopied, setIsCopied] = React.useState(false);
1618

1719
const branchingSupported =
1820
// azureOpenAI, openAI, chatGPTBrowser support branching, so edit enabled
@@ -59,11 +61,11 @@ export default function HoverButtons({
5961

6062
<button
6163
className="hover-button rounded-md p-1 hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200 disabled:dark:hover:text-gray-400 md:invisible md:group-hover:visible"
62-
onClick={copyToClipboard}
64+
onClick={() => copyToClipboard(setIsCopied)}
6365
type="button"
64-
title="copy to clipboard"
66+
title={isCopied ? 'Copied to clipboard' : 'Copy to clipboard'}
6567
>
66-
<Clipboard />
68+
{isCopied ? <CheckMark /> : <Clipboard />}
6769
</button>
6870
</div>
6971
);

client/src/components/Messages/Message.jsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,13 @@ export default function Message({
9898
if (!isSubmitting && !message?.isCreatedByUser) regenerate(message);
9999
};
100100

101-
const copyToClipboard = () => {
101+
const copyToClipboard = (setIsCopied) => {
102+
setIsCopied(true);
102103
copy(message?.text);
104+
105+
setTimeout(() => {
106+
setIsCopied(false);
107+
}, 3000);
103108
};
104109

105110
const clickSearchResult = async () => {
@@ -217,7 +222,7 @@ export default function Message({
217222
conversation={conversation}
218223
enterEdit={() => enterEdit()}
219224
regenerate={() => regenerateMessage()}
220-
copyToClipboard={() => copyToClipboard()}
225+
copyToClipboard={copyToClipboard}
221226
/>
222227
<SubRow subclasses="switch-container">
223228
<SiblingSwitch

0 commit comments

Comments
 (0)