diff --git a/src/app/components/items-carousel/items-carousel.component.ts b/src/app/components/items-carousel/items-carousel.component.ts index a90806d..3587418 100644 --- a/src/app/components/items-carousel/items-carousel.component.ts +++ b/src/app/components/items-carousel/items-carousel.component.ts @@ -24,11 +24,11 @@ export class ItemsCarouselComponent implements OnInit { products = signal([]); loading = signal(true); private readonly uiRuntime = inject(UiRuntimeFacade); + private readonly productFacade = inject(ProductFacade); responsiveOptions: { breakpoint: string; numVisible: number; numScroll: number }[] | undefined; constructor( - private productFacade: ProductFacade, private cartService: CartService ) {} diff --git a/src/app/facades/platform/product.facade.ts b/src/app/facades/platform/product.facade.ts index 4485925..f3babd6 100644 --- a/src/app/facades/platform/product.facade.ts +++ b/src/app/facades/platform/product.facade.ts @@ -1,70 +1,48 @@ -import { Injectable, signal } from '@angular/core'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; import { ProductDataService } from '../../core/products/product-data.service'; -import { Product, ProductCategory, ProductListQuery, ProductListResult, ProductSearchQuery, RelatedProductsQuery } from '../../core/products/models/product-domain.model'; +import { + Product, + ProductCategory, + ProductListQuery, + ProductListResult, + ProductSearchQuery, + RelatedProductsQuery, +} from '../../core/products/models/product-domain.model'; @Injectable({ providedIn: 'root' }) export class ProductFacade { - readonly categories = signal([]); - readonly products = signal([]); - readonly selectedProduct = signal(null); - readonly relatedProducts = signal([]); - readonly total = signal(0); - readonly loading = signal(false); - readonly error = signal(null); + constructor(private readonly productData: ProductDataService) {} - constructor(private readonly productData: ProductDataService) {} + getProducts(query?: ProductListQuery): Observable { + return this.productData.getProducts(query); + } - loadCategories(): void { - this.loading.set(true); - this.error.set(null); + getProduct(productID: number): Observable { + return this.productData.getProduct(productID); + } - this.productData.getCategories().subscribe({ - next: (categories) => { - this.categories.set(categories); - this.loading.set(false); - }, - error: () => { - this.categories.set([]); - this.error.set('Failed to load categories'); - this.loading.set(false); - } - }); - } + getCategories(): Observable { + return this.productData.getCategories(); + } - getCategories() { - return this.productData.getCategories(); - } + searchProducts(query: ProductSearchQuery): Observable { + return this.productData.searchProducts(query); + } - getProducts(query?: ProductListQuery) { - return this.productData.getProducts(query); - } + getFeaturedProducts(query?: ProductListQuery): Observable { + return this.productData.getFeaturedProducts(query); + } - getProduct(productID: number) { - return this.productData.getProduct(productID); - } + getLatestProducts(query?: ProductListQuery): Observable { + return this.productData.getLatestProducts(query); + } - searchProducts(query: ProductSearchQuery) { - return this.productData.searchProducts(query); - } + getProductsByCategory(categoryID: number, query?: ProductListQuery): Observable { + return this.productData.getProductsByCategory(categoryID, query); + } - getFeaturedProducts(query?: ProductListQuery) { - return this.productData.getFeaturedProducts(query); - } - - getLatestProducts(query?: ProductListQuery) { - return this.productData.getLatestProducts(query); - } - - getProductsByCategory(categoryID: number, query?: ProductListQuery) { - return this.productData.getProductsByCategory(categoryID, query); - } - - getRelatedProducts(query: RelatedProductsQuery) { - return this.productData.getRelatedProducts(query); - } - - setListResult(result: ProductListResult): void { - this.products.set(result.items); - this.total.set(result.total); - } + getRelatedProducts(query: RelatedProductsQuery): Observable { + return this.productData.getRelatedProducts(query); + } } diff --git a/src/app/pages/category/category.component.ts b/src/app/pages/category/category.component.ts index df6dad4..e252a43 100644 --- a/src/app/pages/category/category.component.ts +++ b/src/app/pages/category/category.component.ts @@ -31,10 +31,10 @@ export class CategoryComponent implements OnInit, OnDestroy { private isLoadingMore = false; private routeSubscription?: Subscription; private scrollTimeout?: ReturnType; + private readonly productFacade = inject(ProductFacade); constructor( private route: ActivatedRoute, - private productFacade: ProductFacade, private cartService: CartService, private prefetchService: PrefetchService ) {} diff --git a/src/app/pages/category/subcategories.component.ts b/src/app/pages/category/subcategories.component.ts index 9571965..862f997 100644 --- a/src/app/pages/category/subcategories.component.ts +++ b/src/app/pages/category/subcategories.component.ts @@ -27,6 +27,7 @@ export class SubcategoriesComponent implements OnInit, OnDestroy { error = signal(null); private i18n = inject(TranslateService); + private readonly productFacade = inject(ProductFacade); parentName = signal(''); private routeSubscription?: Subscription; @@ -35,7 +36,6 @@ export class SubcategoriesComponent implements OnInit, OnDestroy { private route: ActivatedRoute, private router: Router, private categoryFacade: CategoryFacade, - private productFacade: ProductFacade, private langService: LanguageService, private cartService: CartService ) {} diff --git a/src/app/pages/item-detail/item-detail.component.ts b/src/app/pages/item-detail/item-detail.component.ts index a223c19..585b5dd 100644 --- a/src/app/pages/item-detail/item-detail.component.ts +++ b/src/app/pages/item-detail/item-detail.component.ts @@ -107,11 +107,11 @@ export class ItemDetailComponent implements OnInit, OnDestroy { private seoService = inject(SeoService); private i18n = inject(TranslateService); private authService = inject(AuthService); + private readonly productFacade = inject(ProductFacade); constructor( private route: ActivatedRoute, private apiService: ApiService, - private productFacade: ProductFacade, private cartService: CartService, private telegramService: TelegramService, private sanitizer: DomSanitizer, diff --git a/src/app/pages/search/search.component.ts b/src/app/pages/search/search.component.ts index 1c44469..adcd130 100644 --- a/src/app/pages/search/search.component.ts +++ b/src/app/pages/search/search.component.ts @@ -35,9 +35,9 @@ export class SearchComponent implements OnDestroy { private searchSubject = new Subject(); private searchSubscription: Subscription; private i18n = inject(TranslateService); + private readonly productFacade = inject(ProductFacade); constructor( - private productFacade: ProductFacade, private cartService: CartService, private prefetchService: PrefetchService ) { diff --git a/src/app/pages/static-page/static-page.component.html b/src/app/pages/static-page/static-page.component.html index c50c667..3e528f9 100644 --- a/src/app/pages/static-page/static-page.component.html +++ b/src/app/pages/static-page/static-page.component.html @@ -5,7 +5,7 @@

404

Страница не найдена

- На главную + На главную
} @else {
diff --git a/src/app/pages/static-page/static-page.component.ts b/src/app/pages/static-page/static-page.component.ts index 0f5546b..fe7c9bf 100644 --- a/src/app/pages/static-page/static-page.component.ts +++ b/src/app/pages/static-page/static-page.component.ts @@ -5,12 +5,11 @@ import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { StaticPageResolverService } from '../../core/config/static-page-resolver.service'; import { LanguageService } from '../../services/language.service'; import { TranslatePipe } from '../../i18n/translate.pipe'; -import { LangRoutePipe } from '../../pipes/lang-route.pipe'; @Component({ selector: 'app-static-page', standalone: true, - imports: [CommonModule, RouterLink, TranslatePipe, LangRoutePipe], + imports: [CommonModule, RouterLink, TranslatePipe], templateUrl: './static-page.component.html', styleUrls: ['./static-page.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush @@ -24,9 +23,12 @@ export class StaticPageComponent { readonly loading = signal(true); readonly notFound = signal(false); readonly title = signal(''); + readonly homeRoute = signal(''); readonly safeHtml = signal(this.sanitizer.bypassSecurityTrustHtml('')); constructor() { + this.homeRoute.set(`/${this.languageService.currentLanguage()}`); + this.route.paramMap.subscribe(params => { const keyFromParam = params.get('key'); const staticPath = params.get('staticPath');