// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import * as AsyncClient from 'utils/async_client.jsx'; import EmojiStore from 'stores/emoji_store.jsx'; import * as Utils from 'utils/utils.jsx'; import {FormattedMessage} from 'react-intl'; import EmojiListItem from './emoji_list_item.jsx'; import {Link} from 'react-router'; import LoadingScreen from 'components/loading_screen.jsx'; export default class EmojiList extends React.Component { static get propTypes() { return { team: React.propTypes.object.isRequired, user: React.propTypes.object.isRequired }; } constructor(props) { super(props); this.handleEmojiChange = this.handleEmojiChange.bind(this); this.deleteEmoji = this.deleteEmoji.bind(this); this.updateFilter = this.updateFilter.bind(this); this.state = { emojis: EmojiStore.getCustomEmojiMap(), loading: !EmojiStore.hasReceivedCustomEmojis(), filter: '' }; } componentDidMount() { EmojiStore.addChangeListener(this.handleEmojiChange); if (window.mm_config.EnableCustomEmoji === 'true') { AsyncClient.listEmoji(); } } componentWillUnmount() { EmojiStore.removeChangeListener(this.handleEmojiChange); } handleEmojiChange() { this.setState({ emojis: EmojiStore.getCustomEmojiMap(), loading: !EmojiStore.hasReceivedCustomEmojis() }); } updateFilter(e) { this.setState({ filter: e.target.value }); } deleteEmoji(emoji) { AsyncClient.deleteEmoji(emoji.id); } render() { const filter = this.state.filter.toLowerCase(); const isSystemAdmin = Utils.isSystemAdmin(this.props.user.roles); let emojis = []; if (this.state.loading) { emojis.push( ); } else if (this.state.emojis.length === 0) { emojis.push( ); } else { for (const [, emoji] of this.state.emojis) { let onDelete = null; if (isSystemAdmin || this.props.user.id === emoji.creator_id) { onDelete = this.deleteEmoji; } emojis.push( ); } } return (

{emojis}
); } }