|
1 |
| -import * as React from 'react'; |
| 1 | +import React, { useState } from 'react'; |
2 | 2 | import ReactDOM from 'react-dom';
|
3 | 3 | import { Box, ChakraProvider, HStack, Textarea } from '@chakra-ui/react';
|
4 |
| -import { faBold, faItalic, faCode, faHeading } from '@fortawesome/free-solid-svg-icons'; |
5 |
| -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; |
| 4 | +import { faBold, faItalic, faCode, faHeading, faFile } from '@fortawesome/free-solid-svg-icons'; |
6 | 5 | import { attachment, bold, code, headingLevel1, italic, useTextAreaMarkdownEditor } from '../src';
|
7 | 6 | import { ToolbarButton } from './toolbar-button';
|
| 7 | +import ReactMarkdown from 'react-markdown'; |
8 | 8 |
|
9 | 9 | const uploadMock = async () =>
|
10 | 10 | await new Promise<string>(resolve => {
|
11 | 11 | setTimeout(() => {
|
12 |
| - resolve('https://google.com'); |
13 |
| - }, 5000); |
| 12 | + resolve('https://example.com'); |
| 13 | + }, 1000); |
14 | 14 | });
|
15 | 15 |
|
16 | 16 | export const Demo = () => {
|
17 | 17 | const { ref } = useTextAreaMarkdownEditor();
|
| 18 | + const [isPreview, setIsPreview] = useState(false); |
| 19 | + const [value, setValue] = useState(''); |
18 | 20 |
|
19 | 21 | return (
|
20 | 22 | <ChakraProvider>
|
21 | 23 | <Box p={3}>
|
22 | 24 | <HStack py={2}>
|
23 |
| - <ToolbarButton onClick={bold}> |
24 |
| - <FontAwesomeIcon icon={faBold} /> |
25 |
| - </ToolbarButton> |
26 |
| - <ToolbarButton onClick={italic}> |
27 |
| - <FontAwesomeIcon icon={faItalic} /> |
28 |
| - </ToolbarButton> |
29 |
| - <ToolbarButton onClick={code}> |
30 |
| - <FontAwesomeIcon icon={faCode} /> |
31 |
| - </ToolbarButton> |
32 |
| - <ToolbarButton onClick={headingLevel1}> |
33 |
| - <FontAwesomeIcon icon={faHeading} /> |
34 |
| - </ToolbarButton> |
| 25 | + <ToolbarButton onClick={bold} icon={faBold} /> |
| 26 | + <ToolbarButton onClick={italic} icon={faItalic} /> |
| 27 | + <ToolbarButton onClick={code} icon={faCode} /> |
| 28 | + <ToolbarButton onClick={headingLevel1} icon={faHeading} /> |
| 29 | + <ToolbarButton |
| 30 | + onClick={() => { |
| 31 | + attachment({ fileName: 'file-name.txt', fileUrlPromise: uploadMock() }); |
| 32 | + }} |
| 33 | + icon={faFile} |
| 34 | + /> |
| 35 | + |
35 | 36 | <ToolbarButton
|
36 | 37 | onClick={() => {
|
37 |
| - attachment({ fileName: 'file-name', fileUrlPromise: uploadMock() }); |
| 38 | + setIsPreview(val => !val); |
38 | 39 | }}
|
39 | 40 | >
|
40 |
| - + |
| 41 | + Preview |
41 | 42 | </ToolbarButton>
|
42 | 43 | </HStack>
|
43 |
| - <Textarea ref={ref} placeholder="I'm a markdown editor" fontFamily={'monospace'} /> |
| 44 | + |
| 45 | + {isPreview ? ( |
| 46 | + <ReactMarkdown>{ref.current?.value ?? ''}</ReactMarkdown> |
| 47 | + ) : ( |
| 48 | + <Textarea |
| 49 | + ref={ref} |
| 50 | + value={value} |
| 51 | + onChange={e => { |
| 52 | + setValue(e.target.value); |
| 53 | + }} |
| 54 | + placeholder="I'm a markdown editor" |
| 55 | + fontFamily={'monospace'} |
| 56 | + /> |
| 57 | + )} |
44 | 58 | </Box>
|
45 | 59 | </ChakraProvider>
|
46 | 60 | );
|
|
0 commit comments