import { html } from '@design.estate/dees-element'; import type { IServiceStatus } from '../interfaces/index.js'; export const demoFunc = () => html`
Full Featured Service Selector
{ const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any; // Comprehensive demo data const demoServices: IServiceStatus[] = [ // Infrastructure { id: 'api-gateway', name: 'api-gateway', displayName: 'API Gateway', description: 'Main API endpoint for all services', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.95, uptime90d: 99.92, responseTime: 45, category: 'Infrastructure', selected: true }, { id: 'web-server', name: 'web-server', displayName: 'Web Server', description: 'Frontend web application server', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.99, uptime90d: 99.97, responseTime: 28, category: 'Infrastructure', selected: true }, { id: 'load-balancer', name: 'load-balancer', displayName: 'Load Balancer', description: 'Traffic distribution system', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 100, uptime90d: 99.99, responseTime: 5, category: 'Infrastructure', selected: false }, { id: 'cdn', name: 'cdn', displayName: 'CDN', description: 'Content delivery network', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 100, uptime90d: 99.99, responseTime: 12, category: 'Infrastructure', selected: false }, // Data Services { id: 'database', name: 'database', displayName: 'Database Cluster', description: 'Primary database cluster with replicas', currentStatus: 'degraded', lastChecked: Date.now(), uptime30d: 98.5, uptime90d: 99.1, responseTime: 120, category: 'Data', selected: true }, { id: 'redis-cache', name: 'redis-cache', displayName: 'Redis Cache', description: 'In-memory data caching', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.98, uptime90d: 99.96, responseTime: 5, category: 'Data', selected: true }, { id: 'elasticsearch', name: 'elasticsearch', displayName: 'Search Engine', description: 'Full-text search service', currentStatus: 'partial_outage', lastChecked: Date.now(), uptime30d: 95.2, uptime90d: 97.8, responseTime: 180, category: 'Data', selected: false }, { id: 'backup-service', name: 'backup-service', displayName: 'Backup Service', description: 'Automated backup and recovery', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 100, uptime90d: 99.99, responseTime: 95, category: 'Data', selected: true }, // Application Services { id: 'auth-service', name: 'auth-service', displayName: 'Authentication Service', description: 'User authentication and authorization', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.98, uptime90d: 99.95, responseTime: 65, category: 'Services', selected: true }, { id: 'payment-gateway', name: 'payment-gateway', displayName: 'Payment Gateway', description: 'Payment processing service', currentStatus: 'maintenance', lastChecked: Date.now(), uptime30d: 97.5, uptime90d: 98.8, responseTime: 250, category: 'Services', selected: false }, { id: 'email-service', name: 'email-service', displayName: 'Email Service', description: 'Transactional email delivery', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.9, uptime90d: 99.85, responseTime: 150, category: 'Services', selected: true }, { id: 'notification-service', name: 'notification-service', displayName: 'Notification Service', description: 'Push notifications and alerts', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.7, uptime90d: 99.8, responseTime: 88, category: 'Services', selected: false }, { id: 'analytics', name: 'analytics', displayName: 'Analytics Engine', description: 'Real-time analytics processing', currentStatus: 'major_outage', lastChecked: Date.now(), uptime30d: 89.5, uptime90d: 94.2, responseTime: 450, category: 'Services', selected: false }, // Monitoring { id: 'monitoring', name: 'monitoring', displayName: 'Monitoring System', description: 'System health and metrics monitoring', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.95, uptime90d: 99.93, responseTime: 78, category: 'Monitoring', selected: true }, { id: 'logging', name: 'logging', displayName: 'Logging Service', description: 'Centralized log management', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.9, uptime90d: 99.88, responseTime: 92, category: 'Monitoring', selected: false } ]; // Set initial data assetsSelector.services = demoServices; // Demo loading state assetsSelector.loading = true; setTimeout(() => { assetsSelector.loading = false; }, 1000); // Create event log const eventLog = document.createElement('div'); eventLog.className = 'event-log'; eventLog.innerHTML = 'Event Log:
'; wrapperElement.appendChild(eventLog); const logEvent = (message: string) => { const time = new Date().toLocaleTimeString(); eventLog.innerHTML += `[${time}] ${message}
`; eventLog.scrollTop = eventLog.scrollHeight; }; // Listen for selection changes assetsSelector.addEventListener('selectionChanged', (event: CustomEvent) => { const selected = event.detail.selectedServices.length; const total = demoServices.length; logEvent(`Selection changed: ${selected}/${total} services selected`); }); // Simulate status updates setInterval(() => { const randomService = demoServices[Math.floor(Math.random() * demoServices.length)]; const statuses: Array = ['operational', 'degraded', 'partial_outage', 'major_outage', 'maintenance']; const newStatus = statuses[Math.floor(Math.random() * statuses.length)]; if (randomService.currentStatus !== newStatus) { const oldStatus = randomService.currentStatus; randomService.currentStatus = newStatus; randomService.lastChecked = Date.now(); assetsSelector.requestUpdate(); logEvent(`${randomService.displayName}: ${oldStatus} → ${newStatus}`); } }, 5000); }} >
Empty State
{ const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any; // No services assetsSelector.services = []; const controls = document.createElement('div'); controls.className = 'demo-controls'; controls.innerHTML = ` `; wrapperElement.appendChild(controls); controls.querySelector('#addServices')?.addEventListener('click', () => { assetsSelector.services = [ { id: 'new-service-1', name: 'new-service-1', displayName: 'New Service 1', description: 'Just added', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 100, uptime90d: 100, responseTime: 50, selected: true }, { id: 'new-service-2', name: 'new-service-2', displayName: 'New Service 2', description: 'Just added', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 100, uptime90d: 100, responseTime: 60, selected: false } ]; }); }} >
Advanced Filtering Demo
{ const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any; // Generate many services for filtering const generateServices = (): IServiceStatus[] => { const services: IServiceStatus[] = []; const regions = ['us-east', 'us-west', 'eu-central', 'ap-south']; const types = ['api', 'web', 'db', 'cache', 'queue']; const statuses: Array = ['operational', 'degraded', 'partial_outage']; regions.forEach(region => { types.forEach(type => { const id = `${region}-${type}`; services.push({ id, name: id, displayName: `${region.toUpperCase()} ${type.toUpperCase()}`, description: `${type} service in ${region} region`, currentStatus: statuses[Math.floor(Math.random() * statuses.length)], lastChecked: Date.now(), uptime30d: 95 + Math.random() * 5, uptime90d: 94 + Math.random() * 6, responseTime: 20 + Math.random() * 200, category: region, selected: Math.random() > 0.5 }); }); }); return services; }; assetsSelector.services = generateServices(); // Demo different filter scenarios const scenarios = [ { name: 'Show All', action: () => { assetsSelector.filterText = ''; assetsSelector.filterCategory = 'all'; assetsSelector.showOnlySelected = false; } }, { name: 'Filter by Text: "api"', action: () => { assetsSelector.filterText = 'api'; assetsSelector.filterCategory = 'all'; assetsSelector.showOnlySelected = false; } }, { name: 'Filter by Region: EU', action: () => { assetsSelector.filterText = ''; assetsSelector.filterCategory = 'eu-central'; assetsSelector.showOnlySelected = false; } }, { name: 'Show Only Selected', action: () => { assetsSelector.filterText = ''; assetsSelector.filterCategory = 'all'; assetsSelector.showOnlySelected = true; } }, { name: 'Complex: "db" in US regions', action: () => { assetsSelector.filterText = 'db'; assetsSelector.filterCategory = 'us-east'; assetsSelector.showOnlySelected = false; } } ]; const controls = document.createElement('div'); controls.className = 'demo-controls'; scenarios.forEach(scenario => { const button = document.createElement('button'); button.className = 'demo-button'; button.textContent = scenario.name; button.onclick = scenario.action; controls.appendChild(button); }); wrapperElement.appendChild(controls); const info = document.createElement('div'); info.className = 'demo-info'; wrapperElement.appendChild(info); // Update info on changes const updateInfo = () => { const filtered = assetsSelector.getFilteredServices(); const selected = assetsSelector.services.filter((s: any) => s.selected).length; info.innerHTML = ` Filter Status:
Total Services: ${assetsSelector.services.length}
Visible Services: ${filtered.length}
Selected Services: ${selected}
Active Filters: ${assetsSelector.filterText ? 'Text="' + assetsSelector.filterText + '" ' : ''}${assetsSelector.filterCategory !== 'all' ? 'Category=' + assetsSelector.filterCategory + ' ' : ''}${assetsSelector.showOnlySelected ? 'Selected Only' : ''} `; }; // Watch for changes assetsSelector.addEventListener('selectionChanged', updateInfo); setInterval(updateInfo, 500); updateInfo(); }} >
Performance Test - Many Services
{ const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any; const controls = document.createElement('div'); controls.className = 'demo-controls'; controls.innerHTML = ` `; wrapperElement.appendChild(controls); const loadServices = (count: number) => { const services: IServiceStatus[] = []; const statuses: Array = ['operational', 'degraded', 'partial_outage', 'major_outage', 'maintenance']; for (let i = 0; i < count; i++) { services.push({ id: `service-${i}`, name: `service-${i}`, displayName: `Service ${i}`, description: `Auto-generated service number ${i}`, currentStatus: statuses[Math.floor(Math.random() * statuses.length)], lastChecked: Date.now() - Math.random() * 3600000, uptime30d: 85 + Math.random() * 15, uptime90d: 80 + Math.random() * 20, responseTime: 10 + Math.random() * 500, category: `Category ${Math.floor(i / 10)}`, selected: Math.random() > 0.7 }); } assetsSelector.loading = true; setTimeout(() => { assetsSelector.services = services; assetsSelector.loading = false; }, 500); }; controls.querySelector('#load50')?.addEventListener('click', () => loadServices(50)); controls.querySelector('#load100')?.addEventListener('click', () => loadServices(100)); controls.querySelector('#load200')?.addEventListener('click', () => loadServices(200)); controls.querySelector('#clear')?.addEventListener('click', () => { assetsSelector.services = []; }); // Start with 50 services loadServices(50); }} >
Loading and Error States
{ const assetsSelector = wrapperElement.querySelector('upl-statuspage-assetsselector') as any; // Start with loading assetsSelector.loading = true; const controls = document.createElement('div'); controls.className = 'demo-controls'; controls.innerHTML = ` `; wrapperElement.appendChild(controls); controls.querySelector('#toggleLoading')?.addEventListener('click', () => { assetsSelector.loading = !assetsSelector.loading; }); controls.querySelector('#simulateError')?.addEventListener('click', () => { assetsSelector.loading = true; setTimeout(() => { assetsSelector.loading = false; assetsSelector.services = []; // You could add an error message property to the component assetsSelector.errorMessage = 'Failed to load services'; }, 1500); }); controls.querySelector('#loadSuccess')?.addEventListener('click', () => { assetsSelector.loading = true; setTimeout(() => { assetsSelector.loading = false; assetsSelector.services = [ { id: 'loaded-1', name: 'loaded-1', displayName: 'Successfully Loaded Service', description: 'This service was loaded after simulated delay', currentStatus: 'operational', lastChecked: Date.now(), uptime30d: 99.9, uptime90d: 99.8, responseTime: 45, selected: true } ]; }, 1000); }); }} >
`;