v1 review pass: fixed some minor bugs

This commit is contained in:
khannurien
2026-03-16 11:08:39 +00:00
parent e88fed4e98
commit 867e64cb5b
37 changed files with 1228 additions and 400 deletions

View File

@@ -3,9 +3,11 @@ import { Link, useNavigate, useParams } from "react-router";
import { API_URL } from "../config/api.ts";
import type { Dump, UpdateDumpRequest } from "../model.ts";
import { deserializeDump } from "../model.ts";
import { useRequiredAuth } from "../hooks/useAuth.ts";
import { formatBytes } from "../utils/format.ts";
import { PageShell } from "../components/PageShell.tsx";
import { PageError } from "../components/PageError.tsx";
import RichContentCard from "../components/RichContentCard.tsx";
import FilePreview from "../components/FilePreview.tsx";
@@ -31,13 +33,15 @@ export function DumpEdit() {
(async () => {
try {
const res = await fetch(`${API_URL}/api/dumps/${selectedDump}`, { cache: "no-store" });
const res = await fetch(`${API_URL}/api/dumps/${selectedDump}`, {
cache: "no-store",
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const apiResponse = await res.json();
if (apiResponse.success) {
const dump: Dump = apiResponse.data;
const dump: Dump = deserializeDump(apiResponse.data);
setUrl(dump.url ?? "");
setComment(dump.comment ?? "");
setState({ status: "loaded", dump });
@@ -83,11 +87,14 @@ export function DumpEdit() {
const apiResponse = await res.json();
if (!apiResponse.success) {
setState({ status: "error", error: apiResponse.error?.message ?? "Update failed" });
setState({
status: "error",
error: apiResponse.error?.message ?? "Update failed",
});
return;
}
const updatedDump: Dump = apiResponse.data;
const updatedDump: Dump = deserializeDump(apiResponse.data);
setState({ status: "loaded", dump: updatedDump });
setNewFile(null);
navigate(`/dumps/${updatedDump.id}`, { state: { dump: updatedDump } });
@@ -109,19 +116,36 @@ export function DumpEdit() {
};
if (state.status === "loading") {
return <PageShell><p className="page-loading">Loading dump</p></PageShell>;
return (
<PageShell>
<p className="page-loading">Loading dump</p>
</PageShell>
);
}
if (state.status === "error") {
return (
<PageShell>
<div className="page-error">
<h2>Error</h2>
<p>{state.error}</p>
<button type="button" onClick={() => globalThis.location.reload()}>Retry</button>
<Link to="/"> Back to all dumps</Link>
</div>
</PageShell>
<PageError
message={state.error}
actions={
<>
<button
className="logout-btn"
type="button"
onClick={() => globalThis.location.reload()}
>
Retry
</button>
<button
className="logout-btn"
type="button"
onClick={() => navigate("/")}
>
Back to all dumps
</button>
</>
}
/>
);
}
@@ -141,7 +165,12 @@ export function DumpEdit() {
: dump.richContent
? <RichContentCard richContent={dump.richContent} />
: dump.url && (
<a href={dump.url} target="_blank" rel="noopener noreferrer" className="dump-url-link">
<a
href={dump.url}
target="_blank"
rel="noopener noreferrer"
className="dump-url-link"
>
{dump.url}
</a>
)}
@@ -149,7 +178,10 @@ export function DumpEdit() {
<form
className="dump-form"
onSubmit={(e) => { e.preventDefault(); handleSave(); }}
onSubmit={(e) => {
e.preventDefault();
handleSave();
}}
>
{dump.kind === "url"
? (
@@ -178,7 +210,9 @@ export function DumpEdit() {
onChange={(e) => setNewFile(e.target.files?.[0] ?? null)}
/>
{newFile && (
<p className="file-input-info">{newFile.name} {formatBytes(newFile.size)}</p>
<p className="file-input-info">
{newFile.name} {formatBytes(newFile.size)}
</p>
)}
</div>
)}
@@ -199,7 +233,9 @@ export function DumpEdit() {
Delete dump
</button>
<div className="form-actions-right">
<Link to={`/dumps/${dump.id}`} className="form-cancel">Cancel</Link>
<Link to={`/dumps/${dump.id}`} className="form-cancel">
Cancel
</Link>
<button type="submit" className="btn-primary">Save</button>
</div>
</div>