✨ feat(Product.php): Ajoute ProductDoc pour gérer les documents. ✨ feat(Contrats.php): Gère les fichiers du contrat via VichUploader. ✨ feat(templates): Crée template mail signature contrat. ✨ feat(SignatureController): Ajoute la signature du contrat. ✨ feat(ContratsController): Crée contrat depuis devis et liste contrats. ✨ feat(Client): Crée soumission contrat Docuseal. ✨ feat(DevisPdfService): Corrige l'assurance RC Pro. ✨ feat(.env): Ajoute CONTRAT_BASEURL. ✨ feat(ProductDocType): Crée formulaire pour les documents produit. ✨ feat(contrats/list.twig): Liste et actions pour les contrats. ✨ feat(UtmEvent.js): Track click document produit. ✨ feat(ContratEvent.php): Crée event pour envoi contrat. ✨ feat(admin.js): Initialise la recherche dynamique des contrats. ✨ feat(ContratPdfService): Génère le PDF du contrat DocuSeal. ✨ feat(products/add.twig): Ajoute gestion des documents produits. ✨ feat(ContratController): Crée controlleur contrat. ✨ feat(ContratSubscriber.php): Envoi du contrat par email. ✨ feat(reservation/produit.twig): Affiche les documents produit. ✨ feat(ProductController.php): Refactorisation et ajout des documents. ```
69 lines
2.4 KiB
JavaScript
69 lines
2.4 KiB
JavaScript
export class UtmAccount extends HTMLElement {
|
|
connectedCallback() {
|
|
if (typeof umami === 'undefined') {
|
|
console.warn('Umami script non détecté.');
|
|
return;
|
|
}
|
|
const umamiScript = document.querySelector('script[data-website-id]');
|
|
const websiteId = umamiScript ? umamiScript.getAttribute('data-website-id') : null;
|
|
umami.identify('user_'+this.getAttribute('id'), { name: this.getAttribute('name'), email: this.getAttribute('email') });
|
|
|
|
}
|
|
}
|
|
export class UtmEvent extends HTMLElement {
|
|
connectedCallback() {
|
|
// On attend un court instant pour s'assurer qu'umami est chargé
|
|
// ou on vérifie s'il existe déjà
|
|
if (typeof umami === 'undefined') {
|
|
console.warn('Umami script non détecté.');
|
|
return;
|
|
}
|
|
|
|
const event = this.getAttribute('event');
|
|
const dataRaw = this.getAttribute('data');
|
|
|
|
// Extraction dynamique du website-id depuis le script existant
|
|
const umamiScript = document.querySelector('script[data-website-id]');
|
|
const websiteId = umamiScript ? umamiScript.getAttribute('data-website-id') : null;
|
|
|
|
if (!websiteId) {
|
|
console.error('Impossible de trouver le data-website-id umami.');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
if (event == "click_pdf_product") {
|
|
const data = JSON.parse(dataRaw);
|
|
umami.track({
|
|
website: websiteId,
|
|
name:'Téléchargement document produit',
|
|
data: data
|
|
});
|
|
}
|
|
if (event === "view_catalogue") {
|
|
umami.track('Affichage du catalogue');
|
|
}
|
|
if (event === "view_home") {
|
|
umami.track('Affichage de la page accueil');
|
|
}
|
|
if (event === "view_contact") {
|
|
umami.track('Affichage du page contact');
|
|
}
|
|
|
|
if (event === "view_product" && dataRaw) {
|
|
const data = JSON.parse(dataRaw);
|
|
|
|
// Umami track accepte soit un nom seul,
|
|
// soit un objet complet pour des propriétés personnalisées
|
|
umami.track({
|
|
website: websiteId,
|
|
name:'Affichage produit',
|
|
data: data
|
|
});
|
|
}
|
|
} catch (e) {
|
|
console.error('Erreur lors du tracking Umami:', e);
|
|
}
|
|
}
|
|
}
|