@snabcentr/client-core 2.66.22 → 2.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/interfaces/index.d.ts +1 -0
- package/catalog/interfaces/sc-i-parent-category-redirect.d.ts +21 -0
- package/catalog/services/index.d.ts +1 -0
- package/catalog/services/sc-catalog-redirect.service.d.ts +57 -0
- package/catalog/services/sc-catalog.service.d.ts +15 -0
- package/esm2022/catalog/interfaces/index.mjs +2 -1
- package/esm2022/catalog/interfaces/sc-i-parent-category-redirect.mjs +2 -0
- package/esm2022/catalog/services/index.mjs +2 -1
- package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +94 -0
- package/esm2022/catalog/services/sc-catalog.service.mjs +23 -1
- package/fesm2022/snabcentr-client-core.mjs +111 -4
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +1 -1
- package/release_notes.tmp +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i1 from 'rxjs';
|
|
2
|
-
import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
|
|
2
|
+
import { of, startWith as startWith$1, Subject, ReplaySubject, partition, combineLatest, map as map$1, debounceTime, switchMap, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError as catchError$1, throwError, expand, takeWhile, toArray, EMPTY, from, take, defaultIfEmpty, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
|
|
3
3
|
import { map, startWith, catchError } from 'rxjs/operators';
|
|
4
4
|
import { parseISO, parse, isValid, format } from 'date-fns';
|
|
5
5
|
import { isString, isNil, isMatch, isArray, get } from 'lodash-es';
|
|
@@ -13,9 +13,9 @@ import { HttpContextToken, HttpContext, HttpHeaders, HttpClient, HttpParams, Htt
|
|
|
13
13
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
14
14
|
import { tuiIsPresent, TuiDay, tuiPure, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
|
|
15
15
|
import { tuiCleanObject } from '@taiga-ui/addon-doc/utils';
|
|
16
|
-
import { __decorate } from 'tslib';
|
|
17
16
|
import * as i2 from '@angular/router';
|
|
18
|
-
import {
|
|
17
|
+
import { Router, NavigationEnd, ActivatedRoute } from '@angular/router';
|
|
18
|
+
import { __decorate } from 'tslib';
|
|
19
19
|
import { objectToSnake, objectToCamel, toSnake } from 'ts-case-convert';
|
|
20
20
|
import { Meta, Title } from '@angular/platform-browser';
|
|
21
21
|
|
|
@@ -3497,6 +3497,28 @@ class ScCatalogService {
|
|
|
3497
3497
|
}
|
|
3498
3498
|
}));
|
|
3499
3499
|
}
|
|
3500
|
+
/**
|
|
3501
|
+
* Возвращает данные о родительской категории для редиректа, когда категория недоступна (HTTP 404).
|
|
3502
|
+
* Если у категории нет нескрытой родительской категории, возвращается пустой объект.
|
|
3503
|
+
*
|
|
3504
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
3505
|
+
*/
|
|
3506
|
+
getCategoryParentCategory$(categoryIdOrSlug) {
|
|
3507
|
+
return this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/parent-category`, {
|
|
3508
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3509
|
+
});
|
|
3510
|
+
}
|
|
3511
|
+
/**
|
|
3512
|
+
* Возвращает данные о родительской категории для редиректа, когда товар недоступен (HTTP 404).
|
|
3513
|
+
* Если у товара нет нескрытой родительской категории, возвращается пустой объект.
|
|
3514
|
+
*
|
|
3515
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
3516
|
+
*/
|
|
3517
|
+
getProductParentCategory$(productIdOrSlug) {
|
|
3518
|
+
return this.http.get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/parent-category`, {
|
|
3519
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3520
|
+
});
|
|
3521
|
+
}
|
|
3500
3522
|
getProductDataCached$(productIdOrSlug) {
|
|
3501
3523
|
const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);
|
|
3502
3524
|
if (valueFromMap) {
|
|
@@ -3559,6 +3581,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
3559
3581
|
args: [SC_CACHE_LIFETIME]
|
|
3560
3582
|
}] }, { type: ScUserMetrikaService }] });
|
|
3561
3583
|
|
|
3584
|
+
/**
|
|
3585
|
+
* Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
|
|
3586
|
+
*
|
|
3587
|
+
* Запрашивает у бэкенда родительскую категорию недоступной сущности и выполняет редирект:
|
|
3588
|
+
* - на сервере (SSR) — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
|
|
3589
|
+
* - в браузере — выполняет навигацию средствами {@link Router}.
|
|
3590
|
+
*
|
|
3591
|
+
* Если родительская категория не найдена, поток завершается ошибкой {@link HttpErrorResponse},
|
|
3592
|
+
* чтобы вызывающий код отобразил страницу ошибки.
|
|
3593
|
+
*/
|
|
3594
|
+
class ScCatalogRedirectService {
|
|
3595
|
+
constructor() {
|
|
3596
|
+
/**
|
|
3597
|
+
* Сервис для работы с каталогом.
|
|
3598
|
+
*/
|
|
3599
|
+
this.catalogService = inject(ScCatalogService);
|
|
3600
|
+
/**
|
|
3601
|
+
* Сервис маршрутизации.
|
|
3602
|
+
*/
|
|
3603
|
+
this.router = inject(Router);
|
|
3604
|
+
/**
|
|
3605
|
+
* Признак использования идентификатора или slug в маршрутах товаров и категорий.
|
|
3606
|
+
*/
|
|
3607
|
+
this.idOrSlug = inject(SC_ID_OR_SLUG_IN_ROUTE);
|
|
3608
|
+
/**
|
|
3609
|
+
* Признак, что текущий скрипт исполняется на сервере.
|
|
3610
|
+
*/
|
|
3611
|
+
this.isServer = inject(IS_SERVER);
|
|
3612
|
+
/**
|
|
3613
|
+
* Данные об ответе на запрос (доступны только на сервере при SSR).
|
|
3614
|
+
*/
|
|
3615
|
+
this.response = inject(RESPONSE, { optional: true });
|
|
3616
|
+
}
|
|
3617
|
+
/**
|
|
3618
|
+
* Выполняет редирект на родительскую категорию недоступной категории.
|
|
3619
|
+
*
|
|
3620
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
3621
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
3622
|
+
*/
|
|
3623
|
+
redirectToCategoryParent$(categoryIdOrSlug) {
|
|
3624
|
+
return this.redirectToParentCategory$(this.catalogService.getCategoryParentCategory$(categoryIdOrSlug));
|
|
3625
|
+
}
|
|
3626
|
+
/**
|
|
3627
|
+
* Выполняет редирект на родительскую категорию недоступного товара.
|
|
3628
|
+
*
|
|
3629
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
3630
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
3631
|
+
*/
|
|
3632
|
+
redirectToProductParent$(productIdOrSlug) {
|
|
3633
|
+
return this.redirectToParentCategory$(this.catalogService.getProductParentCategory$(productIdOrSlug));
|
|
3634
|
+
}
|
|
3635
|
+
/**
|
|
3636
|
+
* Выполняет редирект на полученную родительскую категорию.
|
|
3637
|
+
*
|
|
3638
|
+
* @param parentCategory$ Поток с данными родительской категории.
|
|
3639
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse} с кодом 404, если родительская категория не найдена.
|
|
3640
|
+
*/
|
|
3641
|
+
redirectToParentCategory$(parentCategory$) {
|
|
3642
|
+
return parentCategory$.pipe(switchMap((parentCategory) => {
|
|
3643
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
3644
|
+
const target = parentCategory[this.idOrSlug];
|
|
3645
|
+
// Родительская категория не найдена — отображаем страницу ошибки.
|
|
3646
|
+
if (!tuiIsPresent(target)) {
|
|
3647
|
+
return throwError(() => new HttpErrorResponse({ status: 404 }));
|
|
3648
|
+
}
|
|
3649
|
+
const urlTree = this.router.createUrlTree(['/catalog', target]);
|
|
3650
|
+
if (this.isServer) {
|
|
3651
|
+
// SSR: выставляем 302 и заголовок Location для корректного редиректа поисковых ботов.
|
|
3652
|
+
this.response?.setHeader('Location', this.router.serializeUrl(urlTree));
|
|
3653
|
+
this.response?.status(302);
|
|
3654
|
+
return EMPTY;
|
|
3655
|
+
}
|
|
3656
|
+
return from(this.router.navigateByUrl(urlTree, { replaceUrl: true })).pipe(switchMap(() => EMPTY));
|
|
3657
|
+
}));
|
|
3658
|
+
}
|
|
3659
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3660
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, providedIn: 'root' }); }
|
|
3661
|
+
}
|
|
3662
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, decorators: [{
|
|
3663
|
+
type: Injectable,
|
|
3664
|
+
args: [{
|
|
3665
|
+
providedIn: 'root',
|
|
3666
|
+
}]
|
|
3667
|
+
}] });
|
|
3668
|
+
|
|
3562
3669
|
/* eslint-disable no-param-reassign,no-return-assign,no-void */
|
|
3563
3670
|
/**
|
|
3564
3671
|
* Сервис для работы с избранными товарами и категориями.
|
|
@@ -8370,5 +8477,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8370
8477
|
* Generated bundle index. Do not edit.
|
|
8371
8478
|
*/
|
|
8372
8479
|
|
|
8373
|
-
export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, RESPONSE, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
|
|
8480
|
+
export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, RESPONSE, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
|
|
8374
8481
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|