import React from 'react'; import TuiImageEditor from 'tui-image-editor'; export default class ImageEditor extends React.Component { rootEl = React.createRef(); imageEditorInst = null; componentDidMount() { this.imageEditorInst = new TuiImageEditor(this.rootEl.current, { ...this.props, }); this.bindEventHandlers(this.props); } componentWillUnmount() { this.unbindEventHandlers(); this.imageEditorInst.destroy(); this.imageEditorInst = null; } shouldComponentUpdate(nextProps) { this.bindEventHandlers(this.props, nextProps); return false; } getInstance() { return this.imageEditorInst; } getRootElement() { return this.rootEl.current; } bindEventHandlers(props, prevProps) { Object.keys(props) .filter(this.isEventHandlerKeys) .forEach((key) => { const eventName = key[2].toLowerCase() + key.slice(3); // For if (prevProps && prevProps[key] !== props[key]) { this.imageEditorInst.off(eventName); } this.imageEditorInst.on(eventName, props[key]); }); } unbindEventHandlers() { Object.keys(this.props) .filter(this.isEventHandlerKeys) .forEach((key) => { const eventName = key[2].toLowerCase() + key.slice(3); this.imageEditorInst.off(eventName); }); } isEventHandlerKeys(key) { return /on[A-Z][a-zA-Z]+/.test(key); } render() { return
; } }