95 lines
2.5 KiB
JavaScript
95 lines
2.5 KiB
JavaScript
const librarySubs = new SubsManager();
|
|
|
|
Template.itemLibrary.onCreated(function(){
|
|
this.selectedTab = new ReactiveVar("0");
|
|
this.librariesOpen = new ReactiveVar([]);
|
|
this.readyDict = new ReactiveDict();
|
|
this.autorun(() => {
|
|
// Subscribe to all open libraries
|
|
_.each(this.librariesOpen.get(), (libraryId) => {
|
|
var handle = librarySubs.subscribe("libraryItems", libraryId);
|
|
this.autorun(() => {
|
|
this.readyDict.set(libraryId, handle.ready());
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
Template.itemLibrary.helpers({
|
|
selectedTab(){
|
|
return Template.instance().selectedTab.get();
|
|
},
|
|
libraries(){
|
|
let userId = Meteor.userId();
|
|
return Libraries.find({
|
|
$or: [
|
|
{readers: userId},
|
|
{writers: userId},
|
|
{owner: userId},
|
|
],
|
|
});
|
|
},
|
|
libraryItems(){
|
|
return LibraryItems.find({
|
|
library: this._id
|
|
},{
|
|
sort: {name: 1}
|
|
});
|
|
},
|
|
ready(libraryId){
|
|
return Template.instance().readyDict.get(libraryId);
|
|
},
|
|
isOpen(libraryId){
|
|
const librariesOpen = Template.instance().librariesOpen.get();
|
|
return _.contains(librariesOpen, libraryId);
|
|
},
|
|
});
|
|
|
|
Template.itemLibrary.events({
|
|
"click .library-header": function(event, template){
|
|
let libs = template.librariesOpen.get();
|
|
const libraryId = this._id;
|
|
// Toggle whether this key is in the array or not
|
|
if (_.contains(libs, libraryId)){
|
|
libs = _.without(libs, libraryId);
|
|
} else {
|
|
libs.push(libraryId);
|
|
}
|
|
template.librariesOpen.set(libs);
|
|
},
|
|
"click .editLibrary": function(event, instance){
|
|
event.stopPropagation();
|
|
var libraryId = this._id;
|
|
pushDialogStack({
|
|
template: "libraryDialog",
|
|
data: {libraryId},
|
|
element: event.currentTarget.parentElement.parentElement,
|
|
returnElement: () => instance.find(`.library-header[data-id='${libraryId}']`),
|
|
});
|
|
},
|
|
"click .addItem": 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-name[data-id='${itemId}']`),
|
|
});
|
|
},
|
|
"click .item-name": function(event, instance){
|
|
event.stopPropagation();
|
|
var itemId = this._id;
|
|
pushDialogStack({
|
|
template: "libraryItemDialog",
|
|
data: {itemId},
|
|
element: event.currentTarget,
|
|
returnElement: () => instance.find(`.item-name[data-id='${itemId}']`),
|
|
});
|
|
},
|
|
})
|