| 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;
 |