|
1 | | -import clx from 'classnames' |
2 | | -import React, { PureComponent } from 'react' |
3 | | -import CopyToClipboard from 'react-copy-to-clipboard' |
4 | | -import Highlight from 'react-highlight' |
| 1 | +import React from 'react' |
5 | 2 |
|
6 | | -import 'highlight.js/styles/atom-one-light.css' |
| 3 | +import CodePreviewer from 'or-code-previewer' |
7 | 4 |
|
8 | | -class CopyBtn extends PureComponent< |
9 | | - { |
10 | | - source: string |
11 | | - }, |
12 | | - { |
13 | | - copied: boolean |
14 | | - } |
15 | | -> { |
16 | | - timeoutId: NodeJS.Timer |
17 | | - |
18 | | - state = { |
19 | | - copied: false |
20 | | - } |
21 | | - |
22 | | - render() { |
23 | | - const { copied } = this.state |
24 | | - return ( |
25 | | - <CopyToClipboard text={this.props.source} onCopy={this.handleCopy}> |
26 | | - <button className="copy-btn"> |
27 | | - <div className={clx('copy-btn-text', { 'copy-btn-copied': copied })}> |
28 | | - <div style={{ marginBottom: 6 }}>Copied!</div> |
29 | | - <div>Copy</div> |
30 | | - </div> |
31 | | - </button> |
32 | | - </CopyToClipboard> |
33 | | - ) |
34 | | - } |
35 | | - |
36 | | - handleCopy = () => { |
37 | | - if (this.timeoutId) { |
38 | | - clearTimeout(this.timeoutId) |
39 | | - } |
40 | | - |
41 | | - this.setState( |
42 | | - { |
43 | | - copied: true |
44 | | - }, |
45 | | - () => { |
46 | | - this.timeoutId = setTimeout(() => { |
47 | | - this.setState({ copied: false }) |
48 | | - }, 2000) |
49 | | - } |
50 | | - ) |
51 | | - } |
52 | | -} |
53 | | - |
54 | | -export function previewCode(source: string, lang: string = 'tsx'): any { |
55 | | - return ( |
56 | | - <div className="code-previewer"> |
57 | | - <h1 className="code-previewer-title">Story Source</h1> |
58 | | - <CopyBtn source={source} /> |
59 | | - <Highlight className={lang}>{source}</Highlight> |
60 | | - </div> |
61 | | - ) |
| 5 | +export function previewCode(code: string): any { |
| 6 | + return <CodePreviewer title="Story Source" lang="tsx" code={code} /> |
62 | 7 | } |
0 commit comments