polyv-live-cli
Version:
CLI tool for managing PolyV live streaming services.
341 lines โข 10.2 kB
JavaScript
;
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