feat: Die Notiz laesst sich direkt in der Liste schreiben
Bisher musste man dafuer die ganze Buchung aufmachen. Jetzt steht in der Notiz-Spalte ein Feld: hineinschreiben, Enter oder wegklicken - fertig. Escape nimmt die Aenderung zurueck, leeren loescht die Notiz. Und sie steht nicht mehr doppelt da. Die dritte Zeile unter der Buchung zeigte dieselbe Notiz wie die neue Spalte; sie faellt weg, der Verwendungszweck darueber bleibt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2ba307f833
commit
637f5f4a70
@@ -0,0 +1,39 @@
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
// Kleines, editierbares Textfeld. Speichert beim Verlassen und bei Enter, aber
|
||||
// nur wenn sich etwas geändert hat – wie EditableAmount daneben, nur ohne die
|
||||
// Betragsrechnerei. Escape nimmt die Änderung zurück.
|
||||
export default function EditableText({ value, onSave, placeholder, maxLength }) {
|
||||
const [val, setVal] = useState(value || "");
|
||||
// Von aussen neu geladen (etwa nach dem Speichern): Stand übernehmen.
|
||||
useEffect(() => { setVal(value || ""); }, [value]);
|
||||
|
||||
function commit() {
|
||||
const neu = val.trim();
|
||||
if (neu !== (value || "")) onSave(neu);
|
||||
}
|
||||
|
||||
return (
|
||||
<input
|
||||
type="text"
|
||||
value={val}
|
||||
placeholder={placeholder}
|
||||
maxLength={maxLength}
|
||||
// Der ganze Text als Tooltip: Die Spalte ist schmal, die Notiz darf lang sein.
|
||||
title={val || undefined}
|
||||
onChange={(e) => setVal(e.target.value)}
|
||||
onBlur={commit}
|
||||
onKeyDown={(e) => {
|
||||
if (e.key === "Enter") {
|
||||
e.preventDefault();
|
||||
commit();
|
||||
e.target.blur();
|
||||
}
|
||||
if (e.key === "Escape") {
|
||||
setVal(value || "");
|
||||
e.target.blur();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user