MonacoEditor.tsx 1.55 KB
Newer Older
v-liguo's avatar
v-liguo committed
1
import * as React from 'react';
2
import { Spinner } from '@fluentui/react';
v-liguo's avatar
v-liguo committed
3
4
5
6
7
8
import { DRAWEROPTION } from '../../static/const';
import MonacoEditor from 'react-monaco-editor';

interface MonacoEditorProps {
    content: string;
    loading: boolean;
Lijiao's avatar
Lijiao committed
9
    height: number;
v-liguo's avatar
v-liguo committed
10
11
12
}

class MonacoHTML extends React.Component<MonacoEditorProps, {}> {
13
    public _isMonacoMount!: boolean;
v-liguo's avatar
v-liguo committed
14
15
16
17
18

    constructor(props: MonacoEditorProps) {
        super(props);
    }

Lijiao's avatar
Lijiao committed
19
    componentDidMount(): void {
v-liguo's avatar
v-liguo committed
20
21
22
        this._isMonacoMount = true;
    }

Lijiao's avatar
Lijiao committed
23
    componentWillUnmount(): void {
v-liguo's avatar
v-liguo committed
24
25
26
        this._isMonacoMount = false;
    }

27
    render(): React.ReactNode {
Lijiao's avatar
Lijiao committed
28
        const { content, loading, height } = this.props;
v-liguo's avatar
v-liguo committed
29
        return (
30
            <React.Fragment>
31
32
33
34
35
36
37
                {loading ? (
                    <Spinner
                        label='Wait, wait...'
                        ariaLive='assertive'
                        labelPosition='right'
                        styles={{ root: { width: '100%', height: height } }}
                    >
38
                        <MonacoEditor
39
                            width='100%'
40
                            height={height}
41
                            language='json'
42
43
44
                            value={content}
                            options={DRAWEROPTION}
                        />
45
46
47
48
                    </Spinner>
                ) : (
                    <MonacoEditor width='100%' height={height} language='json' value={content} options={DRAWEROPTION} />
                )}
49
            </React.Fragment>
v-liguo's avatar
v-liguo committed
50
51
52
53
54
        );
    }
}

export default MonacoHTML;