@pega/angular-sdk-overrides 0.24.9 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/lib/designSystemExtension/alert/alert.component.scss +3 -3
  2. package/lib/designSystemExtension/alert/alert.component.ts +0 -1
  3. package/lib/designSystemExtension/alert-banner/alert-banner.component.ts +1 -2
  4. package/lib/designSystemExtension/banner/banner.component.scss +12 -2
  5. package/lib/designSystemExtension/banner/banner.component.ts +0 -1
  6. package/lib/designSystemExtension/case-create-stage/case-create-stage.component.ts +1 -2
  7. package/lib/designSystemExtension/field-group/field-group.component.ts +0 -1
  8. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.html +6 -3
  9. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.scss +7 -35
  10. package/lib/designSystemExtension/material-case-summary/material-case-summary.component.ts +0 -2
  11. package/lib/designSystemExtension/material-details/material-details.component.scss +0 -5
  12. package/lib/designSystemExtension/material-details/material-details.component.ts +0 -1
  13. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.html +4 -4
  14. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.scss +4 -3
  15. package/lib/designSystemExtension/material-details-fields/material-details-fields.component.ts +10 -2
  16. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.scss +2 -17
  17. package/lib/designSystemExtension/material-summary-item/material-summary-item.component.ts +0 -1
  18. package/lib/designSystemExtension/material-summary-list/material-summary-list.component.ts +0 -1
  19. package/lib/designSystemExtension/material-utility/material-utility.component.scss +1 -2
  20. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.scss +1 -1
  21. package/lib/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.ts +0 -1
  22. package/lib/designSystemExtension/operator/operator.component.html +2 -2
  23. package/lib/designSystemExtension/operator/operator.component.scss +13 -12
  24. package/lib/designSystemExtension/operator/operator.component.ts +5 -6
  25. package/lib/designSystemExtension/pulse/pulse.component.scss +2 -2
  26. package/lib/designSystemExtension/pulse/pulse.component.ts +7 -8
  27. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.scss +0 -1
  28. package/lib/designSystemExtension/rich-text-editor/rich-text-editor.component.ts +0 -1
  29. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.scss +16 -8
  30. package/lib/designSystemExtension/wss-quick-create/wss-quick-create.component.ts +0 -1
  31. package/lib/field/auto-complete/auto-complete.component.html +0 -2
  32. package/lib/field/auto-complete/auto-complete.component.ts +56 -178
  33. package/lib/field/cancel-alert/cancel-alert.component.html +8 -12
  34. package/lib/field/cancel-alert/cancel-alert.component.scss +2 -3
  35. package/lib/field/cancel-alert/cancel-alert.component.ts +24 -37
  36. package/lib/field/check-box/check-box.component.html +17 -6
  37. package/lib/field/check-box/check-box.component.scss +0 -1
  38. package/lib/field/check-box/check-box.component.ts +32 -157
  39. package/lib/field/currency/currency.component.html +4 -4
  40. package/lib/field/currency/currency.component.ts +65 -175
  41. package/lib/field/date/date.component.html +4 -8
  42. package/lib/field/date/date.component.ts +39 -177
  43. package/lib/field/date-time/date-time.component.html +3 -4
  44. package/lib/field/date-time/date-time.component.ts +46 -146
  45. package/lib/field/decimal/decimal.component.html +4 -3
  46. package/lib/field/decimal/decimal.component.ts +66 -166
  47. package/lib/field/dropdown/dropdown.component.html +1 -0
  48. package/lib/field/dropdown/dropdown.component.ts +158 -153
  49. package/lib/field/email/email.component.ts +28 -148
  50. package/lib/field/field.base.ts +149 -0
  51. package/lib/field/group/group.component.ts +9 -7
  52. package/lib/field/integer/integer.component.ts +30 -152
  53. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.html +1 -1
  54. package/lib/field/list-view-action-buttons/list-view-action-buttons.component.ts +3 -3
  55. package/lib/field/location/config-ext.json +8 -0
  56. package/lib/field/location/location.component.html +45 -0
  57. package/lib/field/location/location.component.scss +18 -0
  58. package/lib/field/location/location.component.spec.ts +22 -0
  59. package/lib/field/location/location.component.ts +385 -0
  60. package/lib/field/multiselect/multiselect.component.ts +56 -151
  61. package/lib/field/multiselect/utils.ts +55 -47
  62. package/lib/field/object-reference/object-reference.component.html +17 -0
  63. package/lib/field/object-reference/object-reference.component.scss +0 -0
  64. package/lib/field/object-reference/object-reference.component.spec.ts +22 -0
  65. package/lib/field/object-reference/object-reference.component.ts +237 -0
  66. package/lib/field/percentage/percentage.component.html +3 -3
  67. package/lib/field/percentage/percentage.component.ts +68 -161
  68. package/lib/field/phone/config-ext.json +1 -1
  69. package/lib/field/phone/phone.component.html +9 -6
  70. package/lib/field/phone/phone.component.scss +9 -0
  71. package/lib/field/phone/phone.component.ts +48 -159
  72. package/lib/field/radio-buttons/radio-buttons.component.html +17 -12
  73. package/lib/field/radio-buttons/radio-buttons.component.scss +4 -2
  74. package/lib/field/radio-buttons/radio-buttons.component.ts +39 -162
  75. package/lib/field/rich-text/rich-text.component.ts +32 -93
  76. package/lib/field/scalar-list/scalar-list.component.ts +20 -77
  77. package/lib/field/selectable-card/selectable-card.component.html +70 -0
  78. package/lib/field/selectable-card/selectable-card.component.scss +11 -0
  79. package/lib/field/selectable-card/selectable-card.component.spec.ts +22 -0
  80. package/lib/field/selectable-card/selectable-card.component.ts +219 -0
  81. package/lib/field/semantic-link/semantic-link.component.html +4 -8
  82. package/lib/field/semantic-link/semantic-link.component.scss +0 -13
  83. package/lib/field/semantic-link/semantic-link.component.ts +165 -6
  84. package/lib/field/text/text.component.scss +0 -1
  85. package/lib/field/text/text.component.ts +8 -5
  86. package/lib/field/text-area/text-area.component.html +4 -1
  87. package/lib/field/text-area/text-area.component.ts +30 -148
  88. package/lib/field/text-content/text-content.component.ts +0 -1
  89. package/lib/field/text-input/text-input.component.ts +28 -150
  90. package/lib/field/time/time.component.html +2 -2
  91. package/lib/field/time/time.component.ts +39 -145
  92. package/lib/field/url/url.component.ts +28 -149
  93. package/lib/field/user-reference/user-reference.component.html +40 -46
  94. package/lib/field/user-reference/user-reference.component.scss +0 -1
  95. package/lib/field/user-reference/user-reference.component.ts +110 -21
  96. package/lib/infra/Containers/flow-container/flow-container.component.html +1 -1
  97. package/lib/infra/Containers/flow-container/flow-container.component.ts +29 -54
  98. package/lib/infra/Containers/flow-container/helpers.ts +2 -2
  99. package/lib/infra/Containers/hybrid-view-container/hybrid-view-container.component.ts +0 -1
  100. package/lib/infra/Containers/modal-view-container/modal-view-container.component.html +1 -11
  101. package/lib/infra/Containers/modal-view-container/modal-view-container.component.ts +6 -19
  102. package/lib/infra/Containers/preview-view-container/preview-view-container.component.ts +1 -1
  103. package/lib/infra/Containers/view-container/helper.ts +55 -0
  104. package/lib/infra/Containers/view-container/view-container.component.ts +6 -19
  105. package/lib/infra/action-buttons/action-buttons.component.html +13 -8
  106. package/lib/infra/action-buttons/action-buttons.component.scss +23 -0
  107. package/lib/infra/action-buttons/action-buttons.component.ts +1 -3
  108. package/lib/infra/assignment/assignment.component.html +1 -1
  109. package/lib/infra/assignment/assignment.component.ts +90 -47
  110. package/lib/infra/assignment-card/assignment-card.component.html +2 -2
  111. package/lib/infra/assignment-card/assignment-card.component.scss +0 -4
  112. package/lib/infra/assignment-card/assignment-card.component.ts +21 -5
  113. package/lib/infra/dashboard-filter/dashboard-filter.component.ts +0 -1
  114. package/lib/infra/defer-load/defer-load.component.html +6 -2
  115. package/lib/infra/defer-load/defer-load.component.ts +24 -16
  116. package/lib/infra/error-boundary/error-boundary.component.ts +0 -1
  117. package/lib/infra/multi-step/multi-step.component.scss +1 -21
  118. package/lib/infra/multi-step/multi-step.component.ts +0 -1
  119. package/lib/infra/navbar/navbar.component.html +25 -28
  120. package/lib/infra/navbar/navbar.component.scss +16 -4
  121. package/lib/infra/navbar/navbar.component.ts +11 -9
  122. package/lib/infra/reference/reference.component.ts +77 -90
  123. package/lib/infra/region/region.component.ts +0 -1
  124. package/lib/infra/root-container/root-container.component.html +2 -15
  125. package/lib/infra/root-container/root-container.component.scss +0 -1
  126. package/lib/infra/root-container/root-container.component.ts +28 -35
  127. package/lib/infra/stages/stages.component.html +2 -2
  128. package/lib/infra/stages/stages.component.scss +9 -37
  129. package/lib/infra/stages/stages.component.ts +4 -3
  130. package/lib/infra/view/view.component.html +7 -20
  131. package/lib/infra/view/view.component.ts +20 -5
  132. package/lib/template/advanced-search/advanced-search.component.html +12 -0
  133. package/lib/template/advanced-search/advanced-search.component.scss +0 -0
  134. package/lib/template/advanced-search/advanced-search.component.spec.ts +0 -0
  135. package/lib/template/advanced-search/advanced-search.component.ts +112 -0
  136. package/lib/template/advanced-search/advanced-search.service.ts +27 -0
  137. package/lib/template/advanced-search/search-group/persist-utils.ts +56 -0
  138. package/lib/template/advanced-search/search-groups/search-groups.component.html +32 -0
  139. package/lib/template/advanced-search/search-groups/search-groups.component.scss +0 -0
  140. package/lib/template/advanced-search/search-groups/search-groups.component.spec.ts +0 -0
  141. package/lib/template/advanced-search/search-groups/search-groups.component.ts +294 -0
  142. package/lib/template/advanced-search/search-groups/utils.ts +29 -0
  143. package/lib/template/app-shell/app-shell.component.html +4 -1
  144. package/lib/template/app-shell/app-shell.component.scss +0 -3
  145. package/lib/template/app-shell/app-shell.component.ts +66 -10
  146. package/lib/template/banner-page/banner-page.component.ts +0 -1
  147. package/lib/template/base/details-template-base.ts +67 -0
  148. package/lib/template/base/form-template-base.ts +16 -0
  149. package/lib/template/case-summary/case-summary.component.scss +0 -2
  150. package/lib/template/case-summary/case-summary.component.ts +7 -23
  151. package/lib/template/case-view/case-view.component.html +7 -7
  152. package/lib/template/case-view/case-view.component.scss +18 -10
  153. package/lib/template/case-view/case-view.component.ts +9 -15
  154. package/lib/template/confirmation/confirmation.component.html +1 -1
  155. package/lib/template/confirmation/confirmation.component.ts +1 -2
  156. package/lib/template/data-reference/data-reference-advanced-search.service.ts +16 -0
  157. package/lib/template/data-reference/data-reference.component.html +11 -8
  158. package/lib/template/data-reference/data-reference.component.ts +377 -148
  159. package/lib/template/data-reference/search-form/search-form.component.html +39 -0
  160. package/lib/template/data-reference/search-form/search-form.component.scss +11 -0
  161. package/lib/template/data-reference/search-form/search-form.component.spec.ts +0 -0
  162. package/lib/template/data-reference/search-form/search-form.component.ts +167 -0
  163. package/lib/template/data-reference/search-form/tabsData.ts +160 -0
  164. package/lib/template/data-reference/utils.ts +92 -0
  165. package/lib/template/default-form/default-form.component.html +0 -4
  166. package/lib/template/default-form/default-form.component.ts +50 -26
  167. package/lib/template/default-page/default-page.component.html +34 -0
  168. package/lib/template/default-page/default-page.component.scss +31 -0
  169. package/lib/template/default-page/default-page.component.spec.ts +24 -0
  170. package/lib/template/default-page/default-page.component.ts +64 -0
  171. package/lib/template/details/details.component.ts +7 -42
  172. package/lib/template/details-narrow-wide/details-narrow-wide.component.ts +6 -40
  173. package/lib/template/details-one-column/details-one-column.component.ts +7 -43
  174. package/lib/template/details-sub-tabs/details-sub-tabs.component.html +1 -2
  175. package/lib/template/details-sub-tabs/details-sub-tabs.component.ts +5 -38
  176. package/lib/template/details-three-column/details-three-column.component.ts +7 -44
  177. package/lib/template/details-two-column/details-two-column.component.ts +8 -45
  178. package/lib/template/details-wide-narrow/details-wide-narrow.component.ts +7 -43
  179. package/lib/template/dynamic-tabs/dynamic-tabs.component.html +3 -0
  180. package/lib/template/dynamic-tabs/dynamic-tabs.component.ts +8 -4
  181. package/lib/template/field-group-list/field-group-list.component.scss +0 -1
  182. package/lib/template/field-group-list/field-group-list.component.ts +0 -1
  183. package/lib/template/field-group-template/field-group-template.component.html +7 -7
  184. package/lib/template/field-group-template/field-group-template.component.scss +8 -0
  185. package/lib/template/field-group-template/field-group-template.component.ts +68 -48
  186. package/lib/template/field-value-list/field-value-list.component.html +2 -2
  187. package/lib/template/field-value-list/field-value-list.component.scss +6 -1
  188. package/lib/template/field-value-list/field-value-list.component.ts +0 -1
  189. package/lib/template/inline-dashboard/inline-dashboard.component.ts +0 -1
  190. package/lib/template/inline-dashboard-page/inline-dashboard-page.component.ts +2 -3
  191. package/lib/template/list-page/list-page.component.ts +0 -1
  192. package/lib/template/list-view/list-view.component.html +14 -4
  193. package/lib/template/list-view/list-view.component.scss +30 -19
  194. package/lib/template/list-view/list-view.component.ts +179 -95
  195. package/lib/template/list-view/listViewHelpers.ts +4 -10
  196. package/lib/template/list-view/utils.ts +27 -7
  197. package/lib/template/multi-reference-readonly/multi-reference-readonly.component.ts +0 -1
  198. package/lib/template/narrow-wide-form/narrow-wide-form.component.ts +1 -2
  199. package/lib/template/object-page/object-page.component.html +1 -0
  200. package/lib/template/object-page/object-page.component.scss +0 -0
  201. package/lib/template/object-page/object-page.component.spec.ts +22 -0
  202. package/lib/template/object-page/object-page.component.ts +14 -0
  203. package/lib/template/one-column/one-column.component.ts +4 -4
  204. package/lib/template/one-column-page/one-column-page.component.ts +0 -1
  205. package/lib/template/one-column-tab/one-column-tab.component.scss +1 -1
  206. package/lib/template/one-column-tab/one-column-tab.component.ts +1 -2
  207. package/lib/template/page/page.component.ts +1 -2
  208. package/lib/template/promoted-filters/promoted-filters.component.ts +1 -2
  209. package/lib/template/repeating-structures/repeating-structures.component.ts +1 -3
  210. package/lib/template/self-service-case-view/self-service-case-view.component.html +80 -0
  211. package/lib/template/self-service-case-view/self-service-case-view.component.scss +124 -0
  212. package/lib/template/self-service-case-view/self-service-case-view.component.spec.ts +24 -0
  213. package/lib/template/self-service-case-view/self-service-case-view.component.ts +216 -0
  214. package/lib/template/simple-table/simple-table.component.ts +0 -2
  215. package/lib/template/simple-table-manual/helpers.ts +127 -11
  216. package/lib/template/simple-table-manual/simple-table-manual.component.html +27 -8
  217. package/lib/template/simple-table-manual/simple-table-manual.component.scss +16 -17
  218. package/lib/template/simple-table-manual/simple-table-manual.component.ts +118 -58
  219. package/lib/template/simple-table-select/simple-table-select.component.ts +3 -4
  220. package/lib/template/single-reference-readonly/single-reference-readonly.component.html +4 -1
  221. package/lib/template/single-reference-readonly/single-reference-readonly.component.scss +21 -0
  222. package/lib/template/single-reference-readonly/single-reference-readonly.component.ts +104 -4
  223. package/lib/template/sub-tabs/sub-tabs.component.ts +0 -1
  224. package/lib/template/three-column/three-column.component.ts +4 -4
  225. package/lib/template/three-column-page/three-column-page.component.ts +0 -1
  226. package/lib/template/two-column/two-column.component.ts +4 -4
  227. package/lib/template/two-column-page/two-column-page.component.ts +0 -1
  228. package/lib/template/two-column-tab/two-column-tab.component.ts +1 -2
  229. package/lib/template/utils.ts +58 -0
  230. package/lib/template/wide-narrow-form/wide-narrow-form.component.ts +4 -4
  231. package/lib/template/wide-narrow-page/wide-narrow-page.component.ts +1 -2
  232. package/lib/template/wss-nav-bar/wss-nav-bar.component.html +5 -4
  233. package/lib/template/wss-nav-bar/wss-nav-bar.component.scss +2 -8
  234. package/lib/template/wss-nav-bar/wss-nav-bar.component.ts +3 -11
  235. package/lib/widget/app-announcement/app-announcement.component.html +1 -2
  236. package/lib/widget/app-announcement/app-announcement.component.scss +2 -2
  237. package/lib/widget/app-announcement/app-announcement.component.ts +0 -1
  238. package/lib/widget/attachment/Attachment.types.ts +92 -0
  239. package/lib/widget/attachment/AttachmentUtils.ts +287 -0
  240. package/lib/widget/attachment/attachment.component.html +3 -3
  241. package/lib/widget/attachment/attachment.component.scss +2 -5
  242. package/lib/widget/attachment/attachment.component.ts +256 -259
  243. package/lib/widget/case-history/case-history.component.ts +0 -1
  244. package/lib/widget/feed-container/feed-container.component.scss +3 -9
  245. package/lib/widget/feed-container/feed-container.component.ts +9 -12
  246. package/lib/widget/file-utility/file-utility.component.html +3 -3
  247. package/lib/widget/file-utility/file-utility.component.scss +5 -16
  248. package/lib/widget/file-utility/file-utility.component.ts +2 -6
  249. package/lib/widget/list-utility/list-utility.component.scss +3 -5
  250. package/lib/widget/list-utility/list-utility.component.ts +0 -1
  251. package/lib/widget/quick-create/quick-create.component.ts +0 -1
  252. package/lib/widget/todo/todo.component.html +13 -11
  253. package/lib/widget/todo/todo.component.scss +19 -11
  254. package/lib/widget/todo/todo.component.ts +101 -87
  255. package/lib/widget/utility/utility.component.ts +0 -1
  256. package/package.json +1 -1
