discourse/app/assets/javascripts/wizard/components/invite-list.js.es6

70 lines
1.6 KiB
JavaScript

export default Ember.Component.extend({
classNames: ['invite-list'],
users: null,
inviteEmail: '',
inviteRole: '',
invalid: false,
init() {
this._super();
this.set('users', []);
this.set('roles', [
{id: 'moderator', label: I18n.t('wizard.invites.roles.moderator') },
{id: 'regular', label: I18n.t('wizard.invites.roles.regular') },
]);
this.updateField();
},
keyPress(e) {
if (e.keyCode === 13) {
e.preventDefault();
e.stopPropagation();
this.send('addUser');
}
},
updateField() {
const users = this.get('users');
this.set('field.value', JSON.stringify(users));
const staffCount = this.get('step.fieldsById.staff_count.value') || 1;
const showWarning = (staffCount < 3 && users.length === 0);
this.set('field.warning', showWarning ? 'invites.none_added' : null);
},
actions: {
addUser() {
const user = {
email: this.get('inviteEmail') || '',
role: this.get('inviteRole')
};
if (!/(.+)@(.+){2,}\.(.+){2,}/.test(user.email)) {
return this.set('invalid', true);
}
const users = this.get('users');
if (users.findBy('email', user.email)) {
return this.set('invalid', true);
}
this.set('invalid', false);
users.pushObject(user);
this.updateField();
this.set('inviteEmail', '');
Ember.run.scheduleOnce('afterRender', () => this.$('.invite-email').focus());
},
removeUser(user) {
this.get('users').removeObject(user);
this.updateField();
}
}
});