PanelModel.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import {Emitter} from 'app/core/core';
  2. export interface GridPos {
  3. x: number;
  4. y: number;
  5. w: number;
  6. h: number;
  7. }
  8. const notPersistedProperties: {[str: string]: boolean} = {
  9. "events": true,
  10. "fullscreen": true,
  11. "isEditing": true,
  12. };
  13. export class PanelModel {
  14. id: number;
  15. gridPos: GridPos;
  16. type: string;
  17. title: string;
  18. alert?: any;
  19. // non persisted
  20. fullscreen: boolean;
  21. isEditing: boolean;
  22. events: Emitter;
  23. constructor(model) {
  24. this.events = new Emitter();
  25. // copy properties from persisted model
  26. for (var property in model) {
  27. this[property] = model[property];
  28. }
  29. }
  30. getSaveModel() {
  31. const model: any = {};
  32. for (var property in this) {
  33. if (notPersistedProperties[property] || !this.hasOwnProperty(property)) {
  34. continue;
  35. }
  36. model[property] = this[property];
  37. }
  38. return model;
  39. }
  40. setViewMode(fullscreen: boolean, isEditing: boolean) {
  41. this.fullscreen = fullscreen;
  42. this.isEditing = isEditing;
  43. this.events.emit('panel-size-changed');
  44. }
  45. updateGridPos(newPos: GridPos) {
  46. let sizeChanged = false;
  47. if (this.gridPos.w !== newPos.w || this.gridPos.h !== newPos.h) {
  48. sizeChanged = true;
  49. }
  50. this.gridPos.x = newPos.x;
  51. this.gridPos.y = newPos.y;
  52. this.gridPos.w = newPos.w;
  53. this.gridPos.h = newPos.h;
  54. if (sizeChanged) {
  55. console.log('PanelModel sizeChanged event and render events fired');
  56. this.events.emit('panel-size-changed');
  57. }
  58. }
  59. }