diff --git a/frontend/src/pages/GenerateIt.tsx b/frontend/src/pages/GenerateIt.tsx index f479795..3e5e431 100644 --- a/frontend/src/pages/GenerateIt.tsx +++ b/frontend/src/pages/GenerateIt.tsx @@ -7,6 +7,9 @@ import { getDbObjects, getDbObjectPairs, getDbObjectWords, + updateDbObject, + addDbObjectWord, + deleteDbObjectWord, createDbPair, updateDbPair, deleteDbPair, @@ -417,6 +420,11 @@ export default function GenerateIt() { const [pairsLoading, setPairsLoading] = useState(false) // per-object words: objectId → DbWord[] const [objectWords, setObjectWords] = useState>({}) + // inline object edit + const [editingObjId, setEditingObjId] = useState(null) + const [editNotes, setEditNotes] = useState('') + const [editWordInput, setEditWordInput] = useState('') + const [savingObj, setSavingObj] = useState(false) const currentPicture: DbPicture | null = currentIndex >= 0 && currentIndex < pictureList.length ? pictureList[currentIndex] : null @@ -491,6 +499,44 @@ export default function GenerateIt() { .finally(() => setPairsLoading(false)) } + const startEditObj = (obj: DbObject) => { + setEditingObjId(obj.id) + setEditNotes(obj.user_notes ?? '') + setEditWordInput('') + } + + const cancelEditObj = () => { setEditingObjId(null); setEditWordInput('') } + + const saveEditObj = async (objId: string) => { + if (!token) return + setSavingObj(true) + try { + await updateDbObject(objId, { user_notes: editNotes.trim() || null }, token) + setDbObjects(prev => prev.map(o => o.id === objId ? { ...o, user_notes: editNotes.trim() || null } : o)) + setEditingObjId(null) + } finally { + setSavingObj(false) + } + } + + const addWordToObj = async (objId: string) => { + if (!token) return + const titel_de = editWordInput.trim() + if (!titel_de) return + const result = await addDbObjectWord(objId, { titel_de, level: 50 }, token) + if (result.ok) { + const words = await getDbObjectWords(objId, token) + setObjectWords(prev => ({ ...prev, [objId]: words })) + setEditWordInput('') + } + } + + const removeWordFromObj = async (objId: string, junctionId: string | number) => { + if (!token) return + await deleteDbObjectWord(objId, junctionId, token) + setObjectWords(prev => ({ ...prev, [objId]: (prev[objId] || []).filter(w => w.junction_id !== junctionId) })) + } + const imageNav = (
+ - {obj.user_notes && ( + + {obj.user_notes && editingObjId !== obj.id && (
{obj.user_notes}
)} + + {/* Inline edit panel */} + {editingObjId === obj.id && ( +
e.stopPropagation()}> + {/* Notizen */} +