Umbau Filter linksseitig

This commit is contained in:
2025-07-20 17:35:45 -05:00
parent 466e1dcdce
commit 24db8927e8
40 changed files with 894 additions and 626 deletions

View File

@@ -21,7 +21,12 @@ export class ModalService {
this.resolvePromise = resolve;
});
}
sendCriteria(message: BusinessListingCriteria | CommercialPropertyListingCriteria | UserListingCriteria): Promise<ModalResult> {
this.messageSubject.next(message);
return new Promise<ModalResult>(resolve => {
this.resolvePromise = resolve;
});
}
accept(): void {
this.modalVisibleSubject.next(false);
this.resolvePromise({ accepted: true });

View File

@@ -1,5 +1,5 @@
import { AsyncPipe, NgIf } from '@angular/common';
import { Component } from '@angular/core';
import { Component, Input, Output } from '@angular/core';
import { NgSelectModule } from '@ng-select/ng-select';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
import { catchError, concat, debounceTime, distinctUntilChanged, map, Observable, of, Subject, Subscription, switchMap, tap } from 'rxjs';
@@ -7,10 +7,11 @@ import { BusinessListingCriteria, CommercialPropertyListingCriteria, CountyResul
import { CriteriaChangeService } from '../../services/criteria-change.service';
import { GeoService } from '../../services/geo.service';
import { ListingsService } from '../../services/listings.service';
import { SearchService } from '../../services/search.service';
import { SelectOptionsService } from '../../services/select-options.service';
import { UserService } from '../../services/user.service';
import { SharedModule } from '../../shared/shared/shared.module';
import { resetBusinessListingCriteria, resetCommercialPropertyListingCriteria, resetUserListingCriteria } from '../../utils/utils';
import { getCriteriaStateObject, resetBusinessListingCriteria, resetCommercialPropertyListingCriteria, resetUserListingCriteria } from '../../utils/utils';
import { ValidatedCityComponent } from '../validated-city/validated-city.component';
import { ValidatedPriceComponent } from '../validated-price/validated-price.component';
import { ModalService } from './modal.service';
@@ -23,6 +24,9 @@ import { ModalService } from './modal.service';
styleUrl: './search-modal.component.scss',
})
export class SearchModalComponent {
@Output()
@Input()
isModal: boolean = true;
// cities$: Observable<GeoResult[]>;
counties$: Observable<CountyResult[]>;
// cityLoading = false;
@@ -31,7 +35,8 @@ export class SearchModalComponent {
countyInput$ = new Subject<string>();
private criteriaChangeSubscription: Subscription;
public criteria: BusinessListingCriteria | CommercialPropertyListingCriteria | UserListingCriteria;
backupCriteria: BusinessListingCriteria | CommercialPropertyListingCriteria | UserListingCriteria;
public backupCriteria: BusinessListingCriteria | CommercialPropertyListingCriteria | UserListingCriteria = getCriteriaStateObject('businessListings');
numberOfResults$: Observable<number>;
cancelDisable = false;
constructor(
@@ -41,9 +46,11 @@ export class SearchModalComponent {
private criteriaChangeService: CriteriaChangeService,
private listingService: ListingsService,
private userService: UserService,
private searchService: SearchService,
) {}
ngOnInit() {
this.setupCriteriaChangeListener();
this.modalService.message$.pipe(untilDestroyed(this)).subscribe(msg => {
this.criteria = msg;
this.backupCriteria = JSON.parse(JSON.stringify(msg));
@@ -69,6 +76,7 @@ export class SearchModalComponent {
this.criteria.types.splice(index, 1);
}
}
this.searchService.search(this.criteria);
}
private loadCounties() {
this.counties$ = concat(
@@ -86,6 +94,9 @@ export class SearchModalComponent {
),
);
}
onCriteriaChange() {
this.searchService.search(this.criteria);
}
setCity(city) {
if (city) {
this.criteria.city = city;
@@ -95,6 +106,7 @@ export class SearchModalComponent {
this.criteria.radius = null;
this.criteria.searchType = 'exact';
}
this.searchService.search(this.criteria);
}
setState(state: string) {
if (state) {
@@ -103,6 +115,11 @@ export class SearchModalComponent {
this.criteria.state = null;
this.setCity(null);
}
this.searchService.search(this.criteria);
}
setRadius(radius: number) {
this.criteria.radius = radius;
this.searchService.search(this.criteria);
}
private setupCriteriaChangeListener() {
this.criteriaChangeSubscription = this.criteriaChangeService.criteriaChange$.pipe(debounceTime(400)).subscribe(() => {
@@ -160,5 +177,6 @@ export class SearchModalComponent {
// Aktivieren Sie nur die aktuell ausgewählte Checkbox
this.criteria[checkbox] = value;
this.searchService.search(this.criteria);
}
}