mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* feat: add a reactive extension registry Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: add hooks to work with the reactive registry Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: start using the reactive registry Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: update the "command palette" extension point to use the hook * feat: update the "alerting" extension point to use the hooks Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: update the "explore" extension point to use the hooks Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: update the "datasources config" extension point to use the hooks Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: update the "panel menu" extension point to use the hooks Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: update the "pyroscope datasource" extension point to use the hooks Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com> * feat: update the "user profile page" extension point to use the hooks * chore: update betterer * fix: update the hooks to not re-render unnecessarily * chore: remove the old `createPluginExtensionRegistry` impementation * chore: add "TODO" for `PanelMenuBehaviour` extension point * feat: update the return value of the hooks to contain a `{ isLoading }` param * tests: add more tests for the usePluginExtensions() hook * fix: exclude the cloud-home-app from being non-awaited * refactor: use uuidv4() for random ID generation (for the registry object) * fix: linting issue * feat: use the hooks for the new alerting extension point * feat: use `useMemo()` for `AlertInstanceAction` extension point context --------- Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
import { useMemo } from 'react';
|
|
|
|
import { PluginExtensionCommandPaletteContext, PluginExtensionPoints } from '@grafana/data';
|
|
import { usePluginLinkExtensions } 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 { extensions } = usePluginLinkExtensions({
|
|
extensionPointId: PluginExtensionPoints.CommandPalette,
|
|
context,
|
|
limitPerPlugin: 3,
|
|
});
|
|
|
|
return useMemo(() => {
|
|
return extensions.map((extension) => ({
|
|
section: extension.category ?? 'Extensions',
|
|
priority: EXTENSIONS_PRIORITY,
|
|
id: extension.id,
|
|
name: extension.title,
|
|
target: extension.path,
|
|
perform: () => extension.onClick && extension.onClick(),
|
|
}));
|
|
}, [extensions]);
|
|
}
|