diff --git a/client/routes/adminRouter.coffee b/client/routes/adminRouter.coffee index ee8a4ed0e1e21f8a21bded8deff5534ded57d675..c226715e635bbfa28d5ed925973e749f31a506b1 100644 --- a/client/routes/adminRouter.coffee +++ b/client/routes/adminRouter.coffee @@ -1,33 +1,27 @@ -tabReset = -> - RocketChat.TabBar.reset() - FlowRouter.route '/admin/users', name: 'admin-users' - triggersEnter: [tabReset] - triggersExit: [tabReset] + triggersExit: [ -> + Session.set 'adminSelectedUser' + ] action: -> + Session.set 'adminSelectedUser' + RocketChat.TabBar.showGroup 'adminusers' BlazeLayout.render 'main', {center: 'adminUsers'} - FlowRouter.route '/admin/rooms', name: 'admin-rooms' - triggersEnter: [tabReset] - triggersExit: [tabReset] action: -> + RocketChat.TabBar.showGroup 'adminrooms' BlazeLayout.render 'main', {center: 'adminRooms'} - FlowRouter.route '/admin/statistics', name: 'admin-statistics' - triggersEnter: [tabReset] - triggersExit: [tabReset] action: -> + RocketChat.TabBar.showGroup 'adminstatistics' BlazeLayout.render 'main', {center: 'adminStatistics'} - FlowRouter.route '/admin/:group?', name: 'admin' - triggersEnter: [tabReset] - triggersExit: [tabReset] action: -> + RocketChat.TabBar.showGroup 'admin' BlazeLayout.render 'main', {center: 'admin'} diff --git a/client/routes/router.coffee b/client/routes/router.coffee index 74873c70a05da43cee2975de3037d0c17c6c917c..9757366bfa568cead9c054fbb511b8dae0a073c1 100644 --- a/client/routes/router.coffee +++ b/client/routes/router.coffee @@ -3,7 +3,6 @@ Blaze.registerHelper 'pathFor', (path, kw) -> BlazeLayout.setRoot 'body' - FlowRouter.subscriptions = -> Tracker.autorun => RoomManager.init() @@ -42,7 +41,7 @@ FlowRouter.route '/home', name: 'home' action: -> - RocketChat.TabBar.reset() + RocketChat.TabBar.showGroup 'home' BlazeLayout.render 'main', {center: 'home'} KonchatNotification.getDesktopPermission() @@ -51,18 +50,17 @@ FlowRouter.route '/changeavatar', name: 'changeAvatar' action: -> + RocketChat.TabBar.showGroup 'changeavatar' BlazeLayout.render 'main', {center: 'avatarPrompt'} FlowRouter.route '/account/:group?', name: 'account' action: (params) -> - RocketChat.TabBar.closeFlex() - RocketChat.TabBar.resetButtons() - unless params.group params.group = 'Preferences' params.group = _.capitalize params.group, true + RocketChat.TabBar.showGroup 'account' BlazeLayout.render 'main', { center: "account#{params.group}" } @@ -74,6 +72,7 @@ FlowRouter.route '/history/private', action: -> Session.setDefault('historyFilter', '') + RocketChat.TabBar.showGroup 'private-history' BlazeLayout.render 'main', {center: 'privateHistory'} diff --git a/client/startup/defaultRoomTypes.coffee b/client/startup/defaultRoomTypes.coffee index 832cbd2f21cef3b3e95290b6ebd417426f404411..d22c964cc48e261e745509d9656cf86e341a3fe7 100644 --- a/client/startup/defaultRoomTypes.coffee +++ b/client/startup/defaultRoomTypes.coffee @@ -11,6 +11,7 @@ RocketChat.roomTypes.add 'c', 10, action: (params, queryParams) -> Session.set 'showUserInfo' openRoom 'c', params.name + RocketChat.TabBar.showGroup 'channel' link: (sub) -> return { name: sub.name } permissions: [ 'view-c-room' ] @@ -24,6 +25,7 @@ RocketChat.roomTypes.add 'd', 20, action: (params, queryParams) -> Session.set 'showUserInfo', params.username openRoom 'd', params.username + RocketChat.TabBar.showGroup 'directmessage' link: (sub) -> return { username: sub.name } permissions: [ 'view-d-room' ] @@ -37,6 +39,7 @@ RocketChat.roomTypes.add 'p', 30, action: (params, queryParams) -> Session.set 'showUserInfo' openRoom 'p', params.name + RocketChat.TabBar.showGroup 'privategroup' link: (sub) -> return { name: sub.name } permissions: [ 'view-p-room' ] diff --git a/packages/rocketchat-authorization/client/route.coffee b/packages/rocketchat-authorization/client/route.coffee index fe115fedcff8994742bb5ebcf9d73c7a88c44ae1..fce94d5ad7d8122e5eaab6275d8195f744308fd9 100644 --- a/packages/rocketchat-authorization/client/route.coffee +++ b/packages/rocketchat-authorization/client/route.coffee @@ -1,6 +1,7 @@ FlowRouter.route '/admin/permissions', name: 'admin-permissions' action: (params) -> + RocketChat.TabBar.showGroup 'admin-permissions' BlazeLayout.render 'main', center: 'pageContainer' pageTitle: t('Permissions') @@ -9,6 +10,7 @@ FlowRouter.route '/admin/permissions', FlowRouter.route '/admin/permissions/:name?/edit', name: 'admin-permissions-edit' action: (params) -> + RocketChat.TabBar.showGroup 'admin-permissions' BlazeLayout.render 'main', center: 'pageContainer' pageTitle: t('Role_Editing') @@ -17,6 +19,7 @@ FlowRouter.route '/admin/permissions/:name?/edit', FlowRouter.route '/admin/permissions/new', name: 'admin-permissions-new' action: (params) -> + RocketChat.TabBar.showGroup 'admin-permissions' BlazeLayout.render 'main', center: 'pageContainer' pageTitle: t('Role_Editing') diff --git a/packages/rocketchat-channel-settings/client/startup/tabBar.coffee b/packages/rocketchat-channel-settings/client/startup/tabBar.coffee index a78fd0ec324b0e997dd06e68517b3af6b0710654..0381dcf755f790744300c330195adc650d9a7c25 100644 --- a/packages/rocketchat-channel-settings/client/startup/tabBar.coffee +++ b/packages/rocketchat-channel-settings/client/startup/tabBar.coffee @@ -1,12 +1,8 @@ Meteor.startup -> - - RocketChat.callbacks.add 'enter-room', (subscription) -> - - RocketChat.TabBar.addButton - id: 'channel-settings' - i18nTitle: 'Room_Info' - icon: 'octicon octicon-info' - template: 'channelSettings' - order: 0 - - , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-channel-settings' + RocketChat.TabBar.addButton + groups: ['channel', 'privategroup', 'directmessage'] + id: 'channel-settings' + i18nTitle: 'Room_Info' + icon: 'octicon octicon-info' + template: 'channelSettings' + order: 0 diff --git a/packages/rocketchat-chatops/client/tabBar.coffee b/packages/rocketchat-chatops/client/tabBar.coffee index 5daff0a8915cdbaf5a5ad42b1e2ef07df2d92794..c6e65f4895a7a7324019b30f03e47d2d9b7539b8 100644 --- a/packages/rocketchat-chatops/client/tabBar.coffee +++ b/packages/rocketchat-chatops/client/tabBar.coffee @@ -1,18 +1,9 @@ Meteor.startup -> - - RocketChat.callbacks.add 'enter-room', -> - #if Meteor.user()?.services?.github?.id or Meteor.user()?.services?.gitlab?.id - # console.log 'Adding chatops to tabbar' - # RocketChat.TabBar.addButton - # id: 'chatops-button' - # i18nTitle: 'rocketchat-chatops:Chatops_Title' - # icon: 'icon-code' - # template: 'chatops' - # order: 4 - + Tracker.autorun -> if RocketChat.settings.get('Chatops_Enabled') console.log 'Adding chatops to tabbar' RocketChat.TabBar.addButton + groups: ['channel', 'privategroup', 'directmessage'] id: 'chatops-button2' i18nTitle: 'rocketchat-chatops:Chatops_Title' icon: 'octicon octicon-hubot' @@ -21,10 +12,13 @@ Meteor.startup -> console.log 'Adding chatops to tabbar' RocketChat.TabBar.addButton + groups: ['channel', 'privategroup', 'directmessage'] id: 'chatops-button3' i18nTitle: 'rocketchat-chatops:Chatops_Title' icon: 'octicon octicon-inbox' template: 'chatops_droneflight' width: 675 order: 5 - , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-chatops' + else + RocketChat.TabBar.removeButton 'chatops-button2' + RocketChat.TabBar.removeButton 'chatops-button3' diff --git a/packages/rocketchat-integrations/client/route.coffee b/packages/rocketchat-integrations/client/route.coffee index 96c69e02cc183186c535240356f0a7e1a9a1ef32..c5c6311d662191fb29693c9936d14b776df89d2f 100644 --- a/packages/rocketchat-integrations/client/route.coffee +++ b/packages/rocketchat-integrations/client/route.coffee @@ -1,34 +1,35 @@ FlowRouter.route '/admin/integrations', name: 'admin-integrations' action: (params) -> + RocketChat.TabBar.showGroup 'admin-integrations' BlazeLayout.render 'main', center: 'pageSettingsContainer' pageTitle: t('Integrations') pageTemplate: 'integrations' - FlowRouter.route '/admin/integrations/new', name: 'admin-integrations-new' action: (params) -> + RocketChat.TabBar.showGroup 'admin-integrations' BlazeLayout.render 'main', center: 'pageSettingsContainer' pageTitle: t('Integration_New') pageTemplate: 'integrationsNew' - FlowRouter.route '/admin/integrations/incoming/:id?', name: 'admin-integrations-incoming' action: (params) -> + RocketChat.TabBar.showGroup 'admin-integrations' BlazeLayout.render 'main', center: 'pageSettingsContainer' pageTitle: t('Integration_Incoming_WebHook') pageTemplate: 'integrationsIncoming' params: params - FlowRouter.route '/admin/integrations/outgoing/:id?', name: 'admin-integrations-outgoing' action: (params) -> + RocketChat.TabBar.showGroup 'admin-integrations' BlazeLayout.render 'main', center: 'pageSettingsContainer' pageTitle: t('Integration_Outgoing_WebHook') diff --git a/packages/rocketchat-lib/client/TabBar.coffee b/packages/rocketchat-lib/client/TabBar.coffee index 237024dbdd7c4738f931733b5c03aab1e90faff1..5228f2e55020c4ff1d961c21fd78a6e14069dcba 100644 --- a/packages/rocketchat-lib/client/TabBar.coffee +++ b/packages/rocketchat-lib/client/TabBar.coffee @@ -4,11 +4,15 @@ RocketChat.TabBar = new class buttons = new ReactiveVar {} + extraGroups = {} + animating = false open = new ReactiveVar false template = new ReactiveVar '' data = new ReactiveVar {} + visibleGroup = new ReactiveVar '' + setTemplate = (t, callback) -> return if animating is true template.set t @@ -65,6 +69,12 @@ RocketChat.TabBar = new class Tracker.nonreactive -> btns = buttons.get() btns[config.id] = config + + if extraGroups[config.id]? + btns[config.id].groups ?= [] + btns[config.id].groups = _.union btns[config.id].groups, extraGroups[config.id] + delete extraGroups[config.id] + buttons.set btns removeButton = (id) -> @@ -93,6 +103,23 @@ RocketChat.TabBar = new class resetButtons = -> buttons.set {} + showGroup = (group) -> + visibleGroup.set group + + getVisibleGroup = -> + visibleGroup.get() + + addGroup = (id, groups) -> + Tracker.nonreactive -> + btns = buttons.get() + if btns[id] + btns[id].groups ?= [] + btns[id].groups = _.union btns[id].groups, groups + buttons.set btns + else + extraGroups[id] ?= [] + extraGroups[id] = _.union extraGroups[id], groups + setTemplate: setTemplate setData: setData getTemplate: getTemplate @@ -108,3 +135,7 @@ RocketChat.TabBar = new class getButtons: getButtons reset: reset resetButtons: resetButtons + + showGroup: showGroup + getVisibleGroup: getVisibleGroup + addGroup: addGroup diff --git a/packages/rocketchat-lib/client/defaultTabBars.js b/packages/rocketchat-lib/client/defaultTabBars.js new file mode 100644 index 0000000000000000000000000000000000000000..6737d36c587d0f4d495a4bdf10a8876bea0a0969 --- /dev/null +++ b/packages/rocketchat-lib/client/defaultTabBars.js @@ -0,0 +1,35 @@ +RocketChat.TabBar.addButton({ + groups: ['channel', 'privategroup', 'directmessage'], + id: 'message-search', + i18nTitle: 'Search', + icon: 'octicon octicon-search', + template: 'messageSearch', + order: 1 +}); + +RocketChat.TabBar.addButton({ + groups: ['directmessage'], + id: 'user-info', + i18nTitle: 'User_Info', + icon: 'octicon octicon-person', + template: 'membersList', + order: 2 +}); + +RocketChat.TabBar.addButton({ + groups: ['channel', 'privategroup'], + id: 'members-list', + i18nTitle: 'Members_List', + icon: 'octicon octicon-organization', + template: 'membersList', + order: 2 +}); + +RocketChat.TabBar.addButton({ + groups: ['channel', 'privategroup', 'directmessage'], + id: 'uploaded-files-list', + i18nTitle: 'Room_uploaded_file_list', + icon: 'octicon octicon-file-symlink-directory', + template: 'uploadedFilesList', + order: 3 +}); diff --git a/packages/rocketchat-lib/client/lib/openRoom.coffee b/packages/rocketchat-lib/client/lib/openRoom.coffee index 545dce131b85cd960539bb4b3580f566491542bb..0d3a594583cc1ea5b4dbaadd86a1dd2eb9535a26 100644 --- a/packages/rocketchat-lib/client/lib/openRoom.coffee +++ b/packages/rocketchat-lib/client/lib/openRoom.coffee @@ -50,16 +50,9 @@ currentTracker = undefined $('.message-form .input-message').focus() , 100 - RocketChat.TabBar.resetButtons() - RocketChat.TabBar.addButton({ id: 'message-search', i18nTitle: t('Search'), icon: 'octicon octicon-search', template: 'messageSearch', order: 1 }) - if type is 'd' - RocketChat.TabBar.addButton({ id: 'members-list', i18nTitle: t('User_Info'), icon: 'octicon octicon-person', template: 'membersList', order: 2 }) - else - RocketChat.TabBar.addButton({ id: 'members-list', i18nTitle: t('Members_List'), icon: 'octicon octicon-organization', template: 'membersList', order: 2 }) - RocketChat.TabBar.addButton({ id: 'uploaded-files-list', i18nTitle: t('Room_uploaded_file_list'), icon: 'octicon octicon-file-symlink-directory', template: 'uploadedFilesList', order: 3 }) - # update user's room subscription - if ChatSubscription.findOne({rid: room._id})?.open is false + sub = ChatSubscription.findOne({rid: room._id}) + if sub?.open is false Meteor.call 'openRoom', room._id - RocketChat.callbacks.run 'enter-room', ChatSubscription.findOne({rid: room._id}) + RocketChat.callbacks.run 'enter-room', sub diff --git a/packages/rocketchat-lib/package.js b/packages/rocketchat-lib/package.js index 687d35430b44d9ad808fff505f9db6cee07b053c..5f2639f86fdc741d73f86ff96c95705f8f6dfcf7 100644 --- a/packages/rocketchat-lib/package.js +++ b/packages/rocketchat-lib/package.js @@ -98,6 +98,8 @@ Package.onUse(function(api) { api.addFiles('client/TabBar.coffee', 'client'); api.addFiles('client/MessageAction.coffee', 'client'); + api.addFiles('client/defaultTabBars.js', 'client'); + // VERSION api.addFiles('rocketchat.info'); diff --git a/packages/rocketchat-mailer/client/router.coffee b/packages/rocketchat-mailer/client/router.coffee index 5205c1f2a693efdc02359bcd2a9b30f2e8b3793d..4260c1719c3fa4e9b0bb5578d64f975b362f48af 100644 --- a/packages/rocketchat-mailer/client/router.coffee +++ b/packages/rocketchat-mailer/client/router.coffee @@ -1,11 +1,7 @@ -tabReset = -> - RocketChat.TabBar.reset() - FlowRouter.route '/mailer', name: 'mailer' - triggersEnter: [tabReset] - triggersExit: [tabReset] action: -> + RocketChat.TabBar.showGroup 'mailer' BlazeLayout.render 'main', {center: 'mailer'} FlowRouter.route '/mailer/unsubscribe/:_id/:createdAt', diff --git a/packages/rocketchat-mentions-flextab/client/tabBar.coffee b/packages/rocketchat-mentions-flextab/client/tabBar.coffee index 52c72abdc684db5aee59717c4592c837a629a780..93da941b2ec168aca05d00ff748ac3c23a87b555 100644 --- a/packages/rocketchat-mentions-flextab/client/tabBar.coffee +++ b/packages/rocketchat-mentions-flextab/client/tabBar.coffee @@ -1,4 +1,9 @@ Meteor.startup -> - RocketChat.callbacks.add 'enter-room', -> - RocketChat.TabBar.addButton({ id: 'mentions', i18nTitle: 'Mentions', icon: 'icon-at', template: 'mentionsFlexTab', order: 3 }) - , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-mentions' + RocketChat.TabBar.addButton({ + groups: ['channel', 'privategroup'], + id: 'mentions', + i18nTitle: 'Mentions', + icon: 'icon-at', + template: 'mentionsFlexTab', + order: 3 + }) diff --git a/packages/rocketchat-message-pin/client/tabBar.coffee b/packages/rocketchat-message-pin/client/tabBar.coffee index f4b8d24a66b68211b85dc870ecaca04247dfef90..1a2e5dc532ced0c869849b2608d0c3cf4393fa70 100644 --- a/packages/rocketchat-message-pin/client/tabBar.coffee +++ b/packages/rocketchat-message-pin/client/tabBar.coffee @@ -1,5 +1,10 @@ Meteor.startup -> - RocketChat.callbacks.add 'enter-room', -> - if RocketChat.settings.get 'Message_AllowPinning' - RocketChat.TabBar.addButton({ id: 'pinned-messages', i18nTitle: 'Pinned_Messages', icon: 'icon-pin', template: 'pinnedMessages', order: 10 }) - , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-pin' + if RocketChat.settings.get 'Message_AllowPinning' + RocketChat.TabBar.addButton({ + groups: ['channel', 'privategroup', 'directmessage'], + id: 'pinned-messages', + i18nTitle: 'Pinned_Messages', + icon: 'icon-pin', + template: 'pinnedMessages', + order: 10 + }) diff --git a/packages/rocketchat-message-star/client/tabBar.coffee b/packages/rocketchat-message-star/client/tabBar.coffee index b2b2d969d1ad552e440b87acae9f4412cfa3facd..9e34add34ab923157eddb1f29d64762de8dea380 100644 --- a/packages/rocketchat-message-star/client/tabBar.coffee +++ b/packages/rocketchat-message-star/client/tabBar.coffee @@ -1,4 +1,9 @@ Meteor.startup -> - RocketChat.callbacks.add 'enter-room', -> - RocketChat.TabBar.addButton({ id: 'starred-messages', i18nTitle: 'Starred_Messages', icon: 'icon-star', template: 'starredMessages', order: 3 }) - , RocketChat.callbacks.priority.MEDIUM, 'enter-room-tabbar-star' + RocketChat.TabBar.addButton({ + groups: ['channel', 'privategroup', 'directmessage'], + id: 'starred-messages', + i18nTitle: 'Starred_Messages', + icon: 'icon-star', + template: 'starredMessages', + order: 3 + }) diff --git a/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee b/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee index 098901fb5b2a58ce5841cf2e03d072f40cbb8288..e09e66e2a09394293e03edf38fbbce508c348542 100644 --- a/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee +++ b/packages/rocketchat-ui-admin/admin/users/adminUsers.coffee @@ -37,7 +37,23 @@ Template.adminUsers.onCreated -> @filter = new ReactiveVar '' @ready = new ReactiveVar true - RocketChat.TabBar.addButton({ id: 'invite-user', i18nTitle: t('Invite_Users'), icon: 'icon-plus', template: 'adminInviteUser', order: 1 }) + RocketChat.TabBar.addButton({ + groups: ['adminusers', 'adminusers-selected'], + id: 'invite-user', + i18nTitle: 'Invite_Users', + icon: 'icon-plus', + template: 'adminInviteUser', + order: 1 + }) + + RocketChat.TabBar.addButton({ + groups: ['adminusers-selected'] + id: 'admin-user-info', + i18nTitle: 'User_Info', + icon: 'icon-user', + template: 'adminUserInfo', + order: 2 + }) @autorun -> filter = instance.filter.get() @@ -49,11 +65,10 @@ Template.adminUsers.onCreated -> if Session.get 'adminSelectedUser' channelSubscription = instance.subscribe 'userChannels', Session.get 'adminSelectedUser' RocketChat.TabBar.setData Meteor.users.findOne Session.get 'adminSelectedUser' - RocketChat.TabBar.addButton({ id: 'user-info', i18nTitle: t('User_Info'), icon: 'icon-user', template: 'adminUserInfo', order: 2 }) - # RocketChat.TabBar.addButton({ id: 'user-channel', i18nTitle: t('User_Channels'), icon: 'icon-hash', template: 'adminUserChannels', order: 3 }) + + RocketChat.TabBar.showGroup 'adminusers-selected' else - RocketChat.TabBar.reset() - RocketChat.TabBar.addButton({ id: 'invite-user', i18nTitle: t('Invite_Users'), icon: 'icon-plus', template: 'adminInviteUser', order: 1 }) + RocketChat.TabBar.showGroup 'adminusers' @users = -> filter = _.trim instance.filter?.get() @@ -89,8 +104,8 @@ Template.adminUsers.events 'click .user-info': (e) -> e.preventDefault() - Session.set 'adminSelectedUser', $(e.currentTarget).data('id') - Session.set 'showUserInfo', Meteor.users.findOne($(e.currentTarget).data('id'))?.username or true + Session.set 'adminSelectedUser', @_id + Session.set 'showUserInfo', Meteor.users.findOne(@_id)?.username or true RocketChat.TabBar.setTemplate 'adminUserInfo' RocketChat.TabBar.openFlex() diff --git a/packages/rocketchat-ui-admin/admin/users/adminUsers.html b/packages/rocketchat-ui-admin/admin/users/adminUsers.html index 828ca152200bcf67a18da83f9da51fe2d8a42ee6..aa410e3c9876abec3c1e96930894b7f5398d2db3 100644 --- a/packages/rocketchat-ui-admin/admin/users/adminUsers.html +++ b/packages/rocketchat-ui-admin/admin/users/adminUsers.html @@ -32,7 +32,7 @@ </thead> <tbody> {{#each users}} - <tr class="user-info" data-id="{{_id}}"> + <tr class="user-info"> <td> <div class="user-image status-{{status}}"> {{> avatar username=username}} diff --git a/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.coffee b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.coffee index 0177eb907c6625b535c8debaf023b59c00065d17..f308646ffbbbcdf3563cbdfc8c0696ab979e1c8f 100644 --- a/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.coffee +++ b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.coffee @@ -2,26 +2,41 @@ Template.flexTabBar.helpers active: -> return 'active' if @template is RocketChat.TabBar.getTemplate() and RocketChat.TabBar.isFlexOpen() buttons: -> - RocketChat.TabBar.getButtons() return RocketChat.TabBar.getButtons() title: -> return t(@i18nTitle) or @title + visible: -> + if @groups.indexOf(RocketChat.TabBar.getVisibleGroup()) is -1 + return 'hidden' Template.flexTabBar.events 'click .tab-button': (e, t) -> e.preventDefault() - if RocketChat.TabBar.isFlexOpen() and RocketChat.TabBar.getTemplate() is $(e.currentTarget).data('template') + if RocketChat.TabBar.isFlexOpen() and RocketChat.TabBar.getTemplate() is @template RocketChat.TabBar.closeFlex() $('.flex-tab').css('max-width', '') else - width = $(e.currentTarget).data('width') - - if width? - $('.flex-tab').css('max-width', "#{width}px") + if @width? + $('.flex-tab').css('max-width', "#{@width}px") else $('.flex-tab').css('max-width', '') - RocketChat.TabBar.setTemplate $(e.currentTarget).data('template'), -> + RocketChat.TabBar.setTemplate @template, -> $('.flex-tab')?.find("input[type='text']:first")?.focus() $('.flex-tab .content')?.scrollTop(0) + +Template.flexTabBar.onCreated -> + # close flex if the visible group changed and the opened template is not in the new visible group + @autorun => + visibleGroup = RocketChat.TabBar.getVisibleGroup() + + Tracker.nonreactive => + openedTemplate = RocketChat.TabBar.getTemplate() + exists = false + RocketChat.TabBar.getButtons().forEach (button) -> + if button.groups.indexOf(visibleGroup) isnt -1 and openedTemplate is button.template + exists = true + + unless exists + RocketChat.TabBar.closeFlex() diff --git a/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.html b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.html index 8a971f49990e49f7ce8a19fc3c12ec862a4cde7c..10baeed54dbef01f0e924bb208c791ea127766a2 100644 --- a/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.html +++ b/packages/rocketchat-ui-flextab/flex-tab/flexTabBar.html @@ -1,6 +1,6 @@ <template name="flexTabBar"> {{#each buttons}} - <div class="tab-button {{active}}" data-template="{{template}}" data-width="{{width}}" title="{{title}}"> + <div class="tab-button {{active}} {{visible}}" title="{{title}}"> <i class="{{icon}}" aria-label="{{title}}" role="button" tabindex="0"></i> </div> {{/each}} diff --git a/packages/rocketchat-ui/lib/accountBox.coffee b/packages/rocketchat-ui/lib/accountBox.coffee index 79e61faff4a1e842f6df858ffa9e69c5244feaad..250246a76f446fe784824b694f9f99c555fcc597 100644 --- a/packages/rocketchat-ui/lib/accountBox.coffee +++ b/packages/rocketchat-ui/lib/accountBox.coffee @@ -63,6 +63,7 @@ name: newRoute.name action: -> Session.set 'openedRoom' + RocketChat.TabBar.showGroup newRoute.name BlazeLayout.render 'main', routeConfig triggersEnter: [ -> if newRoute.sideNav? @@ -70,7 +71,6 @@ SideNav.openFlex() ] - setStatus: setStatus toggle: toggle open: open diff --git a/packages/rocketchat-ui/views/app/privateHistory.coffee b/packages/rocketchat-ui/views/app/privateHistory.coffee index 97a45d9aca7b7af95cb98de037015edd53392fb1..b59fdc7c23e6883de1c34b57261daed16c24ae83 100644 --- a/packages/rocketchat-ui/views/app/privateHistory.coffee +++ b/packages/rocketchat-ui/views/app/privateHistory.coffee @@ -37,9 +37,6 @@ Template.privateHistory.helpers when 'd' return FlowRouter.path 'direct', { username: this.name } -Template.privateHistory.onRendered -> - RocketChat.TabBar.reset() - Template.privateHistory.events 'keydown #history-filter': (event) -> if event.which is 13 diff --git a/packages/rocketchat-ui/views/app/room.coffee b/packages/rocketchat-ui/views/app/room.coffee index 2127c7662af4519475c6aa461ad8a0ef2a9c6f70..6e96ec59e2a3a9a511b8a53bbd4f5f59e557d4e2 100644 --- a/packages/rocketchat-ui/views/app/room.coffee +++ b/packages/rocketchat-ui/views/app/room.coffee @@ -484,13 +484,9 @@ Template.room.onCreated -> @autorun => @subscribe 'fullUserData', Session.get('showUserInfo'), 1 - Template.room.onDestroyed -> - RocketChat.TabBar.resetButtons() - window.removeEventListener 'resize', this.onWindowResize - Template.room.onRendered -> unless window.chatMessages window.chatMessages = {} diff --git a/server/startup/roomPublishes.coffee b/server/startup/roomPublishes.coffee index e8a7ab2ad9493a7aa9c78534bef1ede169c188d8..85abbe2d8ccb891f66c209f5cc00ccbe94c80b74 100644 --- a/server/startup/roomPublishes.coffee +++ b/server/startup/roomPublishes.coffee @@ -36,5 +36,6 @@ Meteor.startup -> cl: 1 u: 1 usernames: 1 + topic: 1 user = RocketChat.models.Users.findOneById this.userId, fields: username: 1 return RocketChat.models.Rooms.findByTypeContainigUsernames 'd', [user.username, identifier], options