@uxland/primary-shell 5.3.7 → 5.3.9

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 (140) hide show
  1. package/dist/index.js +1951 -2144
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.umd.cjs +123 -87
  4. package/dist/index.umd.cjs.map +1 -1
  5. package/dist/primary/shell/src/events.d.ts +1 -0
  6. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.d.ts +3 -2
  7. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/actions.d.ts +1 -0
  8. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/bootstrapper.d.ts +4 -0
  9. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/handler.d.ts +7 -0
  10. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/request.d.ts +6 -0
  11. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/component.d.ts +10 -0
  12. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/template.d.ts +3 -0
  13. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/component.d.ts +11 -0
  14. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/template.d.ts +3 -0
  15. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/reducers.d.ts +2 -4
  16. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/selectors.d.ts +5 -0
  17. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/model.d.ts +2 -1
  18. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.d.ts +8 -0
  19. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.d.ts +5 -0
  20. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.test.d.ts +1 -0
  21. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-full-history-item.d.ts +5 -0
  22. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-full-history-item.test.d.ts +1 -0
  23. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.d.ts +4 -2
  24. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/active-filters-header.d.ts +1 -0
  25. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.d.ts +4 -1
  26. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/selectors.d.ts +42 -42
  27. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/actions.d.ts +1 -1
  28. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.d.ts +2 -2
  29. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.d.ts +3 -3
  30. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.d.ts +29 -29
  31. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/actions.d.ts +1 -0
  32. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/bootstrapper.d.ts +4 -0
  33. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/handler.d.ts +6 -0
  34. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.d.ts +4 -0
  35. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.test.d.ts +1 -0
  36. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/request.d.ts +6 -0
  37. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.d.ts +5 -0
  38. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.test.d.ts +1 -0
  39. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/selectors.d.ts +185 -0
  40. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/actions.d.ts +1 -0
  41. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/bootstrapper.d.ts +4 -0
  42. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/handler.d.ts +6 -0
  43. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/reducer.d.ts +3 -0
  44. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/request.d.ts +4 -0
  45. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/model.d.ts +18 -3
  46. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/selectors.d.ts +1 -1
  47. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/slice.d.ts +7 -3
  48. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/selectors.d.ts +86 -27
  49. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/slice.d.ts +2 -2
  50. package/dist/primary/shell/src/internal-plugins/activity-history/infrastructure/state/store.d.ts +4 -4
  51. package/dist/primary/shell/src/internal-plugins/activity-history/localization.d.ts +16 -0
  52. package/dist/primary/shell/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.d.ts +1 -1
  53. package/package.json +1 -2
  54. package/src/UI/components/primaria-shell/shell-header/styles.css +1 -0
  55. package/src/UI/images/feedback-error.svg +9 -0
  56. package/src/UI/internal-views/upper-nav-views.ts +82 -17
  57. package/src/UI/shared-components/primaria-character-limit-badge/primaria-character-limit-badge.ts +5 -7
  58. package/src/UI/shared-components/primaria-character-limit-badge/styles.css +1 -1
  59. package/src/api/interaction-service/modal-styles.css +1 -1
  60. package/src/events.ts +1 -0
  61. package/src/features/clinical-monitoring/component/template.ts +5 -5
  62. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/handler.ts +4 -3
  63. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.ts +3 -2
  64. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-item/handler.ts +4 -2
  65. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/handler.ts +4 -2
  66. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/bootstrapper.ts +18 -0
  67. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/handler.ts +26 -0
  68. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/request.ts +5 -0
  69. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/component.ts +32 -0
  70. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/styles.css +11 -0
  71. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/template.ts +23 -0
  72. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/component.ts +42 -0
  73. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/styles.css +11 -0
  74. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/template.ts +19 -0
  75. package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/reducers.ts +3 -2
  76. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/selectors.ts +19 -0
  77. package/src/internal-plugins/activity-history/activity-history-item/bootstrapper.ts +4 -1
  78. package/src/internal-plugins/activity-history/activity-history-item/domain/business-rules.ts +1 -1
  79. package/src/internal-plugins/activity-history/activity-history-item/domain/model.ts +2 -1
  80. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.test.ts +59 -0
  81. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.ts +18 -0
  82. package/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.test.ts +63 -0
  83. package/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.ts +43 -0
  84. package/src/internal-plugins/activity-history/activity-history-item/domain/{is-valid-history-item/is-valid-history-item.test.ts → validation/is-valid-full-history-item.test.ts} +11 -11
  85. package/src/internal-plugins/activity-history/activity-history-item/domain/{is-valid-history-item/is-valid-history-item.ts → validation/is-valid-full-history-item.ts} +7 -8
  86. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.ts +19 -2
  87. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/template.ts +49 -1
  88. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/active-filters-header.ts +4 -0
  89. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/template.ts +1 -0
  90. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.ts +21 -1
  91. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/template.ts +11 -2
  92. package/src/internal-plugins/activity-history/activity-history-item/filter/bootstrapper.ts +12 -0
  93. package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/common-filters.ts +8 -3
  94. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.ts +2 -2
  95. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.ts +2 -2
  96. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.ts +4 -5
  97. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/actions.ts +3 -0
  98. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/bootstrapper.ts +14 -0
  99. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/handler.ts +14 -0
  100. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.test.ts +93 -0
  101. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.ts +25 -0
  102. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/request.ts +5 -0
  103. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.test.ts +80 -0
  104. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.ts +31 -0
  105. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/selectors.ts +22 -0
  106. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/actions.ts +3 -0
  107. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/bootstrapper.ts +14 -0
  108. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/handler.ts +13 -0
  109. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/reducer.ts +11 -0
  110. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/request.ts +3 -0
  111. package/src/internal-plugins/activity-history/activity-history-item/filter/model.ts +21 -4
  112. package/src/internal-plugins/activity-history/activity-history-item/filter/slice.ts +6 -2
  113. package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/activity-history-timeline.ts +1 -4
  114. package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/template.ts +5 -2
  115. package/src/internal-plugins/activity-history/activity-history-item/list/bootstrapper.ts +4 -1
  116. package/src/internal-plugins/activity-history/activity-history-item/list/group-history-items/group-history-items.test.ts +71 -215
  117. package/src/internal-plugins/activity-history/activity-history-item/list/group-history-items/group-history-items.ts +24 -1
  118. package/src/internal-plugins/activity-history/activity-history-item/selectors.ts +6 -0
  119. package/src/internal-plugins/activity-history/activity-history-item/slice.ts +2 -8
  120. package/src/internal-plugins/activity-history/activity-history-item/update/handler.ts +2 -2
  121. package/src/internal-plugins/activity-history/localization.ts +16 -0
  122. package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.test.ts +55 -30
  123. package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.ts +30 -10
  124. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/is-valid-history-item/is-valid-history-item.d.ts +0 -5
  125. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/handle-error/actions.d.ts +0 -4
  126. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/actions.d.ts +0 -0
  127. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/bootstrapper.d.ts +0 -0
  128. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/component.d.ts +0 -0
  129. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/template.d.ts +0 -0
  130. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/reducers.d.ts +0 -0
  131. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/selectors.d.ts +0 -0
  132. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/{is-valid-history-item/is-valid-history-item.test.d.ts → specs/diagnostics-filter-spec.test.d.ts} +0 -0
  133. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/actions.ts +0 -0
  134. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/bootstrapper.ts +0 -0
  135. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/component.ts +0 -0
  136. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/styles.css +0 -0
  137. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/template.ts +0 -0
  138. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/reducers.ts +0 -0
  139. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/selectors.ts +0 -0
  140. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/actions.ts +0 -0
