initDashboard.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Services & Utils
  2. import { createErrorNotification } from 'app/core/copy/appNotification';
  3. // Actions
  4. import { updateLocation } from 'app/core/actions';
  5. import { notifyApp } from 'app/core/actions';
  6. import locationUtil from 'app/core/utils/location_util';
  7. import { setDashboardLoadingState, ThunkResult, setDashboardModel } from './actions';
  8. // Types
  9. import { DashboardLoadingState } from 'app/types/dashboard';
  10. import { DashboardModel } from './DashboardModel';
  11. export interface InitDashboardArgs {
  12. injector: any;
  13. scope: any;
  14. urlUid?: string;
  15. urlSlug?: string;
  16. urlType?: string;
  17. }
  18. export function initDashboard({ injector, scope, urlUid, urlSlug, urlType }: InitDashboardArgs): ThunkResult<void> {
  19. return async dispatch => {
  20. const loaderSrv = injector.get('dashboardLoaderSrv');
  21. dispatch(setDashboardLoadingState(DashboardLoadingState.Fetching));
  22. let dashDTO = null;
  23. try {
  24. // fetch dashboard from api
  25. dashDTO = await loaderSrv.loadDashboard(urlType, urlSlug, urlUid);
  26. } catch (err) {
  27. dispatch(setDashboardLoadingState(DashboardLoadingState.Error));
  28. console.log(err);
  29. return;
  30. }
  31. // set initializing state
  32. dispatch(setDashboardLoadingState(DashboardLoadingState.Initializing));
  33. // create model
  34. let dashboard: DashboardModel;
  35. try {
  36. dashboard = new DashboardModel(dashDTO.dashboard, dashDTO.meta);
  37. } catch (err) {
  38. dispatch(setDashboardLoadingState(DashboardLoadingState.Error));
  39. console.log(err);
  40. return;
  41. }
  42. // init services
  43. injector.get('timeSrv').init(dashboard);
  44. injector.get('annotationsSrv').init(dashboard);
  45. // template values service needs to initialize completely before
  46. // the rest of the dashboard can load
  47. try {
  48. await injector.get('variableSrv').init(dashboard);
  49. } catch (err) {
  50. dispatch(notifyApp(createErrorNotification('Templating init failed', err.toString())));
  51. console.log(err);
  52. }
  53. try {
  54. dashboard.processRepeats();
  55. dashboard.updateSubmenuVisibility();
  56. dashboard.autoFitPanels(window.innerHeight);
  57. // init unsaved changes tracking
  58. injector.get('unsavedChangesSrv').init(dashboard, scope);
  59. scope.dashboard = dashboard;
  60. injector.get('dashboardViewStateSrv').create(scope);
  61. injector.get('keybindingSrv').setupDashboardBindings(scope, dashboard);
  62. } catch (err) {
  63. dispatch(notifyApp(createErrorNotification('Dashboard init failed', err.toString())));
  64. console.log(err);
  65. }
  66. dispatch(setDashboardModel(dashboard));
  67. };
  68. }