@snabcentr/client-core 3.16.0 → 3.16.2

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, isNil, isMatch, isArray, omit, get } from 'lodash-es';
6
6
  import * as i0 from '@angular/core';
7
- import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RendererFactory2 } from '@angular/core';
7
+ import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, DestroyRef, LOCALE_ID, Pipe, 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, StorageService } from '@ng-web-apis/storage';
10
10
  import { isPlatformBrowser, isPlatformServer, DOCUMENT, formatDate } from '@angular/common';
@@ -2063,6 +2063,10 @@ class ScUserMetadata {
2063
2063
  * Формат отображения каталога.
2064
2064
  */
2065
2065
  this.catalogFormat = ScCatalogFormat.normal;
2066
+ /**
2067
+ * Признак свёрнутой до значков боковой панели каталога.
2068
+ */
2069
+ this.isCatalogSidebarCollapsed = false;
2066
2070
  Object.assign(this, data);
2067
2071
  }
2068
2072
  }
@@ -2248,6 +2252,20 @@ class ScUIService {
2248
2252
  setCatalogFormat(catalogFormat) {
2249
2253
  this.setMetadataByKey('catalogFormat', catalogFormat);
2250
2254
  }
2255
+ /**
2256
+ * Возвращает {@link Observable} признака свёрнутой до значков боковой панели каталога.
2257
+ */
2258
+ getCatalogSidebarCollapsed$() {
2259
+ return this.getMetadataChangeByKey$('isCatalogSidebarCollapsed');
2260
+ }
2261
+ /**
2262
+ * Устанавливает признак свёрнутой до значков боковой панели каталога.
2263
+ *
2264
+ * @param isCatalogSidebarCollapsed Признак свёрнутой до значков боковой панели каталога.
2265
+ */
2266
+ setCatalogSidebarCollapsed(isCatalogSidebarCollapsed) {
2267
+ this.setMetadataByKey('isCatalogSidebarCollapsed', isCatalogSidebarCollapsed);
2268
+ }
2251
2269
  /**
2252
2270
  * Устанавливает идентификатор выбранного склада.
2253
2271
  *
@@ -7420,6 +7438,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
7420
7438
  }]
7421
7439
  }], ctorParameters: () => [] });
7422
7440
 
7441
+ /* eslint-disable unicorn/prevent-abbreviations */
7442
+ /**
7443
+ * Наименование query-параметра номера страницы пагинации.
7444
+ */
7445
+ const SC_PAGE_QUERY_PARAM = 'page';
7446
+ /**
7447
+ * Преобразует значение query-параметра {@link SC_PAGE_QUERY_PARAM} в номер страницы пагинации.
7448
+ * Нечисловые, дробные и меньшие единицы значения приводятся к первой странице.
7449
+ *
7450
+ * @param value Значение query-параметра номера страницы пагинации.
7451
+ */
7452
+ function scParsePageQueryParam(value) {
7453
+ return Math.max(1, Math.trunc(Number(value) || 1));
7454
+ }
7455
+ /**
7456
+ * Возвращает {@link Observable} изменения номера страницы пагинации из query-параметра {@link SC_PAGE_QUERY_PARAM}.
7457
+ * Должна вызываться в контексте инъекции.
7458
+ */
7459
+ function scGetPageQueryParamChanges() {
7460
+ assertInInjectionContext(scGetPageQueryParamChanges);
7461
+ return inject(ActivatedRoute).queryParamMap.pipe(map$1((params) => scParsePageQueryParam(params.get(SC_PAGE_QUERY_PARAM))), distinctUntilChanged());
7462
+ }
7463
+
7423
7464
  /**
7424
7465
  * Сервис пагинации.
7425
7466
  */
@@ -7488,7 +7529,9 @@ class ScPaginationService {
7488
7529
  return [value, value];
7489
7530
  }, [null, null]), map$1(([paginate]) => paginate), takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true))), share());
7490
7531
  this.others$
7491
- .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(scan((accumulator) => accumulator + 1, 1), startWith$1(1))), takeUntilDestroyed())
7532
+ .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(
7533
+ // Страница может быть изменена извне (например, из query-параметра page), поэтому номер следующей страницы берётся из текущего состояния page$.
7534
+ map$1(() => this.page$.value.page + 1), startWith$1(1))), takeUntilDestroyed())
7492
7535
  .subscribe((page) => {
7493
7536
  this.patchPage({ page: page });
7494
7537
  });
@@ -7577,6 +7620,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
7577
7620
  type: Injectable
7578
7621
  }], ctorParameters: () => [] });
7579
7622
 
