/** * UpgradeModals.tsx * * React component replacing partials/upgrade-modals.php. * Exposes showUpgradeModal / closeUpgradeModal as window globals so that * existing jQuery / vanilla-JS admin code keeps working without changes. * * Data injected by PHP via wp_localize_script('pdfib-upgrade-modals', 'pdfibUpgradeModalsData', {shopUrl}). */ import React, { useState, useEffect } from 'react'; // ─── Types ──────────────────────────────────────────────────────────────────── export interface UpgradeModalsData { shopUrl: string; } declare global { interface Window { pdfibUpgradeModalsData?: UpgradeModalsData; showUpgradeModal?: (reason: string) => void; closeUpgradeModal?: (modalId: string) => void; } } type ModalReason = 'template' | 'gallery' | 'license_tab'; // ─── Feature list (same in all 3 modals) ───────────────────────────────────── const FEATURES = [ { icon: '📄', label: 'Templates supplémentaires', desc: 'selon la formule choisie' }, { icon: '🖼️', label: 'Export PDF, PNG & JPG', desc: 'formats de sortie étendus' }, { icon: '📤', label: 'Résolution élevée', desc: '300 & 600 DPI' }, { icon: '🎯', label: 'Couleurs & fonds personnalisés', desc: 'pour le canvas' }, { icon: '📐', label: 'Grille, guides & accrochage', desc: 'pour la mise en page' }, { icon: '🔄', label: 'Mises à jour incluses', desc: 'selon votre licence' }, { icon: '💬', label: 'Support du vendeur', desc: 'via le canal prévu' }, ]; // ─── Modal config ───────────────────────────────────────────────────────────── const MODAL_CONFIG: Record = { template: { id: 'upgrade-modal-template', title: 'Templates PRO', icon: '🎨', heading: 'Templates et personnalisation', desc: 'Ajoutez des templates supplémentaires et ajustez davantage le rendu.', }, gallery: { id: 'upgrade-modal-gallery', title: 'Modèles PRO', icon: '🖼️', heading: 'Galerie de modèles', desc: 'Accédez aux modèles professionnels additionnels pour factures, devis et autres documents.', }, license_tab: { id: 'upgrade-modal-license_tab', title: 'Licence PRO', icon: '💎', heading: 'Activation de la version PRO', desc: 'Associez votre licence séparée pour activer les options PRO sur cette installation.', }, }; // ─── Single modal ───────────────────────────────────────────────────────────── interface UpgradeModalProps { reason: ModalReason; visible: boolean; onClose: () => void; shopUrl: string; } const UpgradeModal: React.FC = ({ reason, visible, onClose, shopUrl }) => { const cfg = MODAL_CONFIG[reason]; if (!visible) { return (
); } return (
{ if ((e.target as HTMLElement).classList.contains('pdfb-modal-overlay')) { onClose(); } }} >
{/* Header */}

{cfg.title}

{/* Body */}
{cfg.icon}

{cfg.heading}

{cfg.desc}

    {FEATURES.map((f, i) => (
  • {f.icon} {f.label} {f.desc ? ` — ${f.desc}` : ''}
  • ))}
{/* Pricing */}
69.99€ à vie

Options de licence disponibles selon la formule choisie.

Voir les formules
); }; // ─── Root component ─────────────────────────────────────────────────────────── const UpgradeModals: React.FC = () => { const shopUrl = window.pdfibUpgradeModalsData?.shopUrl ?? 'https://hub.threeaxe.fr/index.php/downloads/pdf-builder-pro/'; const [visible, setVisible] = useState(null); useEffect(() => { // Expose global helpers expected by legacy PHP/JS code. window.showUpgradeModal = (reason: string) => { if (reason in MODAL_CONFIG) { setVisible(reason as ModalReason); } }; window.closeUpgradeModal = (modalId: string) => { const entry = Object.values(MODAL_CONFIG).find((c) => c.id === modalId); if (entry) { setVisible(null); } }; return () => { delete window.showUpgradeModal; delete window.closeUpgradeModal; }; }, []); return ( <> {(Object.keys(MODAL_CONFIG) as ModalReason[]).map((reason) => ( setVisible(null)} shopUrl={shopUrl} /> ))} ); }; export default UpgradeModals;