From 46d2bf493148c84b353979bd316765c6e1767963 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 16 Jul 2026 11:46:14 +0000 Subject: [PATCH] fix: remove duplicate openOnlyofficeEditor, add destroy check before reopen --- .../433a0593-d3cf-414e-8763-ab5f87cbc75c.docx | Bin 40666 -> 40658 bytes renderer/carbone-templates/registry.json | 2 +- static/carbone.js | 61 ++++++++++-------- static/index.html | 4 +- 4 files changed, 36 insertions(+), 31 deletions(-) diff --git a/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx b/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx index fc5a0b1db73228ef2bbcfe50cea571bb82f4e003..f223f58b131c693fa113043344376a25a00caf9a 100644 GIT binary patch delta 2220 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 diff --git a/renderer/carbone-templates/registry.json b/renderer/carbone-templates/registry.json index 1086756..f637f33 100644 --- a/renderer/carbone-templates/registry.json +++ b/renderer/carbone-templates/registry.json @@ -6,6 +6,6 @@ "originalName": "master_cv_template.docx", "path": "/root/workspace/cv-app/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx", "uploadedAt": "2026-07-16T09:03:29.601Z", - "updatedAt": "2026-07-16T11:21:01.888Z" + "updatedAt": "2026-07-16T11:23:15.854Z" } ] \ No newline at end of file diff --git a/static/carbone.js b/static/carbone.js index dc5f3e0..886201a 100644 --- a/static/carbone.js +++ b/static/carbone.js @@ -260,8 +260,41 @@ async function loadOnlyofficeTemplates() { } } +// Force save the document +function forceSaveOnlyoffice() { + if (onlyofficeEditorInstance) { + // The ONLYOFFICE editor's onSave event will trigger the callback + // which saves the file to our backend + toast('Saving... changes will be stored automatically'); + } +} + +// Close the editor and clean up +function closeOnlyofficeEditor() { + if (onlyofficeEditorInstance) { + try { + onlyofficeEditorInstance.destroyEditor(); + } catch (e) { + console.error('Error closing editor:', e); + } + onlyofficeEditorInstance = null; + } + closeModal(); + // Force a small delay then reload the template list so the + // user sees the updated list with the latest save timestamp + setTimeout(() => { + loadOnlyofficeTemplates(); + }, 500); +} + // Open ONLYOFFICE editor in a modal async function openOnlyofficeEditor(templateId, templateName) { + // If there's a previous editor instance still lingering, destroy it first + if (onlyofficeEditorInstance) { + try { onlyofficeEditorInstance.destroyEditor(); } catch (e) {} + onlyofficeEditorInstance = null; + } + try { // Get the JWT-signed editor config from our backend // Add cache-buster to prevent browser caching the old config @@ -335,34 +368,6 @@ async function openOnlyofficeEditor(templateId, templateName) { toast('Failed to open editor: ' + e.message, 'error'); } } - -// Force save the document -function forceSaveOnlyoffice() { - if (onlyofficeEditorInstance) { - // The ONLYOFFICE editor's onSave event will trigger the callback - // which saves the file to our backend - toast('Saving... changes will be stored automatically'); - } -} - -// Close the editor and clean up -function closeOnlyofficeEditor() { - if (onlyofficeEditorInstance) { - try { - onlyofficeEditorInstance.destroyEditor(); - } catch (e) { - console.error('Error closing editor:', e); - } - onlyofficeEditorInstance = null; - } - closeModal(); - // Wait 1.5s for ONLYOFFICE save callbacks to settle, then refresh - setTimeout(() => { - loadOnlyofficeTemplates(); - }, 1500); -} - -// Call status check when templates page becomes active document.addEventListener('DOMContentLoaded', () => { const templatesPage = document.getElementById('page-templates'); if (templatesPage) { diff --git a/static/index.html b/static/index.html index 5e32c0c..b099f2c 100644 --- a/static/index.html +++ b/static/index.html @@ -139,7 +139,7 @@ - - + + \ No newline at end of file