@snabcentr/client-ui 4.8.0 → 4.8.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.
- package/catalog/catalog-filters/sc-catalog-filters.component.d.ts +14 -3
- package/catalog/catalog-filters/tokens/sc-catalog-products-filters.d.ts +3 -3
- package/esm2022/catalog/catalog-filters/sc-catalog-filters.component.mjs +41 -16
- package/esm2022/catalog/catalog-filters/tokens/sc-catalog-products-filters.mjs +4 -4
- package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +2 -2
- package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +22 -4
- package/fesm2022/snabcentr-client-ui.mjs +61 -19
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +3 -2
- package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +1 -1
- package/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.d.ts +12 -0
- package/release_notes.tmp +1 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { AsyncPipe, NgIf } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';
|
|
3
3
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
|
-
import {
|
|
4
|
+
import { Router } from '@angular/router';
|
|
5
|
+
import { ScConvertersService, ScFrequentlyAskedQuestionsService, SchemaOrgFactory, ScSeoService, } from '@snabcentr/client-core';
|
|
5
6
|
import { TUI_WINDOW_SIZE, tuiIsFalsy, tuiIsPresent } from '@taiga-ui/cdk';
|
|
6
7
|
import { TuiButton } from '@taiga-ui/core';
|
|
7
8
|
import { TuiPagination } from '@taiga-ui/kit';
|
|
8
|
-
import { BehaviorSubject, combineLatest, debounceTime, filter, map, of, shareReplay, startWith, Subject, switchMap } from 'rxjs';
|
|
9
|
+
import { BehaviorSubject, combineLatest, debounceTime, filter, map, of, shareReplay, startWith, Subject, switchMap, tap } from 'rxjs';
|
|
9
10
|
import { ScFrequentlyAskedQuestionsComponent, ScFrequentlyAskedQuestionsGroupSelectorComponent } from '..';
|
|
10
11
|
import { SC_PAGE_SIZE_OPTIONS } from '../frequently-asked-questions/sc-page-size-options';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
@@ -22,6 +23,18 @@ export class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
22
23
|
* Сервис конвертации данных.
|
|
23
24
|
*/
|
|
24
25
|
this.convertersService = inject(ScConvertersService);
|
|
26
|
+
/**
|
|
27
|
+
* Сервис установки SEO-данных приложения.
|
|
28
|
+
*/
|
|
29
|
+
this.seoService = inject(ScSeoService);
|
|
30
|
+
/**
|
|
31
|
+
* Фабрика для создания данных Schema.org.
|
|
32
|
+
*/
|
|
33
|
+
this.schemaOrgFactory = inject(SchemaOrgFactory);
|
|
34
|
+
/**
|
|
35
|
+
* Сервис маршрутизации.
|
|
36
|
+
*/
|
|
37
|
+
this.router = inject(Router);
|
|
25
38
|
/**
|
|
26
39
|
* Индекс первой страницы.
|
|
27
40
|
*/
|
|
@@ -58,7 +71,12 @@ export class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
58
71
|
// Нулевой debounceTime для случая, когда меняются направление и поле сортировки одновременно.
|
|
59
72
|
debounceTime(0), switchMap((value) => this.frequentlyAskedQuestionsService
|
|
60
73
|
.getFrequentlyAskedQuestions$(this.convertersService.removeNull(value))
|
|
61
|
-
.pipe(startWith(null))),
|
|
74
|
+
.pipe(startWith(null))), tap((data) => {
|
|
75
|
+
if (data) {
|
|
76
|
+
const pageTitle = 'Часто задаваемые вопросы - FAQ';
|
|
77
|
+
this.seoService.setByDefault(pageTitle, undefined, this.schemaOrgFactory.generateForFaqPage(data.data, this.router.url, pageTitle));
|
|
78
|
+
}
|
|
79
|
+
}), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
62
80
|
/**
|
|
63
81
|
* {@link Observable} изменения общего количества страниц пагинации.
|
|
64
82
|
*/
|
|
@@ -104,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
104
122
|
type: Component,
|
|
105
123
|
args: [{ standalone: true, selector: 'sc-frequently-asked-questions-with-groups', imports: [AsyncPipe, NgIf, ScFrequentlyAskedQuestionsGroupSelectorComponent, TuiButton, ScFrequentlyAskedQuestionsComponent, TuiPagination], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let items = data$ | async;\n@let pageCount = pageCount$ | async;\n@let viewMode = viewMode$ | async;\n\n<div\n *ngIf=\"viewMode\"\n class=\"flex gap-6\"\n [class.flex-col]=\"viewMode === 'select'\"\n>\n <div class=\"flex flex-col gap-7\">\n <sc-frequently-asked-questions-group-selector\n (groupIdChange)=\"groupIdChange($event)\"\n [viewMode]=\"viewMode\"\n class=\"shrink-0\"\n [class.w-64]=\"viewMode !== 'select'\"\n />\n\n <button\n *ngIf=\"viewMode === 'list'\"\n tuiButton\n size=\"m\"\n type=\"button\"\n iconStart=\"@tui.circle-help\"\n appearance=\"secondary\"\n (click)=\"clickSendQuestion.emit()\"\n class=\"self-center\"\n >\n \u0417\u0430\u0434\u0430\u0442\u044C \u0432\u043E\u043F\u0440\u043E\u0441\n </button>\n </div>\n\n <div class=\"grow\">\n @if (items && items.length) {\n <sc-frequently-asked-questions\n [items]=\"items\"\n [showLoading]=\"isLoading()\"\n />\n\n <tui-pagination\n *ngIf=\"pageCount && pageCount > 1\"\n [length]=\"pageCount\"\n [index]=\"(currentPage$ | async) ?? 0\"\n (indexChange)=\"paginationChange($event)\"\n class=\"mt-4 !justify-items-center\"\n />\n } @else {\n <p class=\"text-body-s-bold\">\u0421\u043F\u0438\u0441\u043E\u043A \u0432\u043E\u043F\u0440\u043E\u0441\u043E\u0432 \u043F\u0443\u0441\u0442</p>\n }\n </div>\n</div>\n" }]
|
|
106
124
|
}] });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMtd2l0aC1ncm91cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3BhZ2VzL2ZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLXdpdGgtZ3JvdXBzL3NjLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLXdpdGgtZ3JvdXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wYWdlcy9mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy13aXRoLWdyb3Vwcy9zYy1mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy13aXRoLWdyb3Vwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBYSxpQ0FBaUMsRUFBNEQsTUFBTSx3QkFBd0IsQ0FBQztBQUNySyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3SSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsZ0RBQWdELEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDM0csT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7O0FBRTFGOztHQUVHO0FBUUgsTUFBTSxPQUFPLDZDQUE2QztJQVAxRDtRQVFJOztXQUVHO1FBQ2dCLG9DQUErQixHQUFzQyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUVsSTs7V0FFRztRQUNjLHNCQUFpQixHQUF3QixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV0Rjs7V0FFRztRQUNjLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBRTVDOztXQUVHO1FBQ2Msb0JBQWUsR0FBYSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUxRTs7V0FFRztRQUNjLGFBQVEsR0FBNEIsSUFBSSxlQUFlLENBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFHOztXQUVHO1FBQ2MsVUFBSyxHQUE0QixJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkc7O1dBRUc7UUFDZ0IsYUFBUSxHQUFvQixJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXJFOztXQUVHO1FBQ2Esc0JBQWlCLEdBQTJCLE1BQU0sRUFBRSxDQUFDO1FBRXJFOztXQUVHO1FBQ2MsYUFBUSxHQUE4QyxhQUFhLENBQUM7WUFDakYsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDcEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDckIsQ0FBQyxDQUFDLElBQUk7UUFDSCw4RkFBOEY7UUFDOUYsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLFNBQVMsQ0FBQyxDQUFDLEtBQWtELEVBQUUsRUFBRSxDQUM3RCxJQUFJLENBQUMsK0JBQStCO2FBQy9CLDRCQUE0QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQThDLEtBQUssQ0FBQyxDQUFDO2FBQ25ILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDN0IsRUFDRCxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNqRCxDQUFDO1FBRUY7O1dBRUc7UUFDZ0IsZUFBVSxHQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUNwQixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ25DLENBQUM7UUFFRjs7V0FFRztRQUNnQixpQkFBWSxHQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDcEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUNwQixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUMxQyxDQUFDO1FBRUY7O1dBRUc7UUFDZ0IsY0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXRHOztXQUVHO1FBQ2dCLFVBQUssR0FBbUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3pFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFDcEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDbEIsQ0FBQztRQUVGOztXQUVHO1FBQ2dCLGNBQVMsR0FBa0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBb0JySjtJQWxCRzs7OztPQUlHO0lBQ08sZ0JBQWdCLENBQUMsU0FBaUI7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sYUFBYSxDQUFDLEVBQVU7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBaEhRLDZDQUE2QzttR0FBN0MsNkNBQTZDLDBKQ3RCMUQsNm5EQWtEQSx1Q0QvQmMsU0FBUyw4Q0FBRSxJQUFJLDZGQUFFLGdEQUFnRCwySUFBRSxTQUFTLG9JQUFFLG1DQUFtQyw0R0FBRSxhQUFhOzs0RkFHakksNkNBQTZDO2tCQVB6RCxTQUFTO2lDQUNNLElBQUksWUFDTiwyQ0FBMkMsV0FFNUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGdEQUFnRCxFQUFFLFNBQVMsRUFBRSxtQ0FBbUMsRUFBRSxhQUFhLENBQUMsbUJBQzFILHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBvdXRwdXQsIE91dHB1dEVtaXR0ZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU2NDb252ZXJ0ZXJzU2VydmljZSwgU2NGYXFJdGVtLCBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1NlcnZpY2UsIFNjSUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1BhZ2luYXRpb25QYXJhbXMsIFNjSVBhZ2luYXRlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUVUlfV0lORE9XX1NJWkUsIHR1aUlzRmFsc3ksIHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpUGFnaW5hdGlvbiB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zQ29tcG9uZW50LCBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc0dyb3VwU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLic7XG5pbXBvcnQgeyBTQ19QQUdFX1NJWkVfT1BUSU9OUyB9IGZyb20gJy4uL2ZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zL3NjLXBhZ2Utc2l6ZS1vcHRpb25zJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YfQsNGB0YLQviDQt9Cw0LTQsNCy0LDQtdC80YvRhSDQstC+0L/RgNC+0YHQvtCyINGBINCy0L7Qt9C80L7QttC90L7RgdGC0YzRjiDQstGL0LHQvtGA0LAg0LPRgNGD0L/Qv9GLINCy0L7Qv9GA0L7RgdC+0LIuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy13aXRoLWdyb3VwcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLXdpdGgtZ3JvdXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ0lmLCBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc0dyb3VwU2VsZWN0b3JDb21wb25lbnQsIFR1aUJ1dHRvbiwgU2NGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNDb21wb25lbnQsIFR1aVBhZ2luYXRpb25dLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1dpdGhHcm91cHNDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8gRW1haWwg0LTQu9GPINGB0LLRj9C30Lgg0L/QviDQstC+0L/RgNC+0YHQsNC8INGA0LXQutC70LDQvNCw0YbQuNC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlOiBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1NlcnZpY2UgPSBpbmplY3QoU2NGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjQ29udmVydGVyc1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC00LXQutGBINC/0LXRgNCy0L7QuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlyc3RQYWdlSW5kZXg6IG51bWJlciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQt9Cw0L/QuNGB0LXQuSDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGluamVjdChTQ19QQUdFX1NJWkVfT1BUSU9OUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0LfQsNC/0LjRgdC10Lkg0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVyUGFnZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMucGFnZVNpemVPcHRpb25zWzBdKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDQvdC+0LzQtdGA0LAg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpcnN0UGFnZUluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINCz0YDRg9C/0L/Riy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBJZCQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyBcItCX0LDQtNCw0YLRjCDQstC+0L/RgNC+0YFcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xpY2tTZW5kUXVlc3Rpb246IE91dHB1dEVtaXR0ZXJSZWY8dm9pZD4gPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0YHQv9C40YHQutCwINC30LDQutCw0LfQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8U2NJUGFnaW5hdGU8U2NGYXFJdGVtPiB8IG51bGw+ID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIHBhZ2U6IHRoaXMucGFnZSQsXG4gICAgICAgIHBlclBhZ2U6IHRoaXMucGVyUGFnZSQsXG4gICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwSWQkLFxuICAgICAgICBwYWdpbmF0ZTogb2YodHJ1ZSksXG4gICAgfSkucGlwZShcbiAgICAgICAgLy8g0J3Rg9C70LXQstC+0LkgZGVib3VuY2VUaW1lINC00LvRjyDRgdC70YPRh9Cw0Y8sINC60L7Qs9C00LAg0LzQtdC90Y/RjtGC0YHRjyDQvdCw0L/RgNCw0LLQu9C10L3QuNC1INC4INC/0L7Qu9C1INGB0L7RgNGC0LjRgNC+0LLQutC4INC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi5cbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlOiBTY0lGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNQYWdpbmF0aW9uUGFyYW1zKSA9PlxuICAgICAgICAgICAgdGhpcy5mcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyQodGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsPFNjSUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1BhZ2luYXRpb25QYXJhbXM+KHZhbHVlKSlcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgobnVsbCkpXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDQvtCx0YnQtdCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAg0YHRgtGA0LDQvdC40YYg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYWdlQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUoXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBtYXAoKHsgbWV0YSB9KSA9PiBtZXRhLmxhc3RQYWdlKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINC90L7QvNC10YDQsCDRgdGC0YDQsNC90LjRhtGLINC/0LDQs9C40L3QsNGG0LjQuCDQuNC3INC00LDQvdC90YvRhSDQv9Cw0LPQuNC90LDRhtC40Lgg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbnRQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKFxuICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgbWFwKCh7IG1ldGEgfSkgPT4gbWV0YS5jdXJyZW50UGFnZSAtIDEpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0xvYWRpbmcgPSB0b1NpZ25hbCh0aGlzLnJlcXVlc3QkLnBpcGUobWFwKHR1aUlzRmFsc3kpKSwgeyBpbml0aWFsVmFsdWU6IGZhbHNlIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC/0LjRgdC60LAg0LfQsNC60LDQt9C+0LIg0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGEkOiBPYnNlcnZhYmxlPFNjRmFxSXRlbVtdIHwgbnVsbD4gPSB0aGlzLnJlcXVlc3QkLnBpcGUoXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEuZGF0YSksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGE0L7RgNC80LDRgtCwINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YTQuNC70YzRgtGA0LAg0LPRgNGD0L/Qvy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld01vZGUkOiBPYnNlcnZhYmxlPCdsaXN0JyB8ICdzZWxlY3QnPiA9IGluamVjdChUVUlfV0lORE9XX1NJWkUpLnBpcGUobWFwKChyZWN0KSA9PiAocmVjdC53aWR0aCA+IDc2OCA/ICdsaXN0JyA6ICdzZWxlY3QnKSkpO1xuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LTQsNC90L3Ri9C1INC/0LDQs9C40L3QsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYWdlSW5kZXgg0JjQvdC00LXQutGBINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBhZ2luYXRpb25DaGFuZ2UocGFnZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHBhZ2VJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINCz0YDRg9C/0L/Riy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQs9GA0YPQv9C/0YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdyb3VwSWRDaGFuZ2UoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmdyb3VwSWQkLm5leHQoaWQpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25DaGFuZ2UoMCk7XG4gICAgfVxufVxuIiwiQGxldCBpdGVtcyA9IGRhdGEkIHwgYXN5bmM7XG5AbGV0IHBhZ2VDb3VudCA9IHBhZ2VDb3VudCQgfCBhc3luYztcbkBsZXQgdmlld01vZGUgPSB2aWV3TW9kZSQgfCBhc3luYztcblxuPGRpdlxuICAgICpuZ0lmPVwidmlld01vZGVcIlxuICAgIGNsYXNzPVwiZmxleCBnYXAtNlwiXG4gICAgW2NsYXNzLmZsZXgtY29sXT1cInZpZXdNb2RlID09PSAnc2VsZWN0J1wiXG4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTdcIj5cbiAgICAgICAgPHNjLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLWdyb3VwLXNlbGVjdG9yXG4gICAgICAgICAgICAoZ3JvdXBJZENoYW5nZSk9XCJncm91cElkQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZpZXdNb2RlXT1cInZpZXdNb2RlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2hyaW5rLTBcIlxuICAgICAgICAgICAgW2NsYXNzLnctNjRdPVwidmlld01vZGUgIT09ICdzZWxlY3QnXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInZpZXdNb2RlID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuY2lyY2xlLWhlbHBcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tTZW5kUXVlc3Rpb24uZW1pdCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQl9Cw0LTQsNGC0Ywg0LLQvtC/0YDQvtGBXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImdyb3dcIj5cbiAgICAgICAgQGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxzYy1mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dMb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDx0dWktcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGFnZUNvdW50ICYmIHBhZ2VDb3VudCA+IDFcIlxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwicGFnZUNvdW50XCJcbiAgICAgICAgICAgICAgICBbaW5kZXhdPVwiKGN1cnJlbnRQYWdlJCB8IGFzeW5jKSA/PyAwXCJcbiAgICAgICAgICAgICAgICAoaW5kZXhDaGFuZ2UpPVwicGFnaW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTQgIWp1c3RpZnktaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJvZHktcy1ib2xkXCI+0KHQv9C40YHQvtC6INCy0L7Qv9GA0L7RgdC+0LIg0L/Rg9GB0YI8L3A+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMtd2l0aC1ncm91cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3BhZ2VzL2ZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLXdpdGgtZ3JvdXBzL3NjLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLXdpdGgtZ3JvdXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wYWdlcy9mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy13aXRoLWdyb3Vwcy9zYy1mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy13aXRoLWdyb3Vwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0gsbUJBQW1CLEVBRW5CLGlDQUFpQyxFQUNqQyxnQkFBZ0IsRUFHaEIsWUFBWSxHQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FB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QTZDLDBKQy9CMUQsNm5EQWtEQSx1Q0R0QmMsU0FBUyw4Q0FBRSxJQUFJLDZGQUFFLGdEQUFnRCwySUFBRSxTQUFTLG9JQUFFLG1DQUFtQyw0R0FBRSxhQUFhOzs0RkFHakksNkNBQTZDO2tCQVB6RCxTQUFTO2lDQUNNLElBQUksWUFDTiwyQ0FBMkMsV0FFNUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGdEQUFnRCxFQUFFLFNBQVMsRUFBRSxtQ0FBbUMsRUFBRSxhQUFhLENBQUMsbUJBQzFILHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBvdXRwdXQsIE91dHB1dEVtaXR0ZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0ZhcUl0ZW0sXG4gICAgU2NGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlLFxuICAgIFNjaGVtYU9yZ0ZhY3RvcnksXG4gICAgU2NJRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zUGFnaW5hdGlvblBhcmFtcyxcbiAgICBTY0lQYWdpbmF0ZSxcbiAgICBTY1Nlb1NlcnZpY2UsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVFVJX1dJTkRPV19TSVpFLCB0dWlJc0ZhbHN5LCB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbiB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aVBhZ2luYXRpb24gfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zQ29tcG9uZW50LCBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc0dyb3VwU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLic7XG5pbXBvcnQgeyBTQ19QQUdFX1NJWkVfT1BUSU9OUyB9IGZyb20gJy4uL2ZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zL3NjLXBhZ2Utc2l6ZS1vcHRpb25zJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YfQsNGB0YLQviDQt9Cw0LTQsNCy0LDQtdC80YvRhSDQstC+0L/RgNC+0YHQvtCyINGBINCy0L7Qt9C80L7QttC90L7RgdGC0YzRjiDQstGL0LHQvtGA0LAg0LPRgNGD0L/Qv9GLINCy0L7Qv9GA0L7RgdC+0LIuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9ucy13aXRoLWdyb3VwcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLXdpdGgtZ3JvdXBzLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ0lmLCBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc0dyb3VwU2VsZWN0b3JDb21wb25lbnQsIFR1aUJ1dHRvbiwgU2NGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNDb21wb25lbnQsIFR1aVBhZ2luYXRpb25dLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1dpdGhHcm91cHNDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8gRW1haWwg0LTQu9GPINGB0LLRj9C30Lgg0L/QviDQstC+0L/RgNC+0YHQsNC8INGA0LXQutC70LDQvNCw0YbQuNC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlOiBTY0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1NlcnZpY2UgPSBpbmplY3QoU2NGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjQ29udmVydGVyc1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGD0YHRgtCw0L3QvtCy0LrQuCBTRU8t0LTQsNC90L3Ri9GFINC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VvU2VydmljZTogU2NTZW9TZXJ2aWNlID0gaW5qZWN0KFNjU2VvU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQpNCw0LHRgNC40LrQsCDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDQtNCw0L3QvdGL0YUgU2NoZW1hLm9yZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYU9yZ0ZhY3Rvcnk6IFNjaGVtYU9yZ0ZhY3RvcnkgPSBpbmplY3QoU2NoZW1hT3JnRmFjdG9yeSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC00LXQutGBINC/0LXRgNCy0L7QuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlyc3RQYWdlSW5kZXg6IG51bWJlciA9IDE7XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQt9Cw0L/QuNGB0LXQuSDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IGluamVjdChTQ19QQUdFX1NJWkVfT1BUSU9OUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0LfQsNC/0LjRgdC10Lkg0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVyUGFnZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMucGFnZVNpemVPcHRpb25zWzBdKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDQvdC+0LzQtdGA0LAg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpcnN0UGFnZUluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINCz0YDRg9C/0L/Riy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBJZCQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyBcItCX0LDQtNCw0YLRjCDQstC+0L/RgNC+0YFcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xpY2tTZW5kUXVlc3Rpb246IE91dHB1dEVtaXR0ZXJSZWY8dm9pZD4gPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0YHQv9C40YHQutCwINC30LDQutCw0LfQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8U2NJUGFnaW5hdGU8U2NGYXFJdGVtPiB8IG51bGw+ID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIHBhZ2U6IHRoaXMucGFnZSQsXG4gICAgICAgIHBlclBhZ2U6IHRoaXMucGVyUGFnZSQsXG4gICAgICAgIGdyb3VwOiB0aGlzLmdyb3VwSWQkLFxuICAgICAgICBwYWdpbmF0ZTogb2YodHJ1ZSksXG4gICAgfSkucGlwZShcbiAgICAgICAgLy8g0J3Rg9C70LXQstC+0LkgZGVib3VuY2VUaW1lINC00LvRjyDRgdC70YPRh9Cw0Y8sINC60L7Qs9C00LAg0LzQtdC90Y/RjtGC0YHRjyDQvdCw0L/RgNCw0LLQu9C10L3QuNC1INC4INC/0L7Qu9C1INGB0L7RgNGC0LjRgNC+0LLQutC4INC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi5cbiAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlOiBTY0lGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNQYWdpbmF0aW9uUGFyYW1zKSA9PlxuICAgICAgICAgICAgdGhpcy5mcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyQodGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsPFNjSUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1BhZ2luYXRpb25QYXJhbXM+KHZhbHVlKSlcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgobnVsbCkpXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlVGl0bGUgPSAn0KfQsNGB0YLQviDQt9Cw0LTQsNCy0LDQtdC80YvQtSDQstC+0L/RgNC+0YHRiyAtIEZBUSc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlb1NlcnZpY2Uuc2V0QnlEZWZhdWx0KHBhZ2VUaXRsZSwgdW5kZWZpbmVkLCB0aGlzLnNjaGVtYU9yZ0ZhY3RvcnkuZ2VuZXJhdGVGb3JGYXFQYWdlKGRhdGEuZGF0YSwgdGhpcy5yb3V0ZXIudXJsLCBwYWdlVGl0bGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDQvtCx0YnQtdCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAg0YHRgtGA0LDQvdC40YYg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYWdlQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUoXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBtYXAoKHsgbWV0YSB9KSA9PiBtZXRhLmxhc3RQYWdlKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINC90L7QvNC10YDQsCDRgdGC0YDQsNC90LjRhtGLINC/0LDQs9C40L3QsNGG0LjQuCDQuNC3INC00LDQvdC90YvRhSDQv9Cw0LPQuNC90LDRhtC40Lgg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbnRQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKFxuICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgbWFwKCh7IG1ldGEgfSkgPT4gbWV0YS5jdXJyZW50UGFnZSAtIDEpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0xvYWRpbmcgPSB0b1NpZ25hbCh0aGlzLnJlcXVlc3QkLnBpcGUobWFwKHR1aUlzRmFsc3kpKSwgeyBpbml0aWFsVmFsdWU6IGZhbHNlIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC/0LjRgdC60LAg0LfQsNC60LDQt9C+0LIg0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGEkOiBPYnNlcnZhYmxlPFNjRmFxSXRlbVtdIHwgbnVsbD4gPSB0aGlzLnJlcXVlc3QkLnBpcGUoXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEuZGF0YSksXG4gICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGE0L7RgNC80LDRgtCwINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YTQuNC70YzRgtGA0LAg0LPRgNGD0L/Qvy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld01vZGUkOiBPYnNlcnZhYmxlPCdsaXN0JyB8ICdzZWxlY3QnPiA9IGluamVjdChUVUlfV0lORE9XX1NJWkUpLnBpcGUobWFwKChyZWN0KSA9PiAocmVjdC53aWR0aCA+IDc2OCA/ICdsaXN0JyA6ICdzZWxlY3QnKSkpO1xuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LTQsNC90L3Ri9C1INC/0LDQs9C40L3QsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYWdlSW5kZXgg0JjQvdC00LXQutGBINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBhZ2luYXRpb25DaGFuZ2UocGFnZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHBhZ2VJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINCz0YDRg9C/0L/Riy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQs9GA0YPQv9C/0YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdyb3VwSWRDaGFuZ2UoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmdyb3VwSWQkLm5leHQoaWQpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25DaGFuZ2UoMCk7XG4gICAgfVxufVxuIiwiQGxldCBpdGVtcyA9IGRhdGEkIHwgYXN5bmM7XG5AbGV0IHBhZ2VDb3VudCA9IHBhZ2VDb3VudCQgfCBhc3luYztcbkBsZXQgdmlld01vZGUgPSB2aWV3TW9kZSQgfCBhc3luYztcblxuPGRpdlxuICAgICpuZ0lmPVwidmlld01vZGVcIlxuICAgIGNsYXNzPVwiZmxleCBnYXAtNlwiXG4gICAgW2NsYXNzLmZsZXgtY29sXT1cInZpZXdNb2RlID09PSAnc2VsZWN0J1wiXG4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTdcIj5cbiAgICAgICAgPHNjLWZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zLWdyb3VwLXNlbGVjdG9yXG4gICAgICAgICAgICAoZ3JvdXBJZENoYW5nZSk9XCJncm91cElkQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZpZXdNb2RlXT1cInZpZXdNb2RlXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2hyaW5rLTBcIlxuICAgICAgICAgICAgW2NsYXNzLnctNjRdPVwidmlld01vZGUgIT09ICdzZWxlY3QnXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInZpZXdNb2RlID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuY2lyY2xlLWhlbHBcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tTZW5kUXVlc3Rpb24uZW1pdCgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQl9Cw0LTQsNGC0Ywg0LLQvtC/0YDQvtGBXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImdyb3dcIj5cbiAgICAgICAgQGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxzYy1mcmVxdWVudGx5LWFza2VkLXF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtc1wiXG4gICAgICAgICAgICAgICAgW3Nob3dMb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDx0dWktcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicGFnZUNvdW50ICYmIHBhZ2VDb3VudCA+IDFcIlxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwicGFnZUNvdW50XCJcbiAgICAgICAgICAgICAgICBbaW5kZXhdPVwiKGN1cnJlbnRQYWdlJCB8IGFzeW5jKSA/PyAwXCJcbiAgICAgICAgICAgICAgICAoaW5kZXhDaGFuZ2UpPVwicGFnaW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTQgIWp1c3RpZnktaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJvZHktcy1ib2xkXCI+0KHQv9C40YHQvtC6INCy0L7Qv9GA0L7RgdC+0LIg0L/Rg9GB0YI8L3A+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, Injectable, NgZone, signal, EventEmitter, ChangeDetectorRef, Directive, Input, Output, Pipe, ElementRef, HostListener, Renderer2, ContentChildren, NgModule, input, computed, Component, ChangeDetectionStrategy, Inject, HostBinding, model, output, SkipSelf, DestroyRef, effect, ContentChild, ViewChild, viewChild, Optional, contentChild, TemplateRef, forwardRef } from '@angular/core';
|
|
3
3
|
import * as i1 from '@snabcentr/client-core';
|
|
4
|
-
import { ScContactsService, ScUserService, ScLocationsService, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, IS_RUNNING_ON_TERMINAL, ScVCardService, ScVerificationService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScConvertersService, ScOpfList, ScReferencesService, ScContragentService, ScBannerService, ScMediaImageTransformerPipe, ScCartService, ScUploadedFile, loadingPlaceholder, SC_ORDER_LOADER, ScMimeTypes, ScCatalogService, SC_URLS, IS_SERVER, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScCatalogFilterService, ScIdOrSlugPipe, SC_CATEGORY_INFO, ScConfiguratorService, RESPONSE, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScDeliveryAddressService, ScOrdersService, ScUIService, SC_USER_INFO as SC_USER_INFO$1, ScPaymentType, ScDeliveryType, TERMINAL_PROVIDERS, ScOrderDraftsService, ScRouteKeys, ScSeoService, scOrderIsLoaded, ScFrequentlyAskedQuestionsService, SC_COMPANY_INFO, ScFeedbackService } from '@snabcentr/client-core';
|
|
4
|
+
import { ScContactsService, ScUserService, ScLocationsService, ScAuthService, SEARCH_TERM, ScUnitsHelper, ScImageHelper, SC_PATH_IMAGE_NOT_FOUND, ScImage, ScPhoneService, ScUserMetrikaService, ScUserMetrikaGoalsEnum, IS_RUNNING_ON_TERMINAL, ScVCardService, ScVerificationService, ScISuggestionType, SC_MIN_LENGTH_SEARCH_TERM, ScConvertersService, ScOpfList, ScReferencesService, ScContragentService, ScBannerService, ScMediaImageTransformerPipe, ScCartService, ScUploadedFile, loadingPlaceholder, SC_ORDER_LOADER, ScMimeTypes, ScCatalogService, SC_URLS, IS_SERVER, ScWarehouseService, SEARCH_TERM_PROVIDERS, ScPaginationService, SC_NEXT_PAGE_PAGINATION_CLICK, SC_PRODUCT_PAGINATION_OPTIONS, ScCatalogFilterService, ScIdOrSlugPipe, SC_CATEGORY_INFO, ScConfiguratorService, RESPONSE, ScIconTypesEnum, ScDocumentInfoTypesEnum, ScDeliveryAddressService, ScOrdersService, ScUIService, SC_USER_INFO as SC_USER_INFO$1, ScPaymentType, ScDeliveryType, TERMINAL_PROVIDERS, ScOrderDraftsService, ScRouteKeys, ScSeoService, scOrderIsLoaded, ScFrequentlyAskedQuestionsService, SchemaOrgFactory, SC_COMPANY_INFO, ScFeedbackService } from '@snabcentr/client-core';
|
|
5
5
|
import * as i5$1 from 'rxjs';
|
|
6
6
|
import { EMPTY, BehaviorSubject, switchMap, of, shareReplay, map, Subject, filter, tap, catchError, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, debounceTime, throwError, combineLatest, Observable, pairwise, Subscription, merge, skip, from, concatMap, noop, first, retry } from 'rxjs';
|
|
7
7
|
import { WA_WINDOW } from '@ng-web-apis/common';
|
|
@@ -5648,11 +5648,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5648
5648
|
}] });
|
|
5649
5649
|
|
|
5650
5650
|
/**
|
|
5651
|
-
* Токен для инъекции {@link
|
|
5651
|
+
* Токен для инъекции {@link BehaviorSubject} для хранения фильтров продуктов.
|
|
5652
5652
|
*/
|
|
5653
5653
|
const SC_CATALOG_PRODUCTS_FILTERS = new InjectionToken('SC_CATALOG_PRODUCTS_FILTERS$', {
|
|
5654
5654
|
providedIn: 'root',
|
|
5655
|
-
factory: () => new
|
|
5655
|
+
factory: () => new BehaviorSubject({}),
|
|
5656
5656
|
});
|
|
5657
5657
|
|
|
5658
5658
|
/**
|
|
@@ -5773,6 +5773,12 @@ class ScCatalogFiltersComponent {
|
|
|
5773
5773
|
this.form.valueChanges.pipe(debounceTime(0), takeUntilDestroyed()).subscribe((filters) => {
|
|
5774
5774
|
this.catalogProductsFilters$.next(this.buildPropertyFilters(filters));
|
|
5775
5775
|
});
|
|
5776
|
+
// Внешний сброс фильтров (например, при смене категории): приводим форму к исходным значениям без повторной отправки в хранилище.
|
|
5777
|
+
this.catalogProductsFilters$
|
|
5778
|
+
.pipe(filter((value) => Object.keys(value).length === 0), takeUntilDestroyed())
|
|
5779
|
+
.subscribe(() => {
|
|
5780
|
+
this.resetAllFilters(false);
|
|
5781
|
+
});
|
|
5776
5782
|
}
|
|
5777
5783
|
/**
|
|
5778
5784
|
* Обновляет состав контролов формы на основе переданных фильтров.
|
|
@@ -5782,13 +5788,16 @@ class ScCatalogFiltersComponent {
|
|
|
5782
5788
|
updateFormControls(filters) {
|
|
5783
5789
|
this.formSyncs.unsubscribe();
|
|
5784
5790
|
this.formSyncs = new Subscription();
|
|
5791
|
+
const appliedFilters = this.getAppliedFilters();
|
|
5785
5792
|
Object.keys(this.form.controls).forEach((key) => {
|
|
5786
5793
|
this.form.removeControl(key, { emitEvent: false });
|
|
5787
5794
|
});
|
|
5788
5795
|
filters.forEach((item) => {
|
|
5796
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
5797
|
+
const appliedValue = appliedFilters[item.id];
|
|
5789
5798
|
switch (item.type) {
|
|
5790
5799
|
case 'checkbox': {
|
|
5791
|
-
const checkboxControl = this.createCheckboxFormControl(item);
|
|
5800
|
+
const checkboxControl = this.createCheckboxFormControl(item, appliedValue);
|
|
5792
5801
|
this.form.addControl(item.id, checkboxControl, { emitEvent: false });
|
|
5793
5802
|
// Single-select для !isMultiple: при выборе одного остальные снимаются.
|
|
5794
5803
|
if (!item.isMultiple && item.values.length > 1) {
|
|
@@ -5797,19 +5806,27 @@ class ScCatalogFiltersComponent {
|
|
|
5797
5806
|
break;
|
|
5798
5807
|
}
|
|
5799
5808
|
case 'range': {
|
|
5800
|
-
const rangeControl = this.createRangeFormControl(item);
|
|
5809
|
+
const rangeControl = this.createRangeFormControl(item, appliedValue);
|
|
5801
5810
|
this.form.addControl(item.id, rangeControl, { emitEvent: false });
|
|
5802
5811
|
this.formSyncs.add(this.syncRangeFromToAndSlider(rangeControl));
|
|
5803
5812
|
break;
|
|
5804
5813
|
}
|
|
5805
5814
|
case 'toggle':
|
|
5806
|
-
this.form.addControl(item.id, this.createToggleFormControl(item), { emitEvent: false });
|
|
5815
|
+
this.form.addControl(item.id, this.createToggleFormControl(item, appliedValue), { emitEvent: false });
|
|
5807
5816
|
break;
|
|
5808
5817
|
default:
|
|
5809
5818
|
break;
|
|
5810
5819
|
}
|
|
5811
5820
|
});
|
|
5812
5821
|
}
|
|
5822
|
+
/**
|
|
5823
|
+
* Возвращает текущие применённые фильтры из хранилища фильтров.
|
|
5824
|
+
*
|
|
5825
|
+
* Позволяет восстанавливать выбранные значения при пересоздании компонента (повторное открытие диалога или блока фильтров).
|
|
5826
|
+
*/
|
|
5827
|
+
getAppliedFilters() {
|
|
5828
|
+
return this.catalogProductsFilters$ instanceof BehaviorSubject ? this.catalogProductsFilters$.value : {};
|
|
5829
|
+
}
|
|
5813
5830
|
/**
|
|
5814
5831
|
* Преобразует значения формы в объект фильтров свойств.
|
|
5815
5832
|
*
|
|
@@ -5846,9 +5863,11 @@ class ScCatalogFiltersComponent {
|
|
|
5846
5863
|
* Различие в API-выводе для одиночного значения (boolean вместо массива) обрабатывается в {@link processCheckboxFilter}.
|
|
5847
5864
|
*
|
|
5848
5865
|
* @param checkboxFilter Фильтр типа checkbox.
|
|
5866
|
+
* @param appliedValue Применённое ранее значение фильтра из хранилища фильтров.
|
|
5849
5867
|
*/
|
|
5850
|
-
createCheckboxFormControl(checkboxFilter) {
|
|
5851
|
-
const
|
|
5868
|
+
createCheckboxFormControl(checkboxFilter, appliedValue) {
|
|
5869
|
+
const appliedIds = Array.isArray(appliedValue) ? appliedValue : null;
|
|
5870
|
+
const isSelected = (id) => appliedIds?.includes(id) ?? checkboxFilter.selectedValues?.includes(id) ?? false;
|
|
5852
5871
|
const controls = {};
|
|
5853
5872
|
checkboxFilter.values.forEach((value) => {
|
|
5854
5873
|
controls[value.id] = new FormControl(isSelected(value.id), { nonNullable: true });
|
|
@@ -5859,10 +5878,12 @@ class ScCatalogFiltersComponent {
|
|
|
5859
5878
|
* Создаёт {@link FormGroup} для range: {@code from}, {@code to}, {@code slider} (кортеж для {@link TuiRange}).
|
|
5860
5879
|
*
|
|
5861
5880
|
* @param rangeFilter Фильтр типа range.
|
|
5881
|
+
* @param appliedValue Применённое ранее значение фильтра из хранилища фильтров.
|
|
5862
5882
|
*/
|
|
5863
|
-
createRangeFormControl(rangeFilter) {
|
|
5864
|
-
const
|
|
5865
|
-
const
|
|
5883
|
+
createRangeFormControl(rangeFilter, appliedValue) {
|
|
5884
|
+
const appliedRange = appliedValue && typeof appliedValue === 'object' && !Array.isArray(appliedValue) ? appliedValue : null;
|
|
5885
|
+
const fromValue = Number(appliedRange?.from ?? rangeFilter.selectedMin ?? rangeFilter.min);
|
|
5886
|
+
const toValue = Number(appliedRange?.to ?? rangeFilter.selectedMax ?? rangeFilter.max);
|
|
5866
5887
|
return new FormGroup({
|
|
5867
5888
|
from: new FormControl(fromValue, { nonNullable: true }),
|
|
5868
5889
|
to: new FormControl(toValue, { nonNullable: true }),
|
|
@@ -5946,9 +5967,11 @@ class ScCatalogFiltersComponent {
|
|
|
5946
5967
|
* Создает FormControl для toggle.
|
|
5947
5968
|
*
|
|
5948
5969
|
* @param toggleFilter Фильтр типа toggle.
|
|
5970
|
+
* @param appliedValue Применённое ранее значение фильтра из хранилища фильтров.
|
|
5949
5971
|
*/
|
|
5950
|
-
createToggleFormControl(toggleFilter) {
|
|
5951
|
-
|
|
5972
|
+
createToggleFormControl(toggleFilter, appliedValue) {
|
|
5973
|
+
const appliedToggle = typeof appliedValue === 'boolean' ? appliedValue : undefined;
|
|
5974
|
+
return new FormControl(appliedToggle ?? toggleFilter.selectedValue ?? false, { nonNullable: true });
|
|
5952
5975
|
}
|
|
5953
5976
|
/**
|
|
5954
5977
|
* Обрабатывает checkbox: FormGroup → string[] выбранных id; для единственного значения — boolean (как toggle).
|
|
@@ -6046,8 +6069,10 @@ class ScCatalogFiltersComponent {
|
|
|
6046
6069
|
}
|
|
6047
6070
|
/**
|
|
6048
6071
|
* Сбрасывает все фильтры к исходным значениям.
|
|
6072
|
+
*
|
|
6073
|
+
* @param emitEvent Признак необходимости эмитить события изменения контролов (false — тихий сброс без отправки значений в хранилище фильтров).
|
|
6049
6074
|
*/
|
|
6050
|
-
resetAllFilters() {
|
|
6075
|
+
resetAllFilters(emitEvent = true) {
|
|
6051
6076
|
this.filters()?.forEach((filterItem) => {
|
|
6052
6077
|
const control = this.form.get(filterItem.id);
|
|
6053
6078
|
if (!control) {
|
|
@@ -6061,17 +6086,17 @@ class ScCatalogFiltersComponent {
|
|
|
6061
6086
|
// eslint-disable-next-line security/detect-object-injection
|
|
6062
6087
|
resetValue[id] = false;
|
|
6063
6088
|
});
|
|
6064
|
-
group.reset(resetValue);
|
|
6089
|
+
group.reset(resetValue, { emitEvent });
|
|
6065
6090
|
break;
|
|
6066
6091
|
}
|
|
6067
6092
|
case 'toggle':
|
|
6068
|
-
control.reset(false);
|
|
6093
|
+
control.reset(false, { emitEvent });
|
|
6069
6094
|
break;
|
|
6070
6095
|
case 'range': {
|
|
6071
6096
|
const group = control;
|
|
6072
6097
|
const min = +filterItem.min;
|
|
6073
6098
|
const max = +filterItem.max;
|
|
6074
|
-
group.reset({ from: min, to: max, slider: [min, max] });
|
|
6099
|
+
group.reset({ from: min, to: max, slider: [min, max] }, { emitEvent });
|
|
6075
6100
|
break;
|
|
6076
6101
|
}
|
|
6077
6102
|
default:
|
|
@@ -9435,7 +9460,7 @@ class ScFrequentlyAskedQuestionsComponent {
|
|
|
9435
9460
|
*/
|
|
9436
9461
|
this.showLoading = input(false);
|
|
9437
9462
|
/**
|
|
9438
|
-
*
|
|
9463
|
+
* Признак, что приложение запущено на сервере.
|
|
9439
9464
|
*/
|
|
9440
9465
|
this.isServer = inject(IS_SERVER);
|
|
9441
9466
|
}
|
|
@@ -9527,6 +9552,18 @@ class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
9527
9552
|
* Сервис конвертации данных.
|
|
9528
9553
|
*/
|
|
9529
9554
|
this.convertersService = inject(ScConvertersService);
|
|
9555
|
+
/**
|
|
9556
|
+
* Сервис установки SEO-данных приложения.
|
|
9557
|
+
*/
|
|
9558
|
+
this.seoService = inject(ScSeoService);
|
|
9559
|
+
/**
|
|
9560
|
+
* Фабрика для создания данных Schema.org.
|
|
9561
|
+
*/
|
|
9562
|
+
this.schemaOrgFactory = inject(SchemaOrgFactory);
|
|
9563
|
+
/**
|
|
9564
|
+
* Сервис маршрутизации.
|
|
9565
|
+
*/
|
|
9566
|
+
this.router = inject(Router);
|
|
9530
9567
|
/**
|
|
9531
9568
|
* Индекс первой страницы.
|
|
9532
9569
|
*/
|
|
@@ -9563,7 +9600,12 @@ class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
9563
9600
|
// Нулевой debounceTime для случая, когда меняются направление и поле сортировки одновременно.
|
|
9564
9601
|
debounceTime(0), switchMap((value) => this.frequentlyAskedQuestionsService
|
|
9565
9602
|
.getFrequentlyAskedQuestions$(this.convertersService.removeNull(value))
|
|
9566
|
-
.pipe(startWith(null))),
|
|
9603
|
+
.pipe(startWith(null))), tap((data) => {
|
|
9604
|
+
if (data) {
|
|
9605
|
+
const pageTitle = 'Часто задаваемые вопросы - FAQ';
|
|
9606
|
+
this.seoService.setByDefault(pageTitle, undefined, this.schemaOrgFactory.generateForFaqPage(data.data, this.router.url, pageTitle));
|
|
9607
|
+
}
|
|
9608
|
+
}), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
9567
9609
|
/**
|
|
9568
9610
|
* {@link Observable} изменения общего количества страниц пагинации.
|
|
9569
9611
|
*/
|