@snabcentr/client-core 2.69.0 → 2.71.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/catalog/services/sc-catalog-redirect.service.d.ts +27 -1
- package/common/interfaces/sc-i-request-state.d.ts +4 -1
- package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +48 -2
- package/esm2022/common/interfaces/sc-i-request-state.mjs +5 -3
- package/esm2022/contacts/services/sc-requisites.service.mjs +7 -7
- package/esm2022/providers/sc-category.providers.mjs +33 -10
- package/esm2022/seo/classes/schema-org-factory.mjs +114 -7
- package/esm2022/seo/services/sc-seo.service.mjs +12 -10
- package/fesm2022/snabcentr-client-core.mjs +208 -31
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +2 -2
- package/providers/sc-category.providers.d.ts +6 -1
- package/release_notes.tmp +3 -3
- package/seo/classes/schema-org-factory.d.ts +32 -1
- package/seo/services/sc-seo.service.d.ts +7 -5
|
@@ -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
|
|
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
|
|
4623
|
+
if (!categoryIdOrSlug) {
|
|
4624
|
+
return of(ScSuccessRequestState(null));
|
|
4569
4625
|
}
|
|
4570
|
-
return
|
|
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: [
|
|
4580
|
-
useFactory:
|
|
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}.
|
|
@@ -7710,12 +7778,6 @@ class SchemaOrgFactory {
|
|
|
7710
7778
|
name: category.name,
|
|
7711
7779
|
...(description && { description }),
|
|
7712
7780
|
},
|
|
7713
|
-
// Информация о сайте.
|
|
7714
|
-
isPartOf: {
|
|
7715
|
-
'@type': 'WebSite',
|
|
7716
|
-
name: this.companyInfo.name,
|
|
7717
|
-
url: this.urls.siteUrl,
|
|
7718
|
-
},
|
|
7719
7781
|
// Связанные страницы.
|
|
7720
7782
|
relatedLink: [
|
|
7721
7783
|
`${this.urls.siteUrl}${categoryPath.replace(':id', '')}`,
|
|
@@ -7793,6 +7855,72 @@ class SchemaOrgFactory {
|
|
|
7793
7855
|
}),
|
|
7794
7856
|
};
|
|
7795
7857
|
}
|
|
7858
|
+
/**
|
|
7859
|
+
* Генерирует и возвращает схему данных для указанной новости.
|
|
7860
|
+
*
|
|
7861
|
+
* @param news Данные о новости.
|
|
7862
|
+
* @param newsPath Url путь к новости. В пути должен присутствовать шаблон ':id', обозначающий идентификатор новости для подстановки.
|
|
7863
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
7864
|
+
*/
|
|
7865
|
+
generateForNewsArticle(news, newsPath, id) {
|
|
7866
|
+
const newsUrl = `${this.urls.siteUrl}${newsPath.replace(':id', news.id.toString())}`;
|
|
7867
|
+
const image = this.mediaImageTransformerPipe.transform(news.image, true);
|
|
7868
|
+
const headline = news.seo?.title ?? news.subject;
|
|
7869
|
+
const description = news.seo?.description;
|
|
7870
|
+
const datePublished = this.normalizeSchemaDate(news.createdAt);
|
|
7871
|
+
const articleBody = news.text ? this.stripHtml(news.text) : undefined;
|
|
7872
|
+
return {
|
|
7873
|
+
'@context': 'https://schema.org',
|
|
7874
|
+
'@type': 'NewsArticle',
|
|
7875
|
+
...(id && { '@id': id }),
|
|
7876
|
+
headline,
|
|
7877
|
+
...(description && { description }),
|
|
7878
|
+
...(image && { image }),
|
|
7879
|
+
...(datePublished && { datePublished }),
|
|
7880
|
+
...(articleBody && { articleBody }),
|
|
7881
|
+
url: newsUrl,
|
|
7882
|
+
mainEntityOfPage: newsUrl,
|
|
7883
|
+
author: {
|
|
7884
|
+
'@type': 'Organization',
|
|
7885
|
+
name: this.companyInfo.name,
|
|
7886
|
+
url: this.urls.siteUrl,
|
|
7887
|
+
},
|
|
7888
|
+
publisher: {
|
|
7889
|
+
'@type': 'Organization',
|
|
7890
|
+
name: this.companyInfo.name,
|
|
7891
|
+
logo: {
|
|
7892
|
+
'@type': 'ImageObject',
|
|
7893
|
+
url: this.urls.logoUrl,
|
|
7894
|
+
},
|
|
7895
|
+
},
|
|
7896
|
+
};
|
|
7897
|
+
}
|
|
7898
|
+
/**
|
|
7899
|
+
* Генерирует и возвращает схему данных FAQPage для страницы с вопросами и ответами.
|
|
7900
|
+
*
|
|
7901
|
+
* @param items Список вопросов и ответов.
|
|
7902
|
+
* @param pagePath Url путь к странице FAQ.
|
|
7903
|
+
* @param pageName Необязательное название страницы.
|
|
7904
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
7905
|
+
*/
|
|
7906
|
+
generateForFaqPage(items, pagePath, pageName, id) {
|
|
7907
|
+
const pageUrl = `${this.urls.siteUrl}${pagePath}`;
|
|
7908
|
+
return {
|
|
7909
|
+
'@context': 'https://schema.org',
|
|
7910
|
+
'@type': 'FAQPage',
|
|
7911
|
+
...(id && { '@id': id }),
|
|
7912
|
+
...(pageName && { name: pageName }),
|
|
7913
|
+
url: pageUrl,
|
|
7914
|
+
mainEntity: items.map((item) => ({
|
|
7915
|
+
'@type': 'Question',
|
|
7916
|
+
name: item.question,
|
|
7917
|
+
acceptedAnswer: {
|
|
7918
|
+
'@type': 'Answer',
|
|
7919
|
+
text: this.stripHtml(item.answer),
|
|
7920
|
+
},
|
|
7921
|
+
})),
|
|
7922
|
+
};
|
|
7923
|
+
}
|
|
7796
7924
|
/**
|
|
7797
7925
|
* Объединяет несколько JSON-LD сущностей в один документ с `@graph`.
|
|
7798
7926
|
*
|
|
@@ -7860,6 +7988,53 @@ class SchemaOrgFactory {
|
|
|
7860
7988
|
}
|
|
7861
7989
|
return contactPoints;
|
|
7862
7990
|
}
|
|
7991
|
+
/**
|
|
7992
|
+
* Удаляет HTML-разметку из текста.
|
|
7993
|
+
*
|
|
7994
|
+
* @param html Текст с HTML-разметкой.
|
|
7995
|
+
*/
|
|
7996
|
+
// eslint-disable-next-line class-methods-use-this
|
|
7997
|
+
stripHtml(html) {
|
|
7998
|
+
const withoutTags = html
|
|
7999
|
+
.split('<')
|
|
8000
|
+
.map((part, index) => {
|
|
8001
|
+
if (index === 0) {
|
|
8002
|
+
return part;
|
|
8003
|
+
}
|
|
8004
|
+
const closeTagIndex = part.indexOf('>');
|
|
8005
|
+
return closeTagIndex === -1 ? part : ` ${part.slice(closeTagIndex + 1)}`;
|
|
8006
|
+
})
|
|
8007
|
+
.join('');
|
|
8008
|
+
return withoutTags
|
|
8009
|
+
.replaceAll(/\s+/g, ' ')
|
|
8010
|
+
.replaceAll(/ ([.,!?;:])/g, '$1')
|
|
8011
|
+
.trim();
|
|
8012
|
+
}
|
|
8013
|
+
/**
|
|
8014
|
+
* Нормализует дату в формат Schema.org (ISO 8601).
|
|
8015
|
+
*
|
|
8016
|
+
* @param dateValue Дата для нормализации.
|
|
8017
|
+
*/
|
|
8018
|
+
// eslint-disable-next-line class-methods-use-this
|
|
8019
|
+
normalizeSchemaDate(dateValue) {
|
|
8020
|
+
if (!dateValue) {
|
|
8021
|
+
return undefined;
|
|
8022
|
+
}
|
|
8023
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(dateValue)) {
|
|
8024
|
+
return dateValue;
|
|
8025
|
+
}
|
|
8026
|
+
const withTimeMatch = /^(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2})$/.exec(dateValue);
|
|
8027
|
+
if (withTimeMatch) {
|
|
8028
|
+
const [, day, month, year, hours, minutes] = withTimeMatch;
|
|
8029
|
+
return `${year}-${month}-${day}T${hours}:${minutes}:00`;
|
|
8030
|
+
}
|
|
8031
|
+
const dateOnlyMatch = /^(\d{2})\.(\d{2})\.(\d{4})$/.exec(dateValue);
|
|
8032
|
+
if (!dateOnlyMatch) {
|
|
8033
|
+
return undefined;
|
|
8034
|
+
}
|
|
8035
|
+
const [, day, month, year] = dateOnlyMatch;
|
|
8036
|
+
return `${year}-${month}-${day}`;
|
|
8037
|
+
}
|
|
7863
8038
|
/**
|
|
7864
8039
|
* Нормализует дату окончания цены в формат Schema.org (YYYY-MM-DD).
|
|
7865
8040
|
*
|
|
@@ -8100,10 +8275,11 @@ class ScSeoService {
|
|
|
8100
8275
|
* Устанавливает seo параметры на основе указанного ресурса. Если какого-то тега нет, будет установлено значение по умолчанию.
|
|
8101
8276
|
*
|
|
8102
8277
|
* @param resource Ресурс на основе которого необходимо установить мета-теги.
|
|
8103
|
-
* @param img Изображение. Если не пришло, то будет установлено значение по
|
|
8104
|
-
* @param robots Список robots-тегов для страницы.
|
|
8278
|
+
* @param img Изображение. Если не пришло, то будет установлено значение по умолчанию (logo компании).
|
|
8279
|
+
* @param robots Список robots-тегов для страницы. Значение по умолчанию (['index', 'follow']).
|
|
8280
|
+
* @param schemaOrgData Данные Schema.org для встраивания на странице.
|
|
8105
8281
|
*/
|
|
8106
|
-
setFromResource(resource, img
|
|
8282
|
+
setFromResource(resource, img, robots, schemaOrgData) {
|
|
8107
8283
|
const updatedResource = {
|
|
8108
8284
|
title: this.replaceTemplates(resource?.title ?? this.defaultSeo.title, resource?.instanceData ?? {}),
|
|
8109
8285
|
description: this.replaceTemplates(resource?.description ?? this.defaultSeo.description, resource?.instanceData ?? {}),
|
|
@@ -8111,23 +8287,24 @@ class ScSeoService {
|
|
|
8111
8287
|
meta: resource?.meta ?? [],
|
|
8112
8288
|
};
|
|
8113
8289
|
const url = `${this.urls.siteUrl}${this.router.url}`;
|
|
8114
|
-
this.setMetaTags(updatedResource.title, updatedResource.description, updatedResource.keywords, updatedResource.meta, robots);
|
|
8115
|
-
this.setOpenGraphMetaTags(updatedResource.title, updatedResource.description, url, img);
|
|
8290
|
+
this.setMetaTags(updatedResource.title, updatedResource.description, updatedResource.keywords, updatedResource.meta, robots ?? ['index', 'follow']);
|
|
8291
|
+
this.setOpenGraphMetaTags(updatedResource.title, updatedResource.description, url, img ?? this.urls.logoUrl);
|
|
8116
8292
|
this.setCanonicalLink(url);
|
|
8117
8293
|
// Устанавливаем Schema.org параметры.
|
|
8118
|
-
this.setSchemaOrgData(this.schemaOrgFactory.generateForOrganization());
|
|
8294
|
+
this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
|
|
8119
8295
|
}
|
|
8120
8296
|
/**
|
|
8121
8297
|
* Устанавливает seo параметры со значением по умолчанию.
|
|
8122
8298
|
*
|
|
8123
8299
|
* @param title Заголовок страницы.
|
|
8124
|
-
* @param robots Список robots тегов для страницы.
|
|
8300
|
+
* @param robots Список robots тегов для страницы. Значение по умолчанию (['index', 'follow']).
|
|
8301
|
+
* @param schemaOrgData Данные Schema.org для встраивания на странице.
|
|
8125
8302
|
*/
|
|
8126
|
-
setByDefault(title, robots
|
|
8303
|
+
setByDefault(title, robots, schemaOrgData) {
|
|
8127
8304
|
this.setFromResource({
|
|
8128
8305
|
title: `${title ?? this.defaultSeo.title} - ${this.companyInfo.name}`,
|
|
8129
8306
|
description: title ? `${title}, ${this.defaultSeo.description}` : this.defaultSeo.description,
|
|
8130
|
-
}, this.urls.logoUrl, robots);
|
|
8307
|
+
}, this.urls.logoUrl, robots ?? ['index', 'follow'], schemaOrgData);
|
|
8131
8308
|
}
|
|
8132
8309
|
/**
|
|
8133
8310
|
* Устанавливает seo параметры со значением по умолчанию. Устанавливает значение "не индексировать" для поисковых роботов.
|
|
@@ -8640,5 +8817,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
8640
8817
|
* Generated bundle index. Do not edit.
|
|
8641
8818
|
*/
|
|
8642
8819
|
|
|
8643
|
-
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 };
|
|
8820
|
+
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 };
|
|
8644
8821
|
//# sourceMappingURL=snabcentr-client-core.mjs.map
|