@@ -1,27 +1,26 @@
1
- /* eslint-disable max-classes-per-file */
2
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, Inject, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core';
3
2
  import { CommonModule } from '@angular/common';
4
- import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { ReactiveFormsModule } from '@angular/forms';
5
4
  import { MatDatepickerModule } from '@angular/material/datepicker';
6
5
  import { MatNativeDateModule } from '@angular/material/core';
7
6
  import { MatInputModule } from '@angular/material/input';
8
7
  import { MatFormFieldModule } from '@angular/material/form-field';
9
8
  import { MAT_DATE_FORMATS } from '@angular/material/core';
10
9
  import { MomentDateModule } from '@angular/material-moment-adapter';
11
- import { interval } from 'rxjs';
12
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
13
- import { Utils } from '@pega/angular-sdk-components';
10
+
11
+ import { FieldBase } from '@pega/angular-sdk-components';
14
12
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
15
- import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/angular-sdk-components';
16
- import { PConnFieldProps } from '@pega/angular-sdk-components';
13
+ import { getDateFormatInfo } from '@pega/angular-sdk-components';
17
14
  import { format } from '@pega/angular-sdk-components';
15
+ import { handleEvent } from '@pega/angular-sdk-components';
16
+ import { PConnFieldProps } from '@pega/angular-sdk-components';
18
17
 
