discourse/app/assets/javascripts/admin/addon/routes/admin-badges.js
Joffrey JAFFEUX b4f8ea6ade
FIX: correctly pass updateGroupings to the modal (#28683)
A previous refactor has moved this function in the controller instead of the route making it inaccessible to the modal.

This commit is fixing this and also adding a spec.
2024-09-02 17:32:18 +02:00

62 lines
1.7 KiB
JavaScript

import { action } from "@ember/object";
import { service } from "@ember/service";
import { ajax } from "discourse/lib/ajax";
import Badge from "discourse/models/badge";
import BadgeGrouping from "discourse/models/badge-grouping";
import DiscourseRoute from "discourse/routes/discourse";
import I18n from "discourse-i18n";
import EditBadgeGroupingsModal from "../components/modal/edit-badge-groupings";
export default class AdminBadgesRoute extends DiscourseRoute {
@service modal;
_json = null;
async model() {
let json = await ajax("/admin/badges.json");
this._json = json;
return Badge.createFromJson(json);
}
@action
editGroupings() {
const model = this.controllerFor("admin-badges").badgeGroupings;
this.modal.show(EditBadgeGroupingsModal, {
model: {
badgeGroupings: model,
updateGroupings: this.updateGroupings,
},
});
}
@action
updateGroupings(groupings) {
this.controllerFor("admin-badges").set("badgeGroupings", groupings);
}
setupController(controller, model) {
const json = this._json;
const badgeTriggers = [];
const badgeGroupings = [];
Object.keys(json.admin_badges.triggers).forEach((k) => {
const id = json.admin_badges.triggers[k];
badgeTriggers.push({
id,
name: I18n.t("admin.badges.trigger_type." + k),
});
});
json.badge_groupings.forEach(function (badgeGroupingJson) {
badgeGroupings.push(BadgeGrouping.create(badgeGroupingJson));
});
controller.badgeGroupings = badgeGroupings;
controller.badgeTypes = json.badge_types;
controller.protectedSystemFields =
json.admin_badges.protected_system_fields;
controller.badgeTriggers = badgeTriggers;
controller.model = model;
}
}