@pega/angular-sdk-components 0.24.2 → 0.24.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 (47) hide show
  1. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +1 -3
  2. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +3 -8
  3. package/esm2022/lib/_components/field/radio-buttons/radio-buttons.component.mjs +3 -8
  4. package/esm2022/lib/_components/field/scalar-list/scalar-list.component.mjs +3 -2
  5. package/esm2022/lib/_components/field/text-area/text-area.component.mjs +1 -3
  6. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +1 -13
  7. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +1 -2
  8. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +1 -2
  9. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +3 -9
  10. package/esm2022/lib/_components/infra/dashboard-filter/dashboard-filter.component.mjs +1 -2
  11. package/esm2022/lib/_components/infra/defer-load/defer-load.component.mjs +6 -9
  12. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +1 -2
  13. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +3 -9
  14. package/esm2022/lib/_components/template/data-reference/data-reference.component.mjs +2 -4
  15. package/esm2022/lib/_components/template/dynamic-tabs/dynamic-tabs.component.mjs +1 -2
  16. package/esm2022/lib/_components/template/field-group-template/field-group-template.component.mjs +5 -15
  17. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +12 -6
  18. package/esm2022/lib/_components/template/list-view/listViewHelpers.mjs +1 -2
  19. package/esm2022/lib/_components/template/repeating-structures/repeating-structures.component.mjs +1 -2
  20. package/esm2022/lib/_components/template/simple-table/simple-table.component.mjs +1 -3
  21. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +6 -12
  22. package/esm2022/lib/_components/template/simple-table-select/simple-table-select.component.mjs +3 -5
  23. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +224 -421
  24. package/esm2022/lib/_components/widget/case-history/case-history.component.mjs +1 -2
  25. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +1 -5
  26. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +1 -5
  27. package/esm2022/lib/_components/widget/quick-create/quick-create.component.mjs +1 -1
  28. package/esm2022/lib/_components/widget/todo/todo.component.mjs +1 -1
  29. package/fesm2022/pega-angular-sdk-components.mjs +255 -528
  30. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  31. package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +1 -1
  32. package/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.d.ts +1 -1
  33. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +1 -1
  34. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +1 -1
  35. package/lib/_components/infra/action-buttons/action-buttons.component.d.ts +1 -1
  36. package/lib/_components/infra/error-boundary/error-boundary.component.d.ts +1 -1
  37. package/lib/_components/template/list-view/list-view.component.d.ts +8 -2
  38. package/lib/_components/template/simple-table-manual/helpers.d.ts +1 -1
  39. package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +1 -1
  40. package/lib/_components/widget/attachment/attachment.component.d.ts +29 -57
  41. package/lib/_components/widget/file-utility/file-utility.component.d.ts +2 -2
  42. package/lib/_components/widget/todo/todo.component.d.ts +3 -3
  43. package/lib/_helpers/common.d.ts +1 -1
  44. package/lib/_helpers/field-group-utils.d.ts +1 -1
  45. package/lib/_helpers/filter-utils.d.ts +1 -1
  46. package/lib/_helpers/formatters/common.d.ts +2 -2
  47. package/package.json +3 -3
