@uxland/primary-shell 5.3.6 → 5.3.8

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 (128) hide show
  1. package/dist/index.js +3306 -3479
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.umd.cjs +143 -94
  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/specs/diagnostics-filter-spec.test.d.ts +1 -0
  20. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.d.ts +4 -2
  21. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/active-filters-header.d.ts +1 -0
  22. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.d.ts +4 -1
  23. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/selectors.d.ts +42 -42
  24. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/actions.d.ts +1 -1
  25. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.d.ts +2 -2
  26. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.d.ts +3 -3
  27. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.d.ts +29 -29
  28. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/actions.d.ts +1 -0
  29. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/bootstrapper.d.ts +4 -0
  30. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/handler.d.ts +6 -0
  31. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.d.ts +4 -0
  32. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.test.d.ts +1 -0
  33. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/request.d.ts +6 -0
  34. 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
  35. 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
  36. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/selectors.d.ts +185 -0
  37. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/actions.d.ts +1 -0
  38. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/bootstrapper.d.ts +4 -0
  39. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/handler.d.ts +6 -0
  40. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/reducer.d.ts +3 -0
  41. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/request.d.ts +4 -0
  42. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/model.d.ts +18 -3
  43. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/selectors.d.ts +1 -1
  44. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/slice.d.ts +7 -3
  45. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.d.ts +12 -0
  46. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.test.d.ts +1 -0
  47. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/selectors.d.ts +86 -27
  48. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/slice.d.ts +2 -2
  49. package/dist/primary/shell/src/internal-plugins/activity-history/infrastructure/state/store.d.ts +4 -4
  50. package/dist/primary/shell/src/internal-plugins/activity-history/localization.d.ts +16 -0
  51. package/package.json +1 -2
  52. package/src/UI/images/feedback-error.svg +9 -0
  53. package/src/UI/internal-views/upper-nav-views.ts +90 -17
  54. package/src/UI/shared-components/primaria-character-limit-badge/primaria-character-limit-badge.ts +5 -7
  55. package/src/UI/shared-components/primaria-character-limit-badge/styles.css +1 -1
  56. package/src/api/interaction-service/modal-styles.css +1 -1
  57. package/src/events.ts +1 -0
  58. package/src/features/clinical-monitoring/component/template.ts +5 -5
  59. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/handler.ts +4 -3
  60. package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.ts +3 -2
  61. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-item/handler.ts +2 -0
  62. package/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/handler.ts +2 -0
  63. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/bootstrapper.ts +18 -0
  64. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/handler.ts +26 -0
  65. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/request.ts +5 -0
  66. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/component.ts +32 -0
  67. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/styles.css +11 -0
  68. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/template.ts +23 -0
  69. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/component.ts +42 -0
  70. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/styles.css +11 -0
  71. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/template.ts +19 -0
  72. package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/reducers.ts +3 -2
  73. package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/selectors.ts +19 -0
  74. package/src/internal-plugins/activity-history/activity-history-item/bootstrapper.ts +4 -1
  75. package/src/internal-plugins/activity-history/activity-history-item/domain/model.ts +2 -1
  76. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.test.ts +59 -0
  77. package/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.ts +18 -0
  78. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.ts +19 -2
  79. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/template.ts +49 -1
  80. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/active-filters-header.ts +4 -0
  81. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/template.ts +1 -0
  82. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.ts +21 -1
  83. package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/template.ts +11 -2
  84. package/src/internal-plugins/activity-history/activity-history-item/filter/bootstrapper.ts +12 -0
  85. package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/common-filters.ts +8 -3
  86. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.ts +2 -2
  87. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.ts +2 -2
  88. package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.ts +4 -5
  89. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/actions.ts +3 -0
  90. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/bootstrapper.ts +14 -0
  91. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/handler.ts +14 -0
  92. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.test.ts +93 -0
  93. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.ts +25 -0
  94. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/request.ts +5 -0
  95. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.test.ts +80 -0
  96. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.ts +30 -0
  97. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/selectors.ts +22 -0
  98. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/actions.ts +3 -0
  99. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/bootstrapper.ts +14 -0
  100. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/handler.ts +13 -0
  101. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/reducer.ts +11 -0
  102. package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/request.ts +3 -0
  103. package/src/internal-plugins/activity-history/activity-history-item/filter/model.ts +21 -4
  104. package/src/internal-plugins/activity-history/activity-history-item/filter/slice.ts +6 -2
  105. package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/activity-history-timeline.ts +1 -4
  106. package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/template.ts +42 -21
  107. package/src/internal-plugins/activity-history/activity-history-item/list/bootstrapper.ts +4 -1
  108. package/src/internal-plugins/activity-history/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.test.ts +93 -0
  109. package/src/internal-plugins/activity-history/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.ts +34 -0
  110. package/src/internal-plugins/activity-history/activity-history-item/list/sort-history-items-by-date/sort-history-items-by-date.ts +31 -26
  111. package/src/internal-plugins/activity-history/activity-history-item/selectors.ts +5 -0
  112. package/src/internal-plugins/activity-history/activity-history-item/slice.ts +2 -8
  113. package/src/internal-plugins/activity-history/localization.ts +16 -0
  114. package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/handle-error/actions.d.ts +0 -4
  115. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/actions.d.ts +0 -0
  116. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/bootstrapper.d.ts +0 -0
  117. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/component.d.ts +0 -0
  118. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/template.d.ts +0 -0
  119. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/reducers.d.ts +0 -0
  120. /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/selectors.d.ts +0 -0
  121. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/actions.ts +0 -0
  122. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/bootstrapper.ts +0 -0
  123. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/component.ts +0 -0
  124. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/styles.css +0 -0
  125. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/template.ts +0 -0
  126. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/reducers.ts +0 -0
  127. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/selectors.ts +0 -0
  128. /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/actions.ts +0 -0
