From fad4b2775fb0ea5c288bdd50c3b82dd05e233031 Mon Sep 17 00:00:00 2001 From: Karl Prieb Date: Thu, 18 May 2017 12:18:29 -0300 Subject: [PATCH 1/5] create roomlist --- .../rocketchat-lib/lib/roomTypesCommon.js | 5 +-- .../startup/defaultRoomTypes.js | 10 +++--- packages/rocketchat-livechat/roomType.js | 2 +- .../client/roomList.html | 15 +++++++++ .../rocketchat-ui-sidenav/client/roomList.js | 32 +++++++++++++++++++ .../rocketchat-ui-sidenav/client/sideNav.html | 4 +-- packages/rocketchat-ui-sidenav/package.js | 2 ++ 7 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 packages/rocketchat-ui-sidenav/client/roomList.html create mode 100644 packages/rocketchat-ui-sidenav/client/roomList.js diff --git a/packages/rocketchat-lib/lib/roomTypesCommon.js b/packages/rocketchat-lib/lib/roomTypesCommon.js index 1df20edae0b3..c0e669eff40d 100644 --- a/packages/rocketchat-lib/lib/roomTypesCommon.js +++ b/packages/rocketchat-lib/lib/roomTypesCommon.js @@ -10,11 +10,12 @@ this.roomTypesCommon = class { @param identifier An identifier to the room type. If a real room, MUST BE the same of `db.rocketchat_room.t` field, if not, can be null @param order Order number of the type @param config - template: template name to render on sideNav icon: icon class + label: i18n label route: name: route name action: route action function + identifier: room type identifier */ add(identifier = Random.id(), order, config) { @@ -29,7 +30,7 @@ this.roomTypesCommon = class { identifier, order }); - this.roomTypes[identifier] = config; + this.roomTypes[identifier] = {...config, identifier}; if (config.route && config.route.path && config.route.name && config.route.action) { const routeConfig = { name: config.route.name, diff --git a/packages/rocketchat-lib/startup/defaultRoomTypes.js b/packages/rocketchat-lib/startup/defaultRoomTypes.js index 40fe79c9daf1..a206f6386fdc 100644 --- a/packages/rocketchat-lib/startup/defaultRoomTypes.js +++ b/packages/rocketchat-lib/startup/defaultRoomTypes.js @@ -1,12 +1,12 @@ /* globals openRoom */ RocketChat.roomTypes.add(null, 0, { - template: 'starredRooms', - icon: 'icon-star' + icon: 'icon-star', + label: 'Favorites' }); RocketChat.roomTypes.add('c', 10, { - template: 'channels', icon: 'icon-hash', + label: 'Channels', route: { name: 'channel', path: '/channel/:name', @@ -37,8 +37,8 @@ RocketChat.roomTypes.add('c', 10, { }); RocketChat.roomTypes.add('d', 20, { - template: 'directMessages', icon: 'icon-at', + label: 'Direct_Messages', route: { name: 'direct', path: '/direct/:username', @@ -94,8 +94,8 @@ RocketChat.roomTypes.add('d', 20, { }); RocketChat.roomTypes.add('p', 30, { - template: 'privateGroups', icon: 'icon-lock', + label: 'Private_Groups', route: { name: 'group', path: '/group/:name', diff --git a/packages/rocketchat-livechat/roomType.js b/packages/rocketchat-livechat/roomType.js index c59fdf9a8034..de542583e119 100644 --- a/packages/rocketchat-livechat/roomType.js +++ b/packages/rocketchat-livechat/roomType.js @@ -1,8 +1,8 @@ /* globals openRoom, LivechatInquiry */ RocketChat.roomTypes.add('l', 5, { - template: 'livechat', icon: 'icon-chat-empty', + label: 'Livechat', route: { name: 'live', path: '/live/:code(\\d+)', diff --git a/packages/rocketchat-ui-sidenav/client/roomList.html b/packages/rocketchat-ui-sidenav/client/roomList.html new file mode 100644 index 000000000000..cd37e885cb04 --- /dev/null +++ b/packages/rocketchat-ui-sidenav/client/roomList.html @@ -0,0 +1,15 @@ + diff --git a/packages/rocketchat-ui-sidenav/client/roomList.js b/packages/rocketchat-ui-sidenav/client/roomList.js new file mode 100644 index 000000000000..e1a5565fc45c --- /dev/null +++ b/packages/rocketchat-ui-sidenav/client/roomList.js @@ -0,0 +1,32 @@ +Template.roomList.helpers({ + rooms() { + const query = { + t: { $in: [this.identifier]}, + open: true + }; + + if (RocketChat.settings.get('Favorite_Rooms')) { + query.f = { $ne: true }; + } + + if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { + query.$or = [ + { alert: { $ne: true } }, + { hideUnreadStatus: true } + ]; + } + + return ChatSubscription.find(query, { sort: { 't': 1, 'name': 1 }}); + }, + + favoritesCount() { + return ChatSubscription.find({ f: true }).count(); + } +}); + +Template.roomList.events({ + 'click .more-channels'() { + SideNav.setFlex('listChannelsFlex'); + return SideNav.openFlex(); + } +}); diff --git a/packages/rocketchat-ui-sidenav/client/sideNav.html b/packages/rocketchat-ui-sidenav/client/sideNav.html index 389eae9a8b9b..d16c22a46f11 100644 --- a/packages/rocketchat-ui-sidenav/client/sideNav.html +++ b/packages/rocketchat-ui-sidenav/client/sideNav.html @@ -12,9 +12,9 @@
{{> unreadRooms }} - {{#each roomType}} + {{#each room in roomType}} {{#if canShowRoomType}} - {{> Template.dynamic template=templateName }} + {{> roomList type=room.type identifier=room.identifier label=room.label }} {{/if}} {{/each}} diff --git a/packages/rocketchat-ui-sidenav/package.js b/packages/rocketchat-ui-sidenav/package.js index f9ffa2cbbbbe..af25b6f474a5 100644 --- a/packages/rocketchat-ui-sidenav/package.js +++ b/packages/rocketchat-ui-sidenav/package.js @@ -36,6 +36,7 @@ Package.onUse(function(api) { api.addFiles('client/toolbar.html', 'client'); api.addFiles('client/unreadRooms.html', 'client'); api.addFiles('client/userStatus.html', 'client'); + api.addFiles('client/roomList.html', 'client'); api.addFiles('client/accountBox.js', 'client'); api.addFiles('client/combined.js', 'client'); @@ -53,4 +54,5 @@ Package.onUse(function(api) { api.addFiles('client/starredRooms.js', 'client'); api.addFiles('client/toolbar.js', 'client'); api.addFiles('client/unreadRooms.js', 'client'); + api.addFiles('client/roomList.js', 'client'); }); From ef0c36f16002e5b08499095e23b0f594d18064d3 Mon Sep 17 00:00:00 2001 From: Karl Prieb Date: Thu, 18 May 2017 16:55:45 -0300 Subject: [PATCH 2/5] roomlist --- .../rocketchat-theme/client/imports/base.less | 19 ++- .../rocketchat-theme/client/imports/rtl.less | 4 +- .../client/channels.html | 13 -- .../rocketchat-ui-sidenav/client/channels.js | 37 ----- .../client/channelsAnonymous.html | 13 -- .../client/channelsAnonymous.js | 23 --- .../client/combined.html | 13 -- .../rocketchat-ui-sidenav/client/combined.js | 33 ---- .../client/directMessages.html | 12 -- .../client/directMessages.js | 26 ---- .../client/privateGroups.html | 15 -- .../client/privateGroups.js | 35 ----- .../client/privateGroupsFlex.html | 59 -------- .../client/privateGroupsFlex.js | 141 ------------------ .../client/roomList.html | 35 +++-- .../rocketchat-ui-sidenav/client/roomList.js | 80 +++++++++- .../rocketchat-ui-sidenav/client/sideNav.html | 10 +- .../rocketchat-ui-sidenav/client/sideNav.js | 51 +++---- .../client/starredRooms.html | 10 -- .../client/starredRooms.js | 24 --- .../client/unreadRooms.html | 13 -- .../client/unreadRooms.js | 23 --- packages/rocketchat-ui-sidenav/package.js | 20 +-- tests/pageobjects/side-nav.page.js | 2 +- 24 files changed, 140 insertions(+), 571 deletions(-) delete mode 100644 packages/rocketchat-ui-sidenav/client/channels.html delete mode 100644 packages/rocketchat-ui-sidenav/client/channels.js delete mode 100644 packages/rocketchat-ui-sidenav/client/channelsAnonymous.html delete mode 100644 packages/rocketchat-ui-sidenav/client/channelsAnonymous.js delete mode 100644 packages/rocketchat-ui-sidenav/client/combined.html delete mode 100644 packages/rocketchat-ui-sidenav/client/combined.js delete mode 100644 packages/rocketchat-ui-sidenav/client/directMessages.html delete mode 100644 packages/rocketchat-ui-sidenav/client/directMessages.js delete mode 100644 packages/rocketchat-ui-sidenav/client/privateGroups.html delete mode 100644 packages/rocketchat-ui-sidenav/client/privateGroups.js delete mode 100644 packages/rocketchat-ui-sidenav/client/privateGroupsFlex.html delete mode 100644 packages/rocketchat-ui-sidenav/client/privateGroupsFlex.js delete mode 100644 packages/rocketchat-ui-sidenav/client/starredRooms.html delete mode 100644 packages/rocketchat-ui-sidenav/client/starredRooms.js delete mode 100644 packages/rocketchat-ui-sidenav/client/unreadRooms.html delete mode 100644 packages/rocketchat-ui-sidenav/client/unreadRooms.js diff --git a/packages/rocketchat-theme/client/imports/base.less b/packages/rocketchat-theme/client/imports/base.less index ef347f0f7da2..fab93a754a92 100644 --- a/packages/rocketchat-theme/client/imports/base.less +++ b/packages/rocketchat-theme/client/imports/base.less @@ -1630,16 +1630,23 @@ label.required::after { } } - .unread-rooms-mode { + .unread-rooms-mode, + .unread-rooms-mode + ul { max-height: 0; opacity: 0; overflow: hidden; + margin: 0; + } - &.has-unread { - transition: max-height 1s ease-in, opacity 0.5s linear; - max-height: 5000px; - opacity: 1; - } + .unread-rooms-mode.has-unread { + margin: 25px 0 0; + } + + .unread-rooms-mode.has-unread, + .unread-rooms-mode.has-unread + ul { + transition: max-height 1s ease-in, opacity 0.5s linear; + max-height: 5000px; + opacity: 1; } } diff --git a/packages/rocketchat-theme/client/imports/rtl.less b/packages/rocketchat-theme/client/imports/rtl.less index 21b90888e39b..ee0e6c7d8a18 100644 --- a/packages/rocketchat-theme/client/imports/rtl.less +++ b/packages/rocketchat-theme/client/imports/rtl.less @@ -109,7 +109,7 @@ direction: rtl; .padding-right(8px); - h3.add-room { + h3.room-type { i { .left(6px); } @@ -200,7 +200,7 @@ h3 { .padding-right(10px); - &.add-room { + &.room-type { i { .left(6px); } diff --git a/packages/rocketchat-ui-sidenav/client/channels.html b/packages/rocketchat-ui-sidenav/client/channels.html deleted file mode 100644 index b64b836d30db..000000000000 --- a/packages/rocketchat-ui-sidenav/client/channels.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/channels.js b/packages/rocketchat-ui-sidenav/client/channels.js deleted file mode 100644 index dd4087812ae5..000000000000 --- a/packages/rocketchat-ui-sidenav/client/channels.js +++ /dev/null @@ -1,37 +0,0 @@ - - -Template.channels.helpers({ - isActive() { - if (ChatSubscription.findOne({ t: { $in: ['c']}, f: { $ne: true }, open: true, rid: Session.get('openedRoom') }, { fields: { _id: 1 } }) !== null) { - return 'active'; - } - }, - - rooms() { - const query = { - t: { $in: ['c']}, - open: true - }; - - if (RocketChat.settings.get('Favorite_Rooms')) { - query.f = { $ne: true }; - } - - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { - query.$or = [ - { alert: { $ne: true } }, - { hideUnreadStatus: true } - ]; - } - - return ChatSubscription.find( - query, { sort: { 't': 1, 'name': 1 }}); - } -}); - -Template.channels.events({ - 'click .more-channels'() { - SideNav.setFlex('listChannelsFlex'); - return SideNav.openFlex(); - } -}); diff --git a/packages/rocketchat-ui-sidenav/client/channelsAnonymous.html b/packages/rocketchat-ui-sidenav/client/channelsAnonymous.html deleted file mode 100644 index 71f67470c1ad..000000000000 --- a/packages/rocketchat-ui-sidenav/client/channelsAnonymous.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/channelsAnonymous.js b/packages/rocketchat-ui-sidenav/client/channelsAnonymous.js deleted file mode 100644 index c4a121b093a6..000000000000 --- a/packages/rocketchat-ui-sidenav/client/channelsAnonymous.js +++ /dev/null @@ -1,23 +0,0 @@ -Template.channelsAnonymous.helpers({ - isActive() { - const currentRoom = RocketChat.models.Rooms.findOne({ _id: Session.get('openedRoom') }); - if (currentRoom) { - return 'active'; - } - }, - - rooms() { - const query = { - t: 'c' - }; - - return RocketChat.models.Rooms.find(query, { sort: { name: 1 } }); - } -}); - -Template.channelsAnonymous.events({ - 'click .more-channels'() { - SideNav.setFlex('listChannelsFlex'); - SideNav.openFlex(); - } -}); diff --git a/packages/rocketchat-ui-sidenav/client/combined.html b/packages/rocketchat-ui-sidenav/client/combined.html deleted file mode 100644 index 54632b0bf205..000000000000 --- a/packages/rocketchat-ui-sidenav/client/combined.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/combined.js b/packages/rocketchat-ui-sidenav/client/combined.js deleted file mode 100644 index 95a386606a05..000000000000 --- a/packages/rocketchat-ui-sidenav/client/combined.js +++ /dev/null @@ -1,33 +0,0 @@ -Template.combined.helpers({ - isActive() { - if (ChatSubscription.findOne({ t: { $in: ['c', 'p']}, f: { $ne: true }, open: true, rid: Session.get('openedRoom') }, { fields: { _id: 1 } })) { - return 'active'; - } - }, - - rooms() { - const query = { - t: { $in: ['c', 'p']}, - open: true - }; - - if (RocketChat.settings.get('Favorite_Rooms')) { - query.f = { $ne: true }; - } - - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { - query.$or = [ - { alert: { $ne: true } }, - { hideUnreadStatus: true } - ]; - } - - return ChatSubscription.find(query, { sort: { 'name': 1 }}); - }}); - -Template.combined.events({ - 'click .more-channels'() { - SideNav.setFlex('listCombinedFlex'); - return SideNav.openFlex(); - } -}); diff --git a/packages/rocketchat-ui-sidenav/client/directMessages.html b/packages/rocketchat-ui-sidenav/client/directMessages.html deleted file mode 100644 index 86b212392541..000000000000 --- a/packages/rocketchat-ui-sidenav/client/directMessages.html +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/directMessages.js b/packages/rocketchat-ui-sidenav/client/directMessages.js deleted file mode 100644 index 68e09b80d82e..000000000000 --- a/packages/rocketchat-ui-sidenav/client/directMessages.js +++ /dev/null @@ -1,26 +0,0 @@ -Template.directMessages.helpers({ - isActive() { - if (ChatSubscription.findOne({ t: { $in: ['d']}, f: { $ne: true }, open: true, rid: Session.get('openedRoom') }, { fields: { _id: 1 } })) { - return 'active'; - } - }, - - rooms() { - const query = { t: { $in: ['d']}, f: { $ne: true }, open: true }; - const sort = { 't': 1 }; - - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { - query.$or = [ - { alert: { $ne: true } }, - { hideUnreadStatus: true } - ]; - } - - if (RocketChat.settings.get('UI_Use_Real_Name')) { - sort.fname = 1; - } - sort.name = 1; - - return ChatSubscription.find(query, { sort }); - } -}); diff --git a/packages/rocketchat-ui-sidenav/client/privateGroups.html b/packages/rocketchat-ui-sidenav/client/privateGroups.html deleted file mode 100644 index 03a5d37ee724..000000000000 --- a/packages/rocketchat-ui-sidenav/client/privateGroups.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/privateGroups.js b/packages/rocketchat-ui-sidenav/client/privateGroups.js deleted file mode 100644 index 84203ce5c299..000000000000 --- a/packages/rocketchat-ui-sidenav/client/privateGroups.js +++ /dev/null @@ -1,35 +0,0 @@ -Template.privateGroups.helpers({ - isActive() { - if (ChatSubscription.findOne({ t: { $in: ['p']}, f: { $ne: true }, open: true, rid: Session.get('openedRoom') }, { fields: { _id: 1 } })) { - return 'active'; - } - }, - - rooms() { - const query = { t: { $in: ['p']}, f: { $ne: true }, open: true }; - - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { - query.$or = [ - { alert: { $ne: true } }, - { hideUnreadStatus: true } - ]; - } - - return ChatSubscription.find(query, { sort: { 't': 1, 'name': 1 }}); - }, - - total() { - return ChatSubscription.find({ t: { $in: ['p']}, f: { $ne: true } }).count(); - }, - - totalOpen() { - return ChatSubscription.find({ t: { $in: ['p']}, f: { $ne: true }, open: true }).count(); - } -}); - -Template.privateGroups.events({ - 'click .more-groups'() { - SideNav.setFlex('listPrivateGroupsFlex'); - return SideNav.openFlex(); - } -}); diff --git a/packages/rocketchat-ui-sidenav/client/privateGroupsFlex.html b/packages/rocketchat-ui-sidenav/client/privateGroupsFlex.html deleted file mode 100644 index b44af2de8eb5..000000000000 --- a/packages/rocketchat-ui-sidenav/client/privateGroupsFlex.html +++ /dev/null @@ -1,59 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/privateGroupsFlex.js b/packages/rocketchat-ui-sidenav/client/privateGroupsFlex.js deleted file mode 100644 index ed13315ac831..000000000000 --- a/packages/rocketchat-ui-sidenav/client/privateGroupsFlex.js +++ /dev/null @@ -1,141 +0,0 @@ -Template.privateGroupsFlex.helpers({ - selectedUsers() { - return Template.instance().selectedUsers.get(); - }, - - name() { - return Template.instance().selectedUserNames[this.valueOf()]; - }, - - groupName() { - return Template.instance().groupName.get(); - }, - - error() { - return Template.instance().error.get(); - }, - - autocompleteSettings() { - return { - limit: 10, - // inputDelay: 300 - rules: [ - { - // @TODO maybe change this 'collection' and/or template - collection: 'UserAndRoom', - subscription: 'userAutocomplete', - field: 'username', - template: Template.userSearch, - noMatchTemplate: Template.userSearchEmpty, - matchAll: true, - filter: { - exceptions: [Meteor.user().username].concat(Template.instance().selectedUsers.get()) - }, - selector(match) { - return { term: match }; - }, - sort: 'username' - } - ] - }; - }}); - -Template.privateGroupsFlex.events({ - 'autocompleteselect #pvt-group-members'(event, instance, doc) { - instance.selectedUsers.set(instance.selectedUsers.get().concat(doc.username)); - - instance.selectedUserNames[doc.username] = doc.name; - - event.currentTarget.value = ''; - return event.currentTarget.focus(); - }, - - 'click .remove-room-member'() { - const self = this; - let users = Template.instance().selectedUsers.get(); - users = _.reject(Template.instance().selectedUsers.get(), _id => _id === self.valueOf()); - - Template.instance().selectedUsers.set(users); - - return $('#pvt-group-members').focus(); - }, - - 'click .cancel-pvt-group'(e, instance) { - return SideNav.closeFlex(() => instance.clearForm()); - }, - - 'click header'(e, instance) { - return SideNav.closeFlex(() => instance.clearForm()); - }, - - 'mouseenter header'() { - return SideNav.overArrow(); - }, - - 'mouseleave header'() { - return SideNav.leaveArrow(); - }, - - 'keydown input[type="text"]'() { - return Template.instance().error.set([]); - }, - - 'keyup #pvt-group-name'(e, instance) { - if (e.keyCode === 13) { - return instance.$('#pvt-group-members').focus(); - } - }, - - 'keydown #pvt-group-members'(e, instance) { - if (($(e.currentTarget).val() === '') && (e.keyCode === 13)) { - return instance.$('.save-pvt-group').click(); - } - }, - - 'click .save-pvt-group'(e, instance) { - const err = SideNav.validate(); - const name = instance.find('#pvt-group-name').value.toLowerCase().trim(); - const readOnly = instance.find('#channel-ro').checked; - instance.groupName.set(name); - if (!err) { - return Meteor.call('createPrivateGroup', name, instance.selectedUsers.get(), readOnly, function(err) { - if (err) { - if (err.error === 'error-invalid-name') { - instance.error.set({ invalid: true }); - return; - } - if (err.error === 'error-duplicate-channel-name') { - instance.error.set({ duplicate: true }); - return; - } - if (err.error === 'error-archived-duplicate-name') { - instance.error.set({ archivedduplicate: true }); - return; - } - return handleError(err); - } - SideNav.closeFlex(); - instance.clearForm(); - return FlowRouter.go('group', { name }, FlowRouter.current().queryParams); - }); - } else { - return Template.instance().error.set({fields: err}); - } - } -}); - -Template.privateGroupsFlex.onCreated(function() { - const instance = this; - instance.selectedUsers = new ReactiveVar([]); - instance.selectedUserNames = {}; - instance.error = new ReactiveVar([]); - instance.groupName = new ReactiveVar(''); - - return instance.clearForm = function() { - instance.error.set([]); - instance.groupName.set(''); - instance.selectedUsers.set([]); - instance.find('#pvt-group-name').value = ''; - return instance.find('#pvt-group-members').value = ''; - }; -}); diff --git a/packages/rocketchat-ui-sidenav/client/roomList.html b/packages/rocketchat-ui-sidenav/client/roomList.html index cd37e885cb04..a3053cbffcde 100644 --- a/packages/rocketchat-ui-sidenav/client/roomList.html +++ b/packages/rocketchat-ui-sidenav/client/roomList.html @@ -1,15 +1,24 @@ diff --git a/packages/rocketchat-ui-sidenav/client/roomList.js b/packages/rocketchat-ui-sidenav/client/roomList.js index e1a5565fc45c..e885d783a888 100644 --- a/packages/rocketchat-ui-sidenav/client/roomList.js +++ b/packages/rocketchat-ui-sidenav/client/roomList.js @@ -1,15 +1,33 @@ Template.roomList.helpers({ rooms() { + if (this.unread) { + return Template.instance().unreadRooms; + } + + if (this.anonymous) { + return RocketChat.models.Rooms.find({t: 'c'}, { sort: { name: 1 } }); + } + + const user = Meteor.user(); + const favoritesEnabled = RocketChat.settings.get('Favorite_Rooms'); + const query = { - t: { $in: [this.identifier]}, open: true }; - if (RocketChat.settings.get('Favorite_Rooms')) { - query.f = { $ne: true }; + if (this.identifier) { + if (this.isCombined) { + query.t = { $in: ['c', 'p']}; + } else { + query.t = { $in: [this.identifier] }; + } + + query.f = { $ne: favoritesEnabled }; + } else { + query.f = favoritesEnabled; } - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { + if (user && user.settings && user.settings.preferences && user.settings.preferences.unreadRoomsMode) { query.$or = [ { alert: { $ne: true } }, { hideUnreadStatus: true } @@ -19,14 +37,60 @@ Template.roomList.helpers({ return ChatSubscription.find(query, { sort: { 't': 1, 'name': 1 }}); }, - favoritesCount() { - return ChatSubscription.find({ f: true }).count(); + isActiveFavorite() { + if (!this.identifier && !this.unread) { + return ChatSubscription.find({ f: true }).count(); + } + + return true; + }, + + isLivechat() { + return this.identifier === 'l'; + }, + + unreadClass(room) { + let classes = ''; + + if (room.unread) { + const user = Meteor.user(); + classes += 'unread-rooms-mode'; + + if ((user && user.settings && user.settings.preferences && user.settings.preferences.unreadRoomsMode) && (Template.instance().unreadRooms.count())) { + classes += ' has-unread'; + } + } + + return classes; + }, + + hasMoreButton(room) { + return room.identifier === 'c' || room.identifier === 'p' || room.anonymous; } }); Template.roomList.events({ - 'click .more-channels'() { - SideNav.setFlex('listChannelsFlex'); + 'click .more-channels'(e, t) { + if (t.data.identifier === 'p') { + SideNav.setFlex('listPrivateGroupsFlex'); + } else if (t.data.isCombined) { + SideNav.setFlex('listCombinedFlex'); + } else { + SideNav.setFlex('listChannelsFlex'); + } + return SideNav.openFlex(); } }); + +Template.roomList.onCreated(function() { + this.autorun(() => { + const query = { + alert: true, + open: true, + hideUnreadStatus: { $ne: true } + }; + + return this.unreadRooms = ChatSubscription.find(query, { sort: { 't': 1, 'name': 1 }}); + }); +}); diff --git a/packages/rocketchat-ui-sidenav/client/sideNav.html b/packages/rocketchat-ui-sidenav/client/sideNav.html index d16c22a46f11..3df52a7246d4 100644 --- a/packages/rocketchat-ui-sidenav/client/sideNav.html +++ b/packages/rocketchat-ui-sidenav/client/sideNav.html @@ -10,11 +10,11 @@
- {{> unreadRooms }} + {{> roomList unread=true label="Unread_Rooms" }} - {{#each room in roomType}} + {{#each roomType}} {{#if canShowRoomType}} - {{> roomList type=room.type identifier=room.identifier label=room.label }} + {{> roomList identifier=identifier label=label isCombined=isCombined }} {{/if}} {{/each}} @@ -30,14 +30,14 @@

- {{> Template.dynamic template=flexTemplate data=flexData}} + {{> Template.dynamic template=flexTemplate data=flexData }}
{{else}}
- {{> channelsAnonymous}} + {{> roomList anonymous=true label="Channels" }}
{{/if}} diff --git a/packages/rocketchat-ui-sidenav/client/sideNav.js b/packages/rocketchat-ui-sidenav/client/sideNav.js index 13c1a002393d..7a6b8db0547a 100644 --- a/packages/rocketchat-ui-sidenav/client/sideNav.js +++ b/packages/rocketchat-ui-sidenav/client/sideNav.js @@ -13,43 +13,24 @@ Template.sideNav.helpers({ return RocketChat.settings.get('Layout_Sidenav_Footer'); }, - showStarredRooms() { - const favoritesEnabled = RocketChat.settings.get('Favorite_Rooms'); - const hasFavoriteRoomOpened = ChatSubscription.findOne({ f: true, open: true }); - - if (favoritesEnabled && hasFavoriteRoomOpened) { return true; } - }, - roomType() { return RocketChat.roomTypes.getTypes(); }, canShowRoomType() { - let userPref = undefined; - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences) { - userPref = Meteor.user().settings.preferences.mergeChannels; - } - const globalPref = RocketChat.settings.get('UI_Merge_Channels_Groups'); - const mergeChannels = (userPref != null) ? userPref : globalPref; - if (mergeChannels) { - return RocketChat.roomTypes.checkCondition(this) && (this.template !== 'privateGroups'); - } else { - return RocketChat.roomTypes.checkCondition(this); + if (Template.instance().mergedChannels.get()) { + return RocketChat.roomTypes.checkCondition(this) && (this.identifier !== 'p'); } + + return RocketChat.roomTypes.checkCondition(this); }, - templateName() { - let userPref = undefined; - if (Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences) { - userPref = Meteor.user().settings.preferences.mergeChannels; - } - const globalPref = RocketChat.settings.get('UI_Merge_Channels_Groups'); - const mergeChannels = (userPref != null) ? userPref : globalPref; - if (mergeChannels) { - return this.template === 'channels' ? 'combined' : this.template; - } else { - return this.template; + isCombined() { + if (Template.instance().mergedChannels.get()) { + return this.identifier === 'c'; } + + return false; } }); @@ -85,3 +66,17 @@ Template.sideNav.onRendered(function() { return Meteor.defer(() => menu.updateUnreadBars()); }); + +Template.sideNav.onCreated(function() { + this.mergedChannels = new ReactiveVar(false); + + this.autorun(() => { + const user = Meteor.user(); + let userPref = null; + if (user && user.settings && user.settings.preferences) { + userPref = user.settings.preferences.mergeChannels; + } + + this.mergedChannels.set((userPref != null) ? userPref : RocketChat.settings.get('UI_Merge_Channels_Groups')); + }); +}); diff --git a/packages/rocketchat-ui-sidenav/client/starredRooms.html b/packages/rocketchat-ui-sidenav/client/starredRooms.html deleted file mode 100644 index 508171d8a90b..000000000000 --- a/packages/rocketchat-ui-sidenav/client/starredRooms.html +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/starredRooms.js b/packages/rocketchat-ui-sidenav/client/starredRooms.js deleted file mode 100644 index ef668826dcd2..000000000000 --- a/packages/rocketchat-ui-sidenav/client/starredRooms.js +++ /dev/null @@ -1,24 +0,0 @@ -Template.starredRooms.helpers({ - isActive() { - if (ChatSubscription.findOne({ f: true, rid: Session.get('openedRoom') }, { fields: { _id: 1 } })) { - return 'active'; - } - }, - - rooms() { - const query = { f: true, open: true }; - - if (Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) { - query.$or = [ - { alert: { $ne: true } }, - { hideUnreadStatus: true } - ]; - } - - return ChatSubscription.find(query, { sort: { 't': 1, 'name': 1 } - }); - }, - total() { - return ChatSubscription.find({ f: true }).count(); - } -}); diff --git a/packages/rocketchat-ui-sidenav/client/unreadRooms.html b/packages/rocketchat-ui-sidenav/client/unreadRooms.html deleted file mode 100644 index ebf51e6615c4..000000000000 --- a/packages/rocketchat-ui-sidenav/client/unreadRooms.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/packages/rocketchat-ui-sidenav/client/unreadRooms.js b/packages/rocketchat-ui-sidenav/client/unreadRooms.js deleted file mode 100644 index c17a5b64dc20..000000000000 --- a/packages/rocketchat-ui-sidenav/client/unreadRooms.js +++ /dev/null @@ -1,23 +0,0 @@ -Template.unreadRooms.helpers({ - hasUnread() { - if ((Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.unreadRoomsMode) && (Template.instance().unreadRooms.count() > 0)) { - return 'has-unread'; - } - }, - - rooms() { - return Template.instance().unreadRooms; - } -}); - -Template.unreadRooms.onCreated(function() { - return this.autorun(() => { - const query = { - alert: true, - open: true, - hideUnreadStatus: { $ne: true } - }; - - return this.unreadRooms = ChatSubscription.find(query, { sort: { 't': 1, 'name': 1 }}); - }); -}); diff --git a/packages/rocketchat-ui-sidenav/package.js b/packages/rocketchat-ui-sidenav/package.js index af25b6f474a5..6079e90a86d3 100644 --- a/packages/rocketchat-ui-sidenav/package.js +++ b/packages/rocketchat-ui-sidenav/package.js @@ -20,39 +20,23 @@ Package.onUse(function(api) { ]); api.addFiles('client/accountBox.html', 'client'); - api.addFiles('client/combined.html', 'client'); api.addFiles('client/chatRoomItem.html', 'client'); - api.addFiles('client/channels.html', 'client'); - api.addFiles('client/channelsAnonymous.html', 'client'); api.addFiles('client/createCombinedFlex.html', 'client'); - api.addFiles('client/directMessages.html', 'client'); api.addFiles('client/listChannelsFlex.html', 'client'); api.addFiles('client/listCombinedFlex.html', 'client'); api.addFiles('client/listPrivateGroupsFlex.html', 'client'); - api.addFiles('client/privateGroups.html', 'client'); - api.addFiles('client/privateGroupsFlex.html', 'client'); api.addFiles('client/sideNav.html', 'client'); - api.addFiles('client/starredRooms.html', 'client'); api.addFiles('client/toolbar.html', 'client'); - api.addFiles('client/unreadRooms.html', 'client'); - api.addFiles('client/userStatus.html', 'client'); api.addFiles('client/roomList.html', 'client'); + api.addFiles('client/userStatus.html', 'client'); api.addFiles('client/accountBox.js', 'client'); - api.addFiles('client/combined.js', 'client'); api.addFiles('client/chatRoomItem.js', 'client'); - api.addFiles('client/channels.js', 'client'); - api.addFiles('client/channelsAnonymous.js', 'client'); api.addFiles('client/createCombinedFlex.js', 'client'); - api.addFiles('client/directMessages.js', 'client'); api.addFiles('client/listChannelsFlex.js', 'client'); api.addFiles('client/listCombinedFlex.js', 'client'); api.addFiles('client/listPrivateGroupsFlex.js', 'client'); - api.addFiles('client/privateGroups.js', 'client'); - api.addFiles('client/privateGroupsFlex.js', 'client'); api.addFiles('client/sideNav.js', 'client'); - api.addFiles('client/starredRooms.js', 'client'); - api.addFiles('client/toolbar.js', 'client'); - api.addFiles('client/unreadRooms.js', 'client'); api.addFiles('client/roomList.js', 'client'); + api.addFiles('client/toolbar.js', 'client'); }); diff --git a/tests/pageobjects/side-nav.page.js b/tests/pageobjects/side-nav.page.js index a7191a4f4c2b..639ae892f410 100644 --- a/tests/pageobjects/side-nav.page.js +++ b/tests/pageobjects/side-nav.page.js @@ -16,7 +16,7 @@ class SideNav extends Page { get newChannelIcon() { return browser.element('.toolbar-search__create-channel.icon-plus'); } get moreChannels() { return browser.element('.rooms-list .more-channels'); } - get newDirectMessageBtn() { return browser.element('.rooms-list .add-room:nth-of-type(2)'); } + get newDirectMessageBtn() { return browser.element('.rooms-list .room-type:nth-of-type(2)'); } get general() { return browser.element('.rooms-list > .wrapper > ul [title="general"]'); } get channelHoverIcon() { return browser.element('.rooms-list > .wrapper > ul [title="general"] .icon-eye-off'); } From db295be1ec2ff74fc9418d00848fedc2275fb98c Mon Sep 17 00:00:00 2001 From: Karl Prieb Date: Thu, 18 May 2017 17:35:22 -0300 Subject: [PATCH 3/5] fix tests: change channel selector --- tests/pageobjects/side-nav.page.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/pageobjects/side-nav.page.js b/tests/pageobjects/side-nav.page.js index 639ae892f410..fe230ca5f5cc 100644 --- a/tests/pageobjects/side-nav.page.js +++ b/tests/pageobjects/side-nav.page.js @@ -18,7 +18,7 @@ class SideNav extends Page { get newDirectMessageBtn() { return browser.element('.rooms-list .room-type:nth-of-type(2)'); } - get general() { return browser.element('.rooms-list > .wrapper > ul [title="general"]'); } + get general() { return browser.element('.rooms-list .room-type:not(.unread-rooms-mode) + ul .open-room[title="general"]'); } get channelHoverIcon() { return browser.element('.rooms-list > .wrapper > ul [title="general"] .icon-eye-off'); } get userOptions() { return browser.element('.options'); } @@ -69,7 +69,7 @@ class SideNav extends Page { } getChannelFromList(channelName) { - return browser.element(`.rooms-list > .wrapper > ul [title="${ channelName }"]`); + return browser.element(`.rooms-list .room-type:not(.unread-rooms-mode) + ul .open-room[title="${ channelName }"]`); } createChannel(channelName, isPrivate, isReadOnly) { From 05ca0b98b80562f18f09ba896d74495b4be73e16 Mon Sep 17 00:00:00 2001 From: Karl Prieb Date: Fri, 19 May 2017 14:15:45 -0300 Subject: [PATCH 4/5] add more private groups button --- packages/rocketchat-ui-sidenav/client/roomList.html | 6 +++++- packages/rocketchat-ui-sidenav/client/roomList.js | 10 +++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/rocketchat-ui-sidenav/client/roomList.html b/packages/rocketchat-ui-sidenav/client/roomList.html index a3053cbffcde..e60089b3bd15 100644 --- a/packages/rocketchat-ui-sidenav/client/roomList.html +++ b/packages/rocketchat-ui-sidenav/client/roomList.html @@ -15,9 +15,13 @@

{{/each}} - {{#if hasMoreButton ..}} + {{#if hasMoreChannelsButton ..}} {{/if}} + + {{#if hasMoreGroupsButton ..}} + + {{/if}} {{/with}} {{/if}} {{/if}} diff --git a/packages/rocketchat-ui-sidenav/client/roomList.js b/packages/rocketchat-ui-sidenav/client/roomList.js index e885d783a888..e2a5c08e00bd 100644 --- a/packages/rocketchat-ui-sidenav/client/roomList.js +++ b/packages/rocketchat-ui-sidenav/client/roomList.js @@ -64,13 +64,17 @@ Template.roomList.helpers({ return classes; }, - hasMoreButton(room) { - return room.identifier === 'c' || room.identifier === 'p' || room.anonymous; + hasMoreChannelsButton(room) { + return room.identifier === 'c' || room.anonymous; + }, + + hasMoreGroupsButton(room) { + return room.identifier === 'p'; } }); Template.roomList.events({ - 'click .more-channels'(e, t) { + 'click .more'(e, t) { if (t.data.identifier === 'p') { SideNav.setFlex('listPrivateGroupsFlex'); } else if (t.data.isCombined) { From cb77b33fc99bad73d8e24c9e9301a63bc5a1ac29 Mon Sep 17 00:00:00 2001 From: Karl Prieb Date: Fri, 19 May 2017 15:10:08 -0300 Subject: [PATCH 5/5] fix anonymous --- packages/rocketchat-ui-sidenav/client/roomList.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-ui-sidenav/client/roomList.js b/packages/rocketchat-ui-sidenav/client/roomList.js index e2a5c08e00bd..9854b2db7ac9 100644 --- a/packages/rocketchat-ui-sidenav/client/roomList.js +++ b/packages/rocketchat-ui-sidenav/client/roomList.js @@ -38,7 +38,7 @@ Template.roomList.helpers({ }, isActiveFavorite() { - if (!this.identifier && !this.unread) { + if (!this.identifier && !this.unread && !this.anonymous) { return ChatSubscription.find({ f: true }).count(); }