module.ts 3.5 KB

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