@snabcentr/client-core 4.14.3 → 4.16.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.
@@ -4,7 +4,7 @@ import { map, startWith, catchError } from 'rxjs/operators';
4
4
  import { parseISO, parse, isValid, format } from 'date-fns';
5
5
  import { isString, constant, isNil, isObject, isDate, isMatch, isArray, omit, get, isNumber, isBoolean } from 'lodash-es';
6
6
  import * as i0 from '@angular/core';
7
- import { InjectionToken, inject, PLATFORM_ID, Inject, Optional, Injectable, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RESPONSE_INIT, RendererFactory2 } from '@angular/core';
7
+ import { InjectionToken, inject, PLATFORM_ID, Inject, Optional, Injectable, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RESPONSE_INIT, assertInInjectionContext, RendererFactory2 } from '@angular/core';
8
8
  import { WA_LOCAL_STORAGE, WA_USER_AGENT, WA_WINDOW } from '@ng-web-apis/common';
9
9
  import { filterByKey, toValue, WA_STORAGE_EVENT, WaStorageService } from '@ng-web-apis/storage';
10
10
  import { isPlatformBrowser, isPlatformServer, DOCUMENT, formatDate } from '@angular/common';
@@ -3464,25 +3464,6 @@ class ScCatalogService {
3464
3464
  return data.map((item, index) => new ScProduct(item, index));
3465
3465
  }));
3466
3466
  }
3467
- /**
3468
- * Создает запрос получения списка товаров, созданных за указанный период (с пагинацией).
3469
- *
3470
- * @deprecated Используйте {@link getProducts$} с фильтром `created`. Удалить после перевода всех веток.
3471
- *
3472
- * @param params Параметры запроса товаров за период.
3473
- */
3474
- getNewProducts$(params) {
3475
- return this.http
3476
- .get(`${this.urls.apiUrl}/catalog/products/new`, {
3477
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3478
- params: this.convertersService.toHttpParams({ ...params }, { nonNullable: true }),
3479
- })
3480
- .pipe(map$1((data) => {
3481
- const cloneData = structuredClone(data);
3482
- cloneData.data = cloneData.data.map((item) => new ScProduct(item));
3483
- return cloneData;
3484
- }));
3485
- }
3486
3467
  /**
3487
3468
  * Создает запрос получения списка товаров категории и кэширует его.
3488
3469
  *
@@ -7404,6 +7385,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7404
7385
  }]
7405
7386
  }], ctorParameters: () => [] });
7406
7387
 
7388
+ /* eslint-disable unicorn/prevent-abbreviations */
7389
+ /**
7390
+ * Наименование query-параметра номера страницы пагинации.
7391
+ */
7392
+ const SC_PAGE_QUERY_PARAM = 'page';
7393
+ /**
7394
+ * Преобразует значение query-параметра {@link SC_PAGE_QUERY_PARAM} в номер страницы пагинации.
7395
+ * Нечисловые, дробные и меньшие единицы значения приводятся к первой странице.
7396
+ *
7397
+ * @param value Значение query-параметра номера страницы пагинации.
7398
+ */
7399
+ function scParsePageQueryParam(value) {
7400
+ return Math.max(1, Math.trunc(Number(value) || 1));
7401
+ }
7402
+ /**
7403
+ * Возвращает {@link Observable} изменения номера страницы пагинации из query-параметра {@link SC_PAGE_QUERY_PARAM}.
7404
+ * Должна вызываться в контексте инъекции.
7405
+ */
7406
+ function scGetPageQueryParamChanges() {
7407
+ assertInInjectionContext(scGetPageQueryParamChanges);
7408
+ return inject(ActivatedRoute).queryParamMap.pipe(map$1((params) => scParsePageQueryParam(params.get(SC_PAGE_QUERY_PARAM))), distinctUntilChanged());
7409
+ }
7410
+
7407
7411
  /**
7408
7412
  * Сервис пагинации.
7409
7413
  */
@@ -7472,7 +7476,9 @@ class ScPaginationService {
7472
7476
  return [value, value];
7473
7477
  }, [null, null]), map$1(([paginate]) => paginate), takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true))), share());
7474
7478
  this.others$
7475
- .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(scan((accumulator) => accumulator + 1, 1), startWith$1(1))), takeUntilDestroyed())
7479
+ .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(
7480
+ // Страница может быть изменена извне (например, из query-параметра page), поэтому номер следующей страницы берётся из текущего состояния page$.
7481
+ map$1(() => this.page$.value.page + 1), startWith$1(1))), takeUntilDestroyed())
7476
7482
  .subscribe((page) => {
7477
7483
  this.patchPage({ page: page });
7478
7484
  });
@@ -7561,6 +7567,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7561
7567
  type: Injectable
7562
7568
  }], ctorParameters: () => [] });
7563
7569
 
