@snabcentr/client-core 4.15.0 → 4.16.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.
@@ -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';
@@ -2053,6 +2053,10 @@ class ScUserMetadata {
2053
2053
  * Формат отображения каталога.
2054
2054
  */
2055
2055
  this.catalogFormat = ScCatalogFormat.normal;
2056
+ /**
2057
+ * Признак свёрнутой до значков боковой панели каталога.
2058
+ */
2059
+ this.isCatalogSidebarCollapsed = false;
2056
2060
  Object.assign(this, data);
2057
2061
  }
2058
2062
  }
@@ -2238,6 +2242,20 @@ class ScUIService {
2238
2242
  setCatalogFormat(catalogFormat) {
2239
2243
  this.setMetadataByKey('catalogFormat', catalogFormat);
2240
2244
  }
2245
+ /**
2246
+ * Возвращает {@link Observable} признака свёрнутой до значков боковой панели каталога.
2247
+ */
2248
+ getCatalogSidebarCollapsed$() {
2249
+ return this.getMetadataChangeByKey$('isCatalogSidebarCollapsed');
2250
+ }
2251
+ /**
2252
+ * Устанавливает признак свёрнутой до значков боковой панели каталога.
2253
+ *
2254
+ * @param isCatalogSidebarCollapsed Признак свёрнутой до значков боковой панели каталога.
2255
+ */
2256
+ setCatalogSidebarCollapsed(isCatalogSidebarCollapsed) {
2257
+ this.setMetadataByKey('isCatalogSidebarCollapsed', isCatalogSidebarCollapsed);
2258
+ }
2241
2259
  /**
2242
2260
  * Устанавливает идентификатор выбранного склада.
2243
2261
  *
@@ -7385,6 +7403,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7385
7403
  }]
7386
7404
  }], ctorParameters: () => [] });
7387
7405
 
7406
+ /* eslint-disable unicorn/prevent-abbreviations */
7407
+ /**
7408
+ * Наименование query-параметра номера страницы пагинации.
7409
+ */
7410
+ const SC_PAGE_QUERY_PARAM = 'page';
7411
+ /**
7412
+ * Преобразует значение query-параметра {@link SC_PAGE_QUERY_PARAM} в номер страницы пагинации.
7413
+ * Нечисловые, дробные и меньшие единицы значения приводятся к первой странице.
7414
+ *
7415
+ * @param value Значение query-параметра номера страницы пагинации.
7416
+ */
7417
+ function scParsePageQueryParam(value) {
7418
+ return Math.max(1, Math.trunc(Number(value) || 1));
7419
+ }
7420
+ /**
7421
+ * Возвращает {@link Observable} изменения номера страницы пагинации из query-параметра {@link SC_PAGE_QUERY_PARAM}.
7422
+ * Должна вызываться в контексте инъекции.
7423
+ */
7424
+ function scGetPageQueryParamChanges() {
7425
+ assertInInjectionContext(scGetPageQueryParamChanges);
7426
+ return inject(ActivatedRoute).queryParamMap.pipe(map$1((params) => scParsePageQueryParam(params.get(SC_PAGE_QUERY_PARAM))), distinctUntilChanged());
7427
+ }
7428
+
7388
7429
  /**
7389
7430
  * Сервис пагинации.
7390
7431
  */
@@ -7453,7 +7494,9 @@ class ScPaginationService {
7453
7494
  return [value, value];
7454
7495
  }, [null, null]), map$1(([paginate]) => paginate), takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true))), share());
7455
7496
  this.others$
7456
- .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(scan((accumulator) => accumulator + 1, 1), startWith$1(1))), takeUntilDestroyed())
7497
+ .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(
7498
+ // Страница может быть изменена извне (например, из query-параметра page), поэтому номер следующей страницы берётся из текущего состояния page$.
7499
+ map$1(() => this.page$.value.page + 1), startWith$1(1))), takeUntilDestroyed())
7457
7500
  .subscribe((page) => {
7458
7501
  this.patchPage({ page: page });
7459
7502
  });
@@ -7542,6 +7585,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7542
7585
  type: Injectable
7543
7586
  }], ctorParameters: () => [] });
7544
7587
 
