@pega/angular-sdk-overrides 24.2.12 → 25.1.10
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/lib/designSystemExtension/alert/alert.component.scss +3 -3
- package/lib/designSystemExtension/alert/alert.component.ts +0 -1
- package/lib/designSystemExtension/alert-banner/alert-banner.component.ts +0 -1
- package/lib/designSystemExtension/banner/banner.component.html +1 -1
- package/lib/designSystemExtension/banner/banner.component.scss +17 -3
- package/lib/designSystemExtension/banner/banner.component.ts +0 -1
- package/lib/designSystemExtension/case-create-stage/case-create-stage.component.ts +0 -1
- package/lib/designSystemExtension/field-group/field-group.component.ts +0 -1
- package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
- package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +5 -34
- package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +0 -1
- package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
- package/lib/designSystemExtension/material-details/material-details.component.ts +0 -1
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +2 -2
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +0 -1
- package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +4 -17
- package/lib/designSystemExtension/material-summary-item/material-summary-item.component.ts +0 -1
- package/lib/designSystemExtension/material-summary-list/material-summary-list.component.ts +0 -1
- package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
- package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
- package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +0 -1
- package/lib/designSystemExtension/operator/operator.component.html +1 -1
- package/lib/designSystemExtension/operator/operator.component.scss +3 -10
- package/lib/designSystemExtension/operator/operator.component.ts +0 -2
- package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
- package/lib/designSystemExtension/pulse/pulse.component.ts +0 -1
- package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.html +4 -17
- package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
- package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +30 -1
- package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -9
- package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +0 -1
- package/lib/field/auto-complete/auto-complete.component.html +0 -1
- package/lib/field/auto-complete/auto-complete.component.ts +35 -173
- package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
- package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
- package/lib/field/cancel-alert/cancel-alert.component.ts +24 -37
- package/lib/field/check-box/check-box.component.html +14 -7
- package/lib/field/check-box/check-box.component.scss +0 -1
- package/lib/field/check-box/check-box.component.ts +25 -151
- package/lib/field/currency/currency.component.ts +36 -169
- package/lib/field/date/date.component.html +2 -2
- package/lib/field/date/date.component.ts +30 -151
- package/lib/field/date-time/date-time.component.html +1 -1
- package/lib/field/date-time/date-time.component.ts +34 -149
- package/lib/field/decimal/decimal.component.ts +38 -164
- package/lib/field/dropdown/dropdown.component.ts +29 -152
- package/lib/field/email/email.component.ts +16 -156
- package/lib/field/field.base.ts +149 -0
- package/lib/field/group/group.component.ts +7 -5
- package/lib/field/integer/integer.component.ts +18 -158
- package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +0 -1
- package/lib/field/location/config-ext.json +8 -0
- package/lib/field/location/location.component.html +45 -0
- package/lib/field/location/location.component.scss +18 -0
- package/lib/field/location/location.component.spec.ts +22 -0
- package/lib/field/location/location.component.ts +280 -0
- package/lib/field/multiselect/multiselect.component.ts +47 -152
- package/lib/field/multiselect/utils.ts +55 -47
- package/lib/field/object-reference/object-reference.component.html +17 -0
- package/lib/field/object-reference/object-reference.component.scss +0 -0
- package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
- package/lib/field/object-reference/object-reference.component.ts +237 -0
- package/lib/field/percentage/percentage.component.ts +37 -155
- package/lib/field/phone/phone.component.html +18 -19
- package/lib/field/phone/phone.component.scss +4 -0
- package/lib/field/phone/phone.component.ts +43 -145
- package/lib/field/radio-buttons/radio-buttons.component.html +14 -6
- package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
- package/lib/field/radio-buttons/radio-buttons.component.ts +37 -160
- package/lib/field/rich-text/rich-text.component.html +2 -0
- package/lib/field/rich-text/rich-text.component.scss +172 -0
- package/lib/field/rich-text/rich-text.component.ts +21 -91
- package/lib/field/scalar-list/scalar-list.component.ts +17 -73
- package/lib/field/selectable-card/selectable-card.component.html +70 -0
- package/lib/field/selectable-card/selectable-card.component.scss +11 -0
- package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
- package/lib/field/selectable-card/selectable-card.component.ts +219 -0
- package/lib/field/semantic-link/semantic-link.component.html +4 -8
- package/lib/field/semantic-link/semantic-link.component.scss +0 -13
- package/lib/field/semantic-link/semantic-link.component.ts +165 -6
- package/lib/field/text/text.component.scss +0 -1
- package/lib/field/text/text.component.ts +0 -1
- package/lib/field/text-area/text-area.component.ts +18 -153
- package/lib/field/text-content/text-content.component.ts +0 -1
- package/lib/field/text-input/text-input.component.ts +16 -156
- package/lib/field/time/time.component.ts +17 -152
- package/lib/field/url/url.component.ts +16 -155
- package/lib/field/user-reference/user-reference.component.scss +0 -1
- package/lib/field/user-reference/user-reference.component.ts +2 -4
- package/lib/infra/Containers/flow-container/flow-container.component.html +2 -2
- package/lib/infra/Containers/flow-container/flow-container.component.ts +8 -9
- package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
- package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -11
- package/lib/infra/Containers/view-container/helper.ts +35 -2
- package/lib/infra/Containers/view-container/view-container.component.ts +1 -2
- package/lib/infra/action-buttons/action-buttons.component.html +13 -8
- package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
- package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
- package/lib/infra/assignment/assignment.component.ts +21 -10
- package/lib/infra/assignment-card/assignment-card.component.html +1 -2
- package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
- package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
- package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
- package/lib/infra/defer-load/defer-load.component.html +6 -2
- package/lib/infra/defer-load/defer-load.component.ts +22 -12
- package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
- package/lib/infra/multi-step/multi-step.component.html +22 -38
- package/lib/infra/multi-step/multi-step.component.scss +14 -27
- package/lib/infra/multi-step/multi-step.component.ts +0 -1
- package/lib/infra/navbar/navbar.component.html +36 -41
- package/lib/infra/navbar/navbar.component.scss +22 -4
- package/lib/infra/navbar/navbar.component.ts +8 -4
- package/lib/infra/reference/reference.component.ts +5 -0
- package/lib/infra/region/region.component.ts +0 -1
- package/lib/infra/root-container/root-container.component.scss +0 -1
- package/lib/infra/root-container/root-container.component.ts +1 -5
- package/lib/infra/stages/stages.component.html +4 -3
- package/lib/infra/stages/stages.component.scss +12 -36
- package/lib/infra/stages/stages.component.ts +4 -3
- package/lib/infra/view/view.component.html +1 -1
- package/lib/infra/view/view.component.ts +3 -7
- package/lib/template/advanced-search/advanced-search.component.html +12 -0
- package/lib/template/advanced-search/advanced-search.component.scss +0 -0
- package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
- package/lib/template/advanced-search/advanced-search.component.ts +112 -0
- package/lib/template/advanced-search/advanced-search.service.ts +27 -0
- package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
- package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
- package/lib/template/advanced-search/search-groups/utils.ts +29 -0
- package/lib/template/app-shell/app-shell.component.html +4 -1
- package/lib/template/app-shell/app-shell.component.scss +0 -3
- package/lib/template/app-shell/app-shell.component.ts +46 -8
- package/lib/template/banner-page/banner-page.component.ts +0 -1
- package/lib/template/case-summary/case-summary.component.scss +0 -2
- package/lib/template/case-summary/case-summary.component.ts +6 -22
- package/lib/template/case-view/case-view.component.html +4 -4
- package/lib/template/case-view/case-view.component.scss +18 -10
- package/lib/template/case-view/case-view.component.ts +1 -11
- package/lib/template/confirmation/confirmation.component.html +1 -1
- package/lib/template/confirmation/confirmation.component.ts +0 -1
- package/lib/template/data-reference/data-reference.component.html +11 -8
- package/lib/template/data-reference/data-reference.component.ts +346 -113
- package/lib/template/data-reference/search-form/search-form.component.html +39 -0
- package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
- package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
- package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
- package/lib/template/data-reference/search-form/tabsData.ts +160 -0
- package/lib/template/data-reference/utils.ts +92 -0
- package/lib/template/default-form/default-form.component.ts +10 -3
- package/lib/template/default-page/default-page.component.html +34 -0
- package/lib/template/default-page/default-page.component.scss +31 -0
- package/lib/template/default-page/default-page.component.spec.ts +24 -0
- package/lib/template/default-page/default-page.component.ts +64 -0
- package/lib/template/details/details.component.ts +0 -1
- package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +0 -1
- package/lib/template/details-one-column/details-one-column.component.ts +0 -1
- package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +0 -1
- package/lib/template/details-three-column/details-three-column.component.ts +0 -1
- package/lib/template/details-two-column/details-two-column.component.ts +0 -1
- package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +0 -1
- package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +0 -1
- package/lib/template/field-group-list/field-group-list.component.scss +0 -1
- package/lib/template/field-group-list/field-group-list.component.ts +0 -1
- package/lib/template/field-group-template/field-group-template.component.ts +14 -28
- package/lib/template/field-value-list/field-value-list.component.ts +0 -1
- package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
- package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +1 -2
- package/lib/template/list-page/list-page.component.ts +0 -1
- package/lib/template/list-view/list-view.component.html +170 -162
- package/lib/template/list-view/list-view.component.scss +25 -21
- package/lib/template/list-view/list-view.component.ts +207 -119
- package/lib/template/list-view/listViewHelpers.ts +1 -4
- package/lib/template/list-view/utils.ts +25 -2
- package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
- package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +0 -1
- package/lib/template/object-page/object-page.component.html +1 -0
- package/lib/template/object-page/object-page.component.scss +0 -0
- package/lib/template/object-page/object-page.component.spec.ts +22 -0
- package/lib/template/object-page/object-page.component.ts +14 -0
- package/lib/template/one-column/one-column.component.ts +0 -1
- package/lib/template/one-column-page/one-column-page.component.ts +0 -1
- package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
- package/lib/template/one-column-tab/one-column-tab.component.ts +0 -1
- package/lib/template/page/page.component.ts +0 -1
- package/lib/template/promoted-filters/promoted-filters.component.ts +0 -1
- package/lib/template/repeating-structures/repeating-structures.component.ts +0 -2
- package/lib/template/self-service-case-view/self-service-case-view.component.html +78 -0
- package/lib/template/self-service-case-view/self-service-case-view.component.scss +132 -0
- package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
- package/lib/template/self-service-case-view/self-service-case-view.component.ts +207 -0
- package/lib/template/simple-table/simple-table.component.ts +0 -2
- package/lib/template/simple-table-manual/helpers.ts +117 -3
- package/lib/template/simple-table-manual/simple-table-manual.component.html +4 -4
- package/lib/template/simple-table-manual/simple-table-manual.component.scss +4 -14
- package/lib/template/simple-table-manual/simple-table-manual.component.ts +45 -25
- package/lib/template/simple-table-select/simple-table-select.component.ts +0 -1
- package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
- package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
- package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
- package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
- package/lib/template/three-column/three-column.component.ts +0 -1
- package/lib/template/three-column-page/three-column-page.component.ts +0 -1
- package/lib/template/two-column/two-column.component.ts +0 -1
- package/lib/template/two-column-page/two-column-page.component.ts +0 -1
- package/lib/template/two-column-tab/two-column-tab.component.ts +0 -1
- package/lib/template/utils.ts +42 -0
- package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +0 -1
- package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +0 -1
- package/lib/template/wss-nav-bar/wss-nav-bar.component.html +6 -5
- package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +8 -17
- package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +1 -9
- package/lib/widget/app-announcement/app-announcement.component.html +1 -2
- package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
- package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
- package/lib/widget/attachment/Attachment.types.ts +92 -0
- package/lib/widget/attachment/AttachmentUtils.ts +287 -0
- package/lib/widget/attachment/attachment.component.html +3 -3
- package/lib/widget/attachment/attachment.component.scss +9 -12
- package/lib/widget/attachment/attachment.component.ts +267 -254
- package/lib/widget/case-history/case-history.component.ts +0 -1
- package/lib/widget/feed-container/feed-container.component.scss +3 -9
- package/lib/widget/feed-container/feed-container.component.ts +2 -3
- package/lib/widget/file-utility/file-utility.component.html +3 -3
- package/lib/widget/file-utility/file-utility.component.scss +6 -17
- package/lib/widget/file-utility/file-utility.component.ts +24 -9
- package/lib/widget/list-utility/list-utility.component.scss +4 -5
- package/lib/widget/list-utility/list-utility.component.ts +0 -1
- package/lib/widget/quick-create/quick-create.component.ts +41 -23
- package/lib/widget/todo/todo.component.html +8 -5
- package/lib/widget/todo/todo.component.scss +11 -10
- package/lib/widget/todo/todo.component.ts +7 -4
- package/lib/widget/utility/utility.component.ts +0 -1
- package/package.json +1 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { Component, OnInit,
|
|
1
|
+
import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatInputModule } from '@angular/material/input';
|
|
5
5
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import { Utils } from '@pega/angular-sdk-components';
|
|
6
|
+
|
|
7
|
+
import { FieldBase } from '@pega/angular-sdk-components';
|
|
9
8
|
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
|
|
10
|
-
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
11
9
|
import { handleEvent } from '@pega/angular-sdk-components';
|
|
10
|
+
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
12
11
|
|
|
13
12
|
interface EmailProps extends PConnFieldProps {
|
|
14
13
|
// If any, enter additional props that only exist on Email here
|
|
@@ -18,144 +17,24 @@ interface EmailProps extends PConnFieldProps {
|
|
|
18
17
|
selector: 'app-email',
|
|
19
18
|
templateUrl: './email.component.html',
|
|
20
19
|
styleUrls: ['./email.component.scss'],
|
|
21
|
-
standalone: true,
|
|
22
20
|
imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
|
|
23
21
|
})
|
|
24
|
-
export class EmailComponent implements OnInit, OnDestroy {
|
|
25
|
-
@Input() pConn$: typeof PConnect;
|
|
26
|
-
@Input() formGroup$: FormGroup;
|
|
27
|
-
|
|
28
|
-
// Used with AngularPConnect
|
|
29
|
-
angularPConnectData: AngularPConnectData = {};
|
|
22
|
+
export class EmailComponent extends FieldBase implements OnInit, OnDestroy {
|
|
30
23
|
configProps$: EmailProps;
|
|
31
24
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
bVisible$ = true;
|
|
38
|
-
displayMode$?: string = '';
|
|
39
|
-
controlName$: string;
|
|
40
|
-
bHasForm$ = true;
|
|
41
|
-
componentReference = '';
|
|
42
|
-
testId: string;
|
|
43
|
-
helperText: string;
|
|
44
|
-
placeholder: string;
|
|
45
|
-
|
|
46
|
-
fieldControl = new FormControl('', null);
|
|
47
|
-
actionsApi: Object;
|
|
48
|
-
propName: string;
|
|
49
|
-
|
|
50
|
-
constructor(
|
|
51
|
-
private angularPConnect: AngularPConnectService,
|
|
52
|
-
private cdRef: ChangeDetectorRef,
|
|
53
|
-
private utils: Utils
|
|
54
|
-
) {}
|
|
55
|
-
|
|
56
|
-
ngOnInit(): void {
|
|
57
|
-
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
58
|
-
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
59
|
-
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
60
|
-
|
|
61
|
-
// Then, continue on with other initialization
|
|
62
|
-
|
|
63
|
-
// call updateSelf when initializing
|
|
64
|
-
// this.updateSelf();
|
|
65
|
-
this.checkAndUpdate();
|
|
66
|
-
|
|
67
|
-
if (this.formGroup$) {
|
|
68
|
-
// add control to formGroup
|
|
69
|
-
this.formGroup$.addControl(this.controlName$, this.fieldControl);
|
|
70
|
-
this.fieldControl.setValue(this.value$);
|
|
71
|
-
this.bHasForm$ = true;
|
|
72
|
-
} else {
|
|
73
|
-
this.bReadonly$ = true;
|
|
74
|
-
this.bHasForm$ = false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
ngOnDestroy(): void {
|
|
79
|
-
if (this.formGroup$) {
|
|
80
|
-
this.formGroup$.removeControl(this.controlName$);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (this.angularPConnectData.unsubscribeFn) {
|
|
84
|
-
this.angularPConnectData.unsubscribeFn();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Callback passed when subscribing to store change
|
|
89
|
-
onStateChange() {
|
|
90
|
-
this.checkAndUpdate();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
checkAndUpdate() {
|
|
94
|
-
// Should always check the bridge to see if the component should
|
|
95
|
-
// update itself (re-render)
|
|
96
|
-
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
97
|
-
|
|
98
|
-
// ONLY call updateSelf when the component should update
|
|
99
|
-
if (bUpdateSelf) {
|
|
100
|
-
this.updateSelf();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// updateSelf
|
|
105
|
-
updateSelf(): void {
|
|
106
|
-
// moved this from ngOnInit() and call this from there instead...
|
|
25
|
+
/**
|
|
26
|
+
* Updates the component when there are changes in the state.
|
|
27
|
+
*/
|
|
28
|
+
override updateSelf(): void {
|
|
29
|
+
// Resolve configuration properties
|
|
107
30
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as EmailProps;
|
|
108
|
-
this.testId = this.configProps$.testId;
|
|
109
|
-
this.label$ = this.configProps$.label;
|
|
110
|
-
this.displayMode$ = this.configProps$.displayMode;
|
|
111
31
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
this.helperText = this.configProps$.helperText;
|
|
116
|
-
this.placeholder = this.configProps$.placeholder || '';
|
|
117
|
-
|
|
118
|
-
// timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
119
|
-
setTimeout(() => {
|
|
120
|
-
if (this.configProps$.required != null) {
|
|
121
|
-
this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
|
|
122
|
-
}
|
|
123
|
-
this.cdRef.detectChanges();
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
if (this.configProps$.visibility != null) {
|
|
127
|
-
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// disabled
|
|
131
|
-
if (this.configProps$.disabled != undefined) {
|
|
132
|
-
this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (this.bDisabled$) {
|
|
136
|
-
this.fieldControl.disable();
|
|
137
|
-
} else {
|
|
138
|
-
this.fieldControl.enable();
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (this.configProps$.readOnly != null) {
|
|
142
|
-
this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
this.actionsApi = this.pConn$.getActionsApi();
|
|
146
|
-
this.propName = this.pConn$.getStateProps().value;
|
|
147
|
-
|
|
148
|
-
this.componentReference = this.pConn$.getStateProps().value;
|
|
32
|
+
// Update component common properties
|
|
33
|
+
this.updateComponentCommonProperties(this.configProps$);
|
|
149
34
|
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
this.fieldControl.setErrors({ message: true });
|
|
154
|
-
this.fieldControl.markAsTouched();
|
|
155
|
-
|
|
156
|
-
timer.unsubscribe();
|
|
157
|
-
});
|
|
158
|
-
}
|
|
35
|
+
// Set component specific properties
|
|
36
|
+
const { value } = this.configProps$;
|
|
37
|
+
this.value$ = value;
|
|
159
38
|
}
|
|
160
39
|
|
|
161
40
|
fieldOnChange(event: any) {
|
|
@@ -163,8 +42,6 @@ export class EmailComponent implements OnInit, OnDestroy {
|
|
|
163
42
|
const isValueChanged = event.target.value.toString() !== oldVal.toString();
|
|
164
43
|
|
|
165
44
|
if (isValueChanged) {
|
|
166
|
-
const value = event?.target?.value;
|
|
167
|
-
handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
|
|
168
45
|
this.pConn$.clearErrorMessages({
|
|
169
46
|
property: this.propName
|
|
170
47
|
});
|
|
@@ -180,21 +57,4 @@ export class EmailComponent implements OnInit, OnDestroy {
|
|
|
180
57
|
handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
|
|
181
58
|
}
|
|
182
59
|
}
|
|
183
|
-
|
|
184
|
-
getErrorMessage() {
|
|
185
|
-
let errMessage = '';
|
|
186
|
-
|
|
187
|
-
// look for validation messages for json, pre-defined or just an error pushed from workitem (400)
|
|
188
|
-
if (this.fieldControl.hasError('message')) {
|
|
189
|
-
errMessage = this.angularPConnectData.validateMessage ?? '';
|
|
190
|
-
return errMessage;
|
|
191
|
-
}
|
|
192
|
-
if (this.fieldControl.hasError('required')) {
|
|
193
|
-
errMessage = 'You must enter a value';
|
|
194
|
-
} else if (this.fieldControl.errors) {
|
|
195
|
-
errMessage = this.fieldControl.errors.toString();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return errMessage;
|
|
199
|
-
}
|
|
200
60
|
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Directive, inject, Input, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
|
|
4
|
+
import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
|
|
5
|
+
import { Utils } from '@pega/angular-sdk-components';
|
|
6
|
+
|
|
7
|
+
@Directive()
|
|
8
|
+
export class FieldBase implements OnInit, OnDestroy {
|
|
9
|
+
@Input() pConn$: typeof PConnect;
|
|
10
|
+
@Input() formGroup$: FormGroup;
|
|
11
|
+
|
|
12
|
+
protected angularPConnect = inject(AngularPConnectService);
|
|
13
|
+
protected utils = inject(Utils);
|
|
14
|
+
|
|
15
|
+
protected angularPConnectData: AngularPConnectData = {};
|
|
16
|
+
|
|
17
|
+
fieldControl: FormControl<any> = new FormControl('', null);
|
|
18
|
+
controlName$: string;
|
|
19
|
+
actionsApi: object;
|
|
20
|
+
propName: string;
|
|
21
|
+
|
|
22
|
+
bHasForm$ = true;
|
|
23
|
+
testId: string;
|
|
24
|
+
helperText: string;
|
|
25
|
+
placeholder: string;
|
|
26
|
+
value$: any = '';
|
|
27
|
+
label$ = '';
|
|
28
|
+
hideLabel = false;
|
|
29
|
+
bRequired$ = false;
|
|
30
|
+
bReadonly$ = false;
|
|
31
|
+
bDisabled$ = false;
|
|
32
|
+
bVisible$ = true;
|
|
33
|
+
displayMode$ = '';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Initializes the component, registers with AngularPConnect, and sets up form control.
|
|
37
|
+
*/
|
|
38
|
+
ngOnInit(): void {
|
|
39
|
+
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
40
|
+
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange.bind(this));
|
|
41
|
+
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
42
|
+
|
|
43
|
+
// call checkAndUpdate
|
|
44
|
+
this.checkAndUpdate();
|
|
45
|
+
|
|
46
|
+
if (this.formGroup$) {
|
|
47
|
+
this.formGroup$.addControl(this.controlName$, this.fieldControl);
|
|
48
|
+
this.fieldControl.setValue(this.value$);
|
|
49
|
+
this.bHasForm$ = true;
|
|
50
|
+
} else {
|
|
51
|
+
this.bReadonly$ = true;
|
|
52
|
+
this.bHasForm$ = false;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
this.actionsApi = this.pConn$.getActionsApi();
|
|
56
|
+
this.propName = this.pConn$.getStateProps().value;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Cleans up the component by removing it from the form group and unsubscribing from any observables.
|
|
61
|
+
*/
|
|
62
|
+
ngOnDestroy(): void {
|
|
63
|
+
if (this.formGroup$) {
|
|
64
|
+
this.formGroup$.removeControl(this.controlName$);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (this.angularPConnectData.unsubscribeFn) {
|
|
68
|
+
this.angularPConnectData.unsubscribeFn();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Callback passed when subscribing to store change
|
|
73
|
+
onStateChange() {
|
|
74
|
+
this.checkAndUpdate();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Should always check the bridge to see if the component should update itself (re-render)
|
|
78
|
+
checkAndUpdate() {
|
|
79
|
+
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
80
|
+
|
|
81
|
+
// ONLY call updateSelf when the component should update
|
|
82
|
+
if (bUpdateSelf) {
|
|
83
|
+
this.updateSelf();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// will be overriden by child components
|
|
88
|
+
updateSelf(): void {}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Updates the component's common properties based on the provided configuration.
|
|
92
|
+
*
|
|
93
|
+
* @param configProps The configuration properties to update.
|
|
94
|
+
*/
|
|
95
|
+
protected updateComponentCommonProperties(configProps) {
|
|
96
|
+
// Extract properties from config
|
|
97
|
+
const { testId, label, hideLabel, displayMode = '', helperText, placeholder, required, visibility = true, disabled, readOnly } = configProps;
|
|
98
|
+
|
|
99
|
+
// Update component properties
|
|
100
|
+
this.testId = testId;
|
|
101
|
+
this.label$ = label;
|
|
102
|
+
this.hideLabel = hideLabel;
|
|
103
|
+
this.displayMode$ = displayMode;
|
|
104
|
+
this.helperText = helperText;
|
|
105
|
+
this.placeholder = placeholder || '';
|
|
106
|
+
|
|
107
|
+
// Convert boolean properties
|
|
108
|
+
this.bVisible$ = this.utils.getBooleanValue(visibility);
|
|
109
|
+
this.bRequired$ = this.utils.getBooleanValue(required);
|
|
110
|
+
this.bDisabled$ = this.utils.getBooleanValue(disabled);
|
|
111
|
+
this.bReadonly$ = this.utils.getBooleanValue(readOnly);
|
|
112
|
+
|
|
113
|
+
// Enable or disable field control
|
|
114
|
+
this.fieldControl[this.bDisabled$ ? 'disable' : 'enable']();
|
|
115
|
+
|
|
116
|
+
// Display error message if validation message exists
|
|
117
|
+
this.displayValidationMessage();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Displays the validation message if it exists.
|
|
122
|
+
*/
|
|
123
|
+
private displayValidationMessage(): void {
|
|
124
|
+
if (this.angularPConnectData.validateMessage) {
|
|
125
|
+
setTimeout(() => {
|
|
126
|
+
this.fieldControl.setErrors({ message: true });
|
|
127
|
+
this.fieldControl.markAsTouched();
|
|
128
|
+
}, 100);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Retrieves the error message for the current field control.
|
|
134
|
+
*
|
|
135
|
+
* @returns The error message, or an empty string if no error is found.
|
|
136
|
+
*/
|
|
137
|
+
getErrorMessage() {
|
|
138
|
+
// look for validation messages for json, pre-defined or just an error pushed from workitem (400)
|
|
139
|
+
if (this.fieldControl.hasError('message')) {
|
|
140
|
+
return this.angularPConnectData.validateMessage ?? '';
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (this.fieldControl.hasError('required')) {
|
|
144
|
+
return 'You must enter a value';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return this.fieldControl.errors?.toString() ?? '';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -18,13 +18,16 @@ interface GroupProps extends PConnFieldProps {
|
|
|
18
18
|
selector: 'app-group',
|
|
19
19
|
templateUrl: './group.component.html',
|
|
20
20
|
styleUrls: ['./group.component.scss'],
|
|
21
|
-
standalone: true,
|
|
22
21
|
imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
|
|
23
22
|
})
|
|
24
23
|
export class GroupComponent implements OnInit {
|
|
25
24
|
@Input() pConn$: typeof PConnect;
|
|
26
25
|
@Input() formGroup$: FormGroup;
|
|
27
26
|
|
|
27
|
+
// Used with AngularPConnect
|
|
28
|
+
angularPConnectData: AngularPConnectData = {};
|
|
29
|
+
configProps$: GroupProps;
|
|
30
|
+
|
|
28
31
|
arChildren$: any[];
|
|
29
32
|
visibility$?: boolean;
|
|
30
33
|
showHeading$?: boolean;
|
|
@@ -32,10 +35,6 @@ export class GroupComponent implements OnInit {
|
|
|
32
35
|
instructions$: string;
|
|
33
36
|
collapsible$: boolean;
|
|
34
37
|
|
|
35
|
-
// Used with AngularPConnect
|
|
36
|
-
angularPConnectData: AngularPConnectData = {};
|
|
37
|
-
configProps$: GroupProps;
|
|
38
|
-
|
|
39
38
|
constructor(private angularPConnect: AngularPConnectService) {}
|
|
40
39
|
|
|
41
40
|
ngOnInit(): void {
|
|
@@ -60,6 +59,9 @@ export class GroupComponent implements OnInit {
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Updates the component when there are changes in the state.
|
|
64
|
+
*/
|
|
63
65
|
updateSelf(): void {
|
|
64
66
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as GroupProps;
|
|
65
67
|
this.arChildren$ = ReferenceComponent.normalizePConnArray(this.pConn$.getChildren());
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, forwardRef } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormControl,
|
|
3
|
+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatInputModule } from '@angular/material/input';
|
|
5
5
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
import { Utils } from '@pega/angular-sdk-components';
|
|
6
|
+
|
|
7
|
+
import { FieldBase } from '@pega/angular-sdk-components';
|
|
9
8
|
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
|
|
10
|
-
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
11
9
|
import { handleEvent } from '@pega/angular-sdk-components';
|
|
10
|
+
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
12
11
|
|
|
13
12
|
interface IntegerProps extends PConnFieldProps {
|
|
14
13
|
// If any, enter additional props that only exist on Integer here
|
|
@@ -18,146 +17,26 @@ interface IntegerProps extends PConnFieldProps {
|
|
|
18
17
|
selector: 'app-integer',
|
|
19
18
|
templateUrl: './integer.component.html',
|
|
20
19
|
styleUrls: ['./integer.component.scss'],
|
|
21
|
-
standalone: true,
|
|
22
20
|
imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)]
|
|
23
21
|
})
|
|
24
|
-
export class IntegerComponent
|
|
25
|
-
@Input() pConn$: typeof PConnect;
|
|
26
|
-
@Input() formGroup$: FormGroup;
|
|
27
|
-
|
|
28
|
-
// Used with AngularPConnect
|
|
29
|
-
angularPConnectData: AngularPConnectData = {};
|
|
22
|
+
export class IntegerComponent extends FieldBase {
|
|
30
23
|
configProps$: IntegerProps;
|
|
24
|
+
override fieldControl = new FormControl<number | null>(null, null);
|
|
31
25
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
bVisible$ = true;
|
|
38
|
-
displayMode$?: string = '';
|
|
39
|
-
controlName$: string;
|
|
40
|
-
bHasForm$ = true;
|
|
41
|
-
componentReference = '';
|
|
42
|
-
testId: string;
|
|
43
|
-
helperText: string;
|
|
44
|
-
placeholder: string;
|
|
45
|
-
|
|
46
|
-
fieldControl = new FormControl<number | null>(null, null);
|
|
47
|
-
actionsApi: Object;
|
|
48
|
-
propName: string;
|
|
49
|
-
|
|
50
|
-
constructor(
|
|
51
|
-
private angularPConnect: AngularPConnectService,
|
|
52
|
-
private cdRef: ChangeDetectorRef,
|
|
53
|
-
private utils: Utils
|
|
54
|
-
) {}
|
|
55
|
-
|
|
56
|
-
ngOnInit(): void {
|
|
57
|
-
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
58
|
-
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
59
|
-
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
60
|
-
|
|
61
|
-
// Then, continue on with other initialization
|
|
62
|
-
|
|
63
|
-
// call updateSelf when initializing
|
|
64
|
-
// this.updateSelf();
|
|
65
|
-
this.checkAndUpdate();
|
|
66
|
-
|
|
67
|
-
if (this.formGroup$) {
|
|
68
|
-
// add control to formGroup
|
|
69
|
-
this.formGroup$.addControl(this.controlName$, this.fieldControl);
|
|
70
|
-
this.fieldControl.setValue(this.value$);
|
|
71
|
-
this.bHasForm$ = true;
|
|
72
|
-
} else {
|
|
73
|
-
this.bReadonly$ = true;
|
|
74
|
-
this.bHasForm$ = false;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
ngOnDestroy(): void {
|
|
79
|
-
if (this.formGroup$) {
|
|
80
|
-
this.formGroup$.removeControl(this.controlName$);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (this.angularPConnectData.unsubscribeFn) {
|
|
84
|
-
this.angularPConnectData.unsubscribeFn();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Callback passed when subscribing to store change
|
|
89
|
-
onStateChange() {
|
|
90
|
-
this.checkAndUpdate();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
checkAndUpdate() {
|
|
94
|
-
// Should always check the bridge to see if the component should
|
|
95
|
-
// update itself (re-render)
|
|
96
|
-
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
97
|
-
|
|
98
|
-
// ONLY call updateSelf when the component should update
|
|
99
|
-
if (bUpdateSelf) {
|
|
100
|
-
this.updateSelf();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// updateSelf
|
|
105
|
-
updateSelf(): void {
|
|
106
|
-
// moved this from ngOnInit() and call this from there instead...
|
|
26
|
+
/**
|
|
27
|
+
* Updates the component when there are changes in the state.
|
|
28
|
+
*/
|
|
29
|
+
override updateSelf(): void {
|
|
30
|
+
// Resolve configuration properties
|
|
107
31
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as IntegerProps;
|
|
108
|
-
this.testId = this.configProps$.testId;
|
|
109
|
-
this.label$ = this.configProps$.label;
|
|
110
|
-
this.displayMode$ = this.configProps$.displayMode;
|
|
111
|
-
let nValue: any = this.configProps$.value;
|
|
112
|
-
if (nValue) {
|
|
113
|
-
if (typeof nValue === 'string') {
|
|
114
|
-
nValue = parseInt(nValue, 10);
|
|
115
|
-
}
|
|
116
|
-
this.value$ = nValue;
|
|
117
|
-
}
|
|
118
|
-
this.helperText = this.configProps$.helperText;
|
|
119
|
-
this.placeholder = this.configProps$.placeholder || '';
|
|
120
|
-
|
|
121
|
-
this.actionsApi = this.pConn$.getActionsApi();
|
|
122
|
-
this.propName = this.pConn$.getStateProps().value;
|
|
123
|
-
|
|
124
|
-
// timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
if (this.configProps$.required != null) {
|
|
127
|
-
this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
|
|
128
|
-
}
|
|
129
|
-
this.cdRef.detectChanges();
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
if (this.configProps$.visibility != null) {
|
|
133
|
-
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// disabled
|
|
137
|
-
if (this.configProps$.disabled != undefined) {
|
|
138
|
-
this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (this.bDisabled$) {
|
|
142
|
-
this.fieldControl.disable();
|
|
143
|
-
} else {
|
|
144
|
-
this.fieldControl.enable();
|
|
145
|
-
}
|
|
146
32
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
this.componentReference = this.pConn$.getStateProps().value;
|
|
152
|
-
|
|
153
|
-
// trigger display of error message with field control
|
|
154
|
-
if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
|
|
155
|
-
const timer = interval(100).subscribe(() => {
|
|
156
|
-
this.fieldControl.setErrors({ message: true });
|
|
157
|
-
this.fieldControl.markAsTouched();
|
|
33
|
+
// Update component common properties
|
|
34
|
+
this.updateComponentCommonProperties(this.configProps$);
|
|
158
35
|
|
|
159
|
-
|
|
160
|
-
|
|
36
|
+
// Extract and normalize the value property
|
|
37
|
+
const { value } = this.configProps$;
|
|
38
|
+
if (value) {
|
|
39
|
+
this.value$ = typeof value === 'string' ? parseInt(value, 10) : value;
|
|
161
40
|
}
|
|
162
41
|
}
|
|
163
42
|
|
|
@@ -181,23 +60,4 @@ export class IntegerComponent implements OnInit, OnDestroy {
|
|
|
181
60
|
handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
|
|
182
61
|
}
|
|
183
62
|
}
|
|
184
|
-
|
|
185
|
-
getErrorMessage() {
|
|
186
|
-
// field control gets error message from here
|
|
187
|
-
|
|
188
|
-
let errMessage = '';
|
|
189
|
-
|
|
190
|
-
// look for validation messages for json, pre-defined or just an error pushed from workitem (400)
|
|
191
|
-
if (this.fieldControl.hasError('message')) {
|
|
192
|
-
errMessage = this.angularPConnectData.validateMessage ?? '';
|
|
193
|
-
return errMessage;
|
|
194
|
-
}
|
|
195
|
-
if (this.fieldControl.hasError('required')) {
|
|
196
|
-
errMessage = 'You must enter a value';
|
|
197
|
-
} else if (this.fieldControl.errors) {
|
|
198
|
-
errMessage = this.fieldControl.errors.toString();
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return errMessage;
|
|
202
|
-
}
|
|
203
63
|
}
|
|
@@ -7,7 +7,6 @@ import { MatGridListModule } from '@angular/material/grid-list';
|
|
|
7
7
|
selector: 'app-list-view-action-buttons',
|
|
8
8
|
templateUrl: './list-view-action-buttons.component.html',
|
|
9
9
|
styleUrls: ['./list-view-action-buttons.component.scss'],
|
|
10
|
-
standalone: true,
|
|
11
10
|
imports: [CommonModule, MatGridListModule, MatButtonModule]
|
|
12
11
|
})
|
|
13
12
|
export class ListViewActionButtonsComponent {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<div *ngIf="mapReady && bVisible$">
|
|
2
|
+
<!-- Google suggestions -->
|
|
3
|
+
<mat-form-field class="psdk-full-width" [hintLabel]="helperText">
|
|
4
|
+
<mat-label>{{ label$ }}</mat-label>
|
|
5
|
+
<input
|
|
6
|
+
matInput
|
|
7
|
+
type="text"
|
|
8
|
+
[placeholder]="placeholder"
|
|
9
|
+
[formControl]="fieldControl"
|
|
10
|
+
[required]="bRequired$"
|
|
11
|
+
[matAutocomplete]="auto"
|
|
12
|
+
[attr.data-test-id]="testId"
|
|
13
|
+
(blur)="fieldOnBlur()"
|
|
14
|
+
/>
|
|
15
|
+
<mat-error *ngIf="fieldControl.invalid">{{ getErrorMessage() }}</mat-error>
|
|
16
|
+
<button
|
|
17
|
+
mat-icon-button
|
|
18
|
+
matSuffix
|
|
19
|
+
type="button"
|
|
20
|
+
(click)="locateMe()"
|
|
21
|
+
[disabled]="isLocating || bDisabled$ || bReadonly$"
|
|
22
|
+
aria-label="Use my location"
|
|
23
|
+
>
|
|
24
|
+
<ng-container *ngIf="!isLocating; else loadingSpinner">
|
|
25
|
+
<mat-icon>location_on</mat-icon>
|
|
26
|
+
</ng-container>
|
|
27
|
+
<ng-template #loadingSpinner>
|
|
28
|
+
<mat-progress-spinner diameter="24" mode="indeterminate" strokeWidth="3"></mat-progress-spinner>
|
|
29
|
+
</ng-template>
|
|
30
|
+
</button>
|
|
31
|
+
|
|
32
|
+
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="onOptionSelected($event)">
|
|
33
|
+
<mat-option *ngFor="let option of filteredOptions" [value]="option">
|
|
34
|
+
{{ option }}
|
|
35
|
+
</mat-option>
|
|
36
|
+
</mat-autocomplete>
|
|
37
|
+
</mat-form-field>
|
|
38
|
+
<!-- Google map -->
|
|
39
|
+
<div *ngIf="showMap" class="map-wrapper">
|
|
40
|
+
<google-map height="400px" width="100%" [center]="center" [zoom]="13" (mapClick)="onMapClick($event)">
|
|
41
|
+
<map-marker *ngIf="markerPosition" [position]="markerPosition" [title]="'Selected Location'"></map-marker>
|
|
42
|
+
</google-map>
|
|
43
|
+
<div class="map-blocker" *ngIf="bDisabled$ || bReadonly$"></div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.psdk-full-width {
|
|
2
|
+
width: 100%;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.map-wrapper {
|
|
6
|
+
position: relative;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.map-blocker {
|
|
10
|
+
position: absolute;
|
|
11
|
+
top: 0;
|
|
12
|
+
left: 0;
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
background: transparent;
|
|
16
|
+
z-index: 10;
|
|
17
|
+
cursor: not-allowed;
|
|
18
|
+
}
|