DEV: Convert core controllers to native class syntax (batch 2) (#28179)

Changes made using the ember-native-class-codemod, plus some manual tweaks
This commit is contained in:
David Taylor 2024-08-01 12:03:17 +01:00 committed by GitHub
parent 608e5682e2
commit fc02b4904d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 218 additions and 217 deletions

View File

@ -1,43 +1,45 @@
import Controller, { inject as controller } from "@ember/controller"; import Controller, { inject as controller } from "@ember/controller";
import { action } from "@ember/object";
import { fmt } from "discourse/lib/computed"; import { fmt } from "discourse/lib/computed";
export default Controller.extend({ export default class GroupActivityPostsController extends Controller {
group: controller(), @controller group;
groupActivity: controller(), @controller groupActivity;
application: controller(), @controller application;
canLoadMore: true,
loading: false,
emptyText: fmt("type", "groups.empty.%@"),
actions: { @fmt("type", "groups.empty.%@") emptyText;
loadMore() {
if (!this.canLoadMore) {
return;
}
if (this.loading) {
return;
}
this.set("loading", true);
const posts = this.model;
if (posts && posts.length) {
const before = posts[posts.length - 1].get("created_at");
const group = this.get("group.model");
let categoryId = this.get("groupActivity.category_id"); canLoadMore = true;
const opts = { before, type: this.type, categoryId }; loading = false;
group @action
.findPosts(opts) loadMore() {
.then((newPosts) => { if (!this.canLoadMore) {
posts.addObjects(newPosts); return;
if (newPosts.length === 0) { }
this.set("canLoadMore", false); if (this.loading) {
} return;
}) }
.finally(() => { this.set("loading", true);
this.set("loading", false); const posts = this.model;
}); if (posts && posts.length) {
} const before = posts[posts.length - 1].get("created_at");
}, const group = this.get("group.model");
},
}); let categoryId = this.get("groupActivity.category_id");
const opts = { before, type: this.type, categoryId };
group
.findPosts(opts)
.then((newPosts) => {
posts.addObjects(newPosts);
if (newPosts.length === 0) {
this.set("canLoadMore", false);
}
})
.finally(() => {
this.set("loading", false);
});
}
}
}

View File

@ -1,8 +1,9 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
export default Controller.extend({ import { action } from "@ember/object";
actions: {
loadMore() { export default class GroupActivityTopicsController extends Controller {
this.model.loadMore(); @action
}, loadMore() {
}, this.model.loadMore();
}); }
}

View File

@ -1,6 +1,8 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { service } from "@ember/service"; import { service } from "@ember/service";
export default Controller.extend({
router: service(), export default class GroupActivityController extends Controller {
queryParams: ["category_id"], @service router;
});
queryParams = ["category_id"];
}

View File

@ -1,45 +1,42 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { gt } from "@ember/object/computed"; import { gt } from "@ember/object/computed";
import { observes } from "@ember-decorators/object";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import discourseComputed, { import discourseComputed, { debounce } from "discourse-common/utils/decorators";
debounce,
observes,
} from "discourse-common/utils/decorators";
export default Controller.extend({ export default class GroupIndexController extends Controller {
queryParams: ["order", "asc", "filter"], queryParams = ["order", "asc", "filter"];
order = null;
asc = true;
filter = null;
filterInput = null;
loading = false;
isBulk = false;
showActions = false;
bulkSelection = null;
order: null, @gt("model.members.length", 0) hasMembers;
asc: true,
filter: null,
filterInput: null,
loading: false,
isBulk: false,
showActions: false,
bulkSelection: null,
get canLoadMore() { get canLoadMore() {
return this.get("model.members")?.length < this.get("model.user_count"); return this.get("model.members")?.length < this.get("model.user_count");
}, }
@observes("filterInput") @observes("filterInput")
filterInputChanged() { filterInputChanged() {
this._setFilter(); this._setFilter();
}, }
@debounce(500) @debounce(500)
_setFilter() { _setFilter() {
this.set("filter", this.filterInput); this.set("filter", this.filterInput);
}, }
@observes("order", "asc", "filter") @observes("order", "asc", "filter")
_filtersChanged() { _filtersChanged() {
this.reloadMembers(true); this.reloadMembers(true);
}, }
reloadMembers(refresh) { reloadMembers(refresh) {
if (this.loading || !this.model) { if (this.loading || !this.model) {
@ -58,19 +55,17 @@ export default Controller.extend({
this.set("bulkSelection", []); this.set("bulkSelection", []);
} }
}); });
}, }
@discourseComputed("order", "asc", "filter") @discourseComputed("order", "asc", "filter")
memberParams(order, asc, filter) { memberParams(order, asc, filter) {
return { order, asc, filter }; return { order, asc, filter };
}, }
hasMembers: gt("model.members.length", 0),
@discourseComputed("model") @discourseComputed("model")
canManageGroup(model) { canManageGroup(model) {
return this.currentUser && this.currentUser.canManageGroup(model); return this.currentUser && this.currentUser.canManageGroup(model);
}, }
@discourseComputed @discourseComputed
filterPlaceholder() { filterPlaceholder() {
@ -79,7 +74,7 @@ export default Controller.extend({
} else { } else {
return "groups.members.filter_placeholder"; return "groups.members.filter_placeholder";
} }
}, }
@discourseComputed("filter", "members", "model.can_see_members") @discourseComputed("filter", "members", "model.can_see_members")
emptyMessageKey(filter, members, canSeeMembers) { emptyMessageKey(filter, members, canSeeMembers) {
@ -90,17 +85,17 @@ export default Controller.extend({
} else { } else {
return "groups.empty.members"; return "groups.empty.members";
} }
}, }
@action @action
loadMore() { loadMore() {
this.reloadMembers(); this.reloadMembers();
}, }
@action @action
toggleActions() { toggleActions() {
this.toggleProperty("showActions"); this.toggleProperty("showActions");
}, }
@action @action
actOnGroup(member, actionId) { actOnGroup(member, actionId) {
@ -123,7 +118,7 @@ export default Controller.extend({
member.setPrimaryGroup(null).then(() => member.set("primary", false)); member.setPrimaryGroup(null).then(() => member.set("primary", false));
break; break;
} }
}, }
@action @action
actOnSelection(selection, actionId) { actOnSelection(selection, actionId) {
@ -177,22 +172,22 @@ export default Controller.extend({
this.set("isBulk", false); this.set("isBulk", false);
}); });
} }
}, }
@action @action
removeMember(user) { removeMember(user) {
this.model.removeMember(user, this.memberParams); this.model.removeMember(user, this.memberParams);
}, }
@action @action
makeOwner(username) { makeOwner(username) {
this.model.addOwners(username); this.model.addOwners(username);
}, }
@action @action
removeOwner(user) { removeOwner(user) {
this.model.removeOwner(user); this.model.removeOwner(user);
}, }
@action @action
addMembers() { addMembers() {
@ -202,7 +197,7 @@ export default Controller.extend({
.then(() => this.set("usernames", [])) .then(() => this.set("usernames", []))
.catch(popupAjaxError); .catch(popupAjaxError);
} }
}, }
@action @action
toggleBulkSelect() { toggleBulkSelect() {
@ -210,7 +205,7 @@ export default Controller.extend({
isBulk: !this.isBulk, isBulk: !this.isBulk,
bulkSelection: [], bulkSelection: [],
}); });
}, }
@action @action
bulkSelectAll() { bulkSelectAll() {
@ -221,7 +216,7 @@ export default Controller.extend({
checkbox.click(); checkbox.click();
} }
}); });
}, }
@action @action
bulkClearAll() { bulkClearAll() {
@ -232,7 +227,7 @@ export default Controller.extend({
checkbox.click(); checkbox.click();
} }
}); });
}, }
@action @action
selectMember(member, e) { selectMember(member, e) {
@ -243,5 +238,5 @@ export default Controller.extend({
} else { } else {
this.bulkSelection.removeObject(member); this.bulkSelection.removeObject(member);
} }
}, }
}); }

