Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

172 lignes
6.4 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 {ApiHelperService} from "@app/_helpers/api-helper.service";
  10. import {NgIf} from "@angular/common";
  11. import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap";
  12. import {NewPartnerComponent} from "@app/_views/partners/new-partner/new-partner.component";
  13. import {TranslateModule, TranslateService} from "@ngx-translate/core";
  14. import {ModalStatus} from "@app/_helpers/modal.states";
  15. import TypeEnum = PartnerJsonld.PartnerTypeEnum;
  16. @Component({
  17. selector: 'app-partners',
  18. templateUrl: './partners.component.html',
  19. styleUrl: './partners.component.scss',
  20. standalone: true,
  21. imports: [MatTableModule, MatSortModule, MatPaginatorModule, RouterLink, RouterLinkActive, NgIf, TranslateModule],
  22. })
  23. export class PartnersComponent implements OnInit, AfterViewInit {
  24. @ViewChild(MatSort) partnersSort;
  25. @ViewChild(MatPaginator) partnersPaginator: MatPaginator;
  26. protected partnersSub: Subscription;
  27. protected partners: Array<PartnerJsonld>;
  28. protected nameOrderAsc: OrderFilter;
  29. protected cityOrderAsc: OrderFilter;
  30. protected websiteOrderAsc: OrderFilter;
  31. protected dataType!: string;
  32. protected headline: string;
  33. protected partnerNameOne: string;
  34. protected displayedColumns: string[];
  35. protected partnersDataSource;
  36. protected partnersLength: number;
  37. protected partnersPageEvent: PageEvent;
  38. protected partnersPageSize: number;
  39. protected partnersPageIndex: number;
  40. protected modalOptions: NgbModalOptions = {
  41. centered: true
  42. };
  43. constructor(
  44. private route: ActivatedRoute,
  45. private partnerService: PartnerService,
  46. private router: Router,
  47. private modalService: NgbModal,
  48. private translateService: TranslateService,
  49. protected apiHelperService: ApiHelperService,
  50. ) {
  51. this.partnersSort = new MatSort();
  52. this.partnersPaginator = new MatPaginator(new MatPaginatorIntl(), ChangeDetectorRef.prototype);
  53. this.partnersSub = new Subscription();
  54. this.partners = [];
  55. this.displayedColumns = ['pos', 'image', 'name', 'address', 'website'];
  56. this.nameOrderAsc = OrderFilter.Asc;
  57. this.cityOrderAsc = OrderFilter.Asc;
  58. this.websiteOrderAsc = OrderFilter.Asc;
  59. this.partnersDataSource = new MatTableDataSource<PartnerJsonld>(this.partners);
  60. this.partnersLength = 0;
  61. this.partnersPageEvent = new PageEvent();
  62. this.partnersPageSize = 10;
  63. this.partnersPageIndex = 0;
  64. this.headline = "";
  65. this.partnerNameOne = "";
  66. }
  67. ngOnInit() {
  68. this.dataType = this.route.snapshot.data['dataType'];
  69. // this.translateService.use(this.translateService.getDefaultLang());
  70. this.translateService.get('basic.' + this.dataType).subscribe((translation: string) => {
  71. this.headline = translation;
  72. });
  73. this.translateService.get('basic.' + this.dataType + 'One').subscribe((translation: string) => {
  74. this.partnerNameOne = translation;
  75. });
  76. this.getPartnersData();
  77. }
  78. ngAfterViewInit() {
  79. this.partnersDataSource.sort = this.partnersSort;
  80. this.partnersDataSource.paginator = this.partnersPaginator;
  81. }
  82. getPartnersData() {
  83. this.partnersSub = this.partnerService.partnersGetCollection(
  84. this.partnersPageIndex + 1,
  85. this.partnersPageSize,
  86. this.dataType,
  87. undefined,
  88. undefined,
  89. this.nameOrderAsc,
  90. this.cityOrderAsc,
  91. this.websiteOrderAsc
  92. ).subscribe(
  93. data => {
  94. this.partners = data["hydra:member"];
  95. this.partnersDataSource = new MatTableDataSource<PartnerJsonld>(this.partners);
  96. this.partnersLength = Number(data["hydra:totalItems"]);
  97. this.partnersPaginator.length = this.partnersLength;
  98. }
  99. );
  100. // switch over this.dataType (customers, etc.)
  101. }
  102. /** Announce the change in sort state for assistive technology. */
  103. onSortChange(sortState: Sort) {
  104. // Reset page index to first page
  105. this.partnersPageIndex = 0;
  106. let order: OrderFilter;
  107. if (sortState.direction === "") {
  108. order = OrderFilter.Undefined;
  109. } else {
  110. order = sortState.direction;
  111. }
  112. this.nameOrderAsc = OrderFilter.Undefined;
  113. this.cityOrderAsc = OrderFilter.Undefined;
  114. this.websiteOrderAsc = OrderFilter.Undefined;
  115. switch (sortState.active) {
  116. case "name":
  117. this.nameOrderAsc = order;
  118. break;
  119. case "address":
  120. this.cityOrderAsc = order;
  121. break;
  122. case "website":
  123. this.websiteOrderAsc = order;
  124. break;
  125. }
  126. this.getPartnersData();
  127. }
  128. handlePageEvent(e: PageEvent) {
  129. this.partnersPageEvent = e;
  130. this.partnersLength = e.length;
  131. this.partnersPageIndex = e.pageIndex.valueOf();
  132. this.partnersPageSize = e.pageSize.valueOf();
  133. this.getPartnersData();
  134. }
  135. navigateToPartnerDetails(element: any) {
  136. const partner: PartnerJsonld = element as PartnerJsonld;
  137. this.router.navigate(['/' + partner.partnerType, this.apiHelperService.extractId(partner.id)]);
  138. }
  139. openModalNewPartner() {
  140. const modalRefContact = this.modalService.open(NewPartnerComponent, this.modalOptions);
  141. let partner: PartnerJsonld = {} as PartnerJsonld;
  142. partner.partnerType = this.dataType as TypeEnum;
  143. modalRefContact.componentInstance.partner = partner;
  144. modalRefContact.componentInstance.submit.subscribe((modalStatus: ModalStatus) => {
  145. if (modalStatus === ModalStatus.Submitted) {
  146. modalRefContact.dismiss();
  147. this.getPartnersData();
  148. }
  149. });
  150. }
  151. }