dispatch/client/src/js/components/TabList.js

80 lines
2.2 KiB
JavaScript
Raw Normal View History

2015-12-28 23:34:32 +00:00
import React, { Component } from 'react';
import pure from 'pure-render-decorator';
import TabListItem from './TabListItem';
@pure
export default class TabList extends Component {
2016-01-05 18:29:22 +00:00
handleTabClick = (server, target) => {
this.props.select(server, target, target && target.charAt(0) !== '#');
this.props.hideMenu();
};
2015-12-30 21:32:14 +00:00
2015-12-28 23:34:32 +00:00
handleConnectClick = () => {
this.props.pushPath('/connect');
this.props.hideMenu();
};
2015-12-28 23:34:32 +00:00
handleSettingsClick = () => {
this.props.pushPath('/settings');
this.props.hideMenu();
};
2015-12-28 23:34:32 +00:00
render() {
2016-01-11 22:31:06 +00:00
const { channels, servers, privateChats, showTabList, selected } = this.props;
const className = showTabList ? 'tablist off-canvas' : 'tablist';
2015-12-28 23:34:32 +00:00
const tabs = [];
channels.forEach((server, address) => {
tabs.push(
<TabListItem
key={address}
2016-01-05 18:29:22 +00:00
server={address}
2015-12-28 23:34:32 +00:00
content={servers.getIn([address, 'name'])}
2016-01-05 18:29:22 +00:00
selected={
selected.server === address &&
selected.channel === null &&
selected.user === null
}
2016-01-13 17:53:54 +00:00
connected={servers.getIn([address, 'connected'])}
2016-01-05 18:29:22 +00:00
onClick={this.handleTabClick}
2015-12-28 23:34:32 +00:00
/>
);
2016-01-05 18:29:22 +00:00
server.forEach((channel, name) => tabs.push(
<TabListItem
key={address + name}
server={address}
target={name}
content={name}
selected={selected.server === address && selected.channel === name}
onClick={this.handleTabClick}
/>
));
2015-12-28 23:34:32 +00:00
if (privateChats.has(address)) {
2016-01-05 18:29:22 +00:00
privateChats.get(address).forEach(nick => tabs.push(
<TabListItem
key={address + nick}
server={address}
target={nick}
content={nick}
selected={selected.server === address && selected.user === nick}
onClick={this.handleTabClick}
/>
));
2015-12-28 23:34:32 +00:00
}
});
return (
<div className={className}>
<button className="button-connect" onClick={this.handleConnectClick}>Connect</button>
<div className="tab-container">{tabs}</div>
<div className="side-buttons">
2017-02-16 02:55:50 +00:00
<i className="icon-user" />
<i className="icon-cog" onClick={this.handleSettingsClick} />
2015-12-28 23:34:32 +00:00
</div>
</div>
);
}
}