-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
index.js
47 lines (35 loc) · 1.12 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import React, { useRef, useEffect } from 'react';
// import PropTypes from 'prop-types';
import { Terminal } from 'xterm';
import useSocket from '@hooks/useSocket';
import * as fit from 'xterm/dist/addons/fit/fit';
import * as webLinks from 'xterm/dist/addons/webLinks/webLinks';
import stores from '@stores';
import 'xterm/dist/xterm.css';
import log from '@utils/logger';
import styles from './index.module.scss';
const logger = log.getLogger('xterm');
Terminal.applyAddon(fit);
Terminal.applyAddon(webLinks);
const XtermTerminal = () => {
const xtermRef = useRef(null);
const project = stores.useStore('project');
const term = new Terminal({
cols: 100,
rows: 30,
});
useEffect(() => {
logger.debug('xterm loaded.');
project.refresh();
term.open(xtermRef.current);
term.fit();
term.write(`\x1B[1;3;31m${project.dataSource.name}\x1B[0m $ `);
}, []);
useSocket('project.index.dev.data', (data) => {
term.write(data);
});
return <div ref={xtermRef} className={styles.xtermContainer} />;
};
XtermTerminal.defaultProps = {};
XtermTerminal.propTypes = {};
export default XtermTerminal;