@snabcentr/client-core 4.2.0 → 4.4.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.
|
@@ -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, isObject, isDate, isMatch, isArray, get, isNumber, isBoolean } from 'lodash-es';
|
|
@@ -14,7 +14,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
14
14
|
import { tuiIsPresent, TuiDay, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
|
|
15
15
|
import { tuiCleanObject } from '@taiga-ui/addon-doc/utils';
|
|
16
16
|
import * as i2 from '@angular/router';
|
|
17
|
-
import {
|
|
17
|
+
import { Router, NavigationEnd, ActivatedRoute } from '@angular/router';
|
|
18
18
|
import { toSnake, objectToSnake, objectToCamel } from 'ts-case-convert';
|
|
19
19
|
import { Meta, Title } from '@angular/platform-browser';
|
|
20
20
|
|
|
@@ -3487,6 +3487,28 @@ class ScCatalogService {
|
|
|
3487
3487
|
}
|
|
3488
3488
|
}));
|
|
3489
3489
|
}
|
|
3490
|
+
/**
|
|
3491
|
+
* Возвращает данные о родительской категории для редиректа, когда категория недоступна (HTTP 404).
|
|
3492
|
+
* Если у категории нет нескрытой родительской категории, возвращается пустой объект.
|
|
3493
|
+
*
|
|
3494
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
3495
|
+
*/
|
|
3496
|
+
getCategoryParentCategory$(categoryIdOrSlug) {
|
|
3497
|
+
return this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/parent-category`, {
|
|
3498
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3499
|
+
});
|
|
3500
|
+
}
|
|
3501
|
+
/**
|
|
3502
|
+
* Возвращает данные о родительской категории для редиректа, когда товар недоступен (HTTP 404).
|
|
3503
|
+
* Если у товара нет нескрытой родительской категории, возвращается пустой объект.
|
|
3504
|
+
*
|
|
3505
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
3506
|
+
*/
|
|
3507
|
+
getProductParentCategory$(productIdOrSlug) {
|
|
3508
|
+
return this.http.get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/parent-category`, {
|
|
3509
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3510
|
+
});
|
|
3511
|
+
}
|
|
3490
3512
|
getProductDataCached$(productIdOrSlug) {
|
|
3491
3513
|
const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);
|
|
3492
3514
|
if (valueFromMap) {
|
|
@@ -3549,6 +3571,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
3549
3571
|
args: [SC_CACHE_LIFETIME]
|
|
3550
3572
|
}] }, { type: ScUserMetrikaService }] });
|
|
3551
3573
|
|
|
3574
|
+
/**
|
|
3575
|
+
* Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
|
|
3576
|
+
*
|
|
3577
|
+
* Запрашивает у бэкенда родительскую категорию недоступной сущности и выполняет редирект:
|
|
3578
|
+
* - на сервере (SSR) — выставляет HTTP-статус 302 и заголовок `Location` для корректного редиректа поисковых ботов;
|
|
3579
|
+
* - в браузере — выполняет навигацию средствами {@link Router}.
|
|
3580
|
+
*
|
|
3581
|
+
* Если родительская категория не найдена, поток завершается ошибкой {@link HttpErrorResponse},
|
|
3582
|
+
* чтобы вызывающий код отобразил страницу ошибки.
|
|
3583
|
+
*/
|
|
3584
|
+
class ScCatalogRedirectService {
|
|
3585
|
+
constructor() {
|
|
3586
|
+
/**
|
|
3587
|
+
* Сервис для работы с каталогом.
|
|
3588
|
+
*/
|
|
3589
|
+
this.catalogService = inject(ScCatalogService);
|
|
3590
|
+
/**
|
|
3591
|
+
* Сервис маршрутизации.
|
|
3592
|
+
*/
|
|
3593
|
+
this.router = inject(Router);
|
|
3594
|
+
/**
|
|
3595
|
+
* Признак использования идентификатора или slug в маршрутах товаров и категорий.
|
|
3596
|
+
*/
|
|
3597
|
+
this.idOrSlug = inject(SC_ID_OR_SLUG_IN_ROUTE);
|
|
3598
|
+
/**
|
|
3599
|
+
* Признак, что текущий скрипт исполняется на сервере.
|
|
3600
|
+
*/
|
|
3601
|
+
this.isServer = inject(IS_SERVER);
|
|
3602
|
+
/**
|
|
3603
|
+
* Данные об ответе на запрос (доступны только на сервере при SSR).
|
|
3604
|
+
*/
|
|
3605
|
+
this.response = inject(RESPONSE, { optional: true });
|
|
3606
|
+
}
|
|
3607
|
+
/**
|
|
3608
|
+
* Выполняет редирект на родительскую категорию недоступной категории.
|
|
3609
|
+
*
|
|
3610
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
3611
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
3612
|
+
*/
|
|
3613
|
+
redirectToCategoryParent$(categoryIdOrSlug) {
|
|
3614
|
+
return this.redirectToParentCategory$(this.catalogService.getCategoryParentCategory$(categoryIdOrSlug));
|
|
3615
|
+
}
|
|
3616
|
+
/**
|
|
3617
|
+
* Выполняет редирект на родительскую категорию недоступного товара.
|
|
3618
|
+
*
|
|
3619
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
3620
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
3621
|
+
*/
|
|
3622
|
+
redirectToProductParent$(productIdOrSlug) {
|
|
3623
|
+
return this.redirectToParentCategory$(this.catalogService.getProductParentCategory$(productIdOrSlug));
|
|
3624
|
+
}
|
|
3625
|
+
/**
|
|
3626
|
+
* Выполняет редирект на полученную родительскую категорию.
|
|
3627
|
+
*
|
|
3628
|
+
* @param parentCategory$ Поток с данными родительской категории.
|
|
3629
|
+
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse} с кодом 404, если родительская категория не найдена.
|
|
3630
|
+
*/
|
|
3631
|
+
redirectToParentCategory$(parentCategory$) {
|
|
3632
|
+
return parentCategory$.pipe(switchMap((parentCategory) => {
|
|
3633
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
3634
|
+
const target = parentCategory[this.idOrSlug];
|
|
3635
|
+
// Родительская категория не найдена — отображаем страницу ошибки.
|
|
3636
|
+
if (!tuiIsPresent(target)) {
|
|
3637
|
+
return throwError(() => new HttpErrorResponse({ status: 404 }));
|
|
3638
|
+
}
|
|
3639
|
+
const urlTree = this.router.createUrlTree(['/catalog', target]);
|
|
3640
|
+
if (this.isServer) {
|
|
3641
|
+
// SSR: выставляем 302 и заголовок Location для корректного редиректа поисковых ботов.
|
|
3642
|
+
this.response?.setHeader('Location', this.router.serializeUrl(urlTree));
|
|
3643
|
+
this.response?.status(302);
|
|
3644
|
+
return EMPTY;
|
|
3645
|
+
}
|
|
3646
|
+
return from(this.router.navigateByUrl(urlTree, { replaceUrl: true })).pipe(switchMap(() => EMPTY));
|
|
3647
|
+
}));
|
|
3648
|
+
}
|
|
3649
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScCatalogRedirectService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3650
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScCatalogRedirectService, providedIn: 'root' }); }
|
|
3651
|
+
}
|
|
3652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScCatalogRedirectService, decorators: [{
|
|
3653
|
+
type: Injectable,
|
|
3654
|
+
args: [{
|
|
3655
|
+
providedIn: 'root',
|
|
3656
|
+
}]
|
|
3657
|
+
}] });
|
|
3658
|
+
|
|
3552
3659
|
/* eslint-disable no-param-reassign,no-return-assign,no-void */
|
|
3553
3660
|
/**
|
|
3554
3661
|
* Сервис для работы с избранными товарами и категориями.
|
|
@@ -8369,5 +8476,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
8369
8476
|
* Generated bundle index. Do not edit.
|
|
8370
8477
|
*/
|
|
8371
8478
|
|
|
8372
|
-
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, isExpiredToken, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
|
|
8479
|
+
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, isExpiredToken, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
|
|
8373
8480
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|