Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
constructor(props: RemirrorProps, context: RemirrorThemeContextType) {
super(props, context);
// Ensure that children is a render prop.
propIsFunction(props.children);
// Initialize the manager and create the initial state.
this.manager.init({
getState: this.getState,
getTheme: this.getTheme,
portalContainer: this.portalContainer,
});
this.state = this.createInitialState();
// Create the ProsemirrorView and initialize our extension manager with it.
this.view = this.createView();
this.manager.initView(this.view);
}
public componentDidUpdate(
{ editable, manager: prevManager }: RemirrorProps,
prevState: RemirrorState>,
) {
// Ensure that children is still a render prop
propIsFunction(this.props.children);
// Check whether the editable prop has been updated
if (this.props.editable !== editable && this.view && this.editorRef) {
this.view.setProps({ ...this.view.props, editable: () => this.props.editable });
}
// Check if the manager has changed
if (!prevManager.isEqual(this.props.manager)) {
this.updateExtensionManager();
this.view.setProps({ ...this.view.props, nodeViews: this.manager.data.nodeViews });
// The following converts the current content to HTML and then uses the
// new manager schema to convert it back into a ProsemirrorNode for
// compatibility with the new manager.
const htmlString = toHTML({ node: this.state.editor.newState.doc, schema: prevManager.schema });
const newContent = fromHTML({ schema: this.manager.schema, content: htmlString, doc: this.doc });