row_ctrl.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. ///<reference path="../../headers/common.d.ts" />
  2. import _ from 'lodash';
  3. export class DashboardRowCtrl {
  4. static template = `
  5. <a class="dashboard-row__title pointer" ng-click="ctrl.toggle()">
  6. <span class="dashboard-row__chevron">
  7. <i class="fa fa-chevron-down" ng-hide="ctrl.isCollapsed"></i>
  8. <i class="fa fa-chevron-right" ng-show="ctrl.isCollapsed"></i>
  9. </span>
  10. <span class="dashboard-row__title-text">{{ctrl.panel.title | interpolateTemplateVars:this}}</span>
  11. </a>
  12. <div class="dashboard-row__actions">
  13. <a class="pointer" ng-click="ctrl.moveUp()"><span class="fa fa-arrow-up"></i></a>
  14. <a class="pointer" ng-click="ctrl.moveDown()"><span class="fa fa-arrow-down"></i></a>
  15. <a class="pointer" ng-click="ctrl.openSettings()"><span class="fa fa-cog"></i></a>
  16. </div>
  17. `;
  18. dashboard: any;
  19. panel: any;
  20. constructor(private $rootScope) {
  21. this.panel.hiddenPanels = this.panel.hiddenPanels || [];
  22. }
  23. toggle() {
  24. if (this.panel.collapse) {
  25. let panelIndex = _.indexOf(this.dashboard.panels, this.panel);
  26. for (let child of this.panel.hiddenPanels) {
  27. this.dashboard.panels.splice(panelIndex+1, 0, child);
  28. child.y = this.panel.y+1;
  29. console.log('restoring child', child);
  30. }
  31. this.panel.hiddenPanels = [];
  32. this.panel.collapse = false;
  33. return;
  34. }
  35. this.panel.collapse = true;
  36. let foundRow = false;
  37. for (let i = 0; i < this.dashboard.panels.length; i++) {
  38. let panel = this.dashboard.panels[i];
  39. if (panel === this.panel) {
  40. console.log('found row');
  41. foundRow = true;
  42. continue;
  43. }
  44. if (!foundRow) {
  45. continue;
  46. }
  47. if (panel.type === 'row') {
  48. break;
  49. }
  50. this.panel.hiddenPanels.push(panel);
  51. console.log('hiding child', panel.id);
  52. }
  53. for (let hiddenPanel of this.panel.hiddenPanels) {
  54. this.dashboard.removePanel(hiddenPanel, false);
  55. }
  56. }
  57. link(scope, elem) {
  58. elem.addClass('dashboard-row');
  59. scope.$watch('ctrl.panel.collapse', () => {
  60. elem.toggleClass('dashboard-row--collapse', this.panel.collapse === true);
  61. });
  62. }
  63. }