filter roomTypes by condition

pull/7748/head
Guilherme Gazzo 8 years ago
parent a0204c48b2
commit 2b7a7d41d4
No known key found for this signature in database
GPG Key ID: 1F85C9AD922D0829
  1. 3
      packages/rocketchat-lib/client/lib/roomTypes.js
  2. 43
      packages/rocketchat-lib/startup/defaultRoomTypes.js
  3. 18
      packages/rocketchat-ui-sidenav/client/sideNav.js
  4. 2
      packages/rocketchat-ui-sidenav/client/toolbar.html

@ -1,11 +1,10 @@
import roomTypesCommon from '../../lib/roomTypesCommon';
RocketChat.roomTypes = new class extends roomTypesCommon {
checkCondition(roomType) {
return roomType.condition == null || roomType.condition();
}
getTypes() {
return _.sortBy(this.roomTypesOrder, 'order').map((type) => this.roomTypes[type.identifier]);
return _.sortBy(this.roomTypesOrder, 'order').map((type) => this.roomTypes[type.identifier]).filter(type => !type.condition || type.condition());
}
getIcon(roomType) {
return this.roomTypes[roomType] && this.roomTypes[roomType].icon;

@ -1,8 +1,24 @@
/* globals openRoom */
// favorite
const filter = {
activity(room) {
return ['f', 'activity'].includes(room.identifier);
},
çç(room) {
return ['f', ...(preferences.mergeChannels ? ['channels'] : ['p', 'c']), 'd', 'unread'].includes(room.identifier);
},
category(room) {
return ['f', ...(preferences.mergeChannels ? ['channels'] : ['p', 'c']), 'd'].includes(room.identifier);
}
};
// unread
RocketChat.roomTypes.add('unread', 10, {
unread: true,
condition() {
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return preferences.roomsListExhibitionMode === 'unread';
},
label: 'Unread'
});
@ -14,12 +30,21 @@ RocketChat.roomTypes.add('f', 20, {
// activity
RocketChat.roomTypes.add('activity', 30, {
// icon: 'star',
condition() {
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return preferences.roomsListExhibitionMode === 'activity';
},
label: 'Conversations'
});
RocketChat.roomTypes.add('channels', 30, {
label: 'Channels'
label: 'Channels',
condition() {
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return ['unread', 'category'].includes(preferences.roomsListExhibitionMode) && preferences.mergeChannels;
}
});
// public
RocketChat.roomTypes.add('c', 30, {
@ -46,7 +71,9 @@ RocketChat.roomTypes.add('c', 30, {
},
condition() {
return RocketChat.authz.hasAtLeastOnePermission(['view-c-room', 'view-joined-room']) || RocketChat.settings.get('Accounts_AllowAnonymousRead') === true;
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return ['unread', 'category'].includes(preferences.roomsListExhibitionMode) && !preferences.mergeChannels && (RocketChat.authz.hasAtLeastOnePermission(['view-c-room', 'view-joined-room']) || RocketChat.settings.get('Accounts_AllowAnonymousRead') === true);
},
showJoinLink(roomId) {
@ -79,7 +106,9 @@ RocketChat.roomTypes.add('p', 40, {
},
condition() {
return RocketChat.authz.hasAllPermission('view-p-room');
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return ['unread', 'category'].includes(preferences.roomsListExhibitionMode) && !preferences.mergeChannels && RocketChat.authz.hasAllPermission('view-p-room');
}
});
@ -130,7 +159,9 @@ RocketChat.roomTypes.add('d', 50, {
},
condition() {
return RocketChat.authz.hasAtLeastOnePermission(['view-d-room', 'view-joined-room']);
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return ['unread', 'category'].includes(preferences.roomsListExhibitionMode) && RocketChat.authz.hasAtLeastOnePermission(['view-d-room', 'view-joined-room']);
},
getUserStatus(roomId) {

@ -22,23 +22,7 @@ Template.sideNav.helpers({
},
roomType() {
const types = RocketChat.roomTypes.getTypes();
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
const mode = preferences.roomsListExhibitionMode || 'activity';
const filter = {
activity(room) {
return ['f', 'activity'].includes(room.identifier);
},
unread(room) {
return ['f', ...(preferences.mergeChannels ? ['channels'] : ['p', 'c']), 'd', 'unread'].includes(room.identifier);
},
category(room) {
return ['f', ...(preferences.mergeChannels ? ['channels'] : ['p', 'c']), 'd'].includes(room.identifier);
}
}[mode];
return types.filter(filter);
return RocketChat.roomTypes.getTypes();
}
});

@ -33,7 +33,7 @@
</template>
<template name="toolbarSearchList">
{{> chatRoomItem .}}
{{> chatRoomItem . icon=icon}}
</template>
<template name="toolbarSearchListEmpty">

Loading…
Cancel
Save