Your search did not match any results.
Html Editor

Mentions

The HtmlEditor allows a user to mention other users in the text. Users that can be mentioned are suggested in a drop-down list that gets its items from the dataSource.

The suggestion list appears when a user enters a specific marker. To mention a user, enter @ in the text field at the bottom and select the user from the list.

Data for mentions can be from multiple data sources. In this case, you can assign an individual marker to each of them.

Copy to CodeSandBox
Apply
Reset
import React from 'react'; import { employees } from './data.js'; import HtmlEditor from 'devextreme-react/html-editor'; class App extends React.Component { constructor() { super(); this.mentions = [{ dataSource: employees, searchExpr: 'text', displayExpr: 'text' }]; } render() { return ( <div> <div id={'chat-window'}> <div className={'message dx-theme-background-color'}> <div className={'photo'}> <img src={'../../../../images/mentions/Kevin-Carter.png'} /> </div> <div className={'name'}> {'Kevin Carter'} </div> <div className={'date'}> {'07/03/19 - 12:22AM'} </div> <div className={'text'}> <span className={'dx-mention'} spellCheck={'false'}><span><span>@</span>John Heart</span></span> {'What experience do you have in this field?'} </div> </div> <br /> <div className={'message dx-theme-background-color'}> <div className={'photo'}> <img src={'../../../../images/mentions/John-Heart.png'} /> </div> <div className={'name'}> {'John Heart'} </div> <div className={'date'}> {'07/03/19 - 12:25AM'} </div> <div className={'text'}> {"I've been in the audio/video industry since 2001, and I've been the CEO of DevAv since 2009."} </div> </div> <br /> <div className={'message dx-theme-background-color'}> <div className={'photo'}> <img src={'../../../../images/mentions/Kevin-Carter.png'} /> </div> <div className={'name'}> {'Kevin Carter'} </div> <div className={'date'}> {'07/03/19 - 12:26AM'} </div> <div className={'text'}> {"That's very interesting."} <span className={'dx-mention'} spellCheck={'false'}><span><span>@</span>Olivia Peyton</span></span>{', what do you think?'} </div> </div> </div> <HtmlEditor mentions={this.mentions}> <p> <span className={'dx-mention'} spellCheck={'false'} data-marker={'@'} data-mention-value={'Kevin Carter'}><span contentEditable={'false'}><span>@</span>Kevin Carter</span></span> {" I think John's expertise can be very valuable in our startup."} </p> </HtmlEditor> </div> ); } } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render( <App />, document.getElementById('app') );
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.5/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.1.5/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
#chat-window { background-color: rgba(191, 191, 191, 0.15); height: 350px; padding: 10px; } .dx-htmleditor { height: 100px; } #send { float: right; margin: 10px 0px; } .message { height: 85px; background-color: inherit; display: inline-block; max-width: 60%; border-radius: 5px; margin: 5px; padding: 10px; box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); } .name { font-weight: bold; } .date { opacity: 0.5; } .photo { float: left; height: 100%; } .photo > img { width: 40px; height: 40px; display: block; border-radius: 40px; margin-right: 10px; }
export const employees = [{ text: 'John Heart', team: 'Engineering', icon: '../../../../images/mentions/John-Heart.png' }, { text: 'Kevin Carter', team: 'Engineering', icon: '../../../../images/mentions/Kevin-Carter.png' }, { text: 'Olivia Peyton', team: 'Management', icon: '../../../../images/mentions/Olivia-Peyton.png' }, { text: 'Robert Reagan', team: 'Management', icon: '../../../../images/mentions/Robert-Reagan.png' }, { text: 'Cynthia Stanwick', team: 'Engineering', icon: '../../../../images/mentions/Cynthia-Stanwick.png' }, { text: 'Brett Wade ', team: 'Analysis', icon: '../../../../images/mentions/Brett-Wade.png' }, { text: 'Greta Sims', team: 'QA', icon: '../../../../images/mentions/Greta-Sims.png' }];
System.config({ transpiler: 'plugin-babel', paths: { 'npm:': 'https://unpkg.com/' }, defaultExtension: 'js', map: { 'react': 'npm:react@16/umd/react.development.js', 'react-dom': 'npm:react-dom@16/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'html-react-parser': 'npm:html-react-parser@latest/dist/html-react-parser.min.js', 'devextreme': 'npm:devextreme@19.1', 'devextreme-react': 'npm:devextreme-react@19.1', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0/systemjs-babel-browser.js' }, packages: { 'devextreme': { defaultExtension: 'js' }, 'devextreme-react': { main: 'index.js' } }, babelOptions: { sourceMaps: false, stage0: true, react: true } });