/** * PDF Builder React - API Globale * Expose l'interface de communication entre WordPress et le bundle React */ import { debugError, debugWarn } from '../utils/debug'; import { TemplateState, BuilderState } from '../types/elements'; // Stocker les références globales let editorInstance: unknown = null; let currentTemplate: TemplateState | null = null; let editorState: BuilderState | null = null; /** * Enregistre l'instance de l'éditeur */ export function registerEditorInstance(instance: unknown) { editorInstance = instance; } /** * Charge un template dans l'éditeur */ export async function loadTemplate(templateData: any) { try { currentTemplate = templateData; // Dispatcher un événement personnalisé que PDFBuilder écoutera const event = new CustomEvent('pdfBuilderLoadTemplate', { detail: templateData }); document.dispatchEvent(event); return true; } catch (error) { return false; } } /** * Récupère l'état actuel de l'éditeur */ export function getEditorState() { if (!editorInstance) { debugWarn('[Global API] Editor instance not available for state'); return null; } return editorState; } /** * Met à jour l'état de l'éditeur */ export function setEditorState(state: BuilderState) { editorState = state; } /** * Récupère le template actuel */ export function getCurrentTemplate() { return currentTemplate; } /** * Exporte les données du template */ export function exportTemplate() { if (!editorInstance) { debugError('[Global API] Editor instance not available'); return null; } return { template: currentTemplate, state: editorState, timestamp: new Date().toISOString() }; } /** * Sauvegarde un template */ export async function saveTemplate(templateData: TemplateState) { try { currentTemplate = templateData; // Dispatcher un événement personnalisé const event = new CustomEvent('pdfBuilderSaveTemplate', { detail: templateData }); document.dispatchEvent(event); return true; } catch (error) { debugError('[Global API] Error saving template', error); return false; } } /** * Réinitialise l'API */ export function resetAPI() { editorInstance = null; currentTemplate = null; editorState = null; } /** * Met à jour les dimensions du canvas */ export function updateCanvasDimensions(width: number, height: number) { try { // Mettre à jour l'objet window global if (!window.pdfBuilderCanvasSettings) { window.pdfBuilderCanvasSettings = {}; } window.pdfBuilderCanvasSettings.canvas_width = width; window.pdfBuilderCanvasSettings.canvas_height = height; // Dispatcher un événement pour notifier le contexte React const event = new CustomEvent('pdfBuilderCanvasSettingsUpdated'); window.dispatchEvent(event); return true; } catch (error) { debugError('[Global API] Error updating canvas dimensions', error); return false; } } /** * Met à jour les paramètres de rotation */ export function updateRotationSettings(enabled: boolean) { try { // Mettre à jour l'objet window global if (!window.pdfBuilderCanvasSettings) { window.pdfBuilderCanvasSettings = {}; } window.pdfBuilderCanvasSettings.enable_rotation = enabled; // Dispatcher un événement pour notifier le contexte React const event = new CustomEvent('pdfBuilderCanvasSettingsUpdated'); window.dispatchEvent(event); return true; } catch (error) { debugError('[Global API] Error updating rotation settings', error); return false; } } /** * Interface de l'API globale */ export interface GlobalAPI { registerEditorInstance: typeof registerEditorInstance; loadTemplate: typeof loadTemplate; getEditorState: typeof getEditorState; setEditorState: typeof setEditorState; getCurrentTemplate: typeof getCurrentTemplate; exportTemplate: typeof exportTemplate; saveTemplate: typeof saveTemplate; resetAPI: typeof resetAPI; updateCanvasDimensions: typeof updateCanvasDimensions; updateRotationSettings: typeof updateRotationSettings; }