@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
68 lines • 2.23 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import React, { PureComponent } from 'react';
import { ResourcedMention } from '@atlaskit/mention/element';
import ResourcedMentionWithProfilecard from './mention-with-profilecard';
const GENERIC_USER_IDS = ['HipChat', 'all', 'here'];
const noop = () => {};
export default class MentionWithProviders extends PureComponent {
constructor(...args) {
super(...args);
_defineProperty(this, "state", {
profilecardProvider: null
});
}
UNSAFE_componentWillMount() {
this.updateProfilecardProvider(this.props);
}
UNSAFE_componentWillReceiveProps(nextProps) {
if (nextProps.profilecardProvider !== this.props.profilecardProvider) {
this.updateProfilecardProvider(nextProps);
}
}
updateProfilecardProvider(props) {
// We are not using async/await here to avoid having an intermediate Promise
// introduced by the transpiler.
// This will allow consumer to use a SynchronousPromise.resolve and avoid useless
// rerendering
if (props.profilecardProvider) {
props.profilecardProvider.then(profilecardProvider => {
this.setState({
profilecardProvider
});
}).catch(() => {
this.setState({
profilecardProvider: null
});
});
} else {
this.setState({
profilecardProvider: null
});
}
}
render() {
const {
accessLevel,
eventHandlers,
id,
mentionProvider,
text
} = this.props;
const {
profilecardProvider
} = this.state;
const actionHandlers = {};
['onClick', 'onMouseEnter', 'onMouseLeave'].forEach(handler => {
actionHandlers[handler] = eventHandlers && eventHandlers[handler] || noop;
});
const MentionComponent = profilecardProvider && GENERIC_USER_IDS.indexOf(id) === -1 ? ResourcedMentionWithProfilecard : ResourcedMention;
return /*#__PURE__*/React.createElement(MentionComponent, _extends({
id: id,
text: text,
accessLevel: accessLevel,
mentionProvider: mentionProvider,
profilecardProvider: profilecardProvider
}, actionHandlers));
}
}