Skip to content

Instantly share code, notes, and snippets.

@makishvili
Created July 21, 2014 12:04
Show Gist options
  • Save makishvili/de93ba9fcdffd392f62c to your computer and use it in GitHub Desktop.
Save makishvili/de93ba9fcdffd392f62c to your computer and use it in GitHub Desktop.
modules.define(
'add-analyst',
['inherit', 'y-block', 'y-button', 'y-input', 'baby-loris-api'],
function (provide, inherit, YBlock, YButton, YInput, Api) {
var AddAnalyst = inherit(YBlock, {
__constructor: function () {
this.__base.apply(this, arguments);
// Указывает, где искать ручки получения/передачи данных
this._api = new Api('/api/');
this.input = this._findElement('input');
this.button = this._findElement('button');
this.msg = this._findElement('msg');
this._bindTo(YButton.find(this.button), 'click', this._onFormSubmit);
},
/**
*
* @param {Error} e
* @private
*/
_onFormSubmit: function (e) {
e.preventDefault();
var login = this._getLoginValue();
if (this._isNotEmpty(login)) {
this._addAnalyst(login)
.then(function (analyst) {
console.log('this._addAnalyst -> then');
this.emit('userAdded');
}.bind(this))
.fail(function (error) {
console.log('this._addAnalyst -> fail');
this.msg.text('Добавить пользователя не получилось. Попробуйте ещё раз.');
throw new Error(error);
}.bind(this));
} else {
this.msg.text('Всё-таки введите логин ;)');
}
},
/**
* Добавляет пользователя в список аналитиков
*
* @param {String} login
* @returns {Object}
* @private
*/
_addAnalyst: function (login) {
// Сходи в блекбокс, возьми uid
return this._api.exec('getUserInfoByLogin', {login: login})
.then(function (userinfo) {
console.log('getUserInfoByLogin -> then');
// получи uid
var uid = userinfo.res[0].uid;
// Сходи в бекенд, попроси добавить пользователя
return this._api.exec('addAnalyst', {uid: uid})
.then(function (analyst) {
console.log('addAnalyst -> then');
return analyst;
})
.fail(function (error) {
console.log('addAnalyst -> fail');
throw new Error(error);
});
}.bind(this))
.fail(function (error) {
console.log('getUserInfoByLogin -> fail');
throw new Error(error);
});
},
/**
* Получить логин, введённый пользователем
*
* @returns {String}
* @private
*/
_getLoginValue: function () {
return YInput.find(this.input).getValue();
},
/**
* Проверка на пустую строку, введённую пользователем
*
* @param {String | Null} login
* @returns {Boolean}
* @private
*/
_isNotEmpty: function (login) {
var trimmedLogin = login.replace(/(\s|\n|\t)+/g, '');
return Boolean(trimmedLogin);
}
}, {
getBlockName: function () {
return 'add-analyst';
}
});
provide(AddAnalyst);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment