UNPKG

polyv-live-cli

Version:

CLI tool for managing PolyV live streaming services.

341 lines โ€ข 10.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContextMenuFactory = void 0; class ContextMenuFactory { static generateMenuItems(componentType, componentId, additionalContext) { switch (componentType) { case 'channel-status': return this.createChannelStatusMenu(componentId, additionalContext); case 'system-resource': return this.createSystemResourceMenu(); case 'stream-metrics': return this.createStreamMetricsMenu(); case 'help-panel': return this.createHelpPanelMenu(); case 'monitoring-dashboard': return this.createDashboardMenu(); default: return this.createGenericMenu(componentType, componentId); } } static createChannelStatusMenu(_channelId, context) { const isLive = context?.status === 'live'; const hasChannelData = context?.channelData !== undefined; const items = [ { label: 'View Details', action: 'channel:view-details', icon: '๐Ÿ“‹', shortcut: 'Enter', enabled: hasChannelData, }, { label: 'Refresh Data', action: 'channel:refresh', icon: '๐Ÿ”„', shortcut: 'F5', }, { label: 'separator', action: '', separator: true, }, ]; if (isLive) { items.push({ label: 'Stop Stream', action: 'channel:stop-stream', icon: 'โน๏ธ', shortcut: 'S', }, { label: 'View Stream Info', action: 'channel:stream-info', icon: '๐Ÿ“Š', }); } else { items.push({ label: 'Start Stream', action: 'channel:start-stream', icon: 'โ–ถ๏ธ', shortcut: 'S', enabled: hasChannelData, }); } items.push({ label: 'separator', action: '', separator: true, }, { label: 'Copy Channel ID', action: 'channel:copy-id', icon: '๐Ÿ“‹', shortcut: 'Ctrl+C', }, { label: 'Export Data', action: 'channel:export', icon: '๐Ÿ’พ', }, { label: 'separator', action: '', separator: true, }, { label: 'Delete Channel', action: 'channel:delete', icon: '๐Ÿ—‘๏ธ', shortcut: 'Del', enabled: hasChannelData && !isLive, }); return items.filter(item => item.label !== 'separator'); } static createSystemResourceMenu(_componentId) { return [ { label: 'Refresh Metrics', action: 'system:refresh', icon: '๐Ÿ”„', shortcut: 'F5', }, { label: 'View History', action: 'system:view-history', icon: '๐Ÿ“ˆ', shortcut: 'H', }, { label: 'separator', action: '', separator: true, }, { label: 'Configure Alerts', action: 'system:configure-alerts', icon: 'โš ๏ธ', }, { label: 'Export Metrics', action: 'system:export', icon: '๐Ÿ’พ', }, { label: 'separator', action: '', separator: true, }, { label: 'Reset Counters', action: 'system:reset', icon: '๐Ÿ”„', }, { label: 'Panel Settings', action: 'system:settings', icon: 'โš™๏ธ', }, ].filter(item => item.label !== 'separator'); } static createStreamMetricsMenu(_componentId) { return [ { label: 'Refresh Metrics', action: 'metrics:refresh', icon: '๐Ÿ”„', shortcut: 'F5', }, { label: 'View Details', action: 'metrics:view-details', icon: '๐Ÿ“Š', shortcut: 'Enter', }, { label: 'separator', action: '', separator: true, }, { label: 'Reset Statistics', action: 'metrics:reset', icon: '๐Ÿ”„', }, { label: 'Export Data', action: 'metrics:export', icon: '๐Ÿ’พ', }, { label: 'separator', action: '', separator: true, }, { label: 'Configure Thresholds', action: 'metrics:configure', icon: 'โš™๏ธ', }, { label: 'Toggle Fullscreen', action: 'metrics:fullscreen', icon: '๐Ÿ”ณ', shortcut: 'F11', }, ].filter(item => item.label !== 'separator'); } static createHelpPanelMenu() { return [ { label: 'Close Help', action: 'help:close', icon: 'โŒ', shortcut: 'Esc', }, { label: 'Print Help', action: 'help:print', icon: '๐Ÿ–จ๏ธ', shortcut: 'Ctrl+P', }, { label: 'separator', action: '', separator: true, }, { label: 'About', action: 'help:about', icon: 'โ„น๏ธ', }, ].filter(item => item.label !== 'separator'); } static createDashboardMenu() { return [ { label: 'Refresh All', action: 'dashboard:refresh-all', icon: '๐Ÿ”„', shortcut: 'F5', }, { label: 'Clear Screen', action: 'dashboard:clear', icon: '๐Ÿงน', shortcut: 'Ctrl+L', }, { label: 'separator', action: '', separator: true, }, { label: 'Switch Layout', action: 'dashboard:switch-layout', icon: '๐Ÿ”ง', submenu: [ { label: 'Compact Layout', action: 'layout:compact', shortcut: '1', }, { label: 'Standard Layout', action: 'layout:standard', shortcut: '2', }, { label: 'Detailed Layout', action: 'layout:detailed', shortcut: '3', }, ], }, { label: 'Settings', action: 'dashboard:settings', icon: 'โš™๏ธ', }, { label: 'separator', action: '', separator: true, }, { label: 'Help', action: 'dashboard:help', icon: 'โ“', shortcut: 'F1', }, { label: 'Exit', action: 'dashboard:exit', icon: '๐Ÿšช', shortcut: 'Q', }, ].filter(item => item.label !== 'separator'); } static createGenericMenu(_componentType, _componentId) { return [ { label: 'Focus Component', action: 'component:focus', icon: '๐ŸŽฏ', shortcut: 'Tab', }, { label: 'Refresh', action: 'component:refresh', icon: '๐Ÿ”„', shortcut: 'F5', }, { label: 'separator', action: '', separator: true, }, { label: 'Properties', action: 'component:properties', icon: '๐Ÿ“‹', }, { label: 'Toggle Fullscreen', action: 'component:fullscreen', icon: '๐Ÿ”ณ', shortcut: 'F11', }, { label: 'separator', action: '', separator: true, }, { label: 'Help', action: 'component:help', icon: 'โ“', shortcut: 'F1', }, ].filter(item => item.label !== 'separator'); } static filterMenuItems(items, _context = {}) { return items.filter(item => { if (item.enabled === false) { return false; } return true; }); } static addShortcutsToMenuItems(items, shortcuts) { return items.map(item => { for (const [key, shortcutConfig] of shortcuts) { if (shortcutConfig.action === item.action) { return { ...item, shortcut: item.shortcut || key.toUpperCase(), }; } } return item; }); } } exports.ContextMenuFactory = ContextMenuFactory; //# sourceMappingURL=context-menu-factory.js.map