208 lines
8.1 KiB
JavaScript
208 lines
8.1 KiB
JavaScript
/**
|
|
* Main Admin Panel Coordinator
|
|
* This refactored admin.js coordinates all admin modules while maintaining functionality
|
|
* Modules: core, auth, map, walksheet, shifts, shift-volunteers, users, email, integration
|
|
*/
|
|
|
|
/**
|
|
* Main Event Listener Setup
|
|
* Coordinates event listeners across all modules
|
|
*/
|
|
function setupAllEventListeners() {
|
|
// Setup authentication listeners
|
|
if (window.adminAuth && typeof window.adminAuth.setupAuthEventListeners === 'function') {
|
|
window.adminAuth.setupAuthEventListeners();
|
|
}
|
|
|
|
// Setup map listeners
|
|
if (window.adminMap && typeof window.adminMap.setupMapEventListeners === 'function') {
|
|
window.adminMap.setupMapEventListeners();
|
|
}
|
|
|
|
// Setup walk sheet listeners
|
|
if (window.adminWalkSheet && typeof window.adminWalkSheet.setupWalkSheetEventListeners === 'function') {
|
|
window.adminWalkSheet.setupWalkSheetEventListeners();
|
|
}
|
|
|
|
// Setup shift listeners
|
|
if (window.adminShifts && typeof window.adminShifts.setupShiftEventListeners === 'function') {
|
|
window.adminShifts.setupShiftEventListeners();
|
|
}
|
|
|
|
// Setup shift volunteer listeners with retry mechanism
|
|
const setupVolunteerModule = () => {
|
|
if (window.adminShiftVolunteers && typeof window.adminShiftVolunteers.setupVolunteerModalEventListeners === 'function') {
|
|
console.log('Setting up volunteer modal event listeners...');
|
|
window.adminShiftVolunteers.setupVolunteerModalEventListeners();
|
|
|
|
// Load users for volunteer management
|
|
if (typeof window.adminShiftVolunteers.loadAllUsers === 'function') {
|
|
console.log('Loading users for volunteer management...');
|
|
window.adminShiftVolunteers.loadAllUsers();
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
// Try to setup immediately
|
|
if (!setupVolunteerModule()) {
|
|
console.log('adminShiftVolunteers not ready, waiting for ready event...');
|
|
// Listen for the ready event
|
|
window.addEventListener('adminShiftVolunteersReady', (e) => {
|
|
console.log('adminShiftVolunteersReady event received:', e.detail);
|
|
if (setupVolunteerModule()) {
|
|
console.log('✅ Volunteer module setup completed after ready event');
|
|
}
|
|
});
|
|
|
|
// Also add a backup timer
|
|
let retryCount = 0;
|
|
const maxRetries = 10;
|
|
const retrySetup = setInterval(() => {
|
|
retryCount++;
|
|
if (setupVolunteerModule()) {
|
|
clearInterval(retrySetup);
|
|
console.log('✅ Volunteer module setup completed after', retryCount, 'retries');
|
|
} else if (retryCount >= maxRetries) {
|
|
clearInterval(retrySetup);
|
|
console.warn('⚠️ Failed to setup volunteer module after', maxRetries, 'retries');
|
|
}
|
|
}, 200);
|
|
}
|
|
|
|
// Setup user listeners
|
|
if (window.adminUsers && typeof window.adminUsers.setupUserEventListeners === 'function') {
|
|
window.adminUsers.setupUserEventListeners();
|
|
}
|
|
|
|
// Setup email listeners
|
|
if (window.adminEmail && typeof window.adminEmail.setupEmailEventListeners === 'function') {
|
|
window.adminEmail.setupEmailEventListeners();
|
|
}
|
|
}
|
|
|
|
// Main admin initialization when DOM is loaded
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
console.log('DOM loaded, initializing admin modules...');
|
|
|
|
// Initialize core functionality
|
|
if (window.adminCore && typeof window.adminCore.initializeAdminCore === 'function') {
|
|
window.adminCore.initializeAdminCore();
|
|
}
|
|
|
|
// Initialize authentication
|
|
if (window.adminAuth && typeof window.adminAuth.checkAdminAuth === 'function') {
|
|
window.adminAuth.checkAdminAuth();
|
|
}
|
|
|
|
// Initialize admin map
|
|
if (window.adminMap && typeof window.adminMap.initializeAdminMap === 'function') {
|
|
window.adminMap.initializeAdminMap();
|
|
}
|
|
|
|
// Load current start location
|
|
if (window.adminMap && typeof window.adminMap.loadCurrentStartLocation === 'function') {
|
|
window.adminMap.loadCurrentStartLocation();
|
|
}
|
|
|
|
// Check module loading status with detailed info
|
|
console.log('📊 Module loading status:', {
|
|
adminCore: !!window.adminCore,
|
|
adminAuth: !!window.adminAuth,
|
|
adminMap: !!window.adminMap,
|
|
adminShifts: !!window.adminShifts,
|
|
adminShiftVolunteers: !!window.adminShiftVolunteers,
|
|
adminUsers: !!window.adminUsers,
|
|
adminEmail: !!window.adminEmail
|
|
});
|
|
|
|
// Detailed check for adminShiftVolunteers
|
|
if (window.adminShiftVolunteers) {
|
|
console.log('📋 adminShiftVolunteers details:', {
|
|
exists: true,
|
|
functions: Object.keys(window.adminShiftVolunteers),
|
|
showShiftUserModal: typeof window.adminShiftVolunteers.showShiftUserModal,
|
|
moduleVersion: window.adminShiftVolunteers.moduleVersion,
|
|
loadedAt: window.adminShiftVolunteers.loadedAt
|
|
});
|
|
} else {
|
|
console.warn('⚠️ adminShiftVolunteers module not found');
|
|
}
|
|
|
|
// Setup all event listeners
|
|
setupAllEventListeners();
|
|
|
|
// Initialize integrations with a small delay to ensure DOM is ready
|
|
setTimeout(() => {
|
|
if (window.adminWalkSheet && typeof window.adminWalkSheet.loadWalkSheetConfig === 'function') {
|
|
window.adminWalkSheet.loadWalkSheetConfig();
|
|
}
|
|
if (window.adminIntegration && typeof window.adminIntegration.initializeAllIntegrations === 'function') {
|
|
window.adminIntegration.initializeAllIntegrations();
|
|
}
|
|
}, 100);
|
|
|
|
// Check if URL has a hash to show specific section
|
|
const hash = window.location.hash;
|
|
if (hash === '#walk-sheet') {
|
|
if (window.adminCore && typeof window.adminCore.showSection === 'function') {
|
|
window.adminCore.showSection('walk-sheet');
|
|
}
|
|
if (window.adminWalkSheet && typeof window.adminWalkSheet.checkAndLoadWalkSheetConfig === 'function') {
|
|
window.adminWalkSheet.checkAndLoadWalkSheetConfig();
|
|
}
|
|
} else if (hash === '#convert-data') {
|
|
if (window.adminCore && typeof window.adminCore.showSection === 'function') {
|
|
window.adminCore.showSection('convert-data');
|
|
}
|
|
} else if (hash === '#cuts') {
|
|
if (window.adminCore && typeof window.adminCore.showSection === 'function') {
|
|
window.adminCore.showSection('cuts');
|
|
}
|
|
} else {
|
|
// Default to dashboard
|
|
if (window.adminCore && typeof window.adminCore.showSection === 'function') {
|
|
window.adminCore.showSection('dashboard');
|
|
}
|
|
// Dashboard loading is handled by admin-core.js showSection/loadSectionData
|
|
// No need to manually load here to avoid duplicates
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Legacy Dashboard Functions - DEPRECATED
|
|
* These are kept for backward compatibility but should not be used
|
|
* Use the dashboard.js module functions instead
|
|
*/
|
|
async function loadAdminDashboardData() {
|
|
try {
|
|
const response = await fetch('/api/admin/dashboard');
|
|
const data = await response.json();
|
|
|
|
if (data.success) {
|
|
// This was the old function that only loaded user/shift stats
|
|
// Now deprecated in favor of the full dashboard.js implementation
|
|
document.getElementById('total-users').textContent = data.stats.totalUsers;
|
|
document.getElementById('total-shifts').textContent = data.stats.totalShifts;
|
|
document.getElementById('total-signups').textContent = data.stats.totalSignups;
|
|
document.getElementById('this-month-users').textContent = data.stats.thisMonthUsers;
|
|
}
|
|
} catch (error) {
|
|
console.error('Failed to load admin dashboard data:', error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Legacy function redirects for backward compatibility
|
|
* These ensure existing functionality continues to work
|
|
*/
|
|
window.loadAdminDashboardData = loadAdminDashboardData;
|
|
|
|
// Export dashboard function for module coordination
|
|
if (typeof window.adminDashboard === 'undefined') {
|
|
window.adminDashboard = {
|
|
loadAdminDashboardData: loadAdminDashboardData
|
|
};
|
|
}
|