mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-24 20:20:16 +08:00
Bumps the lint group with 4 updates in the / directory: [@discourse/lint-configs](https://github.com/discourse/lint-configs), [ember-template-lint](https://github.com/ember-template-lint/ember-template-lint), [eslint](https://github.com/eslint/eslint) and [stylelint](https://github.com/stylelint/stylelint). Updates `@discourse/lint-configs` from 2.22.0 to 2.28.0 - [Commits](https://github.com/discourse/lint-configs/commits) Updates `ember-template-lint` from 7.7.0 to 7.9.1 - [Release notes](https://github.com/ember-template-lint/ember-template-lint/releases) - [Changelog](https://github.com/ember-template-lint/ember-template-lint/blob/master/CHANGELOG.md) - [Commits](https://github.com/ember-template-lint/ember-template-lint/commits) Updates `eslint` from 9.27.0 to 9.32.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.27.0...v9.32.0) Updates `stylelint` from 16.19.1 to 16.22.0 - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/16.19.1...16.22.0) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Discourse CI <ci@ci.invalid> Co-authored-by: Jarek Radosz <jarek@cvx.dev>
107 lines
3.2 KiB
Text
Vendored
107 lines
3.2 KiB
Text
Vendored
import Component from "@glimmer/component";
|
|
import { tracked } from "@glimmer/tracking";
|
|
import { Input } from "@ember/component";
|
|
import { fn, get, hash } from "@ember/helper";
|
|
import { on } from "@ember/modifier";
|
|
import { action } from "@ember/object";
|
|
import { htmlSafe } from "@ember/template";
|
|
import { not } from "truth-helpers";
|
|
import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
|
|
import avatar from "discourse/helpers/avatar";
|
|
import formatDuration from "discourse/helpers/format-duration";
|
|
import number from "discourse/helpers/number";
|
|
import { ajax } from "discourse/lib/ajax";
|
|
import { i18n } from "discourse-i18n";
|
|
|
|
export default class AdminPenaltySimilarUsers extends Component {
|
|
@tracked isLoading;
|
|
@tracked similarUsers = [];
|
|
selectedUserIds = [];
|
|
|
|
constructor() {
|
|
super(...arguments);
|
|
|
|
this.loadSimilarUsers();
|
|
}
|
|
|
|
get penaltyField() {
|
|
const penaltyType = this.args.penaltyType;
|
|
if (penaltyType === "suspend") {
|
|
return "can_be_suspended";
|
|
} else if (penaltyType === "silence") {
|
|
return "can_be_silenced";
|
|
}
|
|
}
|
|
|
|
async loadSimilarUsers() {
|
|
this.isLoading = true;
|
|
try {
|
|
const data = await ajax(
|
|
`/admin/users/${this.args.user.id}/similar-users.json`
|
|
);
|
|
this.similarUsers = data.users;
|
|
} finally {
|
|
this.isLoading = false;
|
|
}
|
|
}
|
|
|
|
@action
|
|
selectUserId(userId, event) {
|
|
if (event.target.checked) {
|
|
this.selectedUserIds.push(userId);
|
|
} else {
|
|
this.selectedUserIds = this.selectedUserIds.filter((id) => id !== userId);
|
|
}
|
|
|
|
this.args.onUsersChanged(this.selectedUserIds);
|
|
}
|
|
|
|
<template>
|
|
<div class="penalty-similar-users">
|
|
<p class="alert alert-warning">
|
|
{{htmlSafe
|
|
(i18n
|
|
"admin.user.other_matches"
|
|
(hash count=@user.similar_users_count username=@user.username)
|
|
)
|
|
}}
|
|
</p>
|
|
|
|
<ConditionalLoadingSpinner @condition={{this.isLoading}}>
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th></th>
|
|
<th>{{i18n "username"}}</th>
|
|
<th>{{i18n "last_seen"}}</th>
|
|
<th>{{i18n "admin.user.topics_entered"}}</th>
|
|
<th>{{i18n "admin.user.posts_read_count"}}</th>
|
|
<th>{{i18n "admin.user.time_read"}}</th>
|
|
<th>{{i18n "created"}}</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
{{#each this.similarUsers as |user|}}
|
|
<tr>
|
|
<td>
|
|
<Input
|
|
@type="checkbox"
|
|
disabled={{not (get user this.penaltyField)}}
|
|
{{on "click" (fn this.selectUserId user.id)}}
|
|
/>
|
|
</td>
|
|
<td>{{avatar user imageSize="small"}} {{user.username}}</td>
|
|
<td>{{formatDuration user.last_seen_age}}</td>
|
|
<td>{{number user.topics_entered}}</td>
|
|
<td>{{number user.posts_read_count}}</td>
|
|
<td>{{formatDuration user.time_read}}</td>
|
|
<td>{{formatDuration user.created_at_age}}</td>
|
|
</tr>
|
|
{{/each}}
|
|
</tbody>
|
|
</table>
|
|
</ConditionalLoadingSpinner>
|
|
</div>
|
|
</template>
|
|
}
|