default-listable.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { IListable } from '../interfaces/listable-interface';
  2. export abstract class DefaultListable<T> implements IListable<T> {
  3. private isForSearch: boolean;
  4. private isForDelete: boolean;
  5. private _elements: Array<T>;
  6. private _selectedIndex: number;
  7. constructor(
  8. ) {
  9. this.isForSearch = false;
  10. this.isForDelete = false;
  11. this._elements = [];
  12. this._selectedIndex = -1;
  13. }
  14. /**
  15. *
  16. */
  17. set elements(_elements: Array<T>) {
  18. this._elements = _elements;
  19. }
  20. /**
  21. *
  22. */
  23. set selectedIndex(_selectedIndex: number) {
  24. this._selectedIndex = _selectedIndex;
  25. }
  26. /**
  27. *
  28. */
  29. get elements() {
  30. return this._elements;
  31. }
  32. /**
  33. *
  34. */
  35. get selectedIndex(): number {
  36. return this._selectedIndex;
  37. }
  38. /**
  39. *
  40. */
  41. add(T: any): void {
  42. this._elements.push(T);
  43. }
  44. /**
  45. *
  46. */
  47. remove(T: any): void {
  48. let index = this.elements.indexOf(T);
  49. this._elements.slice(index, 1);
  50. }
  51. /**
  52. *
  53. */
  54. get(T: any): T {
  55. let index = this.elements.indexOf(T);
  56. return this._elements[index];
  57. }
  58. /**
  59. *
  60. */
  61. list(): Array<T> {
  62. return this._elements;
  63. }
  64. /**
  65. *
  66. */
  67. search(by: string): Array<T> {
  68. return null;
  69. }
  70. /**
  71. *
  72. */
  73. toggleSearch(): void {
  74. this.isForSearch = !this.isForSearch;
  75. }
  76. /**
  77. *
  78. */
  79. toggleDelete(index: number): void {
  80. this.selectedIndex = index;
  81. if (this.selectedIndex != -1) {
  82. this.isForDelete = true;
  83. } else {
  84. this.isForDelete = !this.isForDelete;
  85. }
  86. }
  87. /**
  88. *
  89. */
  90. isSearching(): boolean {
  91. return this.isForSearch;
  92. }
  93. /**
  94. *
  95. */
  96. isDeleting(): boolean {
  97. return this.isForDelete;
  98. }
  99. }