From 2c20ab748efec096b19a4c87b070480a6c516c0c Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Fri, 13 Mar 2026 23:32:29 +0100 Subject: [PATCH] Add persistCurrentTextVersion function and update runAiAction to use it --- src/App.tsx | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index b867606..9d4a364 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1050,6 +1050,41 @@ export default function App() { setHistoryItems(combined); }, []); + const persistCurrentTextVersion = useCallback( + async (promptId: string, nextTitle: string, nextBody: string) => { + const normalizedTitle = nextTitle.trim() || DEFAULT_TITLE; + if ( + selectedTextIdRef.current === promptId && + normalizedTitle !== nextTitle + ) { + setTitle(normalizedTitle); + } + + const result = await saveManualVersion(promptId, normalizedTitle, nextBody); + + if (selectedTextIdRef.current === promptId) { + setLastPersistedBody(nextBody); + setLastPersistedTitle(normalizedTitle); + setHasDraft(false); + setRestoredDraft(false); + setLatestManualVersionId(result.versionId); + setDraftBaseVersionId(result.versionId); + setSelectedHistoryId(result.versionId); + } + + await refreshTexts(); + if (historyOpenRef.current && selectedTextIdRef.current === promptId) { + await refreshVersions(promptId); + } + + return { + versionId: result.versionId, + normalizedTitle + }; + }, + [refreshTexts, refreshVersions] + ); + const runAiAction = useCallback( async ({ template }: AiActionRequest) => { if (!selectedTextId || !hasText || isViewingHistory || isConverting) return; @@ -1078,8 +1113,19 @@ export default function App() { const controller = new AbortController(); const sourceTextId = selectedTextId; const sourceBody = body; - const sourceTitle = title.trim() || DEFAULT_TITLE; - const sourceDraftBaseVersionId = draftBaseVersionId; + let sourceTitle = title.trim() || DEFAULT_TITLE; + let sourceDraftBaseVersionId = draftBaseVersionId; + + if (canSave) { + const persisted = await persistCurrentTextVersion( + sourceTextId, + title, + sourceBody + ); + sourceTitle = persisted.normalizedTitle; + sourceDraftBaseVersionId = persisted.versionId; + } + const fullPrompt = `${prompt}\n\nDocument:\n${sourceBody}`; setConversionJob({ @@ -1173,12 +1219,14 @@ export default function App() { }, [ body, + canSave, draftBaseVersionId, hasText, isConverting, isViewingHistory, normalizedOllamaUrl, ollamaModel, + persistCurrentTextVersion, refreshTexts, refreshVersions, selectedTextId,