Mark component props as Readonly<> across 15 component files and simplify edit-player-character field access with optional chaining and nullish coalescing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
50 lines
976 B
TypeScript
50 lines
976 B
TypeScript
import type { BulkImportState } from "../hooks/use-bulk-import.js";
|
|
import { Toast } from "./toast.js";
|
|
|
|
interface BulkImportToastsProps {
|
|
state: BulkImportState;
|
|
visible: boolean;
|
|
onReset: () => void;
|
|
}
|
|
|
|
export function BulkImportToasts({
|
|
state,
|
|
visible,
|
|
onReset,
|
|
}: Readonly<BulkImportToastsProps>) {
|
|
if (!visible) return null;
|
|
|
|
if (state.status === "loading") {
|
|
return (
|
|
<Toast
|
|
message={`Loading sources... ${state.completed + state.failed}/${state.total}`}
|
|
progress={
|
|
state.total > 0 ? (state.completed + state.failed) / state.total : 0
|
|
}
|
|
onDismiss={() => {}}
|
|
/>
|
|
);
|
|
}
|
|
|
|
if (state.status === "complete") {
|
|
return (
|
|
<Toast
|
|
message="All sources loaded"
|
|
onDismiss={onReset}
|
|
autoDismissMs={3000}
|
|
/>
|
|
);
|
|
}
|
|
|
|
if (state.status === "partial-failure") {
|
|
return (
|
|
<Toast
|
|
message={`Loaded ${state.completed}/${state.total} sources (${state.failed} failed)`}
|
|
onDismiss={onReset}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return null;
|
|
}
|