Skip to content
This repository was archived by the owner on Mar 12, 2023. It is now read-only.

Commit 913f2c6

Browse files
committed
Support code copy button
1 parent 7497df0 commit 913f2c6

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

components/notion-blocks/code.tsx

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use client'
22

3+
import React, { useState } from 'react';
34
import Prism from 'prismjs'
45
import 'prismjs/components/prism-css'
56
import 'prismjs/components/prism-diff'
@@ -21,22 +22,36 @@ import styles from '../../styles/notion-block.module.css'
2122

2223

2324
const Code = ({ block }) => {
25+
const [state, setState] = useState(false)
2426
const code = block.Code.RichTexts.map((richText: RichText) => richText.Text.Content).join('')
2527
const language = block.Code.Language.toLowerCase()
2628
const grammer = Prism.languages[language.toLowerCase()] || Prism.languages.javascript
2729

30+
const handleClick = (ev) => {
31+
navigator.clipboard
32+
.writeText(ev.target.getAttribute('data-code'))
33+
.then(() => {
34+
setState(true)
35+
})
36+
}
37+
2838
return (
2939
<div className={styles.code}>
3040
{language === 'mermaid' ? (
3141
<Mermaid id={`mermaid-${block.Id}`} definition={code} />
3242
) : (
33-
<pre>
34-
<code
35-
dangerouslySetInnerHTML={{
36-
__html: Prism.highlight(code, grammer, language),
37-
}}
38-
/>
39-
</pre>
43+
<div>
44+
<div>
45+
<button data-code={code} onClick={handleClick}>{state ? 'Copied!' : 'Copy'}</button>
46+
</div>
47+
<pre>
48+
<code
49+
dangerouslySetInnerHTML={{
50+
__html: Prism.highlight(code, grammer, language),
51+
}}
52+
/>
53+
</pre>
54+
</div>
4055
)}
4156
{block.Code.Caption.length > 0 && block.Code.Caption[0].Text.Content ? (
4257
<div className={styles.caption}>

0 commit comments

Comments
 (0)