@@ -51,13 +51,13 @@ const upperNavMenuItems: MenuItemConfig[] = [
51
51
  },
52
52
  {
53
53
  icon: "open_in_new",
54
- label: "Procés Obstètric",
55
- callbackFn: () => {},
54
+ label: "Nen sa",
55
+ callbackFn: () => navigateToEcapWithoutClosingWithCip("NEN_SA"),
56
56
  },
57
57
  {
58
58
  icon: "open_in_new",
59
- label: "Nen sa",
60
- callbackFn: () => navigateToEcapWithoutClosingWithCip("NEN_SA"),
59
+ label: "ASSIR",
60
+ callbackFn: () => {},
61
61
  },
62
62
  {
63
63
  icon: "open_in_new",
@@ -69,6 +69,11 @@ const upperNavMenuItems: MenuItemConfig[] = [
69
69
  label: "Situació d'especial cura",
70
70
  callbackFn: () => navigateToEcapWithoutClosingWithCip("SIT_ESPEC_CURA_DEV"),
71
71
  },
72
+ {
73
+ icon: "open_in_new",
74
+ label: "Valoració social",
75
+ callbackFn: () => {},
76
+ },
72
77
  ],
73
78
  },
74
79
  {
@@ -100,6 +105,14 @@ const upperNavMenuItems: MenuItemConfig[] = [
100
105
  },
101
106
  ],
102
107
  },