View File

@ -1,7 +1,7 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
export default Controller.extend({ export default class GroupManageCategoriesController extends Controller {
@discourseComputed( @discourseComputed(
"model.watchingCategories.[]", "model.watchingCategories.[]",
"model.watchingFirstPostCategories.[]", "model.watchingFirstPostCategories.[]",
@ -13,5 +13,5 @@ export default Controller.extend({
return [] return []
.concat(watching, watchingFirst, tracking, regular, muted) .concat(watching, watchingFirst, tracking, regular, muted)
.filter(Boolean); .filter(Boolean);
}, }
}); }

View File

@ -1,17 +1,15 @@
import Controller, { inject as controller } from "@ember/controller"; import Controller, { inject as controller } from "@ember/controller";
import EmberObject, { action } from "@ember/object"; import EmberObject, { action } from "@ember/object";
import discourseComputed, { observes } from "discourse-common/utils/decorators"; import { observes } from "@ember-decorators/object";
import discourseComputed from "discourse-common/utils/decorators";
export default Controller.extend({ export default class GroupManageLogsController extends Controller {
group: controller(), @controller group;
application: controller(), @controller application;
loading: false,
offset: 0,
init() { loading = false;
this._super(...arguments); offset = 0;
this.set("filters", EmberObject.create()); filters = EmberObject.create();
},
@discourseComputed( @discourseComputed(
"filters.action", "filters.action",
@ -21,7 +19,7 @@ export default Controller.extend({
) )
filterParams(filtersAction, acting_user, target_user, subject) { filterParams(filtersAction, acting_user, target_user, subject) {
return { action: filtersAction, acting_user, target_user, subject }; return { action: filtersAction, acting_user, target_user, subject };
}, }
@observes( @observes(
"filters.action", "filters.action",
@ -40,14 +38,14 @@ export default Controller.extend({
all_loaded: results.all_loaded, all_loaded: results.all_loaded,
}); });
}); });
}, }
reset() { reset() {
this.setProperties({ this.setProperties({
offset: 0, offset: 0,
filters: EmberObject.create(), filters: EmberObject.create(),
}); });
}, }
@action @action
loadMore() { loadMore() {
@ -67,10 +65,10 @@ export default Controller.extend({
this.set("model.all_loaded", results.all_loaded); this.set("model.all_loaded", results.all_loaded);
}) })
.finally(() => this.set("loading", false)); .finally(() => this.set("loading", false));
}, }
@action @action
clearFilter(key) { clearFilter(key) {
this.set(`filters.${key}`, ""); this.set(`filters.${key}`, "");
}, }
}); }

