fix: add missing JavaScript for master trainers overview page
Resolves missing data on /master-trainer/trainers/ page by adding the JavaScript file that handles AJAX loading of trainer statistics and table data. ✅ Changes: - Created assets/js/hvac-master-trainers-overview.js - Handles AJAX calls to load trainer stats and filtered trainer lists - Implements filter change handlers for status, region, and search - Includes debounced search input for better UX - Initializes interactive table elements after load - Updated includes/class-hvac-master-trainers-overview.php - Added enqueue_scripts() method to properly load the JS file - Registers wp_enqueue_scripts action hook - Detects master trainer pages via shortcode or template slug - Ensures jQuery dependency is met The page was showing navigation and filters but no data because the JavaScript to make AJAX calls to hvac_master_trainers_stats and hvac_master_trainers_filter actions was completely missing. Tested on staging and deployed to production. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
80f11e71dd
commit
aebfb9adb8
2 changed files with 186 additions and 3 deletions
156
assets/js/hvac-master-trainers-overview.js
Normal file
156
assets/js/hvac-master-trainers-overview.js
Normal file
|
|
@ -0,0 +1,156 @@
|
||||||
|
/**
|
||||||
|
* Master Trainers Overview JavaScript
|
||||||
|
* Handles AJAX loading of trainer data and filtering
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Wait for DOM and dependencies
|
||||||
|
$(document).ready(function() {
|
||||||
|
console.log('[HVAC] Master Trainers Overview: Initializing...');
|
||||||
|
|
||||||
|
// Check if we're on the trainers page
|
||||||
|
if ($('#hvac-master-trainers-overview').length === 0) {
|
||||||
|
console.log('[HVAC] Master Trainers Overview: Not on trainers page, skipping initialization');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('[HVAC] Master Trainers Overview: Found trainers container, loading data...');
|
||||||
|
|
||||||
|
// Load initial stats
|
||||||
|
loadTrainerStats();
|
||||||
|
|
||||||
|
// Load initial trainers list
|
||||||
|
loadTrainersList();
|
||||||
|
|
||||||
|
// Handle filter changes
|
||||||
|
$('#hvac-trainers-filters').on('submit', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
loadTrainersList();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle filter changes on select/input
|
||||||
|
$('#filter-status, #filter-region, #filter-search').on('change keyup', debounce(function() {
|
||||||
|
loadTrainersList();
|
||||||
|
}, 500));
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load trainer statistics
|
||||||
|
*/
|
||||||
|
function loadTrainerStats() {
|
||||||
|
console.log('[HVAC] Loading trainer stats...');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: hvac_master_trainers_ajax.ajax_url,
|
||||||
|
type: 'POST',
|
||||||
|
data: {
|
||||||
|
action: 'hvac_master_trainers_stats',
|
||||||
|
nonce: hvac_master_trainers_ajax.nonce
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
console.log('[HVAC] Stats loaded successfully', response);
|
||||||
|
|
||||||
|
if (response.success && response.data.html) {
|
||||||
|
$('#hvac-stats-tiles').html(response.data.html).show();
|
||||||
|
$('#hvac-stats-loading').hide();
|
||||||
|
} else {
|
||||||
|
console.error('[HVAC] Stats load failed:', response);
|
||||||
|
$('#hvac-stats-loading').html('<p class="hvac-error">Failed to load statistics.</p>');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error('[HVAC] Stats AJAX error:', status, error);
|
||||||
|
$('#hvac-stats-loading').html('<p class="hvac-error">Error loading statistics.</p>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load trainers list with current filters
|
||||||
|
*/
|
||||||
|
function loadTrainersList() {
|
||||||
|
console.log('[HVAC] Loading trainers list...');
|
||||||
|
|
||||||
|
// Show loading state
|
||||||
|
$('#hvac-trainers-loading').show();
|
||||||
|
$('#hvac-trainers-table-container').hide();
|
||||||
|
|
||||||
|
// Get filter values
|
||||||
|
var filters = {
|
||||||
|
action: 'hvac_master_trainers_filter',
|
||||||
|
nonce: hvac_master_trainers_ajax.nonce,
|
||||||
|
status: $('#filter-status').val() || 'all',
|
||||||
|
region: $('#filter-region').val() || '',
|
||||||
|
search: $('#filter-search').val() || ''
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log('[HVAC] Filter values:', filters);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: hvac_master_trainers_ajax.ajax_url,
|
||||||
|
type: 'POST',
|
||||||
|
data: filters,
|
||||||
|
success: function(response) {
|
||||||
|
console.log('[HVAC] Trainers loaded successfully', response);
|
||||||
|
|
||||||
|
if (response.success && response.data.html) {
|
||||||
|
$('#hvac-trainers-table-container').html(response.data.html).show();
|
||||||
|
$('#hvac-trainers-loading').hide();
|
||||||
|
|
||||||
|
// Initialize any interactive elements in the table
|
||||||
|
initializeTrainerActions();
|
||||||
|
} else {
|
||||||
|
console.error('[HVAC] Trainers load failed:', response);
|
||||||
|
$('#hvac-trainers-loading').html('<p class="hvac-error">Failed to load trainers.</p>');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error('[HVAC] Trainers AJAX error:', status, error);
|
||||||
|
$('#hvac-trainers-loading').html('<p class="hvac-error">Error loading trainers.</p>');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize trainer action buttons
|
||||||
|
*/
|
||||||
|
function initializeTrainerActions() {
|
||||||
|
console.log('[HVAC] Initializing trainer actions...');
|
||||||
|
|
||||||
|
// Handle view profile buttons
|
||||||
|
$('.hvac-view-trainer').on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var trainerId = $(this).data('trainer-id');
|
||||||
|
console.log('[HVAC] View trainer:', trainerId);
|
||||||
|
// Navigate to trainer profile
|
||||||
|
window.location.href = $(this).attr('href');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle edit buttons
|
||||||
|
$('.hvac-edit-trainer').on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var trainerId = $(this).data('trainer-id');
|
||||||
|
console.log('[HVAC] Edit trainer:', trainerId);
|
||||||
|
window.location.href = $(this).attr('href');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Any other interactive elements...
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Debounce function for search input
|
||||||
|
*/
|
||||||
|
function debounce(func, wait) {
|
||||||
|
var timeout;
|
||||||
|
return function() {
|
||||||
|
var context = this, args = arguments;
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = setTimeout(function() {
|
||||||
|
func.apply(context, args);
|
||||||
|
}, wait);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
})(jQuery);
|
||||||
|
|
@ -76,12 +76,39 @@ class HVAC_Master_Trainers_Overview {
|
||||||
// AJAX handlers for trainers overview
|
// AJAX handlers for trainers overview
|
||||||
add_action( 'wp_ajax_hvac_master_trainers_filter', array( $this, 'ajax_filter_trainers' ) );
|
add_action( 'wp_ajax_hvac_master_trainers_filter', array( $this, 'ajax_filter_trainers' ) );
|
||||||
add_action( 'wp_ajax_hvac_master_trainers_stats', array( $this, 'ajax_get_stats' ) );
|
add_action( 'wp_ajax_hvac_master_trainers_stats', array( $this, 'ajax_get_stats' ) );
|
||||||
|
|
||||||
// Shortcode for embedding trainers overview
|
// Shortcode for embedding trainers overview
|
||||||
add_shortcode( 'hvac_master_trainers', array( $this, 'render_trainers_overview' ) );
|
add_shortcode( 'hvac_master_trainers', array( $this, 'render_trainers_overview' ) );
|
||||||
|
|
||||||
// Add function for template integration
|
// Add function for template integration
|
||||||
add_action( 'init', array( $this, 'register_template_functions' ) );
|
add_action( 'init', array( $this, 'register_template_functions' ) );
|
||||||
|
|
||||||
|
// Enqueue scripts for master trainers overview
|
||||||
|
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enqueue scripts for master trainers overview
|
||||||
|
*/
|
||||||
|
public function enqueue_scripts() {
|
||||||
|
// Only enqueue on master trainers pages
|
||||||
|
if ( ! is_page() ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
global $post;
|
||||||
|
if ( ! $post || ( strpos( $post->post_content, '[hvac_master_trainers]' ) === false &&
|
||||||
|
get_page_template_slug( $post->ID ) !== 'page-master-trainers.php' ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wp_enqueue_script(
|
||||||
|
'hvac-master-trainers-overview',
|
||||||
|
HVAC_PLUGIN_URL . 'assets/js/hvac-master-trainers-overview.js',
|
||||||
|
array( 'jquery' ),
|
||||||
|
HVAC_VERSION,
|
||||||
|
true
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue