@pega/dx-component-builder-sdk 0.23.14 → 0.23.16

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.
Files changed (159) hide show
  1. package/package.json +1 -1
  2. package/src/constants.js +8 -0
  3. package/src/tasks/create/templates/Constellation/field/Boolean/index.tsx.mustache +1 -1
  4. package/src/tasks/create/templates/SDK-Angular/field/Boolean/boolean.component.html.mustache +5 -1
  5. package/src/tasks/create/templates/SDK-Angular/field/Boolean/boolean.component.ts.mustache +6 -0
  6. package/src/tasks/create/templates/SDK-Angular/field/Date/date.component.html.mustache +5 -1
  7. package/src/tasks/create/templates/SDK-Angular/field/Date/date.component.ts.mustache +7 -0
  8. package/src/tasks/create/templates/SDK-Angular/template/DETAILS/details.component.ts.mustache +2 -1
  9. package/src/tasks/create/templates/SDK-Angular/template/FORM/form.component.scss.mustache +14 -5
  10. package/src/tasks/create/templates/SDK-React/field/Boolean/demo.stories.tsx.mustache +8 -4
  11. package/src/tasks/create/templates/SDK-React/field/Date/demo.stories.tsx.mustache +17 -15
  12. package/src/tasks/create/templates/SDK-React/field/DateTime/demo.stories.tsx.mustache +15 -14
  13. package/src/tasks/create/templates/SDK-React/field/Decimal/demo.stories.tsx.mustache +15 -14
  14. package/src/tasks/create/templates/SDK-React/field/Decimal/index.tsx.mustache +1 -1
  15. package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/demo.stories.tsx.mustache +14 -12
  16. package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/demo.stories.tsx.mustache +2 -2
  17. package/src/tasks/create/templates/SDK-React/field/Integer/demo.stories.tsx.mustache +3 -3
  18. package/src/tasks/create/templates/SDK-React/field/Picklist/demo.stories.tsx.mustache +2 -3
  19. package/src/tasks/create/templates/SDK-React/field/Picklist-Autocomplete/demo.stories.tsx.mustache +3 -3
  20. package/src/tasks/create/templates/SDK-React/field/Picklist-RadioButtons/demo.stories.tsx.mustache +6 -4
  21. package/src/tasks/create/templates/SDK-React/field/Text/demo.stories.tsx.mustache +8 -4
  22. package/src/tasks/create/templates/SDK-React/field/Text-Email/demo.stories.tsx.mustache +8 -4
  23. package/src/tasks/create/templates/SDK-React/field/Text-Input/demo.stories.tsx.mustache +8 -4
  24. package/src/tasks/create/templates/SDK-React/field/Text-Paragraph/demo.stories.tsx.mustache +8 -5
  25. package/src/tasks/create/templates/SDK-React/field/Text-Phone/demo.stories.tsx.mustache +6 -4
  26. package/src/tasks/create/templates/SDK-React/field/Text-URL/demo.stories.tsx.mustache +8 -4
  27. package/src/tasks/create/templates/SDK-React/field/TimeOfDay/demo.stories.tsx.mustache +6 -4
  28. package/src/tasks/create/templates/SDK-React/template/DETAILS/demo.stories.tsx.mustache +22 -22
  29. package/src/tasks/create/templates/SDK-React/template/DETAILS-region/demo.stories.tsx.mustache +17 -17
  30. package/src/tasks/create/templates/SDK-React/template/FORM/demo.stories.tsx.mustache +30 -18
  31. package/src/tasks/create/templates/SDK-React/template/FORM-region/demo.stories.tsx.mustache +50 -24
  32. package/src/tasks/create/templates/SDK-React/template/PAGE/demo.stories.tsx.mustache +37 -21
  33. package/src/tasks/create/templates/SDK-React/widget/CASE/demo.stories.tsx.mustache +22 -10
  34. package/src/tasks/create/templates/SDK-React/widget/PAGE/demo.stories.tsx.mustache +3 -4
  35. package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/demo.stories.tsx.mustache +21 -9
  36. package/tests/assets/sdk-a/components/create/override-sdk/designSystemExtension/field-group/field-group.component.html +21 -0
  37. package/tests/assets/sdk-a/components/create/override-sdk/designSystemExtension/field-group/field-group.component.scss +18 -0
  38. package/tests/assets/sdk-a/components/create/override-sdk/designSystemExtension/field-group/field-group.component.spec.ts +21 -0
  39. package/tests/assets/sdk-a/components/create/override-sdk/designSystemExtension/field-group/field-group.component.ts +24 -0
  40. package/tests/assets/sdk-a/components/create/override-sdk/designSystemExtension/material-details-fields/material-details-fields.component.html +8 -2
  41. package/tests/assets/sdk-a/components/create/override-sdk/field/check-box/check-box.component.html +5 -1
  42. package/tests/assets/sdk-a/components/create/override-sdk/field/check-box/check-box.component.ts +6 -0
  43. package/tests/assets/sdk-a/components/create/override-sdk/field/date/date.component.html +5 -1
  44. package/tests/assets/sdk-a/components/create/override-sdk/field/date/date.component.ts +7 -0
  45. package/tests/assets/sdk-a/components/create/override-sdk/field/group/config-ext.json +8 -0
  46. package/tests/assets/sdk-a/components/create/override-sdk/field/group/group.component.html +25 -0
  47. package/tests/assets/sdk-a/components/create/override-sdk/field/group/group.component.scss +0 -0
  48. package/tests/assets/sdk-a/components/create/override-sdk/field/group/group.component.spec.ts +21 -0
  49. package/tests/assets/sdk-a/components/create/override-sdk/field/group/group.component.ts +84 -0
  50. package/tests/assets/sdk-a/components/create/override-sdk/template/app-shell/app-shell.component.ts +2 -2
  51. package/tests/assets/sdk-a/components/create/override-sdk/template/case-view/case-view.component.ts +1 -1
  52. package/tests/assets/sdk-a/components/create/override-sdk/template/default-form/default-form.component.scss +9 -5
  53. package/tests/assets/sdk-a/components/create/override-sdk/template/details/details.component.ts +2 -1
  54. package/tests/assets/sdk-a/components/create/override-sdk/template/list-view/utils.ts +4 -2
  55. package/tests/assets/sdk-a/components/createAll/custom-sdk/field/pega-dxil-my-boolean/pega-dxil-my-boolean.component.html +5 -1
  56. package/tests/assets/sdk-a/components/createAll/custom-sdk/field/pega-dxil-my-boolean/pega-dxil-my-boolean.component.ts +6 -0
  57. package/tests/assets/sdk-a/components/createAll/custom-sdk/field/pega-dxil-my-date/pega-dxil-my-date.component.html +5 -1
  58. package/tests/assets/sdk-a/components/createAll/custom-sdk/field/pega-dxil-my-date/pega-dxil-my-date.component.ts +7 -0
  59. package/tests/assets/sdk-a/components/createAll/custom-sdk/template/pega-dxil-my-details/pega-dxil-my-details.component.ts +2 -1
  60. package/tests/assets/sdk-a/components/createAll/custom-sdk/template/pega-dxil-my-form/pega-dxil-my-form.component.scss +14 -5
  61. package/tests/assets/sdk-a/components/createAll/override-sdk/designSystemExtension/field-group/field-group.component.html +21 -0
  62. package/tests/assets/sdk-a/components/createAll/override-sdk/designSystemExtension/field-group/field-group.component.scss +18 -0
  63. package/tests/assets/sdk-a/components/createAll/override-sdk/designSystemExtension/field-group/field-group.component.spec.ts +21 -0
  64. package/tests/assets/sdk-a/components/createAll/override-sdk/designSystemExtension/field-group/field-group.component.ts +24 -0
  65. package/tests/assets/sdk-a/components/createAll/override-sdk/designSystemExtension/material-details-fields/material-details-fields.component.html +8 -2
  66. package/tests/assets/sdk-a/components/createAll/override-sdk/field/check-box/check-box.component.html +5 -1
  67. package/tests/assets/sdk-a/components/createAll/override-sdk/field/check-box/check-box.component.ts +6 -0
  68. package/tests/assets/sdk-a/components/createAll/override-sdk/field/date/date.component.html +5 -1
  69. package/tests/assets/sdk-a/components/createAll/override-sdk/field/date/date.component.ts +7 -0
  70. package/tests/assets/sdk-a/components/createAll/override-sdk/field/group/config-ext.json +8 -0
  71. package/tests/assets/sdk-a/components/createAll/override-sdk/field/group/group.component.html +25 -0
  72. package/tests/assets/sdk-a/components/createAll/override-sdk/field/group/group.component.scss +0 -0
  73. package/tests/assets/sdk-a/components/createAll/override-sdk/field/group/group.component.spec.ts +21 -0
  74. package/tests/assets/sdk-a/components/createAll/override-sdk/field/group/group.component.ts +84 -0
  75. package/tests/assets/sdk-a/components/createAll/override-sdk/template/app-shell/app-shell.component.ts +2 -2
  76. package/tests/assets/sdk-a/components/createAll/override-sdk/template/case-view/case-view.component.ts +1 -1
  77. package/tests/assets/sdk-a/components/createAll/override-sdk/template/default-form/default-form.component.scss +9 -5
  78. package/tests/assets/sdk-a/components/createAll/override-sdk/template/details/details.component.ts +2 -1
  79. package/tests/assets/sdk-a/components/createAll/override-sdk/template/list-view/utils.ts +4 -2
  80. package/tests/assets/sdk-r/components/create/custom-sdk/field/Pega_DXIL_MyTestText/demo.stories.tsx +8 -4
  81. package/tests/assets/sdk-r/components/create/custom-sdk/field/Pega_DXIL_MyTestText/index.tsx +15 -16
  82. package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/FieldGroup/FieldGroup.tsx +35 -6
  83. package/tests/assets/sdk-r/components/create/override-sdk/field/Checkbox/Checkbox.tsx +7 -4
  84. package/tests/assets/sdk-r/components/create/override-sdk/field/Group/Group.tsx +37 -0
  85. package/tests/assets/sdk-r/components/create/override-sdk/field/Group/config-ext.json +8 -0
  86. package/tests/assets/sdk-r/components/create/override-sdk/field/Group/index.tsx +1 -0
  87. package/tests/assets/sdk-r/components/create/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +14 -1
  88. package/tests/assets/sdk-r/components/create/override-sdk/template/DefaultForm/DefaultForm.css +6 -2
  89. package/tests/assets/sdk-r/components/create/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +19 -1
  90. package/tests/assets/sdk-r/components/create/override-sdk/widget/FileUtility/FileUtility.tsx +22 -16
  91. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/PConnProps.d.ts +46 -0
  92. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/demo.stories.tsx +54 -0
  93. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/index.tsx +73 -0
  94. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/mock.ts +15 -0
  95. package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/styles.ts +15 -0
  96. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyBoolean/demo.stories.tsx +8 -4
  97. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyBoolean/index.tsx +23 -21
  98. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyCurrency/demo.stories.tsx +14 -12
  99. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyCurrency/index.tsx +0 -1
  100. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDate/demo.stories.tsx +17 -15
  101. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDate/index.tsx +21 -23
  102. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/demo.stories.tsx +15 -14
  103. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/index.tsx +20 -22
  104. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDecimal/demo.stories.tsx +15 -14
  105. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDecimal/index.tsx +1 -2
  106. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyEmail/demo.stories.tsx +8 -4
  107. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyEmail/index.tsx +23 -24
  108. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyInteger/demo.stories.tsx +3 -3
  109. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyInteger/index.tsx +0 -1
  110. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyParagraph/demo.stories.tsx +8 -5
  111. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyParagraph/index.tsx +18 -19
  112. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/demo.stories.tsx +2 -2
  113. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/index.tsx +0 -1
  114. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPhone/demo.stories.tsx +6 -4
  115. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPhone/index.tsx +33 -34
  116. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPicklist/demo.stories.tsx +2 -3
  117. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPicklist/index.tsx +0 -1
  118. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyRadiobuttons/demo.stories.tsx +6 -4
  119. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyRadiobuttons/index.tsx +22 -23
  120. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MySearchbox/demo.stories.tsx +3 -3
  121. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MySearchbox/index.tsx +28 -29
  122. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/config.json +83 -0
  123. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/demo.stories.tsx +59 -0
  124. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/index.tsx +101 -0
  125. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/mock.ts +16 -0
  126. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/styles.js +7 -0
  127. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyText/demo.stories.tsx +8 -4
  128. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyText/index.tsx +15 -16
  129. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTextInput/demo.stories.tsx +8 -4
  130. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTextInput/index.tsx +15 -16
  131. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTimeOfDay/demo.stories.tsx +6 -4
  132. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTimeOfDay/index.tsx +1 -2
  133. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyURL/demo.stories.tsx +8 -4
  134. package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyURL/index.tsx +16 -17
  135. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyDetails/demo.stories.tsx +22 -22
  136. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyDetails/index.tsx +16 -17
  137. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyForm/demo.stories.tsx +56 -18
  138. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyForm/index.tsx +3 -4
  139. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyPage/demo.stories.tsx +37 -21
  140. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyPage/index.tsx +4 -5
  141. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyTwoColumnDetails/demo.stories.tsx +17 -17
  142. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyTwoColumnDetails/index.tsx +16 -17
  143. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyTwoColumnForm/demo.stories.tsx +50 -24
  144. package/tests/assets/sdk-r/components/createAll/custom-sdk/template/Pega_DXIL_MyTwoColumnForm/index.tsx +8 -9
  145. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyCaseWidget/demo.stories.tsx +22 -10
  146. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyCaseWidget/index.tsx +10 -11
  147. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageCaseWidget/demo.stories.tsx +21 -9
  148. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageCaseWidget/index.tsx +34 -34
  149. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageWidget/demo.stories.tsx +3 -4
  150. package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageWidget/index.tsx +23 -24
  151. package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/FieldGroup/FieldGroup.tsx +35 -6
  152. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Checkbox/Checkbox.tsx +7 -4
  153. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Group/Group.tsx +37 -0
  154. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Group/config-ext.json +8 -0
  155. package/tests/assets/sdk-r/components/createAll/override-sdk/field/Group/index.tsx +1 -0
  156. package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +14 -1
  157. package/tests/assets/sdk-r/components/createAll/override-sdk/template/DefaultForm/DefaultForm.css +6 -2
  158. package/tests/assets/sdk-r/components/createAll/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +19 -1
  159. package/tests/assets/sdk-r/components/createAll/override-sdk/widget/FileUtility/FileUtility.tsx +22 -16
