@pega/angular-sdk-overrides 0.25.1 → 0.25.3

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 (160) hide show
  1. package/lib/designSystemExtension/alert/alert.component.scss +3 -3
  2. package/lib/designSystemExtension/banner/banner.component.scss +12 -2
  3. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
  4. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +5 -34
  5. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
  6. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +2 -2
  7. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
  8. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +2 -17
  9. package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
  10. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
  11. package/lib/designSystemExtension/operator/operator.component.html +1 -1
  12. package/lib/designSystemExtension/operator/operator.component.scss +3 -10
  13. package/lib/designSystemExtension/operator/operator.component.ts +0 -1
  14. package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
  15. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
  16. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -8
  17. package/lib/field/auto-complete/auto-complete.component.html +0 -1
  18. package/lib/field/auto-complete/auto-complete.component.ts +35 -172
  19. package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
  20. package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
  21. package/lib/field/cancel-alert/cancel-alert.component.ts +24 -36
  22. package/lib/field/check-box/check-box.component.html +0 -1
  23. package/lib/field/check-box/check-box.component.scss +0 -1
  24. package/lib/field/check-box/check-box.component.ts +19 -149
  25. package/lib/field/currency/currency.component.ts +36 -168
  26. package/lib/field/date/date.component.html +1 -1
  27. package/lib/field/date/date.component.ts +30 -150
  28. package/lib/field/date-time/date-time.component.ts +31 -149
  29. package/lib/field/decimal/decimal.component.ts +38 -163
  30. package/lib/field/dropdown/dropdown.component.ts +29 -151
  31. package/lib/field/email/email.component.ts +16 -155
  32. package/lib/field/field.base.ts +149 -0
  33. package/lib/field/group/group.component.ts +7 -4
  34. package/lib/field/integer/integer.component.ts +18 -157
  35. package/lib/field/location/location.component.ts +1 -1
  36. package/lib/field/multiselect/multiselect.component.ts +46 -148
  37. package/lib/field/multiselect/utils.ts +55 -47
  38. package/lib/field/object-reference/object-reference.component.html +17 -0
  39. package/lib/field/object-reference/object-reference.component.scss +0 -0
  40. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  41. package/lib/field/object-reference/object-reference.component.ts +237 -0
  42. package/lib/field/percentage/percentage.component.ts +37 -154
  43. package/lib/field/phone/phone.component.ts +28 -142
  44. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  45. package/lib/field/radio-buttons/radio-buttons.component.ts +35 -161
  46. package/lib/field/rich-text/rich-text.component.ts +19 -90
  47. package/lib/field/scalar-list/scalar-list.component.ts +17 -72
  48. package/lib/field/selectable-card/selectable-card.component.html +54 -24
  49. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  50. package/lib/field/selectable-card/selectable-card.component.ts +16 -52
  51. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  52. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  53. package/lib/field/semantic-link/semantic-link.component.ts +165 -5
  54. package/lib/field/text/text.component.scss +0 -1
  55. package/lib/field/text-area/text-area.component.ts +18 -152
  56. package/lib/field/text-input/text-input.component.ts +16 -155
  57. package/lib/field/time/time.component.ts +17 -151
  58. package/lib/field/url/url.component.ts +16 -154
  59. package/lib/field/user-reference/user-reference.component.scss +0 -1
  60. package/lib/field/user-reference/user-reference.component.ts +2 -3
  61. package/lib/infra/Containers/flow-container/flow-container.component.ts +5 -7
  62. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +5 -10
  63. package/lib/infra/Containers/view-container/helper.ts +35 -2
  64. package/lib/infra/Containers/view-container/view-container.component.ts +1 -1
  65. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  66. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  67. package/lib/infra/action-buttons/action-buttons.component.ts +1 -2
  68. package/lib/infra/assignment/assignment.component.ts +8 -6
  69. package/lib/infra/assignment-card/assignment-card.component.html +1 -2
  70. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  71. package/lib/infra/assignment-card/assignment-card.component.ts +21 -4
  72. package/lib/infra/defer-load/defer-load.component.html +6 -2
  73. package/lib/infra/defer-load/defer-load.component.ts +16 -10
  74. package/lib/infra/multi-step/multi-step.component.scss +1 -21
  75. package/lib/infra/navbar/navbar.component.html +25 -28
  76. package/lib/infra/navbar/navbar.component.scss +16 -4
  77. package/lib/infra/navbar/navbar.component.ts +8 -3
  78. package/lib/infra/root-container/root-container.component.scss +0 -1
  79. package/lib/infra/root-container/root-container.component.ts +1 -2
  80. package/lib/infra/stages/stages.component.html +2 -2
  81. package/lib/infra/stages/stages.component.scss +7 -35
  82. package/lib/infra/stages/stages.component.ts +4 -2
  83. package/lib/infra/view/view.component.html +1 -1
  84. package/lib/infra/view/view.component.ts +0 -2
  85. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  86. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  87. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  88. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  89. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  90. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  91. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  92. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  93. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  94. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  95. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  96. package/lib/template/app-shell/app-shell.component.html +4 -1
  97. package/lib/template/app-shell/app-shell.component.scss +0 -3
  98. package/lib/template/app-shell/app-shell.component.ts +46 -7
  99. package/lib/template/case-summary/case-summary.component.scss +0 -2
  100. package/lib/template/case-view/case-view.component.html +3 -3
  101. package/lib/template/case-view/case-view.component.scss +18 -10
  102. package/lib/template/case-view/case-view.component.ts +1 -1
  103. package/lib/template/data-reference/data-reference-advanced-search.service.ts +16 -0
  104. package/lib/template/data-reference/data-reference.component.html +11 -8
  105. package/lib/template/data-reference/data-reference.component.ts +346 -112
  106. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  107. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  108. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  109. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  110. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  111. package/lib/template/data-reference/utils.ts +92 -0
  112. package/lib/template/default-form/default-form.component.ts +10 -2
  113. package/lib/template/default-page/default-page.component.html +34 -0
  114. package/lib/template/default-page/default-page.component.scss +31 -0
  115. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  116. package/lib/template/default-page/default-page.component.ts +64 -0
  117. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  118. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +1 -1
  119. package/lib/template/list-view/list-view.component.html +9 -4
  120. package/lib/template/list-view/list-view.component.scss +21 -21
  121. package/lib/template/list-view/list-view.component.ts +154 -84
  122. package/lib/template/list-view/utils.ts +25 -2
  123. package/lib/template/object-page/object-page.component.html +1 -0
  124. package/lib/template/object-page/object-page.component.scss +0 -0
  125. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  126. package/lib/template/object-page/object-page.component.ts +14 -0
  127. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  128. package/lib/template/repeating-structures/repeating-structures.component.ts +0 -1
  129. package/lib/template/self-service-case-view/self-service-case-view.component.html +80 -0
  130. package/lib/template/self-service-case-view/self-service-case-view.component.scss +124 -0
  131. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  132. package/lib/template/self-service-case-view/self-service-case-view.component.ts +216 -0
  133. package/lib/template/simple-table/simple-table.component.ts +0 -1
  134. package/lib/template/simple-table-manual/helpers.ts +2 -2
  135. package/lib/template/simple-table-manual/simple-table-manual.component.html +4 -4
  136. package/lib/template/simple-table-manual/simple-table-manual.component.scss +4 -14
  137. package/lib/template/simple-table-manual/simple-table-manual.component.ts +8 -4
  138. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  139. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  140. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -3
  141. package/lib/template/utils.ts +42 -0
  142. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +5 -4
  143. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +2 -8
  144. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +1 -8
  145. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  146. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  147. package/lib/widget/attachment/Attachment.types.ts +92 -0
  148. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  149. package/lib/widget/attachment/attachment.component.html +3 -3
  150. package/lib/widget/attachment/attachment.component.scss +2 -5
  151. package/lib/widget/attachment/attachment.component.ts +255 -254
  152. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  153. package/lib/widget/feed-container/feed-container.component.ts +2 -2
  154. package/lib/widget/file-utility/file-utility.component.html +3 -3
  155. package/lib/widget/file-utility/file-utility.component.scss +5 -16
  156. package/lib/widget/list-utility/list-utility.component.scss +3 -5
  157. package/lib/widget/todo/todo.component.html +8 -5
  158. package/lib/widget/todo/todo.component.scss +10 -11
  159. package/lib/widget/todo/todo.component.ts +6 -2
  160. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, Input, OnDestroy, OnInit } from '@angular/core';
