module.ts 3.7 KB

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