From e06fb74e97ec5fef23c757beebae16c2afe5c6be Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Sat, 17 Sep 2016 22:01:04 -0300 Subject: [PATCH] Replace subs of popups with methods --- .../message/popup/messagePopup.coffee | 35 ++++-- .../message/popup/messagePopupChannel.html | 3 +- .../message/popup/messagePopupChannel.js | 5 + .../message/popup/messagePopupConfig.coffee | 105 ++++++++++-------- .../message/popup/messagePopupConfig.html | 2 +- packages/rocketchat-ui-message/package.js | 1 + .../views/app/spotlight/spotlight.coffee | 94 ++++++---------- .../publications/channelAutocomplete.coffee | 36 ------ server/publications/filteredUsers.coffee | 34 ------ server/publications/spotlight.coffee | 9 +- 10 files changed, 131 insertions(+), 193 deletions(-) create mode 100644 packages/rocketchat-ui-message/message/popup/messagePopupChannel.js delete mode 100644 server/publications/channelAutocomplete.coffee delete mode 100644 server/publications/filteredUsers.coffee diff --git a/packages/rocketchat-ui-message/message/popup/messagePopup.coffee b/packages/rocketchat-ui-message/message/popup/messagePopup.coffee index a7dcb17bb23..34096bd9653 100644 --- a/packages/rocketchat-ui-message/message/popup/messagePopup.coffee +++ b/packages/rocketchat-ui-message/message/popup/messagePopup.coffee @@ -47,13 +47,13 @@ Template.messagePopup.onCreated -> template.value = new ReactiveVar - template.trigger = val(template.data.trigger, '@') + template.trigger = val(template.data.trigger, '') template.triggerAnywhere = val(template.data.triggerAnywhere, true) template.prefix = val(template.data.prefix, template.trigger) - template.suffix = val(template.data.suffix, ' ') + template.suffix = val(template.data.suffix, '') if template.triggerAnywhere is true template.matchSelectorRegex = val(template.data.matchSelectorRegex, new RegExp "(?:^| )#{template.trigger}[^\\s]*$") @@ -147,8 +147,12 @@ Template.messagePopup.onCreated -> caret = getCursorPosition(template.input) firstPartValue = value.substr 0, caret lastPartValue = value.substr caret + getValue = this.getValue(template.value.curValue, template.data.collection, template.records.get(), firstPartValue) - firstPartValue = firstPartValue.replace(template.selectorRegex, template.prefix + this.getValue(template.value.curValue, template.data.collection, firstPartValue) + template.suffix) + if not getValue + return + + firstPartValue = firstPartValue.replace(template.selectorRegex, template.prefix + getValue + template.suffix) template.input.value = firstPartValue + lastPartValue @@ -161,20 +165,27 @@ Template.messagePopup.onCreated -> filter = template.textFilter.get() if filter? - result = template.data.getFilter template.data.collection, filter - if (template.data.collection instanceof Meteor.Collection and result.count? and result.count() is 0) or result?.length is 0 - template.hasData.set false - else - template.hasData.set true + filterCallback = (result) => + template.hasData.set result?.length > 0 + template.records.set result - template.records.set result + Meteor.defer => + template.verifySelection() - Meteor.defer => - template.verifySelection() + result = template.data.getFilter(template.data.collection, filter, filterCallback) + if result? + filterCallback result Template.messagePopup.onRendered -> - this.input = this.data.getInput?() + if this.data.getInput? + this.input = this.data.getInput?() + else if this.data.input + this.input = this.parentTemplate().find(this.data.input) + + if not this.input? + console.error 'Input not found for popup' + $(this.input).on 'keyup', this.onInputKeyup.bind this $(this.input).on 'keydown', this.onInputKeydown.bind this diff --git a/packages/rocketchat-ui-message/message/popup/messagePopupChannel.html b/packages/rocketchat-ui-message/message/popup/messagePopupChannel.html index 90e85b36b75..fc2eae0c225 100644 --- a/packages/rocketchat-ui-message/message/popup/messagePopupChannel.html +++ b/packages/rocketchat-ui-message/message/popup/messagePopupChannel.html @@ -1,3 +1,4 @@ \ No newline at end of file + diff --git a/packages/rocketchat-ui-message/message/popup/messagePopupChannel.js b/packages/rocketchat-ui-message/message/popup/messagePopupChannel.js new file mode 100644 index 00000000000..a3836b1fa17 --- /dev/null +++ b/packages/rocketchat-ui-message/message/popup/messagePopupChannel.js @@ -0,0 +1,5 @@ +Template.messagePopupChannel.helpers({ + icon() { + return RocketChat.roomTypes.getIcon(this.t); + } +}); diff --git a/packages/rocketchat-ui-message/message/popup/messagePopupConfig.coffee b/packages/rocketchat-ui-message/message/popup/messagePopupConfig.coffee index 3f499908a72..93224bc200b 100644 --- a/packages/rocketchat-ui-message/message/popup/messagePopupConfig.coffee +++ b/packages/rocketchat-ui-message/message/popup/messagePopupConfig.coffee @@ -1,6 +1,4 @@ -@filteredUsers = new Mongo.Collection 'filtered-users' @filteredUsersMemory = new Mongo.Collection null -@channelAutocomplete = new Mongo.Collection 'channel-autocomplete' Meteor.startup -> Tracker.autorun -> @@ -20,17 +18,55 @@ Meteor.startup -> ts: messageUser.ts +getUsersFromServer = (filter, records, cb) => + messageUsers = _.pluck(records, 'username') + Meteor.call 'spotlight', filter, messageUsers, { users: true }, (err, results) -> + if err? + return console.error err + + if results.users.length > 0 + for result in results + if records.length < 5 + records.push + _id: result.username + username: result.username + status: 'offline' + sort: 3 + + records = _.sortBy(records, 'sort') + + cb(records) + +getRoomsFromServer = (filter, records, cb) => + Meteor.call 'spotlight', filter, null, { rooms: true }, (err, results) -> + if err? + return console.error err + + if results.rooms.length > 0 + for room in results.rooms + if records.length < 5 + records.push room + + cb(records) + +getUsersFromServerDelayed = _.throttle getUsersFromServer, 500 +getRoomsFromServerDelayed = _.throttle getRoomsFromServer, 500 + + Template.messagePopupConfig.helpers popupUserConfig: -> self = this template = Template.instance() + config = title: t('People') collection: filteredUsersMemory template: 'messagePopupUser' getInput: self.getInput textFilterDelay: 200 - getFilter: (collection, filter) -> + trigger: '@' + suffix: ' ' + getFilter: (collection, filter, cb) -> exp = new RegExp("#{RegExp.escape filter}", 'i') # Get users from messages @@ -44,6 +80,7 @@ Template.messagePopupConfig.helpers _id: item.username username: item.username status: item.status + sort: 1 # Get users of room if items.length < 5 and filter?.trim() isnt '' @@ -56,23 +93,14 @@ Template.messagePopupConfig.helpers _id: roomUsername username: roomUsername status: Session.get('user_' + roomUsername + '_status') or 'offline' + sort: 2 if items.length >= 5 break # Get users from db if items.length < 5 and filter?.trim() isnt '' - messageUsers = _.pluck(items, 'username') - template.userFilter.set - name: filter - except: messageUsers - - if template.subscriptionsReady() - filteredUsers.find({username: exp}, {limit: 5 - messageUsers.length}).fetch().forEach (item) -> - items.push - _id: item.username - username: item.username - status: 'offline' + getUsersFromServerDelayed filter, items, cb all = _id: '@all' @@ -80,12 +108,12 @@ Template.messagePopupConfig.helpers system: true name: t 'Notify_all_in_this_room' compatibility: 'channel group' + sort: 4 exp = new RegExp("(^|\\s)#{RegExp.escape filter}", 'i') if exp.test(all.username) or exp.test(all.compatibility) - items.unshift all + items.push all - template.resultsLength.set items.length return items getValue: (_id, collection, firstPartValue) -> @@ -105,26 +133,26 @@ Template.messagePopupConfig.helpers popupChannelConfig: -> self = this template = Template.instance() + config = title: t('Channels') - collection: channelAutocomplete + collection: RocketChat.models.Subscriptions trigger: '#' + suffix: ' ' template: 'messagePopupChannel' getInput: self.getInput - textFilterDelay: 200 - getFilter: (collection, filter) -> + getFilter: (collection, filter, cb) -> exp = new RegExp(filter, 'i') - template.channelFilter.set filter - if template.channelSubscription.ready() - results = collection.find( { name: exp }, { limit: 5 }).fetch() - else - results = [] - template.resultsLength.set results.length - return results + records = collection.find({name: exp, t: {$in: ['c', 'p']}}, {limit: 5, sort: {ls: -1}}).fetch() + + if records.length < 5 and filter?.trim() isnt '' + getRoomsFromServerDelayed filter, records, cb - getValue: (_id, collection) -> - return collection.findOne(_id)?.name + return records + + getValue: (_id, collection, records) -> + return _.findWhere(records, {_id: _id})?.name return config @@ -136,6 +164,7 @@ Template.messagePopupConfig.helpers title: t('Commands') collection: RocketChat.slashCommands.commands trigger: '/' + suffix: ' ' triggerAnywhere: false template: 'messagePopupSlashCommand' getInput: self.getInput @@ -153,7 +182,6 @@ Template.messagePopupConfig.helpers commands = commands[0..10] - template.resultsLength.set commands.length return commands return config @@ -172,7 +200,7 @@ Template.messagePopupConfig.helpers trigger: ':' prefix: '' getInput: self.getInput - getFilter: (collection, filter) -> + getFilter: (collection, filter, cb) -> results = [] key = ':' + filter @@ -197,23 +225,6 @@ Template.messagePopupConfig.helpers return 1 return 0 - template.resultsLength.set results.length return results return config - - subscriptionNotReady: -> - template = Template.instance() - return 'notready' if template.resultsLength.get() is 0 and not template.subscriptionsReady() - -Template.messagePopupConfig.onCreated -> - @userFilter = new ReactiveVar {} - @channelFilter = new ReactiveVar '' - @resultsLength = new ReactiveVar 0 - - template = @ - @autorun -> - template.userSubscription = template.subscribe 'filteredUsers', template.userFilter.get() - - @autorun -> - template.channelSubscription = template.subscribe 'channelAutocomplete', template.channelFilter.get() diff --git a/packages/rocketchat-ui-message/message/popup/messagePopupConfig.html b/packages/rocketchat-ui-message/message/popup/messagePopupConfig.html index 78b6db1de49..e6ed7c31079 100644 --- a/packages/rocketchat-ui-message/message/popup/messagePopupConfig.html +++ b/packages/rocketchat-ui-message/message/popup/messagePopupConfig.html @@ -1,5 +1,5 @@