mirror of
https://github.com/discourse/discourse.git
synced 2024-12-21 15:43:43 +08:00
32665cf9dd
Enables our new eslint rules which enforce consistent i18n imports. For more info, see 0d58b40cd7
144 lines
3.1 KiB
JavaScript
144 lines
3.1 KiB
JavaScript
import Component from "@glimmer/component";
|
|
import { cached, tracked } from "@glimmer/tracking";
|
|
import { action } from "@ember/object";
|
|
import { schedule } from "@ember/runloop";
|
|
import { service } from "@ember/service";
|
|
import { isEmpty } from "@ember/utils";
|
|
import { tagName } from "@ember-decorators/component";
|
|
import { Promise } from "rsvp";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
import { i18n } from "discourse-i18n";
|
|
import UserField from "admin/models/user-field";
|
|
|
|
@tagName("")
|
|
export default class AdminUserFieldItem extends Component {
|
|
@service adminCustomUserFields;
|
|
@service dialog;
|
|
|
|
@tracked isEditing = false;
|
|
@tracked
|
|
editableDisabled = this.args.userField.requirement === "for_all_users";
|
|
|
|
originalRequirement = this.args.userField.requirement;
|
|
|
|
get fieldName() {
|
|
return UserField.fieldTypeById(this.fieldType)?.name;
|
|
}
|
|
|
|
get cantMoveUp() {
|
|
return this.args.userField.id === this.args.firstField?.id;
|
|
}
|
|
|
|
get cantMoveDown() {
|
|
return this.args.userField.id === this.args.lastField?.id;
|
|
}
|
|
|
|
get isNewRecord() {
|
|
return isEmpty(this.args.userField?.id);
|
|
}
|
|
|
|
get flags() {
|
|
const flags = [
|
|
"editable",
|
|
"show_on_profile",
|
|
"show_on_user_card",
|
|
"searchable",
|
|
];
|
|
|
|
return flags
|
|
.map((flag) => {
|
|
if (this.args.userField[flag]) {
|
|
return i18n(`admin.user_fields.${flag}.enabled`);
|
|
}
|
|
})
|
|
.filter(Boolean)
|
|
.join(", ");
|
|
}
|
|
|
|
@cached
|
|
get formData() {
|
|
return this.args.userField.getProperties(
|
|
"field_type",
|
|
"name",
|
|
"description",
|
|
"requirement",
|
|
"editable",
|
|
"show_on_profile",
|
|
"show_on_user_card",
|
|
"searchable",
|
|
"options",
|
|
...this.adminCustomUserFields.additionalProperties
|
|
);
|
|
}
|
|
|
|
@action
|
|
setRequirement(value, { set }) {
|
|
set("requirement", value);
|
|
|
|
if (value === "for_all_users") {
|
|
this.editableDisabled = true;
|
|
set("editable", true);
|
|
} else {
|
|
this.editableDisabled = false;
|
|
}
|
|
}
|
|
|
|
@action
|
|
async save(data) {
|
|
let confirm = true;
|
|
|
|
if (
|
|
data.requirement === "for_all_users" &&
|
|
this.originalRequirement !== "for_all_users"
|
|
) {
|
|
confirm = await this._confirmChanges();
|
|
}
|
|
|
|
if (!confirm) {
|
|
return;
|
|
}
|
|
|
|
return this.args.userField
|
|
.save(data)
|
|
.then(() => {
|
|
if (this.isDestroying || this.isDestroyed) {
|
|
return;
|
|
}
|
|
|
|
this.originalRequirement = data.requirement;
|
|
this.isEditing = false;
|
|
})
|
|
.catch(popupAjaxError);
|
|
}
|
|
|
|
async _confirmChanges() {
|
|
return new Promise((resolve) => {
|
|
this.dialog.yesNoConfirm({
|
|
message: i18n("admin.user_fields.requirement.confirmation"),
|
|
didCancel: () => resolve(false),
|
|
didConfirm: () => resolve(true),
|
|
});
|
|
});
|
|
}
|
|
|
|
@action
|
|
edit() {
|
|
this.isEditing = true;
|
|
}
|
|
|
|
@action
|
|
cancel() {
|
|
if (this.isNewRecord) {
|
|
this.args.destroyAction(this.args.userField);
|
|
} else {
|
|
this.isEditing = false;
|
|
}
|
|
}
|
|
|
|
_focusName() {
|
|
schedule("afterRender", () =>
|
|
document.querySelector(".user-field-name")?.focus()
|
|
);
|
|
}
|
|
}
|