@snabcentr/client-core 2.70.2 → 2.71.1

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.
@@ -50,12 +50,14 @@ const ScLoadingRequestState = { status: ScRequestStateStatusEnum.Loading };
50
50
  const ScSuccessRequestState = (requestData) => ({ status: ScRequestStateStatusEnum.Success, data: requestData });
51
51
  /**
52
52
  * Состояние ошибки.
53
+ *
54
+ * @param error Причина ошибки (например, HttpErrorResponse).
53
55
  */
54
- const ScErrorRequestState = { status: ScRequestStateStatusEnum.Error };
56
+ const ScErrorRequestState = (error) => ({ status: ScRequestStateStatusEnum.Error, error });
55
57
  /**
56
58
  * Преобразует поток данных в поток с состояниями запроса.
57
59
  */
58
- const mapToRequestState = () => (source$) => source$.pipe(map((requestData) => ScSuccessRequestState(requestData)), startWith(ScLoadingRequestState), catchError(() => of(ScErrorRequestState)));
60
+ const mapToRequestState = () => (source$) => source$.pipe(map((requestData) => ScSuccessRequestState(requestData)), startWith(ScLoadingRequestState), catchError((error) => of(ScErrorRequestState(error))));
59
61
  /**
60
62
  * Извлекает данные из потока состояний запроса или возвращает null.
61
63
  */
