// ABSOLUTE START - TRY CATCH WRAPPING ENTIRE MODULE
import React from 'react';
import { createRoot } from 'react-dom/client';
import { PDFBuilder } from './PDFBuilder';
import { getPdfBuilderData } from './utils/editorFeatures';
import {
registerEditorInstance,
loadTemplate,
getEditorState,
setEditorState,
getCurrentTemplate,
exportTemplate,
saveTemplate,
resetAPI,
updateCanvasDimensions,
updateRotationSettings
} from './api/global-api';
// IMMEDIATE API CREATION - Create API before any imports to handle extension conflicts
// This ensures window.pdfBuilderReact exists even if imports fail
window.pdfBuilderReact = {
initPDFBuilderReact: function(containerId) {
const container = document.getElementById(containerId);
if (container) {
container.innerHTML = `
⚠️ Mode de compatibilité activé
L'éditeur React n'a pas pu se charger complètement. Cela peut être dû à une extension de navigateur.
Solutions :
• Désactivez temporairement les extensions Chrome
• Utilisez un navigateur sans extensions
• Actualisez la page (F5)
`;
return true;
}
return false;
},
_isFallbackMode: true,
_error: 'Extension conflict detected'
};
// Also create the direct function
window.initPDFBuilderReact = (window.pdfBuilderReact as any).initPDFBuilderReact;
// DEBUG: Log that the script is loading
// console.log('🚀 [WORDPRESS-ENTRY] Script loading started - before try block')
// Set window flags to indicate module is loaded
(window as any)['REACT_SCRIPT_LOADED'] = true;
(window as any)['REACT_LOAD_TIME'] = new Date().toISOString();
// ESSENTIAL: Create a debug log container for ALL messages
const createDebugConsole = () => {
let debugConsole = document.getElementById('pdf-builder-debug-console');
if (!debugConsole) {
debugConsole = document.createElement('div');
debugConsole.id = 'pdf-builder-debug-console';
debugConsole.style.cssText = `
position: fixed;
bottom: 10px;
left: 10px;
background: #000;
color: #00ff00;
padding: 15px;
border-radius: 5px;
z-index: 999999;
font-size: 11px;
font-family: monospace;
max-width: 500px;
max-height: 400px;
overflow-y: auto;
overflow-x: hidden;
border: 2px solid #00ff00;
box-shadow: 0 0 20px rgba(0, 255, 0, 0.5);
word-break: break-word;
white-space: pre-wrap;
`;
document.body.appendChild(debugConsole);
}
return debugConsole;
};
const logToDebugConsole = (msg: string) => {
const debugConsole = createDebugConsole();
const timestamp = new Date().toISOString().split('T')[1].split('.')[0];
debugConsole.innerHTML += `[${timestamp}] ${msg}\n`;
debugConsole.scrollTop = debugConsole.scrollHeight;
};
logToDebugConsole('✅ Debug console created');
// DEBUG HELPER FUNCTION - AFTER IMPORTS (Use the global console)
const addDebugToDOM = (msg: string) => {
logToDebugConsole(msg);
};
// Fonction d'initialisation appelée par WordPress
export function initPDFBuilderReact() {
// LOG CRITIQUE - DÉBUT
// console.log('🚀 [WORDPRESS-ENTRY] initPDFBuilderReact FUNCTION CALLED - STARTING INITIALIZATION');
addDebugToDOM('💥 initPDFBuilderReact STARTED at ' + new Date().toISOString());
// Check if already initialized globally
if ((window as any).pdfBuilderReactInitialized) {
addDebugToDOM('✅ Already initialized globally, returning true');
return true;
}
try {
// Step 1: Check container
const container = document.getElementById('pdf-builder-react-root');
addDebugToDOM('🔍 Container found: ' + !!container);
if (!container) {
addDebugToDOM('❌ RETURNING FALSE: No container');
return false;
}
// Step 2: Check if already initialized
const isInitialized = container.hasAttribute('data-react-initialized');
addDebugToDOM('🔍 Already initialized: ' + isInitialized);
if (isInitialized) {
addDebugToDOM('✅ Already initialized, returning true');
return true;
}
// Step 3: Mark as initialized
container.setAttribute('data-react-initialized', 'true');
addDebugToDOM('✅ Marked as initialized');
// Step 4: Show editor, hide loading
const loadingEl = document.getElementById('pdf-builder-loader');
const editorEl = document.getElementById('pdf-builder-editor-container');
if (loadingEl) loadingEl.style.display = 'none';
if (editorEl) editorEl.style.display = 'block';
addDebugToDOM('🔄 UI updated');
// Step 5: Initialize React
addDebugToDOM('⚛️ Checking React');
addDebugToDOM('⚛️ typeof React: ' + typeof React);
addDebugToDOM('⚛️ typeof createRoot: ' + typeof createRoot);
if (typeof React === 'undefined') {
addDebugToDOM('❌ RETURNING FALSE: React undefined');
return false;
}
if (typeof createRoot === 'undefined') {
addDebugToDOM('❌ RETURNING FALSE: createRoot undefined');
return false;
}
addDebugToDOM('✅ React ready, creating root');
let root;
try {
root = createRoot(container);
addDebugToDOM('✅ Root created');
} catch (rootError) {
const rootErr = rootError instanceof Error ? rootError : new Error(String(rootError));
addDebugToDOM('❌ createRoot failed: ' + rootErr.message);
container.removeAttribute('data-react-initialized');
return false;
}
addDebugToDOM('🎨 Rendering PDFBuilder');
// Try to render with error boundary
try {
root.render();
addDebugToDOM('✅ PDFBuilder rendered');
// Mark as initialized globally
(window as any).pdfBuilderReactInitialized = true;
} catch (renderError) {
const error = renderError instanceof Error ? renderError : new Error(String(renderError));
addDebugToDOM('❌ Render error: ' + error.message);
// Try to render a simple fallback component
try {
addDebugToDOM('🔄 Trying fallback render');
root.render(
Erreur de rendu React
Le composant PDFBuilder n'a pas pu être rendu. Erreur: {error.message}
Détails de l'erreur
{error.stack}
);
addDebugToDOM('✅ Fallback render successful');
return true; // Return true since we rendered something
} catch (fallbackError) {
const fallbackErr = fallbackError instanceof Error ? fallbackError : new Error(String(fallbackError));
addDebugToDOM('❌ Fallback also failed: ' + fallbackErr.message);
container.removeAttribute('data-react-initialized');
return false;
}
}
// Charger les données initiales du template s'il y en a
// Step 6: Load template data if available
const existingTemplate = getPdfBuilderData().existingTemplate;
if (existingTemplate) {
addDebugToDOM('📄 Loading existing template');
setTimeout(() => {
try {
loadTemplate(existingTemplate);
addDebugToDOM('✅ Template loaded');
} catch (_templateError) {
addDebugToDOM('❌ Template load error');
}
}, 100);
} else {
addDebugToDOM('📄 No existing template');
}
addDebugToDOM('🎉 SUCCESS: completed');
return true;
} catch (error) {
const err = error instanceof Error ? error : new Error(String(error));
addDebugToDOM('❌ EXCEPTION: ' + err.message);
// Try to remove initialization flag if container exists
const container = document.getElementById('pdf-builder-react-root');
if (container) {
container.removeAttribute('data-react-initialized');
}
return false;
}
}
// Déclarer l'interface globale pour TypeScript
// (Déjà déclarée plus haut)
// Export pour utilisation manuelle (WordPress l'appelle explicitement)
window.initPDFBuilderReact = initPDFBuilderReact;
// REPLACE the fallback API with the full API since imports succeeded
window.pdfBuilderReact = {
initPDFBuilderReact,
loadTemplate,
getEditorState,
setEditorState,
getCurrentTemplate,
exportTemplate,
saveTemplate,
registerEditorInstance,
resetAPI,
updateCanvasDimensions,
updateRotationSettings,
_isWebpackBundle: true
};
// END OUTER TRY-CATCH