@pega/angular-sdk-overrides 24.2.10 → 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 -2
- 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 +3 -3
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
- package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +6 -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 +2 -2
- package/lib/designSystemExtension/operator/operator.component.scss +13 -12
- package/lib/designSystemExtension/operator/operator.component.ts +4 -5
- 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 -2
- package/lib/field/auto-complete/auto-complete.component.ts +48 -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 +17 -6
- 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 +54 -181
- package/lib/field/date/date.component.html +4 -3
- package/lib/field/date/date.component.ts +30 -151
- package/lib/field/date-time/date-time.component.html +2 -2
- package/lib/field/date-time/date-time.component.ts +47 -148
- package/lib/field/decimal/decimal.component.html +1 -0
- package/lib/field/decimal/decimal.component.ts +61 -164
- package/lib/field/dropdown/dropdown.component.html +1 -0
- package/lib/field/dropdown/dropdown.component.ts +43 -152
- package/lib/field/email/email.component.ts +28 -158
- package/lib/field/field.base.ts +149 -0
- package/lib/field/group/group.component.ts +7 -5
- package/lib/field/integer/integer.component.html +1 -1
- package/lib/field/integer/integer.component.ts +30 -160
- package/lib/field/list-view-action-buttons/list-view-action-buttons.component.html +1 -1
- package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +3 -3
- 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.html +1 -1
- package/lib/field/percentage/percentage.component.ts +62 -170
- package/lib/field/phone/config-ext.json +1 -1
- package/lib/field/phone/phone.component.html +18 -17
- package/lib/field/phone/phone.component.scss +4 -0
- package/lib/field/phone/phone.component.ts +47 -156
- package/lib/field/radio-buttons/radio-buttons.component.html +17 -12
- 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 +32 -93
- 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 +6 -5
- package/lib/field/text-area/text-area.component.html +4 -2
- package/lib/field/text-area/text-area.component.ts +30 -155
- package/lib/field/text-content/text-content.component.ts +0 -1
- package/lib/field/text-input/text-input.component.html +1 -1
- package/lib/field/text-input/text-input.component.ts +28 -158
- package/lib/field/time/time.component.html +2 -2
- package/lib/field/time/time.component.ts +34 -154
- package/lib/field/url/url.component.html +1 -1
- package/lib/field/url/url.component.ts +28 -157
- package/lib/field/user-reference/user-reference.component.html +40 -38
- package/lib/field/user-reference/user-reference.component.scss +0 -1
- package/lib/field/user-reference/user-reference.component.ts +70 -9
- package/lib/infra/Containers/flow-container/flow-container.component.html +2 -2
- package/lib/infra/Containers/flow-container/flow-container.component.ts +24 -51
- package/lib/infra/Containers/flow-container/helpers.ts +2 -2
- 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.html +1 -11
- package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -18
- 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.html +1 -1
- package/lib/infra/assignment/assignment.component.ts +100 -46
- package/lib/infra/assignment-card/assignment-card.component.html +2 -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 +25 -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 -6
- package/lib/infra/reference/reference.component.ts +82 -90
- package/lib/infra/region/region.component.ts +0 -1
- package/lib/infra/root-container/root-container.component.html +2 -15
- package/lib/infra/root-container/root-container.component.scss +0 -1
- package/lib/infra/root-container/root-container.component.ts +25 -32
- 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/base/form-template-base.ts +6 -0
- 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 +2 -2
- 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 +45 -5
- 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.html +7 -7
- package/lib/template/field-group-template/field-group-template.component.scss +8 -0
- package/lib/template/field-group-template/field-group-template.component.ts +64 -55
- package/lib/template/field-value-list/field-value-list.component.html +2 -2
- package/lib/template/field-value-list/field-value-list.component.scss +4 -0
- 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 -160
- package/lib/template/list-view/list-view.component.scss +25 -21
- package/lib/template/list-view/list-view.component.ts +208 -122
- package/lib/template/list-view/listViewHelpers.ts +3 -9
- package/lib/template/list-view/utils.ts +27 -7
- 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 +126 -10
- package/lib/template/simple-table-manual/simple-table-manual.component.html +27 -8
- package/lib/template/simple-table-manual/simple-table-manual.component.scss +15 -17
- package/lib/template/simple-table-manual/simple-table-manual.component.ts +103 -45
- 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 +58 -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 -5
- 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 +12 -10
- package/lib/widget/todo/todo.component.scss +20 -10
- package/lib/widget/todo/todo.component.ts +11 -7
- package/lib/widget/utility/utility.component.ts +0 -1
- package/package.json +1 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, forwardRef } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormControl,
|
|
3
|
+
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatInputModule } from '@angular/material/input';
|
|
5
5
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
6
6
|
import { NgxCurrencyDirective, NgxCurrencyInputMode } from 'ngx-currency';
|
|
7
|
-
|
|
8
|
-
import {
|
|
7
|
+
|
|
8
|
+
import { FieldBase } from '@pega/angular-sdk-components';
|
|
9
9
|
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
|
|
10
10
|
import { handleEvent } from '@pega/angular-sdk-components';
|
|
11
11
|
import { getCurrencyCharacters, getCurrencyOptions } from '@pega/angular-sdk-components';
|
|
12
|
-
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
13
12
|
import { format } from '@pega/angular-sdk-components';
|
|
13
|
+
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
14
14
|
|
|
15
15
|
interface DecimalProps extends PConnFieldProps {
|
|
16
16
|
// If any, enter additional props that only exist on Decimal here
|
|
@@ -24,7 +24,6 @@ interface DecimalProps extends PConnFieldProps {
|
|
|
24
24
|
selector: 'app-decimal',
|
|
25
25
|
templateUrl: './decimal.component.html',
|
|
26
26
|
styleUrls: ['./decimal.component.scss'],
|
|
27
|
-
standalone: true,
|
|
28
27
|
imports: [
|
|
29
28
|
CommonModule,
|
|
30
29
|
ReactiveFormsModule,
|
|
@@ -35,193 +34,91 @@ interface DecimalProps extends PConnFieldProps {
|
|
|
35
34
|
forwardRef(() => ComponentMapperComponent)
|
|
36
35
|
]
|
|
37
36
|
})
|
|
38
|
-
export class DecimalComponent
|
|
39
|
-
@Input() pConn$: typeof PConnect;
|
|
40
|
-
@Input() formGroup$: FormGroup;
|
|
41
|
-
|
|
42
|
-
// Used with AngularPConnect
|
|
43
|
-
angularPConnectData: AngularPConnectData = {};
|
|
37
|
+
export class DecimalComponent extends FieldBase {
|
|
44
38
|
configProps$: DecimalProps;
|
|
39
|
+
override fieldControl = new FormControl<number | null>(null, null);
|
|
45
40
|
|
|
46
|
-
label$ = '';
|
|
47
|
-
value$: any;
|
|
48
|
-
bRequired$ = false;
|
|
49
|
-
bReadonly$ = false;
|
|
50
|
-
bDisabled$ = false;
|
|
51
|
-
bVisible$ = true;
|
|
52
|
-
displayMode$?: string = '';
|
|
53
|
-
controlName$: string;
|
|
54
|
-
bHasForm$ = true;
|
|
55
|
-
componentReference = '';
|
|
56
|
-
testId: string;
|
|
57
|
-
helperText: string;
|
|
58
|
-
placeholder: string;
|
|
59
|
-
|
|
60
|
-
fieldControl = new FormControl<number | null>(null, null);
|
|
61
41
|
decimalSeparator: string;
|
|
62
42
|
thousandSeparator: string;
|
|
63
43
|
currencySymbol = '';
|
|
64
44
|
decimalPrecision: number | undefined;
|
|
65
45
|
formatter;
|
|
66
46
|
formattedValue: any;
|
|
67
|
-
inputMode: any;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
77
|
-
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
78
|
-
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
79
|
-
|
|
80
|
-
// Then, continue on with other initialization
|
|
47
|
+
inputMode: any = NgxCurrencyInputMode.Natural;
|
|
48
|
+
suffix = '';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Updates the component when there are changes in the state.
|
|
52
|
+
*/
|
|
53
|
+
override updateSelf(): void {
|
|
54
|
+
// Resolve config properties
|
|
55
|
+
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DecimalProps;
|
|
81
56
|
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
this.checkAndUpdate();
|
|
57
|
+
// Update common properties
|
|
58
|
+
this.updateComponentCommonProperties(this.configProps$);
|
|
85
59
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
60
|
+
// Extract and normalize the value property
|
|
61
|
+
const { value } = this.configProps$;
|
|
62
|
+
if (value) {
|
|
63
|
+
this.value$ = typeof value === 'string' ? parseFloat(value) : value;
|
|
89
64
|
this.fieldControl.setValue(this.value$);
|
|
90
|
-
this.bHasForm$ = true;
|
|
91
|
-
} else {
|
|
92
|
-
this.bReadonly$ = true;
|
|
93
|
-
this.bHasForm$ = false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
ngOnDestroy(): void {
|
|
98
|
-
if (this.formGroup$) {
|
|
99
|
-
this.formGroup$.removeControl(this.controlName$);
|
|
100
65
|
}
|
|
101
66
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Callback passed when subscribing to store change
|
|
108
|
-
onStateChange() {
|
|
109
|
-
this.checkAndUpdate();
|
|
67
|
+
// updates decimal properties
|
|
68
|
+
this.updateDecimalProperties(this.configProps$);
|
|
110
69
|
}
|
|
111
70
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
updateSelf(): void {
|
|
125
|
-
// starting very simple...
|
|
126
|
-
|
|
127
|
-
// moved this from ngOnInit() and call this from there instead...
|
|
128
|
-
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DecimalProps;
|
|
129
|
-
this.testId = this.configProps$.testId;
|
|
130
|
-
this.label$ = this.configProps$.label;
|
|
131
|
-
this.displayMode$ = this.configProps$.displayMode;
|
|
132
|
-
this.inputMode = NgxCurrencyInputMode.Natural;
|
|
133
|
-
let nValue: any = this.configProps$.value;
|
|
134
|
-
if (nValue) {
|
|
135
|
-
if (typeof nValue === 'string') {
|
|
136
|
-
nValue = parseFloat(nValue);
|
|
137
|
-
}
|
|
138
|
-
this.value$ = nValue;
|
|
139
|
-
}
|
|
140
|
-
this.helperText = this.configProps$.helperText;
|
|
141
|
-
this.placeholder = this.configProps$.placeholder || '';
|
|
142
|
-
const showGroupSeparators = this.configProps$.showGroupSeparators;
|
|
143
|
-
const currencyISOCode = this.configProps$?.currencyISOCode ?? '';
|
|
144
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Updates decimal properties based on the provided configuration.
|
|
73
|
+
*
|
|
74
|
+
* @param {Object} configProps - Configuration properties.
|
|
75
|
+
* @param {string} configProps.currencyISOCode - ISO code of the currency.
|
|
76
|
+
* @param {string} configProps.formatter - Formatter type (e.g., 'decimal', 'currency').
|
|
77
|
+
* @param {boolean} configProps.showGroupSeparators - Whether to show group separators.
|
|
78
|
+
*/
|
|
79
|
+
protected updateDecimalProperties(configProps): void {
|
|
80
|
+
const { currencyISOCode = '', formatter, showGroupSeparators } = configProps;
|
|
81
|
+
|
|
82
|
+
// Extract currency symbols and options
|
|
145
83
|
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
146
84
|
this.decimalSeparator = theSymbols.theDecimalIndicator;
|
|
147
85
|
this.thousandSeparator = showGroupSeparators ? theSymbols.theDigitGroupSeparator : '';
|
|
148
86
|
|
|
149
87
|
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (this.formatter) {
|
|
153
|
-
this.formattedValue = format(this.value$, this.formatter.toLowerCase(), theCurrencyOptions);
|
|
154
|
-
} else {
|
|
155
|
-
this.formattedValue = format(this.value$, 'decimal', theCurrencyOptions);
|
|
156
|
-
}
|
|
88
|
+
const formatterLower = formatter?.toLowerCase() || 'decimal';
|
|
89
|
+
this.formattedValue = format(this.value$, formatterLower, theCurrencyOptions);
|
|
157
90
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (this.configProps$.required != null) {
|
|
161
|
-
this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
|
|
162
|
-
}
|
|
163
|
-
this.cdRef.detectChanges();
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
if (this.configProps$.visibility != null) {
|
|
167
|
-
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (this.configProps$.readOnly != null) {
|
|
171
|
-
this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// disabled
|
|
175
|
-
if (this.configProps$.disabled != undefined) {
|
|
176
|
-
this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
|
|
91
|
+
if (this.bReadonly$ && formatter === 'Currency') {
|
|
92
|
+
this.currencySymbol = theSymbols.theCurrencySymbol;
|
|
177
93
|
}
|
|
178
94
|
|
|
179
|
-
if (this.
|
|
180
|
-
this.
|
|
181
|
-
} else {
|
|
182
|
-
this.fieldControl.enable();
|
|
95
|
+
if (this.bReadonly$ && formatter === 'Percentage') {
|
|
96
|
+
this.suffix = '%';
|
|
183
97
|
}
|
|
184
98
|
|
|
185
|
-
if (this.bReadonly$ && this.formatter === 'Currency') {
|
|
186
|
-
this.currencySymbol = theSymbols.theCurrencySymbol;
|
|
187
|
-
}
|
|
188
99
|
this.decimalPrecision = this.configProps$?.decimalPrecision ?? 2;
|
|
189
|
-
|
|
190
|
-
this.componentReference = this.pConn$.getStateProps().value;
|
|
191
100
|
}
|
|
192
101
|
|
|
193
102
|
fieldOnBlur(event: any) {
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
// look for validation messages for json, pre-defined or just an error pushed from workitem (400)
|
|
215
|
-
if (this.fieldControl.hasError('message')) {
|
|
216
|
-
errMessage = this.angularPConnectData.validateMessage ?? '';
|
|
217
|
-
return errMessage;
|
|
218
|
-
}
|
|
219
|
-
if (this.fieldControl.hasError('required')) {
|
|
220
|
-
errMessage = 'You must enter a value';
|
|
221
|
-
} else if (this.fieldControl.errors) {
|
|
222
|
-
errMessage = this.fieldControl.errors.toString();
|
|
103
|
+
const oldVal = this.value$ ?? '';
|
|
104
|
+
const isValueChanged = event.target.value.toString() !== oldVal.toString();
|
|
105
|
+
|
|
106
|
+
if (isValueChanged) {
|
|
107
|
+
const actionsApi = this.pConn$?.getActionsApi();
|
|
108
|
+
const propName = this.pConn$?.getStateProps().value;
|
|
109
|
+
let value = event?.target?.value;
|
|
110
|
+
// replacing thousand separator with empty string as not required in api call
|
|
111
|
+
if (this.configProps$.showGroupSeparators) {
|
|
112
|
+
const thousandSep = this.thousandSeparator === '.' ? '\\.' : this.thousandSeparator;
|
|
113
|
+
const regExp = new RegExp(String.raw`${thousandSep}`, 'g');
|
|
114
|
+
value = value?.replace(regExp, '');
|
|
115
|
+
}
|
|
116
|
+
// replacing decimal separator with '.'
|
|
117
|
+
if (this.decimalSeparator !== '.') {
|
|
118
|
+
const regExp = new RegExp(String.raw`${this.decimalSeparator}`, 'g');
|
|
119
|
+
value = value.replace(regExp, '.');
|
|
120
|
+
}
|
|
121
|
+
handleEvent(actionsApi, 'changeNblur', propName, value);
|
|
223
122
|
}
|
|
224
|
-
|
|
225
|
-
return errMessage;
|
|
226
123
|
}
|
|
227
124
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import { Component, OnInit,
|
|
1
|
+
import { Component, OnInit, forwardRef, OnDestroy, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
3
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { MatOptionModule } from '@angular/material/core';
|
|
5
5
|
import { MatSelectModule } from '@angular/material/select';
|
|
6
6
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
-
import { interval } from 'rxjs';
|
|
8
7
|
import isEqual from 'fast-deep-equal';
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
import { Utils } from '@pega/angular-sdk-components';
|
|
8
|
+
|
|
9
|
+
import { FieldBase } from '@pega/angular-sdk-components';
|
|
12
10
|
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
|
|
13
11
|
import { handleEvent } from '@pega/angular-sdk-components';
|
|
14
12
|
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
@@ -68,146 +66,61 @@ interface DropdownProps extends PConnFieldProps {
|
|
|
68
66
|
selector: 'app-dropdown',
|
|
69
67
|
templateUrl: './dropdown.component.html',
|
|
70
68
|
styleUrls: ['./dropdown.component.scss'],
|
|
71
|
-
standalone: true,
|
|
72
69
|
imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatOptionModule, forwardRef(() => ComponentMapperComponent)]
|
|
73
70
|
})
|
|
74
|
-
export class DropdownComponent implements OnInit, OnDestroy {
|
|
75
|
-
@
|
|
76
|
-
@Input() formGroup$: FormGroup;
|
|
71
|
+
export class DropdownComponent extends FieldBase implements OnInit, OnDestroy {
|
|
72
|
+
@Output() onRecordChange: EventEmitter<any> = new EventEmitter();
|
|
77
73
|
|
|
78
|
-
// Used with AngularPConnect
|
|
79
|
-
angularPConnectData: AngularPConnectData = {};
|
|
80
74
|
configProps$: DropdownProps;
|
|
81
75
|
|
|
82
|
-
label$ = '';
|
|
83
|
-
value$ = '';
|
|
84
|
-
bRequired$ = false;
|
|
85
|
-
bReadonly$ = false;
|
|
86
|
-
bDisabled$ = false;
|
|
87
|
-
bVisible$ = true;
|
|
88
|
-
displayMode$?: string = '';
|
|
89
|
-
controlName$: string;
|
|
90
|
-
bHasForm$ = true;
|
|
91
76
|
options$: IOption[];
|
|
92
|
-
componentReference = '';
|
|
93
|
-
testId = '';
|
|
94
|
-
helperText: string;
|
|
95
|
-
hideLabel: any;
|
|
96
77
|
theDatasource: any[] | null;
|
|
97
|
-
fieldControl = new FormControl('', null);
|
|
98
|
-
fieldMetadata: any[];
|
|
99
78
|
localeContext = '';
|
|
100
79
|
localeClass = '';
|
|
101
80
|
localeName = '';
|
|
102
81
|
localePath = '';
|
|
103
82
|
localizedValue = '';
|
|
104
|
-
actionsApi: Object;
|
|
105
|
-
propName: string;
|
|
106
|
-
|
|
107
|
-
constructor(
|
|
108
|
-
private angularPConnect: AngularPConnectService,
|
|
109
|
-
private cdRef: ChangeDetectorRef,
|
|
110
|
-
private utils: Utils,
|
|
111
|
-
private dataPageService: DatapageService
|
|
112
|
-
) {}
|
|
113
|
-
|
|
114
|
-
ngOnInit(): void {
|
|
115
|
-
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
116
|
-
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
117
|
-
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
118
|
-
|
|
119
|
-
// Then, continue on with other initialization
|
|
120
|
-
|
|
121
|
-
// call updateSelf when initializing
|
|
122
|
-
this.checkAndUpdate();
|
|
123
|
-
// this should get called afer checkAndUpdate
|
|
124
|
-
this.getDatapageData();
|
|
125
83
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
this.
|
|
130
|
-
this.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
84
|
+
set options(options: IOption[]) {
|
|
85
|
+
this.options$ = options;
|
|
86
|
+
if (this.displayMode$) {
|
|
87
|
+
this.value$ = this.options$?.find(option => option.key === this.value$)?.value || this.value$;
|
|
88
|
+
this.localizedValue = this.pConn$.getLocalizedValue(
|
|
89
|
+
this.value$ === 'Select...' ? '' : this.value$,
|
|
90
|
+
this.localePath,
|
|
91
|
+
this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
|
|
92
|
+
);
|
|
134
93
|
}
|
|
135
94
|
}
|
|
136
95
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Updates the component when there are changes in the state.
|
|
98
|
+
*/
|
|
99
|
+
override updateSelf(): void {
|
|
100
|
+
// Resolve configuration properties
|
|
101
|
+
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DropdownProps;
|
|
141
102
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
}
|
|
103
|
+
// Update component common properties
|
|
104
|
+
this.updateComponentCommonProperties(this.configProps$);
|
|
146
105
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.checkAndUpdate();
|
|
106
|
+
// Set component specific properties
|
|
107
|
+
this.updateDropdownProperties(this.configProps$);
|
|
150
108
|
}
|
|
151
109
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Updates dropdown properties based on the provided configuration.
|
|
112
|
+
* @param configProps - Configuration properties
|
|
113
|
+
*/
|
|
114
|
+
updateDropdownProperties(configProps) {
|
|
115
|
+
const { value, fieldMetadata, datasource } = configProps;
|
|
156
116
|
|
|
157
|
-
|
|
158
|
-
if (bUpdateSelf) {
|
|
159
|
-
this.updateSelf();
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// updateSelf
|
|
164
|
-
updateSelf(): void {
|
|
165
|
-
// moved this from ngOnInit() and call this from there instead...
|
|
166
|
-
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DropdownProps;
|
|
167
|
-
if (this.configProps$.value != undefined) {
|
|
168
|
-
this.value$ = this.configProps$.value;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
this.testId = this.configProps$.testId;
|
|
172
|
-
this.displayMode$ = this.configProps$.displayMode;
|
|
173
|
-
this.label$ = this.configProps$.label;
|
|
174
|
-
this.helperText = this.configProps$.helperText;
|
|
175
|
-
this.hideLabel = this.configProps$.hideLabel;
|
|
176
|
-
const datasource = this.configProps$.datasource;
|
|
177
|
-
// timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
178
|
-
setTimeout(() => {
|
|
179
|
-
if (this.configProps$.required != null) {
|
|
180
|
-
this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
|
|
181
|
-
}
|
|
182
|
-
this.cdRef.detectChanges();
|
|
183
|
-
});
|
|
117
|
+
this.value$ = value;
|
|
184
118
|
|
|
185
119
|
if (!isEqual(datasource, this.theDatasource)) {
|
|
186
120
|
// inbound datasource is different, so update theDatasource
|
|
187
121
|
this.theDatasource = datasource || null;
|
|
188
122
|
}
|
|
189
123
|
|
|
190
|
-
if (this.configProps$.visibility != null) {
|
|
191
|
-
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// disabled
|
|
195
|
-
if (this.configProps$.disabled != undefined) {
|
|
196
|
-
this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (this.bDisabled$) {
|
|
200
|
-
this.fieldControl.disable();
|
|
201
|
-
} else {
|
|
202
|
-
this.fieldControl.enable();
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
if (this.configProps$.readOnly != null) {
|
|
206
|
-
this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
this.componentReference = this.pConn$.getStateProps().value;
|
|
210
|
-
|
|
211
124
|
if (this.value$ === '' && !this.bReadonly$) {
|
|
212
125
|
this.value$ = 'Select';
|
|
213
126
|
}
|
|
@@ -215,7 +128,7 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
215
128
|
if (this.theDatasource) {
|
|
216
129
|
const optionsList = [...this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject())];
|
|
217
130
|
optionsList?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
|
|
218
|
-
this.options
|
|
131
|
+
this.options = optionsList;
|
|
219
132
|
}
|
|
220
133
|
|
|
221
134
|
this.actionsApi = this.pConn$.getActionsApi();
|
|
@@ -224,8 +137,7 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
224
137
|
const className = this.pConn$.getCaseInfo().getClassName();
|
|
225
138
|
const refName = this.propName?.slice(this.propName.lastIndexOf('.') + 1);
|
|
226
139
|
|
|
227
|
-
|
|
228
|
-
const metaData = Array.isArray(this.fieldMetadata) ? this.fieldMetadata.filter(field => field?.classID === className)[0] : this.fieldMetadata;
|
|
140
|
+
const metaData = Array.isArray(fieldMetadata) ? fieldMetadata.filter(field => field?.classID === className)[0] : fieldMetadata;
|
|
229
141
|
|
|
230
142
|
let displayName = metaData?.datasource?.propertyForDisplayText;
|
|
231
143
|
displayName = displayName?.slice(displayName.lastIndexOf('.') + 1);
|
|
@@ -239,15 +151,10 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
239
151
|
this.localePath,
|
|
240
152
|
this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
|
|
241
153
|
);
|
|
242
|
-
// trigger display of error message with field control
|
|
243
|
-
if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
|
|
244
|
-
const timer = interval(100).subscribe(() => {
|
|
245
|
-
this.fieldControl.setErrors({ message: true });
|
|
246
|
-
this.fieldControl.markAsTouched();
|
|
247
154
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
155
|
+
this.localizedValue = this.options$?.find(opt => opt.key === this.value$)?.value || this.localizedValue;
|
|
156
|
+
|
|
157
|
+
this.getDatapageData();
|
|
251
158
|
}
|
|
252
159
|
|
|
253
160
|
getDatapageData() {
|
|
@@ -278,7 +185,7 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
278
185
|
}
|
|
279
186
|
|
|
280
187
|
columns = preProcessColumns(columns) || [];
|
|
281
|
-
if (
|
|
188
|
+
if (listType !== 'associated' && typeof datasource === 'string') {
|
|
282
189
|
this.getData(datasource, parameters, columns, context, listType);
|
|
283
190
|
}
|
|
284
191
|
}
|
|
@@ -309,7 +216,7 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
309
216
|
optionsData.push(obj);
|
|
310
217
|
});
|
|
311
218
|
optionsData?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
|
|
312
|
-
this.options
|
|
219
|
+
this.options = optionsData;
|
|
313
220
|
});
|
|
314
221
|
});
|
|
315
222
|
}
|
|
@@ -323,12 +230,13 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
323
230
|
event.value = '';
|
|
324
231
|
}
|
|
325
232
|
handleEvent(this.actionsApi, 'changeNblur', this.propName, event.value);
|
|
326
|
-
|
|
327
|
-
this.configProps$.onRecordChange(event);
|
|
328
|
-
}
|
|
233
|
+
|
|
329
234
|
this.pConn$.clearErrorMessages({
|
|
330
235
|
property: this.propName
|
|
331
236
|
});
|
|
237
|
+
if (this.onRecordChange) {
|
|
238
|
+
this.onRecordChange.emit(event.value);
|
|
239
|
+
}
|
|
332
240
|
}
|
|
333
241
|
|
|
334
242
|
getLocalizedOptionValue(opt: IOption) {
|
|
@@ -338,21 +246,4 @@ export class DropdownComponent implements OnInit, OnDestroy {
|
|
|
338
246
|
this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName)
|
|
339
247
|
);
|
|
340
248
|
}
|
|
341
|
-
|
|
342
|
-
getErrorMessage() {
|
|
343
|
-
let errMessage = '';
|
|
344
|
-
|
|
345
|
-
// look for validation messages for json, pre-defined or just an error pushed from workitem (400)
|
|
346
|
-
if (this.fieldControl.hasError('message')) {
|
|
347
|
-
errMessage = this.angularPConnectData.validateMessage ?? '';
|
|
348
|
-
return errMessage;
|
|
349
|
-
}
|
|
350
|
-
if (this.fieldControl.hasError('required')) {
|
|
351
|
-
errMessage = 'You must enter a value';
|
|
352
|
-
} else if (this.fieldControl.errors) {
|
|
353
|
-
errMessage = this.fieldControl.errors.toString();
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
return errMessage;
|
|
357
|
-
}
|
|
358
249
|
}
|