import { Component, OnInit } from '@angular/core'; import { PlantouneService } from 'src/app/services/plantoune.service'; import * as _ from 'underscore'; @Component({ selector: 'app-page-accueil', templateUrl: './page-accueil.component.html', styleUrls: ['./page-accueil.component.scss'] }) export class PageAccueilComponent implements OnInit { public listData: any[]; public listDataGlobal: any[]; public listDataFilter: any[]; public listCategoriesFilter: string[]; public rangeNumber: number[]; public stateNumber: number; public isPricingFilterActive: boolean; public isRatingFilterActive: boolean; public clickCounter : any; constructor(private plantouneService: PlantouneService) { this.listData = []; this.listDataGlobal = []; this.listDataFilter = []; this.listCategoriesFilter = []; this.rangeNumber = []; this.stateNumber = 0; this.isPricingFilterActive = false; this.isRatingFilterActive = false; this.clickCounter = 0; } /** * equivalent de la ligne du dessus * * plantouneService; * * constructor(plantouneService: PlantouneService) { * this.plantouneService = plantouneService; * } */ ngOnInit(): void { this.plantouneService.getData().subscribe( (listPlant: any[]) => { console.log(listPlant); this.listDataGlobal = [...listPlant]; this.listDataFilter = [...this.listDataGlobal]; console.log(this.listDataGlobal); /** * Technique avec Underscore JS pour recupérer les catégories uniques de nos plantes */ const listAllCategories = listPlant.map(product => product.product_breadcrumb_label); // console.log(listAllCategories); const listUniqCategories = _.uniq(listAllCategories) // console.log(listUniqCategories); /** * Technique native JS pour recupérer les catégories uniques de nos plantes */ const listUniqJsCategories = [...new Set(listAllCategories)]; console.log(listUniqJsCategories); this.listCategoriesFilter = listUniqJsCategories; this.listData = listPlant; this.listData.length = 9; console.log(this.listData); } ) } onEventLike() { this.plantouneService.plantLiked$.next('') } onRatingFilter(stateNumber: number): void { this.stateNumber = stateNumber; this.isRatingFilterActive = true; this.onApplyFilters(); } onPriceFilter(rangeNumber: number[]) { this.rangeNumber = [...rangeNumber]; this.isPricingFilterActive = true; this.onApplyFilters(); } onApplyFilters(): void { this.clickCounter = 0; if(this.isPricingFilterActive) { let listDataFinal: any = []; this.listDataGlobal.forEach(product => { if(parseFloat(product.product_unitprice_ati) >= this.rangeNumber[0] && parseFloat(product.product_unitprice_ati) <= this.rangeNumber[1]) { listDataFinal.push(product); } }); this.listData = [...listDataFinal]; } if(this.isRatingFilterActive) { let listDataFinal: any = []; this.listDataGlobal.forEach(product => { if(product.product_rating >= this.stateNumber) { listDataFinal.push(product); } }); this.listData = [...listDataFinal]; } if(this.isPricingFilterActive && this.isRatingFilterActive) { let listDataFinal: any = []; this.listDataGlobal.forEach(product => { if(parseFloat(product.product_unitprice_ati) >= this.rangeNumber[0] && parseFloat(product.product_unitprice_ati) <= this.rangeNumber[1] && product.product_rating >= this.stateNumber) { listDataFinal.push(product); } }); this.listData = [...listDataFinal]; console.log(this.listData); } if(this.listData.length >= 9) this.listData.length = 9; } //Tri des prix des plantes par ordre croissant ou décroissant onPriceTri() : void { this.clickCounter ++ console.log(this.clickCounter) if (this.clickCounter %2) { this.listData.sort((a, b) => parseFloat(a.product_price) - parseFloat(b.product_price)); }else{ this.listData.sort((a, b) => parseFloat(b.product_price) - parseFloat(a.product_price)); } } //Tri des noms des plantes par ordre alphanumérique onAlphaTri() : void { this.clickCounter ++ if (this.clickCounter %2) { this.listData.sort((a, b) => (a.product_name > b.product_name) ? 1 : -1) }else{ this.listData.sort((a, b) => (b.product_name > a.product_name) ? 1 : -1) } } //Tri des avis des plantes par ordre croissant ou décroissant onRatingTri() : void{ this.clickCounter ++ if (this.clickCounter %2) { this.listData.sort((a, b) => (a.product_rating > b.product_rating) ? 1 : -1) }else{ this.listData.sort((a, b) => (b.product_rating > a.product_rating) ? 1 : -1) } } }