@pega/dx-component-builder-sdk 0.24.1 → 0.24.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/tasks/create/templates/Constellation/field/Icon-Button-URL/demo.stories.tsx.mustache +1 -1
- package/src/tasks/create/templates/Constellation/field/Picklist/index.tsx.mustache +0 -1
- package/src/tasks/create/templates/Constellation/field/Picklist-Autocomplete/date.ts.mustache +15 -37
- package/src/tasks/create/templates/Constellation/template/DETAILS/HighlightRender.tsx.mustache +2 -2
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/HighlightRender.tsx.mustache +2 -2
- package/src/tasks/create/templates/Constellation/template/DETAILS-region/index.tsx.mustache +1 -1
- package/src/tasks/create/templates/SDK-Angular/field/Boolean/boolean.component.html.mustache +19 -18
- package/src/tasks/create/templates/SDK-Angular/field/Boolean/boolean.component.ts.mustache +127 -44
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/demo.stories.tsx.mustache +36 -15
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/icon-button-url.component.html.mustache +40 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/{text-url.component.scss.mustache → icon-button-url.component.scss.mustache} +4 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/icon-button-url.component.ts.mustache +195 -0
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/mock.ts.mustache +32 -12
- package/src/tasks/create/templates/SDK-Angular/field/Text-URL/text-url.component.html.mustache +1 -0
- package/src/tasks/create/templates/SDK-Angular/field/Text-URL/text-url.component.ts.mustache +2 -0
- package/src/tasks/create/templates/SDK-Angular/field/TimeOfDay/time-of-day.component.html.mustache +1 -0
- package/src/tasks/create/templates/SDK-Angular/field/TimeOfDay/time-of-day.component.ts.mustache +2 -0
- package/src/tasks/create/templates/SDK-Angular/template/FORM-region/form.component.scss.mustache +1 -1
- package/src/tasks/create/templates/SDK-Angular/widget/CASE/case.component.ts.mustache +2 -2
- package/src/tasks/create/templates/SDK-Angular/widget/PAGE/page.component.html.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Boolean/demo.stories.tsx.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Boolean/mock.ts.mustache +8 -8
- package/src/tasks/create/templates/SDK-React/field/Date/index.tsx.mustache +2 -2
- package/src/tasks/create/templates/SDK-React/field/Date/mock.ts.mustache +7 -7
- package/src/tasks/create/templates/SDK-React/field/DateTime/demo.stories.tsx.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/DateTime/index.tsx.mustache +2 -3
- package/src/tasks/create/templates/SDK-React/field/DateTime/mock.ts.mustache +6 -6
- package/src/tasks/create/templates/SDK-React/field/Decimal/index.tsx.mustache +51 -35
- package/src/tasks/create/templates/SDK-React/field/Decimal/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/demo.stories.tsx.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/index.tsx.mustache +47 -37
- package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/index.tsx.mustache +36 -21
- package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/demo.stories.tsx.mustache +58 -25
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/index.tsx.mustache +134 -53
- package/src/tasks/create/templates/SDK-React/field/Icon-Button-URL/mock.ts.mustache +2 -14
- package/src/tasks/create/templates/SDK-React/field/Integer/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Integer/index.tsx.mustache +19 -20
- package/src/tasks/create/templates/SDK-React/field/Integer/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Picklist/index.tsx.mustache +26 -26
- package/src/tasks/create/templates/SDK-React/field/Picklist-RadioButtons/mock.ts.mustache +0 -1
- package/src/tasks/create/templates/SDK-React/field/Text/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text/index.tsx.mustache +0 -1
- package/src/tasks/create/templates/SDK-React/field/Text/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Email/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Email/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Input/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Input/index.tsx.mustache +0 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Input/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Paragraph/index.tsx.mustache +1 -3
- package/src/tasks/create/templates/SDK-React/field/Text-Paragraph/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/Text-Phone/index.tsx.mustache +1 -2
- package/src/tasks/create/templates/SDK-React/field/Text-URL/index.tsx.mustache +1 -2
- package/src/tasks/create/templates/SDK-React/field/Text-URL/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/field/TimeOfDay/demo.stories.tsx.mustache +4 -4
- package/src/tasks/create/templates/SDK-React/field/TimeOfDay/index.tsx.mustache +0 -2
- package/src/tasks/create/templates/SDK-React/field/TimeOfDay/mock.ts.mustache +6 -6
- package/src/tasks/create/templates/SDK-React/template/DETAILS/demo.stories.tsx.mustache +1 -4
- package/src/tasks/create/templates/SDK-React/template/DETAILS/index.tsx.mustache +3 -8
- package/src/tasks/create/templates/SDK-React/template/DETAILS/mock.ts.mustache +181 -165
- package/src/tasks/create/templates/SDK-React/template/DETAILS-region/demo.stories.tsx.mustache +1 -3
- package/src/tasks/create/templates/SDK-React/template/DETAILS-region/index.tsx.mustache +3 -8
- package/src/tasks/create/templates/SDK-React/template/DETAILS-region/mock.ts.mustache +207 -163
- package/src/tasks/create/templates/SDK-React/template/FORM/config.json.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/template/FORM/demo.stories.tsx.mustache +0 -1
- package/src/tasks/create/templates/SDK-React/template/FORM/index.tsx.mustache +14 -16
- package/src/tasks/create/templates/SDK-React/template/FORM/utils.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/template/FORM-region/demo.stories.tsx.mustache +0 -2
- package/src/tasks/create/templates/SDK-React/template/FORM-region/mock.ts.mustache +121 -122
- package/src/tasks/create/templates/SDK-React/template/PAGE/OneColumn.tsx.mustache +12 -13
- package/src/tasks/create/templates/SDK-React/template/PAGE/demo.stories.tsx.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/template/PAGE/index.tsx.mustache +3 -5
- package/src/tasks/create/templates/SDK-React/template/PAGE/mock.ts.mustache +8 -9
- package/src/tasks/create/templates/SDK-React/widget/CASE/config.json.mustache +2 -2
- package/src/tasks/create/templates/SDK-React/widget/CASE/demo.stories.tsx.mustache +0 -1
- package/src/tasks/create/templates/SDK-React/widget/CASE/index.tsx.mustache +3 -3
- package/src/tasks/create/templates/SDK-React/widget/PAGE/config.json.mustache +43 -43
- package/src/tasks/create/templates/SDK-React/widget/PAGE/mock.ts.mustache +1 -1
- package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/demo.stories.tsx.mustache +1 -2
- package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/index.tsx.mustache +0 -1
- package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/mock.ts.mustache +0 -1
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/text-url.component.html.mustache +0 -29
- package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/text-url.component.ts.mustache +0 -179
- /package/src/tasks/create/templates/SDK-Angular/field/Icon-Button-URL/{text-url.component.spec.ts.mustache → icon-button-url.component.spec.ts.mustache} +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { MatInputModule } from '@angular/material/input';
|
|
5
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
+
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
|
8
|
+
import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
|
|
9
|
+
import { Utils } from '@pega/angular-sdk-components';
|
|
10
|
+
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
|
|
11
|
+
import { PConnFieldProps } from '@pega/angular-sdk-components';
|
|
12
|
+
|
|
13
|
+
interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
14
|
+
// If any, enter additional props that only exist on URL here
|
|
15
|
+
countryCode: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-{{COMPONENT_CLASS_NAME_KEBAB}}',
|
|
20
|
+
templateUrl: './{{COMPONENT_CLASS_NAME_KEBAB}}.component.html',
|
|
21
|
+
styleUrls: ['./{{COMPONENT_CLASS_NAME_KEBAB}}.component.scss'],
|
|
22
|
+
standalone: true,
|
|
23
|
+
imports: [
|
|
24
|
+
CommonModule,
|
|
25
|
+
MatIconModule,
|
|
26
|
+
MatButtonModule,
|
|
27
|
+
ReactiveFormsModule,
|
|
28
|
+
MatInputModule,
|
|
29
|
+
MatTableModule,
|
|
30
|
+
forwardRef(() => ComponentMapperComponent)
|
|
31
|
+
]
|
|
32
|
+
})
|
|
33
|
+
export class {{COMPONENT_CLASS_NAME}}Component implements OnInit, OnDestroy {
|
|
34
|
+
@Input() pConn$: typeof PConnect;
|
|
35
|
+
@Input() formGroup$: FormGroup;
|
|
36
|
+
|
|
37
|
+
// Used with AngularPConnect
|
|
38
|
+
angularPConnectData: AngularPConnectData = {};
|
|
39
|
+
configProps$: {{COMPONENT_CLASS_NAME}}Props;
|
|
40
|
+
|
|
41
|
+
label$ = '';
|
|
42
|
+
value$ = '';
|
|
43
|
+
controlName$: string;
|
|
44
|
+
bHasForm$ = true;
|
|
45
|
+
componentReference = '';
|
|
46
|
+
displayMode$?: string = '';
|
|
47
|
+
tooltip$ = '';
|
|
48
|
+
showTable$ = false;
|
|
49
|
+
tableLabel$ = '';
|
|
50
|
+
stateNameLabel$ = '';
|
|
51
|
+
stateCodeLabel$ = '';
|
|
52
|
+
waitingForData = false;
|
|
53
|
+
repeatList$: MatTableDataSource<any>;
|
|
54
|
+
fields$: any[];
|
|
55
|
+
displayedColumns$ = ['stateName', 'stateCode'];
|
|
56
|
+
countryCode = 'USA';
|
|
57
|
+
|
|
58
|
+
constructor(
|
|
59
|
+
private angularPConnect: AngularPConnectService,
|
|
60
|
+
private cdRef: ChangeDetectorRef,
|
|
61
|
+
private utils: Utils
|
|
62
|
+
) {}
|
|
63
|
+
|
|
64
|
+
ngOnInit(): void {
|
|
65
|
+
// First thing in initialization is registering and subscribing to the AngularPConnect service
|
|
66
|
+
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
|
|
67
|
+
this.controlName$ = this.angularPConnect.getComponentID(this);
|
|
68
|
+
|
|
69
|
+
// Then, continue on with other initialization
|
|
70
|
+
|
|
71
|
+
// call updateSelf when initializing
|
|
72
|
+
// this.updateSelf();
|
|
73
|
+
this.checkAndUpdate();
|
|
74
|
+
|
|
75
|
+
if (this.formGroup$) {
|
|
76
|
+
// add control to formGroup
|
|
77
|
+
// this.formGroup$.addControl(this.controlName$, this.fieldControl);
|
|
78
|
+
// this.fieldControl.setValue(this.value$);
|
|
79
|
+
this.bHasForm$ = true;
|
|
80
|
+
} else {
|
|
81
|
+
this.bHasForm$ = false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
ngOnDestroy(): void {
|
|
86
|
+
if (this.formGroup$) {
|
|
87
|
+
this.formGroup$.removeControl(this.controlName$);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (this.angularPConnectData.unsubscribeFn) {
|
|
91
|
+
this.angularPConnectData.unsubscribeFn();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Callback passed when subscribing to store change
|
|
96
|
+
onStateChange() {
|
|
97
|
+
this.checkAndUpdate();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
checkAndUpdate() {
|
|
101
|
+
// Should always check the bridge to see if the component should
|
|
102
|
+
// update itself (re-render)
|
|
103
|
+
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
|
|
104
|
+
|
|
105
|
+
// ONLY call updateSelf when the component should update
|
|
106
|
+
if (bUpdateSelf) {
|
|
107
|
+
this.updateSelf();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// updateSelf
|
|
112
|
+
updateSelf(): void {
|
|
113
|
+
// moved this from ngOnInit() and call this from there instead...
|
|
114
|
+
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as PegaDxilMyAngularIconButtonUrlProps;
|
|
115
|
+
|
|
116
|
+
if (this.configProps$.value != undefined) {
|
|
117
|
+
this.value$ = this.configProps$.value;
|
|
118
|
+
}
|
|
119
|
+
if (this.configProps$.countryCode != undefined) {
|
|
120
|
+
this.countryCode = this.configProps$.countryCode;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// localized labels
|
|
124
|
+
this.label$ = this.pConn$.getLocalizedValue('State list for', '', '');
|
|
125
|
+
this.label$ = this.label$.concat(' ').concat(this.countryCode);
|
|
126
|
+
this.tooltip$ = this.pConn$.getLocalizedValue('Click to show/hide state list', '', '');
|
|
127
|
+
this.tableLabel$ = this.pConn$.getLocalizedValue('State list', '', '');
|
|
128
|
+
this.stateNameLabel$ = this.pConn$.getLocalizedValue('State name', '', '');
|
|
129
|
+
this.stateCodeLabel$ = this.pConn$.getLocalizedValue('State code', '', '');
|
|
130
|
+
|
|
131
|
+
this.displayMode$ = this.configProps$.displayMode;
|
|
132
|
+
|
|
133
|
+
this.componentReference = (this.pConn$.getStateProps() as any).value;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
buttonClick() {
|
|
138
|
+
if (!this.showTable$) {
|
|
139
|
+
this.showTable$ = true;
|
|
140
|
+
|
|
141
|
+
this.configProps$ = this.pConn$.getConfigProps();
|
|
142
|
+
// @ts-ignore - second parameter pageReference for getValue method should be optional
|
|
143
|
+
const dataViewName = 'D_pyStateList';
|
|
144
|
+
const context = this.pConn$.getContextName();
|
|
145
|
+
|
|
146
|
+
this.waitingForData = true;
|
|
147
|
+
|
|
148
|
+
const stateListData = PCore.getDataApiUtils().getData(
|
|
149
|
+
dataViewName,
|
|
150
|
+
{ dataViewParameters: [{ pyCountry: this.countryCode }] } as any,
|
|
151
|
+
context
|
|
152
|
+
) as Promise<any>;
|
|
153
|
+
|
|
154
|
+
stateListData
|
|
155
|
+
.then((stateJSON: any) => {
|
|
156
|
+
this.fields$ = [{ stateName: 'pyLabel', stateCode: 'pyStateCode' }];
|
|
157
|
+
|
|
158
|
+
const tableDataResults = this.updateData(stateJSON.data.data, this.fields$);
|
|
159
|
+
|
|
160
|
+
this.repeatList$ = new MatTableDataSource(tableDataResults);
|
|
161
|
+
|
|
162
|
+
this.waitingForData = false;
|
|
163
|
+
})
|
|
164
|
+
.catch((error: any) => {
|
|
165
|
+
console.log(error);
|
|
166
|
+
});
|
|
167
|
+
} else {
|
|
168
|
+
this.showTable$ = false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
updateData(listData: any[], fieldData: any[]): any[] {
|
|
173
|
+
const returnList: any[] = new Array<any>();
|
|
174
|
+
listData.forEach(row => {
|
|
175
|
+
// copy
|
|
176
|
+
const rowData = JSON.parse(JSON.stringify(row));
|
|
177
|
+
|
|
178
|
+
const newRow = { stateName: '', stateCode: '' };
|
|
179
|
+
|
|
180
|
+
for (const field of fieldData) {
|
|
181
|
+
const stateName = this.pConn$.getLocalizedValue(rowData[field.stateName], '', '');
|
|
182
|
+
const stateCode = rowData[field.stateCode];
|
|
183
|
+
|
|
184
|
+
newRow.stateName = stateName;
|
|
185
|
+
newRow.stateCode = stateCode;
|
|
186
|
+
}
|
|
187
|
+
returnList.push(newRow);
|
|
188
|
+
});
|
|
189
|
+
return returnList;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
getErrorMessage() {
|
|
193
|
+
return '';
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
export const configProps = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
countryCode: 'USA',
|
|
3
|
+
value: 'https://www.yahoo.com'
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export const stateListData = {
|
|
7
|
+
data: {
|
|
8
|
+
fetchDateTime: '2023-01-18T12:04:56.517Z',
|
|
9
|
+
pxObjClass: 'Pega-State',
|
|
10
|
+
resultCount: 3,
|
|
11
|
+
data: [
|
|
12
|
+
{
|
|
13
|
+
pyLabel: 'Massachusetts',
|
|
14
|
+
pyStateCode: 'MA'
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
pyLabel: 'Rhode Island',
|
|
18
|
+
pyStateCode: 'RI'
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
pyLabel: 'Connecticut',
|
|
22
|
+
pyStateCode: 'CT'
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
status: 200,
|
|
27
|
+
statusText: '',
|
|
28
|
+
headers: {
|
|
29
|
+
'content-length': '1328',
|
|
30
|
+
'content-type': 'application/json;charset=UTF-8'
|
|
31
|
+
},
|
|
32
|
+
request: {}
|
|
12
33
|
};
|
|
13
34
|
|
|
14
35
|
export const stateProps = {
|
|
15
|
-
value: '.
|
|
16
|
-
hasSuggestions: false
|
|
36
|
+
value: '.URL'
|
|
17
37
|
};
|
package/src/tasks/create/templates/SDK-Angular/field/Text-URL/text-url.component.ts.mustache
CHANGED
|
@@ -36,6 +36,7 @@ export class {{COMPONENT_CLASS_NAME}}Component implements OnInit, OnDestroy {
|
|
|
36
36
|
bVisible$ = true;
|
|
37
37
|
displayMode$?: string = '';
|
|
38
38
|
controlName$: string;
|
|
39
|
+
testId = '';
|
|
39
40
|
bHasForm$ = true;
|
|
40
41
|
componentReference = '';
|
|
41
42
|
helperText: string;
|
|
@@ -106,6 +107,7 @@ export class {{COMPONENT_CLASS_NAME}}Component implements OnInit, OnDestroy {
|
|
|
106
107
|
this.value$ = this.configProps$.value;
|
|
107
108
|
}
|
|
108
109
|
|
|
110
|
+
this.testId = this.configProps$.testId;
|
|
109
111
|
this.label$ = this.configProps$.label;
|
|
110
112
|
this.displayMode$ = this.configProps$.displayMode;
|
|
111
113
|
this.helperText = this.configProps$.helperText;
|
package/src/tasks/create/templates/SDK-Angular/field/TimeOfDay/time-of-day.component.ts.mustache
CHANGED
|
@@ -36,6 +36,7 @@ export class {{COMPONENT_CLASS_NAME}}Component implements OnInit, OnDestroy {
|
|
|
36
36
|
bVisible$ = true;
|
|
37
37
|
displayMode$?: string = '';
|
|
38
38
|
controlName$: string;
|
|
39
|
+
testId = '';
|
|
39
40
|
bHasForm$ = true;
|
|
40
41
|
componentReference = '';
|
|
41
42
|
helperText: string;
|
|
@@ -100,6 +101,7 @@ export class {{COMPONENT_CLASS_NAME}}Component implements OnInit, OnDestroy {
|
|
|
100
101
|
// moved this from ngOnInit() and call this from there instead...
|
|
101
102
|
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as {{COMPONENT_CLASS_NAME}}Props;
|
|
102
103
|
|
|
104
|
+
this.testId = this.configProps$.testId;
|
|
103
105
|
this.label$ = this.configProps$.label;
|
|
104
106
|
this.displayMode$ = this.configProps$.displayMode;
|
|
105
107
|
|
|
@@ -50,7 +50,7 @@ export class {{COMPONENT_CLASS_NAME}}Component implements OnInit {
|
|
|
50
50
|
|
|
51
51
|
const tableDataResults = this.updateData(historyJSON.data.data, this.fields$);
|
|
52
52
|
|
|
53
|
-
this.displayedColumns$ = this.getDisplayColumns(this.fields$
|
|
53
|
+
this.displayedColumns$ = this.getDisplayColumns(this.fields$);
|
|
54
54
|
|
|
55
55
|
this.repeatList$ = new MatTableDataSource(tableDataResults);
|
|
56
56
|
|
|
@@ -87,7 +87,7 @@ export class {{COMPONENT_CLASS_NAME}}Component implements OnInit {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
getDisplayColumns(fields: any[] = []) {
|
|
90
|
-
return fields.map(
|
|
90
|
+
return fields.map(field => {
|
|
91
91
|
return field.fieldName;
|
|
92
92
|
});
|
|
93
93
|
}
|
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
</ul>
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
15
|
-
<a *ngIf="configProps$.whatsnewlink
|
|
15
|
+
<a *ngIf="configProps$.whatsnewlink != ''" mat-raised-button color="primary" [href]="configProps$.whatsnewlink">See what's new</a>
|
|
16
16
|
</article>
|
|
17
17
|
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
@@ -51,7 +51,7 @@ export const Base{{COMPONENT_CLASS_NAME}}: Story = args => {
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
return <{{COMPONENT_CLASS_NAME}} {...props} {...args} value={value}
|
|
54
|
+
return <{{COMPONENT_CLASS_NAME}} {...props} {...args} value={value} />;
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
Base{{COMPONENT_CLASS_NAME}}.args = {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export const configProps = {
|
|
2
|
-
caption:
|
|
2
|
+
caption: 'Boolean Caption SDK',
|
|
3
3
|
value: false,
|
|
4
|
-
trueLabel:
|
|
5
|
-
falseLabel:
|
|
6
|
-
label:
|
|
7
|
-
helperText:
|
|
8
|
-
testId:
|
|
4
|
+
trueLabel: 'Yes',
|
|
5
|
+
falseLabel: 'No',
|
|
6
|
+
label: 'Boolean Sample',
|
|
7
|
+
helperText: 'Boolean Helper Text',
|
|
8
|
+
testId: 'boolean-12345678',
|
|
9
9
|
hasSuggestions: false,
|
|
10
10
|
readOnly: false,
|
|
11
11
|
disabled: false,
|
|
@@ -17,6 +17,6 @@ export const configProps = {
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
export const stateProps = {
|
|
20
|
-
value:
|
|
20
|
+
value: '.BooleanSample',
|
|
21
21
|
hasSuggestions: false
|
|
22
|
-
};
|
|
22
|
+
};
|
|
@@ -2,7 +2,7 @@ import { KeyboardDatePicker, MuiPickersUtilsProvider } from '@material-ui/picker
|
|
|
2
2
|
import DayjsUtils from '@date-io/dayjs';
|
|
3
3
|
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
4
4
|
import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
|
|
5
|
-
import { dateFormatInfoDefault, getDateFormatInfo} from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
|
|
5
|
+
import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
|
|
6
6
|
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
|
|
7
7
|
import { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
8
8
|
import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
@@ -118,7 +118,7 @@ export default function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}
|
|
|
118
118
|
InputProps={{ ...testProp }}
|
|
119
119
|
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
120
120
|
/>
|
|
121
|
-
|
|
121
|
+
</MuiPickersUtilsProvider>
|
|
122
122
|
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
123
123
|
);
|
|
124
124
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export const configProps = {
|
|
2
|
-
value:
|
|
3
|
-
label:
|
|
4
|
-
helperText:
|
|
5
|
-
testId:
|
|
2
|
+
value: '',
|
|
3
|
+
label: 'Date Sample',
|
|
4
|
+
helperText: 'Date Helper Text',
|
|
5
|
+
testId: 'date-12345678',
|
|
6
6
|
readOnly: false,
|
|
7
7
|
disabled: false,
|
|
8
8
|
required: true,
|
|
@@ -10,9 +10,9 @@ export const configProps = {
|
|
|
10
10
|
hideLabel: false,
|
|
11
11
|
displayMode: '',
|
|
12
12
|
validatemessage: ''
|
|
13
|
-
}
|
|
13
|
+
};
|
|
14
14
|
|
|
15
15
|
export const stateProps = {
|
|
16
|
-
value:
|
|
16
|
+
value: '.DateSample',
|
|
17
17
|
hasSuggestions: false
|
|
18
|
-
}
|
|
18
|
+
};
|
|
@@ -2,7 +2,7 @@ import { KeyboardDateTimePicker, MuiPickersUtilsProvider } from '@material-ui/pi
|
|
|
2
2
|
import DayjsUtils from '@date-io/dayjs';
|
|
3
3
|
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
4
4
|
import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters/';
|
|
5
|
-
import { dateFormatInfoDefault, getDateFormatInfo} from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
|
|
5
|
+
import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
|
|
6
6
|
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
|
|
7
7
|
import { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
8
8
|
|
|
@@ -106,8 +106,7 @@ export default function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}
|
|
|
106
106
|
onAccept={handleAccept}
|
|
107
107
|
data-test-id={testId}
|
|
108
108
|
/>
|
|
109
|
-
|
|
109
|
+
</MuiPickersUtilsProvider>
|
|
110
110
|
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
111
111
|
);
|
|
112
112
|
}
|
|
113
|
-
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export const configProps = {
|
|
2
|
-
value:
|
|
3
|
-
label:
|
|
4
|
-
helperText:
|
|
5
|
-
testId:
|
|
2
|
+
value: '',
|
|
3
|
+
label: 'Date Time Sample',
|
|
4
|
+
helperText: 'Date Time Helper Text',
|
|
5
|
+
testId: 'datetime-12345678',
|
|
6
6
|
readOnly: false,
|
|
7
7
|
disabled: false,
|
|
8
8
|
required: true,
|
|
@@ -13,6 +13,6 @@ export const configProps = {
|
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
export const stateProps = {
|
|
16
|
-
value:
|
|
16
|
+
value: '.DateTimeSample',
|
|
17
17
|
hasSuggestions: false
|
|
18
|
-
};
|
|
18
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { TextField } from '@material-ui/core';
|
|
2
|
+
import { NumericFormat } from 'react-number-format';
|
|
3
|
+
import { useState } from 'react';
|
|
3
4
|
import { getCurrencyCharacters, getCurrencyOptions } from '@pega/react-sdk-components/lib/components/field/Currency/currency-utils.js';
|
|
4
5
|
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
5
6
|
import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
|
|
@@ -7,13 +8,15 @@ import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpe
|
|
|
7
8
|
import { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
8
9
|
import Styled{{COMPONENT_CLASS_NAME}}Wrapper from './styles';
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
/* Using react-number-format component here, since it allows formatting decimal values,
|
|
12
|
+
as per the locale.
|
|
13
|
+
*/
|
|
11
14
|
|
|
12
15
|
interface {{COMPONENT_CLASS_NAME}}Props extends PConnFieldProps {
|
|
13
16
|
// If any, enter additional props that only exist on this componentName
|
|
14
17
|
currencyISOCode?: string;
|
|
15
18
|
decimalPrecision?: number;
|
|
16
|
-
showGroupSeparators?:
|
|
19
|
+
showGroupSeparators?: boolean;
|
|
17
20
|
formatter?: string;
|
|
18
21
|
}
|
|
19
22
|
|
|
@@ -38,13 +41,15 @@ export default function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}
|
|
|
38
41
|
displayMode,
|
|
39
42
|
hideLabel,
|
|
40
43
|
currencyISOCode = 'USD',
|
|
41
|
-
decimalPrecision
|
|
42
|
-
showGroupSeparators
|
|
44
|
+
decimalPrecision,
|
|
45
|
+
showGroupSeparators,
|
|
43
46
|
testId,
|
|
44
47
|
placeholder,
|
|
45
48
|
formatter
|
|
46
49
|
} = props;
|
|
47
50
|
|
|
51
|
+
const [values, setValues] = useState(value.toString());
|
|
52
|
+
|
|
48
53
|
const pConn = getPConnect();
|
|
49
54
|
const actions = pConn.getActionsApi();
|
|
50
55
|
const propName = (pConn.getStateProps() as any).value;
|
|
@@ -57,6 +62,12 @@ export default function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}
|
|
|
57
62
|
|
|
58
63
|
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
59
64
|
|
|
65
|
+
let readOnlyProp = {}; // Note: empty if NOT ReadOnly
|
|
66
|
+
|
|
67
|
+
if (readOnly) {
|
|
68
|
+
readOnlyProp = { readOnly: true };
|
|
69
|
+
}
|
|
70
|
+
|
|
60
71
|
let formattedValue = '';
|
|
61
72
|
if (formatter === 'Currency') {
|
|
62
73
|
formattedValue = format(value, formatter.toLowerCase(), theCurrencyOptions);
|
|
@@ -76,37 +87,42 @@ export default function {{COMPONENT_CLASS_NAME}}(props: {{COMPONENT_CLASS_NAME}}
|
|
|
76
87
|
'data-test-id': testId
|
|
77
88
|
};
|
|
78
89
|
|
|
79
|
-
function decimalOnBlur(
|
|
80
|
-
handleEvent(actions, 'changeNblur', propName,
|
|
90
|
+
function decimalOnBlur() {
|
|
91
|
+
handleEvent(actions, 'changeNblur', propName, values);
|
|
81
92
|
}
|
|
82
93
|
|
|
94
|
+
const handleChange = val => {
|
|
95
|
+
setValues(val.value);
|
|
96
|
+
};
|
|
97
|
+
|
|
83
98
|
return (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
99
|
+
<Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
100
|
+
<NumericFormat
|
|
101
|
+
valueIsNumericString
|
|
102
|
+
fullWidth
|
|
103
|
+
variant={readOnly ? 'standard' : 'outlined'}
|
|
104
|
+
helperText={helperTextToDisplay}
|
|
105
|
+
placeholder={placeholder ?? ''}
|
|
106
|
+
size='small'
|
|
107
|
+
required={required}
|
|
108
|
+
disabled={disabled}
|
|
109
|
+
error={status === 'error'}
|
|
110
|
+
label={label}
|
|
111
|
+
value={values}
|
|
112
|
+
onValueChange={val => {
|
|
113
|
+
handleChange(val);
|
|
114
|
+
}}
|
|
115
|
+
onBlur={!readOnly ? decimalOnBlur : undefined}
|
|
116
|
+
prefix={readOnly && formatter === 'Currency' ? theCurrSym : ''}
|
|
117
|
+
decimalSeparator={theCurrDec}
|
|
118
|
+
thousandSeparator={showGroupSeparators ? theCurrSep : ''}
|
|
119
|
+
decimalScale={readOnly && formatter === 'Currency' ? undefined : decimalPrecision}
|
|
120
|
+
{{! pick new delimiters for mustache }}
|
|
121
|
+
{{=<% %>=}}
|
|
122
|
+
InputProps={{ ...readOnlyProp, inputProps: { ...testProp } }}
|
|
123
|
+
<%={{ }}=%> {{! revert delimiters for mustache }}
|
|
124
|
+
customInput={TextField}
|
|
125
|
+
/>
|
|
126
|
+
</Styled{{COMPONENT_CLASS_NAME}}Wrapper>
|
|
111
127
|
);
|
|
112
128
|
}
|