@@ -3649,6 +3651,52 @@ class ScCatalogRedirectService {
3649
3651
  redirectToProductParent$(productIdOrSlug) {
3650
3652
  return this.redirectToParentCategory$(this.catalogService.getProductParentCategory$(productIdOrSlug));
3651
3653
  }
3654
+ /**
3655
+ * Оператор устойчивой обработки недоступной (HTTP-ошибка) категории в потоке данных: при 404 выполняет редирект
3656
+ * на родительскую категорию, при недоступном родителе или иной ошибке сообщает код через {@link onErrorCode}.
3657
+ * Ошибку не пробрасывает (завершает поток {@link EMPTY}), поэтому поток данных не завершается ошибкой.
3658
+ *
3659
+ * @param categoryIdOrSlug Идентификатор или slug недоступной категории.
3660
+ * @param onErrorCode Колбэк установки кода ошибки (например, для отображения страницы ошибки).
3661
+ */
3662
+ handleUnavailableCategory$(categoryIdOrSlug, onErrorCode) {
3663
+ return this.handleUnavailable$(() => this.redirectToCategoryParent$(categoryIdOrSlug), onErrorCode);
3664
+ }
3665
+ /**
3666
+ * Оператор устойчивой обработки недоступного (HTTP-ошибка) товара в потоке данных: при 404 выполняет редирект
3667
+ * на родительскую категорию товара, при недоступном родителе или иной ошибке сообщает код через {@link onErrorCode}.
3668
+ * Ошибку не пробрасывает (завершает поток {@link EMPTY}), поэтому поток данных не завершается ошибкой.
3669
+ *
3670
+ * @param productIdOrSlug Идентификатор или slug недоступного товара.
3671
+ * @param onErrorCode Колбэк установки кода ошибки (например, для отображения страницы ошибки).
3672
+ */
3673
+ handleUnavailableProduct$(productIdOrSlug, onErrorCode) {
3674
+ return this.handleUnavailable$(() => this.redirectToProductParent$(productIdOrSlug), onErrorCode);
3675
+ }
3676
+ /**
3677
+ * Базовый оператор устойчивой обработки недоступной сущности: при 404 — редирект на родителя (через {@link redirectToParent$}),
3678
+ * при недоступном родителе или ином {@link HttpErrorResponse} — {@link onErrorCode} с кодом ответа; всегда {@link EMPTY}.
3679
+ *
3680
+ * @param redirectToParent$ Фабрика потока редиректа на родительскую категорию.
3681
+ * @param onErrorCode Колбэк установки кода ошибки.
3682
+ */
3683
+ // eslint-disable-next-line class-methods-use-this
3684
+ handleUnavailable$(redirectToParent$, onErrorCode) {
3685
+ return (source$) => source$.pipe(catchError$1((error) => {
3686
+ if (error instanceof HttpErrorResponse && error.status === 404) {
3687
+ return redirectToParent$().pipe(catchError$1((redirectError) => {
3688
+ if (redirectError instanceof HttpErrorResponse) {
3689
+ onErrorCode(redirectError.status);
3690
+ }
3691
+ return EMPTY;
3692
+ }));
3693
+ }
3694
+ if (error instanceof HttpErrorResponse) {
3695
+ onErrorCode(error.status);
3696
+ }
3697
+ return EMPTY;
3698
+ }));
3699
+ }
3652
3700
  /**
3653
3701
  * Выполняет редирект на полученную родительскую категорию.
3654
3702
  *
@@ -4550,34 +4598,54 @@ const scGetCurrentRoute = (route) => {
4550
4598
  return currentRoute;
4551
4599
  };
4552
4600
 
4601
+ /**
4602
+ * Токен состояния запроса данных о категории (загрузка / успех / ошибка).
4603
+ */
4604
+ const SC_CATEGORY_STATE = new InjectionToken('A stream with current category request state');
4553
4605
  /**
4554
4606
  * Токен потока данных о категории.
4555
4607
  */
4556
4608
  const SC_CATEGORY_INFO = new InjectionToken('A stream with current category information');
4557
4609
  /**
4558
- * Фабрика создания потока данных о категории.
4610
+ * Фабрика создания потока состояния запроса данных о категории.
4611
+ *
4612
+ * При недоступной (HTTP 404) категории выполняет редирект на родительскую категорию; если родитель не найден
4613
+ * или ошибка иная — эмитит состояние ошибки (по нему компонент показывает страницу ошибки).
4559
4614
  *
4560
4615
  * @param router Сервис для работы с маршрутом.
4561
4616
  * @param route Маршрут.
4562
4617
  * @param catalogService Сервис для работы с каталогом.
4618
+ * @param catalogRedirectService Сервис редиректа на родительскую категорию.
4563
4619
  */
4564
- function categoryFactory(router, route, catalogService) {
4620
+ function categoryStateFactory(router, route, catalogService, catalogRedirectService) {
4565
4621
  return router.events.pipe(filter((event) => event instanceof NavigationEnd)).pipe(startWith$1(null), switchMap(() => {
4566
4622
  const categoryIdOrSlug = scGetCurrentRoute(route).snapshot.paramMap.get('categoryIdOrSlug');
4567
- if (categoryIdOrSlug) {
4568
- return catalogService.getCategoryCached$(categoryIdOrSlug);
4623
+ if (!categoryIdOrSlug) {
4624
+ return of(ScSuccessRequestState(null));
4569
4625
  }
4570
- return of(null);
4626
+ return catalogService.getCategoryCached$(categoryIdOrSlug).pipe(map$1((category) => ScSuccessRequestState(category)), startWith$1(ScLoadingRequestState), catchError$1((error) => {
4627
+ if (error instanceof HttpErrorResponse && error.status === 404) {
4628
+ return catalogRedirectService
4629
+ .redirectToCategoryParent$(categoryIdOrSlug)
4630
+ .pipe(catchError$1((redirectError) => of(ScErrorRequestState(redirectError))));
4631
+ }
4632
+ return of(ScErrorRequestState(error));
4633
+ }));
4571
4634
  }), shareReplay({ bufferSize: 1, refCount: true }), takeUntilDestroyed());
4572
4635
  }
4573
4636
  /**
4574
- * Провайдеры потока данных о категории.
4637
+ * Провайдеры состояния и потока данных о категории.
4575
4638
  */
4576
4639
  const CATEGORY_PROVIDERS = [
4640
+ {
4641
+ provide: SC_CATEGORY_STATE,
4642
+ deps: [Router, ActivatedRoute, ScCatalogService, ScCatalogRedirectService],
4643
+ useFactory: categoryStateFactory,
4644
+ },
4577
4645
  {
4578
4646
  provide: SC_CATEGORY_INFO,
4579
- deps: [Router, ActivatedRoute, ScCatalogService],
4580
- useFactory: categoryFactory,
4647
+ deps: [SC_CATEGORY_STATE],
4648
+ useFactory: (state$) => state$.pipe(mapRequestStateToDataOrNull()),
4581
4649
  },
4582
4650
  ];
4583
4651
 
@@ -4991,7 +5059,7 @@ class ScRequisitesService {
4991
5059
  /**
4992
5060
  * Создаёт запрос получения списка всех контактов.
4993
5061
  */
4994
- this.contacts$ = inject(SC_USER_INFO).pipe(switchMap(() => this.http.get(`${this.urls.apiUrl}/contacts`)), shareReplay(1));
5062
+ this.contacts$ = inject(SC_USER_INFO).pipe(switchMap(() => this.http.get(`${this.urls.apiUrl}/contacts`).pipe(catchError$1(() => of({ personal: [], socialMedia: [], directions: {} })))), shareReplay({ refCount: true, bufferSize: 1 }));
4995
5063
  /**
4996
5064
  * Создаёт запрос получения списка контактов для решения возникающих вопросов.
4997
5065
  */
@@ -4999,11 +5067,11 @@ class ScRequisitesService {
4999
5067
  /**
5000
5068
  * Создаёт запрос получения списка контактов розничных магазинов.
5001
5069
  */
5002
- this.retail$ = this.contacts$.pipe(map$1((contacts) => contacts.retail), first(), shareReplay(1));
5070
+ this.retail$ = this.contacts$.pipe(map$1((contacts) => contacts.retail), first(), shareReplay({ refCount: true, bufferSize: 1 }));
5003
5071
  /**
5004
5072
  * Создаёт запрос получения списка ссылок на социальные сети и другие каналы коммуникации.
5005
5073
  */
5006
- this.socialMedia$ = this.contacts$.pipe(map$1((contacts) => contacts.socialMedia), first(), shareReplay(1));
5074
+ this.socialMedia$ = this.contacts$.pipe(map$1((contacts) => contacts.socialMedia), first(), shareReplay({ refCount: true, bufferSize: 1 }));
5007
5075
  /**
5008
5076
  * Создаёт запрос получения списка контактов менеджеров по направлениям продаж.
5009
5077
  */
@@ -5014,11 +5082,11 @@ class ScRequisitesService {
5014
5082
  this.mapManagers(Number.parseFloat(key), manager);
5015
5083
  });
5016
5084
  }
5017
- }), first(), shareReplay(1));
5085
+ }), first(), shareReplay({ refCount: true, bufferSize: 1 }));
5018
5086
  /**
5019
5087
  * Создаёт запрос получения списка реквизитов компании.
5020
5088
  */
5021
- this.requisites$ = this.http.get(`${this.urls.apiUrl}/requisites`).pipe(shareReplay(1));
5089
+ this.requisites$ = this.http.get(`${this.urls.apiUrl}/requisites`).pipe(catchError$1(() => EMPTY), shareReplay({ refCount: true, bufferSize: 1 }));
5022
5090
  }
5023
5091
  /**
5024
5092
  * Устанавливает поисковый запрос в {@link BehaviorSubject}.
@@ -8751,5 +8819,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8751
8819
  * Generated bundle index. Do not edit.
8752
8820
  */
8753
8821
 
8754
- 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 };
8822
+ 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_CATEGORY_STATE, 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 };
8755
8823
  //# sourceMappingURL=snabcentr-client-core.mjs.map