7588
+ /* eslint-disable unicorn/prevent-abbreviations */
7589
+ /**
7590
+ * Сервис синхронизации номера страницы пагинации с query-параметром {@link SC_PAGE_QUERY_PARAM}.
7591
+ */
7592
+ class ScPaginationPageQueryParamService {
7593
+ /**
7594
+ * Инициализирует экземпляр класса {@link ScPaginationPageQueryParamService}.
7595
+ */
7596
+ constructor() {
7597
+ /**
7598
+ * Сервис пагинации.
7599
+ */
7600
+ this.paginationService = inject((ScPaginationService));
7601
+ /**
7602
+ * Сервис предоставляющий доступ к данным о маршруте.
7603
+ */
7604
+ this.route = inject(ActivatedRoute);
7605
+ /**
7606
+ * Сервис маршрутизации.
7607
+ */
7608
+ this.router = inject(Router);
7609
+ /**
7610
+ * Номер страницы пагинации, применённый последним.
7611
+ */
7612
+ this.lastAppliedPage = 1;
7613
+ scGetPageQueryParamChanges()
7614
+ .pipe(takeUntilDestroyed())
7615
+ .subscribe((page) => {
7616
+ if (!this.lastParams || page === this.lastAppliedPage) {
7617
+ return;
7618
+ }
7619
+ this.lastAppliedPage = page;
7620
+ // Повторная установка параметров сбрасывает накопленный список, чтобы отобразить только страницу из query-параметра.
7621
+ this.paginationService.patchOthers(this.lastParams);
7622
+ this.paginationService.patchPage({ page });
7623
+ });
7624
+ }
7625
+ /**
7626
+ * Частично обновляет остальные параметры пагинации и применяет номер страницы из query-параметра при первом вызове.
7627
+ *
7628
+ * @param parameters Новые параметры пагинации.
7629
+ */
7630
+ patchOthers(parameters) {
7631
+ const isFirst = !this.lastParams;
7632
+ this.lastParams = parameters;
7633
+ this.paginationService.patchOthers(parameters);
7634
+ if (isFirst) {
7635
+ const pageFromUrl = scParsePageQueryParam(this.route.snapshot.queryParamMap.get(SC_PAGE_QUERY_PARAM));
7636
+ this.lastAppliedPage = pageFromUrl;
7637
+ if (pageFromUrl > 1) {
7638
+ this.paginationService.patchPage({ page: pageFromUrl });
7639
+ }
7640
+ }
7641
+ else {
7642
+ // Изменение фильтров сбрасывает пагинацию на первую страницу.
7643
+ this.resetPageQueryParam();
7644
+ }
7645
+ }
7646
+ /**
7647
+ * Применяет количество записей на странице пагинации с сохранением текущей страницы.
7648
+ *
7649
+ * @param perPage Количество записей на странице пагинации.
7650
+ */
7651
+ patchPerPage(perPage) {
7652
+ if (this.lastParams) {
7653
+ // Повторная установка параметров сбрасывает накопленный список, чтобы текущая страница была запрошена заново с новым количеством записей.
7654
+ this.paginationService.patchOthers(this.lastParams);
7655
+ this.paginationService.patchPage({ page: this.lastAppliedPage, perPage });
7656
+ }
7657
+ else {
7658
+ this.paginationService.patchPage({ page: 1, perPage });
7659
+ }
7660
+ }
7661
+ /**
7662
+ * Убирает номер страницы пагинации из query-параметров.
7663
+ */
7664
+ resetPageQueryParam() {
7665
+ if (!this.lastParams || this.lastAppliedPage === 1) {
7666
+ return;
7667
+ }
7668
+ this.lastAppliedPage = 1;
7669
+ // eslint-disable-next-line no-void
7670
+ void this.router.navigate([], { queryParams: { [SC_PAGE_QUERY_PARAM]: null }, queryParamsHandling: 'merge' });
7671
+ }
7672
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScPaginationPageQueryParamService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7673
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScPaginationPageQueryParamService }); }
7674
+ }
7675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: ScPaginationPageQueryParamService, decorators: [{
7676
+ type: Injectable
7677
+ }], ctorParameters: () => [] });
7678
+
7545
7679
  /**
7546
7680
  * Перечисление идентификаторов статусов опросника.
7547
7681
  */
@@ -8378,9 +8512,12 @@ class ScSeoService {
8378
8512
  const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogItemDefaultSeo.keywords}`;
8379
8513
  const meta = item.seo?.meta ?? [];
8380
8514
  // Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
8515
+ // Страницы пагинации индексируются отдельно, поэтому каноническая ссылка содержит номер страницы из query-параметров.
8516
+ const page = scParsePageQueryParam(this.router.parseUrl(this.router.url).queryParamMap.get(SC_PAGE_QUERY_PARAM));
8517
+ const canonicalUrl = page > 1 ? `${url}?${SC_PAGE_QUERY_PARAM}=${page}` : url;
8381
8518
  this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
8382
8519
  this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
8383
- this.setCanonicalLink(url);
8520
+ this.setCanonicalLink(canonicalUrl);
8384
8521
  // Устанавливаем Schema.org параметры.
8385
8522
  this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
8386
8523
  }
@@ -8869,5 +9006,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8869
9006
  * Generated bundle index. Do not edit.
8870
9007
  */
8871
9008
 
8872
- 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 };
9009
+ 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 };
8873
9010
  //# sourceMappingURL=snabcentr-client-core.mjs.map