diff --git a/client/config/router.js b/client/config/router.js index a950a1b..65e2c96 100644 --- a/client/config/router.js +++ b/client/config/router.js @@ -13,7 +13,6 @@ Router.onBeforeAction(function() { Router.route('/', function() { this.wait(Meteor.subscribe('handles')); - this.wait(Meteor.subscribe('logs')); this.wait(Meteor.subscribe('tickets')); this.wait(Meteor.subscribe('userData')); this.render('main'); diff --git a/client/views/pages/elements/logs/logs.js b/client/views/pages/elements/logs/logs.js index 8c66556..9d67e7e 100644 --- a/client/views/pages/elements/logs/logs.js +++ b/client/views/pages/elements/logs/logs.js @@ -1,51 +1,59 @@ Template.logs.onCreated(function handlesOnCreated() { - let template = Template.instance(); - template.searchQuery = new ReactiveVar(); + this.limit = new ReactiveVar(30); + + this.autorun(() => { + this.subscribe( + 'logs', + this.limit.get(), + Session.get('searchValue') + ); + }); +}); + +Template.logs.onRendered(function logsOnRendered() { + $('.slimScrollDivLogs').slimScroll({ + height: 'auto', + }) }); Template.logs.events({ - 'input #search_logs': function (event, templateInstance) { - Template.instance().searchQuery.set(event.currentTarget.value); - }, + // set meteor session active ticket 'click .ticket-chat': function (event, templateInstance) { Session.set( 'currentTicketId', - event.currentTarget.id.replace('tc_','') + event.currentTarget.id.replace('tc_', '') ); + }, + // Change limit of log subscription when end of scrollbox is reached to create a infinitescroll effect + 'scroll .slimScrollDivLogs': function (event, templateInstance) { + let listElem = event.currentTarget; + if (listElem.scrollTop + listElem.clientHeight >= listElem.scrollHeight) { + templateInstance.limit.set(templateInstance.limit.get() + 10); + } } }); -Template.logs.onRendered(function logsOnRendered(){ - $('.slimScrollDivLogs').slimScroll({ - height: 'auto', - }) -}); - Template.logs.helpers({ logs() { - let searchQuery = Session.get('searchValue') - if(searchQuery && searchQuery.length > 0){ - var logs = Logs.find({ - $or:[ - {message:{'$regex':searchQuery, '$options' : 'i'}}, - {title:{'$regex':searchQuery, '$options' : 'i'}} - ] - },{sort: {updatedAt: -1}}).fetch(); - }else{ - var logs = Logs.find({},{sort: {updatedAt: -1}}).fetch(); - } + let logs = Logs.find({}, { sort: { updatedAt: -1 } }).fetch(); if (logs) { - logs.map(function(log){ - let users = Meteor.users.find().fetch().map((u)=>{return u.username}); - let userRegex = new RegExp('('+users.join('|')+')','ig'); - - log.message = log.message.replace(/(BATA-[0-9]* \([\w*\s*]*\))/ig, '$1'); - log.message = log.message.replace(userRegex, '$1'); - log.ticket = Tickets.findOne({logs:log._id}, {fields: {title:1, priority:1}}); - return log; - }); - return logs; + return logs.map(decorateLogMessage); } } -}); \ No newline at end of file +}); + +/** + * Decorate log messages by replacing references to handles and username with html labels + * + * @param {Log} log + * @returns {Log} log + */ +const decorateLogMessage = (log) => { + let users = Meteor.users.find().fetch().map((u) => { return u.username }); + let userRegex = new RegExp('(' + users.join('|') + ')', 'ig'); + log.message = log.message.replace(/(BATA-[0-9]* \([\w*\s*]*\))/ig, '$1'); + log.message = log.message.replace(userRegex, '$1'); + log.ticket = Tickets.findOne({ logs: log._id }, { fields: { title: 1, priority: 1 } }); + return log; +} \ No newline at end of file diff --git a/imports/api/logs.js b/imports/api/logs.js index 735813d..bfb0e55 100644 --- a/imports/api/logs.js +++ b/imports/api/logs.js @@ -40,9 +40,22 @@ Logs.before.insert(function (userId, doc) { }) }); +// This code only runs on the server if (Meteor.isServer) { - // This code only runs on the server - Meteor.publish('logs', function logPublication() { - return Logs.find(); + Meteor.publish('logs', function logPublication(limit, filter) { + let query = {} + if(filter && filter.length > 0){ + query = {'$or':[ + {message:{'$regex':filter, '$options' : 'i'}}, + {title:{'$regex':filter, '$options' : 'i'}} + ]} + } + return Logs.find( + query, + { + sort: {updatedAt: -1}, + limit: limit + } + ); }); -} \ No newline at end of file +}