diff --git a/README.md b/README.md index d7ace3d90c..72377440d5 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Currently, this project is only functional with the `text-davinci-003` model. - [x] Highlight.js for code blocks - [x] Markdown handling - [x] Language Detection for code blocks -- [ ] 'Copy to clipboard' button for code and messages +- [x] 'Copy to clipboard' button for code blocks - [ ] Set user/model label and prompt prefix view option - [ ] AI model change handling (whether to pseudo-persist convos or start new convos within existing convo) - [ ] Server convo pagination (limit fetch and load more with 'show more' button) diff --git a/src/components/Messages/Embed.jsx b/src/components/Messages/Embed.jsx index 1d8c2367e0..32f2d99231 100644 --- a/src/components/Messages/Embed.jsx +++ b/src/components/Messages/Embed.jsx @@ -1,20 +1,34 @@ -import React from 'react'; +import React, { useState } from 'react'; import Clipboard from '../svg/Clipboard'; +import CheckMark from '../svg/CheckMark'; + +export default function Embed({ children, language = '', code, matched }) { + const [buttonText, setButtonText] = useState('Copy code'); + const isClicked = buttonText === 'Copy code'; + + const clickHandler = () => { + navigator.clipboard.writeText(code.trim()); + setButtonText('Copied!'); + setTimeout(() => { + setButtonText('Copy code'); + }, 3000); + }; -export default function Embed({ children, language = '', matched}) { return (
       
-
- { (language === 'javascript' && !matched ? '' : language) } -
-
- { children } -
+
{children}
); diff --git a/src/components/Messages/TextWrapper.jsx b/src/components/Messages/TextWrapper.jsx index 75a1ce490a..d4e528695e 100644 --- a/src/components/Messages/TextWrapper.jsx +++ b/src/components/Messages/TextWrapper.jsx @@ -3,7 +3,7 @@ import Markdown from 'markdown-to-jsx'; import Embed from './Embed'; import Highlight from './Highlight'; import regexSplit from '~/utils/regexSplit'; -import { languages, wrapperRegex } from '~/utils'; +import { wrapperRegex } from '~/utils'; const { codeRegex, inLineRegex, markupRegex, languageMatch, newLineMatch } = wrapperRegex; const mdOptions = { wrapper: React.Fragment, forceWrapper: true }; @@ -67,11 +67,12 @@ export default function TextWrapper({ text }) { );