2017-06-08_509bba0/509bba0_unpacked_with_node_.../discord_app/components/TypingUsers.js

81 lines
2.5 KiB
JavaScript
Raw Normal View History

2022-07-26 17:06:20 +00:00
import React from 'react';
import PureRenderMixin from 'react-addons-pure-render-mixin';
import lodash from 'lodash';
import classNames from 'classnames';
import Flux from '../lib/flux';
import WindowStore from '../stores/WindowStore';
import SelectedGuildStore from '../stores/SelectedGuildStore';
import NicknameUtils from '../utils/NicknameUtils';
import ChannelRecord from '../records/ChannelRecord';
import UserStore from '../stores/UserStore';
import TypingStore from '../stores/TypingStore';
import RelationshipStore from '../stores/RelationshipStore';
import i18n from '../i18n';
import Spinner from './common/Spinner';
import '../styles/typing.styl';
const TypingUsers = React.createClass({
mixins: [Flux.StoreListenerMixin(TypingStore, WindowStore, SelectedGuildStore), PureRenderMixin],
propTypes: {
channel: React.PropTypes.instanceOf(ChannelRecord),
},
getStateFromStores() {
return {
typingUsers: TypingStore.getTypingUsers(this.props.channel.id),
isFocused: WindowStore.isFocused(),
guildId: SelectedGuildStore.getGuildId(),
};
},
componentWillReceiveProps(nextProps) {
this.setState({
typingUsers: TypingStore.getTypingUsers(nextProps.channel.id),
});
},
render() {
const {guildId} = this.state;
const currentUser = UserStore.getCurrentUser();
const typingUsers = lodash(this.state.typingUsers)
.keys()
.filter(uid => uid != currentUser.id)
.reject(RelationshipStore.isBlocked)
.map(uid => UserStore.getUser(uid))
.filter(user => user != null)
.map(user => NicknameUtils.getName(guildId, this.props.channel.id, user))
.value();
if (typingUsers.length == 0) {
return null;
}
const [a, b, c] = typingUsers;
let typingText;
if (typingUsers.length === 1) {
typingText = i18n.Messages.ONE_USER_TYPING.format({a});
} else if (typingUsers.length === 2) {
typingText = i18n.Messages.TWO_USERS_TYPING.format({a, b});
} else if (typingUsers.length === 3) {
typingText = i18n.Messages.THREE_USERS_TYPING.format({a, b, c});
} else {
typingText = i18n.Messages.SEVERAL_USERS_TYPING;
}
return (
<div className={classNames('typing', {'stop-animation': !this.state.isFocused})}>
<Spinner type="pulsing-ellipsis" className="ellipsis" />
<span className="text">{typingText}</span>
</div>
);
},
});
export default TypingUsers;
// WEBPACK FOOTER //
// ./discord_app/components/TypingUsers.js