blob: 1986dc28e89f63a52e5a262d5b3766ef1865c0e4 [file] [log] [blame]
// Collection-based implementation of Dispatcher.
'use strict';
var _ = require('lodash');
var inherits = require('inherits');
var Collection = require('./collection');
var Dispatcher = require('./dispatcher');
inherits(CollectionDispatcher, Dispatcher);
module.exports = CollectionDispatcher;
function noop() {}
function CollectionDispatcher(lists, todos) {
Dispatcher.call(this);
console.assert(lists instanceof Collection);
console.assert(todos instanceof Collection);
this.lists_ = lists;
this.todos_ = todos;
}
CollectionDispatcher.prototype.getLists = function(cb) {
this.lists_.find({}, {sort: {name: 1}}, cb);
};
CollectionDispatcher.prototype.getTodos = function(listId, cb) {
this.todos_.find({listId: listId}, {sort: {timestamp: 1}}, cb);
};
CollectionDispatcher.prototype.addList = function(list, cb) {
this.lists_.insert(list, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.editListName = function(listId, name, cb) {
this.lists_.update(listId, {$set: {name: name}}, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.addTodo = function(listId, todo, cb) {
todo = _.assign({}, todo, {listId: listId});
this.todos_.insert(todo, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.removeTodo = function(todoId, cb) {
this.todos_.remove(todoId, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.editTodoText = function(todoId, text, cb) {
this.todos_.update(todoId, {$set: {text: text}}, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.markTodoDone = function(todoId, done, cb) {
this.todos_.update(todoId, {$set: {done: done}}, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.addTag = function(todoId, tag, cb) {
this.todos_.update(todoId, {$addToSet: {tags: tag}}, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.removeTag = function(todoId, tag, cb) {
this.todos_.update(todoId, {$pull: {tags: tag}}, this.maybeEmit_(cb));
};
CollectionDispatcher.prototype.maybeEmit_ = function(cb) {
var that = this;
cb = cb || noop;
return function(err) {
cb.apply(null, arguments);
if (!err) that.emit('change');
};
};