@snabcentr/client-ui 3.9.4 → 3.11.0
Sign up to get free protection for your applications and to get access to all the features.
- package/contacts/sc-contacts.module.d.ts +2 -2
- package/directives/links/sc-links.d.ts +2 -2
- package/esm2022/contacts/contacts-accordion/sc-contacts-accordion.component.mjs +4 -4
- package/esm2022/contacts/sc-contacts.module.mjs +3 -3
- package/esm2022/directives/links/sc-links.mjs +3 -3
- package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +267 -0
- package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +32 -0
- package/esm2022/feedback/index.mjs +3 -0
- package/esm2022/pipes/index.mjs +2 -2
- package/esm2022/pipes/sc-phone-format.mjs +44 -0
- package/esm2022/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.mjs +4 -4
- package/esm2022/profile/sc-profile.module.mjs +3 -3
- package/esm2022/providers/index.mjs +2 -1
- package/esm2022/providers/sc-max-files-in-form-input.mjs +6 -0
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/samples/index.mjs +1 -2
- package/esm2022/samples/sc-sample.module.mjs +5 -6
- package/esm2022/user/sc-user.module.mjs +3 -3
- package/esm2022/user/user-managers/sc-user-managers.component.mjs +4 -4
- package/feedback/feedback-form/sc-feedback-form.component.d.ts +123 -0
- package/feedback/gratitude/sc-gratitude.component.d.ts +20 -0
- package/feedback/index.d.ts +2 -0
- package/fesm2022/snabcentr-client-ui.mjs +330 -153
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/pipes/index.d.ts +1 -1
- package/pipes/{sc-formatted-phone.d.ts → sc-phone-format.d.ts} +3 -3
- package/profile/sc-profile.module.d.ts +2 -2
- package/providers/index.d.ts +1 -0
- package/providers/sc-max-files-in-form-input.d.ts +5 -0
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +3 -3
- package/samples/index.d.ts +0 -1
- package/samples/sc-sample.module.d.ts +10 -11
- package/styles/tailwind/tailwind.scss +26 -0
- package/user/sc-user.module.d.ts +2 -2
- package/esm2022/pipes/sc-formatted-phone.mjs +0 -44
- package/esm2022/samples/ask-to-sample-form/sc-ask-to-sample-form.component.mjs +0 -117
- package/samples/ask-to-sample-form/sc-ask-to-sample-form.component.d.ts +0 -52
package/package.json
CHANGED
package/pipes/index.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export * from './sc-
|
1
|
+
export * from './sc-phone-format';
|
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
|
|
6
6
|
* Если переданный номер телефона валиден, он будет отформатирован с использованием метода `formatPhoneNumber` сервиса `ScPhoneService`.
|
7
7
|
* Если номер невалиден, возвращается исходное значение.
|
8
8
|
*/
|
9
|
-
export declare class
|
9
|
+
export declare class ScPhoneFormatPipe implements PipeTransform {
|
10
10
|
/**
|
11
11
|
* Преобразует строковое значение номера телефона.
|
12
12
|
*
|
@@ -16,6 +16,6 @@ export declare class ScFormatePhonePipe implements PipeTransform {
|
|
16
16
|
* @returns Отформатированный номер телефона, если он валиден, или исходное значение, если он невалиден.
|
17
17
|
*/
|
18
18
|
transform(value: string, format?: 'normal' | 'clean' | 'cleanWithPlus'): string;
|
19
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
20
|
-
static ɵpipe: i0.ɵɵPipeDeclaration<
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScPhoneFormatPipe, never>;
|
20
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<ScPhoneFormatPipe, "scPhoneFormat", true>;
|
21
21
|
}
|
@@ -12,13 +12,13 @@ import * as i10 from "../contacts/sc-contacts.module";
|
|
12
12
|
import * as i11 from "../directives/terminal-link/sc-terminal-link.directive";
|
13
13
|
import * as i12 from "../directives/links/sc-tel-link.directive";
|
14
14
|
import * as i13 from "../directives/links/sc-email-link.directive";
|
15
|
-
import * as i14 from "../pipes/sc-
|
15
|
+
import * as i14 from "../pipes/sc-phone-format";
|
16
16
|
import * as i15 from "@taiga-ui/kit";
|
17
17
|
/**
|
18
18
|
* Модуль профиля пользователя.
|
19
19
|
*/
|
20
20
|
export declare class ScProfileModule {
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScProfileModule, never>;
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ScProfileModule, [typeof i1.ScProfileAccordionsContentComponent], [typeof i2.CommonModule, typeof i3.ScUserModule, typeof i4.ScAccordionModule, typeof i5.ScContragentsModule, typeof i6.ScDeliveryAddressModule, typeof i7.TuiLoader, typeof i8.TuiLet, typeof i7.TuiLink, typeof i7.TuiLabel, typeof i7.TuiIcon, typeof i9.FormsModule, typeof i9.ReactiveFormsModule, typeof i7.TuiButton, typeof i10.ScContactsModule, typeof i11.ScTerminalLinkDirective, typeof i12.ScTelLinkDirective, typeof i13.ScEmailLinkDirective, typeof i14.
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ScProfileModule, [typeof i1.ScProfileAccordionsContentComponent], [typeof i2.CommonModule, typeof i3.ScUserModule, typeof i4.ScAccordionModule, typeof i5.ScContragentsModule, typeof i6.ScDeliveryAddressModule, typeof i7.TuiLoader, typeof i8.TuiLet, typeof i7.TuiLink, typeof i7.TuiLabel, typeof i7.TuiIcon, typeof i9.FormsModule, typeof i9.ReactiveFormsModule, typeof i7.TuiButton, typeof i10.ScContactsModule, typeof i11.ScTerminalLinkDirective, typeof i12.ScTelLinkDirective, typeof i13.ScEmailLinkDirective, typeof i14.ScPhoneFormatPipe, typeof i15.TuiCheckbox], [typeof i1.ScProfileAccordionsContentComponent]>;
|
23
23
|
static ɵinj: i0.ɵɵInjectorDeclaration<ScProfileModule>;
|
24
24
|
}
|
package/providers/index.d.ts
CHANGED
package/public-api.d.ts
CHANGED
package/release_notes.tmp
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
## 3.
|
1
|
+
## 3.11.0 (2025-01-29)
|
2
2
|
|
3
|
-
###
|
3
|
+
### fixed (1 change)
|
4
4
|
|
5
|
-
- [#
|
5
|
+
- [#10903: Исправлено наименование пайпа форматирования телефона](web_soft/libs/angular/snabcentr-client-ui-lib@df7a62ec21253beddad65c4912ee31f8fdae9ea0) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!219))
|
6
6
|
|
package/samples/index.d.ts
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
import * as i0 from "@angular/core";
|
2
2
|
import * as i1 from "./preview-sample/sc-preview-sample.component";
|
3
|
-
import * as i2 from "
|
4
|
-
import * as i3 from "@angular/
|
5
|
-
import * as i4 from "@
|
6
|
-
import * as i5 from "@taiga-ui/
|
7
|
-
import * as i6 from "
|
8
|
-
import * as i7 from "
|
9
|
-
import * as i8 from "@taiga-ui/
|
10
|
-
import * as i9 from "@taiga-ui/cdk
|
11
|
-
import * as i10 from "
|
12
|
-
import * as i11 from "ng-recaptcha-2";
|
3
|
+
import * as i2 from "@angular/common";
|
4
|
+
import * as i3 from "@angular/forms";
|
5
|
+
import * as i4 from "@taiga-ui/core";
|
6
|
+
import * as i5 from "@taiga-ui/kit";
|
7
|
+
import * as i6 from "../form-fields/form-fields.module";
|
8
|
+
import * as i7 from "@taiga-ui/legacy";
|
9
|
+
import * as i8 from "@taiga-ui/cdk/directives/item";
|
10
|
+
import * as i9 from "@taiga-ui/cdk";
|
11
|
+
import * as i10 from "ng-recaptcha-2";
|
13
12
|
/**
|
14
13
|
* Модуль представления образцов товара.
|
15
14
|
*/
|
16
15
|
export declare class ScPreviewSampleModule {
|
17
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScPreviewSampleModule, never>;
|
18
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ScPreviewSampleModule, [typeof i1.ScPreviewSampleComponent
|
17
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ScPreviewSampleModule, [typeof i1.ScPreviewSampleComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.TuiError, typeof i5.TuiFieldErrorPipe, typeof i6.ScFormFieldsModule, typeof i7.TuiInputModule, typeof i7.TuiInputPhoneModule, typeof i8.TuiItem, typeof i5.TuiCarouselComponent, typeof i5.TuiCarouselDirective, typeof i5.TuiCarouselAutoscroll, typeof i5.TuiCarouselButtons, typeof i5.TuiCarouselScroll, typeof i5.TuiAvatar, typeof i9.TuiHovered, typeof i9.TuiLet, typeof i4.TuiButton, typeof i5.TuiButtonLoading, typeof i4.TuiLabel, typeof i10.RecaptchaFormsModule, typeof i10.RecaptchaModule], [typeof i1.ScPreviewSampleComponent]>;
|
19
18
|
static ɵinj: i0.ɵɵInjectorDeclaration<ScPreviewSampleModule>;
|
20
19
|
}
|
@@ -704,6 +704,11 @@ video {
|
|
704
704
|
margin: -0.5rem !important;
|
705
705
|
}
|
706
706
|
|
707
|
+
.mx-2 {
|
708
|
+
margin-left: 0.5rem;
|
709
|
+
margin-right: 0.5rem;
|
710
|
+
}
|
711
|
+
|
707
712
|
.my-2 {
|
708
713
|
margin-top: 0.5rem;
|
709
714
|
margin-bottom: 0.5rem;
|
@@ -801,6 +806,11 @@ video {
|
|
801
806
|
display: none;
|
802
807
|
}
|
803
808
|
|
809
|
+
.\!size-20 {
|
810
|
+
width: 5rem !important;
|
811
|
+
height: 5rem !important;
|
812
|
+
}
|
813
|
+
|
804
814
|
.size-20 {
|
805
815
|
width: 5rem;
|
806
816
|
height: 5rem;
|
@@ -1305,6 +1315,11 @@ video {
|
|
1305
1315
|
padding-right: 1.5rem;
|
1306
1316
|
}
|
1307
1317
|
|
1318
|
+
.py-14 {
|
1319
|
+
padding-top: 3.5rem;
|
1320
|
+
padding-bottom: 3.5rem;
|
1321
|
+
}
|
1322
|
+
|
1308
1323
|
.py-4\.5 {
|
1309
1324
|
padding-top: 1.125rem;
|
1310
1325
|
padding-bottom: 1.125rem;
|
@@ -1338,6 +1353,11 @@ video {
|
|
1338
1353
|
vertical-align: baseline;
|
1339
1354
|
}
|
1340
1355
|
|
1356
|
+
.\!text-5xl {
|
1357
|
+
font-size: 3rem !important;
|
1358
|
+
line-height: 1 !important;
|
1359
|
+
}
|
1360
|
+
|
1341
1361
|
.\!text-body-m-bold {
|
1342
1362
|
font-size: 0.9375rem !important;
|
1343
1363
|
line-height: 1.5rem !important;
|
@@ -1375,6 +1395,12 @@ video {
|
|
1375
1395
|
font-weight: 800;
|
1376
1396
|
}
|
1377
1397
|
|
1398
|
+
.text-body-m {
|
1399
|
+
font-size: 0.9375rem;
|
1400
|
+
line-height: 1.5rem;
|
1401
|
+
font-weight: 500;
|
1402
|
+
}
|
1403
|
+
|
1378
1404
|
.text-body-m-bold {
|
1379
1405
|
font-size: 0.9375rem;
|
1380
1406
|
line-height: 1.5rem;
|
package/user/sc-user.module.d.ts
CHANGED
@@ -14,12 +14,12 @@ import * as i12 from "../form-fields/form-fields.module";
|
|
14
14
|
import * as i13 from "../directives/terminal-link/sc-terminal-link.directive";
|
15
15
|
import * as i14 from "../directives/links/sc-tel-link.directive";
|
16
16
|
import * as i15 from "../directives/links/sc-email-link.directive";
|
17
|
-
import * as i16 from "../pipes/sc-
|
17
|
+
import * as i16 from "../pipes/sc-phone-format";
|
18
18
|
/**
|
19
19
|
* Модуль компонентов пользователя.
|
20
20
|
*/
|
21
21
|
export declare class ScUserModule {
|
22
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScUserModule, never>;
|
23
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ScUserModule, [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiFieldErrorPipe, typeof i8.TuiInputPasswordModule, typeof i9.TuiButton, typeof i9.TuiError, typeof i9.TuiLabel, typeof i8.TuiTextfieldControllerModule, typeof i10.TuiLet, typeof i11.ScVerificationModule, typeof i12.ScFormFieldsModule, typeof i9.TuiLoader, typeof i8.TuiInputModule, typeof i8.TuiInputPhoneModule, typeof i7.TuiCheckbox, typeof i9.TuiDataListComponent, typeof i9.TuiDataListDirective, typeof i9.TuiOption, typeof i9.TuiOptGroup, typeof i8.TuiSelectModule, typeof i9.TuiLink, typeof i13.ScTerminalLinkDirective, typeof i14.ScTelLinkDirective, typeof i15.ScEmailLinkDirective, typeof i16.
|
23
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ScUserModule, [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.TuiFieldErrorPipe, typeof i8.TuiInputPasswordModule, typeof i9.TuiButton, typeof i9.TuiError, typeof i9.TuiLabel, typeof i8.TuiTextfieldControllerModule, typeof i10.TuiLet, typeof i11.ScVerificationModule, typeof i12.ScFormFieldsModule, typeof i9.TuiLoader, typeof i8.TuiInputModule, typeof i8.TuiInputPhoneModule, typeof i7.TuiCheckbox, typeof i9.TuiDataListComponent, typeof i9.TuiDataListDirective, typeof i9.TuiOption, typeof i9.TuiOptGroup, typeof i8.TuiSelectModule, typeof i9.TuiLink, typeof i13.ScTerminalLinkDirective, typeof i14.ScTelLinkDirective, typeof i15.ScEmailLinkDirective, typeof i16.ScPhoneFormatPipe, typeof i7.TuiButtonLoading], [typeof i1.ScResetUserPasswordComponent, typeof i2.ScUpdateUserInfoDialogComponent, typeof i3.ScUserPhoneApproveDialogComponent, typeof i4.ScUserManagersComponent]>;
|
24
24
|
static ɵinj: i0.ɵɵInjectorDeclaration<ScUserModule>;
|
25
25
|
}
|
@@ -1,44 +0,0 @@
|
|
1
|
-
/* eslint-disable class-methods-use-this */
|
2
|
-
import { Pipe } from '@angular/core';
|
3
|
-
import { ScPhoneService } from '@snabcentr/client-core';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
/**
|
6
|
-
* Пайп для форматирования номера телефона.
|
7
|
-
*
|
8
|
-
* Если переданный номер телефона валиден, он будет отформатирован с использованием метода `formatPhoneNumber` сервиса `ScPhoneService`.
|
9
|
-
* Если номер невалиден, возвращается исходное значение.
|
10
|
-
*/
|
11
|
-
export class ScFormatePhonePipe {
|
12
|
-
/**
|
13
|
-
* Преобразует строковое значение номера телефона.
|
14
|
-
*
|
15
|
-
* @param value Строка, содержащая номер телефона.
|
16
|
-
* @param format Формат возвращаемого значения. `normal` - удобочитаемое представление номера телефона, `clean` - очищенное от лишних символов представление номера телефона, `cleanWithPlus` - очищенное от лишних символов представление номера телефона с `+` в начале.
|
17
|
-
*
|
18
|
-
* @returns Отформатированный номер телефона, если он валиден, или исходное значение, если он невалиден.
|
19
|
-
*/
|
20
|
-
transform(value, format = 'normal') {
|
21
|
-
if (ScPhoneService.isValidPhoneNumber(value)) {
|
22
|
-
// eslint-disable-next-line default-case
|
23
|
-
switch (format) {
|
24
|
-
case 'normal':
|
25
|
-
return ScPhoneService.formatPhoneNumber(value);
|
26
|
-
case 'clean':
|
27
|
-
return ScPhoneService.cleanPhoneNumber(value);
|
28
|
-
case 'cleanWithPlus':
|
29
|
-
return `+${ScPhoneService.cleanPhoneNumber(value)}`;
|
30
|
-
}
|
31
|
-
}
|
32
|
-
return value; // Возвращаем оригинальный номер, если он невалиден.
|
33
|
-
}
|
34
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScFormatePhonePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
35
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ScFormatePhonePipe, isStandalone: true, name: "scFormatePhone" }); }
|
36
|
-
}
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScFormatePhonePipe, decorators: [{
|
38
|
-
type: Pipe,
|
39
|
-
args: [{
|
40
|
-
standalone: true,
|
41
|
-
name: 'scFormatePhone',
|
42
|
-
}]
|
43
|
-
}] });
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZm9ybWF0dGVkLXBob25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3BpcGVzL3NjLWZvcm1hdHRlZC1waG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUV4RDs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0I7Ozs7Ozs7T0FPRztJQUNJLFNBQVMsQ0FBQyxLQUFhLEVBQUUsU0FBK0MsUUFBUTtRQUNuRixJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHdDQUF3QztZQUN4QyxRQUFRLE1BQU0sRUFBRSxDQUFDO2dCQUNiLEtBQUssUUFBUTtvQkFDVCxPQUFPLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkQsS0FBSyxPQUFPO29CQUNSLE9BQU8sY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLGVBQWU7b0JBQ2hCLE9BQU8sSUFBSSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsb0RBQW9EO0lBQ3RFLENBQUM7K0dBdkJRLGtCQUFrQjs2R0FBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUo5QixJQUFJO21CQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsZ0JBQWdCO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjUGhvbmVTZXJ2aWNlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5cbi8qKlxuICog0J/QsNC50L8g0LTQu9GPINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC40Y8g0L3QvtC80LXRgNCwINGC0LXQu9C10YTQvtC90LAuXG4gKlxuICog0JXRgdC70Lgg0L/QtdGA0LXQtNCw0L3QvdGL0Lkg0L3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwINCy0LDQu9C40LTQtdC9LCDQvtC9INCx0YPQtNC10YIg0L7RgtGE0L7RgNC80LDRgtC40YDQvtCy0LDQvSDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8INC80LXRgtC+0LTQsCBgZm9ybWF0UGhvbmVOdW1iZXJgINGB0LXRgNCy0LjRgdCwIGBTY1Bob25lU2VydmljZWAuXG4gKiDQldGB0LvQuCDQvdC+0LzQtdGAINC90LXQstCw0LvQuNC00LXQvSwg0LLQvtC30LLRgNCw0YnQsNC10YLRgdGPINC40YHRhdC+0LTQvdC+0LUg0LfQvdCw0YfQtdC90LjQtS5cbiAqL1xuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3NjRm9ybWF0ZVBob25lJyxcbn0pXG5leHBvcnQgY2xhc3MgU2NGb3JtYXRlUGhvbmVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqXG4gICAgICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRgdGC0YDQvtC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQvdC+0LzQtdGA0LAg0YLQtdC70LXRhNC+0L3QsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSDQodGC0YDQvtC60LAsINGB0L7QtNC10YDQttCw0YnQsNGPINC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsC5cbiAgICAgKiBAcGFyYW0gZm9ybWF0INCk0L7RgNC80LDRgiDQstC+0LfQstGA0LDRidCw0LXQvNC+0LPQviDQt9C90LDRh9C10L3QuNGPLiBgbm9ybWFsYCAtINGD0LTQvtCx0L7Rh9C40YLQsNC10LzQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC90L7QvNC10YDQsCDRgtC10LvQtdGE0L7QvdCwLCBgY2xlYW5gIC0g0L7Rh9C40YnQtdC90L3QvtC1INC+0YIg0LvQuNGI0L3QuNGFINGB0LjQvNCy0L7Qu9C+0LIg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0L3QvtC80LXRgNCwINGC0LXQu9C10YTQvtC90LAsIGBjbGVhbldpdGhQbHVzYCAtINC+0YfQuNGJ0LXQvdC90L7QtSDQvtGCINC70LjRiNC90LjRhSDRgdC40LzQstC+0LvQvtCyINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1INC90L7QvNC10YDQsCDRgtC10LvQtdGE0L7QvdCwINGBIGArYCDQsiDQvdCw0YfQsNC70LUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyDQntGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3Ri9C5INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCwg0LXRgdC70Lgg0L7QvSDQstCw0LvQuNC00LXQvSwg0LjQu9C4INC40YHRhdC+0LTQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0LXRgdC70Lgg0L7QvSDQvdC10LLQsNC70LjQtNC10L0uXG4gICAgICovXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2NsZWFuJyB8ICdjbGVhbldpdGhQbHVzJyA9ICdub3JtYWwnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKFNjUGhvbmVTZXJ2aWNlLmlzVmFsaWRQaG9uZU51bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjUGhvbmVTZXJ2aWNlLmZvcm1hdFBob25lTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY1Bob25lU2VydmljZS5jbGVhblBob25lTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhbldpdGhQbHVzJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGArJHtTY1Bob25lU2VydmljZS5jbGVhblBob25lTnVtYmVyKHZhbHVlKX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyDQktC+0LfQstGA0LDRidCw0LXQvCDQvtGA0LjQs9C40L3QsNC70YzQvdGL0Lkg0L3QvtC80LXRgCwg0LXRgdC70Lgg0L7QvSDQvdC10LLQsNC70LjQtNC10L0uXG4gICAgfVxufVxuIl19
|
@@ -1,117 +0,0 @@
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
2
|
-
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
3
|
-
import { ScFeedbackService, ScISuggestionType, ScUserService } from '@snabcentr/client-core';
|
4
|
-
import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
|
5
|
-
import { catchError, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "@angular/common";
|
8
|
-
import * as i2 from "@angular/forms";
|
9
|
-
import * as i3 from "@taiga-ui/core";
|
10
|
-
import * as i4 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
|
11
|
-
import * as i5 from "@taiga-ui/legacy";
|
12
|
-
import * as i6 from "@taiga-ui/cdk";
|
13
|
-
import * as i7 from "@taiga-ui/kit";
|
14
|
-
import * as i8 from "ng-recaptcha-2";
|
15
|
-
/**
|
16
|
-
* Компонент формы запроса бесплатного образца.
|
17
|
-
*/
|
18
|
-
export class ScAskToSampleFormComponent {
|
19
|
-
constructor() {
|
20
|
-
/**
|
21
|
-
* Сервис обратной связи.
|
22
|
-
*/
|
23
|
-
this.feedbackService = inject(ScFeedbackService);
|
24
|
-
/**
|
25
|
-
* Сервис данных о пользователе.
|
26
|
-
*/
|
27
|
-
this.user$ = inject(ScUserService)
|
28
|
-
.getUserChange$()
|
29
|
-
.pipe(tap((user) => {
|
30
|
-
if (user.isGuest) {
|
31
|
-
this.form.addControl('recaptcha', this.recaptchaControl);
|
32
|
-
this.form.controls.email.reset();
|
33
|
-
this.form.controls.name.reset();
|
34
|
-
this.form.controls.phone.reset();
|
35
|
-
}
|
36
|
-
else {
|
37
|
-
this.form.removeControl('recaptcha');
|
38
|
-
this.form.patchValue({
|
39
|
-
name: user.name,
|
40
|
-
phone: user.contacts.phone.value,
|
41
|
-
email: user.contacts.email.value,
|
42
|
-
});
|
43
|
-
}
|
44
|
-
}));
|
45
|
-
/**
|
46
|
-
* Контекст диалогового окна, в котором открыт компонент.
|
47
|
-
*/
|
48
|
-
this.context = inject(POLYMORPHEUS_CONTEXT, {
|
49
|
-
optional: true,
|
50
|
-
});
|
51
|
-
/**
|
52
|
-
* Поле ввода для recaptcha.
|
53
|
-
*/
|
54
|
-
this.recaptchaControl = new FormControl(null, Validators.required);
|
55
|
-
/**
|
56
|
-
* Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
|
57
|
-
*/
|
58
|
-
this.form = new FormGroup({
|
59
|
-
name: new FormControl(null, [Validators.required, Validators.minLength(3)]),
|
60
|
-
phone: new FormControl(null, [Validators.required, Validators.minLength(12)]),
|
61
|
-
email: new FormControl(null, [Validators.required, Validators.email]),
|
62
|
-
recaptcha: new FormControl(null, Validators.required),
|
63
|
-
});
|
64
|
-
/**
|
65
|
-
* Перечисление типов подсказок.
|
66
|
-
*/
|
67
|
-
this.suggestionType = ScISuggestionType;
|
68
|
-
/**
|
69
|
-
* {@link Subject} события отправки формы.
|
70
|
-
*/
|
71
|
-
this.onSubmit = new Subject();
|
72
|
-
/**
|
73
|
-
* {@link Observable} запроса на отправку данных.
|
74
|
-
*/
|
75
|
-
this.request$ = this.onSubmit.pipe(filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.feedbackService.sendFeedback('samples', value).pipe(tap(() => {
|
76
|
-
if (this.context) {
|
77
|
-
this.context.completeWith();
|
78
|
-
}
|
79
|
-
else {
|
80
|
-
this.form.controls.email.reset();
|
81
|
-
this.form.controls.name.reset();
|
82
|
-
this.form.controls.phone.reset();
|
83
|
-
}
|
84
|
-
}),
|
85
|
-
// eslint-disable-next-line rxjs/no-implicit-any-catch
|
86
|
-
catchError((error) => {
|
87
|
-
this.form.markAllAsTouched();
|
88
|
-
const { errors, message } = error.error;
|
89
|
-
if (errors) {
|
90
|
-
Object.keys(errors).forEach((key) => {
|
91
|
-
const control = this.form.get(key);
|
92
|
-
if (control) {
|
93
|
-
// eslint-disable-next-line security/detect-object-injection
|
94
|
-
control.setErrors({ serverResponse: errors[key] });
|
95
|
-
}
|
96
|
-
});
|
97
|
-
}
|
98
|
-
else if (message) {
|
99
|
-
this.form.setErrors({ serverResponse: [message] });
|
100
|
-
}
|
101
|
-
return of(null);
|
102
|
-
}),
|
103
|
-
// eslint-disable-next-line unicorn/no-useless-undefined
|
104
|
-
startWith(undefined))), share());
|
105
|
-
/**
|
106
|
-
* {@link Observable} изменения состояния загрузки данных.
|
107
|
-
*/
|
108
|
-
this.loading$ = this.request$.pipe(map((value) => value === undefined));
|
109
|
-
}
|
110
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScAskToSampleFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
111
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScAskToSampleFormComponent, selector: "sc-ask-to-sample-form", ngImport: i0, template: "<form\n *tuiLet=\"user$ | async\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <label tuiLabel\n >\u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0418\u0432\u0430\u043D\u043E\u0432 \u0418\u0432\u0430\u043D \u0418\u0432\u0430\u043D\u043E\u0432\u0438\u0447 </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >\u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel\n class=\"w-full\"\n >\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n *ngIf=\"form.get('recaptcha')\"\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\"></re-captcha>\n </div>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C\n </button>\n</form>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i4.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i5.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i5.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i5.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["phoneMaskAfterCountryCode", "allowText", "search", "countryCode"], outputs: ["searchChange"] }, { kind: "directive", type: i5.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "directive", type: i6.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: i3.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i7.TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: i3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: i8.RecaptchaValueAccessorDirective, selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]" }, { kind: "component", type: i8.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
112
|
-
}
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScAskToSampleFormComponent, decorators: [{
|
114
|
-
type: Component,
|
115
|
-
args: [{ selector: 'sc-ask-to-sample-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n *tuiLet=\"user$ | async\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <label tuiLabel\n >\u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0418\u0432\u0430\u043D\u043E\u0432 \u0418\u0432\u0430\u043D \u0418\u0432\u0430\u043D\u043E\u0432\u0438\u0447 </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >\u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel\n class=\"w-full\"\n >\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n *ngIf=\"form.get('recaptcha')\"\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\"></re-captcha>\n </div>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C\n </button>\n</form>\n" }]
|
116
|
-
}] });
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXNrLXRvLXNhbXBsZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL2Fzay10by1zYW1wbGUtZm9ybS9zYy1hc2stdG8tc2FtcGxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NhbXBsZXMvYXNrLXRvLXNhbXBsZS1mb3JtL3NjLWFzay10by1zYW1wbGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQUkxRzs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFMdkM7UUFNSTs7V0FFRztRQUNjLG9CQUFlLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhGOztXQUVHO1FBQ2EsVUFBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDeEMsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLE9B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LENBQUM7S0FDM0c7K0dBOUdZLDBCQUEwQjttR0FBMUIsMEJBQTBCLDZEQ3BCdkMsaWxFQXdEQTs7NEZEcENhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBRWhCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QsbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kICovXG5cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2NGZWVkYmFja1NlcnZpY2UsIFNjSUZlZWRiYWNrTWVzc2FnZSwgU2NJU3VnZ2VzdGlvblR5cGUsIFNjVXNlclNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vYXV0aCc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGE0L7RgNC80Ysg0LfQsNC/0YDQvtGB0LAg0LHQtdGB0L/Qu9Cw0YLQvdC+0LPQviDQvtCx0YDQsNC30YbQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1hc2stdG8tc2FtcGxlLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hc2stdG8tc2FtcGxlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0Fza1RvU2FtcGxlRm9ybUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC+0LHRgNCw0YLQvdC+0Lkg0YHQstGP0LfQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGZlZWRiYWNrU2VydmljZTogU2NGZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoU2NGZWVkYmFja1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LDQvdC90YvRhSDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXIkID0gaW5qZWN0KFNjVXNlclNlcnZpY2UpXG4gICAgICAgIC5nZXRVc2VyQ2hhbmdlJCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKCh1c2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNHdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5mb3JtIGFzIEZvcm1Hcm91cCkuYWRkQ29udHJvbCgncmVjYXB0Y2hhJywgdGhpcy5yZWNhcHRjaGFDb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmVtYWlsLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5uYW1lLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdyZWNhcHRjaGEnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHVzZXIuY29udGFjdHMucGhvbmUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogdXNlci5jb250YWN0cy5lbWFpbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3Q8VHVpRGlhbG9nQ29udGV4dD4oUE9MWU1PUlBIRVVTX0NPTlRFWFQsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINC00LvRjyByZWNhcHRjaGEuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlY2FwdGNoYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQstCy0L7QtNCwINC00LvRjyDRhNC+0YDQvNGLIMKr0J/QvtC20LXQu9Cw0L3QuNGPINC4INC/0YDQtdC00LvQvtC20LXQvdC40Y8g0L/QviDRg9C70YPRh9GI0LXQvdC40Y4g0YHQsNC50YLQsMK7LlxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyldKSxcbiAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSxcbiAgICAgICAgcmVjYXB0Y2hhOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC+0YLQv9GA0LDQstC60YMg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTx1bmRlZmluZWQgfCBudWxsPiA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJRmVlZGJhY2tNZXNzYWdlKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZmVlZGJhY2tTZXJ2aWNlLnNlbmRGZWVkYmFjaygnc2FtcGxlcycsIHZhbHVlKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5lbWFpbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8taW1wbGljaXQtYW55LWNhdGNoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IGVycm9yLmVycm9yIGFzIEFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuZGVmaW5lZCkpO1xufVxuIiwiPGZvcm1cbiAgICAqdHVpTGV0PVwidXNlciQgfCBhc3luY1wiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcbj5cbiAgICA8bGFiZWwgdHVpTGFiZWxcbiAgICAgICAgPtCk0JjQnlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj4g0JjQstCw0L3QvtCyINCY0LLQsNC9INCY0LLQsNC90L7QstC40YcgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgIDwvbGFiZWw+XG4gICAgPGxhYmVsIHR1aUxhYmVsXG4gICAgICAgID7QotC10LvQtdGE0L7QvVxuICAgICAgICA8dHVpLWlucHV0LXBob25lIGZvcm1Db250cm9sTmFtZT1cInBob25lXCI+INCi0LXQu9C10YTQvtC9IDwvdHVpLWlucHV0LXBob25lPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgPC9sYWJlbD5cbiAgICA8bGFiZWxcbiAgICAgICAgdHVpTGFiZWxcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICA+0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgID48L3R1aS1lcnJvcj5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgncmVjYXB0Y2hhJylcIlxuICAgICAgICBjbGFzcz1cIm1iLTMgbWF4LWgtMjAgb3ZlcmZsb3ctaGlkZGVuIGR1cmF0aW9uLTUwMFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJyFtYXgtaC0wICEtbS0yJzogZm9ybS5nZXQoJ3JlY2FwdGNoYScpPy52YWxpZCB9XCJcbiAgICA+XG4gICAgICAgIDxyZS1jYXB0Y2hhIGZvcm1Db250cm9sTmFtZT1cInJlY2FwdGNoYVwiPjwvcmUtY2FwdGNoYT5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR1aUJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zYy5zZW5kXCJcbiAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgPlxuICAgICAgICDQntGB0YLQsNCy0LjRgtGMXG4gICAgPC9idXR0b24+XG48L2Zvcm0+XG4iXX0=
|
@@ -1,52 +0,0 @@
|
|
1
|
-
import { FormControl, FormGroup } from '@angular/forms';
|
2
|
-
import { ScISuggestionType } from '@snabcentr/client-core';
|
3
|
-
import { Observable, Subject } from 'rxjs';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
/**
|
6
|
-
* Компонент формы запроса бесплатного образца.
|
7
|
-
*/
|
8
|
-
export declare class ScAskToSampleFormComponent {
|
9
|
-
/**
|
10
|
-
* Сервис обратной связи.
|
11
|
-
*/
|
12
|
-
private readonly feedbackService;
|
13
|
-
/**
|
14
|
-
* Сервис данных о пользователе.
|
15
|
-
*/
|
16
|
-
readonly user$: Observable<import("@snabcentr/client-core").ScUser>;
|
17
|
-
/**
|
18
|
-
* Контекст диалогового окна, в котором открыт компонент.
|
19
|
-
*/
|
20
|
-
private readonly context;
|
21
|
-
/**
|
22
|
-
* Поле ввода для recaptcha.
|
23
|
-
*/
|
24
|
-
readonly recaptchaControl: FormControl<string | null>;
|
25
|
-
/**
|
26
|
-
* Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
|
27
|
-
*/
|
28
|
-
form: FormGroup<{
|
29
|
-
name: FormControl<string | null>;
|
30
|
-
phone: FormControl<string | null>;
|
31
|
-
email: FormControl<string | null>;
|
32
|
-
recaptcha: FormControl<null>;
|
33
|
-
}>;
|
34
|
-
/**
|
35
|
-
* Перечисление типов подсказок.
|
36
|
-
*/
|
37
|
-
readonly suggestionType: typeof ScISuggestionType;
|
38
|
-
/**
|
39
|
-
* {@link Subject} события отправки формы.
|
40
|
-
*/
|
41
|
-
readonly onSubmit: Subject<void>;
|
42
|
-
/**
|
43
|
-
* {@link Observable} запроса на отправку данных.
|
44
|
-
*/
|
45
|
-
readonly request$: Observable<undefined | null>;
|
46
|
-
/**
|
47
|
-
* {@link Observable} изменения состояния загрузки данных.
|
48
|
-
*/
|
49
|
-
readonly loading$: Observable<boolean>;
|
50
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ScAskToSampleFormComponent, never>;
|
51
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScAskToSampleFormComponent, "sc-ask-to-sample-form", never, {}, {}, never, never, false, never>;
|
52
|
-
}
|