UNPKG

@domisoft/todo-clean-architecture

Version:

todo project following uncle bob clean architecture patterns

157 lines 9.71 kB
"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