83 lines
1.9 KiB
JavaScript
83 lines
1.9 KiB
JavaScript
import { propertyEqual } from "discourse/lib/computed";
|
|
import InputValidation from "discourse/models/input-validation";
|
|
import { emailValid } from "discourse/lib/utilities";
|
|
import computed from "ember-addons/ember-computed-decorators";
|
|
|
|
export default Ember.Controller.extend({
|
|
taken: false,
|
|
saving: false,
|
|
error: false,
|
|
success: false,
|
|
newEmail: null,
|
|
|
|
newEmailEmpty: Ember.computed.empty("newEmail"),
|
|
|
|
saveDisabled: Ember.computed.or(
|
|
"saving",
|
|
"newEmailEmpty",
|
|
"taken",
|
|
"unchanged",
|
|
"invalidEmail"
|
|
),
|
|
|
|
unchanged: propertyEqual("newEmailLower", "currentUser.email"),
|
|
|
|
@computed("newEmail")
|
|
newEmailLower(newEmail) {
|
|
return newEmail.toLowerCase().trim();
|
|
},
|
|
|
|
@computed("saving")
|
|
saveButtonText(saving) {
|
|
if (saving) return I18n.t("saving");
|
|
return I18n.t("user.change");
|
|
},
|
|
|
|
@computed("newEmail")
|
|
invalidEmail(newEmail) {
|
|
return !emailValid(newEmail);
|
|
},
|
|
|
|
@computed("invalidEmail")
|
|
emailValidation(invalidEmail) {
|
|
if (invalidEmail) {
|
|
return InputValidation.create({
|
|
failed: true,
|
|
reason: I18n.t("user.email.invalid")
|
|
});
|
|
}
|
|
},
|
|
|
|
reset() {
|
|
this.setProperties({
|
|
taken: false,
|
|
saving: false,
|
|
error: false,
|
|
success: false,
|
|
newEmail: null
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
changeEmail() {
|
|
this.set("saving", true);
|
|
|
|
return this.model.changeEmail(this.newEmail).then(
|
|
() => this.set("success", true),
|
|
e => {
|
|
this.setProperties({ error: true, saving: false });
|
|
if (
|
|
e.jqXHR.responseJSON &&
|
|
e.jqXHR.responseJSON.errors &&
|
|
e.jqXHR.responseJSON.errors[0]
|
|
) {
|
|
this.set("errorMessage", e.jqXHR.responseJSON.errors[0]);
|
|
} else {
|
|
this.set("errorMessage", I18n.t("user.change_email.error"));
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
});
|