I have a function for setting font size inline style. It works mostly, except after cycling through several font-sizes, i have to toggle the button twice. So to try to solve this, I want to cycle through the current selction's content state, remove all the current font size styles, and then toggle the new style. This is what I have so far, except Modifier.removeInlineStyle()
does not seem to be being applied and I am still left with my original issue.
state is set:
constructor(props: RichTextEditorComponentProps) {
super(props);
this.state = this.propsToState(props);
}
propsToState(props: RichTextEditorComponentProps) {
return {
editorState: props.content ? EditorState.createWithContent(
ContentState.createFromBlockArray(
convertFromHTML(props.content).contentBlocks,
convertFromHTML(props.content).entityMap
)
) : EditorState.createEmpty()
};
}
method in class:
onFontSizeStyleClick(fontStyle: string) {
const contentState = this.state.editorState.getCurrentContent();
const styles = this.state.editorState.getCurrentInlineStyle();
const selection = this.state.editorState.getSelection();
Object.keys(FontStyleMap).forEach(style => {
if (styles.has(style)) {
Modifier.removeInlineStyle(contentState, selection, style);
}
});
this.onChange(RichUtils.toggleInlineStyle(this.state.editorState, fontStyle));
}
an then this get called from:
<button
type="button"
className="style-button"
onClick={() => this.onFontSizeStyleClick('fontSizeXS')}>
SM
</button>
<button
type="button"
className="style-button"
onClick={() => this.onFontSizeStyleClick('fontSizeNormal')}>
N
</button>
<button
type="button"
className="style-button"
onClick={() => this.onFontSizeStyleClick('fontSizeL')}>
L
</button>
<button
type="button"
className="style-button"
onClick={() => this.onFontSizeStyleClick('fontSizeXL')}>
XL
</button>