19
18
  interface DateProps extends PConnFieldProps {
20
19
  // If any, enter additional props that only exist on Date here
21
20
  }
22
21
 
23
22
  class MyFormat {
24
- theDateFormat: any = getDateFormatInfo();
23
+ theDateFormat = getDateFormatInfo();
25
24
 
26
25
  get display() {
27
26
  return {
@@ -43,7 +42,6 @@ class MyFormat {
43
42
  selector: 'app-date',
44
43
  templateUrl: './date.component.html',
45
44
  styleUrls: ['./date.component.scss'],
46
- standalone: true,
47
45
  imports: [
48
46
  CommonModule,
49
47
  ReactiveFormsModule,
@@ -56,197 +54,61 @@ class MyFormat {
56
54
  ],
57
55
  providers: [{ provide: MAT_DATE_FORMATS, useClass: MyFormat }]
58
56
  })
59
- export class DateComponent implements OnInit, OnDestroy {
60
- @Input() pConn$: typeof PConnect;
61
- @Input() formGroup$: FormGroup;
62
-
63
- // Used with AngularPConnect
64
- angularPConnectData: AngularPConnectData = {};
57
+ export class DateComponent extends FieldBase implements OnInit, OnDestroy {
65
58
  configProps$: DateProps;
66
59
 
67
- label$ = '';
68
- value$: any;
69
- bRequired$ = false;
70
- bReadonly$ = false;
71
- bDisabled$ = false;
72
- bVisible$ = true;
73
- displayMode$?: string = '';
74
- controlName$: string;
75
- bHasForm$ = true;
76
- componentReference = '';
77
- testId = '';
78
- helperText: string;
79
- placeholder: string;
80
-
81
- fieldControl = new FormControl('', null);
82
-
83
- // Start with default dateFormatInfo
84
- dateFormatInfo = dateFormatInfoDefault;
85
- // and then update, as needed, based on locale, etc.
86
- theDateFormat: any = getDateFormatInfo();
87
-
88
- constructor(
89
- private angularPConnect: AngularPConnectService,
90
- private cdRef: ChangeDetectorRef,
91
- private utils: Utils,
92
- @Inject(MAT_DATE_FORMATS) private config: MyFormat
93
- ) {}
94
-
95
- ngOnInit(): void {
96
- this.dateFormatInfo = this.theDateFormat;
97
- // First thing in initialization is registering and subscribing to the AngularPConnect service
98
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
99
- this.controlName$ = this.angularPConnect.getComponentID(this);
100
-
101
- // Then, continue on with other initialization
102
- // call updateSelf when initializing
103
- // this.updateSelf();
104
- this.checkAndUpdate();
105
-
106
- if (this.formGroup$) {
107
- // add control to formGroup
108
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
109
- this.fieldControl.setValue(this.value$);
110
- this.bHasForm$ = true;
111
- } else {
112
- this.bReadonly$ = true;
113
- this.bHasForm$ = false;
114
- }
115
- }
116
-
117
- ngOnDestroy(): void {
118
- if (this.formGroup$) {
119
- this.formGroup$.removeControl(this.controlName$);
120
- }
60
+ theDateFormat = getDateFormatInfo();
61
+ formattedValue$: any;
121
62
 
122
- if (this.angularPConnectData.unsubscribeFn) {
123
- this.angularPConnectData.unsubscribeFn();
124
- }
125
- }
126
-
127
- // Callback passed when subscribing to store change
128
- onStateChange() {
129
- this.checkAndUpdate();
130
- }
131
-
132
- checkAndUpdate() {
133
- // Should always check the bridge to see if the component should
134
- // update itself (re-render)
135
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
136
-
137
- // ONLY call updateSelf when the component should update
138
- if (bUpdateSelf) {
139
- this.updateSelf();
140
- }
141
- }
142
-
143
- // updateSelf
144
- updateSelf(): void {
145
- // starting very simple...
146
- // moved this from ngOnInit() and call this from there instead...
63
+ /**
64
+ * Updates the component when there are changes in the state.
65
+ */
66
+ override updateSelf(): void {
67
+ // Resolve config properties
147
68
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DateProps;
148
69
 
149
- if (this.configProps$.value != undefined) {
150
- let sDateValue: any = '';
151
- sDateValue = this.configProps$.value;
152
-
153
- if (sDateValue != '') {
154
- if (typeof sDateValue === 'object') {
155
- sDateValue = sDateValue.toISOString();
156
- } else if (sDateValue.indexOf('/') < 0) {
157
- // if we have the "pega" format, then for display, convert to standard format (US)
158
- // sDateValue = this.formatDate(sDateValue);
159
- sDateValue = this.utils.generateDate(sDateValue, 'Date-Long-Custom-YYYY');
160
- }
161
- this.value$ = new Date(sDateValue);
162
- }
163
- }
164
- this.testId = this.configProps$.testId;
165
- this.label$ = this.configProps$.label;
166
- this.displayMode$ = this.configProps$.displayMode;
167
- this.helperText = this.configProps$.helperText;
168
- this.placeholder = this.configProps$.placeholder || '';
169
-
170
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
171
- setTimeout(() => {
172
- if (this.configProps$.required != null) {
173
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
174
- }
175
- this.cdRef.detectChanges();
176
- });
177
-
178
- if (this.configProps$.visibility != null) {
179
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
180
- }
181
-
182
- // disabled
183
- if (this.configProps$.disabled != undefined) {
184
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
185
- }
186
-
187
- if (this.bDisabled$) {
188
- this.fieldControl.disable();
189
- } else {
190
- this.fieldControl.enable();
191
- }
192
-
193
- if (this.configProps$.readOnly != null) {
194
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
195
- }
70
+ // Update component common properties
71
+ this.updateComponentCommonProperties(this.configProps$);
196
72
 
197
- this.componentReference = (this.pConn$.getStateProps() as any).value;
73
+ // Extract and normalize the value property
74
+ const { value } = this.configProps$;
75
+ this.value$ = value;
198
76
 
199
- // trigger display of error message with field control
200
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
201
- const timer = interval(100).subscribe(() => {
202
- this.fieldControl.setErrors({ message: true });
203
- this.fieldControl.markAsTouched();
204
-
205
- timer.unsubscribe();
77
+ // Format value for display modes
78
+ if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) {
79
+ this.formattedValue$ = format(this.value$, 'date', {
80
+ format: this.theDateFormat.dateFormatString
206
81
  });
207
82
  }
208
83
  }
209
84
 
210
85
  fieldOnDateChange(event: any) {
211
86
  // this comes from the date pop up
212
- if (typeof event.value === 'object') {
213
- // convert date to pega "date" format
214
- event.value = event.value?.toISOString();
215
- }
216
- this.angularPConnectData.actions?.onChange(this, { value: event.value });
217
- }
218
-
219
- fieldOnBlur(event: any) {
220
- // PConnect wants to use eventHandler for onBlur
221
- if (typeof event.value === 'object') {
222
- // convert date to pega "date" format
223
- event.value = event.value?.toISOString();
224
- }
225
- this.angularPConnectData.actions?.onBlur(this, { value: event.value });
87
+ const value = event?.target?.value.format('YYYY-MM-DD');
88
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, value);
89
+ this.pConn$.clearErrorMessages({
90
+ property: this.propName
91
+ });
226
92
  }
227
93
 
228
94
  hasErrors() {
229
95
  return this.fieldControl.status === 'INVALID';
230
96
  }
231
97
 
232
- getErrorMessage() {
233
- let errMessage = '';
98
+ override getErrorMessage() {
234
99
  // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
235
100
  if (this.fieldControl.hasError('message')) {
236
- errMessage = this.angularPConnectData.validateMessage ?? '';
237
- return errMessage;
101
+ return this.angularPConnectData.validateMessage ?? '';
238
102
  }
103
+
239
104
  if (this.fieldControl.hasError('required')) {
240
- errMessage = 'You must enter a value';
241
- } else if (this.fieldControl.errors) {
242
- errMessage = `${this.fieldControl.errors['matDatepickerParse'].text} is not a valid date value`;
105
+ return 'You must enter a value';
243
106
  }
244
- return errMessage;
245
- }
246
107
 
247
- getFormattedValue() {
248
- return format(this.value$, 'date', {
249
- format: this.theDateFormat.dateFormatString
250
- });
108
+ if (this.fieldControl.errors) {
109
+ return `${this.fieldControl.errors['matDatepickerParse'].text} is not a valid date value`;
110
+ }
111
+
112
+ return '';
251
113
  }
252
114
  }
@@ -1,5 +1,5 @@
1
1
  <div *ngIf="displayMode$; else noDisplayMode">
2
- <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$, displayMode$ }"></component-mapper>
2
+ <component-mapper *ngIf="bVisible$ !== false" name="FieldValueList" [props]="{ label$, value$: formattedValue$, displayMode$ }"></component-mapper>
3
3
  </div>
4
4
  <ng-template #noDisplayMode>
5
5
  <div *ngIf="!bReadonly$ && bHasForm$; else noEdit">
@@ -12,13 +12,12 @@
12
12
  [attr.data-test-id]="testId"
13
13
  [placeholder]="placeholder"
14
14
  [formControl]="fieldControl"
15
- (blur)="fieldOnBlur($event)"
16
15
  (dateTimeChange)="fieldOnDateChange($event)"
17
- [value]="value$"
18
16
  [required]="bRequired$"
17
+ [readonly]="bDisabled$"
19
18
  />
20
19
  <mat-datepicker-toggle matSuffix [owlDateTimeTrigger]="dtPicker"></mat-datepicker-toggle>
21
- <owl-date-time #dtPicker></owl-date-time>
20
+ <owl-date-time #dtPicker [disabled]="bDisabled$"></owl-date-time>
22
21
  <mat-error *ngIf="fieldControl?.invalid">{{ getErrorMessage() }}</mat-error>
23
22
  </mat-form-field>
24
23
  </div>
@@ -1,15 +1,17 @@
1
- import { Component, OnInit, Input, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core';
1
+ import { Component, OnInit, forwardRef, OnDestroy } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatDatepickerModule } from '@angular/material/datepicker';
5
5
  import { MatInputModule } from '@angular/material/input';
6
6
  import { MatFormFieldModule } from '@angular/material/form-field';
7
7
  import { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';
8
- import { interval } from 'rxjs';
9
- import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
10
- import { Utils } from '@pega/angular-sdk-components';
8
+ import dayjs from 'dayjs';
9
+
10
+ import { FieldBase } from '@pega/angular-sdk-components';
11
11
  import { ComponentMapperComponent } from '@pega/angular-sdk-components';
12
- import { dateFormatInfoDefault, getDateFormatInfo } from '@pega/angular-sdk-components';
12
+ import { getDateFormatInfo } from '@pega/angular-sdk-components';
13
+ import { handleEvent } from '@pega/angular-sdk-components';
14
+ import { DateFormatters } from '@pega/angular-sdk-components';
13
15
  import { PConnFieldProps } from '@pega/angular-sdk-components';
14
16
 
15
17
  interface DateTimeProps extends PConnFieldProps {
@@ -20,7 +22,6 @@ interface DateTimeProps extends PConnFieldProps {
20
22
  selector: 'app-date-time',
21
23
  templateUrl: './date-time.component.html',
22
24
  styleUrls: ['./date-time.component.scss'],
23
- standalone: true,
24
25
  imports: [
25
26
  CommonModule,
26
27
  ReactiveFormsModule,
@@ -32,172 +33,71 @@ interface DateTimeProps extends PConnFieldProps {
32
33
  forwardRef(() => ComponentMapperComponent)
33
34
  ]
34
35
  })
35
- export class DateTimeComponent implements OnInit, OnDestroy {
36
- @Input() pConn$: typeof PConnect;
37
- @Input() formGroup$: FormGroup;
38
-
39
- // Used with AngularPConnect
40
- angularPConnectData: AngularPConnectData = {};
36
+ export class DateTimeComponent extends FieldBase implements OnInit, OnDestroy {
41
37
  configProps$: DateTimeProps;
42
38
 
43
- label$ = '';
44
- value$: any;
45
- bRequired$ = false;
46
- bReadonly$ = false;
47
- bDisabled$ = false;
48
- bVisible$ = true;
49
- displayMode$?: string = '';
50
- controlName$: string;
51
- bHasForm$ = true;
52
- componentReference = '';
53
- testId = '';
54
- helperText: string;
55
-
56
- fieldControl = new FormControl('', null);
57
39
  stepHour = 1;
58
40
  stepMinute = 1;
59
41
  stepSecond = 1;
60
42
  public color = 'primary';
61
- // Start with default dateFormatInfo
62
- dateFormatInfo = dateFormatInfoDefault;
63
- // and then update, as needed, based on locale, etc.
64
- theDateFormat: any = getDateFormatInfo();
65
- placeholder: string;
43
+ formattedValue$: any;
44
+ theDateFormat = getDateFormatInfo();
45
+ timezone = PCore.getEnvironmentInfo()?.getTimeZone();
46
+ override placeholder = `${this.theDateFormat.dateFormatStringLC}, hh:mm A`;
66
47
 
67
- constructor(
68
- private angularPConnect: AngularPConnectService,
69
- private cdRef: ChangeDetectorRef,
70
- private utils: Utils
71
- ) {}
72
-
73
- ngOnInit(): void {
74
- this.placeholder = `${this.theDateFormat.dateFormatStringLC}, hh:mm a`;
75
- // First thing in initialization is registering and subscribing to the AngularPConnect service
76
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
77
- this.controlName$ = this.angularPConnect.getComponentID(this);
78
- // Then, continue on with other initialization
79
- // call updateSelf when initializing
80
- // this.updateSelf();
81
- this.checkAndUpdate();
48
+ override ngOnInit(): void {
49
+ super.ngOnInit();
82
50
 
83
51
  if (this.formGroup$) {
84
- // add control to formGroup
85
- this.formGroup$.addControl(this.controlName$, this.fieldControl);
86
- this.fieldControl.setValue(this.value$);
87
- this.bHasForm$ = true;
88
- } else {
89
- this.bReadonly$ = true;
90
- this.bHasForm$ = false;
91
- }
92
- }
52
+ let dateTimeValue = this.value$ ?? '';
93
53
 
94
- ngOnDestroy(): void {
95
- if (this.formGroup$) {
96
- this.formGroup$.removeControl(this.controlName$);
97
- }
98
- if (this.angularPConnectData.unsubscribeFn) {
99
- this.angularPConnectData.unsubscribeFn();
100
- }
101
- }
102
-
103
- // Callback passed when subscribing to store change
104
- onStateChange() {
105
- this.checkAndUpdate();
106
- }
107
-
108
- checkAndUpdate() {
109
- // Should always check the bridge to see if the component should
110
- // update itself (re-render)
111
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
112
-
113
- // ONLY call updateSelf when the component should update
114
- if (bUpdateSelf) {
115
- this.updateSelf();
54
+ if (this.value$) {
55
+ dateTimeValue = dayjs(DateFormatters?.convertToTimezone(this.value$, { timezone: this.timezone }))?.toISOString();
56
+ }
57
+ this.fieldControl.setValue(dateTimeValue);
116
58
  }
117
59
  }
118
60
 
119
- // updateSelf
120
- updateSelf(): void {
121
- // starting very simple...
122
- // moved this from ngOnInit() and call this from there instead...
61
+ /**
62
+ * Updates the component when there are changes in the state.
63
+ */
64
+ override updateSelf(): void {
65
+ // Resolve config properties
123
66
  this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as DateTimeProps;
124
67
 
125
- this.label$ = this.configProps$.label;
126
- this.displayMode$ = this.configProps$.displayMode;
127
- this.testId = this.configProps$.testId;
128
- this.helperText = this.configProps$.helperText;
129
- this.value$ = this.configProps$?.value;
130
- this.fieldControl.setValue(this.value$);
131
- // timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
132
- setTimeout(() => {
133
- if (this.configProps$.required != null) {
134
- this.bRequired$ = this.utils.getBooleanValue(this.configProps$.required);
135
- }
136
- this.cdRef.detectChanges();
137
- });
68
+ // Update component common properties
69
+ this.updateComponentCommonProperties(this.configProps$);
138
70
 
139
- if (this.configProps$.visibility != null) {
140
- this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
141
- }
71
+ // Extract the value property
72
+ const { value } = this.configProps$;
142
73
 
143
- // disabled
144
- if (this.configProps$.disabled != undefined) {
145
- this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
74
+ // Update component properties
75
+ this.value$ = value;
76
+ let dateTimeValue = value ?? '';
77
+ if (this.value$) {
78
+ dateTimeValue = dayjs(DateFormatters?.convertToTimezone(this.value$, { timezone: this.timezone }))?.toISOString();
146
79
  }
80
+ this.fieldControl.setValue(dateTimeValue);
147
81
 
148
- if (this.bDisabled$) {
149
- this.fieldControl.disable();
150
- } else {
151
- this.fieldControl.enable();
82
+ if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) {
83
+ this.formattedValue$ = this.generateDateTime(this.value$);
152
84
  }
85
+ }
153
86
 
154
- if (this.configProps$.readOnly != null) {
155
- this.bReadonly$ = this.utils.getBooleanValue(this.configProps$.readOnly);
156
- }
157
-
158
- this.componentReference = (this.pConn$.getStateProps() as any).value;
159
-
160
- // trigger display of error message with field control
161
- if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
162
- const timer = interval(100).subscribe(() => {
163
- this.fieldControl.setErrors({ message: true });
164
- this.fieldControl.markAsTouched();
165
-
166
- timer.unsubscribe();
167
- });
168
- }
87
+ generateDateTime(sVal): string {
88
+ if (!sVal) return '';
89
+ if (sVal.length === 10) return this.utils.generateDate(sVal, 'Date-Long-Custom-YYYY');
90
+ return this.utils.generateDateTime(sVal, 'DateTime-Long-YYYY-Custom');
169
91
  }
170
92
 
171
93
  fieldOnDateChange(event: any) {
172
94
  // this comes from the date pop up
173
95
  if (typeof event.value === 'object') {
174
96
  // convert date to pega "date" format
175
- event.value = event.value?.toISOString();
176
- }
177
- this.angularPConnectData.actions?.onChange(this, { value: event.value });
178
- }
179
-
180
- fieldOnBlur(event: any) {
181
- if (typeof event.value === 'object') {
182
- // convert date to pega "date" format
183
- event.value = event.value?.toISOString();
184
- }
185
-
186
- this.angularPConnectData.actions?.onBlur(this, event);
187
- }
188
-
189
- getErrorMessage() {
190
- let errMessage = '';
191
- // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
192
- if (this.fieldControl.hasError('message')) {
193
- errMessage = this.angularPConnectData.validateMessage ?? '';
194
- return errMessage;
195
- }
196
- if (this.fieldControl.hasError('required')) {
197
- errMessage = 'You must enter a value';
198
- } else if (this.fieldControl.errors) {
199
- errMessage = this.fieldControl.errors.toString();
97
+ const dateTime = dayjs(event.value?.toISOString());
98
+ const timeZoneDateTime = (dayjs as any).tz(dateTime.format('YYYY-MM-DDTHH:mm:ss'), this.timezone);
99
+ event.value = timeZoneDateTime && timeZoneDateTime.isValid() ? timeZoneDateTime.toISOString() : '';
200
100
  }
201
- return errMessage;
101
+ handleEvent(this.actionsApi, 'changeNblur', this.propName, event.value);
202
102
  }
203
103
  }
@@ -11,9 +11,10 @@
11
11
  matInput
12
12
  currencyMask
13
13
  [options]="{
14
- prefix: bReadonly$ && formatter === 'Currency' ? currSym : '',
15
- thousands: currSep,
16
- decimal: currDec,
14
+ prefix: currencySymbol,
15
+ suffix: suffix,
16
+ thousands: thousandSeparator,
17
+ decimal: decimalSeparator,
17
18
  align: 'left',
18
19
  nullable: true,
19
20
  precision: decimalPrecision,