edit reported team in admin ui
This commit is contained in:
@ -117,6 +117,20 @@ export const report = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
editReport: defineAction({
|
||||||
|
input: z.object({
|
||||||
|
reportId: z.number(),
|
||||||
|
reported: z.number().nullable()
|
||||||
|
}),
|
||||||
|
handler: async (input, context) => {
|
||||||
|
Session.actionSessionFromCookies(context.cookies, Permissions.Reports);
|
||||||
|
|
||||||
|
await db.editReport({
|
||||||
|
id: input.reportId,
|
||||||
|
reportedTeamId: input.reported
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}),
|
||||||
reportStatus: defineAction({
|
reportStatus: defineAction({
|
||||||
input: z.object({
|
input: z.object({
|
||||||
reportId: z.number()
|
reportId: z.number()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { Report, ReportStatus, StrikeReasons } from './reports.ts';
|
import { editReport, type Report, type ReportStatus, type StrikeReasons } from './reports.ts';
|
||||||
import Input from '@components/input/Input.svelte';
|
import Input from '@components/input/Input.svelte';
|
||||||
import Textarea from '@components/input/Textarea.svelte';
|
import Textarea from '@components/input/Textarea.svelte';
|
||||||
import Select from '@components/input/Select.svelte';
|
import Select from '@components/input/Select.svelte';
|
||||||
@ -17,6 +17,7 @@
|
|||||||
let { strikeReasons, report }: Props = $props();
|
let { strikeReasons, report }: Props = $props();
|
||||||
|
|
||||||
// states
|
// states
|
||||||
|
let reportedTeam = $state<{ id: number; name: string } | null>(report?.reported ?? null);
|
||||||
let status = $state<'open' | 'closed' | null>(null);
|
let status = $state<'open' | 'closed' | null>(null);
|
||||||
let notice = $state<string | null>(null);
|
let notice = $state<string | null>(null);
|
||||||
let statement = $state<string | null>(null);
|
let statement = $state<string | null>(null);
|
||||||
@ -46,13 +47,18 @@
|
|||||||
$confirmPopupState = {
|
$confirmPopupState = {
|
||||||
title: 'Änderungen speichern?',
|
title: 'Änderungen speichern?',
|
||||||
message: 'Sollen die Änderungen am Report gespeichert werden?',
|
message: 'Sollen die Änderungen am Report gespeichert werden?',
|
||||||
onConfirm: async () =>
|
onConfirm: async () => {
|
||||||
editReportStatus(report!, {
|
if (reportedTeam?.id != report?.reported?.id) {
|
||||||
|
report!.reported = reportedTeam;
|
||||||
|
await editReport(report!);
|
||||||
|
}
|
||||||
|
await editReportStatus(report!, {
|
||||||
status: status,
|
status: status,
|
||||||
notice: notice,
|
notice: notice,
|
||||||
statement: statement,
|
statement: statement,
|
||||||
strikeReasonId: Number(strikeReason)
|
strikeReasonId: Number(strikeReason)
|
||||||
} as ReportStatus)
|
} as ReportStatus);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -64,7 +70,7 @@
|
|||||||
<button class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2" onclick={() => (report = null)}>✕</button>
|
<button class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2" onclick={() => (report = null)}>✕</button>
|
||||||
<div class="w-[34rem]">
|
<div class="w-[34rem]">
|
||||||
<TeamSearch value={report?.reporter.name} label="Report Team" readonly mustMatch />
|
<TeamSearch value={report?.reporter.name} label="Report Team" readonly mustMatch />
|
||||||
<TeamSearch value={report?.reported?.name} label="Reportetes Team" />
|
<TeamSearch value={report?.reported?.name} label="Reportetes Team" onSubmit={(team) => (reportedTeam = team)} />
|
||||||
<Textarea bind:value={notice} label="Interne Notizen" rows={8} />
|
<Textarea bind:value={notice} label="Interne Notizen" rows={8} />
|
||||||
</div>
|
</div>
|
||||||
<div class="divider divider-horizontal"></div>
|
<div class="divider divider-horizontal"></div>
|
||||||
|
@ -59,6 +59,17 @@ export async function getReportStatus(report: Report) {
|
|||||||
return data.reportStatus;
|
return data.reportStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function editReport(report: Report) {
|
||||||
|
const { error } = await actions.report.editReport({
|
||||||
|
reportId: report.id,
|
||||||
|
reported: report.reported?.id ?? null
|
||||||
|
});
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
actionErrorPopup(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function editReportStatus(report: Report, reportStatus: ReportStatus) {
|
export async function editReportStatus(report: Report, reportStatus: ReportStatus) {
|
||||||
const { error } = await actions.report.editReportStatus({
|
const { error } = await actions.report.editReportStatus({
|
||||||
reportId: report.id,
|
reportId: report.id,
|
||||||
|
@ -48,10 +48,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="flex items-center gap-x-2">
|
<div class="flex items-center gap-x-2">
|
||||||
<div
|
<div class="rounded-sm min-w-3 w-3 min-h-3 h-3" style="background-color: {team.color}"></div>
|
||||||
class="rounded-sm min-w-3 w-3 min-h-3 h-3"
|
|
||||||
style="background-color: {team.color}"
|
|
||||||
></div>
|
|
||||||
<h3
|
<h3
|
||||||
class="text-xs sm:text-xl break-all"
|
class="text-xs sm:text-xl break-all"
|
||||||
class:line-through={team.memberOne.dead && team.memberTwo.dead}
|
class:line-through={team.memberOne.dead && team.memberTwo.dead}
|
||||||
|
@ -107,6 +107,8 @@ import {
|
|||||||
import {
|
import {
|
||||||
addReport,
|
addReport,
|
||||||
type AddReportReq,
|
type AddReportReq,
|
||||||
|
editReport,
|
||||||
|
type EditReportReq,
|
||||||
getReportById,
|
getReportById,
|
||||||
type GetReportById,
|
type GetReportById,
|
||||||
getReportByUrlHash,
|
getReportByUrlHash,
|
||||||
@ -270,6 +272,7 @@ export class Database {
|
|||||||
|
|
||||||
/* report */
|
/* report */
|
||||||
addReport = (values: AddReportReq) => addReport(this.db, values);
|
addReport = (values: AddReportReq) => addReport(this.db, values);
|
||||||
|
editReport = (values: EditReportReq) => editReport(this.db, values);
|
||||||
submitReport = (values: SubmitReportReq) => submitReport(this.db, values);
|
submitReport = (values: SubmitReportReq) => submitReport(this.db, values);
|
||||||
getReports = (values: GetReportsReq) => getReports(this.db, values);
|
getReports = (values: GetReportsReq) => getReports(this.db, values);
|
||||||
getReportById = (values: GetReportById) => getReportById(this.db, values);
|
getReportById = (values: GetReportById) => getReportById(this.db, values);
|
||||||
|
@ -28,6 +28,11 @@ export type AddReportReq = {
|
|||||||
reportedTeamId?: number | null;
|
reportedTeamId?: number | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type EditReportReq = {
|
||||||
|
id: number;
|
||||||
|
reportedTeamId: number | null;
|
||||||
|
};
|
||||||
|
|
||||||
export type SubmitReportReq = {
|
export type SubmitReportReq = {
|
||||||
urlHash: string;
|
urlHash: string;
|
||||||
reason: string;
|
reason: string;
|
||||||
@ -65,6 +70,12 @@ export async function addReport(db: Database, values: AddReportReq) {
|
|||||||
return Object.assign(r[0], { url: `${BASE_PATH}/report/${urlHash}` });
|
return Object.assign(r[0], { url: `${BASE_PATH}/report/${urlHash}` });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function editReport(db: Database, values: EditReportReq) {
|
||||||
|
return db.update(report).set({
|
||||||
|
reportedTeamId: values.reportedTeamId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export async function submitReport(db: Database, values: SubmitReportReq) {
|
export async function submitReport(db: Database, values: SubmitReportReq) {
|
||||||
return db
|
return db
|
||||||
.update(report)
|
.update(report)
|
||||||
|
@ -23,7 +23,7 @@ export async function sendWebhook<T extends WebhookAction>(action: T, data: Webh
|
|||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'x-webhook-action': action
|
'x-webhook-action': action
|
||||||
},
|
},
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data)
|
||||||
});
|
});
|
||||||
|
|
||||||
if (response.status === 200) return;
|
if (response.status === 200) return;
|
||||||
|
Reference in New Issue
Block a user