diff --git a/assets/js/analytics.js b/assets/js/analytics.js index a26e8f8..7f1440a 100644 --- a/assets/js/analytics.js +++ b/assets/js/analytics.js @@ -351,7 +351,54 @@ import '../css/analytics.css'; } }); + /** + * Fetch analytics data via AJAX and update the content area. + * + * @param {object} detail Event detail with from, to, listId. + */ + function fetchAnalyticsData(detail) { + if (!window.mailchimpSFAnalytics || !window.mailchimpSFAnalytics.ajax_url) { + return; + } + + const contentArea = document.getElementById('mailchimp-sf-analytics-content'); + if (!contentArea) { + return; + } + + const formData = new FormData(); + formData.append('action', 'mailchimp_sf_get_analytics'); + formData.append('nonce', window.mailchimpSFAnalytics.nonce); + formData.append('list_id', detail.listId); + formData.append('start_date', detail.from); + formData.append('end_date', detail.to); + + fetch(window.mailchimpSFAnalytics.ajax_url, { + method: 'POST', + body: formData, + credentials: 'same-origin', + }) + .then(function (response) { + return response.json(); + }) + .then(function (response) { + if (!response.success) { + return; + } + + const { data } = response; + contentArea.innerHTML = JSON.stringify(data); + }) + .catch(function () {}); + } + + // Listen for analytics refresh events. + document.addEventListener('mailchimp-analytics-refresh', function (e) { + fetchAnalyticsData(e.detail); + }); + // Initialize. updateTriggerLabel(); syncDateInputs(); + refreshAnalytics(); })(); diff --git a/assets/js/mailchimp.js b/assets/js/mailchimp.js index 753c8ab..b9a6d6e 100644 --- a/assets/js/mailchimp.js +++ b/assets/js/mailchimp.js @@ -109,3 +109,31 @@ }); } })(window.jQuery); + +/* Form view tracking for analytics */ +(function () { + if (!window.mailchimpSF || !window.mailchimpSF.analytics_ajax_url) { + return; + } + + const forms = document.querySelectorAll('.mc_signup_form[data-list-id]'); + const tracked = {}; + + for (let i = 0; i < forms.length; i++) { + const listId = forms[i].getAttribute('data-list-id'); + if (listId && !tracked[listId]) { + tracked[listId] = true; + + const formData = new FormData(); + formData.append('action', 'mailchimp_sf_track_form_view'); + formData.append('list_id', listId); + formData.append('mailchimp_sf_nonce', window.mailchimpSF.analytics_nonce); + + fetch(window.mailchimpSF.analytics_ajax_url, { + method: 'POST', + body: formData, + credentials: 'same-origin', + }).catch(() => {}); + } + } +})(); diff --git a/includes/admin/templates/analytics.php b/includes/admin/templates/analytics.php index 3e4f0a1..9e744ee 100644 --- a/includes/admin/templates/analytics.php +++ b/includes/admin/templates/analytics.php @@ -100,6 +100,9 @@ +