This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/controllers/badges/show.js.es6
Jarek Radosz fe588cc7f8
DEV: Fix function prototype deprecations (#8681)
* DEV: Fix the function prototype observers deprecation

DEPRECATION: Function prototype extensions have been deprecated, please migrate from function(){}.observes('foo') to observer('foo', function() {}). [deprecation id: function-prototype-extensions.observes] See https://deprecations.emberjs.com/v3.x/#toc_function-prototype-extensions-observes for more details.

* DEV: Fix the function prototype event listeners deprecation

DEPRECATION: Function prototype extensions have been deprecated, please migrate from function(){}.on('foo') to on('foo', function() {}). [deprecation id: function-prototype-extensions.on] See https://deprecations.emberjs.com/v3.x/#toc_function-prototype-extensions-on for more details.

* DEV: Simplify `default as` imports

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2020-01-16 18:56:53 +01:00

99 lines
2.6 KiB
JavaScript

import { inject } from "@ember/controller";
import EmberObject from "@ember/object";
import Controller from "@ember/controller";
import Badge from "discourse/models/badge";
import UserBadge from "discourse/models/user-badge";
import discourseComputed, { observes } from "discourse-common/utils/decorators";
export default Controller.extend({
queryParams: ["username"],
noMoreBadges: false,
userBadges: null,
application: inject(),
hiddenSetTitle: true,
@discourseComputed("userBadgesAll")
filteredList(userBadgesAll) {
return userBadgesAll.filterBy("badge.allow_title", true);
},
@discourseComputed("filteredList")
selectableUserBadges(filteredList) {
return [
EmberObject.create({
badge: Badge.create({ name: I18n.t("badges.none") })
}),
...filteredList.uniqBy("badge.name")
];
},
@discourseComputed("username")
user(username) {
if (username) {
return this.userBadges[0].get("user");
}
},
@discourseComputed("username", "model.grant_count", "userBadges.grant_count")
grantCount(username, modelCount, userCount) {
return username ? userCount : modelCount;
},
@discourseComputed("model.grant_count", "userBadges.grant_count")
othersCount(modelCount, userCount) {
return modelCount - userCount;
},
@discourseComputed("model.allow_title", "model.has_badge", "model")
canSelectTitle(hasTitleBadges, hasBadge) {
return this.siteSettings.enable_badges && hasTitleBadges && hasBadge;
},
actions: {
loadMore() {
if (this.loadingMore) {
return;
}
this.set("loadingMore", true);
const userBadges = this.userBadges;
UserBadge.findByBadgeId(this.get("model.id"), {
offset: userBadges.length,
username: this.username
})
.then(result => {
userBadges.pushObjects(result);
if (userBadges.length === 0) {
this.set("noMoreBadges", true);
}
})
.finally(() => {
this.set("loadingMore", false);
});
},
toggleSetUserTitle() {
return this.toggleProperty("hiddenSetTitle");
}
},
@discourseComputed("noMoreBadges", "grantCount", "userBadges.length")
canLoadMore(noMoreBadges, grantCount, userBadgeLength) {
if (noMoreBadges) {
return false;
}
return grantCount > (userBadgeLength || 0);
},
@discourseComputed("user", "model.grant_count")
canShowOthers(user, grantCount) {
return !!user && grantCount > 1;
},
@observes("canLoadMore")
_showFooter() {
this.set("application.showFooter", !this.canLoadMore);
}
});