@snabcentr/client-core 3.7.0 → 3.8.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 +4 -2
|
@@ -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
|
|
|
@@ -3489,6 +3489,28 @@ class ScCatalogService {
|
|
|
3489
3489
|
}
|
|
3490
3490
|
}));
|
|
3491
3491
|
}
|
|
3492
|
+
/**
|
|
3493
|
+
* Возвращает данные о родительской категории для редиректа, когда категория недоступна (HTTP 404).
|
|
3494
|
+
* Если у категории нет нескрытой родительской категории, возвращается пустой объект.
|
|
3495
|
+
*
|
|
3496
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
3497
|
+
*/
|
|
3498
|
+
getCategoryParentCategory$(categoryIdOrSlug) {
|
|
3499
|
+
return this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/parent-category`, {
|
|
3500
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3501
|
+
});
|
|
3502
|
+
}
|
|
3503
|
+
/**
|
|
3504
|
+
* Возвращает данные о родительской категории для редиректа, когда товар недоступен (HTTP 404).
|
|
3505
|
+
* Если у товара нет нескрытой родительской категории, возвращается пустой объект.
|
|
3506
|
+
*
|
|
3507
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
3508
|
+
*/
|
|
3509
|
+
getProductParentCategory$(productIdOrSlug) {
|
|
3510
|
+
return this.http.get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/parent-category`, {
|
|
3511
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3512
|
+
});
|
|
3513
|
+
}
|
|
3492
3514
|
getProductDataCached$(productIdOrSlug) {
|
|
3493
3515
|
const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);
|
|
3494
3516
|
if (valueFromMap) {
|
|
@@ -3551,6 +3573,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
3551
3573
|
args: [SC_CACHE_LIFETIME]
|
|
3552
3574
|
}] }, { type: ScUserMetrikaService }] });
|
|
3553
3575
|
|
|
3576
|
+
/**
|
|
3577
|
+
* Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
|
|
3578
|
+
*
|
|
3579
|
+
* Запрашивает у бэкенда родительскую категорию недоступной сущности и выполняет редирект:
|
|
3580
|
+
* - на сервере (SSR) — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
|
|
3581
|
+
* - в браузере — выполняет навигацию средствами {@link Router}.
|
|
3582
|
+
*
|
|
3583
|
+
* Если родительская категория не найдена, поток завершается ошибкой {@link HttpErrorResponse},
|
|
3584
|
+
* чтобы вызывающий код отобразил страницу ошибки.
|
|
3585
|
+
*/
|
|
3586
|
+
class ScCatalogRedirectService {
|
|
3587
|
+
constructor() {
|
|
3588
|
+
/**
|
|
3589
|
+
* Сервис для работы с каталогом.
|
|
3590
|
+
*/
|
|
3591
|
+
this.catalogService = inject(ScCatalogService);
|
|
3592
|
+
/**
|
|
3593
|
+
* Сервис маршрутизации.
|
|
3594
|
+
*/
|
|
3595
|
+
this.router = inject(Router);
|
|
3596
|
+
/**
|
|
3597
|
+
* Признак использования идентификатора или slug в маршрутах товаров и категорий.
|
|
3598
|
+
*/
|
|
3599
|
+
this.idOrSlug = inject(SC_ID_OR_SLUG_IN_ROUTE);
|
|
3600
|
+
/**
|
|
3601
|
+
* Признак, что текущий скрипт исполняется на сервере.
|
|
3602
|
+
*/
|
|
3603
|
+
this.isServer = inject(IS_SERVER);
|
|
3604
|
+
/**
|
|
3605
|
+
* Данные об ответе на запрос (доступны только на сервере при SSR).
|
|
3606
|
+
*/
|
|
3607
|
+
this.response = inject(RESPONSE, { optional: true });
|
|
3608
|
+
}
|
|
3609
|
+
/**
|
|
3610
|
+
* Выполняет редирект на родительскую категорию недоступной категории.
|
|
3611
|
+
*
|
|
3612
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
3613
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
3614
|
+
*/
|
|
3615
|
+
redirectToCategoryParent$(categoryIdOrSlug) {
|
|
3616
|
+
return this.redirectToParentCategory$(this.catalogService.getCategoryParentCategory$(categoryIdOrSlug));
|
|
3617
|
+
}
|
|
3618
|
+
/**
|
|
3619
|
+
* Выполняет редирект на родительскую категорию недоступного товара.
|
|
3620
|
+
*
|
|
3621
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
3622
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
3623
|
+
*/
|
|
3624
|
+
redirectToProductParent$(productIdOrSlug) {
|
|
3625
|
+
return this.redirectToParentCategory$(this.catalogService.getProductParentCategory$(productIdOrSlug));
|
|
3626
|
+
}
|
|
3627
|
+
/**
|
|
3628
|
+
* Выполняет редирект на полученную родительскую категорию.
|
|
3629
|
+
*
|
|
3630
|
+
* @param parentCategory$ Поток с данными родительской категории.
|
|
3631
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse} с кодом 404, если родительская категория не найдена.
|
|
3632
|
+
*/
|
|
3633
|
+
redirectToParentCategory$(parentCategory$) {
|
|
3634
|
+
return parentCategory$.pipe(switchMap((parentCategory) => {
|
|
3635
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
3636
|
+
const target = parentCategory[this.idOrSlug];
|
|
3637
|
+
// Родительская категория не найдена — отображаем страницу ошибки.
|
|
3638
|
+
if (!tuiIsPresent(target)) {
|
|
3639
|
+
return throwError(() => new HttpErrorResponse({ status: 404 }));
|
|
3640
|
+
}
|
|
3641
|
+
const urlTree = this.router.createUrlTree(['/catalog', target]);
|
|
3642
|
+
if (this.isServer) {
|
|
3643
|
+
// SSR: выставляем 302 и заголовок Location для корректного редиректа поисковых ботов.
|
|
3644
|
+
this.response?.setHeader('Location', this.router.serializeUrl(urlTree));
|
|
3645
|
+
this.response?.status(302);
|
|
3646
|
+
return EMPTY;
|
|
3647
|
+
}
|
|
3648
|
+
return from(this.router.navigateByUrl(urlTree, { replaceUrl: true })).pipe(switchMap(() => EMPTY));
|
|
3649
|
+
}));
|
|
3650
|
+
}
|
|
3651
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3652
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, providedIn: 'root' }); }
|
|
3653
|
+
}
|
|
3654
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogRedirectService, decorators: [{
|
|
3655
|
+
type: Injectable,
|
|
3656
|
+
args: [{
|
|
3657
|
+
providedIn: 'root',
|
|
3658
|
+
}]
|
|
3659
|
+
}] });
|
|
3660
|
+
|
|
3554
3661
|
/* eslint-disable no-param-reassign,no-return-assign,no-void */
|
|
3555
3662
|
/**
|
|
3556
3663
|
* Сервис для работы с избранными товарами и категориями.
|
|
@@ -8401,5 +8508,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8401
8508
|
* Generated bundle index. Do not edit.
|
|
8402
8509
|
*/
|
|
8403
8510
|
|
|
8404
|
-
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 };
|
|
8511
|
+
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 };
|
|
8405
8512
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|