7623
+ /* eslint-disable unicorn/prevent-abbreviations */
7624
+ /**
7625
+ * Сервис синхронизации номера страницы пагинации с query-параметром {@link SC_PAGE_QUERY_PARAM}.
7626
+ */
7627
+ class ScPaginationPageQueryParamService {
7628
+ /**
7629
+ * Инициализирует экземпляр класса {@link ScPaginationPageQueryParamService}.
7630
+ */
7631
+ constructor() {
7632
+ /**
7633
+ * Сервис пагинации.
7634
+ */
7635
+ this.paginationService = inject((ScPaginationService));
7636
+ /**
7637
+ * Сервис предоставляющий доступ к данным о маршруте.
7638
+ */
7639
+ this.route = inject(ActivatedRoute);
7640
+ /**
7641
+ * Сервис маршрутизации.
7642
+ */
7643
+ this.router = inject(Router);
7644
+ /**
7645
+ * Номер страницы пагинации, применённый последним.
7646
+ */
7647
+ this.lastAppliedPage = 1;
7648
+ scGetPageQueryParamChanges()
7649
+ .pipe(takeUntilDestroyed())
7650
+ .subscribe((page) => {
7651
+ if (!this.lastParams || page === this.lastAppliedPage) {
7652
+ return;
7653
+ }
7654
+ this.lastAppliedPage = page;
7655
+ // Повторная установка параметров сбрасывает накопленный список, чтобы отобразить только страницу из query-параметра.
7656
+ this.paginationService.patchOthers(this.lastParams);
7657
+ this.paginationService.patchPage({ page });
7658
+ });
7659
+ }
7660
+ /**
7661
+ * Частично обновляет остальные параметры пагинации и применяет номер страницы из query-параметра при первом вызове.
7662
+ *
7663
+ * @param parameters Новые параметры пагинации.
7664
+ */
7665
+ patchOthers(parameters) {
7666
+ const isFirst = !this.lastParams;
7667
+ this.lastParams = parameters;
7668
+ this.paginationService.patchOthers(parameters);
7669
+ if (isFirst) {
7670
+ const pageFromUrl = scParsePageQueryParam(this.route.snapshot.queryParamMap.get(SC_PAGE_QUERY_PARAM));
7671
+ this.lastAppliedPage = pageFromUrl;
7672
+ if (pageFromUrl > 1) {
7673
+ this.paginationService.patchPage({ page: pageFromUrl });
7674
+ }
7675
+ }
7676
+ else {
7677
+ // Изменение фильтров сбрасывает пагинацию на первую страницу.
7678
+ this.resetPageQueryParam();
7679
+ }
7680
+ }
7681
+ /**
7682
+ * Применяет количество записей на странице пагинации с сохранением текущей страницы.
7683
+ *
7684
+ * @param perPage Количество записей на странице пагинации.
7685
+ */
7686
+ patchPerPage(perPage) {
7687
+ if (this.lastParams) {
7688
+ // Повторная установка параметров сбрасывает накопленный список, чтобы текущая страница была запрошена заново с новым количеством записей.
7689
+ this.paginationService.patchOthers(this.lastParams);
7690
+ this.paginationService.patchPage({ page: this.lastAppliedPage, perPage });
7691
+ }
7692
+ else {
7693
+ this.paginationService.patchPage({ page: 1, perPage });
7694
+ }
7695
+ }
7696
+ /**
7697
+ * Убирает номер страницы пагинации из query-параметров.
7698
+ */
7699
+ resetPageQueryParam() {
7700
+ if (!this.lastParams || this.lastAppliedPage === 1) {
7701
+ return;
7702
+ }
7703
+ this.lastAppliedPage = 1;
7704
+ // eslint-disable-next-line no-void
7705
+ void this.router.navigate([], { queryParams: { [SC_PAGE_QUERY_PARAM]: null }, queryParamsHandling: 'merge' });
7706
+ }
7707
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7708
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService }); }
7709
+ }
7710
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService, decorators: [{
7711
+ type: Injectable
7712
+ }], ctorParameters: () => [] });
7713
+
7580
7714
  /**
7581
7715
  * Перечисление идентификаторов статусов опросника.
7582
7716
  */
@@ -8413,9 +8547,12 @@ class ScSeoService {
8413
8547
  const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogItemDefaultSeo.keywords}`;
8414
8548
  const meta = item.seo?.meta ?? [];
8415
8549
  // Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
8550
+ // Страницы пагинации индексируются отдельно, поэтому каноническая ссылка содержит номер страницы из query-параметров.
8551
+ const page = scParsePageQueryParam(this.router.parseUrl(this.router.url).queryParamMap.get(SC_PAGE_QUERY_PARAM));
8552
+ const canonicalUrl = page > 1 ? `${url}?${SC_PAGE_QUERY_PARAM}=${page}` : url;
8416
8553
  this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
8417
8554
  this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
8418
- this.setCanonicalLink(url);
8555
+ this.setCanonicalLink(canonicalUrl);
8419
8556
  // Устанавливаем Schema.org параметры.
8420
8557
  this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
8421
8558
  }
@@ -8899,5 +9036,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8899
9036
  * Generated bundle index. Do not edit.
8900
9037
  */
8901
9038
 
8902
- 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_PRODUCTS_PAGINATION_LOADER, 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 };
9039
+ 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_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_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, 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 };
8903
9040
  //# sourceMappingURL=snabcentr-client-core.mjs.map