@@ -0,0 +1,11 @@
1
+ import { PayloadAction } from "@reduxjs/toolkit";
2
+ import { IActivityHistoryDiagnosticsFilter, isDiagnosticFilter } from "../../model";
3
+
4
+ export function setDiagnosticFilterValuesReducer(state, action: PayloadAction<string[]>) {
5
+ state.filters = [...state.filters].map((f) => {
6
+ if (isDiagnosticFilter(f)) {
7
+ return { ...f, enabledValues: action.payload } as IActivityHistoryDiagnosticsFilter;
8
+ }
9
+ return f;
10
+ });
11
+ }
@@ -0,0 +1,3 @@
1
+ export class SetDiagnosticFiltersCommand {
2
+ constructor(public payload: string[]) {}
3
+ }
@@ -35,9 +35,10 @@ export interface IActivityHistoryCustomFilterGroup {
35
35
  filters: IActivityHistoryCustomFilter[];
36
36
  }
37
37
 
38
- export type IActivityHistoryFilterGroup =
38
+ export type IActivityHistoryFilter =
39
39
  | IActivityHistoryCommonFilterGroup
40
- | IActivityHistoryCustomFilterGroup;
40
+ | IActivityHistoryCustomFilterGroup
41
+ | IActivityHistoryDiagnosticsFilter;
41
42
 
