1

We have published items based on list ids , we use myLists variable to filter out the List Id, but this variable is not reactive by nature ,when we try to add the new list , then items of new list are not publishing automatically.

Meteor.publish('subscription_items', function () {
var userName = this.userId ? Meteor.users.find({ _id: this.userId }).fetch()[0].username : null;

var myLists = [];
var sharedListIDs = [];
SharedLists.find({ shared_with: userName }).forEach(function (list) {
    sharedListIDs.push(list.list_id);
});

Lists.find({ $or: [{ owner: userName }, { _id: { $in: sharedListIDs } }] }).forEach(function (list) {
    myLists.push(list._id);
});

return Items.find({ list_id: { $in: Lists.find({ $or: [{ owner: userName }, { _id: { $in: sharedListIDs } }] }).fetch() } });.

Can we have any way to always publish fresh data. Please help me to resolve this issue. any help/suggestion would appreciate.

user2257379
  • 129
  • 1
  • 5

1 Answers1

0

As David Weldon pointed out in this answer to my similar question, what you are looking for is a reactive join. By using the package publish-with-relations, I think the publish function you want looks something like this:

Meteor.publish('subscription_items', function() {
  return Meteor.publishWithRelations({
    handle: this,
    collection: Lists,
    filter: {owner: this.userId},
    mappings: [{collection: SharedLists, key: 'list_id'}]
  });
});

Alternatively, as a (dirty) workaround, you could call

Meteor.subscribe('subscription_items');

everywhere where you need the collection to be republished.

Community
  • 1
  • 1