import {AfterViewInit, ChangeDetectorRef, Component, OnInit, ViewChild} from '@angular/core'; import {MatSort, Sort, MatSortModule} from "@angular/material/sort"; import {MatTableDataSource, MatTableModule} from "@angular/material/table"; import {ActivatedRoute, Router, RouterLink, RouterLinkActive} from "@angular/router"; import {Subscription} from "rxjs"; import {PartnerJsonld, PartnerService} from "@app/core/api/v1"; import {MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent} from "@angular/material/paginator"; import {OrderFilter} from "@app/_models/orderFilter"; import {ApiHelperService} from "@app/_helpers/api-helper.service"; import {NgIf} from "@angular/common"; import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap"; import {NewPartnerComponent} from "@app/_views/partners/new-partner/new-partner.component"; import {TranslateModule, TranslateService} from "@ngx-translate/core"; import {ModalStatus} from "@app/_helpers/modal.states"; import TypeEnum = PartnerJsonld.PartnerTypeEnum; @Component({ selector: 'app-partners', templateUrl: './partners.component.html', styleUrl: './partners.component.scss', standalone: true, imports: [MatTableModule, MatSortModule, MatPaginatorModule, RouterLink, RouterLinkActive, NgIf, TranslateModule], }) export class PartnersComponent implements OnInit, AfterViewInit { @ViewChild(MatSort) partnersSort; @ViewChild(MatPaginator) partnersPaginator: MatPaginator; protected partnersSub: Subscription; protected partners: Array; protected nameOrderAsc: OrderFilter; protected cityOrderAsc: OrderFilter; protected websiteOrderAsc: OrderFilter; protected dataType!: string; protected headline: string; protected partnerNameOne: string; protected displayedColumns: string[]; protected partnersDataSource; protected partnersLength: number; protected partnersPageEvent: PageEvent; protected partnersPageSize: number; protected partnersPageIndex: number; protected modalOptions: NgbModalOptions = { centered: true }; constructor( private route: ActivatedRoute, private partnerService: PartnerService, private router: Router, private modalService: NgbModal, private translateService: TranslateService, protected apiHelperService: ApiHelperService, ) { this.partnersSort = new MatSort(); this.partnersPaginator = new MatPaginator(new MatPaginatorIntl(), ChangeDetectorRef.prototype); this.partnersSub = new Subscription(); this.partners = []; this.displayedColumns = ['pos', 'image', 'name', 'address', 'website']; this.nameOrderAsc = OrderFilter.Asc; this.cityOrderAsc = OrderFilter.Asc; this.websiteOrderAsc = OrderFilter.Asc; this.partnersDataSource = new MatTableDataSource(this.partners); this.partnersLength = 0; this.partnersPageEvent = new PageEvent(); this.partnersPageSize = 10; this.partnersPageIndex = 0; this.headline = ""; this.partnerNameOne = ""; } ngOnInit() { this.dataType = this.route.snapshot.data['dataType']; // this.translateService.use(this.translateService.getDefaultLang()); this.translateService.get('basic.' + this.dataType).subscribe((translation: string) => { this.headline = translation; }); this.translateService.get('basic.' + this.dataType + 'One').subscribe((translation: string) => { this.partnerNameOne = translation; }); this.getPartnersData(); } ngAfterViewInit() { this.partnersDataSource.sort = this.partnersSort; this.partnersDataSource.paginator = this.partnersPaginator; } getPartnersData() { this.partnersSub = this.partnerService.partnersGetCollection( this.partnersPageIndex + 1, this.partnersPageSize, this.dataType, undefined, undefined, this.nameOrderAsc, this.cityOrderAsc, this.websiteOrderAsc ).subscribe( data => { this.partners = data["hydra:member"]; this.partnersDataSource = new MatTableDataSource(this.partners); this.partnersLength = Number(data["hydra:totalItems"]); this.partnersPaginator.length = this.partnersLength; } ); // switch over this.dataType (customers, etc.) } /** Announce the change in sort state for assistive technology. */ onSortChange(sortState: Sort) { // Reset page index to first page this.partnersPageIndex = 0; let order: OrderFilter; if (sortState.direction === "") { order = OrderFilter.Undefined; } else { order = sortState.direction; } this.nameOrderAsc = OrderFilter.Undefined; this.cityOrderAsc = OrderFilter.Undefined; this.websiteOrderAsc = OrderFilter.Undefined; switch (sortState.active) { case "name": this.nameOrderAsc = order; break; case "address": this.cityOrderAsc = order; break; case "website": this.websiteOrderAsc = order; break; } this.getPartnersData(); } handlePageEvent(e: PageEvent) { this.partnersPageEvent = e; this.partnersLength = e.length; this.partnersPageIndex = e.pageIndex.valueOf(); this.partnersPageSize = e.pageSize.valueOf(); this.getPartnersData(); } navigateToPartnerDetails(element: any) { const partner: PartnerJsonld = element as PartnerJsonld; this.router.navigate(['/' + partner.partnerType, this.apiHelperService.extractId(partner.id)]); } openModalNewPartner() { const modalRefContact = this.modalService.open(NewPartnerComponent, this.modalOptions); let partner: PartnerJsonld = {} as PartnerJsonld; partner.partnerType = this.dataType as TypeEnum; modalRefContact.componentInstance.partner = partner; modalRefContact.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { if (modalStatus === ModalStatus.Submitted) { modalRefContact.dismiss(); this.getPartnersData(); } }); } }