2025-04-01 10:38:02 +09:00

30 lines
993 B
TypeScript

import { useMemo } from 'react';
import { PluginExtensionCommandPaletteContext, PluginExtensionPoints } from '@grafana/data';
import { usePluginLinks } from '@grafana/runtime';
import { CommandPaletteAction } from '../types';
import { EXTENSIONS_PRIORITY } from '../values';
// NOTE: we are defining this here, as if we would define it in the hook, it would be recreated on every render, which would cause unnecessary re-renders.
const context: PluginExtensionCommandPaletteContext = {};
export default function useExtensionActions(): CommandPaletteAction[] {
const { links } = usePluginLinks({
extensionPointId: PluginExtensionPoints.CommandPalette,
context,
limitPerPlugin: 3,
});
return useMemo(() => {
return links.map((link) => ({
section: link.category ?? 'Extensions',
priority: EXTENSIONS_PRIORITY,
id: link.id,
name: link.title,
target: link.path,
perform: () => link.onClick && link.onClick(),
}));
}, [links]);
}