{{-- Preview Manager Logic for LandingSectionsEditor --}} /** * Sincroniza o array de seções com o hidden input e altera a visualização do Live Preview */ const persistState = () => { $hiddenInput.val(JSON.stringify(sections)); renderSidebar(); // Debounce para evitar múltiplas chamadas AJAX em curto período ao reordenar/salvar if (previewDebounceTimer) clearTimeout(previewDebounceTimer); previewDebounceTimer = setTimeout(triggerPreviewSave, 800); }; /** * Salva a matriz de seções temporariamente no Cache do Servidor e recarrega o Iframe */ const triggerPreviewSave = () => { $.ajax({ url: urls.savePreview, type: 'POST', data: { token: previewToken, sections: JSON.stringify(sections) }, success: (response) => { if (response.success) { refreshPreview(); } } }); }; /** * Recarrega o Iframe do Live Preview */ const refreshPreview = () => { const iframe = document.getElementById('preview-iframe-' + name); if (iframe) { iframe.src = urls.renderPreview; } };