discourse/app/assets/javascripts/admin/addon/controllers/admin-site-settings.js
Ted Johansson 1d7c1eca27
DEV: Move SiteSettingFilter to admin namespace (#32458)
100% lift-and-shift of SiteSettingFilter into the admin JS namespace, where it is exclusively used.
2025-04-25 14:13:49 +08:00

80 lines
2.1 KiB
JavaScript
Vendored

import Controller from "@ember/controller";
import { action } from "@ember/object";
import { alias } from "@ember/object/computed";
import { service } from "@ember/service";
import { isEmpty } from "@ember/utils";
import { debounce } from "discourse/lib/decorators";
import { INPUT_DELAY } from "discourse/lib/environment";
import SiteSettingFilter from "admin/lib/site-setting-filter";
export default class AdminSiteSettingsController extends Controller {
@service router;
@alias("model") allSiteSettings;
filter = "";
visibleSiteSettings = null;
siteSettingFilter = null;
filterContentNow(filterData, category) {
this.siteSettingFilter ??= new SiteSettingFilter(this.allSiteSettings);
if (isEmpty(this.allSiteSettings)) {
return;
}
this.set("filter", filterData.filter);
if (isEmpty(filterData.filter) && !filterData.onlyOverridden) {
this.set("visibleSiteSettings", this.allSiteSettings);
if (this.categoryNameKey === "all_results") {
this.router.transitionTo("adminSiteSettings");
}
return;
}
const matchesGroupedByCategory = this.siteSettingFilter.filterSettings(
filterData.filter,
{ onlyOverridden: filterData.onlyOverridden }
);
const categoryMatches = matchesGroupedByCategory.findBy(
"nameKey",
category
);
if (!categoryMatches || categoryMatches.count === 0) {
category = "all_results";
}
this.set("visibleSiteSettings", matchesGroupedByCategory);
this.router.transitionTo(
"adminSiteSettingsCategory",
category || "all_results"
);
}
@debounce(INPUT_DELAY)
filterContent(filterData) {
if (this._skipBounce) {
this.set("_skipBounce", false);
} else {
if (!this.isDestroyed) {
this.filterContentNow(filterData, this.categoryNameKey);
}
}
}
@action
filterChanged(filterData) {
this.filterContent(filterData);
}
@action
toggleMenu() {
const adminDetail = document.querySelector(".admin-detail");
["mobile-closed", "mobile-open"].forEach((state) => {
adminDetail.classList.toggle(state);
});
}
}