moduleMenu.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import config from 'app/core/config';
  2. import { contextSrv } from 'app/core/services/context_srv';
  3. import { getExploreUrl } from 'app/core/utils/explore';
  4. import { updateLocation } from 'app/core/actions';
  5. import { getTimeSrv } from 'app/features/dashboard/time_srv';
  6. import { store } from 'app/store/configureStore';
  7. import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
  8. import appEvents from 'app/core/app_events';
  9. import { PanelHeaderMenuItemProps, PanelHeaderMenuItemTypes } from 'app/types/panel';
  10. export const moduleMenu = (panel, dataSourceApi, timeSeries) => {
  11. const onExploreClick = async () => {
  12. const datasourceSrv = getDatasourceSrv();
  13. const timeSrv = getTimeSrv();
  14. const url = await getExploreUrl(panel, panel.targets, dataSourceApi, datasourceSrv, timeSrv);
  15. if (url) {
  16. store.dispatch(updateLocation({ path: url }));
  17. }
  18. };
  19. const onExportCsv = () => {
  20. const model = {} as { seriesList: string };
  21. model.seriesList = timeSeries;
  22. appEvents.emit('show-modal', {
  23. templateHtml: '<export-data-modal data="model.seriesList"></export-data-modal>',
  24. model,
  25. modalClass: 'modal--narrow',
  26. });
  27. };
  28. const getAdditionalMenuItems = () => {
  29. const items = [];
  30. if (
  31. config.exploreEnabled &&
  32. contextSrv.isEditor &&
  33. dataSourceApi &&
  34. (dataSourceApi.meta.explore || dataSourceApi.meta.id === 'mixed')
  35. ) {
  36. items.push({
  37. type: PanelHeaderMenuItemTypes.Link,
  38. text: 'Explore',
  39. handleClick: onExploreClick,
  40. iconClassName: 'fa fa-fw fa-rocket',
  41. shortcut: 'x',
  42. });
  43. }
  44. return items;
  45. };
  46. const getAdditionalSubMenuItems = () => {
  47. return [
  48. {
  49. type: PanelHeaderMenuItemTypes.Link,
  50. text: 'Hello Sub Menu',
  51. handleClick: () => {
  52. alert('Hello world from moduleMenu');
  53. },
  54. shortcut: 'hi',
  55. },
  56. {
  57. type: PanelHeaderMenuItemTypes.Link,
  58. text: 'Export CSV',
  59. handleClick: onExportCsv,
  60. },
  61. ] as PanelHeaderMenuItemProps[];
  62. };
  63. return {
  64. additionalMenuItems: getAdditionalMenuItems(),
  65. additionalSubMenuItems: getAdditionalSubMenuItems(),
  66. };
  67. };