View File

@ -1,4 +1,5 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
export default Controller.extend({
saving: null, export default class GroupManageProfileController extends Controller {
}); saving = null;
}

View File

@ -1,7 +1,7 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
export default Controller.extend({ export default class GroupManageTagsController extends Controller {
@discourseComputed( @discourseComputed(
"model.watching_tags.[]", "model.watching_tags.[]",
"model.watching_first_post_tags.[]", "model.watching_first_post_tags.[]",
@ -13,5 +13,5 @@ export default Controller.extend({
return [] return []
.concat(watching, watchingFirst, tracking, regular, muted) .concat(watching, watchingFirst, tracking, regular, muted)
.filter((t) => t); .filter((t) => t);
}, }
}); }

View File

@ -1,7 +1,7 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
export default Controller.extend({ export default class GroupManageController extends Controller {
@discourseComputed("model.automatic") @discourseComputed("model.automatic")
tabs(automatic) { tabs(automatic) {
const defaultTabs = [ const defaultTabs = [
@ -43,5 +43,5 @@ export default Controller.extend({
} }
return defaultTabs; return defaultTabs;
}, }
}); }

View File

@ -1,2 +1,3 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
export default Controller.extend({});
export default class GroupMessagesController extends Controller {}

View File

@ -1,3 +1,3 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
export default Controller.extend(); export default class GroupPermissionsController extends Controller {}

View File

@ -1,41 +1,38 @@
import Controller, { inject as controller } from "@ember/controller"; import Controller, { inject as controller } from "@ember/controller";
import { action } from "@ember/object";
import { observes } from "@ember-decorators/object";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error"; import { popupAjaxError } from "discourse/lib/ajax-error";
import discourseComputed, { import discourseComputed, { debounce } from "discourse-common/utils/decorators";
debounce,
observes,
} from "discourse-common/utils/decorators";
export default Controller.extend({ export default class GroupRequestsController extends Controller {
application: controller(), @controller application;
queryParams: ["order", "asc", "filter"], queryParams = ["order", "asc", "filter"];
order = "";
order: "", asc = null;
asc: null, filter = null;
filter: null, filterInput = null;
filterInput: null, loading = false;
loading: false,
get canLoadMore() { get canLoadMore() {
return this.get("model.requesters")?.length < this.get("model.user_count"); return this.get("model.requesters")?.length < this.get("model.user_count");
}, }
@observes("filterInput") @observes("filterInput")
filterInputChanged() { filterInputChanged() {
this._setFilter(); this._setFilter();
}, }
@debounce(500) @debounce(500)
_setFilter() { _setFilter() {
this.set("filter", this.filterInput); this.set("filter", this.filterInput);
}, }
@observes("order", "asc", "filter") @observes("order", "asc", "filter")
_filtersChanged() { _filtersChanged() {
this.findRequesters(true); this.findRequesters(true);
}, }
findRequesters(refresh) { findRequesters(refresh) {
if (this.loading) { if (this.loading) {
@ -55,17 +52,17 @@ export default Controller.extend({
model.findRequesters(this.memberParams, refresh).finally(() => { model.findRequesters(this.memberParams, refresh).finally(() => {
this.set("loading", false); this.set("loading", false);
}); });
}, }
@discourseComputed("order", "asc", "filter") @discourseComputed("order", "asc", "filter")
memberParams(order, asc, filter) { memberParams(order, asc, filter) {
return { order, asc, filter }; return { order, asc, filter };
}, }
@discourseComputed("model.requesters.[]") @discourseComputed("model.requesters.[]")
hasRequesters(requesters) { hasRequesters(requesters) {
return requesters && requesters.length > 0; return requesters && requesters.length > 0;
}, }
@discourseComputed @discourseComputed
filterPlaceholder() { filterPlaceholder() {
@ -74,43 +71,45 @@ export default Controller.extend({
} else { } else {
return "groups.members.filter_placeholder"; return "groups.members.filter_placeholder";
} }
}, }
handleRequest(data) { handleRequest(data) {
ajax(`/groups/${this.get("model.id")}/handle_membership_request.json`, { ajax(`/groups/${this.get("model.id")}/handle_membership_request.json`, {
data, data,
type: "PUT", type: "PUT",
}).catch(popupAjaxError); }).catch(popupAjaxError);
}, }
actions: { @action
loadMore() { loadMore() {
this.findRequesters(); this.findRequesters();
}, }
acceptRequest(user) { @action
this.handleRequest({ user_id: user.get("id"), accept: true }); acceptRequest(user) {
user.setProperties({ this.handleRequest({ user_id: user.get("id"), accept: true });
request_accepted: true, user.setProperties({
request_denied: false, request_accepted: true,
}); request_denied: false,
}, });
}
undoAcceptRequest(user) { @action
ajax("/groups/" + this.get("model.id") + "/members.json", { undoAcceptRequest(user) {
type: "DELETE", ajax("/groups/" + this.get("model.id") + "/members.json", {
data: { user_id: user.get("id") }, type: "DELETE",
}).then(() => { data: { user_id: user.get("id") },
user.set("request_undone", true); }).then(() => {
}); user.set("request_undone", true);
}, });
}
denyRequest(user) { @action
this.handleRequest({ user_id: user.get("id") }); denyRequest(user) {
user.setProperties({ this.handleRequest({ user_id: user.get("id") });
request_accepted: false, user.setProperties({
request_denied: true, request_accepted: false,
}); request_denied: true,
}, });
}, }
}); }

View File

@ -5,28 +5,28 @@ import GroupDeleteDialog from "discourse/components/dialog-messages/group-delete
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import I18n from "discourse-i18n"; import I18n from "discourse-i18n";
const Tab = EmberObject.extend({ class Tab extends EmberObject {
init() { init() {
this._super(...arguments); super.init(...arguments);
this.setProperties({ this.setProperties({
route: this.route || `group.${this.name}`, route: this.route || `group.${this.name}`,
message: I18n.t(`groups.${this.i18nKey || this.name}`), message: I18n.t(`groups.${this.i18nKey || this.name}`),
}); });
}, }
}); }
export default Controller.extend({ export default class GroupController extends Controller {
application: controller(), @service dialog;
dialog: service(), @service currentUser;
currentUser: service(), @service router;
router: service(), @service composer;
composer: service(), @controller application;
counts: null, counts = null;
showing: "members", showing = "members";
destroying: null, destroying = null;
showTooltip: false, showTooltip = false;
@discourseComputed( @discourseComputed(
"showMessages", "showMessages",
@ -90,7 +90,7 @@ export default Controller.extend({
); );
return defaultTabs; return defaultTabs;
}, }
@discourseComputed( @discourseComputed(
"model.has_messages", "model.has_messages",
@ -107,12 +107,12 @@ export default Controller.extend({
} }
return isGroupUser || (this.currentUser && this.currentUser.admin); return isGroupUser || (this.currentUser && this.currentUser.admin);
}, }
@discourseComputed("model.messageable") @discourseComputed("model.messageable")
displayGroupMessageButton(messageable) { displayGroupMessageButton(messageable) {
return this.currentUser && messageable; return this.currentUser && messageable;
}, }
@discourseComputed("model", "model.automatic") @discourseComputed("model", "model.automatic")
canManageGroup(model, automatic) { canManageGroup(model, automatic) {
@ -121,7 +121,7 @@ export default Controller.extend({
(this.currentUser.canManageGroup(model) || (this.currentUser.canManageGroup(model) ||
(model.can_admin_group && automatic)) (model.can_admin_group && automatic))
); );
}, }
@action @action
messageGroup() { messageGroup() {
@ -129,7 +129,7 @@ export default Controller.extend({
recipients: this.get("model.name"), recipients: this.get("model.name"),
hasGroups: true, hasGroups: true,
}); });
}, }
@action @action
destroyGroup() { destroyGroup() {
@ -158,10 +158,10 @@ export default Controller.extend({
}, },
didCancel: () => this.set("destroying", false), didCancel: () => this.set("destroying", false),
}); });
}, }
@action @action
toggleDeleteTooltip() { toggleDeleteTooltip() {
this.toggleProperty("showTooltip"); this.toggleProperty("showTooltip");
}, }
}); }

View File

@ -6,15 +6,16 @@ import discourseDebounce from "discourse-common/lib/debounce";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import I18n from "discourse-i18n"; import I18n from "discourse-i18n";
export default Controller.extend({ export default class GroupsIndexController extends Controller {
router: service(), @service router;
queryParams: ["order", "asc", "filter", "type"],
order: null, queryParams = ["order", "asc", "filter", "type"];
asc: null, order = null;
filter: "", asc = null;
type: null, filter = "";
groups: null, type = null;
isLoading: false, groups = null;
isLoading = false;
@discourseComputed("groups.extras.type_filters") @discourseComputed("groups.extras.type_filters")
types(typeFilters) { types(typeFilters) {
@ -27,7 +28,7 @@ export default Controller.extend({
} }
return types; return types;
}, }
loadGroups(params) { loadGroups(params) {
this.set("isLoading", true); this.set("isLoading", true);
@ -38,24 +39,24 @@ export default Controller.extend({
this.set("groups", groups); this.set("groups", groups);
}) })
.finally(() => this.set("isLoading", false)); .finally(() => this.set("isLoading", false));
}, }
@action @action
onFilterChanged(filter) { onFilterChanged(filter) {
discourseDebounce(this, this._debouncedFilter, filter, INPUT_DELAY); discourseDebounce(this, this._debouncedFilter, filter, INPUT_DELAY);
}, }
@action @action
loadMore() { loadMore() {
this.groups && this.groups.loadMore(); this.groups && this.groups.loadMore();
}, }
@action @action
new() { new() {
this.router.transitionTo("groups.new"); this.router.transitionTo("groups.new");
}, }
_debouncedFilter(filter) { _debouncedFilter(filter) {
this.set("filter", filter); this.set("filter", filter);
}, }
}); }

