You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
import { connect } from 'react-redux';
|
|
import AceEditor from 'react-ace';
|
|
import 'brace/mode/plain_text';
|
|
import 'brace/mode/markdown';
|
|
import 'brace/mode/json';
|
|
import 'brace/mode/javascript';
|
|
import 'brace/mode/c_cpp';
|
|
import 'brace/mode/java';
|
|
import 'brace/theme/tomorrow_night_eighties';
|
|
import 'brace/ext/searchbox';
|
|
import { actions } from 'reducers';
|
|
|
|
class FoldableAceEditor extends AceEditor {
|
|
componentDidMount() {
|
|
super.componentDidMount();
|
|
|
|
const { shouldBuild } = this.props.current;
|
|
if (shouldBuild) this.foldTracers();
|
|
}
|
|
|
|
componentDidUpdate(prevProps, prevState, snapshot) {
|
|
super.componentDidUpdate(prevProps, prevState, snapshot);
|
|
|
|
const { editingFile, shouldBuild } = this.props.current;
|
|
if (editingFile !== prevProps.current.editingFile) {
|
|
if (shouldBuild) this.foldTracers();
|
|
}
|
|
}
|
|
|
|
foldTracers() {
|
|
const session = this.editor.getSession();
|
|
for (let row = 0; row < session.getLength(); row++) {
|
|
if (!/^\s*\/\/.+{\s*$/.test(session.getLine(row))) continue;
|
|
const range = session.getFoldWidgetRange(row);
|
|
if (range) {
|
|
session.addFold('...', range);
|
|
row = range.end.row;
|
|
}
|
|
}
|
|
}
|
|
|
|
resize() {
|
|
this.editor.resize();
|
|
}
|
|
}
|
|
|
|
export default connect(({ current }) => ({ current }), actions, null, { forwardRef: true })(
|
|
FoldableAceEditor,
|
|
);
|