48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
/**
|
|
* tenantLoader.js: Dynamically applies branding and multi-tenant settings.
|
|
*/
|
|
|
|
async function loadTenantBranding() {
|
|
// Determine tenant from URL (e.g., ?tenant=sharma-clinic) or localStorage
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
let tenantId = urlParams.get('tenant') || localStorage.getItem('Curio_tenant') || 'default';
|
|
|
|
// Save to localStorage for persistence across pages
|
|
localStorage.setItem('Curio_tenant', tenantId);
|
|
|
|
try {
|
|
const response = await fetch(`/api/config/${tenantId}`);
|
|
const config = await response.json();
|
|
|
|
applyBranding(config);
|
|
} catch (error) {
|
|
console.error("Failed to load tenant branding:", error);
|
|
}
|
|
}
|
|
|
|
function applyBranding(config) {
|
|
// 1. Apply CSS Variables for dynamic coloring
|
|
document.documentElement.style.setProperty('--primary', config.primaryColor);
|
|
document.documentElement.style.setProperty('--secondary', config.secondaryColor);
|
|
|
|
// 2. Update UI Elements (Logo, Name)
|
|
const logoIcons = document.querySelectorAll('.logo-icon');
|
|
const logoTexts = document.querySelectorAll('.logo-text, .header-title h1, .auth-logo h1');
|
|
const hospitalNames = document.querySelectorAll('.hospital-name, .logo-text');
|
|
|
|
logoIcons.forEach(icon => icon.innerText = config.logo);
|
|
|
|
// Update Document Title
|
|
document.title = `${config.name} | Curio`;
|
|
|
|
// Update instances of hospital name in text
|
|
document.querySelectorAll('[data-tenant-name]').forEach(el => {
|
|
el.innerText = config.name;
|
|
});
|
|
|
|
console.log(`Branding applied for: ${config.name}`);
|
|
}
|
|
|
|
// Auto-load on script include
|
|
document.addEventListener('DOMContentLoaded', loadTenantBranding);
|