No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

138 líneas
4.6 KiB

  1. import {AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild} from '@angular/core';
  2. import {MatSort, Sort, MatSortModule} from "@angular/material/sort";
  3. import {MatTableDataSource, MatTableModule} from "@angular/material/table";
  4. import {ActivatedRoute, Router, RouterLink, RouterLinkActive} from "@angular/router";
  5. import {Subscription} from "rxjs";
  6. import {PartnerJsonld, PartnerService} from "@app/core/api/v1";
  7. import {MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent} from "@angular/material/paginator";
  8. import {OrderFilter} from "@app/_models/orderFilter";
  9. import {ApiConverter} from "@app/_helpers/api.converter";
  10. @Component({
  11. selector: 'app-partners',
  12. templateUrl: './partners.component.html',
  13. styleUrl: './partners.component.scss',
  14. standalone: true,
  15. imports: [MatTableModule, MatSortModule, MatPaginatorModule, RouterLink, RouterLinkActive],
  16. })
  17. export class PartnersComponent implements OnInit, AfterViewInit {
  18. @ViewChild(MatSort) sort;
  19. @ViewChild(MatPaginator) paginator: MatPaginator;
  20. protected partnersSub: Subscription;
  21. protected partners: Array<PartnerJsonld>;
  22. protected length: number;
  23. protected pageEvent: PageEvent;
  24. protected currentPageSize: number;
  25. protected currentPageIndex: number;
  26. protected nameOrderAsc: OrderFilter;
  27. protected cityOrderAsc: OrderFilter;
  28. protected websiteOrderAsc: OrderFilter;
  29. protected dataType!: string;
  30. protected displayedColumns: string[];
  31. protected dataSource;
  32. constructor(
  33. private route: ActivatedRoute,
  34. private partnerService: PartnerService,
  35. private router: Router
  36. ) {
  37. this.sort = new MatSort();
  38. this.paginator = new MatPaginator(new MatPaginatorIntl(), ChangeDetectorRef.prototype);
  39. this.partnersSub = new Subscription();
  40. this.partners = [];
  41. this.displayedColumns = ['pos', 'name', 'address', 'website'];
  42. this.nameOrderAsc = OrderFilter.Asc;
  43. this.cityOrderAsc = OrderFilter.Asc;
  44. this.websiteOrderAsc = OrderFilter.Asc;
  45. this.dataSource = new MatTableDataSource<PartnerJsonld>(this.partners);
  46. this.pageEvent = new PageEvent();
  47. this.length = 0;
  48. this.currentPageSize = 10;
  49. this.currentPageIndex = 0;
  50. }
  51. ngOnInit() {
  52. this.dataType = this.route.snapshot.data['dataType'];
  53. this.getData();
  54. }
  55. ngAfterViewInit() {
  56. this.dataSource.sort = this.sort;
  57. this.dataSource.paginator = this.paginator;
  58. }
  59. /** Announce the change in sort state for assistive technology. */
  60. onSortChange(sortState: Sort) {
  61. // Reset page index to first page
  62. this.currentPageIndex = 0;
  63. let order: OrderFilter;
  64. if (sortState.direction === "") {
  65. order = OrderFilter.Undefined;
  66. } else {
  67. order = sortState.direction;
  68. }
  69. this.nameOrderAsc = OrderFilter.Undefined;
  70. this.cityOrderAsc = OrderFilter.Undefined;
  71. this.websiteOrderAsc = OrderFilter.Undefined;
  72. switch (sortState.active) {
  73. case "name":
  74. this.nameOrderAsc = order;
  75. break;
  76. case "address":
  77. this.cityOrderAsc = order;
  78. break;
  79. case "website":
  80. this.websiteOrderAsc = order;
  81. break;
  82. }
  83. this.getData();
  84. }
  85. getData()
  86. {
  87. // switch over this.dataType (customers, etc.)
  88. this.partnersSub = this.partnerService.partnersGetCollection(
  89. this.currentPageIndex + 1,
  90. this.dataType,
  91. undefined,
  92. this.nameOrderAsc,
  93. this.cityOrderAsc,
  94. this.websiteOrderAsc
  95. ).subscribe(
  96. data => {
  97. this.partners = data["hydra:member"];
  98. this.dataSource = new MatTableDataSource<PartnerJsonld>(this.partners);
  99. console.log(data);
  100. this.length = Number(data["hydra:totalItems"]);
  101. this.paginator.length = this.length;
  102. }
  103. );
  104. }
  105. handlePageEvent(e: PageEvent) {
  106. this.pageEvent = e;
  107. this.length = e.length;
  108. this.currentPageIndex = e.pageIndex.valueOf();
  109. this.currentPageSize = e.pageSize.valueOf();
  110. this.getData();
  111. }
  112. navigateToDetails(element: any) {
  113. const partner: PartnerJsonld = element as PartnerJsonld;
  114. // this.partnerService.setPartnerData(partner);
  115. //console.log(partner['@id']);
  116. console.log(ApiConverter.extractId(partner.id));
  117. this.router.navigate(['/customers', ApiConverter.extractId(partner.id)]);
  118. }
  119. protected readonly PartnerJsonld = PartnerJsonld;
  120. }