curaflow/tenantLoader.js

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);