mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Convert discovery-sortable and tag-show to native class syntax (#23123)
This commit is contained in:
parent
e3c6d3c1cb
commit
712bbf9b88
@ -23,17 +23,6 @@ export const queryParams = {
|
||||
exclude_tag: { replace: true, refreshModel: true },
|
||||
};
|
||||
|
||||
// Basic controller options
|
||||
const controllerOpts = {
|
||||
discoveryTopics: controller("discovery/topics"),
|
||||
queryParams: Object.keys(queryParams),
|
||||
};
|
||||
|
||||
// Default to `undefined`
|
||||
controllerOpts.queryParams.forEach((p) => {
|
||||
controllerOpts[p] = queryParams[p].default;
|
||||
});
|
||||
|
||||
export function changeSort(sortBy) {
|
||||
let model = this.controllerFor("discovery.topics").model;
|
||||
|
||||
@ -47,21 +36,26 @@ export function changeSort(sortBy) {
|
||||
}
|
||||
|
||||
export function resetParams(skipParams = []) {
|
||||
controllerOpts.queryParams.forEach((p) => {
|
||||
Object.keys(queryParams).forEach((p) => {
|
||||
if (!skipParams.includes(p)) {
|
||||
this.controller.set(p, queryParams[p].default);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const SortableController = Controller.extend(controllerOpts);
|
||||
|
||||
export const addDiscoveryQueryParam = function (p, opts) {
|
||||
export function addDiscoveryQueryParam(p, opts) {
|
||||
queryParams[p] = opts;
|
||||
const cOpts = {};
|
||||
cOpts[p] = null;
|
||||
cOpts["queryParams"] = Object.keys(queryParams);
|
||||
SortableController.reopen(cOpts);
|
||||
};
|
||||
}
|
||||
|
||||
export default SortableController;
|
||||
export default class DiscoverySortableController extends Controller {
|
||||
@controller("discovery/topics") discoveryTopics;
|
||||
|
||||
queryParams = Object.keys(queryParams);
|
||||
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.queryParams.forEach((p) => {
|
||||
this[p] = queryParams[p].default;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
import { inject as service } from "@ember/service";
|
||||
import { readOnly } from "@ember/object/computed";
|
||||
import DiscoverySortableController from "discourse/controllers/discovery-sortable";
|
||||
import discourseComputed from "discourse-common/utils/decorators";
|
||||
import BulkTopicSelection from "discourse/mixins/bulk-topic-selection";
|
||||
@ -5,37 +7,37 @@ import DismissTopics from "discourse/mixins/dismiss-topics";
|
||||
import I18n from "I18n";
|
||||
import NavItem from "discourse/models/nav-item";
|
||||
import Topic from "discourse/models/topic";
|
||||
import { readOnly } from "@ember/object/computed";
|
||||
import { endWith } from "discourse/lib/computed";
|
||||
import { action } from "@ember/object";
|
||||
import { inject as service } from "@ember/service";
|
||||
import { calculateFilterMode } from "discourse/lib/filter-mode";
|
||||
import { dependentKeyCompat } from "@ember/object/compat";
|
||||
import { tracked } from "@glimmer/tracking";
|
||||
|
||||
export default DiscoverySortableController.extend(
|
||||
export default class TagShowController extends DiscoverySortableController.extend(
|
||||
BulkTopicSelection,
|
||||
DismissTopics,
|
||||
DismissTopics
|
||||
) {
|
||||
@service dialog;
|
||||
@service router;
|
||||
@service currentUser;
|
||||
@service siteSettings;
|
||||
|
||||
{
|
||||
dialog: service(),
|
||||
router: service(),
|
||||
currentUser: service(),
|
||||
siteSettings: service(),
|
||||
@tracked category;
|
||||
@tracked filterType;
|
||||
@tracked noSubcategories;
|
||||
|
||||
tag: null,
|
||||
additionalTags: null,
|
||||
list: null,
|
||||
canAdminTag: readOnly("currentUser.staff"),
|
||||
navMode: "latest",
|
||||
loading: false,
|
||||
canCreateTopic: false,
|
||||
showInfo: false,
|
||||
top: endWith("list.filter", "top"),
|
||||
tag = null;
|
||||
additionalTags = null;
|
||||
list = null;
|
||||
|
||||
category: tracked(),
|
||||
filterType: tracked(),
|
||||
noSubcategories: tracked(),
|
||||
@readOnly("currentUser.staff") canAdminTag;
|
||||
|
||||
navMode = "latest";
|
||||
loading = false;
|
||||
canCreateTopic = false;
|
||||
showInfo = false;
|
||||
|
||||
@endWith("list.filter", "top") top;
|
||||
|
||||
@dependentKeyCompat
|
||||
get filterMode() {
|
||||
@ -44,7 +46,7 @@ export default DiscoverySortableController.extend(
|
||||
filterType: this.filterType,
|
||||
noSubcategories: this.noSubcategories,
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
@discourseComputed(
|
||||
"canCreateTopic",
|
||||
@ -65,7 +67,7 @@ export default DiscoverySortableController.extend(
|
||||
(category && !canCreateTopicOnCategory) ||
|
||||
(tag && !canCreateTopicOnTag)
|
||||
);
|
||||
},
|
||||
}
|
||||
|
||||
@discourseComputed("category", "tag.id", "filterType", "noSubcategories")
|
||||
navItems(category, tagId, filterType, noSubcategories) {
|
||||
@ -75,7 +77,7 @@ export default DiscoverySortableController.extend(
|
||||
noSubcategories,
|
||||
siteSettings: this.siteSettings,
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
@discourseComputed("navMode", "list.topics.length", "loading")
|
||||
footerMessage(navMode, listTopicsLength, loading) {
|
||||
@ -92,17 +94,17 @@ export default DiscoverySortableController.extend(
|
||||
tag: this.tag?.id,
|
||||
});
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
@discourseComputed("list.filter", "list.topics.length")
|
||||
showDismissRead(filter, topicsLength) {
|
||||
return this._isFilterPage(filter, "unread") && topicsLength > 0;
|
||||
},
|
||||
}
|
||||
|
||||
@discourseComputed("list.filter", "list.topics.length")
|
||||
showResetNew(filter, topicsLength) {
|
||||
return this._isFilterPage(filter, "new") && topicsLength > 0;
|
||||
},
|
||||
}
|
||||
|
||||
callResetNew(dismissPosts = false, dismissTopics = false, untrack = false) {
|
||||
const filterTracked =
|
||||
@ -126,7 +128,7 @@ export default DiscoverySortableController.extend(
|
||||
filterTracked ? { skipResettingParams: ["filter", "f"] } : {}
|
||||
);
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
showInserted(event) {
|
||||
@ -135,7 +137,7 @@ export default DiscoverySortableController.extend(
|
||||
this.list.loadBefore(tracker.newIncoming, true);
|
||||
tracker.resetTracking();
|
||||
return false;
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
changeSort(order) {
|
||||
@ -144,17 +146,17 @@ export default DiscoverySortableController.extend(
|
||||
} else {
|
||||
this.setProperties({ order, ascending: false });
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
changePeriod(p) {
|
||||
this.set("period", p);
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
toggleInfo() {
|
||||
this.toggleProperty("showInfo");
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
refresh() {
|
||||
@ -166,7 +168,7 @@ export default DiscoverySortableController.extend(
|
||||
this.set("list", list);
|
||||
this.resetSelected();
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
deleteTag(tagInfo) {
|
||||
@ -195,7 +197,7 @@ export default DiscoverySortableController.extend(
|
||||
.catch(() => this.dialog.alert(I18n.t("generic_error")));
|
||||
},
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
@action
|
||||
changeTagNotificationLevel(notificationLevel) {
|
||||
@ -214,6 +216,5 @@ export default DiscoverySortableController.extend(
|
||||
regular_tags: payload.regular_tags,
|
||||
});
|
||||
});
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user