3
- import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
2
+ import { Component } from '@angular/core';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
5
5
  import { MatChipsModule } from '@angular/material/chips';
6
6
  import { MatCheckboxModule } from '@angular/material/checkbox';
@@ -8,8 +8,8 @@ import { MatOptionModule } from '@angular/material/core';
8
8
  import { MatFormFieldModule } from '@angular/material/form-field';
9
9
  import { MatInputModule } from '@angular/material/input';
10
10
  import { MatIconModule } from '@angular/material/icon';
11
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
12
- import { Utils } from '@pega/angular-sdk-components';
11
+
12
+ import { FieldBase } from '@pega/angular-sdk-components';
13
13
  import { doSearch, getDisplayFieldsMetaData, getGroupDataForItemsTree, preProcessColumns } from './utils';
14
14
  import { deleteInstruction, insertInstruction } from '@pega/angular-sdk-components';
15
15
  import { handleEvent } from '@pega/angular-sdk-components';
@@ -30,39 +30,16 @@ import { handleEvent } from '@pega/angular-sdk-components';
30
30
  MatChipsModule
31
31
  ]
32
32
  })
33
- export class MultiselectComponent implements OnInit, OnDestroy {
34
- @Input() pConn$: typeof PConnect;
35
- @Input() formGroup$: FormGroup;
36
-
37
- // Used with AngularPConnect
38
- angularPConnectData: AngularPConnectData = {};
33
+ export class MultiselectComponent extends FieldBase {
34
+ configProps$: any;
39
35
 
40
- label$ = '';
41
- value$ = '';
42
- bRequired$ = false;
43
- bDisabled$ = false;
44
- bVisible$ = true;
45
- controlName$: string;
46
- bHasForm$ = true;
47
36
  listType: string;
48
- placeholder: string;
49
- fieldControl = new FormControl('', null);
50
37
  parameters: {};
51
- hideLabel: boolean;
52
- configProps$: any;
53
38
 
54
39
  referenceList: any;
55
40
  selectionKey: string;
56
41
  primaryField: string;
57
- initialCaseClass: any;
58
42
  showSecondaryInSearchOnly = false;
59
- isGroupData = false;
60
- referenceType;
61
- secondaryFields;
62
- groupDataSource = [];
63
- matchPosition = 'contains';
64
- maxResultsDisplay;
65
- groupColumnsConfig = [{}];
66
43
  selectionList;
67
44
  listActions: any;
68
45
  selectedItems: any[] = [];
@@ -71,64 +48,32 @@ export class MultiselectComponent implements OnInit, OnDestroy {
71
48
  dataApiObj: any;
72
49
  itemsTree: any[] = [];
73
50
  trigger: any;
74
- actionsApi: Object;
75
- propName: string;
76
-
77
- constructor(
78
- private angularPConnect: AngularPConnectService,
79
- private utils: Utils
80
- ) {}
81
-
82
- ngOnInit(): void {
83
- // First thing in initialization is registering and subscribing to the AngularPConnect service
84
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
85
- this.controlName$ = this.angularPConnect.getComponentID(this);
86
-
87
- // Then, continue on with other initialization
88
- this.checkAndUpdate();
89
-
90
- if (this.formGroup$) {
91
- // add control to formGroup
92
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
93
- this.fieldControl.setValue(this.value$);
94
- this.bHasForm$ = true;
95
- } else {
96
- this.bHasForm$ = false;
97
- }
98
- }
99
-
100
- ngOnDestroy(): void {
101
- if (this.formGroup$) {
102
- this.formGroup$.removeControl(this.controlName$);
103
- }
104
-
105
- if (this.angularPConnectData.unsubscribeFn) {
106
- this.angularPConnectData.unsubscribeFn();
107
- }
108
- }
109
51
 
110
- // Callback passed when subscribing to store change
111
- onStateChange() {
112
- this.checkAndUpdate();
113
- }
52
+ /**
53
+ * Updates the component when there are changes in the state.
54
+ */
55
+ override updateSelf() {
56
+ // Resolve configuration properties
57
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
114
58
 
115
- checkAndUpdate() {
116
- // Should always check the bridge to see if the component should
117
- // update itself (re-render)
118
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
59
+ // Update component common properties
60
+ this.updateComponentCommonProperties(this.configProps$);
119
61
 
120
- // ONLY call updateSelf when the component should update
121
- if (bUpdateSelf) {
122
- this.updateSelf();
123
- }
124
- }
125
-
126
- // updateSelf
127
- updateSelf() {
128
- this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
62
+ this.setPropertyValuesFromProps();
129
63
 
64
+ const {
65
+ groupDataSource = [],
66
+ parameters = {},
67
+ listType = '',
68
+ showSecondaryInSearchOnly = false,
69
+ isGroupData = false,
70
+ referenceType,
71
+ secondaryFields,
72
+ matchPosition = 'contains',
73
+ maxResultsDisplay,
74
+ groupColumnsConfig = [{}]
75
+ } = this.configProps$;
130
76
  let { datasource = [], columns = [{}] } = this.configProps$;
131
- this.setPropertyValuesFromProps();
132
77
 
133
78
  if (this.referenceList.length > 0) {
134
79
  datasource = this.referenceList;
@@ -146,8 +91,8 @@ export class MultiselectComponent implements OnInit, OnDestroy {
146
91
  }
147
92
  ];
148
93
  let secondaryColumns: any = [];
149
- if (this.secondaryFields) {
150
- secondaryColumns = this.secondaryFields.map(secondaryField => ({
94
+ if (secondaryFields) {
95
+ secondaryColumns = secondaryFields.map(secondaryField => ({
151
96
  value: secondaryField,
152
97
  display: 'true',
153
98
  secondary: 'true',
@@ -163,7 +108,7 @@ export class MultiselectComponent implements OnInit, OnDestroy {
163
108
  }
164
109
  ];
165
110
  }
166
- if (this.referenceType === 'Case') {
111
+ if (referenceType === 'Case') {
167
112
  columns = [...columns, ...secondaryColumns];
168
113
  }
169
114
  }
@@ -173,54 +118,36 @@ export class MultiselectComponent implements OnInit, OnDestroy {
173
118
 
174
119
  const dataConfig = {
175
120
  dataSource: datasource,
176
- groupDataSource: this.groupDataSource,
177
- isGroupData: this.isGroupData,
178
- showSecondaryInSearchOnly: this.showSecondaryInSearchOnly,
179
- parameters: this.parameters,
180
- matchPosition: this.matchPosition,
181
- listType: this.listType,
182
- maxResultsDisplay: this.maxResultsDisplay || '100',
121
+ groupDataSource,
122
+ isGroupData,
123
+ showSecondaryInSearchOnly,
124
+ parameters,
125
+ matchPosition,
126
+ listType,
127
+ maxResultsDisplay: maxResultsDisplay || '100',
183
128
  columns: preProcessColumns(columns),
184
- groupColumnsConfig: preProcessColumns(this.groupColumnsConfig),
129
+ groupColumnsConfig: preProcessColumns(groupColumnsConfig),
185
130
  associationFilter: undefined,
186
131
  ignoreCase: undefined
187
132
  };
188
133
 
189
134
  const groupsDisplayFieldMeta = this.listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.groupColumnsConfig) : null;
190
135
 
191
- this.itemsTreeBaseData = getGroupDataForItemsTree(this.groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) || [];
136
+ this.itemsTreeBaseData = getGroupDataForItemsTree(groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) || [];
192
137
 
193
- this.itemsTree = this.isGroupData ? getGroupDataForItemsTree(this.groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) : [];
138
+ this.itemsTree = isGroupData ? getGroupDataForItemsTree(groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) : [];
194
139
 
195
140
  this.displayFieldMeta = this.listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.columns) : null;
196
141
 
197
142
  this.listActions = this.pConn$.getListActions();
198
143
  this.pConn$.setReferenceList(this.selectionList);
199
144
 
200
- if (this.configProps$.visibility != null) {
201
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
202
- }
203
-
204
- // disabled
205
- if (this.configProps$.disabled != undefined) {
206
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
207
- }
208
-
209
- if (this.bDisabled$) {
210
- this.fieldControl.disable();
211
- } else {
212
- this.fieldControl.enable();
213
- }
214
-
215
- this.actionsApi = this.pConn$.getActionsApi();
216
- this.propName = this.pConn$.getStateProps().value;
217
-
218
145
  if (this.listType !== 'associated') {
219
146
  PCore.getDataApi()
220
147
  ?.init(dataConfig, contextName)
221
148
  .then(async dataObj => {
222
149
  this.dataApiObj = dataObj;
223
- if (!this.isGroupData) {
150
+ if (!isGroupData) {
224
151
  this.getCaseListBasedOnParams(this.value$ ?? '', '', [...this.selectedItems], [...this.itemsTree]);
225
152
  }
226
153
  });
@@ -228,23 +155,9 @@ export class MultiselectComponent implements OnInit, OnDestroy {
228
155
  }
229
156
 
230
157
  setPropertyValuesFromProps() {
231
- this.label$ = this.configProps$.label;
232
- this.placeholder = this.configProps$.placeholder || '';
233
- this.listType = this.configProps$.listType ? this.configProps$.listType : '';
234
- this.hideLabel = this.configProps$.hideLabel;
235
- this.parameters = this.configProps$?.parameters ? this.configProps$?.parameters : {};
236
158
  this.referenceList = this.configProps$?.referenceList;
237
159
  this.selectionKey = this.configProps$?.selectionKey;
238
160
  this.primaryField = this.configProps$?.primaryField;
239
- this.initialCaseClass = this.configProps$?.initialCaseClass;
240
- this.showSecondaryInSearchOnly = this.configProps$?.showSecondaryInSearchOnly ? this.configProps$?.showSecondaryInSearchOnly : false;
241
- this.isGroupData = this.configProps$?.isGroupData ? this.configProps$.isGroupData : false;
242
- this.referenceType = this.configProps$?.referenceType;
243
- this.secondaryFields = this.configProps$?.secondaryFields;
244
- this.groupDataSource = this.configProps$?.groupDataSource ? this.configProps$?.groupDataSource : [];
245
- this.matchPosition = this.configProps$?.matchPosition ? this.configProps$?.matchPosition : 'contains';
246
- this.maxResultsDisplay = this.configProps$?.maxResultsDisplay;
247
- this.groupColumnsConfig = this.configProps$?.groupColumnsConfig ? this.configProps$?.groupColumnsConfig : [{}];
248
161
  this.selectionList = this.configProps$?.selectionList;
249
162
  this.value$ = this.configProps$?.value;
250
163
  }
@@ -266,15 +179,17 @@ export class MultiselectComponent implements OnInit, OnDestroy {
266
179
 
267
180
  const initalItemsTree = isTriggeredFromSearch || !currentItemsTree ? [...this.itemsTreeBaseData] : [...currentItemsTree];
268
181
 
182
+ const { initialCaseClass, isGroupData, showSecondaryInSearchOnly } = this.configProps$;
183
+
269
184
  doSearch(
270
185
  searchText,
271
186
  group,
272
- this.initialCaseClass,
187
+ initialCaseClass,
273
188
  this.displayFieldMeta,
274
189
  this.dataApiObj,
275
190
  initalItemsTree,
276
- this.isGroupData,
277
- this.showSecondaryInSearchOnly,
191
+ isGroupData,
192
+ showSecondaryInSearchOnly,
278
193
  selectedRows || []
279
194
  ).then(res => {
280
195
  this.itemsTree = res || [];
@@ -346,21 +261,4 @@ export class MultiselectComponent implements OnInit, OnDestroy {
346
261
  deleteInstruction(this.pConn$, this.selectionList, this.selectionKey, data);
347
262
  }
348
263
  }
349
-
350
- getErrorMessage() {
351
- let errMessage = '';
352
-
353
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
354
- if (this.fieldControl.hasError('message')) {
355
- errMessage = this.angularPConnectData.validateMessage ?? '';
356
- return errMessage;
357
- }
358
- if (this.fieldControl.hasError('required')) {
359
- errMessage = 'You must enter a value';
360
- } else if (this.fieldControl.errors) {
361
- errMessage = this.fieldControl.errors.toString();
362
- }
363
-
364
- return errMessage;
365
- }
366
264
  }
@@ -85,6 +85,31 @@ function prepareSearchResults(listObjData, displayFieldMeta) {
85
85
  return searchResults;
86
86
  }
87
87
 
88
+ function handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree) {
89
+ const localDataApiObj = cloneDeep(dataApiObj);
90
+ localDataApiObj.fetchedNQData = false;
91
+ localDataApiObj.cache = {};
92
+
93
+ if (!searchText && !clickedGroup) {
94
+ return { shouldReturn: true, value: itemsTree };
95
+ }
96
+
97
+ localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[1]] = searchText;
98
+ localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = initialCaseClass;
99
+
100
+ if (clickedGroup) {
101
+ if (!searchText) {
102
+ const containsData = itemsTree.find(item => item.id === clickedGroup);
103
+ if (containsData?.items?.length) {
104
+ return { shouldReturn: true, value: itemsTree };
105
+ }
106
+ }
107
+ localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
108
+ }
109
+
110
+ return { shouldReturn: false, value: localDataApiObj };
111
+ }
112
+
88
113
  async function doSearch(
89
114
  searchText,
90
115
  clickedGroup,
@@ -96,61 +121,44 @@ async function doSearch(
96
121
  showSecondaryInSearchOnly,
97
122
  selected
98
123
  ) {
99
- let searchTextForUngroupedData = '';
100
- if (dataApiObj) {
101
- // creating dataApiObject in grouped data cases
102
- if (isGroupData) {
103
- dataApiObj = cloneDeep(dataApiObj);
104
- dataApiObj.fetchedNQData = false;
105
- dataApiObj.cache = {};
106
-
107
- // if we have no search text and no group selected, return the original tree
108
- if (searchText === '' && clickedGroup === '') {
109
- return itemsTree;
110
- }
124
+ if (!dataApiObj) {
125
+ return itemsTree;
126
+ }
111
127
 
112
- // setting the inital search text & search classes in ApiObject
113
- dataApiObj.parameters[Object.keys(dataApiObj.parameters)[1]] = searchText;
114
- dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = initialCaseClass;
115
-
116
- // if we have a selected group
117
- if (clickedGroup) {
118
- // check if the data for this group is already present and no search text
119
- if (searchText === '') {
120
- const containsData = itemsTree.find(item => item.id === clickedGroup);
121
- // do not make API call when items of respective group are already fetched
122
- if (containsData?.items?.length) return itemsTree;
123
- }
128
+ let searchTextForApi = '';
129
+ let localDataApiObj = dataApiObj;
124
130
 
125
- dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
126
- }
127
- } else {
128
- searchTextForUngroupedData = searchText;
131
+ if (isGroupData) {
132
+ const groupResult = handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree);
133
+ if (groupResult.shouldReturn) {
134
+ return groupResult.value;
129
135
  }
136
+ localDataApiObj = groupResult.value;
137
+ } else {
138
+ searchTextForApi = searchText;
139
+ }
130
140
 
131
- // search API call
132
- const response = await dataApiObj.fetchData(searchTextForUngroupedData).catch(() => {
133
- return itemsTree;
134
- });
141
+ const response = await localDataApiObj.fetchData(searchTextForApi).catch(() => ({ data: undefined }));
135
142
 
136
- let listObjData = response.data;
137
- let newItemsTree = [];
138
- if (isGroupData) {
139
- if (searchText) {
140
- listObjData = prepareSearchResults(listObjData, displayFieldMeta);
141
- } else {
142
- newItemsTree = putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
143
- return newItemsTree;
144
- }
145
- }
146
- const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
147
- if (listObjData !== undefined && listObjData.length > 0) {
148
- newItemsTree = listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
143
+ let listObjData = response.data;
144
+ if (!listObjData) {
145
+ return itemsTree;
146
+ }
147
+
148
+ if (isGroupData) {
149
+ if (searchText) {
150
+ listObjData = prepareSearchResults(listObjData, displayFieldMeta);
151
+ } else {
152
+ return putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
149
153
  }
150
- return newItemsTree;
151
154
  }
152
155
 
153
- return itemsTree;
156
+ if (listObjData.length === 0) {
157
+ return [];
158
+ }
159
+
160
+ const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
161
+ return listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
154
162
  }
155
163
 
156
164
  function setValuesToPropertyList(searchText, assocProp, items, columns, actions, updatePropertyInRedux = true) {
@@ -0,0 +1,17 @@
1
+ <div *ngIf="isDisplayModeEnabled && !canBeChangedInReviewMode; else semanticLinkCheck">
2
+ <component-mapper name="SingleReferenceReadOnly" [props]="{ pConn$ }"></component-mapper>
3
+ </div>
4
+ <ng-template #semanticLinkCheck>
5
+ <div *ngIf="type === 'SemanticLink' && !canBeChangedInReviewMode; else loadDynamicComp">
6
+ <component-mapper name="SemanticLink" [props]="{ pConn$: newPconn }"></component-mapper>
7
+ </div>
8
+ </ng-template>
9
+ <ng-template #loadDynamicComp>
10
+ <component-mapper
11
+ *ngIf="newComponentName"
12
+ [name]="newComponentName"
13
+ [props]="{ pConn$: newPconn, formGroup$ }"
14
+ [parent]="this"
15
+ [outputEvents]="{ onRecordChange: onRecordChange }"
16
+ ></component-mapper>
17
+ </ng-template>
@@ -0,0 +1,22 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { ObjectReferenceComponent } from './object-reference.component';
4
+
5
+ describe('ObjectReferenceComponent', () => {
6
+ let component: ObjectReferenceComponent;
7
+ let fixture: ComponentFixture<ObjectReferenceComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [ObjectReferenceComponent]
12
+ }).compileComponents();
13
+
14
+ fixture = TestBed.createComponent(ObjectReferenceComponent);
15
+ component = fixture.componentInstance;
16
+ fixture.detectChanges();
17
+ });
18
+
19
+ it('should create', () => {
20
+ expect(component).toBeTruthy();
21
+ });
22
+ });