discourse/app/assets/javascripts/admin/controllers/admin-logs-staff-action-log...

133 lines
3.3 KiB
JavaScript

import { gt } from "@ember/object/computed";
import EmberObject from "@ember/object";
import { scheduleOnce } from "@ember/runloop";
import Controller from "@ember/controller";
import { exportEntity } from "discourse/lib/export-csv";
import { outputExportResult } from "discourse/lib/export-result";
import discourseComputed, { on } from "discourse-common/utils/decorators";
export default Controller.extend({
model: null,
filters: null,
filtersExists: gt("filterCount", 0),
userHistoryActions: null,
@discourseComputed("filters.action_name")
actionFilter(name) {
return name ? I18n.t("admin.logs.staff_actions.actions." + name) : null;
},
@on("init")
resetFilters() {
this.setProperties({
model: EmberObject.create({ loadingMore: true }),
filters: EmberObject.create()
});
this.scheduleRefresh();
},
_changeFilters(props) {
this.set("model", EmberObject.create({ loadingMore: true }));
this.filters.setProperties(props);
this.scheduleRefresh();
},
_refresh() {
let filters = this.filters;
let params = {};
let count = 0;
// Don't send null values
Object.keys(filters).forEach(k => {
let val = filters.get(k);
if (val) {
params[k] = val;
count += 1;
}
});
this.set("filterCount", count);
this.store.findAll("staff-action-log", params).then(result => {
this.set("model", result);
if (!this.userHistoryActions) {
this.set(
"userHistoryActions",
result.extras.user_history_actions
.map(action => ({
id: action.id,
action_id: action.action_id,
name: I18n.t("admin.logs.staff_actions.actions." + action.id),
name_raw: action.id
}))
.sort((a, b) => a.name.localeCompare(b.name))
);
}
});
},
scheduleRefresh() {
scheduleOnce("afterRender", this, this._refresh);
},
actions: {
filterActionIdChanged(filterActionId) {
if (filterActionId) {
this._changeFilters({
action_name: filterActionId,
action_id: this.userHistoryActions.findBy("id", filterActionId)
.action_id
});
}
},
clearFilter(key) {
let changed = {};
// Special case, clear all action related stuff
if (key === "actionFilter") {
changed.action_name = null;
changed.action_id = null;
changed.custom_type = null;
this.set("filterActionId", null);
} else {
changed[key] = null;
}
this._changeFilters(changed);
},
clearAllFilters() {
this.set("filterActionId", null);
this.resetFilters();
},
filterByAction(logItem) {
this._changeFilters({
action_name: logItem.get("action_name"),
action_id: logItem.get("action"),
custom_type: logItem.get("custom_type")
});
},
filterByStaffUser(acting_user) {
this._changeFilters({ acting_user: acting_user.username });
},
filterByTargetUser(target_user) {
this._changeFilters({ target_user: target_user.username });
},
filterBySubject(subject) {
this._changeFilters({ subject: subject });
},
exportStaffActionLogs() {
exportEntity("staff_action").then(outputExportResult);
},
loadMore() {
this.model.loadMore();
}
}
});