42
43
  export interface IActivityHistoryCustomFilter {
43
44
  id: string;
@@ -54,6 +55,22 @@ export interface IActivityHistoryCustomFilter {
54
55
  enabledValues?: string[];
55
56
  }
56
57
 
57
- export const isCommonFilterGroup = (group: IActivityHistoryFilterGroup) => group.id === "common";
58
- export const isNotCommonFilterGroup = (group: IActivityHistoryFilterGroup) =>
58
+ export const isCommonFilterGroup = (group: IActivityHistoryFilter) => group.id === "common";
59
+ export const isNotCommonFilterGroup = (group: IActivityHistoryFilter) =>
59
60
  !isCommonFilterGroup(group);
61
+ export const isDiagnosticFilter = (filter: IActivityHistoryFilter) =>
62
+ filter.id === diagnosticsfilterId;
63
+ export const isNotDiagnosticFilter = (filter: IActivityHistoryFilter) =>
64
+ !isDiagnosticFilter(filter);
65
+ export const isCustomFilter = (filter: IActivityHistoryFilter) =>
66
+ !isCommonFilterGroup(filter) && !isDiagnosticFilter(filter);
67
+ export interface IActivityHistoryDiagnosticsFilter {
68
+ id: string;
69
+ title: string;
70
+ values: { label: string; value: string }[];
71
+ enabledValues: string[];
72
+ }
73
+
74
+ export const diagnosticsfilterId = "history-diagnostics";
75
+ export const relevantFilterId = "history-relevant";
76
+ export const ownFilterId = "history-own";
@@ -5,13 +5,15 @@ import { setCommonFilterValueReducer } from "./common-filters/set-common-filter/
5
5
  import { addCustomFiltersReducer } from "./custom-filters/add-custom-filters/reducer";
6
6
  import { setCustomFilterGroupValueReducer } from "./custom-filters/set-custom-filter-group/reducer";
7
7
  import { setCustomFilterValueReducer } from "./custom-filters/set-custom-filter-value/reducer";
8
- import { IActivityHistoryFilterGroup } from "./model";
8
+ import { IActivityHistoryFilter } from "./model";
9
+ import { addDiagnosticFiltersReducer } from "./diagnostic-filters/add/reducer";
10
+ import { setDiagnosticFilterValuesReducer } from "./diagnostic-filters/set/reducer";
9
11
 
10
12
  export const activityHistoryFiltersSlice = createSlice({
11
13
  name: "activity-history-filters",
12
14
  initialState: {
13
15
  searchString: "",
14
- filters: [...commonFilters] as IActivityHistoryFilterGroup[],
16
+ filters: [...commonFilters] as IActivityHistoryFilter[],
15
17
  },
16
18
  reducers: {
17
19
  setSearchString: setSearchStringReducer,
@@ -19,5 +21,7 @@ export const activityHistoryFiltersSlice = createSlice({
19
21
  addCustomFilters: addCustomFiltersReducer,
20
22
  setCustomFilterGroupValue: setCustomFilterGroupValueReducer,
21
23
  setCustomFilterValue: setCustomFilterValueReducer,
24
+ addDiagnosticFilters: addDiagnosticFiltersReducer,
25
+ setDiagnosticFilterValues: setDiagnosticFilterValuesReducer,
22
26
  },
23
27
  });
@@ -3,14 +3,11 @@ import { customElement } from "lit/decorators.js";
3
3
  import { connectedProperty } from "../../../../infrastructure/state/connected-property";
4
4
  import { IActivityHistoryGroup } from "../../../domain/model";
5
5
  import { activityHistorySearchStringSelector } from "../../../search/selectors";
6
- import {
7
- isAnyCollectionLoadingWithoutAnyLoaded,
8
- isSomeCollectionLoadedAndOtherLoading,
9
- } from "../../handle-busy/selectors";
10
6
  import { activityHistoryGroupedItems } from "../../../selectors";
11
7
  import styles from "./styles.css?inline";
12
8
  import { template } from "./template";
13
9
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
10
+ import { isAnyCollectionLoadingWithoutAnyLoaded, isSomeCollectionLoadedAndOtherLoading } from "../../../add/handle-busy/selectors";
14
11
 
15
12
  const createZIndexStyles = (max: number) => {
16
13
  let styles = "";
@@ -14,6 +14,10 @@ import {
14
14
  import { translate } from "../../../../localization";
15
15
  import { virtualize } from "@lit-labs/virtualizer/virtualize.js";
16
16
  import { hasItemDivider, shouldShowRole } from "../../../domain/business-rules";
17
+ import {
18
+ ActivityHistoryEntry,
19
+ mergeHistoryItemsAndSubgroups,
20
+ } from "../../merge-history-items-and-subgroups/merge-history-items-and-subgroups";
17
21
 
18
22
  export const template = (props: ActivityHistoryTimeline) => {
19
23
  if (!props._hasUpdatedOnce) {
@@ -21,6 +25,8 @@ export const template = (props: ActivityHistoryTimeline) => {
21
25
  }
22
26
  return html`
23
27
  <div class="container">
28
+ <activity-history-full-data-error></activity-history-full-data-error>
29
+ <activity-history-partial-data-error></activity-history-partial-data-error>
24
30
  ${
25
31
  props.historyGroups?.length > 0
26
32
  ? html`
@@ -32,26 +38,41 @@ export const template = (props: ActivityHistoryTimeline) => {
32
38
  ${visitHeaderTemplate(props, itemGroup.items[0] || itemGroup.subGroups[0]?.items[0])}
33
39
  <div class="visit__items">
34
40
  ${repeat(
35
- itemGroup.items,
36
- (item) => item.id,
37
- (item: IActivityHistoryItemWithComponent) =>
38
- html`<div class="item" ?has-divider=${hasItemDivider(item, itemGroup.items as IActivityHistoryItemWithComponent[])}>${item.component}</div> `,
39
- )}
40
- ${repeat(
41
- itemGroup.subGroups,
42
- (subGroup: IActivityHistorySubGroup) => html`
43
- <div class="diagnostics">
44
- ${diagnosticHeaderTemplate(subGroup.items[0])}
45
- <div class="diagnostics__items">
46
- ${repeat(
47
- subGroup.items,
48
- (item) => item.id,
49
- (item: IActivityHistoryItemWithComponent) =>
50
- html`<div class="item" ?has-divider=${hasItemDivider(item, subGroup.items as IActivityHistoryItemWithComponent[])}>${item?.component}</div>`,
51
- )}
52
- </div>
53
- </div>
54
- `,
41
+ mergeHistoryItemsAndSubgroups(itemGroup),
42
+ (entry) => (entry.type === "item" ? entry.item.id : entry.subGroup.id),
43
+ (entry: ActivityHistoryEntry) => {
44
+ if (entry.type === "item") {
45
+ const item = entry.item;
46
+ return html`
47
+ <div
48
+ class="item"
49
+ ?has-divider=${hasItemDivider(item, itemGroup.items as IActivityHistoryItemWithComponent[])}
50
+ >
51
+ ${item.component}
52
+ </div>
53
+ `;
54
+ }
55
+ const subGroup = entry.subGroup;
56
+ return html`
57
+ <div class="diagnostics">
58
+ ${diagnosticHeaderTemplate(subGroup.items[0])}
59
+ <div class="diagnostics__items">
60
+ ${repeat(
61
+ subGroup.items,
62
+ (item) => item.id,
63
+ (item: IActivityHistoryItemWithComponent) => html`
64
+ <div
65
+ class="item"
66
+ ?has-divider=${hasItemDivider(item, subGroup.items as IActivityHistoryItemWithComponent[])}
67
+ >
68
+ ${item.component}
69
+ </div>
70
+ `,
71
+ )}
72
+ </div>
73
+ </div>
74
+ `;
75
+ },
55
76
  )}
56
77
  </div>
57
78
  </div>
@@ -96,7 +117,7 @@ const renderProfessionalValues = (props: ActivityHistoryTimeline, item: IActivit
96
117
  const professionalItems = [
97
118
  props.highlighted(item.professional.name),
98
119
  showRole ? props.highlighted(item.professional.role.description) : null,
99
- props.highlighted(item.center.description),
120
+ props.highlighted(item.up.description),
100
121
  props.highlighted(item.professional.speciality.description),
101
122
  props.highlighted(item.service.description),
102
123
  ].filter(Boolean);
@@ -1,6 +1,9 @@
1
1
  import "./UI/timeline/activity-history-timeline";
2
2
  import "../filter/UI/active-filters-header/active-filters-header";
3
+ import "../add/handle-error/history-full-data-error/component";
4
+ import "../add/handle-error/history-partial-data-error/component";
5
+
3
6
 
4
7
  export const bootstrapListActivityHistoryItems = () => {
5
8
  () => null;
6
- };
9
+ }
@@ -0,0 +1,93 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { mergeHistoryItemsAndSubgroups } from "./merge-history-items-and-subgroups";
3
+ import {
4
+ IActivityHistoryGroup,
5
+ IActivityHistoryItemWithComponent,
6
+ IActivityHistorySubGroup,
7
+ } from "../../domain/model";
8
+
9
+ type RenderEntry =
10
+ | { type: "item"; date: Date; item: IActivityHistoryItemWithComponent }
11
+ | { type: "subGroup"; date: Date; subGroup: IActivityHistorySubGroup };
12
+
13
+ describe("mergeHistoryItemsAndSubgroups", () => {
14
+ it("should sort only items by date descending", () => {
15
+ const group: IActivityHistoryGroup = {
16
+ id: "g1",
17
+ items: [
18
+ { id: "i1", date: "2025-05-05T10:00:00Z", component: "<div/>" },
19
+ { id: "i2", date: "2025-05-05T12:00:00Z", component: "<div/>" },
20
+ { id: "i3", date: "2025-05-05T08:00:00Z", component: "<div/>" },
21
+ ],
22
+ subGroups: [],
23
+ };
24
+
25
+ const result = mergeHistoryItemsAndSubgroups(group) as RenderEntry[];
26
+ const ids = result.map((e) => (e.type === "item" ? e.item.id : e.subGroup.id));
27
+
28
+ expect(ids).toEqual(["i2", "i1", "i3"]);
29
+ });
30
+
31
+ it("should sort only subGroups by their most recent item", () => {
32
+ const subGroupA: IActivityHistorySubGroup = {
33
+ id: "sgA",
34
+ items: [{ id: "a1", date: "2025-05-05T09:00:00Z", component: "<div/>" }],
35
+ };
36
+ const subGroupB: IActivityHistorySubGroup = {
37
+ id: "sgB",
38
+ items: [
39
+ { id: "b1", date: "2025-05-05T15:00:00Z", component: "<div/>" },
40
+ { id: "b2", date: "2025-05-05T14:00:00Z", component: "<div/>" },
41
+ ],
42
+ };
43
+ const group: IActivityHistoryGroup = {
44
+ id: "g2",
45
+ items: [],
46
+ subGroups: [subGroupA, subGroupB],
47
+ };
48
+
49
+ const result = mergeHistoryItemsAndSubgroups(group) as RenderEntry[];
50
+ const ids = result.map((e) => (e.type === "item" ? e.item.id : e.subGroup.id));
51
+
52
+ expect(ids).toEqual(["sgB", "sgA"]);
53
+ });
54
+
55
+ it("should interleave items and subGroups by date", () => {
56
+ const group: IActivityHistoryGroup = {
57
+ id: "g3",
58
+ items: [
59
+ { id: "i1", date: "2025-05-05T10:00:00Z", component: "<div/>" },
60
+ { id: "i2", date: "2025-05-05T14:00:00Z", component: "<div/>" },
61
+ ],
62
+ subGroups: [
63
+ {
64
+ id: "sg1",
65
+ items: [{ id: "s1", date: "2025-05-05T12:00:00Z", component: "<div/>" }],
66
+ },
67
+ ],
68
+ };
69
+
70
+ const result = mergeHistoryItemsAndSubgroups(group) as RenderEntry[];
71
+ const ids = result.map((e) => (e.type === "item" ? e.item.id : e.subGroup.id));
72
+
73
+ // Expected order: i2 (14:00), sg1 (12:00), i1 (10:00)
74
+ expect(ids).toEqual(["i2", "sg1", "i1"]);
75
+ });
76
+
77
+ it("should place subGroups without items at the end", () => {
78
+ const emptySubGroup: IActivityHistorySubGroup = {
79
+ id: "sgEmpty",
80
+ items: [],
81
+ };
82
+ const group: IActivityHistoryGroup = {
83
+ id: "g4",
84
+ items: [{ id: "i1", date: "2025-05-05T11:00:00Z", component: "<div/>" }],
85
+ subGroups: [emptySubGroup],
86
+ };
87
+
88
+ const result = mergeHistoryItemsAndSubgroups(group) as RenderEntry[];
89
+ const ids = result.map((e) => (e.type === "item" ? e.item.id : e.subGroup.id));
90
+
91
+ expect(ids).toEqual(["i1", "sgEmpty"]);
92
+ });
93
+ });
@@ -0,0 +1,34 @@
1
+ import {
2
+ IActivityHistoryGroup,
3
+ IActivityHistoryItemWithComponent,
4
+ IActivityHistorySubGroup,
5
+ } from "../../domain/model";
6
+
7
+ export type ActivityHistoryEntry =
8
+ | { type: "item"; date: Date; item: IActivityHistoryItemWithComponent }
9
+ | { type: "subGroup"; date: Date; subGroup: IActivityHistorySubGroup };
10
+
11
+ export const mergeHistoryItemsAndSubgroups = (
12
+ group: IActivityHistoryGroup,
13
+ ): ActivityHistoryEntry[] => {
14
+ // 1. Prepara los items sueltos
15
+ const itemEntries: ActivityHistoryEntry[] = group.items.map((item) => ({
16
+ type: "item",
17
+ date: new Date(item.date),
18
+ item,
19
+ }));
20
+
21
+ // 2. Prepara los subGroups, usando la fecha del ítem más reciente de cada subgrupo
22
+ const subGroupEntries: ActivityHistoryEntry[] = group.subGroups.map((subGroup) => {
23
+ // Asumimos que subGroup.items ya está ordenado de más reciente a más antiguo
24
+ const mostRecent = subGroup.items.length ? new Date(subGroup.items[0].date) : new Date(0);
25
+ return {
26
+ type: "subGroup",
27
+ date: mostRecent,
28
+ subGroup,
29
+ };
30
+ });
31
+
32
+ // 3. Fusiona y ordena
33
+ return [...itemEntries, ...subGroupEntries].sort((a, b) => b.date.getTime() - a.date.getTime());
34
+ };
@@ -1,47 +1,52 @@
1
1
  import { IActivityHistoryGroup } from "../../domain/model";
2
2
 
3
3
  export const sortGroupsByMostRecentDate = (arr: IActivityHistoryGroup[]) => {
4
- // Helper function to get the most recent date from a list of items
5
- const getMostRecentDate = (items) => {
4
+ // Helper: obtener la fecha más reciente de una lista de items
5
+ const getMostRecentDate = (items: { date: string }[]): Date => {
6
6
  return items.reduce((latest, item) => {
7
7
  const itemDate = new Date(item.date);
8
8
  return itemDate > latest ? itemDate : latest;
9
- }, new Date(0)); // Default to an old date
9
+ }, new Date(0));
10
10
  };
11
11
 
12
- // Helper function to sort items within each group or subgroup
13
- const sortItemsByDate = (items) => {
14
- return items.sort((a, b) => new Date(b.date) - new Date(a.date));
12
+ // Ordenar items de más reciente a más antiguo
13
+ const sortItemsByDate = (items: { date: string }[]) => {
14
+ return items.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
15
15
  };
16
16
 
17
- // Function to get the most recent date from a group (considering its items and subgroups)
18
- const getGroupMostRecentDate = (group) => {
19
- let allDates = [];
20
-
21
- // Collect dates from group items
22
- if (group.items.length > 0) {
23
- allDates.push(getMostRecentDate(group.items));
24
- }
25
-
26
- // Collect dates from subgroups items
27
- group.subGroups.forEach((subGroup) => {
28
- if (subGroup.items.length > 0) {
29
- allDates.push(getMostRecentDate(subGroup.items));
30
- }
31
- });
17
+ // Obtener la fecha más reciente de un subgrupo
18
+ const getSubGroupMostRecentDate = (subGroup: { items: { date: string }[] }): Date => {
19
+ return getMostRecentDate(subGroup.items);
20
+ };
32
21
 
33
- // Return the most recent date found in the group and subgroups
34
- return allDates.length > 0 ? new Date(Math.max(...allDates)) : new Date(0);
22
+ // Obtener la fecha más reciente de un grupo (considerando sus items y subgroups)
23
+ const getGroupMostRecentDate = (group: IActivityHistoryGroup): Date => {
24
+ const itemDates = group.items.length > 0 ? [getMostRecentDate(group.items)] : [];
25
+ const subGroupDates = group.subGroups.map(getSubGroupMostRecentDate);
26
+ const allDates = [...itemDates, ...subGroupDates];
27
+ return allDates.length > 0
28
+ ? new Date(Math.max(...allDates.map((d) => d.getTime())))
29
+ : new Date(0);
35
30
  };
36
31
 
37
- // Sort each group's items and subgroups' items by date
32
+ // Procesar cada grupo
38
33
  arr.forEach((group) => {
34
+ // Ordenar items del grupo
39
35
  group.items = sortItemsByDate(group.items);
36
+
37
+ // Ordenar items de cada subgrupo
40
38
  group.subGroups.forEach((subGroup) => {
41
39
  subGroup.items = sortItemsByDate(subGroup.items);
42
40
  });
41
+
42
+ // Ordenar subgrupos según el item más reciente en cada uno
43
+ group.subGroups.sort(
44
+ (a, b) => getSubGroupMostRecentDate(b).getTime() - getSubGroupMostRecentDate(a).getTime(),
45
+ );
43
46
  });
44
47
 
45
- // Sort groups by the most recent date of their items and subgroups
46
- return arr.sort((a, b) => getGroupMostRecentDate(b) - getGroupMostRecentDate(a));
48
+ // Finalmente, ordenar los grupos por su fecha más reciente
49
+ return arr.sort(
50
+ (a, b) => getGroupMostRecentDate(b).getTime() - getGroupMostRecentDate(a).getTime(),
51
+ );
47
52
  };
@@ -16,6 +16,8 @@ import { activityHistoryCustomFilterGroupsSelector } from "./filter/custom-filte
16
16
  import { groupActivityHistoryItems } from "./list/group-history-items/group-history-items";
17
17
  import { sortGroupsByMostRecentDate } from "./list/sort-history-items-by-date/sort-history-items-by-date";
18
18
  import { activityHistorySearchStringSelector } from "./search/selectors";
19
+ import { diagnosticFilterEnabledValuesSelector } from "./filter/diagnostic-filters/selectors";
20
+ import { DiagnosticCodeSpec } from "./domain/specs/diagnostics-filter-spec";
19
21
 
20
22
  export const activityHistoryCollectionsSelector = (state: RootState) =>
21
23
  state.activityHistoryCollections.collections;
@@ -86,17 +88,20 @@ export const activityHistoryGroupedItems = createSelector(
86
88
  activityHistorySearchStringSelector,
87
89
  activityHistoryCommonFiltersSelector,
88
90
  activityHistoryCustomFilterGroupsSelector,
91
+ diagnosticFilterEnabledValuesSelector,
89
92
  (
90
93
  items: IActivityHistoryItem[],
91
94
  searchString: string,
92
95
  commonFilters: IActivityHistoryCommonFilter[],
93
96
  customFilters: IActivityHistoryCustomFilterGroup[],
97
+ diagnosticFilterEnabledValues: string[],
94
98
  ) => {
95
99
  const filteredItems = items.filter((item: IActivityHistoryItem) =>
96
100
  new SearchStringSpec(searchString, item.searchPredicate)
97
101
  .and(new CommonFilterSpec(commonFilters))
98
102
  .and(new ComposedTypeSpec(customFilters))
99
103
  .and(new CustomFilterSpec(customFilters))
104
+ .and(new DiagnosticCodeSpec(diagnosticFilterEnabledValues))
100
105
  .isSatisfiedBy(item),
101
106
  );
102
107
 
@@ -6,16 +6,10 @@ import {
6
6
  IBusyHistoryItem,
7
7
  IErrorHistoryItem,
8
8
  } from "./domain/model";
9
- import {
10
- addBusyHistoryItemReducer,
11
- removeBusyHistoryItemReducer,
12
- } from "./list/handle-busy/reducers";
13
- import {
14
- addErrorHistoryItemReducer,
15
- removeErrorHistoryItemReducer,
16
- } from "./list/handle-error/reducers";
17
9
  import { removeActivityHistoryItemReducer } from "./remove/reducer";
18
10
  import { updateActivityHistoryItemReducer } from "./update/reducer";
11
+ import { addBusyHistoryItemReducer, removeBusyHistoryItemReducer } from "./add/handle-busy/reducers";
12
+ import { addErrorHistoryItemReducer, removeErrorHistoryItemReducer } from "./add/handle-error/reducers";
19
13
 
20
14
  export const activityHistoryCollectionsSlice = createSlice({
21
15
  name: "activity-history-collections",
@@ -86,6 +86,22 @@ export const locales = {
86
86
  chipHeader: {
87
87
  selection: "Selecció:",
88
88
  },
89
+ error: {
90
+ general: {
91
+ title: "Hi ha hagut un problema durant la càrrega de contingut. Actualitza la pàgina o torna-ho a provar més tard.",
92
+ refresh: "Actualitzar pàgina",
93
+ noInfo: "No hi ha informació disponible.",
94
+ },
95
+ partial: {
96
+ title: "Hi ha hagut un problema i no s'ha pogut carregar les notes de tipus",
97
+ refresh: "Actualitzar",
98
+ limit: "Límit de clicks superat",
99
+ },
100
+ title: "Error en la càrrega",
101
+ viewDetails: "Veure detalls",
102
+ imageAlt: "Imatge d'error",
103
+ errorToRefresh: "Error en l'acció d'actualitzar la pàgina",
104
+ },
89
105
  },
90
106
  },
91
107
  };
@@ -1,4 +0,0 @@
1
- export declare const addErrorHistoryItem: import('@reduxjs/toolkit').ActionCreatorWithPayload<{
2
- id: string;
3
- message: string;
4
- }, "activity-history-collections/addErrorHistoryItem">, removeErrorHistoryItem: import('@reduxjs/toolkit').ActionCreatorWithPayload<string, "activity-history-collections/removeErrorHistoryItem">;