Open SanskarSans opened 4 years ago
When it is used in wizard form, it's content are not preserved.
Here is how I have done
import React from "react"; import styled from "styled-components"; import { Editor } from "react-draft-wysiwyg"; import htmlToDraft from "html-to-draftjs"; import draftToHtml from "draftjs-to-html"; import { EditorState, convertToRaw, ContentState } from "draft-js"; import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; import "./editor.css"; import { Label, Error } from "commons/FormFields/commons/styled"; const EditorField = ({ input, meta, field, form, label, placeholder, labelCss }) => { const [active, setActive] = React.useState(); const [editorState, setEditorState] = React.useState( EditorState.createEmpty() ); React.useEffect(() => { if (form.dirty) { return; } if (!field.value) { return; } const contentBlock = htmlToDraft(field.value); if (contentBlock) { const contentState = ContentState.createFromBlockArray( contentBlock.contentBlocks ); const editorState = EditorState.createWithContent(contentState); setEditorState(editorState); } }, [field.value, form.dirty]); const onEditorStateChange = editorState => { changeValue(editorState); }; const changeValue = editorState => { setEditorState(editorState); form.setFieldValue( field.name, draftToHtml(convertToRaw(editorState.getCurrentContent())) ); }; const hasError = form.touched[field.name] && form.errors[field.name]; return ( <> <Wrapper> {label && ( <Label isActive={active} css={labelCss}> {label} </Label> )} <Editor editorState={editorState} wrapperClassName="wrapper-class" editorClassName="editor-class" toolbarClassName="toolbar-class" onEditorStateChange={editorState => onEditorStateChange(editorState)} placeholder={placeholder} toolbar={{ options: [ "inline", "blockType", "fontSize", "fontFamily", "list", "textAlign", "link", "embedded", "remove", "history" ] }} name={field.name} id={field.name} onFocus={() => setActive(true)} onBlur={e => { setActive(false); field.onBlur(e); }} /> {!!hasError && <Error>{hasError}</Error>} </Wrapper> </> ); }; export default EditorField; const Wrapper = styled.div``;
Asked the question on SO but no reply yet
https://stackoverflow.com/questions/60376563/state-of-draftjs-editor-is-not-preserved-when-moving-to-next-steps
When it is used in wizard form, it's content are not preserved.
Here is how I have done