UNPKG

uxcore-mention

Version:

Mention anywhere with this component

158 lines (150 loc) 4.62 kB
/** * example index */ import React, { Component } from 'react'; import Tinymce from 'uxcore-tinymce'; import Dialog from 'uxcore-dialog'; import Mention, { ContenteditableEditor, TextareaEditor, InputEditor, TinymceMention, } from '../src'; import mockData from './mockData.json'; function formatter(data) { return data.map((text) => ({ text })); } const source = ['aaaaa', 'aabbb', 'aaccc', 'bbbcc', 'dddee', 'fffqq', 'pppaa', 'ppccc']; function getPersonData(keyword, next) { setTimeout(() => next(mockData), 100); } function personDataFormatter(data) { return data.map((item) => Object.assign(item, { displayName: item.name + (item.nickNameCn ? `(${item.nickNameCn})` : ''), })); } function personPanelFormatter(data) { return `<img src="${data.avatar}" width="25" height="25" title="${data.name}"> ${data.displayName} - ${data.emplId}`; } function personMentionFormatter(data) { return `@${data.name}(${data.emplId})`; } export default class Demo extends Component { constructor(props) { super(props); this.state = { content: 'xxx', basicContent: 'basic content', personContent: '', readOnly: false, showDialog: false, }; } onToggleReadOnly() { this.setState({ readOnly: !this.state.readOnly, }); } toggleDialog() { this.setState({ showDialog: !this.state.showDialog, }); } render() { return ( <div> <button onClick={this.toggleDialog.bind(this)}>show dialog</button> <Dialog title="mention in dialog" visible={this.state.showDialog} onOk={this.toggleDialog.bind(this)} onCancel={this.toggleDialog.bind(this)} formatter={formatter} > <Mention matchRange={[1, 6]} formatter={personDataFormatter} panelFormatter={personPanelFormatter} source={getPersonData} > <InputEditor width={250} height={30} mentionFormatter={personMentionFormatter} placeholder="input editor placeholder" /> </Mention> </Dialog> <div> <label> <input type="checkbox" checked={this.state.readOnly} onChange={this.onToggleReadOnly.bind(this)} /> 只读 </label> </div> <h1>BASIC:</h1> <Mention matchRange={[0, 6]} source={source} onChange={(e, content) => global.console.log(e, content)} formatter={formatter} > <ContenteditableEditor width={250} height={150} readOnly={this.state.readOnly} placeholder="contenteditable editor placeholder" defaultValue={'defaultValue'} value={this.state.content} maxLength={10} /> <TextareaEditor width={250} height={100} readOnly={this.state.readOnly} placeholder="textarea editor placeholder" defaultValue={'defaultValue'} value={this.state.content} onAdd={(e, content) => global.console.log('onadd', e, content)} onChange={(e, content) => global.console.log('onchange', e, content)} /> <InputEditor width={250} height={30} readOnly={this.state.readOnly} placeholder="input editor placeholder" defaultValue={'defaultValue'} value={this.state.content} maxLength={10} /> </Mention> <button onClick={() => this.setState({ content: new Date().toString() })}>change content</button> <h1>SELECT PERSON:</h1> <Mention matchRange={[2, 6]} source={getPersonData} formatter={personDataFormatter} panelFormatter={personPanelFormatter} onChange={(e, content) => global.console.log('onchange', e, content)} > <ContenteditableEditor mentionFormatter={personMentionFormatter} /> </Mention> <h1>Tinymce</h1> <TinymceMention insertMode={'TEXT_NODE'} source={getPersonData} formatter={personDataFormatter} mentionFormatter={personMentionFormatter} panelFormatter={personPanelFormatter} onAdd={(e, content) => global.console.log('onadd', e, content)} > <Tinymce placeholder={'tinymce placeholder'}/> </TinymceMention> </div> ); } }