@@ -1,27 +1,31 @@
1
1
  .psdk-default-form-one-column {
2
2
  display: grid;
3
3
  grid-template-columns: repeat(1, minmax(0, 1fr));
4
- gap: calc(1rem);
4
+ column-gap: calc(1rem);
5
5
  }
6
6
 
7
7
  .psdk-default-form-two-column {
8
8
  display: grid;
9
9
  grid-template-columns: repeat(2, 1fr);
10
- gap: calc(1rem);
10
+ column-gap: calc(1rem);
11
11
  }
12
12
 
13
13
  .psdk-default-form-three-column {
14
14
  display: grid;
15
15
  grid-template-columns: repeat(3, 1fr);
16
- gap: calc(1rem);
16
+ column-gap: calc(1rem);
17
+ }
18
+
19
+ .psdk-default-form-three-column .grid-column {
20
+ grid-column: 1 / span 3;
17
21
  }
18
22
 
19
23
  .psdk-default-form-two-column .grid-column {
20
24
  grid-column: 1 / span 2;
21
25
  }
22
26
 
23
- .psdk-default-form-three-column .grid-column {
24
- grid-column: 1 / span 3;
27
+ .psdk-default-form-one-column .grid-column {
28
+ grid-column: 1;
25
29
  }
26
30
 
27
31
  .template-title-container {
@@ -29,3 +33,8 @@
29
33
  font-weight: 600;
30
34
  margin: 10px 0px;
31
35
  }
36
+
37
+ .psdk-default-form-instruction-text {
38
+ padding-top: 0.625rem;
39
+ padding-bottom: 0.625rem;
40
+ }
@@ -0,0 +1,21 @@
1
+ <div class="field-group-container">
2
+ <div *ngIf="name" class="field-group-heading">
3
+ <span *ngIf="collapsible; else no_collapse" id="field-group-header" class="field-group-header" (click)="headerClickHandler()">
4
+ <mat-icon *ngIf="collapsed; else down_arrow" aria-hidden="false" aria-label="Arrow Right" fontIcon="keyboard_arrow_right"></mat-icon>
5
+ <ng-template #down_arrow>
6
+ <mat-icon aria-hidden="false" aria-label="Arrow Down" fontIcon="keyboard_arrow_down"></mat-icon>
7
+ </ng-template>
8
+ <b>{{ name }}</b>
9
+ </span>
10
+ <ng-template #no_collapse>
11
+ <span>{{ name }}</span>
12
+ </ng-template>
13
+ </div>
14
+
15
+ <div *ngIf="instructions && instructions !== 'none'" class="field-group-instructions">
16
+ <div key="instructions" id="instruction-text" [innerHTML]="instructions"></div>
17
+ </div>
18
+ <div *ngIf="!collapsed" class="field-group-content">
19
+ <ng-container [ngTemplateOutlet]="childrenTemplate"></ng-container>
20
+ </div>
21
+ </div>
@@ -0,0 +1,18 @@
1
+ .field-group-container {
2
+ .field-group-heading {
3
+ padding-top: 8px;
4
+ padding-bottom: 8px;
5
+ font-weight: bold;
6
+
7
+ .field-group-header {
8
+ gap: 5px;
9
+ display: flex;
10
+ align-items: center;
11
+ cursor: pointer;
12
+ }
13
+ }
14
+
15
+ .field-group-instructions {
16
+ padding: 5px 0;
17
+ }
18
+ }
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { FieldGroupComponent } from './field-group.component';
4
+
5
+ describe('FieldGroupComponent', () => {
6
+ let component: FieldGroupComponent;
7
+ let fixture: ComponentFixture<FieldGroupComponent>;
8
+
9
+ beforeEach(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [FieldGroupComponent]
12
+ });
13
+ fixture = TestBed.createComponent(FieldGroupComponent);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,24 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, TemplateRef } from '@angular/core';
3
+ import { MatGridListModule } from '@angular/material/grid-list';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+
6
+ @Component({
7
+ selector: 'app-field-group',
8
+ templateUrl: './field-group.component.html',
9
+ styleUrls: ['./field-group.component.scss'],
10
+ standalone: true,
11
+ imports: [CommonModule, MatGridListModule, MatIconModule]
12
+ })
13
+ export class FieldGroupComponent {
14
+ @Input() name?: string;
15
+ @Input() collapsible = false;
16
+ @Input() instructions: string;
17
+ @Input() childrenTemplate: TemplateRef<any>;
18
+
19
+ collapsed = false;
20
+
21
+ headerClickHandler() {
22
+ this.collapsed = !this.collapsed;
23
+ }
24
+ }
@@ -1,8 +1,14 @@
1
1
  <div id="details-fields-list">
2
2
  <div *ngFor="let field of arFields$">
3
- <div *ngIf="field.type === 'reference'; else showDetails">
4
- <component-mapper name="View" [props]="{ pConn$: field.pConn }"></component-mapper>
3
+ <div *ngIf="field.type === 'group'; else noGroup">
4
+ <component-mapper name="Group" [props]="{ pConn$: field.pConn }"></component-mapper>
5
5
  </div>
6
+ <ng-template #noGroup>
7
+ <div *ngIf="field.type === 'reference'; else showDetails">
8
+ <component-mapper name="View" [props]="{ pConn$: field.pConn }"></component-mapper>
9
+ </div>
10
+ </ng-template>
11
+
6
12
  <ng-template #showDetails>
7
13
  <div class="psdk-grid-filter" *ngIf="field.config.label">
8
14
  <div class="psdk-details-fields-label">
@@ -1,5 +1,9 @@
1
1
  <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$, displayMode$ }"></component-mapper>
