I am using tinymce/tinymce-react ^2.2.6
I am trying to implement 2 editors on a single page along with wiris plugins for maths and chemistry, but it's showing the error. Cannot read property 'getCore' of undefined. in editor_plugin.src.js.
Here is my code for two editors (JSX file)
import React, { Component } from 'react';
import {
Modal,
Button,
Grid,
Row,
Col,
ControlLabel,
FormControl,
FormGroup,
Radio
} from 'react-bootstrap';
import { DropdownButton, MenuItem } from 'react-bootstrap';
import PropTypes from 'prop-types';
import { Editor } from '@tinymce/tinymce-react';
import { withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
import { loadTestData, saveTestData } from '../../../utils/localStorageUtil';
export default class TrueFlaseModalBody extends Component {
constructor(props) {
super(props);
this.state = {};
}
componentWillReceiveProps(nextProps) {
this.setState({
question: nextProps.editorQuestion ? nextProps.editorQuestion : '',
solution: nextProps.editorSolution ? nextProps.editorSolution : ''
})
}
componentDidMount() {
this.setState({
question: this.props.editorQuestion ? this.props.editorQuestion : '',
solution: this.props.editorSolution ? this.props.editorSolution : ''
})
// Editor.init({ setup: (editor) => console.log(editor)})
}
render() {
const {
handleQuestionChange,
handleSolutionChange,
editorQuestion,
editorSolution,
isCorrectHandle,
editorQuestionOptions,
changeQuestionType,
} = this.props;
return (
<React.Fragment>
<DropdownButton title="TRUE/FALSE" id={dropdown-basic-${1}
}>
Multiple Choice Questions
True False
<Editor
cloudChannel="dev"
initialValue={editorQuestion}
menubar={true}
inline={true}
id='question'
value={this.state.question}
init={{
name: 'test' + +new Date(),
language: "en",
content_css: [
'https://***/tinyMce.css'
],
external_plugins: {
image: 'https://*****/tinymce/plugins/image/plugin.js',
tiny_mce_wiris:
'https://www.wiris.net/demo/plugins/tiny_mce/plugin.js'
},
plugins: [
'advlist autolink lists link charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table contextmenu paste imagetools wordcount'
],
file_browser_callback_types: 'image',
file_browser_callback: function(field_name, url, type, win) {
console.log(url, type, win);
win.document.getElementById(field_name).value =
'my browser value';
},
file_picker_type: 'image',
file_picker_callback: (cb, value, meta) => {
var input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/');
input.onchange = function() {
var file = this.files[0];
var reader = new FileReader();
reader.onload = function() {
var id = 'blobid' + new Date().getTime();
var blobCache =
window.tinymce.activeEditor.editorUpload.blobCache;
var base64 = reader.result.split(',')[1];
var blobInfo = blobCache.create(id, file, base64);
blobCache.add(blobInfo);
cb(blobInfo.blobUri(), { title: file.name });
};
reader.readAsDataURL(file);
};
input.click();
},
images_upload_handler: function (blobInfo, success, failure) {
var xhr, formData;
xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.open('POST', 'postAcceptor.php');
xhr.onload = function() {
var json;
if (xhr.status != 200) {
failure('HTTP Error: ' + xhr.status);
return;
}
json = JSON.parse(xhr.responseText);
if (!json || typeof json.location != 'string') {
failure('Invalid JSON: ' + xhr.responseText);
return;
}
success(json.location);
};
formData = new FormData();
formData.append('file', blobInfo.blob(), blobInfo.filename());
xhr.send(formData);
},
toolbar:
'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | tiny_mce_wiris_formulaEditor | tiny_mce_wiris_formulaEditorChemistry'
}}
onChange={handleQuestionChange}
/>
<FormGroup>
{
editorQuestionOptions.map((option, arrayIndex) => {
return (
< Row style={{ paddingBottom: "20px" }} >
<Col lg={2}>
<Radio id={arrayIndex} checked={option.isCorrect} onClick={isCorrectHandle} name="radioGroup" inline />
</Col>
<Col lg={9} style={{ position: 'relative', marginLeft: '-80px' }}>
<FormControl value={option.name} />
</Col>
</ Row>
)
})
}
</FormGroup>
<div id="options">
<Editor
cloudChannel="dev"
name='solution'
id='solution'
value={this.state.solution}
menubar={true}
inline={true}
init={{
name: 'solution' + +new Date(),
language: "en",
content_css: [
'https://s3.ap-south-1.amazonaws.com/test-portal-assets/tinyMce.css'
],
external_plugins: {
image: 'https://s3.ap-south-1.amazonaws.com/classplus-tinymce/tinymce/plugins/image/plugin.js',
tiny_mce_wiris: 'https://www.wiris.net/demo/plugins/tiny_mce/plugin.js'
},
plugins: [
'advlist autolink lists link charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table contextmenu paste imagetools wordcount'
],
menubar: false,
file_browser_callback_types: 'image',
file_browser_callback: function(field_name, url, type, win) {
console.log(url, type, win);
win.document.getElementById(field_name).value =
'my browser value';
},
file_picker_type: 'image',
file_picker_callback: (cb, value, meta) => {
console.log(">>>>>>>");
var input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
input.onchange = function() {
var file = this.files[0];
var reader = new FileReader();
reader.onload = function() {
var id = 'blobid' + new Date().getTime();
var blobCache =
window.tinymce.activeEditor.editorUpload.blobCache;
var base64 = reader.result.split(',')[1];
var blobInfo = blobCache.create(id, file, base64);
blobCache.add(blobInfo);
cb(blobInfo.blobUri(), { title: file.name });
};
reader.readAsDataURL(file);
};
input.click();
},
images_upload_handler: function (blobInfo, success, failure) {
var xhr, formData;
xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.open('POST', 'postAcceptor.php');
xhr.onload = function() {
var json;
if (xhr.status != 200) {
failure('HTTP Error: ' + xhr.status);
return;
}
json = JSON.parse(xhr.responseText);
if (!json || typeof json.location != 'string') {
failure('Invalid JSON: ' + xhr.responseText);
return;
}
success(json.location);
};
formData = new FormData();
formData.append('file', blobInfo.blob(), blobInfo.filename());
xhr.send(formData);
},
toolbar:
'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | tiny_mce_wiris_formulaEditor | tiny_mce_wiris_formulaEditorChemistry'
}}
onChange={handleSolutionChange}
/>
</div>
<Row>
<Col lg={2}>
<h4>TAGS</h4>
</Col>
</Row>
<Row>
<Col lg={12}>
<FormControl placeholder="Enter your tags" />
</Col>
</Row>
</React.Fragment>
);
}
}
Here is error:
editor_plugin.src.js:377 Uncaught TypeError: Cannot read property 'getCore' of undefined
at t.(anonymous function).t.(anonymous function).init (webpack:///./editor_plugin.src.js?:377:74)
at yx (tinymce.min.js:2)
at Array. (tinymce.min.js:2)
at Object.qt [as each] (tinymce.min.js:2)
at Ex (tinymce.min.js:2)
at Gx. (tinymce.min.js:2)
at Array. (tinymce.min.js:2)
at qt (tinymce.min.js:2)
at u (tinymce.min.js:2)
at n (tinymce.min.js:2)
at HTMLScriptElement.l.(anonymous function).l.(anonymous function).l.(anonymous function).o.onload (https://***/tinymce/tinymce.min.js:2:92230)