Integrating Rich Text Editor in Tab Components
27 Feb 202524 minutes to read
Integrating a Rich Text Editor within Tab components provides a versatile and organized user interface for text formatting and content creation across multiple tabs. Each tab instance includes a dedicated editor instance configured with extensive toolbar options, enabling users to effortlessly manipulate text styles, apply formatting, insert media, and manage content layout.
[Class-component]
import {TabComponent,TabItemDirective,TabItemsDirective} from '@syncfusion/ej2-react-navigations';
import {HtmlEditor,Image,Inject,Link,QuickToolbar,RichTextEditorComponent,Toolbar,Table,PasteCleanup} from '@syncfusion/ej2-react-richtexteditor';
import * as React from 'react';
class App extends React.Component {
constructor(props) {
super(props);
this.editorRef1 = React.createRef();
this.editorRef2 = React.createRef();
this.editorRef3 = React.createRef();
this.headerText = [{ text: 'TAB 1' }, { text: 'TAB 2' }, { text: 'TAB 3' }];
this.tools = {
items: [
'Bold',
'Italic',
'Underline',
'StrikeThrough',
'FontName',
'FontSize',
'FontColor',
'BackgroundColor',
'LowerCase',
'UpperCase',
'|',
'Formats',
'Alignments',
'OrderedList',
'UnorderedList',
'Outdent',
'Indent',
'|',
'CreateLink',
'Image',
'|',
'ClearFormat',
'Print',
'SourceCode',
'FullScreen',
'|',
'Undo',
'Redo',
],
};
}
content1 = () => {
return (
<div>
<RichTextEditorComponent
ref={this.editorRef1}
toolbarSettings={this.tools}
>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
content2 = () => {
return (
<div>
<RichTextEditorComponent
ref={this.editorRef2}
toolbarSettings={this.tools}
>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
content3 = () => {
return (
<div>
<RichTextEditorComponent
ref={this.editorRef3}
toolbarSettings={this.tools}
>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
render() {
return (<div>
<TabComponent heightAdjustMode="Auto">
<TabItemsDirective>
<TabItemDirective
header={this.headerText[0]}
content={this.content1}
/>
<TabItemDirective
header={this.headerText[1]}
content={this.content2}
/>
<TabItemDirective
header={this.headerText[2]}
content={this.content3}
/>
</TabItemsDirective>
</TabComponent>
</div>);
}
}
export default App;import {TabComponent,TabItemDirective,TabItemsDirective} from '@syncfusion/ej2-react-navigations';
import {HtmlEditor,Image,Inject,Link,QuickToolbar,RichTextEditorComponent,Toolbar,Table,PasteCleanup} from '@syncfusion/ej2-react-richtexteditor';
import * as React from 'react';
class App extends React.Component<{},{}> {
private editorRef1: React.RefObject<RichTextEditorComponent>;
private editorRef2: React.RefObject<RichTextEditorComponent>;
private editorRef3: React.RefObject<RichTextEditorComponent>;
private headerText: { text: string }[];
private tools: { items: string[] };
constructor(props: {}) {
super(props);
this.editorRef1 = React.createRef();
this.editorRef2 = React.createRef();
this.editorRef3 = React.createRef();
this.headerText = [{ text: 'TAB 1' }, { text: 'TAB 2' }, { text: 'TAB 3' }];
this.tools = {
items: [
'Bold', 'Italic', 'Underline', 'StrikeThrough',
'FontName', 'FontSize', 'FontColor', 'BackgroundColor',
'LowerCase', 'UpperCase', '|',
'Formats', 'Alignments', 'OrderedList', 'UnorderedList',
'Outdent', 'Indent', '|',
'CreateLink', 'Image', '|',
'ClearFormat', 'Print', 'SourceCode', 'FullScreen', '|',
'Undo', 'Redo'
]
};
}
private content1 = () => {
return (
<RichTextEditorComponent ref={this.editorRef1} toolbarSettings={this.tools}>
<Inject services={[Toolbar, Image, Link, HtmlEditor, QuickToolbar, Table, PasteCleanup]} />
</RichTextEditorComponent>
);
}
private content2 = () => {
return (
<RichTextEditorComponent ref={this.editorRef2} toolbarSettings={this.tools}>
<Inject services={[Toolbar, Image, Link, HtmlEditor, QuickToolbar, Table, PasteCleanup]} />
</RichTextEditorComponent>
);
}
private content3 = ()=> {
return (
<RichTextEditorComponent ref={this.editorRef3} toolbarSettings={this.tools}>
<Inject services={[Toolbar, Image, Link, HtmlEditor, QuickToolbar, Table, PasteCleanup]} />
</RichTextEditorComponent>
);
}
public render() {
return (
<div>
<TabComponent heightAdjustMode='Auto'>
<TabItemsDirective>
<TabItemDirective header={this.headerText[0]} content={this.content1} />
<TabItemDirective header={this.headerText[1]} content={this.content2} />
<TabItemDirective header={this.headerText[2]} content={this.content3} />
</TabItemsDirective>
</TabComponent>
</div>
);
}
}
export default App;[Functional-component]
import { useRef } from 'react';
import * as React from 'react';
import {TabComponent,TabItemDirective,TabItemsDirective} from '@syncfusion/ej2-react-navigations';
import {HtmlEditor,Image,Inject,Link,QuickToolbar,RichTextEditorComponent,Toolbar,Table,PasteCleanup} from '@syncfusion/ej2-react-richtexteditor';
function App() {
let editorRef1 = useRef(null);
let editorRef2 = useRef(null);
let editorRef3 = useRef(null);
let headerText = [{ text: 'TAB 1' }, { text: 'TAB 2' }, { text: 'TAB 3' }];
const tools = {
items: [
'Bold',
'Italic',
'Underline',
'StrikeThrough',
'FontName',
'FontSize',
'FontColor',
'BackgroundColor',
'LowerCase',
'UpperCase',
'|',
'Formats',
'Alignments',
'OrderedList',
'UnorderedList',
'Outdent',
'Indent',
'|',
'CreateLink',
'Image',
'|',
'ClearFormat',
'Print',
'SourceCode',
'FullScreen',
'|',
'Undo',
'Redo',
],
};
const content1 = () => {
return (
<div>
<RichTextEditorComponent ref={editorRef1} toolbarSettings={tools}>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
const content2 = () => {
return (
<div>
<RichTextEditorComponent ref={editorRef2} toolbarSettings={tools}>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
const content3 = () => {
return (
<div>
<RichTextEditorComponent ref={editorRef3} toolbarSettings={tools}>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
return (<div>
<TabComponent heightAdjustMode="Auto">
<TabItemsDirective>
<TabItemDirective header={headerText[0]} content={content1} />
<TabItemDirective header={headerText[1]} content={content2} />
<TabItemDirective header={headerText[2]} content={content3} />
</TabItemsDirective>
</TabComponent>
</div>
);
}
export default App;import { useRef } from 'react';
import * as React from 'react';
import {TabComponent,TabItemDirective,TabItemsDirective} from '@syncfusion/ej2-react-navigations';
import {HtmlEditor,Image,Inject,Link,QuickToolbar,RichTextEditorComponent,Toolbar,Table,PasteCleanup} from '@syncfusion/ej2-react-richtexteditor';
function App() {
let editorRef1 = useRef<RichTextEditorComponent>(null);
let editorRef2 = useRef<RichTextEditorComponent>(null);
let editorRef3 = useRef<RichTextEditorComponent>(null);
let headerText = [{ text: 'TAB 1' }, { text: 'TAB 2' }, { text: 'TAB 3' }];
const tools = {
items: [
'Bold',
'Italic',
'Underline',
'StrikeThrough',
'FontName',
'FontSize',
'FontColor',
'BackgroundColor',
'LowerCase',
'UpperCase',
'|',
'Formats',
'Alignments',
'OrderedList',
'UnorderedList',
'Outdent',
'Indent',
'|',
'CreateLink',
'Image',
'|',
'ClearFormat',
'Print',
'SourceCode',
'FullScreen',
'|',
'Undo',
'Redo',
],
};
const content1 = () => {
return (
<div>
<RichTextEditorComponent ref={editorRef1} toolbarSettings={tools}>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
const content2 = () => {
return (
<div>
<RichTextEditorComponent ref={editorRef2} toolbarSettings={tools}>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
const content3 = () => {
return (
<div>
<RichTextEditorComponent ref={editorRef3} toolbarSettings={tools}>
<Inject
services={[
Toolbar,
Link,
Image,
HtmlEditor,
QuickToolbar,
Table,
PasteCleanup,
]}
/>
</RichTextEditorComponent>
</div>
);
};
return (
<div>
<TabComponent heightAdjustMode="Auto">
<TabItemsDirective>
<TabItemDirective header={headerText[0]} content={content1} />
<TabItemDirective header={headerText[1]} content={content2} />
<TabItemDirective header={headerText[2]} content={content3} />
</TabItemsDirective>
</TabComponent>
</div>
);
}
export default App;