moduleMenu.tsx 2.4 KB

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