From e7d8d9a3ee3077da66a3ed3d4c28e5fd06766d15 Mon Sep 17 00:00:00 2001 From: matt-litwiller Date: Fri, 7 Jul 2023 11:13:31 -0400 Subject: [PATCH] list works with entities performance improvemenent for sort-by and page-size mat-selects, and added Maxime's fixes to use the real entities for the entities in the list (instead of the hardcoded values in the configs) --- src/app/app.component.html | 6 ++ src/app/app.component.ts | 7 ++ .../filterServices/filters-types.service.ts | 17 +++++ .../pages/filters/simple-filters.component.ts | 41 ++++++++++-- .../simple-feature-list-header.component.html | 2 +- .../simple-feature-list-header.component.ts | 65 +++++++++++++++++-- .../list/simple-feature-list.component.ts | 38 ++++++++--- src/app/pages/portal/portal.component.html | 9 ++- src/app/pages/portal/portal.component.ts | 20 +----- src/config/config.json | 20 ++---- 10 files changed, 168 insertions(+), 57 deletions(-) create mode 100644 src/app/pages/filters/filterServices/filters-types.service.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index e49418e1..8dfa9fdc 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -9,3 +9,9 @@ --> + + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index d171a63f..f555c426 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -8,6 +8,8 @@ import { } from '@igo2/core'; import { AuthOptions } from '@igo2/auth'; import { PwaService } from './services/pwa.service'; +import { Option } from './pages/filters/simple-filters.interface'; +import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject'; @Component({ selector: 'app-root', templateUrl: './app.component.html', @@ -20,6 +22,11 @@ export class AppComponent { // console.log("isMobile: ", this.isMobile); } + // public propertiesMap: Map> = new Map(); //string of all properties (keys) and all values associated with this property + // public entitiesAll: Array; //all entities + // public entitiesList: Array //filtered entities + // public simpleFiltersValue$: BehaviorSubject = new BehaviorSubject(undefined); + public isMobile: boolean = window.innerWidth >= 768 ? false : true; //boolean to determine screen width for layout public authConfig: AuthOptions; private themeClass = 'qcca-theme'; diff --git a/src/app/pages/filters/filterServices/filters-types.service.ts b/src/app/pages/filters/filterServices/filters-types.service.ts new file mode 100644 index 00000000..4becbb04 --- /dev/null +++ b/src/app/pages/filters/filterServices/filters-types.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class FiltersTypesService { + + private eventSubject = new Subject(); + + emitEvent(types: string[]) { + this.eventSubject.next(types); + } + + onEvent() { + return this.eventSubject.asObservable(); + }} diff --git a/src/app/pages/filters/simple-filters.component.ts b/src/app/pages/filters/simple-filters.component.ts index 4b011c32..8b82e3e5 100644 --- a/src/app/pages/filters/simple-filters.component.ts +++ b/src/app/pages/filters/simple-filters.component.ts @@ -2,7 +2,7 @@ import { FiltersAdditionalTypesService } from './filterServices/filters-addition import { FiltersActiveFiltersService } from './filterServices/filters-active-filters.service'; import { FiltersSharedMethodsService } from './filterServices/filters-shared-methods.service'; import { FiltersAdditionalPropertiesService } from './filterServices/filters-additional-properties.service'; -import { FeatureCollection } from 'geojson'; +import { Feature, FeatureCollection } from 'geojson'; import { HttpClient, HttpParams } from '@angular/common/http'; import { Component, OnInit, OnDestroy, Output, EventEmitter, ViewChild, Input, ChangeDetectorRef } from '@angular/core'; import { SimpleFilter, TypeOptions, Option } from './simple-filters.interface'; @@ -13,6 +13,7 @@ import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/m import { Subscription } from 'rxjs'; import { FiltersOptionService } from './filterServices/filters-option-service.service'; import { ListEntitiesService } from '../list/listServices/list-entities-services.service'; +import { FiltersTypesService } from './filterServices/filters-types.service'; @Component({ selector: 'app-simple-filters', @@ -21,7 +22,8 @@ import { ListEntitiesService } from '../list/listServices/list-entities-services }) export class SimpleFiltersComponent implements OnInit, OnDestroy { @Input() isMobile: boolean; - @Input() propertiesMap: Map>; + // @Input() propertiesMap: Map>; + @Input() entityStore; @Output() filterSelection: EventEmitter = new EventEmitter(); @Output() activeFiltersUpdate: EventEmitter> = new EventEmitter(); @ViewChild(MatAutocompleteTrigger) panelTrigger: MatAutocompleteTrigger; @@ -43,11 +45,11 @@ export class SimpleFiltersComponent implements OnInit, OnDestroy { public additionalTypes: Array = []; //list of all additional filter types (corresponding to the keys of the map in additional properties) public additionalProperties: Map> = new Map(); //map of all additional properties by entity id e.g. {80029: {municipalite: Trois-Rivières}, {mrc: ...}} public properties: Array; //string value of all properties that exist in the entities (e.g. "id", "nom", etc.) - // public propertiesMap: Map> = new Map(); //string of all properties (keys) and all values associated with this property + public propertiesMap: Map> = new Map(); //string of all properties (keys) and all values associated with this property + public filterTypes: Array = []; + + constructor(private filterTypesService: FiltersTypesService, private additionalTypesService: FiltersAdditionalTypesService, private cdRef: ChangeDetectorRef, private activeFilterService: FiltersActiveFiltersService, private listEntitiesService: ListEntitiesService, private filterMethods: FiltersSharedMethodsService, private additionalPropertiesService: FiltersAdditionalPropertiesService, private configService: ConfigService, private http: HttpClient, private formBuilder: FormBuilder, private filterOptionService: FiltersOptionService) { - constructor(private additionalTypesService: FiltersAdditionalTypesService, private cdRef: ChangeDetectorRef, private activeFilterService: FiltersActiveFiltersService, private listEntitiesService: ListEntitiesService, private filterMethods: FiltersSharedMethodsService, private additionalPropertiesService: FiltersAdditionalPropertiesService, private configService: ConfigService, private http: HttpClient, private formBuilder: FormBuilder, private filterOptionService: FiltersOptionService) { - this.entitiesAll = this.configService.getConfig("temporaryEntitiesAll"); - this.entitiesList = this.entitiesAll; } // getter of the form group controls @@ -56,6 +58,22 @@ export class SimpleFiltersComponent implements OnInit, OnDestroy { } public async ngOnInit(): Promise { + this.entitiesAll = this.entityStore.entities$.getValue() as Array; + this.entitiesList = this.entityStore.entities$.getValue() as Array; + + let properties = Object.keys(this.entitiesAll[0]["properties"]); + // console.log("properties ", properties); + for(let property of properties){ + let values: Array