123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // @flow
-
- import React, { PureComponent } from 'react';
-
- 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 }>
- <img
- className = 'smiley'
- id = { smileyKey }
- onClick = { onSelectFunction }
- src = { `images/smileys/${smileyKey}.svg` } />
- </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;
|