Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions app/message-pin/client/lib/PinnedMessage.js

This file was deleted.

68 changes: 50 additions & 18 deletions app/message-pin/client/views/pinnedMessages.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
import _ from 'underscore';
import { Mongo } from 'meteor/mongo';
import { ReactiveVar } from 'meteor/reactive-var';
import { Template } from 'meteor/templating';

import { PinnedMessage } from '../lib/PinnedMessage';
import { upsertMessageBulk } from '../../../ui-utils/client/lib/RoomHistoryManager';
import { messageContext } from '../../../ui-utils/client/lib/messageContext';
import { APIClient } from '../../../utils/client';
import { Messages } from '../../../models/client';

const LIMIT_DEFAULT = 50;

Template.pinnedMessages.helpers({
hasMessages() {
return Template.instance().cursor.count() > 0;
return Template.instance().messages.find().count();
},
messages() {
return Template.instance().cursor;
const instance = Template.instance();
return instance.messages.find({}, { limit: instance.limit.get(), sort: { ts: -1 } });
},
message() {
return _.extend(this, { customClass: 'pinned', actionContext: 'pinned' });
Expand All @@ -22,26 +28,52 @@ Template.pinnedMessages.helpers({
});

Template.pinnedMessages.onCreated(function() {
this.pinnedMessages = new ReactiveVar([]);
this.hasMore = new ReactiveVar(true);
this.limit = new ReactiveVar(LIMIT_DEFAULT);
this.rid = this.data.rid;
this.messages = new Mongo.Collection(null);

this.cursor = PinnedMessage.find({
rid: this.data.rid,
}, {
sort: {
ts: -1,
},
});
this.autorun(() => {
const query = {
t: { $ne: 'rm' },
_hidden: { $ne: true },
pinned: true,
rid: this.data.rid,
_updatedAt: {
$gt: new Date(),
},
};

this.hasMore = new ReactiveVar(true);
this.limit = new ReactiveVar(50);
return this.autorun(() => {
const data = Template.currentData();
return this.subscribe('pinnedMessages', data.rid, this.limit.get(), () => {
if (this.cursor.count() < this.limit.get()) {
return this.hasMore.set(false);
}
this.cursor && this.cursor.stop();

this.limit.set(LIMIT_DEFAULT);

this.cursor = Messages.find(query).observe({
added: ({ _id, ...message }) => {
this.messages.upsert({ _id }, message);
},
changed: ({ _id, ...message }) => {
this.messages.upsert({ _id }, message);
},
removed: ({ _id }) => {
this.messages.remove({ _id });
},
});
});

this.autorun(async () => {
const limit = this.limit.get();
const { messages, total } = await APIClient.v1.get(`chat.getPinnedMessages?roomId=${ this.rid }&count=${ limit }`);

upsertMessageBulk({ msgs: messages }, this.messages);

this.hasMore.set(total > limit);
});
});

Template.mentionsFlexTab.onDestroyed(function() {
this.cursor.stop();
});

Template.pinnedMessages.events({
Expand Down
1 change: 1 addition & 0 deletions app/message-pin/server/publications/pinnedMessages.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Meteor } from 'meteor/meteor';
import { Users, Messages } from '../../../models';

Meteor.publish('pinnedMessages', function(rid, limit = 50) {
console.warn('The publication "pinnedMessages" is deprecated and will be removed after version v3.0.0');
if (!this.userId) {
return this.ready();
}
Expand Down