@domisoft/todo-clean-architecture
Version:
todo project following uncle bob clean architecture patterns
157 lines • 9.71 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var add_todo_usecase_1 = require("../../domain/usecase/add-todo.usecase");
var filter_todos_usecase_1 = require("../../domain/usecase/filter-todos.usecase");
var get_active_todos_count_usecase_1 = require("../../domain/usecase/get-active-todos-count.usecase");
var get_active_todos_usecase_1 = require("../../domain/usecase/get-active-todos.usecase");
var get_all_todos_usecase_1 = require("../../domain/usecase/get-all-todos.usecase");
var get_completed_todos_usecase_1 = require("../../domain/usecase/get-completed-todos.usecase");
var mark_all_todos_as_active_usecase_1 = require("../../domain/usecase/mark-all-todos-as-active.usecase");
var mark_all_todos_as_completed_usecase_1 = require("../../domain/usecase/mark-all-todos-as-completed.usecase");
var mark_todo_as_active_usecase_1 = require("../../domain/usecase/mark-todo-as-active.usecase");
var mark_todo_as_completed_usecase_1 = require("../../domain/usecase/mark-todo-as-completed.usecase");
var remove_completed_todos_usecas_1 = require("../../domain/usecase/remove-completed-todos.usecas");
var remove_todo_id_usecase_1 = require("../../domain/usecase/remove-todo-id.usecase");
var todo_mapper_1 = require("../mapper/todo.mapper");
var todos_viewmodel_1 = require("../viewmodel/todos.viewmodel");
var TodoDefaultPresenter = /** @class */ (function () {
function TodoDefaultPresenter(repository) {
this.repository = repository;
// internal state
this.state = new todos_viewmodel_1.TodoStateVM();
this.dispatch = new rxjs_1.BehaviorSubject(this.state);
this.mapper = new todo_mapper_1.TodoViewModelMapper();
this.filterTodosUC = new filter_todos_usecase_1.FilterTodosUseCase(this.repository);
this.getAllTodosUC = new get_all_todos_usecase_1.GetAllTodosUseCase(this.repository);
this.getCompletedTodosUC = new get_completed_todos_usecase_1.GetCompletedTodosUseCase(this.repository);
this.getActiveTodosUC = new get_active_todos_usecase_1.GetActiveTodosUseCase(this.repository);
this.getActiveTodosCountUC = new get_active_todos_count_usecase_1.GetActiveTodosCountUseCase(this.repository);
this.addTodoUC = new add_todo_usecase_1.AddTodoUseCase(this.repository);
this.markTodoAsCompletedUC = new mark_todo_as_completed_usecase_1.MarkTodoAsCompletedUseCase(this.repository);
this.markTodoAsActiveUC = new mark_todo_as_active_usecase_1.MarkTodoAsActiveUseCase(this.repository);
this.markAllTodosAsCompletedUC = new mark_all_todos_as_completed_usecase_1.MarkAllTodosAsCompletedUseCase(this.repository);
this.markAllTodosAsActiveUC = new mark_all_todos_as_active_usecase_1.MarkAllTodosAsActiveUseCase(this.repository);
this.removeTodoUC = new remove_todo_id_usecase_1.RemoveTodoUseCase(this.repository);
this.removeCompletedTodosUC = new remove_completed_todos_usecas_1.RemoveCompletedTodosUseCase(this.repository);
// state selectors
this.todos$ = this.dispatch.asObservable().pipe(operators_1.map(function (state) { return state.todos; }));
this.filter$ = this.dispatch.asObservable().pipe(operators_1.map(function (state) { return state.filter; }));
this.activeTodosCount$ = this.dispatch.asObservable().pipe(operators_1.map(function (state) { return state.activeTodosCount; }));
}
TodoDefaultPresenter.prototype.getAllTodos = function () {
var _this = this;
var todos$ = this.getAllTodosUC.execute();
var count$ = this.getActiveTodosCountUC.execute();
rxjs_1.forkJoin(todos$, count$).subscribe(function (_a) {
var todos = _a[0], count = _a[1];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), filter: 'all', activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.getCompletedTodos = function () {
var _this = this;
var todos$ = this.getCompletedTodosUC.execute();
var count$ = this.getActiveTodosCountUC.execute();
rxjs_1.forkJoin(todos$, count$).subscribe(function (_a) {
var todos = _a[0], count = _a[1];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), filter: 'completed', activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.getActiveTodos = function () {
var _this = this;
var todos$ = this.getActiveTodosUC.execute();
var count$ = this.getActiveTodosCountUC.execute();
rxjs_1.forkJoin(todos$, count$).subscribe(function (_a) {
var todos = _a[0], count = _a[1];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), filter: 'active', activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.addTodo = function (name) {
var _this = this;
var add$ = this.addTodoUC.execute(name);
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(add$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.markTodoAsCompleted = function (id) {
var _this = this;
var mark$ = this.markTodoAsCompletedUC.execute(id);
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(mark$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.markTodoAsActive = function (id) {
var _this = this;
var mark$ = this.markTodoAsActiveUC.execute(id);
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(mark$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.markAllTodosAsCompleted = function () {
var _this = this;
var mark$ = this.markAllTodosAsCompletedUC.execute();
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(mark$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.markAllTodosAsActive = function () {
var _this = this;
var mark$ = this.markAllTodosAsActiveUC.execute();
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(mark$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.removeTodo = function (id) {
var _this = this;
var remove$ = this.removeTodoUC.execute(id);
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(remove$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.removeCompletedTodos = function () {
var _this = this;
var remove$ = this.removeCompletedTodosUC.execute();
var count$ = this.getActiveTodosCountUC.execute();
var todos$ = this.filterTodosUC.execute(this.state.filter);
rxjs_1.forkJoin(remove$, count$, todos$).subscribe(function (_a) {
var count = _a[1], todos = _a[2];
_this.dispatch.next((_this.state = __assign(__assign({}, _this.state), { todos: todos.map(_this.mapper.mapFrom), activeTodosCount: count })));
});
};
TodoDefaultPresenter.prototype.updateTodos = function (todos) {
this.dispatch.next((this.state = __assign(__assign({}, this.state), { todos: todos })));
};
return TodoDefaultPresenter;
}());
exports.TodoDefaultPresenter = TodoDefaultPresenter;
//# sourceMappingURL=todo-default.presenter.js.map