2
+ <component-mapper
3
+ *ngIf="bVisible$ !== false"
4
+ name="FieldValueList"
5
+ [props]="{ label$: caption$, value$: value$ ? trueLabel$ : falseLabel$, displayMode$ }"
6
+ ></component-mapper>
3
7
  </div>
4
8
  <ng-template #noDisplayMode>
5
9
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
@@ -13,6 +13,8 @@ interface CheckboxProps extends Omit<PConnFieldProps, 'value'> {
13
13
  // Everything from PConnFieldProps except value and change type of value to boolean
14
14
  value: boolean;
15
15
  caption?: string;
16
+ trueLabel?: string;
17
+ falseLabel?: string;
16
18
  }
17
19
 
18
20
  @Component({
@@ -45,6 +47,8 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
45
47
  bHasForm$ = true;
46
48
  componentReference = '';
47
49
  helperText: string;
50
+ trueLabel$?: string;
51
+ falseLabel$?: string;
48
52
 
49
53
  fieldControl = new FormControl('', null);
50
54
 
@@ -116,6 +120,8 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
116
120
 
117
121
  this.caption$ = this.configProps$.caption;
118
122
  this.helperText = this.configProps$.helperText;
123
+ this.trueLabel$ = this.configProps$.trueLabel;
124
+ this.falseLabel$ = this.configProps$.falseLabel;
119
125
 
120
126
  // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
121
127
  setTimeout(() => {
@@ -1,5 +1,9 @@
1
1
  <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$, displayMode$ }"></component-mapper>
2
+ <component-mapper
3
+ *ngIf="bVisible$ !== false"
4
+ name="FieldValueList"
5
+ [props]="{ label$, value$: getFormattedValue(), displayMode$ }"
6
+ ></component-mapper>
3
7
  </div>
4
8
  <ng-template #noDisplayMode>
5
9
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
@@ -14,6 +14,7 @@ import { Utils } from '@pega/angular-sdk-components';
14
14
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
15
15
  import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/angular-sdk-components';
16
16
  import { PConnFieldProps } from '@pega/angular-sdk-components';
17
+ import { format } from '@pega/angular-sdk-components';
17
18
 
18
19
  interface DateProps extends PConnFieldProps {
19
20
  // If any, enter additional props that only exist on Date here
@@ -242,4 +243,10 @@ export class DateComponent implements OnInit, OnDestroy {
242
243
  }
243
244
  return errMessage;
244
245
  }
246
+
247
+ getFormattedValue() {
248
+ return format(this.value$, 'date', {
249
+ format: this.theDateFormat.dateFormatString
250
+ });
251
+ }
245
252
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "componentKey": "Group",
3
+ "name": "Group",
4
+ "label": "Field Group",
5
+ "description": "Field Group",
6
+ "type": "Group",
7
+ "properties": []
8
+ }
@@ -0,0 +1,25 @@
1
+ <ng-container *ngIf="visibility$">
2
+ <component-mapper
3
+ name="FieldGroup"
4
+ [props]="{
5
+ name: showHeading$ ? heading$ : undefined,
6
+ collapsible: collapsible$,
7
+ instructions: instructions$,
8
+ childrenTemplate: childrenTemplate
9
+ }"
10
+ >
11
+ </component-mapper>
12
+
13
+ <ng-template #childrenTemplate>
14
+ <div *ngFor="let kid of arChildren$">
15
+ <component-mapper
16
+ [name]="kid.getPConnect().getComponentName()"
17
+ [props]="{
18
+ pConn$: kid.getPConnect(),
19
+ formGroup$: formGroup$
20
+ }"
21
+ errorMsg="Field Group wants component not yet available: {{ kid.getPConnect().getComponentName() }}"
22
+ ></component-mapper>
23
+ </div>
24
+ </ng-template>
25
+ </ng-container>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { GroupComponent } from './group.component';
4
+
5
+ describe('GroupComponent', () => {
6
+ let component: GroupComponent;
7
+ let fixture: ComponentFixture<GroupComponent>;
8
+
9
+ beforeEach(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [GroupComponent]
12
+ });
13
+ fixture = TestBed.createComponent(GroupComponent);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,84 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, Input, OnInit } from '@angular/core';
3
+ import { FormGroup } from '@angular/forms';
4
+ import { ReferenceComponent } from '@pega/angular-sdk-components';
5
+ import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
6
+ import { ComponentMapperComponent } from '@pega/angular-sdk-components';
7
+ import { PConnFieldProps } from '@pega/angular-sdk-components';
8
+
9
+ interface GroupProps extends PConnFieldProps {
10
+ // If any, enter additional props that only exist on Group here
11
+ showHeading: boolean;
12
+ heading: string;
13
+ instructions: string;
14
+ collapsible: boolean;
15
+ }
16
+
17
+ @Component({
18
+ selector: 'app-group',
19
+ templateUrl: './group.component.html',
20
+ styleUrls: ['./group.component.scss'],
21
+ standalone: true,
22
+ imports: [CommonModule, forwardRef(() => ComponentMapperComponent)]
23
+ })
24
+ export class GroupComponent implements OnInit {
25
+ @Input() pConn$: typeof PConnect;
26
+ @Input() formGroup$: FormGroup;
27
+
28
+ arChildren$: any[];
29
+ visibility$?: boolean;
30
+ showHeading$?: boolean;
31
+ heading$: string;
32
+ instructions$: string;
33
+ collapsible$: boolean;
34
+
35
+ // Used with AngularPConnect
36
+ angularPConnectData: AngularPConnectData = {};
37
+ configProps$: GroupProps;
38
+
39
+ constructor(private angularPConnect: AngularPConnectService) {}
40
+
41
+ ngOnInit(): void {
42
+ this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
43
+
44
+ this.checkAndUpdate();
45
+ }
46
+
47
+ // Callback passed when subscribing to store change
48
+ onStateChange() {
49
+ this.checkAndUpdate();
50
+ }
51
+
52
+ checkAndUpdate() {
53
+ // Should always check the bridge to see if the component should
54
+ // update itself (re-render)
55
+ const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
56
+
57
+ // ONLY call updateSelf when the component should update
58
+ if (bUpdateSelf) {
59
+ this.updateSelf();
60
+ }
61
+ }
62
+
63
+ updateSelf(): void {
64
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as GroupProps;
65
+ this.arChildren$ = ReferenceComponent.normalizePConnArray(this.pConn$.getChildren());
66
+ this.visibility$ = this.configProps$.visibility;
67
+ this.showHeading$ = this.configProps$.showHeading;
68
+ this.heading$ = this.configProps$.heading;
69
+ this.instructions$ = this.configProps$.instructions;
70
+ this.collapsible$ = this.configProps$.collapsible;
71
+
72
+ if (this.configProps$.displayMode === 'LABELS_LEFT') {
73
+ if (this.configProps$.visibility === undefined) this.visibility$ = true;
74
+
75
+ this.arChildren$.forEach(child => {
76
+ const pConn = child.getPConnect();
77
+ pConn.setInheritedProp('displayMode', 'LABELS_LEFT');
78
+ pConn.setInheritedProp('readOnly', true);
79
+
80
+ return child;
81
+ });
82
+ }
83
+ }
84
+ }
@@ -143,7 +143,7 @@ export class AppShellComponent implements OnInit, OnDestroy {
143
143
  this.sErrorMessages = this.sErrorMessages.concat(errorMessages.actionMessage).concat('\n');
144
144
 
145
145
  if (this.bOkDisplayError) {
146
- const config = { panelClass: ['snackbar-newline'] };
146
+ const config = { panelClass: ['snackbar-newline'], duration: 5000 };
147
147
  this.snackBarRef = this.snackBar.open(this.sErrorMessages, 'Ok', config);
148
148
  }
149
149
  }
