module.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. ///<reference path="../../../headers/common.d.ts" />
  2. import _ from 'lodash';
  3. import config from 'app/core/config';
  4. import {PanelCtrl} from 'app/plugins/sdk';
  5. import {impressions} from 'app/features/dashboard/impression_store';
  6. class DashListCtrl extends PanelCtrl {
  7. static templateUrl = 'module.html';
  8. groups: any[];
  9. modes: any[];
  10. folderTitle: any;
  11. panelDefaults = {
  12. query: '',
  13. limit: 10,
  14. tags: [],
  15. recent: false,
  16. search: false,
  17. starred: true,
  18. headings: true,
  19. folderId: 0,
  20. };
  21. /** @ngInject */
  22. constructor($scope, $injector, private backendSrv) {
  23. super($scope, $injector);
  24. _.defaults(this.panel, this.panelDefaults);
  25. if (this.panel.tag) {
  26. this.panel.tags = [this.panel.tag];
  27. delete this.panel.tag;
  28. }
  29. this.events.on('refresh', this.onRefresh.bind(this));
  30. this.events.on('init-edit-mode', this.onInitEditMode.bind(this));
  31. this.groups = [
  32. {list: [], show: false, header: "Starred dashboards",},
  33. {list: [], show: false, header: "Recently viewed dashboards"},
  34. {list: [], show: false, header: "Search"},
  35. ];
  36. // update capability
  37. if (this.panel.mode) {
  38. if (this.panel.mode === 'starred') {
  39. this.panel.starred = true;
  40. this.panel.headings = false;
  41. }
  42. if (this.panel.mode === 'recently viewed') {
  43. this.panel.recent = true;
  44. this.panel.starred = false;
  45. this.panel.headings = false;
  46. }
  47. if (this.panel.mode === 'search') {
  48. this.panel.search = true;
  49. this.panel.starred = false;
  50. this.panel.headings = false;
  51. }
  52. delete this.panel.mode;
  53. }
  54. }
  55. onInitEditMode() {
  56. this.editorTabIndex = 1;
  57. this.modes = ['starred', 'search', 'recently viewed'];
  58. this.addEditorTab('Options', 'public/app/plugins/panel/dashlist/editor.html');
  59. if (!this.panel.folderId) {
  60. this.folderTitle = "All";
  61. }
  62. }
  63. onRefresh() {
  64. var promises = [];
  65. promises.push(this.getRecentDashboards());
  66. promises.push(this.getStarred());
  67. promises.push(this.getSearch());
  68. return Promise.all(promises)
  69. .then(this.renderingCompleted.bind(this));
  70. }
  71. getSearch() {
  72. this.groups[2].show = this.panel.search;
  73. if (!this.panel.search) {
  74. return Promise.resolve();
  75. }
  76. var params = {
  77. limit: this.panel.limit,
  78. query: this.panel.query,
  79. tag: this.panel.tags,
  80. folderId: this.panel.folderId
  81. };
  82. return this.backendSrv.search(params).then(result => {
  83. this.groups[2].list = result;
  84. });
  85. }
  86. getStarred() {
  87. this.groups[0].show = this.panel.starred;
  88. if (!this.panel.starred) {
  89. return Promise.resolve();
  90. }
  91. var params = {limit: this.panel.limit, starred: "true"};
  92. return this.backendSrv.search(params).then(result => {
  93. this.groups[0].list = result;
  94. });
  95. }
  96. getRecentDashboards() {
  97. this.groups[1].show = this.panel.recent;
  98. if (!this.panel.recent) {
  99. return Promise.resolve();
  100. }
  101. var dashIds = _.take(impressions.getDashboardOpened(), this.panel.limit);
  102. return this.backendSrv.search({dashboardIds: dashIds, limit: this.panel.limit}).then(result => {
  103. this.groups[1].list = dashIds.map(orderId => {
  104. return _.find(result, dashboard => {
  105. return dashboard.id === orderId;
  106. });
  107. }).filter(el => {
  108. return el !== undefined;
  109. });
  110. });
  111. }
  112. onFolderChange(folder) {
  113. this.panel.folderId = folder.id;
  114. this.panel.folderTitle = folder.title;
  115. this.refresh();
  116. }
  117. }
  118. export {DashListCtrl, DashListCtrl as PanelCtrl};