View File

@ -35,20 +35,21 @@ export function popupAutomaticMembershipAlert(group_id, email_domains) {
}); });
} }
export default Controller.extend({ export default class GroupsNewController extends Controller {
dialog: service(), @service dialog;
router: service(), @service router;
saving: null,
saving = null;
@discourseComputed("model.ownerUsernames") @discourseComputed("model.ownerUsernames")
splitOwnerUsernames(owners) { splitOwnerUsernames(owners) {
return owners && owners.length ? owners.split(",") : []; return owners && owners.length ? owners.split(",") : [];
}, }
@discourseComputed("model.usernames") @discourseComputed("model.usernames")
splitUsernames(usernames) { splitUsernames(usernames) {
return usernames && usernames.length ? usernames.split(",") : []; return usernames && usernames.length ? usernames.split(",") : [];
}, }
@action @action
save() { save() {
@ -67,15 +68,15 @@ export default Controller.extend({
}) })
.catch(popupAjaxError) .catch(popupAjaxError)
.finally(() => this.set("saving", false)); .finally(() => this.set("saving", false));
}, }
@action @action
updateOwnerUsernames(selected) { updateOwnerUsernames(selected) {
this.set("model.ownerUsernames", selected.join(",")); this.set("model.ownerUsernames", selected.join(","));
}, }
@action @action
updateUsernames(selected) { updateUsernames(selected) {
this.set("model.usernames", selected.join(",")); this.set("model.usernames", selected.join(","));
}, }
}); }