89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
import {
|
|
default as computed,
|
|
observes
|
|
} from "ember-addons/ember-computed-decorators";
|
|
import { setting, propertyEqual } from "discourse/lib/computed";
|
|
import DiscourseURL from "discourse/lib/url";
|
|
import { userPath } from "discourse/lib/url";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
|
|
export default Ember.Controller.extend({
|
|
taken: false,
|
|
saving: false,
|
|
errorMessage: null,
|
|
newUsername: null,
|
|
|
|
maxLength: setting("max_username_length"),
|
|
minLength: setting("min_username_length"),
|
|
newUsernameEmpty: Ember.computed.empty("newUsername"),
|
|
saveDisabled: Ember.computed.or(
|
|
"saving",
|
|
"newUsernameEmpty",
|
|
"taken",
|
|
"unchanged",
|
|
"errorMessage"
|
|
),
|
|
unchanged: propertyEqual("newUsername", "username"),
|
|
|
|
@observes("newUsername")
|
|
checkTaken() {
|
|
let newUsername = this.newUsername;
|
|
|
|
if (newUsername && newUsername.length < this.minLength) {
|
|
this.set("errorMessage", I18n.t("user.name.too_short"));
|
|
} else {
|
|
this.set("taken", false);
|
|
this.set("errorMessage", null);
|
|
|
|
if (Ember.isEmpty(this.newUsername)) return;
|
|
if (this.unchanged) return;
|
|
|
|
Discourse.User.checkUsername(
|
|
newUsername,
|
|
undefined,
|
|
this.get("model.id")
|
|
).then(result => {
|
|
if (result.errors) {
|
|
this.set("errorMessage", result.errors.join(" "));
|
|
} else if (result.available === false) {
|
|
this.set("taken", true);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
@computed("saving")
|
|
saveButtonText(saving) {
|
|
if (saving) return I18n.t("saving");
|
|
return I18n.t("user.change");
|
|
},
|
|
|
|
actions: {
|
|
changeUsername() {
|
|
if (this.saveDisabled) {
|
|
return;
|
|
}
|
|
|
|
return bootbox.confirm(
|
|
I18n.t("user.change_username.confirm"),
|
|
I18n.t("no_value"),
|
|
I18n.t("yes_value"),
|
|
result => {
|
|
if (result) {
|
|
this.set("saving", true);
|
|
this.model
|
|
.changeUsername(this.newUsername)
|
|
.then(() => {
|
|
DiscourseURL.redirectTo(
|
|
userPath(this.newUsername.toLowerCase() + "/preferences")
|
|
);
|
|
})
|
|
.catch(popupAjaxError)
|
|
.finally(() => this.set("saving", false));
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
});
|