@@ -159,7 +159,7 @@ export class AppShellComponent implements OnInit, OnDestroy {
159
159
  this.bOkDisplayError = true;
160
160
 
161
161
  if (this.bOkDisplayError) {
162
- const config = { panelClass: ['snackbar-newline'] };
162
+ const config = { panelClass: ['snackbar-newline'], duration: 5000 };
163
163
  this.snackBarRef = this.snackBar.open(this.sErrorMessages, 'Ok', config);
164
164
  }
165
165
  // this.snackBarRef.afterDismissed().subscribe( info => {
@@ -223,7 +223,7 @@ export class CaseViewComponent implements OnInit, OnDestroy {
223
223
  const actionsAPI = this.pConn$.getActionsApi();
224
224
  const openLocalAction = actionsAPI.openLocalAction.bind(actionsAPI);
225
225
 
226
- openLocalAction(editAction.ID, { ...editAction });
226
+ openLocalAction(editAction.ID, { ...editAction, containerName: 'modal', type: 'express' });
227
227
  }
228
228
 
229
229
  _menuActionClick(data) {
@@ -1,27 +1,31 @@
1
1
  .psdk-default-form-one-column {
2
2
  display: grid;
3
3
  grid-template-columns: repeat(1, minmax(0, 1fr));
4
- gap: calc(1rem);
4
+ column-gap: calc(1rem);
5
5
  }
6
6
 
7
7
  .psdk-default-form-two-column {
8
8
  display: grid;
9
9
  grid-template-columns: repeat(2, 1fr);
10
- gap: calc(1rem);
10
+ column-gap: calc(1rem);
11
11
  }
12
12
 
13
13
  .psdk-default-form-three-column {
14
14
  display: grid;
15
15
  grid-template-columns: repeat(3, 1fr);
16
- gap: calc(1rem);
16
+ column-gap: calc(1rem);
17
+ }
18
+
19
+ .psdk-default-form-three-column .grid-column {
20
+ grid-column: 1 / span 3;
17
21
  }
18
22
 
19
23
  .psdk-default-form-two-column .grid-column {
20
24
  grid-column: 1 / span 2;
21
25
  }
22
26
 
23
- .psdk-default-form-three-column .grid-column {
24
- grid-column: 1 / span 3;
27
+ .psdk-default-form-one-column .grid-column {
28
+ grid-column: 1;
25
29
  }
26
30
 
27
31
  .template-title-container {
@@ -76,7 +76,7 @@ export class DetailsComponent implements OnInit, OnDestroy {
76
76
  fields?.forEach(field => {
77
77
  const thePConn = field.getPConnect();
78
78
  const theCompType = thePConn.getComponentName().toLowerCase();
79
- if (theCompType === 'reference') {
79
+ if (theCompType === 'reference' || theCompType === 'group') {
80
80
  const configProps = thePConn.getConfigProps();
81
81
  configProps.readOnly = true;
82
82
  configProps.displayMode = 'LABELS_LEFT';
@@ -89,6 +89,7 @@ export class DetailsComponent implements OnInit, OnDestroy {
89
89
  };
90
90
  const viewContConfig = {
91
91
  meta: {
92
+ ...thePConn.getMetadata(),
92
93
  type: theCompType,
93
94
  config: configProps
94
95
  },
@@ -680,10 +680,12 @@ export const readContextResponse = async (context, params) => {
680
680
  const dataViewName = PCore.getDataTypeUtils().getSavableDataPage(classID);
681
681
  const dataPageKeys = PCore.getDataTypeUtils().getDataPageKeys(dataViewName);
682
682
  dataPageKeys?.forEach(item => (item.isAlternateKeyStorage ? compositeKeys.push(item.linkedField) : compositeKeys.push(item.keyName)));
683
- if (compositeKeys.length) {
683
+ if (compositeKeys.length && otherContext) {
684
684
  otherContext.setCompositeKeys(compositeKeys);
685
685
  }
686
- otherContext.fetchRowActionDetails = null;
686
+ if (otherContext) {
687
+ otherContext.fetchRowActionDetails = null;
688
+ }
687
689
  }
688
690
 
689
691
  const presetArray = [];
@@ -14,7 +14,7 @@ const meta: Meta<typeof PegaDxilMyTestText> = {
14
14
  export default meta;
15
15
  type Story = StoryObj<typeof PegaDxilMyTestText>;
16
16
 
17
- export const BasePegaDxilMyTestText: Story = (args) => {
17
+ export const BasePegaDxilMyTestText: Story = args => {
18
18
  const [value, setValue] = useState(configProps.value);
19
19
 
20
20
  const props = {
@@ -34,8 +34,12 @@ export const BasePegaDxilMyTestText: Story = (args) => {
34
34
  }
35
35
  };
36
36
  },
37
- onChange: (event) => { setValue(event.target.value); },
38
- onBlur: () => { return configProps.value; }
37
+ onChange: event => {
38
+ setValue(event.target.value);
39
+ },
40
+ onBlur: () => {
41
+ return configProps.value;
42
+ }
39
43
  };
40
44
 
41
45
  return <PegaDxilMyTestText {...props} {...args} />;
@@ -51,5 +55,5 @@ BasePegaDxilMyTestText.args = {
51
55
  status: configProps.status,
52
56
  hideLabel: configProps.hideLabel,
53
57
  displayMode: configProps.displayMode,
54
- validatemessage: configProps.validatemessage,
58
+ validatemessage: configProps.validatemessage
55
59
  };
@@ -14,7 +14,6 @@ interface PegaDxilMyTestTextProps extends PConnFieldProps {
14
14
  // Duplicated runtime code from React SDK
15
15
 
16
16
  // props passed in combination of props from property panel (config.json) and run time props from Constellation
17
- // any default values in config.pros should be set in defaultProps at bottom of this file
18
17
  export default function PegaDxilMyTestText(props: PegaDxilMyTestTextProps) {
19
18
  // Get emitted components from map (so we can get any override that may exist)
20
19
  const FieldValueList = getComponentFromMap('FieldValueList');
@@ -81,21 +80,21 @@ export default function PegaDxilMyTestText(props: PegaDxilMyTestTextProps) {
81
80
 
82
81
  return (
83
82
  <StyledPegaDxilMyTestTextWrapper>
84
- <TextField
85
- fullWidth
86
- variant={readOnly ? 'standard' : 'outlined'}
87
- helperText={helperTextToDisplay}
88
- placeholder={placeholder ?? ''}
89
- size='small'
90
- required={required}
91
- disabled={disabled}
92
- onChange={handleChange}
93
- onBlur={!readOnly ? handleBlur : undefined}
94
- error={status === 'error'}
95
- label={label}
96
- value={inputValue}
97
- InputProps={{ ...readOnlyProp, inputProps: { maxLength, ...testProp } }}
98
- />
83
+ <TextField
84
+ fullWidth
85
+ variant={readOnly ? 'standard' : 'outlined'}
86
+ helperText={helperTextToDisplay}
87
+ placeholder={placeholder ?? ''}
88
+ size='small'
89
+ required={required}
90
+ disabled={disabled}
91
+ onChange={handleChange}
92
+ onBlur={!readOnly ? handleBlur : undefined}
93
+ error={status === 'error'}
94
+ label={label}
95
+ value={inputValue}
96
+ InputProps={{ ...readOnlyProp, inputProps: { maxLength, ...testProp } }}
97
+ />
99
98
  </StyledPegaDxilMyTestTextWrapper>
100
99
  );
101
100
  }
@@ -1,12 +1,16 @@
1
- import { PropsWithChildren } from 'react';
1
+ import { PropsWithChildren, useState } from 'react';
2
2
  import Grid from '@material-ui/core/Grid';
3
3
  import { makeStyles } from '@material-ui/core/styles';
4
+ import KeyboardArrowRightIcon from '@material-ui/icons/KeyboardArrowRight';
5
+ import KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';
4
6
 
5
7
  // FieldGroupProps is one of the few components that does NOT have getPConnect.
6
8
  // So, no need to extend PConnProps
7
9
  interface FieldGroupProps {
8
10
  // If any, enter additional props that only exist on this component
9
- name: string | object;
11
+ name?: string;
12
+ collapsible?: boolean;
13
+ instructions?: string;
10
14
  }
11
15
 
12
16
  const useStyles = makeStyles(theme => ({
@@ -23,12 +27,22 @@ const useStyles = makeStyles(theme => ({
23
27
  },
24
28
  fullWidth: {
25
29
  width: '100%'
30
+ },
31
+ fieldGroupHeader: {
32
+ display: 'flex',
33
+ alignItems: 'center',
34
+ gap: '5px',
35
+ cursor: collapsible => (collapsible ? 'pointer' : 'auto')
36
+ },
37
+ instructionText: {
38
+ padding: '5px 0'
26
39
  }
27
40
  }));
28
41
 
29
42
  export default function FieldGroup(props: PropsWithChildren<FieldGroupProps>) {
30
- const { children, name } = props;
31
- const classes = useStyles();
43
+ const { children, name, collapsible = false, instructions } = props;
44
+ const classes = useStyles(collapsible);
45
+ const [collapsed, setCollapsed] = useState(false);
32
46
 
33
47
  const descAndChildren = (
34
48
  <Grid container>
@@ -36,15 +50,30 @@ export default function FieldGroup(props: PropsWithChildren<FieldGroupProps>) {
36
50
  </Grid>
37
51
  );
38
52
 
53
+ const headerClickHandler = () => {
54
+ setCollapsed(current => !current);
55
+ };
56
+
39
57
  return (
40
58
  <Grid container spacing={4} justifyContent='space-between'>
41
59
  <Grid item style={{ width: '100%' }}>
42
60
  {name && (
43
61
  <div className={classes.fieldMargin}>
44
- <b>{props.name}</b>
62
+ {collapsible ? (
63
+ <span id='field-group-header' className={classes.fieldGroupHeader} onClick={headerClickHandler}>
64
+ {collapsed ? <KeyboardArrowRightIcon /> : <KeyboardArrowDownIcon />}
65
+ <b>{name}</b>
66
+ </span>
67
+ ) : (
68
+ <b>{name}</b>
69
+ )}
45
70
  </div>
46
71
  )}
47
- {descAndChildren}
72
+ {instructions && instructions !== 'none' && (
73
+ // eslint-disable-next-line react/no-danger
74
+ <div key='instructions' className={classes.instructionText} dangerouslySetInnerHTML={{ __html: instructions }} />
75
+ )}
76
+ {!collapsed && descAndChildren}
48
77
  </Grid>
49
78
  </Grid>
50
79
  );
@@ -10,6 +10,8 @@ interface CheckboxProps extends Omit<PConnFieldProps, 'value'> {
10
10
  value?: boolean;
11
11
  // eslint-disable-next-line react/no-unused-prop-types
12
12
  caption?: string;
13
+ trueLabel?: string;
14
+ falseLabel?: string;
13
15
  }
14
16
 
15
17
  export default function CheckboxComponent(props: CheckboxProps) {
@@ -18,7 +20,6 @@ export default function CheckboxComponent(props: CheckboxProps) {
18
20
 
19
21
  const {
20
22
  getPConnect,
21
- label,
22
23
  value = false,
23
24
  readOnly,
24
25
  testId,
@@ -28,7 +29,9 @@ export default function CheckboxComponent(props: CheckboxProps) {
28
29
  helperText,
29
30
  validatemessage,
30
31
  displayMode,
31
- hideLabel
32
+ hideLabel,
33
+ trueLabel,
34
+ falseLabel
32
35
  } = props;
33
36
  const helperTextToDisplay = validatemessage || helperText;
34
37
 
@@ -45,11 +48,11 @@ export default function CheckboxComponent(props: CheckboxProps) {
45
48
  }, [value]);
46
49
 
47
50
  if (displayMode === 'LABELS_LEFT') {
48
- return <FieldValueList name={hideLabel ? '' : label} value={value.toString()} />;
51
+ return <FieldValueList name={hideLabel ? '' : caption} value={value ? trueLabel : falseLabel} />;
49
52
  }
50
53
 
51
54
  if (displayMode === 'STACKED_LARGE_VAL') {
52
- return <FieldValueList name={hideLabel ? '' : label} value={value.toString()} variant='stacked' />;
55
+ return <FieldValueList name={hideLabel ? '' : caption} value={value ? trueLabel : falseLabel} variant='stacked' />;
53
56
  }
54
57
 
55
58
  const handleChange = event => {