108
+ {
109
+ id: "analytics-monitoring", // id correcta?
110
+ icon: "science",
111
+ label: "Seguiment analític",
112
+ type: "item",
113
+ sortHint: "0060",
114
+ callbackFn: () => {},
115
+ },
103
116
  {
104
117
  id: "results-reports",
105
118
  icon: "folder_shared",
@@ -109,7 +122,7 @@ const upperNavMenuItems: MenuItemConfig[] = [
109
122
  actionMenuItems: [
110
123
  {
111
124
  icon: "open_in_new",
112
- label: "Resultats i informes ECAP",
125
+ label: "Resultats i informes",
113
126
  callbackFn: () => {},
114
127
  },
115
128
  {
@@ -120,8 +133,66 @@ const upperNavMenuItems: MenuItemConfig[] = [
120
133
  navigateToEcapWithoutClosingWithCip("CRIDA_DOCS_USU");
121
134
  }, 0),
122
135
  },
136
+ {
137
+ icon: "open_in_new",
138
+ label: "Informes clínics",
139
+ callbackFn: () => {},
140
+ },
141
+ ],
142
+ },
143
+ {
144
+ id: "test-cabinets",
145
+ icon: "list_alt",
146
+ label: "Gabinets de proves",
147
+ type: "item",
148
+ sortHint: "0080",
149
+ callbackFn: () => {},
150
+ },
151
+ {
152
+ id: "prescriptions",
153
+ icon: "pill",
154
+ label: "Prescripció",
155
+ type: "tree",
156
+ sortHint: "0090",
157
+ actionMenuItems: [
158
+ {
159
+ icon: "open_in_new",
160
+ label: "Prescripció",
161
+ callbackFn: () => {},
162
+ },
163
+ {
164
+ icon: "open_in_new",
165
+ label: "Ordres de tractament",
166
+ callbackFn: () => {},
167
+ },
168
+ {
169
+ icon: "open_in_new",
170
+ label: "Dispensació material sanitari",
171
+ callbackFn: () => {},
172
+ },
173
+ {
174
+ icon: "open_in_new",
175
+ label: "Prescripció social",
176
+ callbackFn: () => {},
177
+ },
123
178
  ],
124
179
  },
180
+ {
181
+ id: "vaccines",
182
+ icon: "vaccines",
183
+ label: "Immunitzacions",
184
+ type: "item",
185
+ sortHint: "0100",
186
+ callbackFn: () => {},
187
+ },
188
+ {
189
+ id: "it",
190
+ icon: "history_toggle_off",
191
+ label: "Incapacitat temporal",
192
+ type: "item",
193
+ sortHint: "0100",
194
+ callbackFn: () => navigateToEcapWithoutClosingWithCip("REV_IT"),
195
+ },
125
196
  {
126
197
  id: "communication",
127
198
  icon: "3p",
@@ -140,7 +211,7 @@ const upperNavMenuItems: MenuItemConfig[] = [
140
211
  });
141
212
  },
142
213
  },
143
- { icon: "open_in_new", label: "Econsulta", callbackFn: () => {} },
214
+ { icon: "open_in_new", label: "eConsulta", callbackFn: () => {} },
144
215
  { icon: "open_in_new", label: "Mail", callbackFn: () => {} },
145
216
  {
146
217
  icon: "open_in_new",
@@ -159,18 +230,12 @@ const upperNavMenuItems: MenuItemConfig[] = [
159
230
  callbackFn: () => navigateToEcapWithoutClosingWithCip("CONSULTA_VISITES"),
160
231
  },
161
232
  {
162
- id: "it",
163
- icon: "add_box",
164
- label: "IT",
165
- type: "item",
166
- callbackFn: () => navigateToEcapWithoutClosingWithCip("REV_IT"),
167
- },
168
- {
169
- id: "variable activities",
170
- icon: "add_box",
171
- label: "Activitats variables",
233
+ id: "visor",
234
+ icon: "window",
235
+ label: "Visor",
172
236
  type: "item",
173
- callbackFn: () => navigateToEcapWithoutClosingWithCip("SIA_DEV"),
237
+ sortHint: "0140",
238
+ callbackFn: () => {},
174
239
  },
175
240
  ];
176
241
 
