'use strict'; const cookies = require('js-cookie'); const page = require('page'); const api = require('../api.js'); const topNavController = require('../controllers/top_nav_controller.js'); const RegistrationView = require('../views/registration_view.js'); class UsersController { constructor() { this.registrationView = new RegistrationView(); } listUsersRoute() { topNavController.activate('users'); } createUserRoute() { topNavController.activate('register'); this.registrationView.render({register: (...args) => { return this._register(...args); }}); } _register(name, password, email) { const data = { 'name': name, 'password': password, 'email': email }; // TODO: reduce callback hell return new Promise((resolve, reject) => { api.post('/users/', data).then(() => { api.login(name, password).then(() => { cookies.set('auth', {'user': name, 'password': password}); resolve(); page('/'); this.registrationView.notifySuccess('Welcome aboard!'); }).catch(response => { reject(response.description); }); }).catch(response => { reject(response.description); }); }); } showUserRoute(user) { if (api.isLoggedIn() && user == api.userName) { topNavController.activate('account'); } else { topNavController.activate('users'); } } editUserRoute(user) { topNavController.activate('users'); } } module.exports = new UsersController();