diff --git a/src/app/models/page.ts b/src/app/models/page.ts index 550fc328..8487bd31 100644 --- a/src/app/models/page.ts +++ b/src/app/models/page.ts @@ -2,11 +2,12 @@ import {HttpClient} from "@angular/common/http"; export class Page { - this: string - next: string - first: string - count: number - items: T[] + this: string; + next: string; + first: string; + count: number; + items: T[]; + private _isLoading: boolean = false; constructor(init?:Partial>) { @@ -15,17 +16,20 @@ export class Page loadNext(client: HttpClient) { - if (this.next == null) + if (this.next == null || this._isLoading) return; + this._isLoading = true; client.get>(this.next).subscribe(x => { this.items.push(...x.items); this.count += x.count; this.next = x.next; this.this = x.this; + this._isLoading = false; }); } + changeType(type: string) { return this.first.replace(/\/\w*($|\?)/, `/${type}$1`) diff --git a/src/app/services/pre-loader.service.ts b/src/app/services/pre-loader.service.ts index 66ab3170..290c5062 100644 --- a/src/app/services/pre-loader.service.ts +++ b/src/app/services/pre-loader.service.ts @@ -1,11 +1,11 @@ import { HttpClient } from "@angular/common/http"; -import { Injectable } from '@angular/core'; +import { Injectable } from "@angular/core"; import { Page } from "../models/page"; -import { Observable, of } from "rxjs" -import { map } from "rxjs/operators" +import { Observable, of } from "rxjs"; +import { map } from "rxjs/operators"; @Injectable({ - providedIn: 'root' + providedIn: "root" }) export class PreLoaderService { @@ -15,7 +15,7 @@ export class PreLoaderService load(route: string): Observable { - let loaded = this.cache.find(x => x[0] == route); + let loaded = this.cache.find(x => x[0] === route); if (loaded != null) return of(loaded[1]); return this.http.get>(route).pipe(map(newData =>