Im working on a unread counter for messages and have alert collection and messages collection.
Issue now is console log shows alerts are attached to messsage, however the counter does not show up. Typing Alerts.find().count();
in console3e gives 0.
pub & sub
//in server.js
Meteor.publish('alerts', function() {
return Alerts.find({ userId: this.userId, read: false });
});
//in router
Meteor.subscribe('alerts')
template counter + click to clear alerts
//helper
alertCount: function(){
return Alerts.find({ userId: Meteor.userId(), read: false }).count();
}
//event
'click .enterRoom': function() {
Meteor.call('markAlertsAsRead', { roomId: this._id });
}
attach alert when submit message
'submit form': function(e, template) {
e.preventDefault();
var message = template.find('input').value;
var roomId = this._id;
var messageId = Messages.insert ({
roomId : Router.current().params._id,
msg : message,
userId : Meteor.user()._id,
});
template.find('input').value = '';
createMessageAlert(messageId, roomId, message);
var insertedMessage = Messages.findOne(messageId);
console.log(insertedMessage + messageId); //logs msg + alert
}
in alert.js collection
Meteor.methods({
markAlertsAsRead: function(options){
check(options, Object);
Alerts.update({ roomId: options.roomId }, { $set:{ read: true } }, { multi: true });
}
});
createMessageAlert = function(messageId, roomId, message){
if ( message.user !== Meteor.userId() ){
Alerts.insert({
userId : message.userId,
roomId : Router.current().params._id,
messageId : messageId,
read : false
}, function(error, result){
if( error ) console.log( error );
if( result ) console.log( 'alert attached, alertId: ' + result );
});
}
};
Aucun commentaire:
Enregistrer un commentaire