@@ -14,14 +14,12 @@ export class PrimariaCharacterLimitBadge extends LitElement {
14
14
  render() {
15
15
  if (this.characterCount > this.characterLimit) {
16
16
  return html`
17
- <dss-badge
18
- class="limit-badge"
19
- icon="report"
17
+ <dss-alert
18
+ class="limit-alert"
19
+ state="warning"
20
20
  size="md"
21
- state="alert"
22
- text="${this.label} ${this.characterCount}/${this.characterLimit}"
23
- outlined
24
- ></dss-badge>
21
+ message="${this.label} ${this.characterCount}/${this.characterLimit}"
22
+ ></dss-alert>
25
23
  `;
26
24
  }
27
25
  return nothing;
@@ -2,7 +2,7 @@
2
2
  margin: 0 auto;
3
3
  }
4
4
 
5
- .limit-badge {
5
+ .limit-alert {
6
6
  padding-top: 8px;
7
7
  padding-bottom: 8px;
8
8
  }
@@ -1,5 +1,5 @@
1
1
  .modal {
2
- font-family: "Open Sans";
2
+ font-family: "Open Sans", sans-serif;
3
3
  display: block;
4
4
  position: fixed;
5
5
  z-index: 400;
package/src/events.ts CHANGED
@@ -5,4 +5,5 @@ export const shellEvents = {
5
5
  refreshTokenFailed: "refreshTokenFailed",
6
6
  mpidHeaderInvalid: "mpidHeaderInvalid",
7
7
  quickActionBusyChanged: "quickActionBusyChanged",
8
+ refresh_history_data_requested: "refresh_history_data_requested",
8
9
  };
@@ -3,10 +3,10 @@ import { ClinicalMonitoring } from "./clinical-monitoring";
3
3
 
4
4
  export const template = (props: ClinicalMonitoring) => html`
5
5
  <div class="wrapper">
6
- <div class="content">
7
- <div id="header-widgets-region"></div>
8
- <div id="content-widgets-region"></div>
9
- </div>
10
- <div id="widgets-sidebar-region"></div>
6
+ <div class="content">
7
+ <div id="header-widgets-region"></div>
8
+ <div id="content-widgets-region"></div>
9
+ </div>
10
+ <div id="widgets-sidebar-region"></div>
11
11
  </div>
12
12
  `;
@@ -1,8 +1,8 @@
1
1
  import { BaseHandler } from "../../../infrastructure/base-handlers";
2
2
  import { AddCustomFiltersCommand } from "../../filter/custom-filters/add-custom-filters/request";
3
- import { addBusyHistoryItem, removeBusyHistoryItem } from "../../list/handle-busy/actions";
4
- import { addErrorHistoryItem } from "../../list/handle-error/actions";
5
3
  import { addHistoryItemsCommand } from "../add-history-items/request";
4
+ import { addBusyHistoryItem, removeBusyHistoryItem } from "../handle-busy/actions";
5
+ import { addErrorHistoryItem } from "../handle-error/actions";
6
6
  import { InjectAsyncHistoryItemsPayload } from "./request";
7
7
  import { validateAddAsyncCommand } from "./validate-add-async-items-command";
8
8
 
@@ -14,6 +14,7 @@ export class InjectAsyncHistoryItemsHandler extends BaseHandler {
14
14
  validateAddAsyncCommand(payload, items);
15
15
  this.api.broker.send(addHistoryItemsCommand, {
16
16
  entityId: payload.entityId,
17
+ entityDescription: payload.entityDescription,
17
18
  items,
18
19
  componentFactory: payload.componentFactory,
19
20
  searchPredicate: payload.searchPredicate,
@@ -21,7 +22,7 @@ export class InjectAsyncHistoryItemsHandler extends BaseHandler {
21
22
  payload.filters ? this.api.broker.send(new AddCustomFiltersCommand(payload.filters)) : null;
22
23
  } catch (e) {
23
24
  this.store.dispatch(
24
- addErrorHistoryItem({ id: payload.entityId, message: payload.errorMessage || e.message }),
25
+ addErrorHistoryItem({ entityId: payload.entityId, message: payload.errorMessage || e.message, entityDescription: payload.entityDescription }),
25
26
  );
26
27
  } finally {
27
28
  this.store.dispatch(removeBusyHistoryItem(payload.entityId));
@@ -1,13 +1,14 @@
1
1
  import { IActivityHistoryItem } from "../../domain/model";
2
- import { IActivityHistoryCommonFilterGroup } from "../../filter";
2
+ import { IActivityHistoryCustomFilter } from "../../filter";
3
3
 
4
4
  export interface InjectAsyncHistoryItemsPayload {
5
5
  entityId: string;
6
+ entityDescription: string;
6
7
  asyncDataProvider: () => Promise<IActivityHistoryItem[]>;
7
8
  componentFactory: (item: IActivityHistoryItem) => HTMLElement;
8
9
  searchPredicate?: (searchString: string, item: IActivityHistoryItem) => boolean;
9
10
  errorMessage: string;
10
- filters: IActivityHistoryCommonFilterGroup;
11
+ filters: IActivityHistoryCustomFilter;
11
12
  }
12
13
 
13
14
  export const addAsyncHistoryItemsCommand = "inject_async_history_items_request";
@@ -1,18 +1,20 @@
1
1
  import { StoreBaseHandler } from "../../../infrastructure/base-handlers";
2
- import { ensureAreValidActivityHistoryItems } from "../../domain/is-valid-history-item/is-valid-history-item";
2
+ import { ensureAreValidBasicActivityHistoryItems } from "../../domain/validation/is-valid-basic-history-item";
3
+ import { handleAddDiagnosticsFilter } from "../../filter/diagnostic-filters/handle-add-diagnostics-options-from-item";
3
4
  import { addActivityHistoryItem } from "./action";
4
5
  import { AddHistoryItemPayload } from "./request";
5
6
 
6
7
  export class AddHistoryItemHandler extends StoreBaseHandler {
7
8
  async handle(payload: AddHistoryItemPayload) {
8
9
  try {
9
- ensureAreValidActivityHistoryItems([payload.item]);
10
+ ensureAreValidBasicActivityHistoryItems([payload.item]);
10
11
  this.store.dispatch(
11
12
  addActivityHistoryItem({
12
13
  id: payload.entityId,
13
14
  item: payload.item,
14
15
  }),
15
16
  );
17
+ handleAddDiagnosticsFilter([payload.item], this.store);
16
18
  } catch (e) {
17
19
  console.log(e.message);
18
20
  }
@@ -1,12 +1,13 @@
1
1
  import { StoreBaseHandler } from "../../../infrastructure/base-handlers";
2
- import { validateAndFilterItems } from "../../domain/is-valid-history-item/is-valid-history-item";
2
+ import { validateAndFilterBasicItems } from "../../domain/validation/is-valid-basic-history-item";
3
+ import { handleAddDiagnosticsFilter } from "../../filter/diagnostic-filters/handle-add-diagnostics-options-from-item";
3
4
  import { addActivityHistoryItems } from "./action";
4
5
  import { AddHistoryItemsPayload } from "./request";
5
6
 
6
7
  export class AddHistoryItemsHandler extends StoreBaseHandler {
7
8
  async handle(payload: AddHistoryItemsPayload) {
8
9
  try {
9
- const validItems = validateAndFilterItems(payload.items);
10
+ const validItems = validateAndFilterBasicItems(payload.items);
10
11
  this.store.dispatch(
11
12
  addActivityHistoryItems({
12
13
  id: payload.entityId,
@@ -15,6 +16,7 @@ export class AddHistoryItemsHandler extends StoreBaseHandler {
15
16
  searchPredicate: payload.searchPredicate,
16
17
  }),
17
18
  );
19
+ handleAddDiagnosticsFilter(validItems, this.store);
18
20
  } catch (e) {
19
21
  console.log(e.message);
20
22
  }
@@ -0,0 +1,18 @@
1
+ import { PrimariaApi } from "../../../../../../api/api";
2
+ import { registerRequest } from "../../../../../../features/utils";
3
+ import { BrokerDisposableHandler } from "../../../../../../api/broker/primaria-broker";
4
+ import { HandleHistoryItemsAddError } from "./request";
5
+ import { HandleHistoryItemsAddErrorHandler } from "./handler";
6
+ import { container } from "../../../../infrastructure/ioc/container";
7
+
8
+
9
+ let request: BrokerDisposableHandler;
10
+
11
+ export const bootstrapHandleHistoryItemsAddError = (api: PrimariaApi) => {
12
+ teardownHandleHistoryItemsAddError();
13
+ request = registerRequest(api, container)(HandleHistoryItemsAddError, HandleHistoryItemsAddErrorHandler);
14
+ };
15
+
16
+ export const teardownHandleHistoryItemsAddError = () => {
17
+ request?.dispose();
18
+ };
@@ -0,0 +1,26 @@
1
+ import { BaseHandler } from "../../../../infrastructure/base-handlers";
2
+ import { HandleHistoryItemsAddError } from "./request";
3
+ import { shellEvents } from "../../../../../../events";
4
+ import { removeErrorHistoryItem } from "../actions";
5
+ import { translate } from "../../../../localization";
6
+
7
+ export class HandleHistoryItemsAddErrorHandler extends BaseHandler {
8
+ async handle(payload: HandleHistoryItemsAddError) {
9
+ try {
10
+ const entityIdsWithError = payload.entities.map(error => error.entityId);
11
+
12
+ await this.dispatchRemoveErrorItems(entityIdsWithError);
13
+
14
+ this.api.broker.publish(shellEvents.refresh_history_data_requested, entityIdsWithError);
15
+
16
+ } catch (e) {
17
+ this.api.notificationService.error(translate("error.errorToRefresh"));
18
+ }
19
+ }
20
+
21
+ private async dispatchRemoveErrorItems(entityIds: string[]) {
22
+ for (const entityId of entityIds) {
23
+ this.store.dispatch(removeErrorHistoryItem(entityId));
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,5 @@
1
+ import { IErrorHistoryItem } from "../../../domain/model";
2
+
3
+ export class HandleHistoryItemsAddError {
4
+ constructor(public entities: Array<IErrorHistoryItem>) {}
5
+ }
@@ -0,0 +1,32 @@
1
+ import { LitElement, css, html, unsafeCSS } from "lit";
2
+ import { customElement } from "lit/decorators.js";
3
+ import styles from "./styles.css?inline";
4
+ import { template } from "./template";
5
+ import { connectedProperty } from "../../../../infrastructure/state/connected-property";
6
+ import { isAllDataFailedToLoad, selectErrorMessages } from "../selectors";
7
+ import { shellApi } from "../../../../../../api/api";
8
+ import { shellEvents } from "../../../../../../events";
9
+ import { IErrorHistoryItem } from "../../../domain/model";
10
+ import { HandleHistoryItemsAddError } from "../handle-history-items-add-error/request";
11
+
12
+ //@ts-ignore
13
+ @customElement("activity-history-full-data-error")
14
+ export class ActivityHistoryFullDataError extends LitElement {
15
+ render() {
16
+ return html`${template(this)}`;
17
+ }
18
+
19
+ static styles = css`
20
+ ${unsafeCSS(styles)}
21
+ `;
22
+
23
+ @connectedProperty(isAllDataFailedToLoad)
24
+ isAllDataFailedToLoad: boolean;
25
+
26
+ @connectedProperty(selectErrorMessages)
27
+ errorMessages: Array<IErrorHistoryItem> = [];
28
+
29
+ handleClickFeedback() {
30
+ shellApi.broker.send(new HandleHistoryItemsAddError(this.errorMessages));
31
+ }
32
+ }
@@ -0,0 +1,11 @@
1
+ :host {
2
+ width: 100%;
3
+ }
4
+
5
+ .container {
6
+ display: flex;
7
+ align-items: center;
8
+ flex-direction: column;
9
+ height: 100%;
10
+ justify-content: center;
11
+ }
@@ -0,0 +1,23 @@
1
+ import { html, nothing } from "lit";
2
+ import { ActivityHistoryFullDataError } from "./component";
3
+ import { translate } from "../../../../localization";
4
+ import showError from "../../../../../../UI/images/feedback-error.svg";
5
+
6
+ export const template = (props: ActivityHistoryFullDataError) => {
7
+ return html`
8
+ ${props.isAllDataFailedToLoad ? renderErrorFeedback(props) : nothing}
9
+ `;
10
+ };
11
+
12
+ const renderErrorFeedback = (props: ActivityHistoryFullDataError) => {
13
+ return html`
14
+ <div class="container">
15
+ <dss-user-feedback imagealt=${translate("error.imageAlt")} variant="default" size="lg" imagesrc=${showError} title=${translate("error.title")} description=${translate("error.general.title")} hasdetails="" detailslabel=${translate("error.viewDetails")}>
16
+ <div slot="details">
17
+ ${props.errorMessages.length > 0 ? html`<div>${props.errorMessages.map(error => html`<div>${error.message}</div>`)}</div>` : translate("error.general.noInfo")}
18
+ </div>
19
+ <dss-button @onClick=${props.handleClickFeedback} label=${translate("error.general.refresh")} size="lg"></dss-button>
20
+ </dss-user-feedback>
21
+ </div>
22
+ `;
23
+ };
@@ -0,0 +1,42 @@
1
+ import { LitElement, css, html, unsafeCSS } from "lit";
2
+ import { customElement } from "lit/decorators.js";
3
+ import styles from "./styles.css?inline";
4
+ import { template } from "./template";
5
+ import { connectedProperty } from "../../../../infrastructure/state/connected-property";
6
+ import { isErrorOccurred, selectErrorMessages } from "../selectors";
7
+ import { shellApi } from "../../../../../../api/api";
8
+ import { translate } from "../../../../localization";
9
+ import { IErrorHistoryItem } from "../../../domain/model";
10
+ import { HandleHistoryItemsAddError } from "../handle-history-items-add-error/request";
11
+
12
+ //@ts-ignore
13
+ @customElement("activity-history-partial-data-error")
14
+ export class ActivityHistoryPartialDataError extends LitElement {
15
+ render() {
16
+ return html`${template(this)}`;
17
+ }
18
+
19
+ static styles = css`
20
+ ${unsafeCSS(styles)}
21
+ `;
22
+
23
+ @connectedProperty(isErrorOccurred)
24
+ isErrorOccurred: boolean;
25
+
26
+ @connectedProperty(selectErrorMessages)
27
+ errorMessages: Array<IErrorHistoryItem> = [];
28
+
29
+ handleClickAlert() {
30
+ shellApi.broker.send(new HandleHistoryItemsAddError(this.errorMessages));
31
+ }
32
+
33
+ getCombinedMessage() {
34
+ const titleMessage = translate("error.partial.title");
35
+
36
+ const errorMessages = this.errorMessages.length > 0 ? this.errorMessages.map(error => error.entityDescription) : [];
37
+
38
+ return errorMessages.length > 0
39
+ ? `${titleMessage} ${errorMessages[0]}${errorMessages.length > 1 ? ` i ${errorMessages.slice(1).join(' i ')}` : ''}`
40
+ : titleMessage;
41
+ }
42
+ }
@@ -0,0 +1,11 @@
1
+ :host {
2
+ width: 100%;
3
+ }
4
+
5
+ .container {
6
+ display: flex;
7
+ align-items: center;
8
+ flex-direction: column;
9
+ padding-top: 16px;
10
+ padding-inline: 16px;
11
+ }
@@ -0,0 +1,19 @@
1
+ import { html, nothing } from "lit";
2
+ import { translate } from "../../../../localization";
3
+ import { ActivityHistoryPartialDataError } from "./component";
4
+
5
+ export const template = (props: ActivityHistoryPartialDataError) => {
6
+ const combinedMessage = props.getCombinedMessage();
7
+
8
+ return html`
9
+ ${props.isErrorOccurred ? renderPartialErrorAlert(props, combinedMessage) : nothing}
10
+ `;
11
+ };
12
+
13
+ const renderPartialErrorAlert = (props: ActivityHistoryPartialDataError, combinedMessage: string) => {
14
+ return html`
15
+ <div class="container">
16
+ <dss-alert @onButtonClick=${props.handleClickAlert} state="warning" size="lg" message="${combinedMessage}" buttonLabel=${translate("error.partial.refresh")} hasbutton></dss-alert>
17
+ </div>
18
+ `;
19
+ };
@@ -1,11 +1,12 @@
1
1
  import { PayloadAction } from "@reduxjs/toolkit";
2
+ import { IErrorHistoryItem } from "../../domain/model";
2
3
 
3
4
  export function addErrorHistoryItemReducer(
4
5
  state,
5
- action: PayloadAction<{ id: string; message: string }>,
6
+ action: PayloadAction<IErrorHistoryItem>,
6
7
  ) {
7
8
  state.error.push(action.payload);
8
9
  }
9
10
  export function removeErrorHistoryItemReducer(state, action: PayloadAction<string>) {
10
- state.error = state.error.filter((i) => i !== action.payload);
11
+ state.error = state.error.filter((item) => item.entityId !== action.payload);
11
12
  }
@@ -0,0 +1,19 @@
1
+ import { RootState } from "../../../infrastructure/state/store";
2
+ import { isAnyCollectionLoadingWithoutAnyLoaded, isSomeCollectionLoadedAndOtherLoading } from "../handle-busy/selectors";
3
+
4
+ export const isErrorOccurred = (state: RootState) => state.activityHistoryCollections.error.length > 0;
5
+
6
+ const areCollectionsEmpty = (state: RootState) => {
7
+ const collections = state.activityHistoryCollections.collections;
8
+
9
+ return Object.values(collections).every(collection => {
10
+ return !collection.items || collection.items.length === 0;
11
+ });
12
+ };
13
+ export const isAllDataFailedToLoad = (state: RootState) => {
14
+ return !isAnyCollectionLoadingWithoutAnyLoaded(state) &&
15
+ !isSomeCollectionLoadedAndOtherLoading(state) &&
16
+ isErrorOccurred(state) && areCollectionsEmpty(state);
17
+ };
18
+
19
+ export const selectErrorMessages = (state: RootState) => state.activityHistoryCollections.error;
@@ -18,7 +18,8 @@ import { bootstrapUpdateHistoryItem, teardownUpdateHistoryItem } from "./update/
18
18
  import { bootstrapListActivityHistoryItems } from "./list/bootstrapper";
19
19
  import { bootstrapFilters, teardownFilters } from "./filter/bootstrapper";
20
20
  import { bootstrapSearchItems, teardownSearchItems } from "./search/bootstrapper";
21
- import { bootstrapActivityHistoryItemHandleBusy } from "./list/handle-busy/bootstrapper";
21
+ import { bootstrapHandleHistoryItemsAddError, teardownHandleHistoryItemsAddError } from "./add/handle-error/handle-history-items-add-error/bootstrapper";
22
+ import { bootstrapActivityHistoryItemHandleBusy } from "./add/handle-busy/bootstrapper";
22
23
 
23
24
  let broker: BrokerExtensions;
24
25
 
@@ -29,6 +30,7 @@ export const bootstrapActivityHistoryItem = (api: PrimariaApi) => {
29
30
  bootstrapInjectAsyncHistoryItems(broker);
30
31
  bootstrapAddHistoryItem(broker);
31
32
  bootstrapAddHistoryItems(broker);
33
+ bootstrapHandleHistoryItemsAddError(api);
32
34
  bootstrapUpdateHistoryItem(broker);
33
35
  bootstrapExportPdf(broker);
34
36
  bootstrapFilters(broker);
@@ -39,6 +41,7 @@ export const teardownActivityHistoryItem = () => {
39
41
  teardownInjectAsyncHistoryItems();
40
42
  teardownAddHistoryItem();
41
43
  teardownAddHistoryItems();
44
+ teardownHandleHistoryItemsAddError();
42
45
  teardownUpdateHistoryItem();
43
46
  teardownExportPdf();
44
47
  teardownFilters();
@@ -20,5 +20,5 @@ export const hasItemDivider = (
20
20
  return true;
21
21
  }
22
22
 
23
- return !item.diagnostics.length;
23
+ return !item.diagnostics?.length;
24
24
  };
@@ -5,8 +5,9 @@ export interface IBusyHistoryItem {
5
5
  }
6
6
 
7
7
  export interface IErrorHistoryItem {
8
- id: string;
8
+ entityId: string;
9
9
  message: string;
10
+ entityDescription: string;
10
11
  }
11
12
 
12
13
  export type TSearchActivityHistoryItemPredicate = (
@@ -0,0 +1,59 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { DiagnosticCodeSpec } from "./diagnostics-filter-spec";
3
+ import { IActivityHistoryItem } from "../model";
4
+
5
+ describe("DiagnosticCodeSpec", () => {
6
+ it("should return true if allowedCodes is empty", () => {
7
+ const spec = new DiagnosticCodeSpec([]);
8
+ const item: IActivityHistoryItem = {
9
+ diagnostics: [{ codi: "E11", descripcio: "Diabetes" }],
10
+ };
11
+ expect(spec.isSatisfiedBy(item)).toBe(true);
12
+ });
13
+
14
+ it("should return true if item has at least one matching diagnostic code", () => {
15
+ const spec = new DiagnosticCodeSpec(["I10", "E11"]);
16
+ const item: IActivityHistoryItem = {
17
+ diagnostics: [
18
+ { codi: "Z99", descripcio: "No relevante" },
19
+ { codi: "E11", descripcio: "Diabetes" },
20
+ ],
21
+ };
22
+ expect(spec.isSatisfiedBy(item)).toBe(true);
23
+ });
24
+
25
+ it("should return false if item has diagnostics but none match", () => {
26
+ const spec = new DiagnosticCodeSpec(["J00", "K52"]);
27
+ const item: IActivityHistoryItem = {
28
+ diagnostics: [
29
+ { codi: "E11", descripcio: "Diabetes" },
30
+ { codi: "I10", descripcio: "Hipertensió" },
31
+ ],
32
+ };
33
+ expect(spec.isSatisfiedBy(item)).toBe(false);
34
+ });
35
+
36
+ it("should return false if item has no diagnostics", () => {
37
+ const spec = new DiagnosticCodeSpec(["E11"]);
38
+ const item: IActivityHistoryItem = {
39
+ diagnostics: undefined,
40
+ };
41
+ expect(spec.isSatisfiedBy(item)).toBe(false);
42
+ });
43
+
44
+ it("should return false if item.diagnostics is an empty array", () => {
45
+ const spec = new DiagnosticCodeSpec(["E11"]);
46
+ const item: IActivityHistoryItem = {
47
+ diagnostics: [],
48
+ };
49
+ expect(spec.isSatisfiedBy(item)).toBe(false);
50
+ });
51
+
52
+ it("should be case-sensitive by default (E11 !== e11)", () => {
53
+ const spec = new DiagnosticCodeSpec(["e11"]);
54
+ const item: IActivityHistoryItem = {
55
+ diagnostics: [{ codi: "E11", descripcio: "Diabetes" }],
56
+ };
57
+ expect(spec.isSatisfiedBy(item)).toBe(false);
58
+ });
59
+ });