update report submitted window (#42)
All checks were successful
delpoy / build-and-deploy (push) Successful in 49s
All checks were successful
delpoy / build-and-deploy (push) Successful in 49s
This commit is contained in:
parent
a0cc11860f
commit
e7bba22784
@ -1,18 +1,27 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { createEventDispatcher } from 'svelte';
|
let {
|
||||||
|
id,
|
||||||
export let id: string | null = null;
|
name,
|
||||||
export let name: string | null = null;
|
value = $bindable(),
|
||||||
export let value: string | null = null;
|
label,
|
||||||
export let label: string | null = null;
|
notice,
|
||||||
export let notice: string | null = null;
|
required,
|
||||||
export let required = false;
|
disabled,
|
||||||
export let disabled = false;
|
readonly,
|
||||||
export let readonly = false;
|
size = 'md',
|
||||||
export let size: 'xs' | 'sm' | 'md' | 'lg' = 'md';
|
rows = 2
|
||||||
export let rows = 2;
|
}: {
|
||||||
|
id?: string;
|
||||||
const dispatch = createEventDispatcher();
|
name?: string;
|
||||||
|
value?: string;
|
||||||
|
label?: string;
|
||||||
|
notice?: string;
|
||||||
|
required?: boolean;
|
||||||
|
disabled?: boolean;
|
||||||
|
readonly?: boolean;
|
||||||
|
size?: 'xs' | 'sm' | 'md' | 'lg';
|
||||||
|
rows?: number;
|
||||||
|
} = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@ -27,12 +36,11 @@
|
|||||||
</label>
|
</label>
|
||||||
{/if}
|
{/if}
|
||||||
<textarea
|
<textarea
|
||||||
class="textarea w-full"
|
class="textarea textarea-bordered w-full"
|
||||||
class:textarea-xs={size === 'xs'}
|
class:textarea-xs={size === 'xs'}
|
||||||
class:textarea-sm={size === 'sm'}
|
class:textarea-sm={size === 'sm'}
|
||||||
class:textarea-md={size === 'md'}
|
class:textarea-md={size === 'md'}
|
||||||
class:textarea-lg={size === 'lg'}
|
class:textarea-lg={size === 'lg'}
|
||||||
class:textarea-bordered={!readonly}
|
|
||||||
{id}
|
{id}
|
||||||
{name}
|
{name}
|
||||||
{required}
|
{required}
|
||||||
@ -40,7 +48,6 @@
|
|||||||
{readonly}
|
{readonly}
|
||||||
{rows}
|
{rows}
|
||||||
bind:value
|
bind:value
|
||||||
on:click={(e) => dispatch('click', e)}
|
|
||||||
></textarea>
|
></textarea>
|
||||||
{#if notice}
|
{#if notice}
|
||||||
<label class="label" for={id}>
|
<label class="label" for={id}>
|
||||||
|
@ -146,7 +146,7 @@
|
|||||||
goto(`${window.location.href.split('#')[0]}#${report.url_hash}`, {
|
goto(`${window.location.href.split('#')[0]}#${report.url_hash}`, {
|
||||||
replaceState: true
|
replaceState: true
|
||||||
});
|
});
|
||||||
activeReport = report;
|
activeReport = $state.snapshot(report);
|
||||||
activeReport.originalStatus = report.status;
|
activeReport.originalStatus = report.status;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -344,7 +344,13 @@
|
|||||||
} else {
|
} else {
|
||||||
activeReport.reported = undefined;
|
activeReport.reported = undefined;
|
||||||
}
|
}
|
||||||
reports = [...reports];
|
const activeReportIndex = reports.findIndex((r) => r.id === activeReport.id);
|
||||||
|
if (activeReportIndex === -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reports[activeReportIndex] = activeReport;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
activeReport.originalStatus !== 'reviewed' &&
|
activeReport.originalStatus !== 'reviewed' &&
|
||||||
activeReport.status === 'reviewed'
|
activeReport.status === 'reviewed'
|
||||||
@ -373,7 +379,7 @@
|
|||||||
onSubmit={(e) => {
|
onSubmit={(e) => {
|
||||||
if (!e.draft) $reportCount += 1;
|
if (!e.draft) $reportCount += 1;
|
||||||
reports = [e, ...reports];
|
reports = [e, ...reports];
|
||||||
activeReport = reports[0];
|
activeReport = $state.snapshot(reports[0]);
|
||||||
newReportModal.close();
|
newReportModal.close();
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
@ -18,6 +18,8 @@ export const load: PageServerLoad = async ({ params }) => {
|
|||||||
draft: report.draft,
|
draft: report.draft,
|
||||||
status: report.status,
|
status: report.status,
|
||||||
reason: report.subject,
|
reason: report.subject,
|
||||||
|
body: report.body,
|
||||||
|
statement: report.statement,
|
||||||
reporter: {
|
reporter: {
|
||||||
name: report.reporter.username
|
name: report.reporter.username
|
||||||
},
|
},
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import ReportDraft from './ReportDraft.svelte';
|
import ReportDraft from './ReportDraft.svelte';
|
||||||
import ReportCompleted from './ReportCompleted.svelte';
|
|
||||||
import ReportSubmitted from './ReportSubmitted.svelte';
|
import ReportSubmitted from './ReportSubmitted.svelte';
|
||||||
|
|
||||||
let { data } = $props();
|
let { data } = $props();
|
||||||
@ -26,11 +25,16 @@
|
|||||||
onsubmit={() => (completed = true)}
|
onsubmit={() => (completed = true)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{:else if data.status === 'reviewed'}
|
|
||||||
<ReportCompleted />
|
|
||||||
{:else}
|
{:else}
|
||||||
<div class="col-[1] row-[1]" transition:fly={{ x: 200, duration: 300 }}>
|
<div class="col-[1] row-[1]" transition:fly={{ x: 200, duration: 300 }}>
|
||||||
<ReportSubmitted />
|
<ReportSubmitted
|
||||||
|
reporterName={data.reporter.name}
|
||||||
|
reportedName={data.reported.name ?? undefined}
|
||||||
|
status={data.status}
|
||||||
|
reason={data.reason}
|
||||||
|
body={data.body}
|
||||||
|
statement={data.statement}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
<div>
|
|
||||||
<h2 class="text-xl text-center">Dieser Report wurde von einem Admin bearbeitet</h2>
|
|
||||||
</div>
|
|
@ -1,6 +1,58 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import Input from '$lib/components/Input/Input.svelte';
|
||||||
|
import Textarea from '$lib/components/Input/Textarea.svelte';
|
||||||
|
|
||||||
|
let {
|
||||||
|
reporterName,
|
||||||
|
reportedName,
|
||||||
|
status,
|
||||||
|
reason,
|
||||||
|
body,
|
||||||
|
statement
|
||||||
|
}: {
|
||||||
|
reporterName: string;
|
||||||
|
reportedName?: string;
|
||||||
|
status: 'none' | 'review' | 'reviewed';
|
||||||
|
reason: string;
|
||||||
|
body: string;
|
||||||
|
statement?: string;
|
||||||
|
} = $props();
|
||||||
|
</script>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-2xl text-center">Report abgeschickt</h2>
|
<h2 class="text-3xl text-center">
|
||||||
<p class="mt-4">
|
Report von <span class="underline">{reporterName}</span> gegen
|
||||||
Dein Report wurde abgeschickt und wird so schnell wie möglich von einem Admin bearbeitet.
|
<span class="underline">{reportedName ?? 'unbekannt'}</span>
|
||||||
</p>
|
</h2>
|
||||||
|
<h4 class="text-xl text-center mt-1 mb-0">
|
||||||
|
{#if status === 'none'}
|
||||||
|
<span>Unbearbeitet</span>
|
||||||
|
{:else if status === 'review'}
|
||||||
|
<span>In Bearbeitung</span>
|
||||||
|
{:else if status === 'reviewed'}
|
||||||
|
<span>Bearbeitet</span>
|
||||||
|
{/if}
|
||||||
|
<span class="relative inline-flex h-3 w-3 ml-[1px]">
|
||||||
|
{#if status === 'review'}
|
||||||
|
<span
|
||||||
|
class="animate-ping absolute inline-flex h-full w-full rounded-full bg-yellow-500 opacity-75"
|
||||||
|
></span>
|
||||||
|
{/if}
|
||||||
|
<span
|
||||||
|
class="relative inline-flex rounded-full h-3 w-3"
|
||||||
|
class:bg-yellow-500={status === 'none' || status === 'review'}
|
||||||
|
class:bg-green-500={status === 'reviewed'}
|
||||||
|
></span>
|
||||||
|
</span>
|
||||||
|
</h4>
|
||||||
|
<div class="my-4">
|
||||||
|
<Input type="text" size="sm" value={reason} readonly={true} pickyWidth={false}>
|
||||||
|
{#snippet label()}
|
||||||
|
<span>Report Grund</span>
|
||||||
|
{/snippet}
|
||||||
|
</Input>
|
||||||
|
<Textarea readonly={true} rows={4} value={body} label="Report Details" />
|
||||||
|
</div>
|
||||||
|
<div class="divider divider-vertical mb-1"></div>
|
||||||
|
<Textarea readonly={true} rows={4} label="Admin Kommentar" value={statement} />
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user