2018-08-30 15:23:15 -04:00
|
|
|
import { COMPONENTS, THEMES } from "admin/models/theme";
|
2021-07-18 21:33:58 -04:00
|
|
|
import { equal, gt, gte } from "@ember/object/computed";
|
2019-10-23 12:30:52 -04:00
|
|
|
import Component from "@ember/component";
|
2019-11-07 16:38:28 -05:00
|
|
|
import discourseComputed from "discourse-common/utils/decorators";
|
2020-08-13 15:42:03 -04:00
|
|
|
import { inject as service } from "@ember/service";
|
2021-07-18 21:33:58 -04:00
|
|
|
import { action } from "@ember/object";
|
2018-08-30 15:23:15 -04:00
|
|
|
|
2019-10-23 12:30:52 -04:00
|
|
|
export default Component.extend({
|
2020-08-13 15:42:03 -04:00
|
|
|
router: service(),
|
|
|
|
THEMES,
|
|
|
|
COMPONENTS,
|
2018-08-30 15:23:15 -04:00
|
|
|
|
2018-08-23 21:30:00 -04:00
|
|
|
classNames: ["themes-list"],
|
2021-07-18 21:33:58 -04:00
|
|
|
filterTerm: null,
|
2018-08-30 15:23:15 -04:00
|
|
|
|
2019-10-30 16:28:29 -04:00
|
|
|
hasThemes: gt("themesList.length", 0),
|
|
|
|
hasActiveThemes: gt("activeThemes.length", 0),
|
|
|
|
hasInactiveThemes: gt("inactiveThemes.length", 0),
|
2021-07-18 21:33:58 -04:00
|
|
|
showFilter: gte("themesList.length", 10),
|
2018-08-30 15:23:15 -04:00
|
|
|
|
2019-10-30 16:28:29 -04:00
|
|
|
themesTabActive: equal("currentTab", THEMES),
|
|
|
|
componentsTabActive: equal("currentTab", COMPONENTS),
|
2018-08-30 15:23:15 -04:00
|
|
|
|
2019-11-07 16:38:28 -05:00
|
|
|
@discourseComputed("themes", "components", "currentTab")
|
2018-08-30 15:23:15 -04:00
|
|
|
themesList(themes, components) {
|
2019-05-27 04:15:39 -04:00
|
|
|
if (this.themesTabActive) {
|
2018-08-30 15:23:15 -04:00
|
|
|
return themes;
|
|
|
|
} else {
|
|
|
|
return components;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2019-11-07 16:38:28 -05:00
|
|
|
@discourseComputed(
|
2018-08-30 15:23:15 -04:00
|
|
|
"themesList",
|
|
|
|
"currentTab",
|
|
|
|
"themesList.@each.user_selectable",
|
2021-07-18 21:33:58 -04:00
|
|
|
"themesList.@each.default",
|
|
|
|
"filterTerm"
|
2018-08-30 15:23:15 -04:00
|
|
|
)
|
|
|
|
inactiveThemes(themes) {
|
2021-07-18 21:33:58 -04:00
|
|
|
let results;
|
2019-05-27 04:15:39 -04:00
|
|
|
if (this.componentsTabActive) {
|
2021-07-18 21:33:58 -04:00
|
|
|
results = themes.filter(
|
|
|
|
(theme) => theme.get("parent_themes.length") <= 0
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
results = themes.filter(
|
|
|
|
(theme) => !theme.get("user_selectable") && !theme.get("default")
|
|
|
|
);
|
2018-08-30 15:23:15 -04:00
|
|
|
}
|
2021-07-18 21:33:58 -04:00
|
|
|
return this._filterThemes(results, this.filterTerm);
|
2018-08-30 15:23:15 -04:00
|
|
|
},
|
|
|
|
|
2019-11-07 16:38:28 -05:00
|
|
|
@discourseComputed(
|
2018-08-30 15:23:15 -04:00
|
|
|
"themesList",
|
|
|
|
"currentTab",
|
|
|
|
"themesList.@each.user_selectable",
|
2021-07-18 21:33:58 -04:00
|
|
|
"themesList.@each.default",
|
|
|
|
"filterTerm"
|
2018-08-30 15:23:15 -04:00
|
|
|
)
|
2019-01-23 04:20:13 -05:00
|
|
|
activeThemes(themes) {
|
2021-07-18 21:33:58 -04:00
|
|
|
let results;
|
2019-05-27 04:15:39 -04:00
|
|
|
if (this.componentsTabActive) {
|
2021-07-18 21:33:58 -04:00
|
|
|
results = themes.filter((theme) => theme.get("parent_themes.length") > 0);
|
2019-01-23 04:20:13 -05:00
|
|
|
} else {
|
2021-07-18 21:33:58 -04:00
|
|
|
results = themes
|
2020-09-01 13:24:41 -04:00
|
|
|
.filter((theme) => theme.get("user_selectable") || theme.get("default"))
|
|
|
|
.sort((a, b) => {
|
|
|
|
if (a.get("default") && !b.get("default")) {
|
|
|
|
return -1;
|
|
|
|
} else if (b.get("default")) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return a
|
|
|
|
.get("name")
|
|
|
|
.toLowerCase()
|
|
|
|
.localeCompare(b.get("name").toLowerCase());
|
|
|
|
});
|
2018-08-30 15:23:15 -04:00
|
|
|
}
|
2021-07-18 21:33:58 -04:00
|
|
|
return this._filterThemes(results, this.filterTerm);
|
|
|
|
},
|
|
|
|
|
|
|
|
_filterThemes(themes, term) {
|
|
|
|
term = term?.trim()?.toLowerCase();
|
|
|
|
if (!term) {
|
|
|
|
return themes;
|
|
|
|
}
|
|
|
|
return themes.filter(({ name }) => name.toLowerCase().includes(term));
|
2018-08-30 15:23:15 -04:00
|
|
|
},
|
|
|
|
|
2021-07-18 21:33:58 -04:00
|
|
|
@action
|
|
|
|
changeView(newTab) {
|
|
|
|
if (newTab !== this.currentTab) {
|
|
|
|
this.set("currentTab", newTab);
|
|
|
|
if (!this.showFilter) {
|
|
|
|
this.set("filterTerm", null);
|
2018-08-30 15:23:15 -04:00
|
|
|
}
|
2021-07-18 21:33:58 -04:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
@action
|
|
|
|
navigateToTheme(theme) {
|
|
|
|
this.router.transitionTo("adminCustomizeThemes.show", theme);
|
2018-08-30 15:23:15 -04:00
|
|
|
},
|
2018-08-23 21:30:00 -04:00
|
|
|
});
|