Sort participant list alphabetically

auto_join_3.3
Håvar Aambø Fosstveit 2020-04-01 21:38:54 +02:00
parent 038aeaff67
commit 0d4b1c3916
2 changed files with 31 additions and 15 deletions

View File

@ -2,7 +2,7 @@ import React from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { import {
passivePeersSelector, passivePeersSelector,
spotlightPeersSelector spotlightSortedPeersSelector
} from '../../Selectors'; } from '../../Selectors';
import classNames from 'classnames'; import classNames from 'classnames';
import { withStyles } from '@material-ui/core/styles'; import { withStyles } from '@material-ui/core/styles';
@ -114,16 +114,20 @@ class ParticipantList extends React.PureComponent
defaultMessage='Participants in Spotlight' defaultMessage='Participants in Spotlight'
/> />
</li> </li>
{ spotlightPeers.map((peerId) => ( { spotlightPeers.map((peer) => (
<li <li
key={peerId} key={peer.id}
className={classNames(classes.listItem, { className={classNames(classes.listItem, {
selected : peerId === selectedPeerId selected : peer.id === selectedPeerId
})} })}
onClick={() => roomClient.setSelectedPeer(peerId)} onClick={() => roomClient.setSelectedPeer(peer.id)}
> >
<ListPeer id={peerId} advancedMode={advancedMode} isModerator={isModerator}> <ListPeer
<Volume small id={peerId} /> id={peer.id}
advancedMode={advancedMode}
isModerator={isModerator}
>
<Volume small id={peer.id} />
</ListPeer> </ListPeer>
</li> </li>
))} ))}
@ -135,16 +139,16 @@ class ParticipantList extends React.PureComponent
defaultMessage='Passive Participants' defaultMessage='Passive Participants'
/> />
</li> </li>
{ passivePeers.map((peerId) => ( { passivePeers.map((peer) => (
<li <li
key={peerId} key={peer.id}
className={classNames(classes.listItem, { className={classNames(classes.listItem, {
selected : peerId === selectedPeerId selected : peer.id === selectedPeerId
})} })}
onClick={() => roomClient.setSelectedPeer(peerId)} onClick={() => roomClient.setSelectedPeer(peer.id)}
> >
<ListPeer <ListPeer
id={peerId} id={peer.id}
advancedMode={advancedMode} advancedMode={advancedMode}
isModerator={isModerator} isModerator={isModerator}
/> />
@ -174,7 +178,7 @@ const mapStateToProps = (state) =>
state.me.roles.includes(userRoles.ADMIN), state.me.roles.includes(userRoles.ADMIN),
passivePeers : passivePeersSelector(state), passivePeers : passivePeersSelector(state),
selectedPeerId : state.room.selectedPeerId, selectedPeerId : state.room.selectedPeerId,
spotlightPeers : spotlightPeersSelector(state) spotlightPeers : spotlightSortedPeersSelector(state)
}; };
}; };

View File

@ -12,6 +12,10 @@ const peersKeySelector = createSelector(
peersSelector, peersSelector,
(peers) => Object.keys(peers) (peers) => Object.keys(peers)
); );
const peersValueSelector = createSelector(
peersSelector,
(peers) => Object.values(peers)
);
export const lobbyPeersKeySelector = createSelector( export const lobbyPeersKeySelector = createSelector(
lobbyPeersSelector, lobbyPeersSelector,
@ -74,15 +78,23 @@ export const spotlightPeersSelector = createSelector(
(spotlights, peers) => peers.filter((peerId) => spotlights.includes(peerId)) (spotlights, peers) => peers.filter((peerId) => spotlights.includes(peerId))
); );
export const spotlightSortedPeersSelector = createSelector(
spotlightsSelector,
peersValueSelector,
(spotlights, peers) => peers.filter((peer) => spotlights.includes(peer.id))
.sort((a, b) => a.displayName.localeCompare(b.displayName))
);
export const peersLengthSelector = createSelector( export const peersLengthSelector = createSelector(
peersSelector, peersSelector,
(peers) => Object.values(peers).length (peers) => Object.values(peers).length
); );
export const passivePeersSelector = createSelector( export const passivePeersSelector = createSelector(
peersKeySelector, peersValueSelector,
spotlightsSelector, spotlightsSelector,
(peers, spotlights) => peers.filter((peerId) => !spotlights.includes(peerId)) (peers, spotlights) => peers.filter((peer) => !spotlights.includes(peer.id))
.sort((a, b) => a.displayName.localeCompare(b.displayName))
); );
export const videoBoxesSelector = createSelector( export const videoBoxesSelector = createSelector(