Submit
Path:
~
/
/
usr
/
share
/
grafana
/
public
/
app
/
features
/
commandPalette
/
actions
/
File Content:
staticActions.ts
import { NavModelItem } from '@grafana/data'; import { enrichHelpItem } from 'app/core/components/AppChrome/MegaMenu/utils'; import { t } from 'app/core/internationalization'; import { changeTheme } from 'app/core/services/theme'; import { CommandPaletteAction } from '../types'; import { ACTIONS_PRIORITY, DEFAULT_PRIORITY, PREFERENCES_PRIORITY } from '../values'; import getExtensionActions from './extensionActions'; // TODO: Clean this once ID is mandatory on nav items function idForNavItem(navItem: NavModelItem) { return 'navModel.' + navItem.id ?? navItem.url ?? navItem.text ?? navItem.subTitle; } function navTreeToActions(navTree: NavModelItem[], parents: NavModelItem[] = []): CommandPaletteAction[] { const navActions: CommandPaletteAction[] = []; for (let navItem of navTree) { // help node needs enriching with the frontend links if (navItem.id === 'help') { navItem = enrichHelpItem({ ...navItem }); delete navItem.url; } const { url, target, text, isCreateAction, children, onClick, keywords } = navItem; const hasChildren = Boolean(children?.length); if (!(url || onClick || hasChildren)) { continue; } let urlOrCallback: CommandPaletteAction['url'] = url; if ( url && (navItem.id === 'connections-add-new-connection' || navItem.id === 'standalone-plugin-page-/connections/add-new-connection') ) { urlOrCallback = (searchQuery: string) => { const matchingKeyword = keywords?.find((keyword) => keyword.toLowerCase().includes(searchQuery.toLowerCase())); return matchingKeyword ? `${url}?search=${matchingKeyword}` : url; }; } const section = isCreateAction ? t('command-palette.section.actions', 'Actions') : t('command-palette.section.pages', 'Pages'); const priority = isCreateAction ? ACTIONS_PRIORITY : DEFAULT_PRIORITY; const subtitle = parents.map((parent) => parent.text).join(' > '); const action: CommandPaletteAction = { id: idForNavItem(navItem), name: text, section, url: urlOrCallback, target, parent: parents.length > 0 && !isCreateAction ? idForNavItem(parents[parents.length - 1]) : undefined, perform: onClick, keywords: keywords?.join(' '), priority, subtitle: isCreateAction ? undefined : subtitle, }; navActions.push(action); if (children?.length) { const childActions = navTreeToActions(children, [...parents, navItem]); navActions.push(...childActions); } } return navActions; } export default (navBarTree: NavModelItem[]): CommandPaletteAction[] => { const globalActions: CommandPaletteAction[] = [ { id: 'preferences/theme', name: t('command-palette.action.change-theme', 'Change theme...'), keywords: 'interface color dark light', section: t('command-palette.section.preferences', 'Preferences'), priority: PREFERENCES_PRIORITY, }, { id: 'preferences/dark-theme', name: t('command-palette.action.dark-theme', 'Dark'), keywords: 'dark theme', perform: () => changeTheme('dark'), parent: 'preferences/theme', priority: PREFERENCES_PRIORITY, }, { id: 'preferences/light-theme', name: t('command-palette.action.light-theme', 'Light'), keywords: 'light theme', perform: () => changeTheme('light'), parent: 'preferences/theme', priority: PREFERENCES_PRIORITY, }, ]; const extensionActions = getExtensionActions(); const navBarActions = navTreeToActions(navBarTree); return [...globalActions, ...extensionActions, ...navBarActions]; };
Edit
Rename
Chmod
Delete
FILE
FOLDER
INFO
Name
Size
Permission
Action
dashboardActions.test.ts
5828 bytes
0644
dashboardActions.ts
4200 bytes
0644
extensionActions.ts
811 bytes
0644
staticActions.ts
3659 bytes
0644
useActions.ts
1219 bytes
0644
N4ST4R_ID | Naxtarrr