7570
+ /* eslint-disable unicorn/prevent-abbreviations */
7571
+ /**
7572
+ * Сервис синхронизации номера страницы пагинации с query-параметром {@link SC_PAGE_QUERY_PARAM}.
7573
+ */
7574
+ class ScPaginationPageQueryParamService {
7575
+ /**
7576
+ * Инициализирует экземпляр класса {@link ScPaginationPageQueryParamService}.
7577
+ */
7578
+ constructor() {
7579
+ /**
7580
+ * Сервис пагинации.
7581
+ */
7582
+ this.paginationService = inject((ScPaginationService));
7583
+ /**
7584
+ * Сервис предоставляющий доступ к данным о маршруте.
7585
+ */
7586
+ this.route = inject(ActivatedRoute);
7587
+ /**
7588
+ * Сервис маршрутизации.
7589
+ */
7590
+ this.router = inject(Router);
7591
+ /**
7592
+ * Номер страницы пагинации, применённый последним.
7593
+ */
7594
+ this.lastAppliedPage = 1;
7595
+ scGetPageQueryParamChanges()
7596
+ .pipe(takeUntilDestroyed())
7597
+ .subscribe((page) => {
7598
+ if (!this.lastParams || page === this.lastAppliedPage) {
7599
+ return;
7600
+ }
7601
+ this.lastAppliedPage = page;
7602
+ // Повторная установка параметров сбрасывает накопленный список, чтобы отобразить только страницу из query-параметра.
7603
+ this.paginationService.patchOthers(this.lastParams);
7604
+ this.paginationService.patchPage({ page });
7605
+ });
7606
+ }
7607
+ /**
7608
+ * Частично обновляет остальные параметры пагинации и применяет номер страницы из query-параметра при первом вызове.
7609
+ *
7610
+ * @param parameters Новые параметры пагинации.
7611
+ */
7612
+ patchOthers(parameters) {
7613
+ const isFirst = !this.lastParams;
7614
+ this.lastParams = parameters;
7615
+ this.paginationService.patchOthers(parameters);
7616
+ if (isFirst) {
7617
+ const pageFromUrl = scParsePageQueryParam(this.route.snapshot.queryParamMap.get(SC_PAGE_QUERY_PARAM));
7618
+ this.lastAppliedPage = pageFromUrl;
7619
+ if (pageFromUrl > 1) {
7620
+ this.paginationService.patchPage({ page: pageFromUrl });
7621
+ }
7622
+ }
7623
+ else {
7624
+ // Изменение фильтров сбрасывает пагинацию на первую страницу.
7625
+ this.resetPageQueryParam();
7626
+ }
7627
+ }
7628
+ /**
7629
+ * Применяет количество записей на странице пагинации с сохранением текущей страницы.
7630
+ *
7631
+ * @param perPage Количество записей на странице пагинации.
7632
+ */
7633
+ patchPerPage(perPage) {
7634
+ if (this.lastParams) {
7635
+ // Повторная установка параметров сбрасывает накопленный список, чтобы текущая страница была запрошена заново с новым количеством записей.
7636
+ this.paginationService.patchOthers(this.lastParams);
7637
+ this.paginationService.patchPage({ page: this.lastAppliedPage, perPage });
7638
+ }
7639
+ else {
7640
+ this.paginationService.patchPage({ page: 1, perPage });
7641
+ }
7642
+ }
7643
+ /**
7644
+ * Убирает номер страницы пагинации из query-параметров.
7645
+ */
7646
+ resetPageQueryParam() {
7647
+ if (!this.lastParams || this.lastAppliedPage === 1) {
7648
+ return;
7649
+ }
7650
+ this.lastAppliedPage = 1;
7651
+ // eslint-disable-next-line no-void
7652
+ void this.router.navigate([], { queryParams: { [SC_PAGE_QUERY_PARAM]: null }, queryParamsHandling: 'merge' });
7653
+ }
7654
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScPaginationPageQueryParamService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7655
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScPaginationPageQueryParamService }); }
7656
+ }
7657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScPaginationPageQueryParamService, decorators: [{
7658
+ type: Injectable
7659
+ }], ctorParameters: () => [] });
7660
+
7564
7661
  /**
7565
7662
  * Перечисление идентификаторов статусов опросника.
7566
7663
  */
@@ -8397,9 +8494,12 @@ class ScSeoService {
8397
8494
  const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogItemDefaultSeo.keywords}`;
8398
8495
  const meta = item.seo?.meta ?? [];
8399
8496
  // Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
8497
+ // Страницы пагинации индексируются отдельно, поэтому каноническая ссылка содержит номер страницы из query-параметров.
8498
+ const page = scParsePageQueryParam(this.router.parseUrl(this.router.url).queryParamMap.get(SC_PAGE_QUERY_PARAM));
8499
+ const canonicalUrl = page > 1 ? `${url}?${SC_PAGE_QUERY_PARAM}=${page}` : url;
8400
8500
  this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
8401
8501
  this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
8402
- this.setCanonicalLink(url);
8502
+ this.setCanonicalLink(canonicalUrl);
8403
8503
  // Устанавливаем Schema.org параметры.
8404
8504
  this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
8405
8505
  }
@@ -8888,5 +8988,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8888
8988
  * Generated bundle index. Do not edit.
8889
8989
  */
8890
8990
 
8891
- export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, 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_PRODUCTS_PAGINATION_LOADER, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_SSR_HTTP_TIMEOUT, 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, ScSsrTimeoutInterceptor, 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 };
8991
+ export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, 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_PAGE_QUERY_PARAM, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCTS_PAGINATION_LOADER, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_SSR_HTTP_TIMEOUT, 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, ScPaginationPageQueryParamService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSsrTimeoutInterceptor, 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, scGetPageQueryParamChanges, scOrderIsLoaded, scParsePageQueryParam, searchTermFactory };
8892
8992
  //# sourceMappingURL=snabcentr-client-core.mjs.map