feat: 'Speichern & übersetzen' im Edit-Formular
Neuer Button im EditPairForm: speichert das Pair und öffnet direkt das
Übersetzen-&-Prüfen-Modal (handleSave({translateAfter}) → onSavedAndTranslate
→ handleTranslate). Bestehender Speichern-Button unverändert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -465,7 +465,7 @@ function PairForm({ objectId, allObjects, onPairSaved }) {
|
||||
|
||||
// ─── EditPairForm ─────────────────────────────────────────────────────────────
|
||||
|
||||
function EditPairForm({ pair, allObjects, onSaved, onCancel, onDeleted }) {
|
||||
function EditPairForm({ pair, allObjects, onSaved, onCancel, onDeleted, onSavedAndTranslate }) {
|
||||
const lang = getUserLang();
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [saving, setSaving] = useState(false);
|
||||
@@ -592,7 +592,7 @@ function EditPairForm({ pair, allObjects, onSaved, onCancel, onDeleted }) {
|
||||
finally { setCreatingWord(false); }
|
||||
}
|
||||
|
||||
async function handleSave() {
|
||||
async function handleSave({ translateAfter = false } = {}) {
|
||||
setSaving(true);
|
||||
try {
|
||||
const ph = t => withPlaceholders(t, wordMap, objectAssignments);
|
||||
@@ -646,7 +646,8 @@ function EditPairForm({ pair, allObjects, onSaved, onCancel, onDeleted }) {
|
||||
if (pair.answer_type !== type) patchPair.answer_type = type;
|
||||
if (pair.status !== pairStatus) patchPair.status = pairStatus;
|
||||
if (Object.keys(patchPair).length) await apiPatch('/pairs', pair.id, patchPair);
|
||||
onSaved();
|
||||
if (translateAfter && onSavedAndTranslate) onSavedAndTranslate({ ...pair, answer_type: type });
|
||||
else onSaved();
|
||||
} catch (e) { alert('Fehler: ' + e.message); }
|
||||
finally { setSaving(false); }
|
||||
}
|
||||
@@ -837,10 +838,17 @@ function EditPairForm({ pair, allObjects, onSaved, onCancel, onDeleted }) {
|
||||
<div className="pt-2 border-t border-amber-100 space-y-1.5">
|
||||
<div className="flex gap-2">
|
||||
<button onClick={onCancel} className="flex-1 py-1.5 text-xs font-medium rounded-lg border border-slate-300 text-slate-600 hover:bg-slate-50 transition-colors">Abbrechen</button>
|
||||
<button onClick={handleSave} disabled={saving} className="flex-1 py-1.5 text-xs font-medium rounded-lg bg-amber-500 hover:bg-amber-600 disabled:opacity-40 text-white transition-colors">
|
||||
<button onClick={() => handleSave()} disabled={saving} className="flex-1 py-1.5 text-xs font-medium rounded-lg bg-amber-500 hover:bg-amber-600 disabled:opacity-40 text-white transition-colors">
|
||||
{saving ? 'Speichern…' : '✓ Speichern'}
|
||||
</button>
|
||||
</div>
|
||||
{onSavedAndTranslate && (
|
||||
<button onClick={() => handleSave({ translateAfter: true })} disabled={saving}
|
||||
className="w-full py-1.5 text-xs font-medium rounded-lg bg-emerald-600 hover:bg-emerald-500 disabled:opacity-40 text-white transition-colors"
|
||||
title="Pair speichern und direkt das Übersetzen-&-Prüfen-Modal öffnen">
|
||||
{saving ? 'Speichern…' : '💾 Speichern & übersetzen'}
|
||||
</button>
|
||||
)}
|
||||
{!confirmDelete ? (
|
||||
<button onClick={() => setConfirmDelete(true)}
|
||||
className="w-full py-1.5 text-xs font-medium rounded-lg border border-red-200 text-red-400 hover:bg-red-50 hover:text-red-600 hover:border-red-300 transition-colors">
|
||||
@@ -1228,7 +1236,8 @@ function PairsPanel({ selectedObject, allObjects, objectPairs, loadingPairs, onP
|
||||
<EditPairForm pair={pair} allObjects={allObjects}
|
||||
onSaved={() => { setEditingId(null); onPairsReload(); }}
|
||||
onCancel={() => setEditingId(null)}
|
||||
onDeleted={id => { setEditingId(null); onPairsReload(); }} />
|
||||
onDeleted={id => { setEditingId(null); onPairsReload(); }}
|
||||
onSavedAndTranslate={(savedPair) => { setEditingId(null); onPairsReload(); handleTranslate(savedPair); }} />
|
||||
) : (
|
||||
<div className="rounded-lg border border-slate-200 p-3 bg-slate-50 space-y-1.5">
|
||||
<div className="flex items-center gap-1.5 flex-wrap">
|
||||
|
||||
Reference in New Issue
Block a user