diff --git a/app/assets/javascripts/discourse-common/resolver.js.es6 b/app/assets/javascripts/discourse-common/resolver.js.es6 index 19247192086..b400d0b788a 100644 --- a/app/assets/javascripts/discourse-common/resolver.js.es6 +++ b/app/assets/javascripts/discourse-common/resolver.js.es6 @@ -134,7 +134,6 @@ export function buildResolver(baseName) { if (full.indexOf('connectors') === 0) { return Ember.TEMPLATES[`javascripts/${full}`]; } - }, resolveTemplate(parsedName) { diff --git a/app/assets/javascripts/discourse/components/activation-controls.js.es6 b/app/assets/javascripts/discourse/components/activation-controls.js.es6 new file mode 100644 index 00000000000..8cc6148ab10 --- /dev/null +++ b/app/assets/javascripts/discourse/components/activation-controls.js.es6 @@ -0,0 +1,3 @@ +export default Ember.Component.extend({ + classNames: 'activation-controls' +}); diff --git a/app/assets/javascripts/discourse/controllers/account-created-edit-email.js.es6 b/app/assets/javascripts/discourse/controllers/account-created-edit-email.js.es6 new file mode 100644 index 00000000000..c3fb5895a90 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/account-created-edit-email.js.es6 @@ -0,0 +1,27 @@ +import { changeEmail } from 'discourse/lib/user-activation'; +import computed from 'ember-addons/ember-computed-decorators'; +import { popupAjaxError } from 'discourse/lib/ajax-error'; + +export default Ember.Controller.extend({ + accountCreated: null, + newEmail: null, + + @computed('newEmail', 'accountCreated.email') + submitDisabled(newEmail, currentEmail) { + return newEmail === currentEmail; + }, + + actions: { + changeEmail() { + const email = this.get('newEmail'); + changeEmail({ email }).then(() => { + this.set('accountCreated.email', email); + this.transitionToRoute('account-created.resent'); + }).catch(popupAjaxError); + }, + + cancel() { + this.transitionToRoute('account-created.index'); + } + } +}); diff --git a/app/assets/javascripts/discourse/controllers/account-created-index.js.es6 b/app/assets/javascripts/discourse/controllers/account-created-index.js.es6 new file mode 100644 index 00000000000..ec6e49d2f72 --- /dev/null +++ b/app/assets/javascripts/discourse/controllers/account-created-index.js.es6 @@ -0,0 +1,15 @@ +import { resendActivationEmail } from 'discourse/lib/user-activation'; + +export default Ember.Controller.extend({ + actions: { + sendActivationEmail() { + resendActivationEmail(this.get('accountCreated.username')).then(() => { + this.transitionToRoute('account-created.resent'); + }); + }, + editActivationEmail() { + this.transitionToRoute('account-created.edit-email'); + } + } +}); + diff --git a/app/assets/javascripts/discourse/controllers/activation-edit.js.es6 b/app/assets/javascripts/discourse/controllers/activation-edit.js.es6 index ddd8a2a5620..b35dac9cb17 100644 --- a/app/assets/javascripts/discourse/controllers/activation-edit.js.es6 +++ b/app/assets/javascripts/discourse/controllers/activation-edit.js.es6 @@ -1,8 +1,7 @@ import computed from 'ember-addons/ember-computed-decorators'; import ModalFunctionality from 'discourse/mixins/modal-functionality'; -import { ajax } from 'discourse/lib/ajax'; import { extractError } from 'discourse/lib/ajax-error'; -import { userPath } from 'discourse/lib/url'; +import { changeEmail } from 'discourse/lib/user-activation'; export default Ember.Controller.extend(ModalFunctionality, { login: Ember.inject.controller(), @@ -20,13 +19,10 @@ export default Ember.Controller.extend(ModalFunctionality, { changeEmail() { const login = this.get('login'); - ajax(userPath('update-activation-email'), { - data: { - username: login.get('loginName'), - password: login.get('loginPassword'), - email: this.get('newEmail') - }, - type: 'PUT' + changeEmail({ + username: login.get('loginName'), + password: login.get('loginPassword'), + email: this.get('newEmail') }).then(() => { const modal = this.showModal('activation-resent', {title: 'log_in'}); modal.set('currentEmail', this.get('newEmail')); diff --git a/app/assets/javascripts/discourse/controllers/not-activated.js.es6 b/app/assets/javascripts/discourse/controllers/not-activated.js.es6 index 976e1311bd9..47dc18952c9 100644 --- a/app/assets/javascripts/discourse/controllers/not-activated.js.es6 +++ b/app/assets/javascripts/discourse/controllers/not-activated.js.es6 @@ -1,18 +1,13 @@ -import { ajax } from 'discourse/lib/ajax'; -import { popupAjaxError } from 'discourse/lib/ajax-error'; import ModalFunctionality from 'discourse/mixins/modal-functionality'; -import { userPath } from 'discourse/lib/url'; +import { resendActivationEmail } from 'discourse/lib/user-activation'; export default Ember.Controller.extend(ModalFunctionality, { actions: { sendActivationEmail() { - ajax(userPath('action/send_activation_email'), { - data: { username: this.get('username') }, - type: 'POST' - }).then(() => { + resendActivationEmail(this.get('username')).then(() => { const modal = this.showModal('activation-resent', {title: 'log_in'}); modal.set('currentEmail', this.get('currentEmail')); - }).catch(popupAjaxError); + }); }, editActivationEmail() { diff --git a/app/assets/javascripts/discourse/lib/user-activation.js.es6 b/app/assets/javascripts/discourse/lib/user-activation.js.es6 new file mode 100644 index 00000000000..402f341649a --- /dev/null +++ b/app/assets/javascripts/discourse/lib/user-activation.js.es6 @@ -0,0 +1,15 @@ +import { ajax } from 'discourse/lib/ajax'; +import { popupAjaxError } from 'discourse/lib/ajax-error'; +import { userPath } from 'discourse/lib/url'; + +export function resendActivationEmail(username) { + return ajax(userPath('action/send_activation_email'), { + type: 'POST', + data: { username } + }).catch(popupAjaxError); +} + +export function changeEmail(data) { + return ajax(userPath('update-activation-email'), { data, type: 'PUT' }); +} + diff --git a/app/assets/javascripts/discourse/routes/account-created-edit-email.js.es6 b/app/assets/javascripts/discourse/routes/account-created-edit-email.js.es6 new file mode 100644 index 00000000000..d7103a83f4c --- /dev/null +++ b/app/assets/javascripts/discourse/routes/account-created-edit-email.js.es6 @@ -0,0 +1,7 @@ +export default Ember.Route.extend({ + setupController(controller) { + const accountCreated = this.controllerFor('account-created').get('accountCreated'); + controller.set('accountCreated', accountCreated); + controller.set('newEmail', accountCreated.email); + } +}); diff --git a/app/assets/javascripts/discourse/routes/account-created-index.js.es6 b/app/assets/javascripts/discourse/routes/account-created-index.js.es6 new file mode 100644 index 00000000000..3530772474a --- /dev/null +++ b/app/assets/javascripts/discourse/routes/account-created-index.js.es6 @@ -0,0 +1,9 @@ +export default Ember.Route.extend({ + setupController(controller) { + controller.set( + 'accountCreated', + this.controllerFor('account-created').get('accountCreated') + ); + } +}); + diff --git a/app/assets/javascripts/discourse/routes/account-created-resent.js.es6 b/app/assets/javascripts/discourse/routes/account-created-resent.js.es6 new file mode 100644 index 00000000000..e5e8c666d07 --- /dev/null +++ b/app/assets/javascripts/discourse/routes/account-created-resent.js.es6 @@ -0,0 +1,8 @@ +export default Ember.Route.extend({ + setupController(controller) { + controller.set( + 'email', + this.controllerFor('account-created').get('accountCreated.email') + ); + } +}); diff --git a/app/assets/javascripts/discourse/routes/app-route-map.js.es6 b/app/assets/javascripts/discourse/routes/app-route-map.js.es6 index 1e8dceec05f..11852502028 100644 --- a/app/assets/javascripts/discourse/routes/app-route-map.js.es6 +++ b/app/assets/javascripts/discourse/routes/app-route-map.js.es6 @@ -64,7 +64,10 @@ export default function() { // User routes this.route('users', { resetNamespace: true, path: '/u' }); this.route('password-reset', { path: '/u/password-reset/:token' }); - this.route('account-created', { path: '/u/account-created' }); + this.route('account-created', { path: '/u/account-created' }, function() { + this.route('resent'); + this.route('edit-email'); + }); this.route('user', { path: '/u/:username', resetNamespace: true }, function() { this.route('summary'); this.route('userActivity', { path: '/activity', resetNamespace: true }, function() { diff --git a/app/assets/javascripts/discourse/templates/account-created.hbs b/app/assets/javascripts/discourse/templates/account-created.hbs index 45ee8169ba2..e2d9b1756a3 100644 --- a/app/assets/javascripts/discourse/templates/account-created.hbs +++ b/app/assets/javascripts/discourse/templates/account-created.hbs @@ -1,3 +1,5 @@
{{i18n "login.provide_new_email"}}
+{{input value=email class="activate-new-email"}} diff --git a/app/assets/javascripts/discourse/templates/modal/activation-edit.hbs b/app/assets/javascripts/discourse/templates/modal/activation-edit.hbs index 735f4912a7e..65fc599c240 100644 --- a/app/assets/javascripts/discourse/templates/modal/activation-edit.hbs +++ b/app/assets/javascripts/discourse/templates/modal/activation-edit.hbs @@ -1,6 +1,5 @@ {{#d-modal-body}} -{{i18n "login.provide_new_email"}}
- {{input value=newEmail class="activate-new-email"}} + {{activation-email-form email=newEmail}} {{/d-modal-body}}