Files
DiceCloud/app/client/views/library/library.js

121 lines
3.1 KiB
JavaScript

const librarySubs = new SubsManager();
Template.library.onCreated(function(){
this.searchTerm = new ReactiveVar("");
});
Template.library.helpers({
items(){
let search = Template.instance().searchTerm.get();
if (search){
return LibraryItems.find(
{
library: this._id,
$or: [
{
name: {$regex: new RegExp(".*" + search + ".*", "gi")}
},
{
libraryname: {$regex: new RegExp(".*" + search + ".*", "gi")}
},
],
},
{sort: {name: 1}},
);
} else {
return LibraryItems.find(
{library: this._id},
{sort: {name: 1}},
);
}
},
displayName(){
return this.libraryName || this.name;
},
canUserSubscribe(){
let user = Meteor.user();
let userId = user._id;
return !(
_.contains(this.readers, userId) ||
_.contains(this.writers, userId) ||
this.owner === userId ||
_.contains(user.profile.librarySubscriptions, this._id)
);
},
canUserUnsubscribe(){
let user = Meteor.user();
let userId = user._id;
return (
_.contains(user.profile.librarySubscriptions, this._id) ||
_.contains(this.readers, userId)
);
},
canUserEdit(){
let userId = Meteor.userId();
return (
_.contains(this.writers, userId) ||
this.owner === userId
);
},
});
Template.library.events({
"input .search-input, change .search-input": function(event, template){
const value = event.currentTarget.value;
template.searchTerm.set(value);
},
"click #edit": function(event, instance){
event.stopPropagation();
var libraryId = this._id;
pushDialogStack({
template: "libraryDialog",
data: {libraryId},
element: event.currentTarget.parentElement.parentElement,
callback(data){
if (data && data.delete){
Router.go('/library');
Tracker.afterFlush(function(){
Libraries.remove(libraryId);
});
}
},
});
},
"click #addLibraryItem": function(event, instance){
event.stopPropagation();
var libraryId = this._id;
var itemId = LibraryItems.insert({
name: "New Library Item",
library: libraryId,
});
pushDialogStack({
template: "libraryItemDialog",
data: {itemId},
element: event.currentTarget,
returnElement: () => instance.find(`.item[data-id='${itemId}']`),
});
},
"click .item": function(event, instance){
event.stopPropagation();
var itemId = this._id;
pushDialogStack({
template: "libraryItemDialog",
data: {itemId},
element: event.currentTarget,
returnElement: () => instance.find(`.item[data-id='${itemId}']`),
});
},
"click #subscribe": function(event, instance){
Meteor.users.update(Meteor.userId(), {
$addToSet: {"profile.librarySubscriptions": this._id},
});
},
"click #unsubscribe": function(event, instance){
let userId = Meteor.userId();
Meteor.users.update(userId, {
$pull: {"profile.librarySubscriptions": this._id},
});
Meteor.call("unshareLibraryWithMe", this._id);
},
});