diff --git a/src/app/modules/data/list/food-data-list.component.ts b/src/app/modules/data/list/food-data-list.component.ts index 4f260d72..95e6afbc 100644 --- a/src/app/modules/data/list/food-data-list.component.ts +++ b/src/app/modules/data/list/food-data-list.component.ts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 StApps + * Copyright (C) 2023 StApps * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, version 3. @@ -12,10 +12,11 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {Component} from '@angular/core'; +import {Component, OnDestroy, OnInit} from '@angular/core'; import {MapPosition} from '../../map/position.service'; import {SearchPageComponent} from './search-page.component'; import {Geolocation} from '@capacitor/geolocation'; +import {Subscription} from 'rxjs'; /** * Presents a list of places for eating/drinking @@ -24,15 +25,19 @@ import {Geolocation} from '@capacitor/geolocation'; templateUrl: 'search-page.html', styleUrls: ['../../data/list/search-page.scss'], }) -export class FoodDataListComponent extends SearchPageComponent { +export class FoodDataListComponent extends SearchPageComponent implements OnInit, OnDestroy { title = 'canteens.title'; showNavigation = false; + locationWatch?: Subscription; + /** * Sets the forced filter to present only places for eating/drinking */ - initialize() { + ngOnInit() { + this.locationWatch?.unsubscribe(); + this.locationWatch = this.createLocationWatch(); this.showDefaultData = true; this.sortQuery = [ @@ -92,29 +97,36 @@ export class FoodDataListComponent extends SearchPageComponent { }, ]; } + + super.ngOnInit(); + } + + private createLocationWatch(): Subscription { + return this.positionService + .watchCurrentLocation(this.constructor.name, {enableHighAccuracy: false, maximumAge: 1000}) + .subscribe({ + next: (position: MapPosition) => { + this.positionService.position = position; + }, + error: async _error => { + this.positionService.position = undefined; + await Geolocation.checkPermissions(); + }, + }); } async ionViewWillEnter() { await super.ionViewWillEnter(); - this.subscriptions.push( - this.positionService - .watchCurrentLocation(this.constructor.name, {enableHighAccuracy: false, maximumAge: 1000}) - .subscribe({ - next: (position: MapPosition) => { - this.positionService.position = position; - }, - error: async _error => { - this.positionService.position = undefined; - await Geolocation.checkPermissions(); - }, - }), - ); + this.locationWatch?.unsubscribe(); + this.locationWatch = this.createLocationWatch(); } ionViewWillLeave() { - void this.positionService.clearWatcher(this.constructor.name); - for (const sub of this.subscriptions) { - sub.unsubscribe(); - } + this.locationWatch?.unsubscribe(); + } + + ngOnDestroy() { + super.ngOnDestroy(); + this.locationWatch?.unsubscribe(); } }