@snabcentr/client-core 3.16.0 → 3.17.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.
- package/esm2022/pagination/index.mjs +3 -1
- package/esm2022/pagination/sc-page-query-param.mjs +26 -0
- package/esm2022/pagination/services/sc-pagination-page-query-param.service.mjs +97 -0
- package/esm2022/pagination/services/sc-pagination.service.mjs +4 -2
- package/esm2022/seo/services/sc-seo.service.mjs +6 -2
- package/fesm2022/snabcentr-client-core.mjs +123 -4
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +1 -1
- package/pagination/index.d.ts +2 -0
- package/pagination/sc-page-query-param.d.ts +17 -0
- package/pagination/services/sc-pagination-page-query-param.service.d.ts +49 -0
- package/release_notes.tmp +2 -4
|
@@ -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';
|
|
@@ -7420,6 +7420,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
7420
7420
|
}]
|
|
7421
7421
|
}], ctorParameters: () => [] });
|
|
7422
7422
|
|
|
7423
|
+
/* eslint-disable unicorn/prevent-abbreviations */
|
|
7424
|
+
/**
|
|
7425
|
+
* Наименование query-параметра номера страницы пагинации.
|
|
7426
|
+
*/
|
|
7427
|
+
const SC_PAGE_QUERY_PARAM = 'page';
|
|
7428
|
+
/**
|
|
7429
|
+
* Преобразует значение query-параметра {@link SC_PAGE_QUERY_PARAM} в номер страницы пагинации.
|
|
7430
|
+
* Нечисловые, дробные и меньшие единицы значения приводятся к первой странице.
|
|
7431
|
+
*
|
|
7432
|
+
* @param value Значение query-параметра номера страницы пагинации.
|
|
7433
|
+
*/
|
|
7434
|
+
function scParsePageQueryParam(value) {
|
|
7435
|
+
return Math.max(1, Math.trunc(Number(value) || 1));
|
|
7436
|
+
}
|
|
7437
|
+
/**
|
|
7438
|
+
* Возвращает {@link Observable} изменения номера страницы пагинации из query-параметра {@link SC_PAGE_QUERY_PARAM}.
|
|
7439
|
+
* Должна вызываться в контексте инъекции.
|
|
7440
|
+
*/
|
|
7441
|
+
function scGetPageQueryParamChanges() {
|
|
7442
|
+
assertInInjectionContext(scGetPageQueryParamChanges);
|
|
7443
|
+
return inject(ActivatedRoute).queryParamMap.pipe(map$1((params) => scParsePageQueryParam(params.get(SC_PAGE_QUERY_PARAM))), distinctUntilChanged());
|
|
7444
|
+
}
|
|
7445
|
+
|
|
7423
7446
|
/**
|
|
7424
7447
|
* Сервис пагинации.
|
|
7425
7448
|
*/
|
|
@@ -7488,7 +7511,9 @@ class ScPaginationService {
|
|
|
7488
7511
|
return [value, value];
|
|
7489
7512
|
}, [null, null]), map$1(([paginate]) => paginate), takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true))), share());
|
|
7490
7513
|
this.others$
|
|
7491
|
-
.pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(
|
|
7514
|
+
.pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(
|
|
7515
|
+
// Страница может быть изменена извне (например, из query-параметра page), поэтому номер следующей страницы берётся из текущего состояния page$.
|
|
7516
|
+
map$1(() => this.page$.value.page + 1), startWith$1(1))), takeUntilDestroyed())
|
|
7492
7517
|
.subscribe((page) => {
|
|
7493
7518
|
this.patchPage({ page: page });
|
|
7494
7519
|
});
|
|
@@ -7577,6 +7602,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
7577
7602
|
type: Injectable
|
|
7578
7603
|
}], ctorParameters: () => [] });
|
|
7579
7604
|
|
|
7605
|
+
/* eslint-disable unicorn/prevent-abbreviations */
|
|
7606
|
+
/**
|
|
7607
|
+
* Сервис синхронизации номера страницы пагинации с query-параметром {@link SC_PAGE_QUERY_PARAM}.
|
|
7608
|
+
*/
|
|
7609
|
+
class ScPaginationPageQueryParamService {
|
|
7610
|
+
/**
|
|
7611
|
+
* Инициализирует экземпляр класса {@link ScPaginationPageQueryParamService}.
|
|
7612
|
+
*/
|
|
7613
|
+
constructor() {
|
|
7614
|
+
/**
|
|
7615
|
+
* Сервис пагинации.
|
|
7616
|
+
*/
|
|
7617
|
+
this.paginationService = inject((ScPaginationService));
|
|
7618
|
+
/**
|
|
7619
|
+
* Сервис предоставляющий доступ к данным о маршруте.
|
|
7620
|
+
*/
|
|
7621
|
+
this.route = inject(ActivatedRoute);
|
|
7622
|
+
/**
|
|
7623
|
+
* Сервис маршрутизации.
|
|
7624
|
+
*/
|
|
7625
|
+
this.router = inject(Router);
|
|
7626
|
+
/**
|
|
7627
|
+
* Номер страницы пагинации, применённый последним.
|
|
7628
|
+
*/
|
|
7629
|
+
this.lastAppliedPage = 1;
|
|
7630
|
+
scGetPageQueryParamChanges()
|
|
7631
|
+
.pipe(takeUntilDestroyed())
|
|
7632
|
+
.subscribe((page) => {
|
|
7633
|
+
if (!this.lastParams || page === this.lastAppliedPage) {
|
|
7634
|
+
return;
|
|
7635
|
+
}
|
|
7636
|
+
this.lastAppliedPage = page;
|
|
7637
|
+
// Повторная установка параметров сбрасывает накопленный список, чтобы отобразить только страницу из query-параметра.
|
|
7638
|
+
this.paginationService.patchOthers(this.lastParams);
|
|
7639
|
+
this.paginationService.patchPage({ page });
|
|
7640
|
+
});
|
|
7641
|
+
}
|
|
7642
|
+
/**
|
|
7643
|
+
* Частично обновляет остальные параметры пагинации и применяет номер страницы из query-параметра при первом вызове.
|
|
7644
|
+
*
|
|
7645
|
+
* @param parameters Новые параметры пагинации.
|
|
7646
|
+
*/
|
|
7647
|
+
patchOthers(parameters) {
|
|
7648
|
+
const isFirst = !this.lastParams;
|
|
7649
|
+
this.lastParams = parameters;
|
|
7650
|
+
this.paginationService.patchOthers(parameters);
|
|
7651
|
+
if (isFirst) {
|
|
7652
|
+
const pageFromUrl = scParsePageQueryParam(this.route.snapshot.queryParamMap.get(SC_PAGE_QUERY_PARAM));
|
|
7653
|
+
this.lastAppliedPage = pageFromUrl;
|
|
7654
|
+
if (pageFromUrl > 1) {
|
|
7655
|
+
this.paginationService.patchPage({ page: pageFromUrl });
|
|
7656
|
+
}
|
|
7657
|
+
}
|
|
7658
|
+
else {
|
|
7659
|
+
// Изменение фильтров сбрасывает пагинацию на первую страницу.
|
|
7660
|
+
this.resetPageQueryParam();
|
|
7661
|
+
}
|
|
7662
|
+
}
|
|
7663
|
+
/**
|
|
7664
|
+
* Применяет количество записей на странице пагинации с сохранением текущей страницы.
|
|
7665
|
+
*
|
|
7666
|
+
* @param perPage Количество записей на странице пагинации.
|
|
7667
|
+
*/
|
|
7668
|
+
patchPerPage(perPage) {
|
|
7669
|
+
if (this.lastParams) {
|
|
7670
|
+
// Повторная установка параметров сбрасывает накопленный список, чтобы текущая страница была запрошена заново с новым количеством записей.
|
|
7671
|
+
this.paginationService.patchOthers(this.lastParams);
|
|
7672
|
+
this.paginationService.patchPage({ page: this.lastAppliedPage, perPage });
|
|
7673
|
+
}
|
|
7674
|
+
else {
|
|
7675
|
+
this.paginationService.patchPage({ page: 1, perPage });
|
|
7676
|
+
}
|
|
7677
|
+
}
|
|
7678
|
+
/**
|
|
7679
|
+
* Убирает номер страницы пагинации из query-параметров.
|
|
7680
|
+
*/
|
|
7681
|
+
resetPageQueryParam() {
|
|
7682
|
+
if (!this.lastParams || this.lastAppliedPage === 1) {
|
|
7683
|
+
return;
|
|
7684
|
+
}
|
|
7685
|
+
this.lastAppliedPage = 1;
|
|
7686
|
+
// eslint-disable-next-line no-void
|
|
7687
|
+
void this.router.navigate([], { queryParams: { [SC_PAGE_QUERY_PARAM]: null }, queryParamsHandling: 'merge' });
|
|
7688
|
+
}
|
|
7689
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7690
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService }); }
|
|
7691
|
+
}
|
|
7692
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService, decorators: [{
|
|
7693
|
+
type: Injectable
|
|
7694
|
+
}], ctorParameters: () => [] });
|
|
7695
|
+
|
|
7580
7696
|
/**
|
|
7581
7697
|
* Перечисление идентификаторов статусов опросника.
|
|
7582
7698
|
*/
|
|
@@ -8413,9 +8529,12 @@ class ScSeoService {
|
|
|
8413
8529
|
const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogItemDefaultSeo.keywords}`;
|
|
8414
8530
|
const meta = item.seo?.meta ?? [];
|
|
8415
8531
|
// Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
|
|
8532
|
+
// Страницы пагинации индексируются отдельно, поэтому каноническая ссылка содержит номер страницы из query-параметров.
|
|
8533
|
+
const page = scParsePageQueryParam(this.router.parseUrl(this.router.url).queryParamMap.get(SC_PAGE_QUERY_PARAM));
|
|
8534
|
+
const canonicalUrl = page > 1 ? `${url}?${SC_PAGE_QUERY_PARAM}=${page}` : url;
|
|
8416
8535
|
this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
|
|
8417
8536
|
this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
|
|
8418
|
-
this.setCanonicalLink(
|
|
8537
|
+
this.setCanonicalLink(canonicalUrl);
|
|
8419
8538
|
// Устанавливаем Schema.org параметры.
|
|
8420
8539
|
this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
|
|
8421
8540
|
}
|
|
@@ -8899,5 +9018,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8899
9018
|
* Generated bundle index. Do not edit.
|
|
8900
9019
|
*/
|
|
8901
9020
|
|
|
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 };
|
|
9021
|
+
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
9022
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|