Keep TabList sorted

This commit is contained in:
Ken-Håvard Lieng 2017-06-29 06:56:05 +02:00
parent 7160db9614
commit 6624a97ce7
4 changed files with 46 additions and 23 deletions

File diff suppressed because one or more lines are too long

View File

@ -2,17 +2,17 @@ import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect';
import App from 'components/App';
import { getConnected } from 'state/app';
import { getChannels } from 'state/channels';
import { getPrivateChats } from 'state/privateChats';
import { getSortedChannels } from 'state/channels';
import { getSortedPrivateChats } from 'state/privateChats';
import { getServers } from 'state/servers';
import { getSelectedTab, select } from 'state/tab';
import { getShowTabList, hideMenu } from 'state/ui';
import { push } from 'util/router';
const mapState = createStructuredSelector({
channels: getChannels,
channels: getSortedChannels,
connected: getConnected,
privateChats: getPrivateChats,
privateChats: getSortedPrivateChats,
servers: getServers,
showTabList: getShowTabList,
tab: getSelectedTab

View File

@ -78,6 +78,17 @@ function compareUsers(a, b) {
export const getChannels = state => state.channels;
const key = (v, k) => k.toLowerCase();
export const getSortedChannels = createSelector(
getChannels,
channels => channels.withMutations(c =>
c.forEach((server, address) =>
c.update(address, chans => chans.sortBy(key))
)
).sortBy(key)
);
export const getSelectedChannel = createSelector(
getSelectedTab,
getChannels,

View File

@ -1,10 +1,22 @@
import { Set, Map } from 'immutable';
import { createSelector } from 'reselect';
import createReducer from 'util/createReducer';
import { updateSelection } from './tab';
import * as actions from './actions';
export const getPrivateChats = state => state.privateChats;
const lowerCaseValue = v => v.toLowerCase();
export const getSortedPrivateChats = createSelector(
getPrivateChats,
privateChats => privateChats.withMutations(p =>
p.forEach((server, address) =>
p.update(address, chats => chats.sortBy(lowerCaseValue))
)
)
);
function open(state, server, nick) {
return state.update(server, Set(), chats => chats.add(nick));
}