freealberta/map/app/public/js/admin-integration.js

190 lines
7.9 KiB
JavaScript

/**
* Admin Integration Module
* Handles external service integrations (NocoDB and Listmonk)
*/
// Initialize NocoDB links in admin panel
async function initializeNocodbLinks() {
console.log('Starting NocoDB links initialization...');
try {
// Since we're in the admin panel, the user is already verified as admin
// by the requireAdmin middleware. Let's get the URLs from the server directly.
console.log('Fetching NocoDB URLs for admin panel...');
const configResponse = await fetch('/api/admin/nocodb-urls');
if (!configResponse.ok) {
throw new Error(`NocoDB URLs fetch failed: ${configResponse.status} ${configResponse.statusText}`);
}
const config = await configResponse.json();
console.log('NocoDB URLs received:', config);
if (config.success && config.nocodbUrls) {
console.log('Setting up NocoDB links with URLs:', config.nocodbUrls);
// Set up admin dashboard NocoDB links
setAdminNocodbLink('admin-nocodb-view-link', config.nocodbUrls.viewUrl);
setAdminNocodbLink('admin-nocodb-login-link', config.nocodbUrls.loginSheet);
setAdminNocodbLink('admin-nocodb-settings-link', config.nocodbUrls.settingsSheet);
setAdminNocodbLink('admin-nocodb-shifts-link', config.nocodbUrls.shiftsSheet);
setAdminNocodbLink('admin-nocodb-signups-link', config.nocodbUrls.shiftSignupsSheet);
console.log('NocoDB links initialized in admin panel');
} else {
console.warn('No NocoDB URLs found in admin config response');
// Hide the NocoDB section if no URLs are available
const nocodbSection = document.getElementById('nocodb-links');
const nocodbNav = document.querySelector('.admin-nav a[href="#nocodb-links"]');
if (nocodbSection) {
nocodbSection.style.display = 'none';
console.log('Hidden NocoDB section');
}
if (nocodbNav) {
nocodbNav.style.display = 'none';
console.log('Hidden NocoDB nav link');
}
}
} catch (error) {
console.error('Error initializing NocoDB links in admin panel:', error);
// Hide the NocoDB section on error
const nocodbSection = document.getElementById('nocodb-links');
const nocodbNav = document.querySelector('.admin-nav a[href="#nocodb-links"]');
if (nocodbSection) {
nocodbSection.style.display = 'none';
console.log('Hidden NocoDB section due to error');
}
if (nocodbNav) {
nocodbNav.style.display = 'none';
console.log('Hidden NocoDB nav link due to error');
}
}
}
// Helper function to set admin NocoDB link href
function setAdminNocodbLink(elementId, url) {
console.log(`Setting up NocoDB link: ${elementId} = ${url}`);
const element = document.getElementById(elementId);
if (element && url) {
element.href = url;
element.style.display = 'inline-flex';
// Remove any disabled state
element.classList.remove('btn-disabled');
element.removeAttribute('disabled');
console.log(`✓ Successfully set up ${elementId}`);
} else if (element) {
element.style.display = 'none';
// Add disabled state if no URL
element.classList.add('btn-disabled');
element.setAttribute('disabled', 'disabled');
element.href = '#';
console.log(`⚠ Disabled ${elementId} - no URL provided`);
} else {
console.error(`✗ Element not found: ${elementId}`);
}
}
// Initialize Listmonk links in admin panel
async function initializeListmonkLinks() {
console.log('Starting Listmonk links initialization...');
try {
// Since we're in the admin panel, the user is already verified as admin
// by the requireAdmin middleware. Let's get the URLs from the server directly.
console.log('Fetching Listmonk URLs for admin panel...');
const configResponse = await fetch('/api/admin/listmonk-urls');
if (!configResponse.ok) {
throw new Error(`Listmonk URLs fetch failed: ${configResponse.status} ${configResponse.statusText}`);
}
const config = await configResponse.json();
console.log('Listmonk URLs received:', config);
if (config.success && config.listmonkUrls) {
console.log('Setting up Listmonk links with URLs:', config.listmonkUrls);
// Set up admin dashboard Listmonk links
setAdminListmonkLink('admin-listmonk-admin-link', config.listmonkUrls.adminUrl);
setAdminListmonkLink('admin-listmonk-lists-link', config.listmonkUrls.listsUrl);
setAdminListmonkLink('admin-listmonk-campaigns-link', config.listmonkUrls.campaignsUrl);
setAdminListmonkLink('admin-listmonk-subscribers-link', config.listmonkUrls.subscribersUrl);
setAdminListmonkLink('admin-listmonk-settings-link', config.listmonkUrls.settingsUrl);
console.log('Listmonk links initialized in admin panel');
} else {
console.warn('No Listmonk URLs found in admin config response');
// Hide the Listmonk section if no URLs are available
const listmonkSection = document.getElementById('listmonk-links');
const listmonkNav = document.querySelector('.admin-nav a[href="#listmonk-links"]');
if (listmonkSection) {
listmonkSection.style.display = 'none';
console.log('Hidden Listmonk section');
}
if (listmonkNav) {
listmonkNav.style.display = 'none';
console.log('Hidden Listmonk nav link');
}
}
} catch (error) {
console.error('Error initializing Listmonk links in admin panel:', error);
// Hide the Listmonk section on error
const listmonkSection = document.getElementById('listmonk-links');
const listmonkNav = document.querySelector('.admin-nav a[href="#listmonk-links"]');
if (listmonkSection) {
listmonkSection.style.display = 'none';
console.log('Hidden Listmonk section due to error');
}
if (listmonkNav) {
listmonkNav.style.display = 'none';
console.log('Hidden Listmonk nav link due to error');
}
}
}
// Helper function to set admin Listmonk link href
function setAdminListmonkLink(elementId, url) {
console.log(`Setting up Listmonk link: ${elementId} = ${url}`);
const element = document.getElementById(elementId);
if (element && url) {
element.href = url;
element.style.display = 'inline-flex';
// Remove any disabled state
element.classList.remove('btn-disabled');
element.removeAttribute('disabled');
console.log(`✓ Successfully set up ${elementId}`);
} else if (element) {
element.style.display = 'none';
// Add disabled state if no URL
element.classList.add('btn-disabled');
element.setAttribute('disabled', 'disabled');
element.href = '#';
console.log(`⚠ Disabled ${elementId} - no URL provided`);
} else {
console.error(`✗ Element not found: ${elementId}`);
}
}
// Initialize all integrations
async function initializeAllIntegrations() {
try {
// Initialize both integrations with a small delay to ensure DOM is ready
await initializeNocodbLinks();
await initializeListmonkLinks();
console.log('All integrations initialized successfully');
} catch (error) {
console.error('Error initializing integrations:', error);
}
}
// Export integration functions
window.adminIntegration = {
initializeNocodbLinks,
initializeListmonkLinks,
initializeAllIntegrations,
setAdminNocodbLink,
setAdminListmonkLink
};