import { html } from '@design.estate/dees-element'; import type { IOverallStatus } from '../interfaces/index.js'; export const demoFunc = () => html`
Automatic Status Cycling
{ const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any; const statusStates: IOverallStatus[] = [ { status: 'operational', message: 'All Systems Operational', lastUpdated: Date.now(), affectedServices: 0, totalServices: 12 }, { status: 'degraded', message: 'Minor Service Degradation', lastUpdated: Date.now(), affectedServices: 2, totalServices: 12 }, { status: 'partial_outage', message: 'Partial System Outage', lastUpdated: Date.now(), affectedServices: 4, totalServices: 12 }, { status: 'major_outage', message: 'Major Service Disruption', lastUpdated: Date.now(), affectedServices: 8, totalServices: 12 }, { status: 'maintenance', message: 'Scheduled Maintenance in Progress', lastUpdated: Date.now(), affectedServices: 3, totalServices: 12 } ]; let statusIndex = 0; // Initial loading demo statusBar.loading = true; setTimeout(() => { statusBar.loading = false; statusBar.overallStatus = statusStates[0]; }, 1500); // Cycle through states setInterval(() => { statusIndex = (statusIndex + 1) % statusStates.length; statusBar.overallStatus = statusStates[statusIndex]; statusBar.overallStatus = { ...statusBar.overallStatus, lastUpdated: Date.now() }; }, 3000); // Handle clicks statusBar.addEventListener('statusClick', (event: CustomEvent) => { console.log('Status bar clicked:', event.detail); alert(`Status Details:\n\nStatus: ${event.detail.status.status}\nMessage: ${event.detail.status.message}\nAffected Services: ${event.detail.status.affectedServices}`); }); }} >
Manual Status Control
{ const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any; // Initial state statusBar.overallStatus = { status: 'operational', message: 'All Systems Operational', lastUpdated: Date.now(), affectedServices: 0, totalServices: 15 }; // Create controls const controls = document.createElement('div'); controls.className = 'demo-controls'; controls.innerHTML = ` `; wrapperElement.appendChild(controls); // Status messages const statusMessages = { operational: 'All Systems Operational', degraded: 'Performance Issues Detected', partial_outage: 'Some Services Unavailable', major_outage: 'Critical System Failure', maintenance: 'Planned Maintenance Window' }; const affectedCounts = { operational: 0, degraded: 3, partial_outage: 7, major_outage: 12, maintenance: 5 }; // Handle button clicks controls.querySelectorAll('.demo-button').forEach(button => { button.addEventListener('click', () => { const status = button.getAttribute('data-status') as keyof typeof statusMessages; statusBar.overallStatus = { status: status as any, message: statusMessages[status], lastUpdated: Date.now(), affectedServices: affectedCounts[status], totalServices: 15 }; }); }); }} >
Loading and Refresh States
{ const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any; // Initial loading statusBar.loading = true; const controls = document.createElement('div'); controls.className = 'demo-controls'; controls.innerHTML = ` `; wrapperElement.appendChild(controls); // Set initial status after loading setTimeout(() => { statusBar.loading = false; statusBar.overallStatus = { status: 'operational', message: 'All Systems Operational', lastUpdated: Date.now(), affectedServices: 0, totalServices: 10 }; }, 2000); // Toggle loading controls.querySelector('#toggleLoading')?.addEventListener('click', () => { statusBar.loading = !statusBar.loading; }); // Refresh simulation controls.querySelector('#refresh')?.addEventListener('click', () => { statusBar.loading = true; setTimeout(() => { statusBar.loading = false; // Simulate random status after refresh const statuses = ['operational', 'degraded', 'partial_outage']; const randomStatus = statuses[Math.floor(Math.random() * statuses.length)]; statusBar.overallStatus = { status: randomStatus as any, message: 'Status refreshed at ' + new Date().toLocaleTimeString(), lastUpdated: Date.now(), affectedServices: randomStatus === 'operational' ? 0 : Math.floor(Math.random() * 5) + 1, totalServices: 10 }; }, 1000); }); // Error simulation controls.querySelector('#simulateError')?.addEventListener('click', () => { statusBar.loading = true; setTimeout(() => { statusBar.loading = false; statusBar.overallStatus = { status: 'major_outage', message: 'Unable to fetch status - Connection Error', lastUpdated: Date.now(), affectedServices: -1, // Unknown totalServices: -1 }; }, 1500); }); }} >
Edge Cases and Special States
{ const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any; const edgeCases = [ { label: 'No Services', status: { status: 'operational', message: 'No services to monitor', lastUpdated: Date.now(), affectedServices: 0, totalServices: 0 } }, { label: 'All Services Down', status: { status: 'major_outage', message: 'Complete System Failure', lastUpdated: Date.now(), affectedServices: 25, totalServices: 25 } }, { label: 'Very Long Message', status: { status: 'degraded', message: 'Multiple services experiencing degraded performance due to increased load from seasonal traffic surge', lastUpdated: Date.now(), affectedServices: 7, totalServices: 20 } }, { label: 'Old Timestamp', status: { status: 'operational', message: 'Status data may be stale', lastUpdated: Date.now() - 24 * 60 * 60 * 1000, // 24 hours ago affectedServices: 0, totalServices: 10 } }, { label: 'Future Maintenance', status: { status: 'maintenance', message: 'Scheduled maintenance starting in 2 hours', lastUpdated: Date.now(), affectedServices: 0, totalServices: 15 } } ]; let currentCase = 0; statusBar.overallStatus = edgeCases[0].status; // Create info display const info = document.createElement('div'); info.className = 'status-info'; info.innerHTML = `Current Case: ${edgeCases[0].label}`; wrapperElement.appendChild(info); // Create controls const controls = document.createElement('div'); controls.className = 'demo-controls'; controls.innerHTML = ` `; wrapperElement.appendChild(controls); const updateCase = (index: number) => { currentCase = index; statusBar.overallStatus = edgeCases[currentCase].status; info.innerHTML = `Current Case: ${edgeCases[currentCase].label}`; }; controls.querySelector('#prevCase')?.addEventListener('click', () => { const newIndex = (currentCase - 1 + edgeCases.length) % edgeCases.length; updateCase(newIndex); }); controls.querySelector('#nextCase')?.addEventListener('click', () => { const newIndex = (currentCase + 1) % edgeCases.length; updateCase(newIndex); }); }} >
Non-Expandable Status Bar
{ const statusBar = wrapperElement.querySelector('upl-statuspage-statusbar') as any; // Disable expandable behavior statusBar.expandable = false; statusBar.overallStatus = { status: 'operational', message: 'This status bar cannot be clicked', lastUpdated: Date.now(), affectedServices: 0, totalServices: 8 }; // This event won't fire since expandable is false statusBar.addEventListener('statusClick', (event: CustomEvent) => { console.log('This should not fire'); }); const info = document.createElement('div'); info.className = 'status-info'; info.innerHTML = 'Try clicking the status bar - it should not respond to clicks when expandable=false'; wrapperElement.appendChild(info); }} >
`;