@@ -1425,8 +1425,8 @@ class AssignmentComponent {
1425
1425
  const savePromise = this.saveAssignment(this.itemKey$);
1426
1426
  savePromise
1427
1427
  .then(() => {
1428
+ // @ts-ignore - Property 'c11nEnv' is private and only accessible within class 'CaseInfo'.
1428
1429
  const caseType = this.pConn$.getCaseInfo().c11nEnv.getValue(PCore.getConstants().CASE_INFO.CASE_TYPE_ID);
1429
- // @ts-ignore - second parameter “payload” for publish method should be optional
1430
1430
  PCore.getPubSubUtils().publish('cancelPressed');
1431
1431
  this.onSaveActionSuccess({ caseType, caseID, assignmentID });
1432
1432
  })
@@ -1439,12 +1439,8 @@ class AssignmentComponent {
1439
1439
  case 'cancelAssignment':
1440
1440
  this.bReInit = true;
1441
1441
  this.erService.sendMessage('dismiss', '');
1442
- // @ts-ignore - Property 'isAssignmentInCreateStage' is private and only accessible within class 'CaseInfo'
1443
1442
  const isAssignmentInCreateStage = this.pConn$.getCaseInfo().isAssignmentInCreateStage();
1444
- const isLocalAction =
1445
- // @ts-ignore - Property 'isLocalAction' is private and only accessible within class 'CaseInfo'.
1446
- this.pConn$.getCaseInfo().isLocalAction() ||
1447
- // @ts-ignore - second parameter pageReference for getValue method should be optional
1443
+ const isLocalAction = this.pConn$.getCaseInfo().isLocalAction() ||
1448
1444
  (PCore.getConstants().CASE_INFO.IS_LOCAL_ACTION && this.pConn$.getValue(PCore.getConstants().CASE_INFO.IS_LOCAL_ACTION));
1449
1445
  // check if create stage (modal)
1450
1446
  if (isAssignmentInCreateStage && this.isInModal$ && !isLocalAction) {
@@ -1464,13 +1460,11 @@ class AssignmentComponent {
1464
1460
  this.psService.sendMessage(true);
1465
1461
  // publish before cancel pressed, because
1466
1462
  // cancel assignment happens "after" cancel assignment happens
1467
- // @ts-ignore - second parameter “payload” for publish method should be optional
1468
1463
  PCore.getPubSubUtils().publish('cancelPressed');
1469
1464
  const cancelPromise = this.cancelAssignment(this.itemKey$);
1470
1465
  cancelPromise
1471
1466
  .then(() => {
1472
1467
  this.psService.sendMessage(false);
1473
- // @ts-ignore - second parameter “payload” for publish method should be optional
1474
1468
  PCore.getPubSubUtils().publish(PCore.getConstants().PUB_SUB_EVENTS.EVENT_CANCEL);
1475
1469
  })
1476
1470
  .catch(() => {
@@ -1688,7 +1682,6 @@ class DashboardFilterComponent {
1688
1682
  }
1689
1683
  clearFilters() {
1690
1684
  this.filtersFormGroup$.reset();
1691
- // @ts-ignore - second parameter “payload” for publish method should be optional
1692
1685
  PCore.getPubSubUtils().publish(PCore.getConstants().PUB_SUB_EVENTS.EVENT_DASHBOARD_FILTER_CLEAR_ALL);
1693
1686
  }
1694
1687
  updateTmpData(filterData) {
@@ -1759,7 +1752,6 @@ class DeferLoadComponent {
1759
1752
  this.currentLoadedAssignment = '';
1760
1753
  this.getViewOptions = () => ({
1761
1754
  viewContext: this.resourceType,
1762
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
1763
1755
  pageClass: this.loadViewCaseID ? '' : this.pConn$.getDataObject().pyPortal.classID,
1764
1756
  container: this.isContainerPreview ? 'preview' : null,
1765
1757
  containerName: this.isContainerPreview ? 'preview' : null,
@@ -1769,7 +1761,8 @@ class DeferLoadComponent {
1769
1761
  }
1770
1762
  ngOnInit() {
1771
1763
  this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
1772
- this.loadActiveTab();
1764
+ // The below call is causing an error while creating/opening a case, hence commenting it out
1765
+ // this.loadActiveTab();
1773
1766
  }
1774
1767
  ngOnDestroy() {
1775
1768
  if (this.angularPConnectData.unsubscribeFn) {
@@ -1779,7 +1772,6 @@ class DeferLoadComponent {
1779
1772
  onStateChange() {
1780
1773
  // Should always check the bridge to see if the component should
1781
1774
  // update itself (re-render)
1782
- // @ts-ignore - second parameter pageReference for getValue method should be optional
1783
1775
  const theRequestedAssignment = this.pConn$.getValue(PCore.getConstants().CASE_INFO.ASSIGNMENT_LABEL);
1784
1776
  if (theRequestedAssignment !== this.currentLoadedAssignment) {
1785
1777
  this.currentLoadedAssignment = theRequestedAssignment;
@@ -1787,7 +1779,6 @@ class DeferLoadComponent {
1787
1779
  }
1788
1780
  }
1789
1781
  ngOnChanges() {
1790
- // @ts-ignore - second parameter pageReference for getValue method should be optional
1791
1782
  this.loadViewCaseID = this.pConn$.getValue(this.constants.PZINSKEY) || this.pConn$.getValue(this.constants.CASE_INFO.CASE_INFO_ID);
1792
1783
  let containerItemData;
1793
1784
  const targetName = this.pConn$.getTarget();
@@ -1838,9 +1829,8 @@ class DeferLoadComponent {
1838
1829
  this.pConn$
1839
1830
  .getActionsApi()
1840
1831
  .showData(this.name, dataContext, dataContextParameters, {
1841
- // @ts-ignore - skipSemanticUrl should be boolean type
1842
1832
  skipSemanticUrl: true,
1843
- // @ts-ignore
1833
+ // @ts-ignore - Object literal may only specify known properties, and 'isDeferLoaded' does not exist in type '{ containerName: string; skipSemanticUrl: boolean; }'
1844
1834
  isDeferLoaded: true
1845
1835
  })
1846
1836
  .then(data => {
@@ -1863,8 +1853,8 @@ class DeferLoadComponent {
1863
1853
  else {
1864
1854
  this.pConn$
1865
1855
  .getActionsApi()
1866
- .refreshCaseView(encodeURI(this.loadViewCaseID), this.name, null)
1867
- .then(data => {
1856
+ .refreshCaseView(encodeURI(this.loadViewCaseID), this.name, '')
1857
+ .then((data) => {
1868
1858
  this.onResponse(data.root);
1869
1859
  });
1870
1860
  }
@@ -2062,7 +2052,6 @@ class FlowContainerComponent {
2062
2052
  });
2063
2053
  }
2064
2054
  getTodoVisibilty() {
2065
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2066
2055
  const caseViewMode = this.pConn$.getValue('context_data.caseViewMode');
2067
2056
  if (caseViewMode && caseViewMode === 'review') {
2068
2057
  const kid = this.pConn$.getChildren()[0];
@@ -2135,7 +2124,6 @@ class FlowContainerComponent {
2135
2124
  }
2136
2125
  hasAssignments() {
2137
2126
  let hasAssignments = false;
2138
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2139
2127
  const assignmentsList = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
2140
2128
  // const thisOperator = PCore.getEnvironmentInfo().getOperatorIdentifier();
2141
2129
  // 8.7 includes assignments in Assignments List that may be assigned to
@@ -2165,9 +2153,7 @@ class FlowContainerComponent {
2165
2153
  return hasAssignments;
2166
2154
  }
2167
2155
  isCaseWideLocalAction() {
2168
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2169
2156
  const actionID = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.ACTIVE_ACTION_ID);
2170
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2171
2157
  const caseActions = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.AVAILABLEACTIONS);
2172
2158
  let bCaseWideAction = false;
2173
2159
  if (caseActions && actionID) {
@@ -2179,16 +2165,13 @@ class FlowContainerComponent {
2179
2165
  return bCaseWideAction;
2180
2166
  }
2181
2167
  hasChildCaseAssignments() {
2182
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2183
2168
  const childCases = this.pConn$.getValue(this.pCoreConstants.CASE_INFO.CHILD_ASSIGNMENTS);
2184
2169
  return childCases && childCases.length > 0;
2185
2170
  }
2186
2171
  getActiveViewLabel() {
2187
2172
  let activeActionLabel = '';
2188
2173
  const { CASE_INFO: CASE_CONSTS } = PCore.getConstants();
2189
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2190
2174
  const caseActions = this.pConn$.getValue(CASE_CONSTS.CASE_INFO_ACTIONS);
2191
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2192
2175
  const activeActionID = this.pConn$.getValue(CASE_CONSTS.ACTIVE_ACTION_ID);
2193
2176
  const activeAction = caseActions?.find(action => action.ID === activeActionID);
2194
2177
  if (activeAction) {
@@ -2224,7 +2207,6 @@ class FlowContainerComponent {
2224
2207
  // for now
2225
2208
  // const { getPConnect } = this.arChildren$[0].getPConnect();
2226
2209
  const localPConn = this.arChildren$[0].getPConnect();
2227
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2228
2210
  const caseViewMode = this.pConn$.getValue('context_data.caseViewMode');
2229
2211
  this.bShowBanner = showBanner(this.pConn$);
2230
2212
  if (caseViewMode && caseViewMode == 'review') {
@@ -2270,7 +2252,6 @@ class FlowContainerComponent {
2270
2252
  */
2271
2253
  const todoAssignments = getToDoAssignments(this.pConn$);
2272
2254
  if (todoAssignments && todoAssignments.length > 0) {
2273
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2274
2255
  this.todo_caseInfoID$ = this.pConn$.getValue(CASE_CONSTS.CASE_INFO_ID);
2275
2256
  this.todo_datasource$ = { source: todoAssignments };
2276
2257
  }
@@ -2290,7 +2271,6 @@ class FlowContainerComponent {
2290
2271
  });
2291
2272
  }
2292
2273
  showCaseMessages() {
2293
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2294
2274
  this.caseMessages$ = this.localizedVal(this.pConn$.getValue('caseMessages'), this.localeCategory);
2295
2275
  if (this.caseMessages$ || !this.hasAssignments()) {
2296
2276
  this.bHasCaseMessages$ = true;
@@ -2302,7 +2282,6 @@ class FlowContainerComponent {
2302
2282
  this.caseMessages$ = this.localizedVal('Thank you! The next step in this case has been routed appropriately.', this.localeCategory);
2303
2283
  }
2304
2284
  // publish this "assignmentFinished" for mashup, need to get approved as a standard
2305
- // @ts-ignore - second parameter “payload” for publish method should be optional
2306
2285
  PCore.getPubSubUtils().publish('assignmentFinished');
2307
2286
  this.psService.sendMessage(false);
2308
2287
  }
@@ -2387,7 +2366,6 @@ class FlowContainerComponent {
2387
2366
  this.arChildren$.push(normalizedConfigObjectAsPConnect);
2388
2367
  this.psService.sendMessage(false);
2389
2368
  const oWorkItem = configObject.getPConnect();
2390
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
2391
2369
  const oWorkData = oWorkItem.getDataObject();
2392
2370
  this.containerName$ = this.localizedVal(this.getActiveViewLabel() || oWorkData.caseInfo.assignments?.[0].name, undefined, this.localeReference);
2393
2371
  });
@@ -2663,7 +2641,6 @@ class ModalViewContainerComponent {
2663
2641
  const configObject = this.getConfigObject(currentItem, this.pConn$);
2664
2642
  const newComp = configObject?.getPConnect();
2665
2643
  // const newCompName = newComp.getComponentName();
2666
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
2667
2644
  const caseInfo = newComp && newComp.getDataObject() && newComp.getDataObject().caseInfo ? newComp.getDataObject().caseInfo : null;
2668
2645
  // The metadata for pyDetails changed such that the "template": "CaseView"
2669
2646
  // is no longer a child of the created View but is in the created View's
@@ -2958,7 +2935,6 @@ class NavbarComponent {
2958
2935
  this.navPages$.forEach(page => {
2959
2936
  page.iconName = this.utils.getImageSrc(page.pxPageViewIcon, this.utils.getSDKStaticContentUrl());
2960
2937
  });
2961
- // @ts-ignore - second parameter pageReference for getValue method should be optional
2962
2938
  this.localeReference = this.pConn$.getValue('.pyLocaleReference');
2963
2939
  this.actionsAPI = this.pConn$.getActionsApi();
2964
2940
  this.createWork = this.actionsAPI.createWork.bind(this.actionsAPI);
@@ -3725,7 +3701,6 @@ class ViewContainerComponent {
3725
3701
  }
3726
3702
  }
3727
3703
  if (sessionStorage.getItem('hasViewContainer') == 'false') {
3728
- // @ts-ignore - Property 'getMetadata' is private and only accessible within class
3729
3704
  if (this.pConn$.getMetadata().children) {
3730
3705
  containerMgr.addContainerItem(this.dispatchObject);
3731
3706
  }
@@ -4315,7 +4290,6 @@ class CancelAlertComponent {
4315
4290
  .then(() => {
4316
4291
  this.psService.sendMessage(false);
4317
4292
  this.dismissAlert();
4318
- // @ts-ignore - second parameter “payload” for publish method should be optional
4319
4293
  PCore.getPubSubUtils().publish(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.CASE_CREATED);
4320
4294
  })
4321
4295
  .catch(() => {
@@ -4334,7 +4308,6 @@ class CancelAlertComponent {
4334
4308
  .then(() => {
4335
4309
  this.psService.sendMessage(false);
4336
4310
  this.dismissAlert();
4337
- // @ts-ignore - second parameter “payload” for publish method should be optional
4338
4311
  PCore.getPubSubUtils().publish(PCore.getConstants().PUB_SUB_EVENTS.EVENT_CANCEL);
4339
4312
  })
4340
4313
  .catch(() => {
@@ -6766,7 +6739,6 @@ class DropdownComponent {
6766
6739
  this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
6767
6740
  }
6768
6741
  this.componentReference = this.pConn$.getStateProps().value;
6769
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
6770
6742
  const optionsList = [...this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject())];
6771
6743
  optionsList?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
6772
6744
  this.options$ = optionsList;
@@ -6784,9 +6756,7 @@ class DropdownComponent {
6784
6756
  this.localeClass = this.localeContext === 'datapage' ? '@baseclass' : className;
6785
6757
  this.localeName = this.localeContext === 'datapage' ? metaData?.datasource?.name : refName;
6786
6758
  this.localePath = this.localeContext === 'datapage' ? displayName : this.localeName;
6787
- this.localizedValue = this.pConn$.getLocalizedValue(this.value$, this.localePath,
6788
- // @ts-ignore - Property 'getLocaleRuleNameFromKeys' is private and only accessible within class 'C11nEnv'.
6789
- this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
6759
+ this.localizedValue = this.pConn$.getLocalizedValue(this.value$, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
6790
6760
  // trigger display of error message with field control
6791
6761
  if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
6792
6762
  const timer = interval(100).subscribe(() => {
@@ -6815,9 +6785,7 @@ class DropdownComponent {
6815
6785
  this.angularPConnectData.actions?.onBlur(this, event);
6816
6786
  }
6817
6787
  getLocalizedOptionValue(opt) {
6818
- return this.pConn$.getLocalizedValue(opt.value, this.localePath,
6819
- // @ts-ignore - Property 'getLocaleRuleNameFromKeys' is private and only accessible within class 'C11nEnv'.
6820
- this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
6788
+ return this.pConn$.getLocalizedValue(opt.value, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
6821
6789
  }
6822
6790
  getErrorMessage() {
6823
6791
  let errMessage = '';
@@ -7630,7 +7598,6 @@ class RadioButtonsComponent {
7630
7598
  this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
7631
7599
  }
7632
7600
  this.componentReference = this.pConn$.getStateProps().value;
7633
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
7634
7601
  this.options$ = this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject());
7635
7602
  const propName = this.pConn$.getStateProps().value;
7636
7603
  const className = this.pConn$.getCaseInfo().getClassName();
@@ -7643,9 +7610,7 @@ class RadioButtonsComponent {
7643
7610
  this.localeClass = this.localeContext === 'datapage' ? '@baseclass' : className;
7644
7611
  this.localeName = this.localeContext === 'datapage' ? metaData?.datasource?.name : refName;
7645
7612
  this.localePath = this.localeContext === 'datapage' ? displayName : this.localeName;
7646
- this.localizedValue = this.pConn$.getLocalizedValue(this.value$, this.localePath,
7647
- // @ts-ignore - Property 'getLocaleRuleNameFromKeys' is private and only accessible within class 'C11nEnv'
7648
- this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
7613
+ this.localizedValue = this.pConn$.getLocalizedValue(this.value$, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
7649
7614
  // trigger display of error message with field control
7650
7615
  if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
7651
7616
  const timer = interval(100).subscribe(() => {
@@ -7666,9 +7631,7 @@ class RadioButtonsComponent {
7666
7631
  this.angularPConnectData.actions?.onBlur(this, event);
7667
7632
  }
7668
7633
  getLocalizedOptionValue(opt) {
7669
- return this.pConn$.getLocalizedValue(opt.value, this.localePath,
7670
- // @ts-ignore - Property 'getLocaleRuleNameFromKeys' is private and only accessible within class 'C11nEnv'
7671
- this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
7634
+ return this.pConn$.getLocalizedValue(opt.value, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
7672
7635
  }
7673
7636
  getErrorMessage() {
7674
7637
  let errMessage = '';
@@ -7812,8 +7775,6 @@ class TextAreaComponent {
7812
7775
  if (this.configProps$.value != undefined) {
7813
7776
  this.value$ = this.configProps$.value;
7814
7777
  }
7815
- // @ts-ignore - Property 'getFieldMetadata' is private and only accessible within class 'C11nEnv'.
7816
- // @ts-ignore - Property 'getRawConfigProps' is private and only accessible within class 'C11nEnv'
7817
7778
  this.nMaxLength$ = this.pConn$.getFieldMetadata(this.pConn$.getRawConfigProps()?.value)?.maxLength || 100;
7818
7779
  this.testId = this.configProps$.testId;
7819
7780
  this.displayMode$ = this.configProps$.displayMode;
@@ -8729,11 +8690,12 @@ class ScalarListComponent {
8729
8690
  return this.pConn$.createComponent({
8730
8691
  type: componentType,
8731
8692
  config: {
8693
+ // @ts-ignore - Object literal may only specify known properties, and 'value' does not exist in type 'ComponentMetadataConfig'.
8732
8694
  value: scalarValue,
8733
8695
  displayMode: 'LABELS_LEFT',
8734
8696
  label: this.label$,
8735
8697
  ...restProps,
8736
- readOnly: 'true'
8698
+ readOnly: true
8737
8699
  }
8738
8700
  }, '', '', {}); // 2nd, 3rd, and 4th args empty string/object/null until typedef marked correctly as optional;
8739
8701
  });
@@ -9166,9 +9128,7 @@ class CaseViewComponent {
9166
9128
  }
9167
9129
  }
9168
9130
  hasCaseIDChanged() {
9169
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
9170
9131
  if (this.currentCaseID !== this.pConn$.getDataObject().caseInfo.ID) {
9171
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
9172
9132
  this.currentCaseID = this.pConn$.getDataObject().caseInfo.ID;
9173
9133
  return true;
9174
9134
  }
@@ -9176,12 +9136,10 @@ class CaseViewComponent {
9176
9136
  }
9177
9137
  updateHeaderAndSummary() {
9178
9138
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
9179
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
9180
9139
  const hasNewAttachments = this.pConn$.getDataObject().caseInfo?.hasNewAttachments;
9181
9140
  if (hasNewAttachments !== this.bHasNewAttachments) {
9182
9141
  this.bHasNewAttachments = hasNewAttachments;
9183
9142
  if (this.bHasNewAttachments) {
9184
- // @ts-ignore - Argument of type 'boolean' is not assignable to parameter of type 'object'
9185
9143
  PCore.getPubSubUtils().publish(PCore.getEvents().getCaseEvent().CASE_ATTACHMENTS_UPDATED_FROM_CASEVIEW, true);
9186
9144
  }
9187
9145
  }
@@ -9197,7 +9155,6 @@ class CaseViewComponent {
9197
9155
  timer.unsubscribe();
9198
9156
  this.heading$ = PCore.getLocaleUtils().getLocaleValue(this.configProps$.header, '', this.localeKey);
9199
9157
  this.id$ = this.configProps$.subheader;
9200
- // @ts-ignore - second parameter pageReference for getValue method should be optional
9201
9158
  this.status$ = this.pConn$.getValue('.pyStatusWork');
9202
9159
  });
9203
9160
  }
@@ -9210,7 +9167,6 @@ class CaseViewComponent {
9210
9167
  this.localeKey = `${this.pConn$.getCaseInfo().getClassName()}!CASE!${this.pConn$.getCaseInfo().getName()}`.toUpperCase();
9211
9168
  this.updateHeaderAndSummary();
9212
9169
  this.arChildren$ = this.pConn$.getChildren();
9213
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
9214
9170
  const caseInfo = this.pConn$.getDataObject().caseInfo;
9215
9171
  this.currentCaseID = caseInfo.ID;
9216
9172
  this.arAvailableActions$ = caseInfo?.availableActions ? caseInfo.availableActions : [];
@@ -9279,11 +9235,11 @@ class CaseViewComponent {
9279
9235
  openProcessAction(data.ID, { ...data });
9280
9236
  }
9281
9237
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CaseViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: AngularPConnectService }, { token: Utils }], target: i0.ɵɵFactoryTarget.Component }); }
9282
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CaseViewComponent, isStandalone: true, selector: "app-case-view", inputs: { pConn$: "pConn$", formGroup$: "formGroup$", displayOnlyFA$: "displayOnlyFA$" }, providers: [Utils], ngImport: i0, template: "<div class=\"psdk-case-view\" id=\"case-view\">\n <div *ngIf=\"!displayOnlyFA$\" class=\"psdk-case-view-info\">\n <mat-toolbar color=\"primary\" class=\"psdk-case-view-toolbar\">\n <mat-toolbar-row style=\"padding-left: 1rem\">\n <div class=\"psdk-case-icon-div\">\n <img class=\"psdk-case-svg-icon\" src=\"{{ svgCase$ }}\" />\n </div>\n <div class=\"psdk-case-view-heading\">\n <div id=\"current-caseID\" [hidden]=\"true\">{{ currentCaseID }}</div>\n <div class=\"psdk-case-view-heading-id\" id=\"caseId\">{{ id$ }}</div>\n <div>\n <h1 id=\"case-name\">{{ heading$ }}</h1>\n </div>\n </div>\n </mat-toolbar-row>\n </mat-toolbar>\n\n <div class=\"psdk-case-view-buttons\">\n <button *ngIf=\"editAction\" mat-raised-button color=\"secondary\" (click)=\"_editClick()\">{{ localizedVal('Edit', localeCategory) }}</button>\n <button mat-raised-button color=\"secondary\" [matMenuTriggerFor]=\"actionMenu\">{{ localizedVal('Actions...', localeCategory) }}</button>\n <mat-menu #actionMenu=\"matMenu\" overlapTrigger=\"false\">\n <ng-container *ngFor=\"let action of arAvailableActions$\">\n <button mat-menu-item (click)=\"_menuActionClick(action)\">\n {{ localizedVal(action.name, '', localeKey) }}\n </button>\n </ng-container>\n <ng-container *ngFor=\"let process of arAvailabeProcesses$\">\n <button mat-menu-item (click)=\"_menuProcessClick(process)\">\n {{ process.name }}\n </button>\n </ng-container>\n </mat-menu>\n </div>\n\n <div class=\"psdk-case-view-divider\"></div>\n\n <div class=\"psdk-case-view-summary\">\n <component-mapper name=\"CaseSummary\" [props]=\"{ pConn$: caseSummaryPConn$ }\"></component-mapper>\n </div>\n\n <component-mapper\n *ngIf=\"caseTabs$.length > 1\"\n name=\"VerticalTabs\"\n [props]=\"{ tabConfig$: caseTabs$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ tabClick: onTabClick }\"\n ></component-mapper>\n </div>\n <div class=\"psdk-case-view-main\">\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"\n kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'stages'\n \"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'todo'\"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name == 'Main'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngIf=\"!displayOnlyFA$\">\n <component-mapper name=\"DeferLoad\" [props]=\"{ pConn$, loadData$: tabData$, name: tabData$?.config?.name }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngIf=\"arChildren$\" class=\"psdk-case-view-utilities\">\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()?.type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata()?.name == 'Utilities'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h1{font-size:1.1rem;line-height:1.3rem}::ng-deep .mat-mdc-menu-panel{overflow:unset;max-width:unset}.psdk-case-view-label{font-size:1rem;display:block;transform:translateY(.2em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(.2em) scale(.75);width:133.33333%;border-radius:.6125rem}.psdk-case-view{box-sizing:border-box;display:flex}.ng-case-view-toolbar{padding:.625rem}.psdk-case-icon-div{background-color:var(--app-primary-dark-color);border-radius:1rem;padding:.5rem .3rem .3rem}.psdk-case-svg-icon{width:2rem;padding:0rem .3125rem;filter:var(--app-white-color-filter)}.psdk-case-view-info-box{display:flex;flex-direction:row;padding:0rem .3125rem 0rem 0rem}.psdk-case-view-info{flex:0 0 auto;width:25rem;float:left;padding:0rem .3125rem 0rem 0rem;height:100%;background-color:var(--app-form-color)}.psdk-case-view-main{flex-grow:2;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-summary{padding-left:.75rem}.psdk-case-view-heading{display:block;text-align:left;padding-left:.5rem;padding-bottom:0;padding-top:5px}.psdk-case-view-heading-id{font-size:.9rem;font-weight:400}.psdk-case-view-buttons{display:flex;justify-content:flex-start;padding:.3125rem}.psdk-case-view-utilities{width:21.875rem;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-status{padding:.3125rem;background-color:var(--app-primary-color);color:var(--app-form-color);width:fit-content;margin:.625rem}button{margin:0rem .3125rem}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatToolbarModule) }, { kind: "component", type: i0.forwardRef(() => i4$4.MatToolbar), selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i0.forwardRef(() => i4$4.MatToolbarRow), selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatMenuModule) }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenu), selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenuItem), selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i0.forwardRef(() => i6$1.MatMenuTrigger), selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
9238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CaseViewComponent, isStandalone: true, selector: "app-case-view", inputs: { pConn$: "pConn$", formGroup$: "formGroup$", displayOnlyFA$: "displayOnlyFA$" }, providers: [Utils], ngImport: i0, template: "<div class=\"psdk-case-view\" id=\"case-view\">\n <div *ngIf=\"!displayOnlyFA$\" class=\"psdk-case-view-info\">\n <mat-toolbar color=\"primary\" class=\"psdk-case-view-toolbar\">\n <mat-toolbar-row style=\"padding-left: 1rem\">\n <div class=\"psdk-case-icon-div\">\n <img class=\"psdk-case-svg-icon\" src=\"{{ svgCase$ }}\" />\n </div>\n <div class=\"psdk-case-view-heading\">\n <div>\n <h1 id=\"case-name\">{{ heading$ }}</h1>\n </div>\n <div id=\"current-caseID\" [hidden]=\"true\">{{ currentCaseID }}</div>\n <div class=\"psdk-case-view-heading-id\" id=\"caseId\">{{ id$ }}</div>\n </div>\n </mat-toolbar-row>\n </mat-toolbar>\n\n <div class=\"psdk-case-view-buttons\">\n <button *ngIf=\"editAction\" mat-raised-button color=\"secondary\" (click)=\"_editClick()\">{{ localizedVal('Edit', localeCategory) }}</button>\n <button mat-raised-button color=\"secondary\" [matMenuTriggerFor]=\"actionMenu\">{{ localizedVal('Actions...', localeCategory) }}</button>\n <mat-menu #actionMenu=\"matMenu\" overlapTrigger=\"false\">\n <ng-container *ngFor=\"let action of arAvailableActions$\">\n <button mat-menu-item (click)=\"_menuActionClick(action)\">\n {{ localizedVal(action.name, '', localeKey) }}\n </button>\n </ng-container>\n <ng-container *ngFor=\"let process of arAvailabeProcesses$\">\n <button mat-menu-item (click)=\"_menuProcessClick(process)\">\n {{ process.name }}\n </button>\n </ng-container>\n </mat-menu>\n </div>\n\n <div class=\"psdk-case-view-divider\"></div>\n\n <div class=\"psdk-case-view-summary\">\n <component-mapper name=\"CaseSummary\" [props]=\"{ pConn$: caseSummaryPConn$ }\"></component-mapper>\n </div>\n\n <component-mapper\n *ngIf=\"caseTabs$.length > 1\"\n name=\"VerticalTabs\"\n [props]=\"{ tabConfig$: caseTabs$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ tabClick: onTabClick }\"\n ></component-mapper>\n </div>\n <div class=\"psdk-case-view-main\">\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"\n kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'stages'\n \"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'todo'\"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name == 'Main'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngIf=\"!displayOnlyFA$\">\n <component-mapper name=\"DeferLoad\" [props]=\"{ pConn$, loadData$: tabData$, name: tabData$?.config?.name }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngIf=\"arChildren$\" class=\"psdk-case-view-utilities\">\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()?.type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata()?.name == 'Utilities'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h1{font-size:1.1rem;line-height:1.3rem}::ng-deep .mat-mdc-menu-panel{overflow:unset;max-width:unset}.psdk-case-view-label{font-size:1rem;display:block;transform:translateY(.2em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(.2em) scale(.75);width:133.33333%;border-radius:.6125rem}.psdk-case-view{box-sizing:border-box;display:flex}.ng-case-view-toolbar{padding:.625rem}.psdk-case-icon-div{background-color:var(--app-primary-dark-color);border-radius:1rem;padding:.5rem .3rem .3rem}.psdk-case-svg-icon{width:2rem;padding:0rem .3125rem;filter:var(--app-white-color-filter)}.psdk-case-view-info-box{display:flex;flex-direction:row;padding:0rem .3125rem 0rem 0rem}.psdk-case-view-info{flex:0 0 auto;width:25rem;float:left;padding:0rem .3125rem 0rem 0rem;margin-left:.5rem;margin-top:.5rem;height:100%;background-color:var(--app-form-color)}.psdk-case-view-main{flex-grow:2;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-summary{padding-left:.75rem}.psdk-case-view-heading{display:block;text-align:left;padding-left:.5rem;padding-bottom:0;padding-top:5px}.psdk-case-view-heading-id{font-size:.9rem;font-weight:400}.psdk-case-view-buttons{display:flex;justify-content:flex-start;padding:.3125rem}.psdk-case-view-utilities{width:21.875rem;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-status{padding:.3125rem;background-color:var(--app-primary-color);color:var(--app-form-color);width:fit-content;margin:.625rem}button{margin:0rem .3125rem}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatToolbarModule) }, { kind: "component", type: i0.forwardRef(() => i4$4.MatToolbar), selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i0.forwardRef(() => i4$4.MatToolbarRow), selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatMenuModule) }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenu), selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenuItem), selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i0.forwardRef(() => i6$1.MatMenuTrigger), selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
9283
9239
  }
9284
9240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CaseViewComponent, decorators: [{
9285
9241
  type: Component,
9286
- args: [{ selector: 'app-case-view', providers: [Utils], standalone: true, imports: [CommonModule, MatToolbarModule, MatButtonModule, MatMenuModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"psdk-case-view\" id=\"case-view\">\n <div *ngIf=\"!displayOnlyFA$\" class=\"psdk-case-view-info\">\n <mat-toolbar color=\"primary\" class=\"psdk-case-view-toolbar\">\n <mat-toolbar-row style=\"padding-left: 1rem\">\n <div class=\"psdk-case-icon-div\">\n <img class=\"psdk-case-svg-icon\" src=\"{{ svgCase$ }}\" />\n </div>\n <div class=\"psdk-case-view-heading\">\n <div id=\"current-caseID\" [hidden]=\"true\">{{ currentCaseID }}</div>\n <div class=\"psdk-case-view-heading-id\" id=\"caseId\">{{ id$ }}</div>\n <div>\n <h1 id=\"case-name\">{{ heading$ }}</h1>\n </div>\n </div>\n </mat-toolbar-row>\n </mat-toolbar>\n\n <div class=\"psdk-case-view-buttons\">\n <button *ngIf=\"editAction\" mat-raised-button color=\"secondary\" (click)=\"_editClick()\">{{ localizedVal('Edit', localeCategory) }}</button>\n <button mat-raised-button color=\"secondary\" [matMenuTriggerFor]=\"actionMenu\">{{ localizedVal('Actions...', localeCategory) }}</button>\n <mat-menu #actionMenu=\"matMenu\" overlapTrigger=\"false\">\n <ng-container *ngFor=\"let action of arAvailableActions$\">\n <button mat-menu-item (click)=\"_menuActionClick(action)\">\n {{ localizedVal(action.name, '', localeKey) }}\n </button>\n </ng-container>\n <ng-container *ngFor=\"let process of arAvailabeProcesses$\">\n <button mat-menu-item (click)=\"_menuProcessClick(process)\">\n {{ process.name }}\n </button>\n </ng-container>\n </mat-menu>\n </div>\n\n <div class=\"psdk-case-view-divider\"></div>\n\n <div class=\"psdk-case-view-summary\">\n <component-mapper name=\"CaseSummary\" [props]=\"{ pConn$: caseSummaryPConn$ }\"></component-mapper>\n </div>\n\n <component-mapper\n *ngIf=\"caseTabs$.length > 1\"\n name=\"VerticalTabs\"\n [props]=\"{ tabConfig$: caseTabs$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ tabClick: onTabClick }\"\n ></component-mapper>\n </div>\n <div class=\"psdk-case-view-main\">\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"\n kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'stages'\n \"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'todo'\"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name == 'Main'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngIf=\"!displayOnlyFA$\">\n <component-mapper name=\"DeferLoad\" [props]=\"{ pConn$, loadData$: tabData$, name: tabData$?.config?.name }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngIf=\"arChildren$\" class=\"psdk-case-view-utilities\">\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()?.type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata()?.name == 'Utilities'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h1{font-size:1.1rem;line-height:1.3rem}::ng-deep .mat-mdc-menu-panel{overflow:unset;max-width:unset}.psdk-case-view-label{font-size:1rem;display:block;transform:translateY(.2em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(.2em) scale(.75);width:133.33333%;border-radius:.6125rem}.psdk-case-view{box-sizing:border-box;display:flex}.ng-case-view-toolbar{padding:.625rem}.psdk-case-icon-div{background-color:var(--app-primary-dark-color);border-radius:1rem;padding:.5rem .3rem .3rem}.psdk-case-svg-icon{width:2rem;padding:0rem .3125rem;filter:var(--app-white-color-filter)}.psdk-case-view-info-box{display:flex;flex-direction:row;padding:0rem .3125rem 0rem 0rem}.psdk-case-view-info{flex:0 0 auto;width:25rem;float:left;padding:0rem .3125rem 0rem 0rem;height:100%;background-color:var(--app-form-color)}.psdk-case-view-main{flex-grow:2;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-summary{padding-left:.75rem}.psdk-case-view-heading{display:block;text-align:left;padding-left:.5rem;padding-bottom:0;padding-top:5px}.psdk-case-view-heading-id{font-size:.9rem;font-weight:400}.psdk-case-view-buttons{display:flex;justify-content:flex-start;padding:.3125rem}.psdk-case-view-utilities{width:21.875rem;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-status{padding:.3125rem;background-color:var(--app-primary-color);color:var(--app-form-color);width:fit-content;margin:.625rem}button{margin:0rem .3125rem}\n"] }]
9242
+ args: [{ selector: 'app-case-view', providers: [Utils], standalone: true, imports: [CommonModule, MatToolbarModule, MatButtonModule, MatMenuModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"psdk-case-view\" id=\"case-view\">\n <div *ngIf=\"!displayOnlyFA$\" class=\"psdk-case-view-info\">\n <mat-toolbar color=\"primary\" class=\"psdk-case-view-toolbar\">\n <mat-toolbar-row style=\"padding-left: 1rem\">\n <div class=\"psdk-case-icon-div\">\n <img class=\"psdk-case-svg-icon\" src=\"{{ svgCase$ }}\" />\n </div>\n <div class=\"psdk-case-view-heading\">\n <div>\n <h1 id=\"case-name\">{{ heading$ }}</h1>\n </div>\n <div id=\"current-caseID\" [hidden]=\"true\">{{ currentCaseID }}</div>\n <div class=\"psdk-case-view-heading-id\" id=\"caseId\">{{ id$ }}</div>\n </div>\n </mat-toolbar-row>\n </mat-toolbar>\n\n <div class=\"psdk-case-view-buttons\">\n <button *ngIf=\"editAction\" mat-raised-button color=\"secondary\" (click)=\"_editClick()\">{{ localizedVal('Edit', localeCategory) }}</button>\n <button mat-raised-button color=\"secondary\" [matMenuTriggerFor]=\"actionMenu\">{{ localizedVal('Actions...', localeCategory) }}</button>\n <mat-menu #actionMenu=\"matMenu\" overlapTrigger=\"false\">\n <ng-container *ngFor=\"let action of arAvailableActions$\">\n <button mat-menu-item (click)=\"_menuActionClick(action)\">\n {{ localizedVal(action.name, '', localeKey) }}\n </button>\n </ng-container>\n <ng-container *ngFor=\"let process of arAvailabeProcesses$\">\n <button mat-menu-item (click)=\"_menuProcessClick(process)\">\n {{ process.name }}\n </button>\n </ng-container>\n </mat-menu>\n </div>\n\n <div class=\"psdk-case-view-divider\"></div>\n\n <div class=\"psdk-case-view-summary\">\n <component-mapper name=\"CaseSummary\" [props]=\"{ pConn$: caseSummaryPConn$ }\"></component-mapper>\n </div>\n\n <component-mapper\n *ngIf=\"caseTabs$.length > 1\"\n name=\"VerticalTabs\"\n [props]=\"{ tabConfig$: caseTabs$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ tabClick: onTabClick }\"\n ></component-mapper>\n </div>\n <div class=\"psdk-case-view-main\">\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"\n kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'stages'\n \"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div\n *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name.toLowerCase() == 'todo'\"\n >\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata().type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata().name == 'Main'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n\n <div *ngIf=\"!displayOnlyFA$\">\n <component-mapper name=\"DeferLoad\" [props]=\"{ pConn$, loadData$: tabData$, name: tabData$?.config?.name }\"></component-mapper>\n </div>\n </div>\n <div *ngIf=\"!displayOnlyFA$\">\n <div *ngIf=\"arChildren$\" class=\"psdk-case-view-utilities\">\n <div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()?.type.toLowerCase() == 'region' && kid.getPConnect().getRawMetadata()?.name == 'Utilities'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h1{font-size:1.1rem;line-height:1.3rem}::ng-deep .mat-mdc-menu-panel{overflow:unset;max-width:unset}.psdk-case-view-label{font-size:1rem;display:block;transform:translateY(.2em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(.2em) scale(.75);width:133.33333%;border-radius:.6125rem}.psdk-case-view{box-sizing:border-box;display:flex}.ng-case-view-toolbar{padding:.625rem}.psdk-case-icon-div{background-color:var(--app-primary-dark-color);border-radius:1rem;padding:.5rem .3rem .3rem}.psdk-case-svg-icon{width:2rem;padding:0rem .3125rem;filter:var(--app-white-color-filter)}.psdk-case-view-info-box{display:flex;flex-direction:row;padding:0rem .3125rem 0rem 0rem}.psdk-case-view-info{flex:0 0 auto;width:25rem;float:left;padding:0rem .3125rem 0rem 0rem;margin-left:.5rem;margin-top:.5rem;height:100%;background-color:var(--app-form-color)}.psdk-case-view-main{flex-grow:2;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-summary{padding-left:.75rem}.psdk-case-view-heading{display:block;text-align:left;padding-left:.5rem;padding-bottom:0;padding-top:5px}.psdk-case-view-heading-id{font-size:.9rem;font-weight:400}.psdk-case-view-buttons{display:flex;justify-content:flex-start;padding:.3125rem}.psdk-case-view-utilities{width:21.875rem;float:left;padding:0rem .3125rem;height:100%}.psdk-case-view-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-status{padding:.3125rem;background-color:var(--app-primary-color);color:var(--app-form-color);width:fit-content;margin:.625rem}button{margin:0rem .3125rem}\n"] }]
9287
9243
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: AngularPConnectService }, { type: Utils }], propDecorators: { pConn$: [{
9288
9244
  type: Input
9289
9245
  }], formGroup$: [{
@@ -9490,10 +9446,8 @@ class DataReferenceComponent {
9490
9446
  handleSelection(event) {
9491
9447
  const caseKey = this.pConn$.getCaseInfo().getKey();
9492
9448
  const refreshOptions = { autoDetectRefresh: true };
9493
- // @ts-ignore - second parameter pageReference for getValue method should be optional
9494
9449
  if (this.canBeChangedInReviewMode && this.pConn$.getValue('__currentPageTabViewName')) {
9495
- // @ts-ignore - second parameter pageReference for getValue method should be optional
9496
- this.pConn$.getActionsApi().refreshCaseView(caseKey, this.pConn$.getValue('__currentPageTabViewName'), null, refreshOptions);
9450
+ this.pConn$.getActionsApi().refreshCaseView(caseKey, this.pConn$.getValue('__currentPageTabViewName'), '', refreshOptions);
9497
9451
  PCore.getDeferLoadManager().refreshActiveComponents(this.pConn$.getContextName());
9498
9452
  }
9499
9453
  else {
@@ -10280,7 +10234,6 @@ class DynamicTabsComponent {
10280
10234
  }
10281
10235
  updateSelf() {
10282
10236
  const { referenceList } = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
10283
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'
10284
10237
  const { tablabel } = this.pConn$.getComponentConfig();
10285
10238
  const tablabelProp = PCore.getAnnotationUtils().getPropertyName(tablabel);
10286
10239
  this.pConn$.setInheritedProp('displayMode', 'LABELS_LEFT');
@@ -10419,22 +10372,12 @@ class FieldGroupTemplateComponent {
10419
10372
  this.prevRefLength = this.referenceList.length;
10420
10373
  }
10421
10374
  addFieldGroupItem() {
10422
- if (PCore.getPCoreVersion()?.includes('8.7')) {
10423
- this.pConn$.getListActions().insert({ classID: this.contextClass }, this.referenceList.length, this.pageReference);
10424
- }
10425
- else {
10426
- // @ts-ignore - second parameter "pageRef" is optional for insert method
10427
- this.pConn$.getListActions().insert({ classID: this.contextClass }, this.referenceList.length);
10428
- }
10375
+ // @ts-ignore - second parameter "pageRef" is optional for insert method
10376
+ this.pConn$.getListActions().insert({ classID: this.contextClass }, this.referenceList.length);
10429
10377
  }
10430
10378
  deleteFieldGroupItem(index) {
10431
- if (PCore.getPCoreVersion()?.includes('8.7')) {
10432
- this.pConn$.getListActions().deleteEntry(index, this.pageReference);
10433
- }
10434
- else {
10435
- // @ts-ignore - second parameter "pageRef" is optional for deleteEntry method
10436
- this.pConn$.getListActions().deleteEntry(index);
10437
- }
10379
+ // @ts-ignore - second parameter "pageRef" is optional for deleteEntry method
10380
+ this.pConn$.getListActions().deleteEntry(index);
10438
10381
  }
10439
10382
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldGroupTemplateComponent, deps: [{ token: AngularPConnectService }, { token: Utils }], target: i0.ɵɵFactoryTarget.Component }); }
10440
10383
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FieldGroupTemplateComponent, isStandalone: true, selector: "app-field-group-template", inputs: { configProps$: "configProps$", pConn$: "pConn$", formGroup$: "formGroup$" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"field-group\">\n <h3 *ngIf=\"showLabel$\" className=\"label\" style=\"font-weight: bold\">\n {{ label$ }}\n </h3>\n <div *ngIf=\"readonlyMode; else editable\">\n <div *ngIf=\"children && children.length > 0\">\n <div *ngFor=\"let item of children; let i = index\">\n <component-mapper name=\"FieldGroupList\" [props]=\"{ heading: item.name, formGroup$, item }\"></component-mapper>\n </div>\n </div>\n </div>\n <ng-template #editable>\n <div *ngIf=\"children && children.length > 0\">\n <div *ngFor=\"let kid of children; let i = index\">\n <div class=\"header-div\">\n <div style=\"width: 80%\">\n <b>{{ kid.name }}</b>\n </div>\n <div *ngIf=\"allowAddEdit !== false\" style=\"width: 20%; text-align: right\">\n <button id=\"delete-button\" mat-icon-button (click)=\"deleteFieldGroupItem(i)\">\n <img class=\"psdk-utility-card-action-svg-icon\" src=\"{{ menuIconOverride$ }}\" />\n </button>\n </div>\n </div>\n\n <div *ngIf=\"kid.children.getPConnect().getRawMetadata().type.toLowerCase() == 'region'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.children.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n <button *ngIf=\"allowAddEdit !== false\" mat-button color=\"primary\" style=\"font-size: 16px\" (click)=\"addFieldGroupItem()\">+ Add</button>\n </div>\n </ng-template>\n</div>\n", styles: [".psdk-utility-card-action-svg-icon{width:1.4rem}.header-div{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => i3$1.MatIconButton), selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
@@ -11407,7 +11350,6 @@ function useInit(props) {
11407
11350
  const runtimeParams = PCore.getRuntimeParamsAPI().getRuntimeParams();
11408
11351
  let selectionCountThreshold;
11409
11352
  // promise to fetch metadata
11410
- // @ts-ignore - 3rd parameter "associationFilter" should be optional for getDataViewMetadata method
11411
11353
  const metaDataPromise = PCore.getAnalyticsUtils().getDataViewMetadata(referenceList, showDynamicFields);
11412
11354
  const promisesArray = [metaDataPromise];
11413
11355
  // promise to fetch report configured columns
@@ -11523,6 +11465,7 @@ class ListViewComponent {
11523
11465
  this.filterOnSvgIcon$ = this.utils.getImageSrc('filter-on', this.utils.getSDKStaticContentUrl());
11524
11466
  this.groupBySvgIcon$ = this.utils.getImageSrc('row', this.utils.getSDKStaticContentUrl());
11525
11467
  this.selectionMode = this.configProps$.selectionMode;
11468
+ this.checkBoxValue = this.configProps$.value;
11526
11469
  this.arFilterMainButtons$.push({ actionID: 'submit', jsAction: 'submit', name: 'Submit' });
11527
11470
  this.arFilterSecondaryButtons$.push({ actionID: 'cancel', jsAction: 'cancel', name: 'Cancel' });
11528
11471
  this.searchIcon$ = this.utils.getImageSrc('search', this.utils.getSDKStaticContentUrl());
@@ -11664,7 +11607,6 @@ class ListViewComponent {
11664
11607
  return PCore.getAnalyticsUtils().getDataViewMetadata(refList, this.showDynamicFields);
11665
11608
  }
11666
11609
  getListData() {
11667
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'
11668
11610
  const componentConfig = this.pConn$.getComponentConfig();
11669
11611
  if (this.configProps$) {
11670
11612
  this.preparePayload();
@@ -11674,8 +11616,7 @@ class ListViewComponent {
11674
11616
  const payload = this.payload || this.filterPayload || {};
11675
11617
  const dataViewParameters = this.payload.parameters;
11676
11618
  const workListDataPromise = !this.bInForm$
11677
- ? // @ts-ignore - 3rd parameter "context" should be optional in getData method
11678
- PCore.getDataApiUtils().getData(refList, payload)
11619
+ ? PCore.getDataApiUtils().getData(refList, payload)
11679
11620
  : PCore.getDataPageUtils().getDataAsync(refList, this.pConn$.getContextName(), payload.dataViewParameters ? payload.dataViewParameters : dataViewParameters, this.paging, this.query);
11680
11621
  this.bShowFilterPopover$ = false;
11681
11622
  this.psService.sendMessage(true);
@@ -11787,6 +11728,12 @@ class ListViewComponent {
11787
11728
  this.repeatList$.paginator.firstPage();
11788
11729
  }
11789
11730
  }
11731
+ isChecked(rowIn) {
11732
+ const initialVal = false;
11733
+ return this.configProps$?.readonlyContextList?.reduce((acc, currRow) => {
11734
+ return acc || rowIn[this.rowID] === currRow[this.rowID];
11735
+ }, initialVal);
11736
+ }
11790
11737
  fieldOnChange(row) {
11791
11738
  const value = row[this.rowID];
11792
11739
  const reqObj = {};
@@ -11800,6 +11747,7 @@ class ListViewComponent {
11800
11747
  else {
11801
11748
  reqObj[this.rowID] = value;
11802
11749
  }
11750
+ this.checkBoxValue = value;
11803
11751
  this.pConn$?.getListActions?.()?.setSelectedRows([reqObj]);
11804
11752
  }
11805
11753
  onCheckboxClick(row, event) {
@@ -12580,7 +12528,7 @@ class ListViewComponent {
12580
12528
  return select;
12581
12529
  }
12582
12530
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListViewComponent, deps: [{ token: ProgressSpinnerService }, { token: Utils }], target: i0.ɵɵFactoryTarget.Component }); }
12583
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ListViewComponent, isStandalone: true, selector: "app-list-view", inputs: { pConn$: "pConn$", bInForm$: "bInForm$", payload: "payload" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div class=\"psdk-list-header\">\n <div>\n <mat-form-field class=\"psdk-search\" *ngIf=\"bShowSearch$\">\n <mat-label><img class=\"psdk-icon-search\" src=\"{{ searchIcon$ }}\" /> <span class=\"psdk-search-label\">Search</span> </mat-label>\n <input matInput id=\"search\" (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <div *ngIf=\"!bInForm$\" class=\"psdk-outer-div-in-form\">\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"bColumnReorder$\">\n <div>\n <table\n mat-table\n id=\"list-view\"\n [dataSource]=\"repeatList$\"\n matSort\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\" cdkDrag>\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"!bColumnReorder$\">\n <div>\n <table mat-table id=\"list-view\" [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n </div>\n <div *ngIf=\"bInForm$\">\n <div>\n <div class=\"psdk-inner-div-in-form\">\n <table id=\"list-view\" *ngIf=\"repeatListData.length > 0\" mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngIf=\"singleSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-radio-button [value]=\"row[rowID]\" (change)=\"fieldOnChange(row)\"></mat-radio-button>\n </td>\n </ng-container>\n <ng-container *ngIf=\"multiSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox [value]=\"row[rowID]\" (change)=\"onCheckboxClick(row, $event)\"></mat-checkbox>\n </td>\n </ng-container>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.config.name] || '---' }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n </table>\n <div *ngIf=\"repeatListData?.length === 0\">\n <table id=\"list-view\" *ngIf=\"repeatListData?.length === 0\" mat-table [dataSource]=\"repeatList$\">\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef>{{ dCol.config.label }}</th>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n </table>\n </div>\n <div class=\"psdk-no-records\" *ngIf=\"repeatListData?.length === 0\">No Records Found.</div>\n </div>\n </div>\n </div>\n\n <mat-paginator id=\"pagination\" *ngIf=\"bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500, 1000]\" showFirstLastButtons></mat-paginator>\n <mat-paginator id=\"pagination\" *ngIf=\"!bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n </div>\n\n <!-- pop overs for filters-->\n <div *ngIf=\"bShowFilterPopover$\" class=\"psdk-dialog-background\">\n <div class=\"psdk-modal-file-top\">\n <h4>\n Filter:<b> {{ filterContainsLabel$ }}</b>\n </h4>\n <div *ngIf=\"bContains$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"contains\">Contains</mat-option>\n <mat-option value=\"equals\">Equals</mat-option>\n <mat-option value=\"startswith\">Starts with</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"psdk-full-width\">\n <input matInput type=\"text\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsValue($event)\" />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"bDateTime$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"notequal\">is not equal to</mat-option>\n <mat-option value=\"after\">after</mat-option>\n <mat-option value=\"before\">before</mat-option>\n <mat-option value=\"null\">is null</mat-option>\n <mat-option value=\"notnull\">is not null</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDate$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date</mat-label>\n <input\n matInput\n #dateInput\n [matDatepicker]=\"pegadate\"\n type=\"text\"\n [value]=\"filterContainsValue$\"\n (dateChange)=\"_filterContainsDateValue($event, dateInput.value)\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"pegadate\"></mat-datepicker-toggle>\n <mat-datepicker #pegadate [startAt]=\"filterContainsValue$\"></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDateTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date time</mat-label>\n <input matInput type=\"datetime-local\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsDateTimeValue($event)\" />\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Time</mat-label>\n <input matInput type=\"time\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsTimeValue($event)\" />\n </mat-form-field>\n </div>\n\n <component-mapper\n name=\"ActionButtons\"\n [props]=\"{ arMainButtons$: arFilterMainButtons$, arSecondaryButtons$: arFilterSecondaryButtons$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ actionButtonClick: _onFilterActionButtonClick }\"\n ></component-mapper>\n </div>\n </div>\n</div>\n", styles: [".psdk-list-header{background-color:var(--app-form-color);padding:1rem;margin:.5rem;border-radius:.6125rem}table{width:100%}::ng-deep .mat-sort-header-content{white-space:nowrap}::ng-deep td.mat-mdc-cell{white-space:nowrap}::ng-deep th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding:0rem .188rem}::ng-deep .mat-mdc-button{padding:0;text-align:left}.mat-mdc-icon-button{width:fit-content}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-mat-header{white-space:nowrap;padding-right:5px}.psdk-mat-header-button{display:inline-grid}.psdk-mat-header-arrow,.psdk-mat-header-filter{display:inline-grid;vertical-align:middle}.psdk-full-width{width:100%}.psdk-search{padding-left:.625rem;padding-right:.625rem}.psdk-icon-search{vertical-align:sub;padding:.125rem;min-width:unset;width:1.1rem}.psdk-outer-div-in-form{padding:1rem;overflow:hidden}.psdk-inner-div-in-form{height:auto;position:relative;width:100%;overflow:auto;max-height:550px;min-height:auto}.psdk-list-view-svg-icon{width:1.4rem;display:inline-block;vertical-align:middle;filter:var(--app-primary-color-filter)}.psdk-filter-svg-icon,.psdk-arrow-svg-icon{width:1rem;display:inline-block;vertical-align:middle;filter:var(--app-neutral-color-filter)}.psdk-filter-popover{display:table;margin:auto;min-width:100px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color);position:absolute;z-index:99}.psdk-dialog-background{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;background-color:var(--app-dialog-background-color);position:fixed;z-index:999;top:0;left:0}.psdk-modal-file-top{display:table;margin:auto;min-width:150px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color)}.psdk-no-records{height:56px;justify-content:center;display:flex;align-items:center;border:1px solid var(--app-neutral-light-color);border-top:none}.psdk-table-field-link{color:var(--app-primary-color);padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i5.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i5.MatSuffix), selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatInputModule) }, { kind: "directive", type: i0.forwardRef(() => i6$2.MatInput), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatTableModule) }, { kind: "component", type: i0.forwardRef(() => i6$4.MatTable), selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatHeaderCellDef), selector: "[matHeaderCellDef]" }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatHeaderRowDef), selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatColumnDef), selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatCellDef), selector: "[matCellDef]" }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatRowDef), selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatHeaderCell), selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatCell), selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i0.forwardRef(() => i6$4.MatHeaderRow), selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i0.forwardRef(() => i6$4.MatRow), selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatSortModule) }, { kind: "directive", type: i0.forwardRef(() => i7$2.MatSort), selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i0.forwardRef(() => i7$2.MatSortHeader), selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: i0.forwardRef(() => DragDropModule) }, { kind: "directive", type: i0.forwardRef(() => i8$2.CdkDropList), selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i0.forwardRef(() => i8$2.CdkDrag), selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => i3$1.MatIconButton), selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatMenuModule) }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenu), selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenuItem), selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i0.forwardRef(() => i6$1.MatMenuTrigger), selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatIconModule) }, { kind: "component", type: i0.forwardRef(() => i2$2.MatIcon), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatRadioModule) }, { kind: "component", type: i0.forwardRef(() => i7$1.MatRadioButton), selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatCheckboxModule) }, { kind: "component", type: i0.forwardRef(() => i5$2.MatCheckbox), selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatPaginatorModule) }, { kind: "component", type: i0.forwardRef(() => i14.MatPaginator), selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatSelectModule) }, { kind: "component", type: i0.forwardRef(() => i6$3.MatSelect), selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i0.forwardRef(() => i7.MatOption), selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatOptionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatDatepickerModule) }, { kind: "component", type: i0.forwardRef(() => i4$2.MatDatepicker), selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i0.forwardRef(() => i4$2.MatDatepickerInput), selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i0.forwardRef(() => i4$2.MatDatepickerToggle), selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
12531
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ListViewComponent, isStandalone: true, selector: "app-list-view", inputs: { pConn$: "pConn$", bInForm$: "bInForm$", payload: "payload" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div class=\"psdk-list-header\">\n <div>\n <mat-form-field class=\"psdk-search\" *ngIf=\"bShowSearch$\">\n <mat-label><img class=\"psdk-icon-search\" src=\"{{ searchIcon$ }}\" /> <span class=\"psdk-search-label\">Search</span> </mat-label>\n <input matInput id=\"search\" (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <div *ngIf=\"!bInForm$\" class=\"psdk-outer-div-in-form\">\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"bColumnReorder$\">\n <div>\n <table\n mat-table\n id=\"list-view\"\n [dataSource]=\"repeatList$\"\n matSort\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\" cdkDrag>\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"!bColumnReorder$\">\n <div>\n <table mat-table id=\"list-view\" [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n </div>\n <div *ngIf=\"bInForm$\">\n <div>\n <div class=\"psdk-inner-div-in-form\">\n <table id=\"list-view\" *ngIf=\"repeatListData.length > 0\" mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngIf=\"singleSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-radio-button [value]=\"row[rowID]\" [checked]=\"row[rowID] === checkBoxValue\" (change)=\"fieldOnChange(row)\"></mat-radio-button>\n </td>\n </ng-container>\n <ng-container *ngIf=\"multiSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox [value]=\"row[rowID]\" [checked]=\"isChecked(row)\" (change)=\"onCheckboxClick(row, $event)\"></mat-checkbox>\n </td>\n </ng-container>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.config.name] || '---' }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n </table>\n <div *ngIf=\"repeatListData?.length === 0\">\n <table id=\"list-view\" *ngIf=\"repeatListData?.length === 0\" mat-table [dataSource]=\"repeatList$\">\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef>{{ dCol.config.label }}</th>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n </table>\n </div>\n <div class=\"psdk-no-records\" *ngIf=\"repeatListData?.length === 0\">No Records Found.</div>\n </div>\n </div>\n </div>\n\n <mat-paginator id=\"pagination\" *ngIf=\"bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500, 1000]\" showFirstLastButtons></mat-paginator>\n <mat-paginator id=\"pagination\" *ngIf=\"!bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n </div>\n\n <!-- pop overs for filters-->\n <div *ngIf=\"bShowFilterPopover$\" class=\"psdk-dialog-background\">\n <div class=\"psdk-modal-file-top\">\n <h4>\n Filter:<b> {{ filterContainsLabel$ }}</b>\n </h4>\n <div *ngIf=\"bContains$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"contains\">Contains</mat-option>\n <mat-option value=\"equals\">Equals</mat-option>\n <mat-option value=\"startswith\">Starts with</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"psdk-full-width\">\n <input matInput type=\"text\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsValue($event)\" />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"bDateTime$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"notequal\">is not equal to</mat-option>\n <mat-option value=\"after\">after</mat-option>\n <mat-option value=\"before\">before</mat-option>\n <mat-option value=\"null\">is null</mat-option>\n <mat-option value=\"notnull\">is not null</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDate$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date</mat-label>\n <input\n matInput\n #dateInput\n [matDatepicker]=\"pegadate\"\n type=\"text\"\n [value]=\"filterContainsValue$\"\n (dateChange)=\"_filterContainsDateValue($event, dateInput.value)\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"pegadate\"></mat-datepicker-toggle>\n <mat-datepicker #pegadate [startAt]=\"filterContainsValue$\"></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDateTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date time</mat-label>\n <input matInput type=\"datetime-local\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsDateTimeValue($event)\" />\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Time</mat-label>\n <input matInput type=\"time\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsTimeValue($event)\" />\n </mat-form-field>\n </div>\n\n <component-mapper\n name=\"ActionButtons\"\n [props]=\"{ arMainButtons$: arFilterMainButtons$, arSecondaryButtons$: arFilterSecondaryButtons$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ actionButtonClick: _onFilterActionButtonClick }\"\n ></component-mapper>\n </div>\n </div>\n</div>\n", styles: [".psdk-list-header{background-color:var(--app-form-color);padding:1rem;margin:.5rem;border-radius:.6125rem}table{width:100%}::ng-deep .mat-sort-header-content{white-space:nowrap}::ng-deep td.mat-mdc-cell{white-space:nowrap}::ng-deep th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding:0rem .188rem}::ng-deep .mat-mdc-button{padding:0;text-align:left}.mat-mdc-icon-button{width:fit-content}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-mat-header{white-space:nowrap;padding-right:5px}.psdk-mat-header-button{display:inline-grid}.psdk-mat-header-arrow,.psdk-mat-header-filter{display:inline-grid;vertical-align:middle}.psdk-full-width{width:100%}.psdk-search{padding-left:.625rem;padding-right:.625rem}.psdk-icon-search{vertical-align:sub;padding:.125rem;min-width:unset;width:1.1rem}.psdk-outer-div-in-form{padding:1rem;overflow:hidden}.psdk-inner-div-in-form{height:auto;position:relative;width:100%;overflow:auto;max-height:550px;min-height:auto}.psdk-list-view-svg-icon{width:1.4rem;display:inline-block;vertical-align:middle;filter:var(--app-primary-color-filter)}.psdk-filter-svg-icon,.psdk-arrow-svg-icon{width:1rem;display:inline-block;vertical-align:middle;filter:var(--app-neutral-color-filter)}.psdk-filter-popover{display:table;margin:auto;min-width:100px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color);position:absolute;z-index:99}.psdk-dialog-background{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;background-color:var(--app-dialog-background-color);position:fixed;z-index:999;top:0;left:0}.psdk-modal-file-top{display:table;margin:auto;min-width:150px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color)}.psdk-no-records{height:56px;justify-content:center;display:flex;align-items:center;border:1px solid var(--app-neutral-light-color);border-top:none}.psdk-table-field-link{color:var(--app-primary-color);padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i5.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i5.MatSuffix), selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatInputModule) }, { kind: "directive", type: i0.forwardRef(() => i6$2.MatInput), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatTableModule) }, { kind: "component", type: i0.forwardRef(() => i6$4.MatTable), selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatHeaderCellDef), selector: "[matHeaderCellDef]" }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatHeaderRowDef), selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatColumnDef), selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatCellDef), selector: "[matCellDef]" }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatRowDef), selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatHeaderCell), selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i0.forwardRef(() => i6$4.MatCell), selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i0.forwardRef(() => i6$4.MatHeaderRow), selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i0.forwardRef(() => i6$4.MatRow), selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatSortModule) }, { kind: "directive", type: i0.forwardRef(() => i7$2.MatSort), selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i0.forwardRef(() => i7$2.MatSortHeader), selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: i0.forwardRef(() => DragDropModule) }, { kind: "directive", type: i0.forwardRef(() => i8$2.CdkDropList), selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i0.forwardRef(() => i8$2.CdkDrag), selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => i3$1.MatIconButton), selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatMenuModule) }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenu), selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenuItem), selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i0.forwardRef(() => i6$1.MatMenuTrigger), selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatIconModule) }, { kind: "component", type: i0.forwardRef(() => i2$2.MatIcon), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatRadioModule) }, { kind: "component", type: i0.forwardRef(() => i7$1.MatRadioButton), selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatCheckboxModule) }, { kind: "component", type: i0.forwardRef(() => i5$2.MatCheckbox), selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatPaginatorModule) }, { kind: "component", type: i0.forwardRef(() => i14.MatPaginator), selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatSelectModule) }, { kind: "component", type: i0.forwardRef(() => i6$3.MatSelect), selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i0.forwardRef(() => i7.MatOption), selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatOptionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatDatepickerModule) }, { kind: "component", type: i0.forwardRef(() => i4$2.MatDatepicker), selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i0.forwardRef(() => i4$2.MatDatepickerInput), selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i0.forwardRef(() => i4$2.MatDatepickerToggle), selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
12584
12532
  }
12585
12533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListViewComponent, decorators: [{
12586
12534
  type: Component,
@@ -12603,7 +12551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
12603
12551
  MatOptionModule,
12604
12552
  MatDatepickerModule,
12605
12553
  forwardRef(() => ComponentMapperComponent)
12606
- ], template: "<div class=\"psdk-list-header\">\n <div>\n <mat-form-field class=\"psdk-search\" *ngIf=\"bShowSearch$\">\n <mat-label><img class=\"psdk-icon-search\" src=\"{{ searchIcon$ }}\" /> <span class=\"psdk-search-label\">Search</span> </mat-label>\n <input matInput id=\"search\" (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <div *ngIf=\"!bInForm$\" class=\"psdk-outer-div-in-form\">\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"bColumnReorder$\">\n <div>\n <table\n mat-table\n id=\"list-view\"\n [dataSource]=\"repeatList$\"\n matSort\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\" cdkDrag>\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"!bColumnReorder$\">\n <div>\n <table mat-table id=\"list-view\" [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n </div>\n <div *ngIf=\"bInForm$\">\n <div>\n <div class=\"psdk-inner-div-in-form\">\n <table id=\"list-view\" *ngIf=\"repeatListData.length > 0\" mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngIf=\"singleSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-radio-button [value]=\"row[rowID]\" (change)=\"fieldOnChange(row)\"></mat-radio-button>\n </td>\n </ng-container>\n <ng-container *ngIf=\"multiSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox [value]=\"row[rowID]\" (change)=\"onCheckboxClick(row, $event)\"></mat-checkbox>\n </td>\n </ng-container>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.config.name] || '---' }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n </table>\n <div *ngIf=\"repeatListData?.length === 0\">\n <table id=\"list-view\" *ngIf=\"repeatListData?.length === 0\" mat-table [dataSource]=\"repeatList$\">\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef>{{ dCol.config.label }}</th>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n </table>\n </div>\n <div class=\"psdk-no-records\" *ngIf=\"repeatListData?.length === 0\">No Records Found.</div>\n </div>\n </div>\n </div>\n\n <mat-paginator id=\"pagination\" *ngIf=\"bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500, 1000]\" showFirstLastButtons></mat-paginator>\n <mat-paginator id=\"pagination\" *ngIf=\"!bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n </div>\n\n <!-- pop overs for filters-->\n <div *ngIf=\"bShowFilterPopover$\" class=\"psdk-dialog-background\">\n <div class=\"psdk-modal-file-top\">\n <h4>\n Filter:<b> {{ filterContainsLabel$ }}</b>\n </h4>\n <div *ngIf=\"bContains$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"contains\">Contains</mat-option>\n <mat-option value=\"equals\">Equals</mat-option>\n <mat-option value=\"startswith\">Starts with</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"psdk-full-width\">\n <input matInput type=\"text\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsValue($event)\" />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"bDateTime$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"notequal\">is not equal to</mat-option>\n <mat-option value=\"after\">after</mat-option>\n <mat-option value=\"before\">before</mat-option>\n <mat-option value=\"null\">is null</mat-option>\n <mat-option value=\"notnull\">is not null</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDate$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date</mat-label>\n <input\n matInput\n #dateInput\n [matDatepicker]=\"pegadate\"\n type=\"text\"\n [value]=\"filterContainsValue$\"\n (dateChange)=\"_filterContainsDateValue($event, dateInput.value)\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"pegadate\"></mat-datepicker-toggle>\n <mat-datepicker #pegadate [startAt]=\"filterContainsValue$\"></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDateTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date time</mat-label>\n <input matInput type=\"datetime-local\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsDateTimeValue($event)\" />\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Time</mat-label>\n <input matInput type=\"time\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsTimeValue($event)\" />\n </mat-form-field>\n </div>\n\n <component-mapper\n name=\"ActionButtons\"\n [props]=\"{ arMainButtons$: arFilterMainButtons$, arSecondaryButtons$: arFilterSecondaryButtons$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ actionButtonClick: _onFilterActionButtonClick }\"\n ></component-mapper>\n </div>\n </div>\n</div>\n", styles: [".psdk-list-header{background-color:var(--app-form-color);padding:1rem;margin:.5rem;border-radius:.6125rem}table{width:100%}::ng-deep .mat-sort-header-content{white-space:nowrap}::ng-deep td.mat-mdc-cell{white-space:nowrap}::ng-deep th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding:0rem .188rem}::ng-deep .mat-mdc-button{padding:0;text-align:left}.mat-mdc-icon-button{width:fit-content}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-mat-header{white-space:nowrap;padding-right:5px}.psdk-mat-header-button{display:inline-grid}.psdk-mat-header-arrow,.psdk-mat-header-filter{display:inline-grid;vertical-align:middle}.psdk-full-width{width:100%}.psdk-search{padding-left:.625rem;padding-right:.625rem}.psdk-icon-search{vertical-align:sub;padding:.125rem;min-width:unset;width:1.1rem}.psdk-outer-div-in-form{padding:1rem;overflow:hidden}.psdk-inner-div-in-form{height:auto;position:relative;width:100%;overflow:auto;max-height:550px;min-height:auto}.psdk-list-view-svg-icon{width:1.4rem;display:inline-block;vertical-align:middle;filter:var(--app-primary-color-filter)}.psdk-filter-svg-icon,.psdk-arrow-svg-icon{width:1rem;display:inline-block;vertical-align:middle;filter:var(--app-neutral-color-filter)}.psdk-filter-popover{display:table;margin:auto;min-width:100px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color);position:absolute;z-index:99}.psdk-dialog-background{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;background-color:var(--app-dialog-background-color);position:fixed;z-index:999;top:0;left:0}.psdk-modal-file-top{display:table;margin:auto;min-width:150px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color)}.psdk-no-records{height:56px;justify-content:center;display:flex;align-items:center;border:1px solid var(--app-neutral-light-color);border-top:none}.psdk-table-field-link{color:var(--app-primary-color);padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}\n"] }]
12554
+ ], template: "<div class=\"psdk-list-header\">\n <div>\n <mat-form-field class=\"psdk-search\" *ngIf=\"bShowSearch$\">\n <mat-label><img class=\"psdk-icon-search\" src=\"{{ searchIcon$ }}\" /> <span class=\"psdk-search-label\">Search</span> </mat-label>\n <input matInput id=\"search\" (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <div *ngIf=\"!bInForm$\" class=\"psdk-outer-div-in-form\">\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"bColumnReorder$\">\n <div>\n <table\n mat-table\n id=\"list-view\"\n [dataSource]=\"repeatList$\"\n matSort\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"drop($event)\"\n >\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\" cdkDrag>\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n <div class=\"psdk-inner-div-in-form\" *ngIf=\"!bColumnReorder$\">\n <div>\n <table mat-table id=\"list-view\" [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\" sticky=\"true\">\n <th mat-header-cell *matHeaderCellDef class=\"psdk-mat-header\" (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n <div class=\"psdk-mat-header-filter\">\n <img class=\"psdk-filter-svg-icon\" name=\"filterOnIcon\" />\n </div>\n <div class=\"psdk-mat-header-arrow\">\n <img class=\"psdk-arrow-svg-icon\" arrow=\"none\" [attr.arrowid]=\"dCol.config.name\" />\n </div>\n <div class=\"psdk-mat-header-button\" (click)=\"$event.stopPropagation()\">\n <button mat-icon-button [matMenuTriggerFor]=\"groupMenu\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ menuSvgIcon$ }}\" />\n </button>\n <mat-menu #groupMenu>\n <button *ngIf=\"!_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_groupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Group By</span>\n </button>\n <button *ngIf=\"_showUnGroupBy(dCol) && bGrouping$\" mat-menu-item (click)=\"_unGroupBy($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ groupBySvgIcon$ }}\" /><span>Ungroup</span>\n </button>\n <button mat-menu-item (click)=\"_filter($event, dCol)\">\n <img class=\"psdk-list-view-svg-icon\" src=\"{{ filterSvgIcon$ }}\" /><span>Filter</span>\n </button>\n </mat-menu>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element; index as i\">\n <button\n *ngIf=\"_showButton(dCol.config.name, dCol); else regular\"\n mat-button\n color=\"primary\"\n (click)=\"_listViewClick(dCol.config, element)\"\n >\n {{ element[dCol.config.name] || '---' }}\n </button>\n <ng-template #regular>\n {{ element[dCol.config.name] || '---' }}\n </ng-template>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$; sticky: true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n\n <!-- Group header -->\n <ng-container matColumnDef=\"groupHeader\">\n <td mat-cell colspan=\"999\" *matCellDef=\"let group\">\n <mat-icon *ngIf=\"group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_less</mat-icon>\n <mat-icon *ngIf=\"!group.expanded\" [attr.style]=\"_getIconStyle(group.level)\">expand_more</mat-icon>\n <strong\n >{{ _getGroupName(groupByColumns$[group.level - 1]) }}: {{ group[groupByColumns$[group.level - 1]] }} ({{\n group.totalCounts\n }})</strong\n >\n </td>\n </ng-container>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeader']; when: isGroup\" (click)=\"_groupHeaderClick(row)\"></tr>\n </table>\n </div>\n </div>\n </div>\n <div *ngIf=\"bInForm$\">\n <div>\n <div class=\"psdk-inner-div-in-form\">\n <table id=\"list-view\" *ngIf=\"repeatListData.length > 0\" mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngIf=\"singleSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-radio-button [value]=\"row[rowID]\" [checked]=\"row[rowID] === checkBoxValue\" (change)=\"fieldOnChange(row)\"></mat-radio-button>\n </td>\n </ng-container>\n <ng-container *ngIf=\"multiSelectionMode\" matColumnDef=\"select\">\n <th mat-header-cell *matHeaderCellDef></th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox [value]=\"row[rowID]\" [checked]=\"isChecked(row)\" (change)=\"onCheckboxClick(row, $event)\"></mat-checkbox>\n </td>\n </ng-container>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header (click)=\"_headerSortClick($event, dCol)\" arrowPosition=\"before\">\n {{ dCol.config.label }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.config.name] || '---' }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\"></tr>\n </table>\n <div *ngIf=\"repeatListData?.length === 0\">\n <table id=\"list-view\" *ngIf=\"repeatListData?.length === 0\" mat-table [dataSource]=\"repeatList$\">\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.config.name\">\n <th mat-header-cell *matHeaderCellDef>{{ dCol.config.label }}</th>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n </table>\n </div>\n <div class=\"psdk-no-records\" *ngIf=\"repeatListData?.length === 0\">No Records Found.</div>\n </div>\n </div>\n </div>\n\n <mat-paginator id=\"pagination\" *ngIf=\"bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500, 1000]\" showFirstLastButtons></mat-paginator>\n <mat-paginator id=\"pagination\" *ngIf=\"!bInForm$\" [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n </div>\n\n <!-- pop overs for filters-->\n <div *ngIf=\"bShowFilterPopover$\" class=\"psdk-dialog-background\">\n <div class=\"psdk-modal-file-top\">\n <h4>\n Filter:<b> {{ filterContainsLabel$ }}</b>\n </h4>\n <div *ngIf=\"bContains$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"contains\">Contains</mat-option>\n <mat-option value=\"equals\">Equals</mat-option>\n <mat-option value=\"startswith\">Starts with</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"psdk-full-width\">\n <input matInput type=\"text\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsValue($event)\" />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"bDateTime$\">\n <mat-form-field class=\"psdk-full-width\">\n <mat-select [value]=\"filterContainsType$\" (selectionChange)=\"_filterContainsType($event)\">\n <mat-option value=\"notequal\">is not equal to</mat-option>\n <mat-option value=\"after\">after</mat-option>\n <mat-option value=\"before\">before</mat-option>\n <mat-option value=\"null\">is null</mat-option>\n <mat-option value=\"notnull\">is not null</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDate$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date</mat-label>\n <input\n matInput\n #dateInput\n [matDatepicker]=\"pegadate\"\n type=\"text\"\n [value]=\"filterContainsValue$\"\n (dateChange)=\"_filterContainsDateValue($event, dateInput.value)\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"pegadate\"></mat-datepicker-toggle>\n <mat-datepicker #pegadate [startAt]=\"filterContainsValue$\"></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsDateTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Date time</mat-label>\n <input matInput type=\"datetime-local\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsDateTimeValue($event)\" />\n </mat-form-field>\n\n <mat-form-field *ngIf=\"bIsTime$ && filterContainsType$ !== 'null' && filterContainsType$ != 'notnull'\" class=\"psdk-full-width\">\n <mat-label>Time</mat-label>\n <input matInput type=\"time\" [value]=\"filterContainsValue$\" (change)=\"_filterContainsTimeValue($event)\" />\n </mat-form-field>\n </div>\n\n <component-mapper\n name=\"ActionButtons\"\n [props]=\"{ arMainButtons$: arFilterMainButtons$, arSecondaryButtons$: arFilterSecondaryButtons$ }\"\n [parent]=\"this\"\n [outputEvents]=\"{ actionButtonClick: _onFilterActionButtonClick }\"\n ></component-mapper>\n </div>\n </div>\n</div>\n", styles: [".psdk-list-header{background-color:var(--app-form-color);padding:1rem;margin:.5rem;border-radius:.6125rem}table{width:100%}::ng-deep .mat-sort-header-content{white-space:nowrap}::ng-deep td.mat-mdc-cell{white-space:nowrap}::ng-deep th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding:0rem .188rem}::ng-deep .mat-mdc-button{padding:0;text-align:left}.mat-mdc-icon-button{width:fit-content}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-mat-header{white-space:nowrap;padding-right:5px}.psdk-mat-header-button{display:inline-grid}.psdk-mat-header-arrow,.psdk-mat-header-filter{display:inline-grid;vertical-align:middle}.psdk-full-width{width:100%}.psdk-search{padding-left:.625rem;padding-right:.625rem}.psdk-icon-search{vertical-align:sub;padding:.125rem;min-width:unset;width:1.1rem}.psdk-outer-div-in-form{padding:1rem;overflow:hidden}.psdk-inner-div-in-form{height:auto;position:relative;width:100%;overflow:auto;max-height:550px;min-height:auto}.psdk-list-view-svg-icon{width:1.4rem;display:inline-block;vertical-align:middle;filter:var(--app-primary-color-filter)}.psdk-filter-svg-icon,.psdk-arrow-svg-icon{width:1rem;display:inline-block;vertical-align:middle;filter:var(--app-neutral-color-filter)}.psdk-filter-popover{display:table;margin:auto;min-width:100px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color);position:absolute;z-index:99}.psdk-dialog-background{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100%;width:100%;background-color:var(--app-dialog-background-color);position:fixed;z-index:999;top:0;left:0}.psdk-modal-file-top{display:table;margin:auto;min-width:150px;background-color:var(--app-form-color);border:1px solid var(--app-inverse-form-color);border-radius:10px;padding:20px;box-shadow:0 0 10px 3px var(--app-box-shadow-color)}.psdk-no-records{height:56px;justify-content:center;display:flex;align-items:center;border:1px solid var(--app-neutral-light-color);border-top:none}.psdk-table-field-link{color:var(--app-primary-color);padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}\n"] }]
12607
12555
  }], ctorParameters: () => [{ type: ProgressSpinnerService }, { type: Utils }], propDecorators: { paginator: [{
12608
12556
  type: ViewChild,
12609
12557
  args: [MatPaginator]
@@ -13712,10 +13660,8 @@ class SimpleTableComponent {
13712
13660
  const { multiRecordDisplayAs } = this.configProps$;
13713
13661
  let { contextClass } = this.configProps$;
13714
13662
  if (!contextClass) {
13715
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'
13716
13663
  let listName = this.pConn$.getComponentConfig().referenceList;
13717
13664
  listName = PCore.getAnnotationUtils().getPropertyName(listName);
13718
- // @ts-ignore - Property 'getFieldMetadata' is private and only accessible within class 'C11nEnv'
13719
13665
  contextClass = this.pConn$.getFieldMetadata(listName)?.pageClass;
13720
13666
  }
13721
13667
  if (multiRecordDisplayAs === 'fieldGroup') {
@@ -13876,10 +13822,8 @@ class SimpleTableManualComponent {
13876
13822
  let { contextClass } = this.configProps$;
13877
13823
  this.referenceList = referenceList;
13878
13824
  if (!contextClass) {
13879
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'
13880
13825
  let listName = this.pConn$.getComponentConfig().referenceList;
13881
13826
  listName = PCore.getAnnotationUtils().getPropertyName(listName);
13882
- // @ts-ignore - Property 'getFieldMetadata' is private and only accessible within class 'C11nEnv'
13883
13827
  contextClass = this.pConn$.getFieldMetadata(listName)?.pageClass;
13884
13828
  }
13885
13829
  this.contextClass = contextClass;
@@ -13967,17 +13911,18 @@ class SimpleTableManualComponent {
13967
13911
  if (this.isInitialized) {
13968
13912
  this.isInitialized = false;
13969
13913
  if (this.allowEditingInModal) {
13914
+ // @ts-ignore - An argument for 'uniqueField' was not provided.
13970
13915
  this.pConn$.getListActions().initDefaultPageInstructions(this.pConn$.getReferenceList(), this.fieldDefs.filter(item => item.name).map(item => item.name));
13971
13916
  }
13972
13917
  else {
13973
- // @ts-ignore - An argument for 'fields' was not provided
13918
+ // @ts-ignore - An argument for 'propertyNames' was not provided.
13974
13919
  this.pConn$.getListActions().initDefaultPageInstructions(this.pConn$.getReferenceList());
13975
13920
  }
13976
13921
  }
13977
13922
  }
13978
13923
  getResultsText() {
13979
13924
  const recordsCount = this.readOnlyMode ? this.rowData?.data.length : this.referenceList?.length;
13980
- return `${recordsCount} result${recordsCount > 1 ? 's' : ''}`;
13925
+ return `${recordsCount || 0} result${recordsCount > 1 ? 's' : ''}`;
13981
13926
  }
13982
13927
  sortCompare(a, b) {
13983
13928
  let aValue = a[this.compareRef];
@@ -14468,13 +14413,8 @@ class SimpleTableManualComponent {
14468
14413
  }
14469
14414
  }
14470
14415
  deleteRecord(index) {
14471
- if (PCore.getPCoreVersion()?.includes('8.7')) {
14472
- this.pConn$.getListActions().deleteEntry(index, this.pageReference);
14473
- }
14474
- else {
14475
- // @ts-ignore - second parameter "pageRef" is optional for deleteEntry method
14476
- this.pConn$.getListActions().deleteEntry(index);
14477
- }
14416
+ // @ts-ignore - second parameter "pageRef" is optional for deleteEntry method
14417
+ this.pConn$.getListActions().deleteEntry(index);
14478
14418
  }
14479
14419
  buildElementsForTable() {
14480
14420
  const context = this.pConn$.getContextName();
@@ -14589,10 +14529,8 @@ class SimpleTableSelectComponent {
14589
14529
  contextPageReference = pageReference.concat('.').concat(referenceProp);
14590
14530
  }
14591
14531
  const metadata = isMultiSelectMode
14592
- ? // @ts-ignore - Property 'getFieldMetadata' is private and only accessible within class 'C11nEnv'
14593
- this.pConn$.getFieldMetadata(`@P .${referenceProp}`)
14594
- : // @ts-ignore - Property 'getCurrentPageFieldMetadata' is private and only accessible within class 'C11nEnv'
14595
- this.pConn$.getCurrentPageFieldMetadata(contextPageReference);
14532
+ ? this.pConn$.getFieldMetadata(`@P .${referenceProp}`)
14533
+ : this.pConn$.getCurrentPageFieldMetadata(contextPageReference);
14596
14534
  const { datasource: { parameters: fieldParameters = {} } = {}, pageClass } = metadata;
14597
14535
  this.pageClass = pageClass;
14598
14536
  const compositeKeys = [];
@@ -15016,11 +14954,7 @@ class AttachmentComponent {
15016
14954
  this.bDisabled$ = false;
15017
14955
  this.bVisible$ = true;
15018
14956
  this.bLoading$ = false;
15019
- this.arFiles$ = [];
15020
- this.arFileList$ = [];
15021
- this.arMenuList$ = [];
15022
14957
  this.bShowSelector$ = true;
15023
- this.bShowJustDelete$ = false;
15024
14958
  this.fileTemp = {};
15025
14959
  this.allowMultiple$ = false;
15026
14960
  this.extensions$ = '';
@@ -15030,85 +14964,13 @@ class AttachmentComponent {
15030
14964
  this.localeCategory = 'CosmosFields';
15031
14965
  this.uploadMultipleFilesLabel = this.localizedVal('file_upload_text_multiple', this.localeCategory);
15032
14966
  this.uploadSingleFileLabel = this.localizedVal('file_upload_text_one', this.localeCategory);
14967
+ this.filesWithError = [];
14968
+ this.files = [];
15033
14969
  this.fileDownload = (data, fileName, ext) => {
15034
14970
  const file = ext ? `${fileName}.${ext}` : fileName;
15035
14971
  download(atob(data), file);
15036
14972
  };
15037
14973
  this.getAttachmentKey = (name = '') => (name ? `attachmentsList.${name}` : 'attachmentsList');
15038
- this.getNewListUtilityItemProps = ({ att, cancelFile, downloadFile, deleteFile, removeFile }) => {
15039
- let actions;
15040
- let isDownloadable = false;
15041
- if (att.progress && att.progress !== 100) {
15042
- actions = [
15043
- {
15044
- id: `Cancel-${att.ID}`,
15045
- text: this.pConn$.getLocalizedValue('Cancel', '', ''),
15046
- icon: 'times',
15047
- onClick: cancelFile
15048
- }
15049
- ];
15050
- }
15051
- else if (att.links) {
15052
- const isFile = att.type === 'FILE';
15053
- const ID = att.ID.replace(/\s/gi, '');
15054
- const actionsMap = new Map([
15055
- [
15056
- 'download',
15057
- {
15058
- id: `download-${ID}`,
15059
- text: isFile ? this.pConn$.getLocalizedValue('Download', '', '') : this.pConn$.getLocalizedValue('Open', '', ''),
15060
- icon: isFile ? 'download' : 'open',
15061
- onClick: downloadFile
15062
- }
15063
- ],
15064
- [
15065
- 'delete',
15066
- {
15067
- id: `Delete-${ID}`,
15068
- text: this.pConn$.getLocalizedValue('Delete', '', ''),
15069
- icon: 'trash',
15070
- onClick: deleteFile
15071
- }
15072
- ]
15073
- ]);
15074
- actions = [];
15075
- actionsMap.forEach((action, actionKey) => {
15076
- if (att.links[actionKey]) {
15077
- actions.push(action);
15078
- }
15079
- });
15080
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
15081
- isDownloadable = att.links.download;
15082
- }
15083
- else if (att.error) {
15084
- actions = [
15085
- {
15086
- id: `Remove-${att.ID}`,
15087
- text: this.pConn$.getLocalizedValue('Remove', '', ''),
15088
- icon: 'trash',
15089
- onClick: removeFile
15090
- }
15091
- ];
15092
- }
15093
- return {
15094
- id: att.ID,
15095
- visual: {
15096
- icon: this.utils.getIconForAttachment(att),
15097
- progress: att.progress == 100 ? undefined : att.progress
15098
- },
15099
- primary: {
15100
- type: att.type,
15101
- name: att.error ? att.fileName : att.name,
15102
- icon: 'trash',
15103
- click: removeFile
15104
- },
15105
- secondary: {
15106
- text: att.meta,
15107
- error: att.error
15108
- },
15109
- actions
15110
- };
15111
- };
15112
14974
  this.validateFileExtension = (fileObj, allowedExtensions) => {
15113
14975
  if (!allowedExtensions) {
15114
14976
  return true;
@@ -15124,10 +14986,31 @@ class AttachmentComponent {
15124
14986
  ngOnInit() {
15125
14987
  // // First thing in initialization is registering and subscribing to the AngularPConnect service
15126
14988
  this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
15127
- this.removeFileFromList$ = { onClick: this._removeFileFromList.bind(this) };
15128
14989
  this.caseID = PCore.getStoreValue('.pyID', 'caseInfo.content', this.pConn$.getContextName());
15129
- // let configProps: any = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
14990
+ this.srcImg = this.utils.getImageSrc('document-doc', this.utils.getSDKStaticContentUrl());
14991
+ this.deleteIcon = this.utils.getImageSrc('trash', this.utils.getSDKStaticContentUrl());
15130
14992
  this.checkAndUpdate();
14993
+ this.getAttachments();
14994
+ }
14995
+ getAttachments() {
14996
+ let tempUploadedFiles = this.getCurrentAttachmentsList(this.getAttachmentKey(this.valueRef), this.pConn$.getContextName());
14997
+ tempUploadedFiles = tempUploadedFiles.filter(f => f.label === this.valueRef && f.delete !== true);
14998
+ this.files?.map(f => {
14999
+ return f.responseProps?.pzInsKey && !f.responseProps.pzInsKey.includes('temp')
15000
+ ? {
15001
+ ...f,
15002
+ props: {
15003
+ ...f.props,
15004
+ onDelete: () => this.deleteFile(f)
15005
+ }
15006
+ }
15007
+ : { ...f };
15008
+ });
15009
+ this.files = [...this.files, ...tempUploadedFiles];
15010
+ PCore.getPubSubUtils().subscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.resetAttachmentStoredState.bind(this), this.caseID);
15011
+ return () => {
15012
+ PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.caseID);
15013
+ };
15131
15014
  }
15132
15015
  checkAndUpdate() {
15133
15016
  // Should always check the bridge to see if the component should
@@ -15138,64 +15021,14 @@ class AttachmentComponent {
15138
15021
  this.updateSelf();
15139
15022
  }
15140
15023
  }
15141
- ngOnDestroy() {
15142
- if (this.angularPConnectData.unsubscribeFn) {
15143
- this.angularPConnectData.unsubscribeFn();
15144
- }
15145
- PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.caseID);
15146
- }
15147
15024
  // Callback passed when subscribing to store change
15148
15025
  onStateChange() {
15149
15026
  this.checkAndUpdate();
15150
15027
  }
15151
- updateAttachmentsInfo() {
15152
- // @ts-ignore - Property 'attachmentsInfo' does not exist on type 'C11nEnv'
15153
- if (!this.pConn$.attachmentsInfo) {
15154
- // @ts-ignore - Property 'attachmentsInfo' does not exist on type 'C11nEnv'
15155
- this.pConn$.attachmentsInfo = {
15156
- type: 'File',
15157
- attachmentFieldName: this.att_valueRef,
15158
- category: this.att_categoryName
15159
- };
15160
- }
15161
- }
15162
- processFile(file, i) {
15163
- file.props.type = file.responseProps.pyMimeFileExtension;
15164
- file.props.mimeType = file.responseProps.pyMimeFileExtension;
15165
- file.props.ID = file.responseProps.pzInsKey;
15166
- const arMenuList = [
15167
- {
15168
- icon: 'download',
15169
- text: this.pConn$.getLocalizedValue('Download', '', ''),
15170
- onClick: () => this._downloadFileFromList(this.value$.pxResults[i])
15171
- },
15172
- {
15173
- icon: 'trash',
15174
- text: this.pConn$.getLocalizedValue('Delete', '', ''),
15175
- onClick: () => this._removeFileFromList(this.arFileList$[i])
15176
- }
15177
- ];
15178
- const arFilesAttachmentIDs = [];
15179
- this.arFileList$.forEach(arFile => {
15180
- arFilesAttachmentIDs.push(arFile.id);
15181
- });
15182
- if (!arFilesAttachmentIDs.includes(file.props.ID)) {
15183
- this.arFileList$.push(this.getNewListUtilityItemProps({
15184
- att: file.props,
15185
- downloadFile: null,
15186
- cancelFile: null,
15187
- deleteFile: null,
15188
- removeFile: null
15189
- }));
15190
- }
15191
- this.arFileList$[i].actions = arMenuList;
15192
- this.arFileList$[i].noDeleteIcon = true;
15193
- this.bShowSelector$ = false;
15194
- }
15195
15028
  updateSelf() {
15196
15029
  const configProps = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
15197
15030
  const stateProps = this.pConn$.getStateProps();
15198
- const { value, label, extensions } = configProps;
15031
+ const { value, label, extensions, displayMode } = configProps;
15199
15032
  if (configProps.required != null) {
15200
15033
  this.bRequired$ = this.utils.getBooleanValue(configProps.required);
15201
15034
  }
@@ -15212,7 +15045,6 @@ class AttachmentComponent {
15212
15045
  if (configProps.allowMultiple != null) {
15213
15046
  this.allowMultiple$ = this.utils.getBooleanValue(configProps.allowMultiple);
15214
15047
  }
15215
- this.bShowJustDelete$ = true;
15216
15048
  this.label$ = label;
15217
15049
  this.value$ = value;
15218
15050
  this.status = stateProps.status;
@@ -15220,83 +15052,47 @@ class AttachmentComponent {
15220
15052
  this.extensions$ = extensions;
15221
15053
  this.valueRef = this.pConn$.getStateProps().value;
15222
15054
  this.valueRef = this.valueRef.startsWith('.') ? this.valueRef.substring(1) : this.valueRef;
15055
+ this.displayMode = displayMode;
15223
15056
  /* this is a temporary fix because required is supposed to be passed as a boolean and NOT as a string */
15224
15057
  let { required, disabled } = configProps;
15225
15058
  [required, disabled] = [required, disabled].map(prop => prop === true || (typeof prop === 'string' && prop === 'true'));
15226
- this.att_categoryName = '';
15059
+ this.categoryName = '';
15227
15060
  if (value && value.pyCategoryName) {
15228
- this.att_categoryName = value.pyCategoryName;
15061
+ this.categoryName = value.pyCategoryName;
15062
+ }
15063
+ if (value?.pxResults && +value.pyCount > 0) {
15064
+ this.files = value.pxResults.map(f => this.buildFilePropsFromResponse(f));
15229
15065
  }
15230
- this.att_valueRef = this.pConn$.getStateProps().value;
15231
- this.att_valueRef = this.att_valueRef.indexOf('.') === 0 ? this.att_valueRef.substring(1) : this.att_valueRef;
15232
15066
  this.updateAttachments();
15233
15067
  }
15234
- updateAttachments() {
15235
- const attachmentsFromServer = this.value$ && this.value$.pxResults && +this.value$.pyCount > 0;
15236
- if (attachmentsFromServer) {
15237
- this.updateAttachmentsFromServer();
15238
- }
15239
- else {
15240
- // Get the attachments from the Redux
15241
- this.myFiles = this.getCurrentAttachmentsList(this.getAttachmentKey(this.att_valueRef), this.pConn$.getContextName());
15242
- if (this.myFiles?.length && this.arFiles$.length === 0) {
15243
- this.arFileList$ = this.myFiles.map(att => {
15244
- return this.getNewListUtilityItemProps({
15245
- att,
15246
- downloadFile: null,
15247
- cancelFile: null,
15248
- deleteFile: null,
15249
- removeFile: null
15250
- });
15251
- });
15068
+ buildFilePropsFromResponse(respObj) {
15069
+ return {
15070
+ props: {
15071
+ meta: `${respObj.pyCategoryName}, ${respObj.pxCreateOperator}`,
15072
+ name: respObj.pyAttachName,
15073
+ icon: this.utils.getIconFromFileType(respObj.pyMimeFileExtension)
15074
+ },
15075
+ responseProps: {
15076
+ ...respObj
15252
15077
  }
15253
- const myFilesAttachmentIDs = [];
15254
- this.myFiles.forEach(myFile => {
15255
- myFilesAttachmentIDs.push(myFile.ID);
15256
- });
15257
- this.arFiles$.forEach(arFile => {
15258
- if (!myFilesAttachmentIDs.includes(arFile.ID)) {
15259
- this.myFiles = [...this.myFiles, arFile];
15260
- }
15261
- });
15262
- }
15263
- this.bShowJustDelete$ = true;
15264
- this.bShowSelector$ = !(this.arFileList$?.length > 0) || this.allowMultiple$;
15265
- if (this.arFileList$.length > 0) {
15266
- this.CheckForInvalidAttachment();
15267
- }
15268
- PCore.getPubSubUtils().subscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.resetAttachmentStoredState.bind(this), this.caseID);
15078
+ };
15269
15079
  }
15270
- updateAttachmentsFromServer() {
15271
- this.value$.pxResults.forEach((attachment, i) => {
15272
- const file = this.buildFilePropsFromResponse(attachment);
15273
- if (file.responseProps) {
15274
- this.updateAttachmentsInfo();
15275
- if (file.responseProps.pzInsKey && !file.responseProps.pzInsKey.includes('temp')) {
15276
- this.processFile(file, i);
15277
- }
15278
- if (file) {
15279
- const currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.att_valueRef), this.pConn$.getContextName());
15280
- const index = currentAttachmentList.findIndex(element => element.props.ID === file.props.ID);
15281
- let tempFiles = [];
15282
- if (index < 0) {
15283
- tempFiles = [file];
15284
- }
15285
- PCore.getStateUtils().updateState(this.pConn$.getContextName(), this.getAttachmentKey(this.att_valueRef), [...currentAttachmentList, ...tempFiles], {
15286
- pageReference: 'context_data',
15287
- isArrayDeepMerge: false
15288
- });
15289
- }
15290
- }
15291
- });
15080
+ updateAttachments() {
15081
+ if (this.files.length > 0 && this.displayMode !== 'DISPLAY_ONLY') {
15082
+ const currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.valueRef), this.pConn$.getContextName());
15083
+ // block duplicate files to redux store when added 1 after another to prevent multiple duplicates being added to the case on submit
15084
+ const tempFiles = this.files.filter(f => currentAttachmentList.findIndex(fr => fr.ID === f.ID) === -1 && !f.inProgress && f.responseProps);
15085
+ const updatedAttList = [...currentAttachmentList, ...tempFiles];
15086
+ this.updateAttachmentState(this.pConn$, this.getAttachmentKey(this.valueRef), updatedAttList);
15087
+ }
15292
15088
  }
15293
15089
  resetAttachmentStoredState() {
15294
- PCore.getStateUtils().updateState(this.pConn$.getContextName(), this.getAttachmentKey(this.att_valueRef), undefined, {
15090
+ PCore.getStateUtils().updateState(this.pConn$?.getContextName(), this.getAttachmentKey(this.valueRef), undefined, {
15295
15091
  pageReference: 'context_data',
15296
15092
  isArrayDeepMerge: false
15297
15093
  });
15298
15094
  }
15299
- _downloadFileFromList(fileObj) {
15095
+ downloadFile(fileObj) {
15300
15096
  PCore.getAttachmentUtils()
15301
15097
  // @ts-ignore - 3rd parameter "responseEncoding" should be optional
15302
15098
  .downloadAttachment(fileObj.pzInsKey, this.pConn$.getContextName())
@@ -15308,279 +15104,220 @@ class AttachmentComponent {
15308
15104
  console.log(e);
15309
15105
  });
15310
15106
  }
15311
- CheckForInvalidAttachment() {
15312
- let isValid = true;
15313
- this.arFileList$.forEach(file => {
15314
- if (file.secondary.error) {
15315
- isValid = false;
15316
- }
15107
+ getCurrentAttachmentsList(key, context) {
15108
+ return PCore.getStoreValue(`.${key}`, 'context_data', context) || [];
15109
+ }
15110
+ validateMaxSize(fileObj, maxSizeInMB) {
15111
+ const fileSize = (fileObj.size / 1048576).toFixed(2);
15112
+ return parseFloat(fileSize) < parseFloat(maxSizeInMB);
15113
+ }
15114
+ updateAttachmentState(pConn, key, attachments) {
15115
+ PCore.getStateUtils().updateState(this.pConn$.getContextName(), key, attachments, {
15116
+ pageReference: 'context_data',
15117
+ isArrayDeepMerge: false
15317
15118
  });
15318
- if (isValid) {
15319
- // @ts-ignore
15320
- PCore.getMessageManager().clearMessages({
15321
- type: PCore.getConstants().MESSAGES.MESSAGES_TYPE_ERROR,
15322
- property: this.pConn$.getStateProps().value,
15323
- pageReference: this.pConn$.getPageReference(),
15324
- context: this.pConn$.getContextName()
15325
- });
15326
- }
15327
15119
  }
15328
- _removeFileFromList(item) {
15329
- const fileListIndex = this.arFileList$.findIndex(element => element?.id === item?.id);
15330
- const fileIndex = this.arFiles$.findIndex(element => element?.ID === item?.id);
15120
+ deleteFile(file) {
15331
15121
  const attachmentsList = [];
15332
- let currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.att_valueRef), this.pConn$.getContextName());
15333
- if (this.value$ && this.value$.pxResults && +this.value$.pyCount > 0 && item.actions) {
15334
- const updatedAttachments = currentAttachmentList.map(attachment => {
15335
- if (attachment?.ID === this.arFileList$[fileListIndex].id || attachment?.props?.ID === this.arFileList$[fileListIndex].id) {
15336
- return { ...attachment, delete: true, label: this.valueRef };
15122
+ let currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.valueRef), this.pConn$.getContextName());
15123
+ // If file to be deleted is the one added in previous stage i.e. for which a file instance is created in server
15124
+ // no need to filter currentAttachmentList as we will get another entry of file in redux with delete & label
15125
+ // eslint-disable-next-line no-unsafe-optional-chaining
15126
+ if (this.value$ && this.value$?.pxResults && +this.value$?.pyCount > 0 && file.responseProps && file?.responseProps?.pzInsKey !== 'temp') {
15127
+ const updatedAttachments = this.files.map(f => {
15128
+ if (f.responseProps && f.responseProps.pzInsKey === file.responseProps.pzInsKey) {
15129
+ return { ...f, delete: true, label: this.valueRef };
15337
15130
  }
15338
- return attachment;
15131
+ return f;
15339
15132
  });
15340
15133
  // updating the redux store to help form-handler in passing the data to delete the file from server
15341
- PCore.getStateUtils().updateState(this.pConn$.getContextName(), this.getAttachmentKey(this.att_valueRef), updatedAttachments, {
15342
- pageReference: 'context_data',
15343
- isArrayDeepMerge: false
15344
- });
15345
- }
15134
+ this.updateAttachmentState(this.pConn$, this.getAttachmentKey(this.valueRef), [...updatedAttachments]);
15135
+ const newlyAddedFiles = this.files.filter(f => !!f.ID);
15136
+ const filesPostDelete = this.files.filter(f => f.responseProps?.pzInsKey !== 'temp' && f.responseProps?.pzInsKey !== file.responseProps?.pzInsKey);
15137
+ this.files = [...filesPostDelete, ...newlyAddedFiles];
15138
+ } // if the file being deleted is the added in this stage i.e. whose data is not yet created in server
15346
15139
  else {
15347
- currentAttachmentList = currentAttachmentList.filter(f => f.ID !== item.id);
15348
- PCore.getStateUtils().updateState(this.pConn$.getContextName(), this.getAttachmentKey(this.att_valueRef), [...currentAttachmentList, ...attachmentsList], {
15349
- pageReference: 'context_data',
15350
- isArrayDeepMerge: false
15351
- });
15140
+ // filter newly added files in this stage, later the updated current stage files will be added to redux once files state is updated
15141
+ currentAttachmentList = currentAttachmentList.filter(f => f.ID !== file.ID);
15142
+ this.files = this.files.filter(f => f.ID !== file.ID);
15143
+ this.updateAttachmentState(this.pConn$, this.getAttachmentKey(this.valueRef), [...currentAttachmentList, ...attachmentsList]);
15144
+ if (file.inProgress) {
15145
+ // @ts-ignore - 3rd parameter "responseEncoding" should be optional
15146
+ PCore.getAttachmentUtils().cancelRequest(file.ID, pConn.getContextName());
15147
+ }
15148
+ }
15149
+ this.filesWithError = this.filesWithError?.filter(f => f.ID !== file.ID);
15150
+ if (this.filesWithError.length === 0) {
15151
+ this.clearFieldErrorMessages();
15152
+ }
15153
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
15154
+ this.fileInput && this.fileInput.nativeElement.value ? null : '';
15155
+ }
15156
+ onFileAdded(event) {
15157
+ let addedFiles = Array.from(event.target.files);
15158
+ addedFiles = this.allowMultiple$ ? addedFiles : [addedFiles[0]];
15159
+ const maxAttachmentSize = PCore.getEnvironmentInfo().getMaxAttachmentSize() || '5';
15160
+ this.tempFilesToBeUploaded = [
15161
+ ...addedFiles.map((f, index) => {
15162
+ f.ID = `${new Date().getTime()}I${index}`;
15163
+ f.inProgress = true;
15164
+ f.props = {
15165
+ type: f.type,
15166
+ name: f.name,
15167
+ icon: this.utils.getIconFromFileType(f.type),
15168
+ onDelete: () => this.deleteFile(f)
15169
+ };
15170
+ if (!this.validateMaxSize(f, maxAttachmentSize)) {
15171
+ f.props.error = true;
15172
+ f.inProgress = false;
15173
+ f.props.meta = this.pConn$.getLocalizedValue(`File is too big. Max allowed size is ${maxAttachmentSize}MB.`, '', '');
15174
+ }
15175
+ else if (!this.validateFileExtension(f, this.extensions$)) {
15176
+ f.props.error = true;
15177
+ f.inProgress = false;
15178
+ f.props.meta = `${this.pConn$.getLocalizedValue('File has invalid extension. Allowed extensions are:', '', '')} ${this.extensions$.replaceAll('.', '')}`;
15179
+ }
15180
+ if (f.props.error) {
15181
+ const fieldName = this.pConn$.getStateProps().value;
15182
+ const context = this.pConn$.getContextName();
15183
+ PCore.getMessageManager().addMessages({
15184
+ messages: [
15185
+ {
15186
+ type: 'error',
15187
+ // @ts-ignore - Type '{ type: string; message: string; }' is not assignable to type 'MessagesConfigObject'.
15188
+ message: pConn.getLocalizedValue('Error with one or more files', '', '')
15189
+ }
15190
+ ],
15191
+ property: fieldName,
15192
+ pageReference: this.pConn$.getPageReference(),
15193
+ context
15194
+ });
15195
+ }
15196
+ return f;
15197
+ })
15198
+ ];
15199
+ const tempFilesWithError = this.tempFilesToBeUploaded.filter(f => f.props.error);
15200
+ if (tempFilesWithError.length > 0) {
15201
+ this.filesWithError = tempFilesWithError;
15352
15202
  }
15353
- if (fileListIndex > -1) {
15354
- this.arFileList$.splice(fileListIndex, 1);
15203
+ if (!this.allowMultiple$) {
15204
+ this.files = [...this.tempFilesToBeUploaded];
15355
15205
  }
15356
- if (fileIndex > -1) {
15357
- this.arFiles$.splice(fileIndex, 1);
15206
+ else {
15207
+ this.files = [...this.files, ...this.tempFilesToBeUploaded];
15358
15208
  }
15359
- this.CheckForInvalidAttachment();
15360
- this.bShowSelector$ = !(this.arFileList$?.length > 0) || this.allowMultiple$;
15209
+ this.uploadFiles();
15361
15210
  }
15362
- getCurrentAttachmentsList(key, context) {
15363
- return PCore.getStoreValue(`.${key}`, 'context_data', context) || [];
15211
+ clearFieldErrorMessages() {
15212
+ const fieldName = this.pConn$.getStateProps().value;
15213
+ const context = this.pConn$.getContextName();
15214
+ PCore.getMessageManager().clearMessages({
15215
+ type: PCore.getConstants().MESSAGES.MESSAGES_TYPE_ERROR,
15216
+ property: fieldName,
15217
+ pageReference: this.pConn$.getPageReference(),
15218
+ context
15219
+ });
15364
15220
  }
15365
- errorHandler(isFetchCanceled, file) {
15221
+ onUploadProgress() { }
15222
+ errorHandler(isFetchCanceled, attachedFile) {
15366
15223
  return error => {
15367
15224
  if (!isFetchCanceled(error)) {
15368
15225
  let uploadFailMsg = this.pConn$.getLocalizedValue('Something went wrong', '', '');
15369
15226
  if (error.response && error.response.data && error.response.data.errorDetails) {
15370
15227
  uploadFailMsg = this.pConn$.getLocalizedValue(error.response.data.errorDetails[0].localizedValue, '', '');
15371
15228
  }
15372
- for (const myFile of this.myFiles) {
15373
- if (myFile.ID === file.ID) {
15374
- myFile.meta = uploadFailMsg;
15375
- myFile.error = true;
15376
- myFile.fileName = this.pConn$.getLocalizedValue('Unable to upload file', '', '');
15377
- }
15378
- }
15379
- this.bShowSelector$ = false;
15380
- this.arFileList$ = this.myFiles.map(att => {
15381
- if (att.id) {
15382
- return att;
15229
+ this.files.map(f => {
15230
+ if (f.ID === attachedFile.ID) {
15231
+ f.props.meta = uploadFailMsg;
15232
+ f.props.error = true;
15233
+ f.props.onDelete = () => this.deleteFile(f);
15234
+ f.props.icon = this.utils.getIconFromFileType(f.type);
15235
+ f.props.name = this.pConn$.getLocalizedValue('Unable to upload file', '', '');
15236
+ f.inProgress = false;
15237
+ const fieldName = this.pConn$.getStateProps().value;
15238
+ const context = this.pConn$.getContextName();
15239
+ // set errors to property to block submit even on errors in file upload
15240
+ PCore.getMessageManager().addMessages({
15241
+ messages: [
15242
+ {
15243
+ type: 'error',
15244
+ // @ts-ignore - Type '{ type: string; message: string; }' is not assignable to type 'MessagesConfigObject'.
15245
+ message: this.pConn$.getLocalizedValue('Error with one or more files', '', '')
15246
+ }
15247
+ ],
15248
+ property: fieldName,
15249
+ pageReference: this.pConn$.getPageReference(),
15250
+ context
15251
+ });
15252
+ delete f.props.progress;
15383
15253
  }
15384
- return this.getNewListUtilityItemProps({
15385
- att,
15386
- downloadFile: null,
15387
- cancelFile: null,
15388
- deleteFile: null,
15389
- removeFile: null
15390
- });
15391
- });
15392
- PCore.getMessageManager().addMessages({
15393
- // @ts-ignore
15394
- messages: [
15395
- {
15396
- type: 'error',
15397
- message: this.pConn$.getLocalizedValue('Error with one or more files', '', '')
15398
- }
15399
- ],
15400
- property: this.pConn$.getStateProps().value,
15401
- pageReference: this.pConn$.getPageReference(),
15402
- context: this.pConn$.getContextName()
15254
+ return f;
15403
15255
  });
15404
- this.bShowJustDelete$ = true;
15405
- this.bLoading$ = false;
15406
15256
  }
15407
15257
  throw error;
15408
15258
  };
15409
15259
  }
15410
- uploadMyFiles(event) {
15411
- let arrAttachmentFiles = [];
15412
- if (this.arFiles$.length) {
15413
- arrAttachmentFiles = this.arFiles$;
15414
- }
15415
- else {
15416
- arrAttachmentFiles = this.arFileList$;
15417
- }
15418
- this.arFiles$ = [...arrAttachmentFiles, ...this.getFiles(event.target.files)];
15419
- // convert FileList to an array
15420
- this.myFiles = Array.from(this.arFiles$);
15421
- this.bLoading$ = true;
15422
- const filesToBeUploaded = this.myFiles
15260
+ uploadFiles() {
15261
+ const filesToBeUploaded = this.files
15423
15262
  .filter(e => {
15424
- if (e.id) {
15425
- return false;
15426
- }
15427
- const isFileUploaded = e && e.progress === 100;
15428
- const fileHasError = e && e.error;
15263
+ const isFileUploaded = e.props && e.props.progress === 100;
15264
+ const fileHasError = e.props && e.props.error;
15429
15265
  const isFileUploadedinLastStep = e.responseProps && e.responseProps.pzInsKey;
15430
15266
  return !isFileUploaded && !fileHasError && !isFileUploadedinLastStep;
15431
15267
  })
15432
- .map(f => PCore.getAttachmentUtils().uploadAttachment(f, () => {
15268
+ .map(f => window.PCore.getAttachmentUtils().uploadAttachment(f, () => {
15433
15269
  this.onUploadProgress();
15434
15270
  }, isFetchCanceled => {
15435
15271
  return this.errorHandler(isFetchCanceled, f);
15436
15272
  }, this.pConn$.getContextName()));
15437
15273
  Promise.allSettled(filesToBeUploaded)
15438
15274
  .then((fileResponses) => {
15439
- this.handleFileUploadSuccess(fileResponses);
15440
- })
15441
- .catch(error => {
15442
- console.log(error);
15443
- this.handleFileUploadFailure();
15444
- });
15445
- }
15446
- handleFileUploadSuccess(fileResponses) {
15447
- const successFileResponses = fileResponses.filter(fr => fr.status !== 'rejected'); // in case of deleting an in progress file, promise gets cancelled but still enters then block
15448
- let reqObj;
15449
- if (successFileResponses.length > 0) {
15450
- const tempFilesUploaded = [...this.arFiles$.filter(file => !file.id)];
15451
- let newAttachments = [];
15452
- tempFilesUploaded.forEach(fileRes => {
15453
- const index = successFileResponses.findIndex((fr) => fr.value.clientFileID === fileRes.ID);
15454
- if (index >= 0) {
15455
- reqObj = {
15456
- type: 'File',
15457
- label: this.att_valueRef,
15458
- category: this.att_categoryName,
15459
- handle: successFileResponses[index].value.ID,
15460
- ID: fileRes.ID,
15461
- name: fileRes.name
15462
- };
15463
- newAttachments = [...newAttachments, reqObj];
15464
- }
15465
- });
15466
- const currentAttachmentList = this.getCurrentAttachmentsList(this.getAttachmentKey(this.att_valueRef), this.pConn$.getContextName()).filter(f => f.label !== this.att_valueRef);
15467
- PCore.getStateUtils().updateState(this.pConn$.getContextName(), this.getAttachmentKey(this.att_valueRef), [...currentAttachmentList, ...newAttachments], {
15468
- pageReference: 'context_data',
15469
- isArrayDeepMerge: false
15470
- });
15471
- this.arFiles$ = tempFilesUploaded;
15472
- this.ngZone.run(() => {
15473
- this.bShowSelector$ = this.allowMultiple$;
15474
- this.arFiles$.forEach(file => {
15475
- if (!file.error) {
15476
- file.meta = this.pConn$.getLocalizedValue('File uploaded successfully', '', '');
15477
- }
15478
- });
15479
- this.arFileList$ = this.myFiles.map(att => {
15480
- if (att.id) {
15481
- return att;
15275
+ fileResponses = fileResponses.filter(fr => fr.status !== 'rejected'); // in case of deleting an in progress file, promise gets cancelled but still enters then block
15276
+ if (fileResponses.length > 0) {
15277
+ this.files.forEach(f => {
15278
+ const index = fileResponses.findIndex((fr) => fr.value.clientFileID === f.ID);
15279
+ if (index >= 0) {
15280
+ f.props.meta = this.pConn$.getLocalizedValue('Uploaded successfully', '', '');
15281
+ f.props.progress = 100;
15282
+ f.inProgress = false;
15283
+ f.handle = fileResponses[index].value.ID;
15284
+ f.label = this.valueRef;
15285
+ f.category = this.categoryName;
15286
+ f.responseProps = {
15287
+ pzInsKey: 'temp',
15288
+ pyAttachName: f.props.name
15289
+ };
15482
15290
  }
15483
- return this.getNewListUtilityItemProps({
15484
- att,
15485
- downloadFile: null,
15486
- cancelFile: null,
15487
- deleteFile: null,
15488
- removeFile: null
15489
- });
15490
15291
  });
15491
- this.CheckForInvalidAttachment();
15492
- this.bShowJustDelete$ = true;
15493
- this.bLoading$ = false;
15494
- });
15495
- }
15496
- }
15497
- handleFileUploadFailure() {
15498
- this.bShowJustDelete$ = true;
15499
- this.bLoading$ = false;
15500
- this.bShowSelector$ = this.allowMultiple$;
15501
- this.myFiles.forEach(file => {
15502
- if (file?.secondary?.error) {
15503
- file.meta = 'File uploaded failed';
15292
+ this.updateAttachments();
15293
+ if (this.filesWithError?.length === 0) {
15294
+ this.clearFieldErrorMessages();
15295
+ }
15504
15296
  }
15297
+ })
15298
+ .catch(error => {
15299
+ console.log(error);
15505
15300
  });
15506
- this.arFileList$ = this.myFiles.map(att => {
15507
- return this.getNewListUtilityItemProps({
15508
- att,
15509
- downloadFile: null,
15510
- cancelFile: null,
15511
- deleteFile: null,
15512
- removeFile: null
15513
- });
15514
- });
15515
- this.bShowJustDelete$ = true;
15516
- this.bLoading$ = false;
15517
15301
  }
15518
- onUploadProgress() { }
15519
- getFiles(arFiles) {
15520
- const files = this.allowMultiple$ ? arFiles : [arFiles[0]];
15521
- return this.setNewFiles(files);
15522
- }
15523
- setNewFiles(arFiles) {
15524
- let index = 0;
15525
- const maxAttachmentSize = PCore.getEnvironmentInfo().getMaxAttachmentSize() || 5;
15526
- for (const file of arFiles) {
15527
- file.mimeType = file.type;
15528
- file.icon = this.utils.getIconFromFileType(file.type);
15529
- file.ID = `${new Date().getTime()}I${index}`;
15530
- if (!this.validateMaxSize(file, maxAttachmentSize)) {
15531
- file.error = true;
15532
- file.meta = this.pConn$.getLocalizedValue('File is too big. Max allowed size is 5MB.', '', '');
15533
- }
15534
- else if (!this.validateFileExtension(file, this.extensions$)) {
15535
- file.error = true;
15536
- file.meta = `${this.pConn$.getLocalizedValue('File has invalid extension. Allowed extensions are:', '', '')} ${this.extensions$.replaceAll('.', '')}`;
15537
- }
15538
- if (file.error) {
15539
- const fieldName = this.pConn$.getStateProps().value;
15540
- const context = this.pConn$.getContextName();
15541
- PCore.getMessageManager().addMessages({
15542
- // @ts-ignore
15543
- messages: [
15544
- {
15545
- type: 'error',
15546
- message: this.pConn$.getLocalizedValue('Error with one or more files', '', '')
15547
- }
15548
- ],
15549
- property: fieldName,
15550
- pageReference: this.pConn$.getPageReference(),
15551
- context
15552
- });
15553
- }
15554
- index++;
15302
+ ngOnDestroy() {
15303
+ if (this.angularPConnectData.unsubscribeFn) {
15304
+ this.angularPConnectData.unsubscribeFn();
15555
15305
  }
15556
- return [...arFiles];
15557
- }
15558
- validateMaxSize(fileObj, maxSizeInMB) {
15559
- const fileSize = (fileObj.size / 1048576).toFixed(2);
15560
- return parseFloat(fileSize) < parseFloat(maxSizeInMB);
15561
- }
15562
- buildFilePropsFromResponse(respObj) {
15563
- return {
15564
- props: {
15565
- meta: `${respObj.pyCategoryName}, ${respObj.pxCreateOperator}`,
15566
- name: respObj.pyAttachName,
15567
- icon: this.utils.getIconFromFileType(respObj.pyMimeFileExtension)
15568
- },
15569
- responseProps: {
15570
- ...respObj
15571
- }
15572
- };
15306
+ PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, this.caseID);
15573
15307
  }
15574
15308
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AttachmentComponent, deps: [{ token: AngularPConnectService }, { token: Utils }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
15575
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AttachmentComponent, isStandalone: true, selector: "app-attachment", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div class=\"psdk-label-infix-readonly\" *ngIf=\"bVisible$\">\n <span class=\"psdk-label-wrapper-readonly\">\n <label [ngClass]=\"{ 'psdk-label-readonly': true, 'label-required': bRequired$ === true }\" [htmlFor]=\"att_valueRef\">{{ label$ }}</label>\n </span>\n <div\n [ngClass]=\"{ 'psdk-modal-file-selector': status !== 'error', 'psdk-modal-file-selector-error': status === 'error' }\"\n id=\"attachment-container\"\n *ngIf=\"bShowSelector$\"\n >\n <mat-spinner *ngIf=\"bLoading$\" class=\"progress-spinner\" diameter=\"40\"></mat-spinner>\n <input hidden type=\"file\" [required]=\"bRequired$\" #uploader [id]=\"att_valueRef\" [multiple]=\"allowMultiple$\" (change)=\"uploadMyFiles($event)\" />\n\n <button mat-stroked-button color=\"primary\" [disabled]=\"bDisabled$\" (click)=\"uploader.click()\">\n {{\n allowMultiple$\n ? uploadMultipleFilesLabel === 'file_upload_text_multiple'\n ? 'Choose files'\n : uploadMultipleFilesLabel\n : uploadSingleFileLabel === 'file_upload_text_one'\n ? 'Choose a file'\n : uploadSingleFileLabel\n }}\n </button>\n </div>\n <span *ngIf=\"validateMessage\" class=\"file-error\">{{ validateMessage }}</span>\n\n <div class=\"psdk-attachment-list\" *ngIf=\"arFileList$ != null && arFileList$.length > 0\">\n <div *ngFor=\"let attachment of arFileList$\">\n <component-mapper\n *ngIf=\"attachment.noDeleteIcon !== true; else showfull\"\n name=\"SummaryItem\"\n [props]=\"{ item$: attachment, menuIconOverride$: 'trash', menuIconOverrideAction$: removeFileFromList$ }\"\n ></component-mapper>\n <ng-template #showfull>\n <component-mapper name=\"SummaryItem\" [props]=\"{ item$: attachment, menuIconOverrideAction$: removeFileFromList$ }\"></component-mapper>\n </ng-template>\n </div>\n </div>\n</div>\n", styles: [".progress-spinner{text-align:center;position:absolute;left:45%}.psdk-modal-file-selector{border:1px dashed var(--app-neutral-dark-color);width:100%;padding:.3rem;text-align:center;position:relative}.label-required:after{display:inline;content:\" *\";vertical-align:top;color:var(--app-neutral-dark-color)}.file-error{color:var(--app-error-light-color)}.psdk-modal-file-selector-error{border:1px dashed var(--app-error-light-color);width:100%;padding:.3rem;text-align:center;position:relative}.psdk-full-width{width:100%}.psdk-label-readonly{opacity:54%;font-size:.8rem;font-weight:400}.psdk-data-readonly{padding-top:.625rem;width:100%}.psdk-attachment-list{border:1px solid var(--app-neutral-color)}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatProgressSpinnerModule) }, { kind: "component", type: i0.forwardRef(() => i4$3.MatProgressSpinner), selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
15309
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AttachmentComponent, isStandalone: true, selector: "app-attachment", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["uploader"], descendants: true }], ngImport: i0, template: "<div class=\"file-upload-container\" *ngIf=\"bVisible$\">\n <span class=\"attachment-label\" [ngClass]=\"{ 'file-label': bRequired$ }\">{{ label$ }}</span>\n <div *ngIf=\"(files.length === 0 && !allowMultiple$) || allowMultiple$\">\n <div\n style=\"margin-bottom: 10px\"\n id=\"attachment-container\"\n [ngClass]=\"validateMessage ? 'psdk-modal-file-selector-error' : 'psdk-modal-file-selector'\"\n >\n <div [hidden]=\"true\" id=\"attachment-ID\">\n {{ valueRef }}\n </div>\n <input hidden type=\"file\" [required]=\"bRequired$\" #uploader [id]=\"valueRef\" [multiple]=\"allowMultiple$\" (change)=\"onFileAdded($event)\" />\n <button mat-stroked-button color=\"primary\" [disabled]=\"bDisabled$\" (click)=\"uploader.click()\">\n {{\n allowMultiple$\n ? uploadMultipleFilesLabel === 'file_upload_text_multiple'\n ? 'Choose files'\n : uploadMultipleFilesLabel\n : uploadSingleFileLabel === 'file_upload_text_one'\n ? 'Choose a file'\n : uploadSingleFileLabel\n }}\n </button>\n </div>\n </div>\n <span *ngIf=\"validateMessage\" class=\"file-error\">{{ validateMessage }}</span>\n <div *ngIf=\"files && files.length > 0\">\n <div *ngFor=\"let file of files\">\n <div class=\"psdk-attachment-card\">\n <div className=\"psdk-utility-card-icon\">\n <img *ngIf=\"!file.inProgress\" class=\"psdk-attachment-card-svg-icon\" src=\"{{ srcImg }}\" />\n <mat-spinner *ngIf=\"file.inProgress\" class=\"progress-spinner\" diameter=\"40\"></mat-spinner>\n </div>\n <div class=\"psdk-attachment-card-main\">\n <div class=\"psdk-attachment-card-main-primary-label\">{{ file.props.name }}</div>\n <div *ngIf=\"file.props.meta\" [ngStyle]=\"{ color: file.props.error ? 'red' : null }\">{{ file.props.meta }}</div>\n </div>\n <div class=\"psdk-attachment-action\">\n <button id=\"delete-attachment\" *ngIf=\"file.ID\" class=\"psdk-utility-button\" (click)=\"deleteFile(file)\">\n <img class=\"psdk-utility-card-action-svg-icon\" src=\"{{ deleteIcon }}\" />\n </button>\n <div *ngIf=\"!file.ID\">\n <button id=\"setting-button\" mat-icon-button [matMenuTriggerFor]=\"actionMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #actionMenu=\"matMenu\">\n <button mat-menu-item (click)=\"downloadFile(file.responseProps ? file.responseProps : {})\">Download</button>\n <button mat-menu-item (click)=\"deleteFile(file)\">Delete</button>\n </mat-menu>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".progress-spinner{text-align:center;position:absolute;left:45%}.psdk-modal-file-selector{border:1px dashed var(--app-neutral-dark-color);width:100%;padding:.3rem;text-align:center;position:relative}.psdk-modal-file-selector-error{border:1px dashed var(--app-error-light-color);width:100%;padding:.3rem;text-align:center;position:relative}.psdk-modal-file-selector{border:1px dashed var(--app-neutral-dark-color);padding:.5rem;text-align:center;position:relative}.label-required:after{display:inline;content:\" *\";vertical-align:top;color:var(--app-neutral-dark-color)}.file-error{color:var(--app-error-light-color)}.psdk-modal-file-selector-error{border:1px dashed var(--app-error-light-color);padding:.5rem;text-align:center;position:relative}.psdk-full-width{width:100%}.psdk-label-readonly{opacity:54%;font-size:.8rem;font-weight:400}.psdk-data-readonly{padding-top:.625rem;width:100%}.psdk-attachment-list{border:1px solid var(--app-neutral-color)}::ng-deep .mat-mdc-form-field-infix{width:auto}.psdk-attachment-card{display:flex;align-items:center;border:.0625rem solid rgb(207,207,207);border-radius:.25rem;padding:.25rem 0rem .25rem .25rem;min-height:3rem;margin-bottom:.5rem}.psdk-attachment-card-main-primary-label{font-weight:500;text-overflow:ellipsis;overflow:hidden;white-space:normal}.psdk-attachment-card-main{flex-grow:2;margin-left:5px}.psdk-attachment-action{flex-grow:1;text-align:right}.psdk-attachment-card-svg-icon{width:2.5rem}.psdk-utility-button{background:none;border:none;margin-right:.5rem;cursor:pointer}.psdk-utility-card-action-svg-icon{width:1.4rem;display:inline-block}.file-div{border:1px dashed var(--app-neutral-dark-color);width:100%;padding:.5rem;text-align:center;position:relative}.file-div-error{border:1px dashed var(--app-error-light-color);width:100%;padding:.5rem;text-align:center;position:relative}.attachment-label{display:block;margin-bottom:10px}.file-label:after{display:inline;content:\" *\";vertical-align:top;color:var(--app-neutral-dark-color)}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatProgressSpinnerModule) }, { kind: "component", type: i0.forwardRef(() => i4$3.MatProgressSpinner), selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatMenuModule) }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenu), selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i0.forwardRef(() => i6$1.MatMenuItem), selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i0.forwardRef(() => i6$1.MatMenuTrigger), selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatIconModule) }, { kind: "component", type: i0.forwardRef(() => i2$2.MatIcon), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3$1.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => i3$1.MatIconButton), selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
15576
15310
  }
15577
15311
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AttachmentComponent, decorators: [{
15578
15312
  type: Component,
15579
- args: [{ selector: 'app-attachment', standalone: true, imports: [CommonModule, MatProgressSpinnerModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"psdk-label-infix-readonly\" *ngIf=\"bVisible$\">\n <span class=\"psdk-label-wrapper-readonly\">\n <label [ngClass]=\"{ 'psdk-label-readonly': true, 'label-required': bRequired$ === true }\" [htmlFor]=\"att_valueRef\">{{ label$ }}</label>\n </span>\n <div\n [ngClass]=\"{ 'psdk-modal-file-selector': status !== 'error', 'psdk-modal-file-selector-error': status === 'error' }\"\n id=\"attachment-container\"\n *ngIf=\"bShowSelector$\"\n >\n <mat-spinner *ngIf=\"bLoading$\" class=\"progress-spinner\" diameter=\"40\"></mat-spinner>\n <input hidden type=\"file\" [required]=\"bRequired$\" #uploader [id]=\"att_valueRef\" [multiple]=\"allowMultiple$\" (change)=\"uploadMyFiles($event)\" />\n\n <button mat-stroked-button color=\"primary\" [disabled]=\"bDisabled$\" (click)=\"uploader.click()\">\n {{\n allowMultiple$\n ? uploadMultipleFilesLabel === 'file_upload_text_multiple'\n ? 'Choose files'\n : uploadMultipleFilesLabel\n : uploadSingleFileLabel === 'file_upload_text_one'\n ? 'Choose a file'\n : uploadSingleFileLabel\n }}\n </button>\n </div>\n <span *ngIf=\"validateMessage\" class=\"file-error\">{{ validateMessage }}</span>\n\n <div class=\"psdk-attachment-list\" *ngIf=\"arFileList$ != null && arFileList$.length > 0\">\n <div *ngFor=\"let attachment of arFileList$\">\n <component-mapper\n *ngIf=\"attachment.noDeleteIcon !== true; else showfull\"\n name=\"SummaryItem\"\n [props]=\"{ item$: attachment, menuIconOverride$: 'trash', menuIconOverrideAction$: removeFileFromList$ }\"\n ></component-mapper>\n <ng-template #showfull>\n <component-mapper name=\"SummaryItem\" [props]=\"{ item$: attachment, menuIconOverrideAction$: removeFileFromList$ }\"></component-mapper>\n </ng-template>\n </div>\n </div>\n</div>\n", styles: [".progress-spinner{text-align:center;position:absolute;left:45%}.psdk-modal-file-selector{border:1px dashed var(--app-neutral-dark-color);width:100%;padding:.3rem;text-align:center;position:relative}.label-required:after{display:inline;content:\" *\";vertical-align:top;color:var(--app-neutral-dark-color)}.file-error{color:var(--app-error-light-color)}.psdk-modal-file-selector-error{border:1px dashed var(--app-error-light-color);width:100%;padding:.3rem;text-align:center;position:relative}.psdk-full-width{width:100%}.psdk-label-readonly{opacity:54%;font-size:.8rem;font-weight:400}.psdk-data-readonly{padding-top:.625rem;width:100%}.psdk-attachment-list{border:1px solid var(--app-neutral-color)}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"] }]
15313
+ args: [{ selector: 'app-attachment', standalone: true, imports: [CommonModule, MatProgressSpinnerModule, MatMenuModule, MatIconModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"file-upload-container\" *ngIf=\"bVisible$\">\n <span class=\"attachment-label\" [ngClass]=\"{ 'file-label': bRequired$ }\">{{ label$ }}</span>\n <div *ngIf=\"(files.length === 0 && !allowMultiple$) || allowMultiple$\">\n <div\n style=\"margin-bottom: 10px\"\n id=\"attachment-container\"\n [ngClass]=\"validateMessage ? 'psdk-modal-file-selector-error' : 'psdk-modal-file-selector'\"\n >\n <div [hidden]=\"true\" id=\"attachment-ID\">\n {{ valueRef }}\n </div>\n <input hidden type=\"file\" [required]=\"bRequired$\" #uploader [id]=\"valueRef\" [multiple]=\"allowMultiple$\" (change)=\"onFileAdded($event)\" />\n <button mat-stroked-button color=\"primary\" [disabled]=\"bDisabled$\" (click)=\"uploader.click()\">\n {{\n allowMultiple$\n ? uploadMultipleFilesLabel === 'file_upload_text_multiple'\n ? 'Choose files'\n : uploadMultipleFilesLabel\n : uploadSingleFileLabel === 'file_upload_text_one'\n ? 'Choose a file'\n : uploadSingleFileLabel\n }}\n </button>\n </div>\n </div>\n <span *ngIf=\"validateMessage\" class=\"file-error\">{{ validateMessage }}</span>\n <div *ngIf=\"files && files.length > 0\">\n <div *ngFor=\"let file of files\">\n <div class=\"psdk-attachment-card\">\n <div className=\"psdk-utility-card-icon\">\n <img *ngIf=\"!file.inProgress\" class=\"psdk-attachment-card-svg-icon\" src=\"{{ srcImg }}\" />\n <mat-spinner *ngIf=\"file.inProgress\" class=\"progress-spinner\" diameter=\"40\"></mat-spinner>\n </div>\n <div class=\"psdk-attachment-card-main\">\n <div class=\"psdk-attachment-card-main-primary-label\">{{ file.props.name }}</div>\n <div *ngIf=\"file.props.meta\" [ngStyle]=\"{ color: file.props.error ? 'red' : null }\">{{ file.props.meta }}</div>\n </div>\n <div class=\"psdk-attachment-action\">\n <button id=\"delete-attachment\" *ngIf=\"file.ID\" class=\"psdk-utility-button\" (click)=\"deleteFile(file)\">\n <img class=\"psdk-utility-card-action-svg-icon\" src=\"{{ deleteIcon }}\" />\n </button>\n <div *ngIf=\"!file.ID\">\n <button id=\"setting-button\" mat-icon-button [matMenuTriggerFor]=\"actionMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #actionMenu=\"matMenu\">\n <button mat-menu-item (click)=\"downloadFile(file.responseProps ? file.responseProps : {})\">Download</button>\n <button mat-menu-item (click)=\"deleteFile(file)\">Delete</button>\n </mat-menu>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".progress-spinner{text-align:center;position:absolute;left:45%}.psdk-modal-file-selector{border:1px dashed var(--app-neutral-dark-color);width:100%;padding:.3rem;text-align:center;position:relative}.psdk-modal-file-selector-error{border:1px dashed var(--app-error-light-color);width:100%;padding:.3rem;text-align:center;position:relative}.psdk-modal-file-selector{border:1px dashed var(--app-neutral-dark-color);padding:.5rem;text-align:center;position:relative}.label-required:after{display:inline;content:\" *\";vertical-align:top;color:var(--app-neutral-dark-color)}.file-error{color:var(--app-error-light-color)}.psdk-modal-file-selector-error{border:1px dashed var(--app-error-light-color);padding:.5rem;text-align:center;position:relative}.psdk-full-width{width:100%}.psdk-label-readonly{opacity:54%;font-size:.8rem;font-weight:400}.psdk-data-readonly{padding-top:.625rem;width:100%}.psdk-attachment-list{border:1px solid var(--app-neutral-color)}::ng-deep .mat-mdc-form-field-infix{width:auto}.psdk-attachment-card{display:flex;align-items:center;border:.0625rem solid rgb(207,207,207);border-radius:.25rem;padding:.25rem 0rem .25rem .25rem;min-height:3rem;margin-bottom:.5rem}.psdk-attachment-card-main-primary-label{font-weight:500;text-overflow:ellipsis;overflow:hidden;white-space:normal}.psdk-attachment-card-main{flex-grow:2;margin-left:5px}.psdk-attachment-action{flex-grow:1;text-align:right}.psdk-attachment-card-svg-icon{width:2.5rem}.psdk-utility-button{background:none;border:none;margin-right:.5rem;cursor:pointer}.psdk-utility-card-action-svg-icon{width:1.4rem;display:inline-block}.file-div{border:1px dashed var(--app-neutral-dark-color);width:100%;padding:.5rem;text-align:center;position:relative}.file-div-error{border:1px dashed var(--app-error-light-color);width:100%;padding:.5rem;text-align:center;position:relative}.attachment-label{display:block;margin-bottom:10px}.file-label:after{display:inline;content:\" *\";vertical-align:top;color:var(--app-neutral-dark-color)}\n"] }]
15580
15314
  }], ctorParameters: () => [{ type: AngularPConnectService }, { type: Utils }, { type: i0.NgZone }], propDecorators: { pConn$: [{
15581
15315
  type: Input
15582
15316
  }], formGroup$: [{
15583
15317
  type: Input
15318
+ }], fileInput: [{
15319
+ type: ViewChild,
15320
+ args: ['uploader', { static: false }]
15584
15321
  }] } });
15585
15322
 
15586
15323
  class CaseHistoryComponent {
@@ -15591,7 +15328,6 @@ class CaseHistoryComponent {
15591
15328
  }
15592
15329
  ngOnInit() {
15593
15330
  this.configProps$ = this.pConn$.getConfigProps();
15594
- // @ts-ignore - second parameter pageReference for getValue method should be optional
15595
15331
  const caseID = this.pConn$.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID);
15596
15332
  const dataViewName = 'D_pyWorkHistory';
15597
15333
  const context = this.pConn$.getContextName();
@@ -15887,7 +15623,6 @@ class FileUtilityComponent {
15887
15623
  }
15888
15624
  onAttachFiles(files) {
15889
15625
  const attachmentUtils = PCore.getAttachmentUtils();
15890
- // @ts-ignore - second parameter pageReference for getValue method should be optional
15891
15626
  const caseID = this.pConn$.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID);
15892
15627
  if (files.length > 0) {
15893
15628
  this.lu_bLoading$ = true;
@@ -15920,7 +15655,6 @@ class FileUtilityComponent {
15920
15655
  errorHandler() { }
15921
15656
  onAttachLinks(links) {
15922
15657
  const attachmentUtils = PCore.getAttachmentUtils();
15923
- // @ts-ignore - second parameter pageReference for getValue method should be optional
15924
15658
  const caseID = this.pConn$.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID);
15925
15659
  if (links.length > 0) {
15926
15660
  this.lu_bLoading$ = true;
@@ -16228,7 +15962,6 @@ class FileUtilityComponent {
16228
15962
  }
16229
15963
  }
16230
15964
  getCaseID() {
16231
- // @ts-ignore - second parameter pageReference for getValue method should be optional
16232
15965
  return this.pConn$.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID) || '';
16233
15966
  }
16234
15967
  fetchCaseAttachments(caseID) {
@@ -16267,7 +16000,6 @@ class FileUtilityComponent {
16267
16000
  return att.error ? () => this.removeFile() : null;
16268
16001
  }
16269
16002
  caseHasChanged() {
16270
- // @ts-ignore - second parameter pageReference for getValue method should be optional
16271
16003
  const caseID = this.pConn$.getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID);
16272
16004
  if (this.currentCaseID !== caseID) {
16273
16005
  this.currentCaseID = caseID;
@@ -16603,13 +16335,11 @@ class FeedContainerComponent {
16603
16335
  this.updateSelf();
16604
16336
  }
16605
16337
  else {
16606
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
16607
16338
  const newPulseData = this.pConn$.getDataObject().pulse;
16608
16339
  if (!isEqual(newPulseData, this.pulseData)) {
16609
16340
  this.updateSelf();
16610
16341
  }
16611
16342
  }
16612
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
16613
16343
  this.pulseData = this.pConn$.getDataObject().pulse;
16614
16344
  }
16615
16345
  updateSelf() {
@@ -16618,9 +16348,7 @@ class FeedContainerComponent {
16618
16348
  getMessageData() {
16619
16349
  const messageIDs = this.pConn$.getConfigProps().messageIDs;
16620
16350
  const userName = this.pConn$.getConfigProps().currentUser;
16621
- // @ts-ignore - second parameter pageReference for getValue method should be optional
16622
16351
  const imageKey = this.pConn$.getValue('OperatorID.pyImageInsKey');
16623
- // @ts-ignore - parameter “contextName” for getDataObject method should be optional
16624
16352
  const oData = this.pConn$.getDataObject();
16625
16353
  if (messageIDs && messageIDs.length > 0) {
16626
16354
  this.pulseMessages$ = JSON.parse(JSON.stringify(oData.pulse.messages));
@@ -18162,7 +17890,6 @@ class RepeatingStructuresComponent {
18162
17890
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
18163
17891
  this.fields$ = this.initializeColumns(componentConfig.fields);
18164
17892
  const refList = this.configProps$.referenceList;
18165
- // @ts-ignore - second parameter pageReference for getValue method should be optional
18166
17893
  const tableDataResults = JSON.parse(JSON.stringify(this.pConn$.getValue(refList)));
18167
17894
  // update elements like date format
18168
17895
  const updatedRefList = this.updateData(tableDataResults, this.fields$);