nan error fix

This commit is contained in:
tonoyan
2026-04-13 15:18:25 +03:00
parent 5b794cbf03
commit e00e688070
6 changed files with 30 additions and 7 deletions

Binary file not shown.

View File

@@ -40,9 +40,10 @@ export class CategoryComponent implements OnInit, OnDestroy {
ngOnInit(): void {
this.routeSubscription = this.route.params.subscribe(params => {
const id = Number.parseInt(params['id'], 10);
const rawId = params['id'];
const id = Number(rawId);
if (!Number.isFinite(id) || id <= 0) {
if (!Number.isInteger(id) || id <= 0 || String(id) !== String(rawId)) {
this.error.set('Invalid category ID');
this.items.set([]);
this.hasMore.set(false);

View File

@@ -22,7 +22,11 @@
@if (nestedSubcategories().length > 0) {
<div class="categories-grid">
@for (sub of nestedSubcategories(); track trackBySubId($index, sub)) {
<a [routerLink]="['/category', sub.id] | langRoute" class="category-card">
@if (getSubcategoryRouteId(sub) !== null) {
<a [routerLink]="['/category', getSubcategoryRouteId(sub)] | langRoute" class="category-card">
} else {
<div class="category-card category-card--disabled">
}
<div class="category-image">
@if (sub.img) {
<img [src]="sub.img" [alt]="sub.name" loading="lazy" decoding="async" />
@@ -36,7 +40,11 @@
<span class="category-count">{{ sub.itemCount }}</span>
}
</div>
@if (getSubcategoryRouteId(sub) !== null) {
</a>
} else {
</div>
}
}
</div>
}

View File

@@ -41,9 +41,10 @@ export class SubcategoriesComponent implements OnInit, OnDestroy {
ngOnInit(): void {
this.routeSubscription = this.route.params.subscribe(params => {
const id = Number.parseInt(params['id'], 10);
const rawId = params['id'];
const id = Number(rawId);
if (!Number.isFinite(id) || id <= 0) {
if (!Number.isInteger(id) || id <= 0 || String(id) !== String(rawId)) {
this.error.set('Invalid category ID');
this.categories.set([]);
this.subcategories.set([]);
@@ -140,6 +141,15 @@ export class SubcategoriesComponent implements OnInit, OnDestroy {
return sub.id;
}
getSubcategoryRouteId(sub: Subcategory): number | null {
if (!sub?.id) return null;
const id = Number(sub.id);
if (!Number.isInteger(id) || id <= 0 || String(id) !== String(sub.id)) {
return null;
}
return id;
}
readonly getDiscountedPrice = getDiscountedPrice;
readonly getMainImage = getMainImage;
readonly trackByItemId = trackByItemId;

Binary file not shown.

View File

@@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable, timer } from 'rxjs';
import { Observable, timer, throwError } from 'rxjs';
import { map, retry } from 'rxjs/operators';
import { Category, Item, Subcategory } from '../models';
import { environment } from '../../environments/environment';
@@ -267,6 +267,10 @@ export class ApiService {
}
getCategoryItems(categoryID: number, count: number = 50, skip: number = 0): Observable<Item[]> {
if (!Number.isInteger(categoryID) || categoryID <= 0) {
return throwError(() => new Error('Invalid category ID'));
}
const params = new HttpParams()
.set('count', count.toString())
.set('skip', skip.toString());