Library Collections UI built
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import SimpleSchema from 'simpl-schema';
|
||||
import Libraries from '/imports/api/library/Libraries.js';
|
||||
import LibraryCollections from '/imports/api/library/LibraryCollections.js';
|
||||
import LibraryNodes from '/imports/api/library/LibraryNodes.js';
|
||||
import { assertViewPermission, assertDocViewPermission } from '/imports/api/sharing/sharingPermissions.js';
|
||||
import { union } from 'lodash';
|
||||
|
||||
const LIBRARY_NODE_TREE_FIELDS = {
|
||||
_id: 1,
|
||||
@@ -40,26 +42,90 @@ const LIBRARY_NODE_TREE_FIELDS = {
|
||||
}
|
||||
|
||||
export { LIBRARY_NODE_TREE_FIELDS };
|
||||
|
||||
Meteor.publish('libraryCollection', function (libraryCollectionId) {
|
||||
this.autorun(function () {
|
||||
let userId = this.userId;
|
||||
if (!userId) return [];
|
||||
this.autorun(function () {
|
||||
const libraryCollectionCursor = LibraryCollections.find({
|
||||
_id: libraryCollectionId,
|
||||
$or: [
|
||||
{ owner: userId },
|
||||
{ writers: userId },
|
||||
{ readers: userId },
|
||||
{ public: true },
|
||||
]
|
||||
});
|
||||
const libraryCollection = libraryCollectionCursor.fetch()[0];
|
||||
if (!libraryCollection) return [ libraryCollectionCursor ];
|
||||
this.autorun(function () {
|
||||
const libraryCursor = Libraries.find({
|
||||
_id: {$in: libraryCollection.libraries},
|
||||
$or: [
|
||||
{ owner: userId },
|
||||
{ writers: userId },
|
||||
{ readers: userId },
|
||||
{ public: true },
|
||||
]
|
||||
}, {
|
||||
sort: { name: 1 }
|
||||
});
|
||||
return [ libraryCollectionCursor, libraryCursor ];
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
Meteor.publish('libraries', function(){
|
||||
this.autorun(function (){
|
||||
Meteor.publish('libraries', function () {
|
||||
this.autorun(function () {
|
||||
let userId = this.userId;
|
||||
if (!userId) {
|
||||
return [];
|
||||
}
|
||||
const user = Meteor.users.findOne(userId, {
|
||||
fields: {subscribedLibraries: 1}
|
||||
fields: { subscribedLibraries: 1, subscribedLibraryCollections: 1 }
|
||||
});
|
||||
const subs = user && user.subscribedLibraries || [];
|
||||
return Libraries.find({
|
||||
$or: [
|
||||
{owner: this.userId},
|
||||
{writers: this.userId},
|
||||
{readers: this.userId},
|
||||
{ _id: {$in: subs}, public: true },
|
||||
]
|
||||
}, {
|
||||
sort: {name: 1}
|
||||
|
||||
this.autorun(function () {
|
||||
// Get the collections the user is subscribed to
|
||||
const subCollections = user && user.subscribedLibraryCollections || [];
|
||||
const libraryCollectionsCursor = LibraryCollections.find({
|
||||
$or: [
|
||||
{ owner: userId },
|
||||
{ writers: userId },
|
||||
{ readers: userId },
|
||||
{ _id: { $in: subCollections }, public: true },
|
||||
]
|
||||
}, {
|
||||
sort: { name: 1 }
|
||||
});
|
||||
|
||||
// Collate all the libraryIds in those collections
|
||||
let collectionLibIds = [];
|
||||
libraryCollectionsCursor.forEach(libCollection => {
|
||||
collectionLibIds = union(collectionLibIds, libCollection.libraries);
|
||||
});
|
||||
|
||||
// Get the libraries the user is subscribed to directly
|
||||
const subs = user && user.subscribedLibraries || [];
|
||||
|
||||
// Combine all the library Ids
|
||||
const libIds = union(collectionLibIds, subs);
|
||||
|
||||
this.autorun(function () {
|
||||
const librariesCursor = Libraries.find({
|
||||
$or: [
|
||||
{ owner: userId },
|
||||
{ writers: userId },
|
||||
{ readers: userId },
|
||||
{ _id: { $in: libIds }, public: true },
|
||||
]
|
||||
}, {
|
||||
sort: { name: 1 }
|
||||
});
|
||||
return [librariesCursor, libraryCollectionsCursor];
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -10,6 +10,7 @@ Meteor.publish('user', function(){
|
||||
apiKey: 1,
|
||||
darkMode: 1,
|
||||
subscribedLibraries: 1,
|
||||
subscribedLibraryCollections: 1,
|
||||
fileStorageUsed: 1,
|
||||
profile: 1,
|
||||
preferences: 1,
|
||||
|
||||
Reference in New Issue
Block a user