1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // @flow
-
- import React, { PureComponent } from 'react';
- import Emoji from 'react-emoji-render';
- import { smileys } from '../smileys';
-
- /**
- * The type of the React {@code Component} props of {@link SmileysPanel}.
- */
- type Props = {
-
- /**
- * Callback to invoke when a smiley is selected. The smiley will be passed
- * back.
- */
- onSmileySelect: Function
- };
-
- /**
- * Implements a React Component showing smileys that can be be shown in chat.
- *
- * @extends Component
- */
- class SmileysPanel extends PureComponent<Props> {
- /**
- * Implements React's {@link Component#render()}.
- *
- * @inheritdoc
- * @returns {ReactElement}
- */
- render() {
- const smileyItems = Object.keys(smileys).map(smileyKey => {
- const onSelectFunction = this._getOnSmileySelectCallback(smileyKey);
-
- return (
- <div
- className = 'smileyContainer'
- id = { smileyKey }
- key = { smileyKey }>
- <Emoji
- onClick = { onSelectFunction }
- onlyEmojiClassName = 'smiley'
- text = { smileys[smileyKey] } />
- </div>
- );
- });
-
- return (
- <div id = 'smileysContainer'>
- { smileyItems }
- </div>
- );
- }
-
- /**
- * Helper method to bind a smiley's click handler.
- *
- * @param {string} smileyKey - The key from the {@link smileys} object
- * that should be added to the chat message.
- * @private
- * @returns {Function}
- */
- _getOnSmileySelectCallback(smileyKey) {
- return () => this.props.onSmileySelect(smileys[smileyKey]);
- }
- }
-
- export default SmileysPanel;
|