feat: Buchen-Knopf auch unter der Prüfliste + Verlauf aufräumen
- Bei mehreren hundert Zeilen ist der Knopf oben längst aus dem Bild gescrollt; unter der Liste steht jetzt derselbe. - Rückgängig gemachte Importe lassen sich aus dem Verlauf entfernen. Nur diese: solange ein Import steht, ist sein Eintrag die einzige Möglichkeit, seine Buchungen wieder loszuwerden – der Server lehnt das sonst ab. Test für beide Fälle des neuen Endpunkts; 92 grün. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -196,6 +196,15 @@ export default function Import() {
|
||||
} catch (e) { toast(e.message, "error"); }
|
||||
}
|
||||
|
||||
async function entfernen(b) {
|
||||
if (!(await confirm({
|
||||
title: t("import.removeEntry"),
|
||||
message: t("import.removeEntryConfirm", { file: b.filename || "—" }),
|
||||
danger: true, confirmLabel: t("common.delete"),
|
||||
}))) return;
|
||||
try { await api.removeImportBatch(b.id); loadStamm(); } catch (e) { toast(e.message, "error"); }
|
||||
}
|
||||
|
||||
async function undo(b) {
|
||||
if (!(await confirm({ title: t("import.undo"), message: t("import.undoConfirm", { file: b.filename }), danger: true, confirmLabel: t("import.undo") }))) return;
|
||||
try { await api.undoImportBatch(b.id); loadStamm(); } catch (e) { toast(e.message, "error"); }
|
||||
@@ -325,7 +334,15 @@ export default function Import() {
|
||||
<button className="btn sm danger" onClick={() => undo(b)}>
|
||||
<Icon name="refresh-ccw" size={14} /> {t("import.undo")}
|
||||
</button>
|
||||
) : <span className="muted small">{t("import.undone")}</span>),
|
||||
) : (
|
||||
<span className="nowrap">
|
||||
<span className="muted small">{t("import.undone")}</span>
|
||||
<button className="btn sm ghost" title={t("import.removeEntry")}
|
||||
style={{ marginLeft: 6 }} onClick={() => entfernen(b)}>
|
||||
<Icon name="trash" size={14} />
|
||||
</button>
|
||||
</span>
|
||||
)),
|
||||
},
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
], [t, formatDate, accountById]);
|
||||
@@ -614,6 +631,13 @@ export default function Import() {
|
||||
rowClassName={(r) => (!r.valid ? "row-invalid" : r.is_duplicate || r.is_counterpart ? "row-dup" : "")}
|
||||
columns={reviewColumns}
|
||||
/>
|
||||
{/* Zweiter Knopf unter der Liste: bei vielen Zeilen muss man zum Buchen
|
||||
sonst wieder ganz nach oben scrollen. */}
|
||||
<div className="commit-footer">
|
||||
<button className="btn primary" onClick={commit} disabled={busy || includeCount === 0}>
|
||||
<Icon name="download" size={15} /> {t("import.commit", { n: includeCount })}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user