@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.
- package/dist/index.js +1951 -2144
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +123 -87
- package/dist/index.umd.cjs.map +1 -1
- package/dist/primary/shell/src/events.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.d.ts +3 -2
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/actions.d.ts +1 -0
- 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
- 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
- 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
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/component.d.ts +10 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/template.d.ts +3 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/component.d.ts +11 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/template.d.ts +3 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/reducers.d.ts +2 -4
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-error/selectors.d.ts +5 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/model.d.ts +2 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.d.ts +8 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.d.ts +5 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.test.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-full-history-item.d.ts +5 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-full-history-item.test.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.d.ts +4 -2
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/active-filters-header.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.d.ts +4 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/selectors.d.ts +42 -42
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/actions.d.ts +1 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.d.ts +2 -2
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.d.ts +3 -3
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.d.ts +29 -29
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/actions.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/bootstrapper.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/handler.d.ts +6 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.test.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/request.d.ts +6 -0
- 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
- 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
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/selectors.d.ts +185 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/actions.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/bootstrapper.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/handler.d.ts +6 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/reducer.d.ts +3 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/request.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/model.d.ts +18 -3
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/selectors.d.ts +1 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/slice.d.ts +7 -3
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/selectors.d.ts +86 -27
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/slice.d.ts +2 -2
- package/dist/primary/shell/src/internal-plugins/activity-history/infrastructure/state/store.d.ts +4 -4
- package/dist/primary/shell/src/internal-plugins/activity-history/localization.d.ts +16 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.d.ts +1 -1
- package/package.json +1 -2
- package/src/UI/components/primaria-shell/shell-header/styles.css +1 -0
- package/src/UI/images/feedback-error.svg +9 -0
- package/src/UI/internal-views/upper-nav-views.ts +82 -17
- package/src/UI/shared-components/primaria-character-limit-badge/primaria-character-limit-badge.ts +5 -7
- package/src/UI/shared-components/primaria-character-limit-badge/styles.css +1 -1
- package/src/api/interaction-service/modal-styles.css +1 -1
- package/src/events.ts +1 -0
- package/src/features/clinical-monitoring/component/template.ts +5 -5
- package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/handler.ts +4 -3
- package/src/internal-plugins/activity-history/activity-history-item/add/add-async-history-items/request.ts +3 -2
- package/src/internal-plugins/activity-history/activity-history-item/add/add-history-item/handler.ts +4 -2
- package/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/handler.ts +4 -2
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/bootstrapper.ts +18 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/handler.ts +26 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/handle-history-items-add-error/request.ts +5 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/component.ts +32 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/styles.css +11 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-full-data-error/template.ts +23 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/component.ts +42 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/styles.css +11 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/history-partial-data-error/template.ts +19 -0
- package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/reducers.ts +3 -2
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/selectors.ts +19 -0
- package/src/internal-plugins/activity-history/activity-history-item/bootstrapper.ts +4 -1
- package/src/internal-plugins/activity-history/activity-history-item/domain/business-rules.ts +1 -1
- package/src/internal-plugins/activity-history/activity-history-item/domain/model.ts +2 -1
- package/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.test.ts +59 -0
- package/src/internal-plugins/activity-history/activity-history-item/domain/specs/diagnostics-filter-spec.ts +18 -0
- package/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.test.ts +63 -0
- package/src/internal-plugins/activity-history/activity-history-item/domain/validation/is-valid-basic-history-item.ts +43 -0
- 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
- 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
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.ts +19 -2
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/template.ts +49 -1
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/active-filters-header.ts +4 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-header/template.ts +1 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/activity-history-filters.ts +21 -1
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/template.ts +11 -2
- package/src/internal-plugins/activity-history/activity-history-item/filter/bootstrapper.ts +12 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/common-filters/common-filters.ts +8 -3
- package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/reducer.ts +2 -2
- package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/add-custom-filters/request.ts +2 -2
- package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/selectors.ts +4 -5
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/actions.ts +3 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/bootstrapper.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/handler.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.test.ts +93 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/reducer.ts +25 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/add/request.ts +5 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.test.ts +80 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/handle-add-diagnostics-options-from-item.ts +31 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/selectors.ts +22 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/actions.ts +3 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/bootstrapper.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/handler.ts +13 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/reducer.ts +11 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/diagnostic-filters/set/request.ts +3 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/model.ts +21 -4
- package/src/internal-plugins/activity-history/activity-history-item/filter/slice.ts +6 -2
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/activity-history-timeline.ts +1 -4
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/template.ts +5 -2
- package/src/internal-plugins/activity-history/activity-history-item/list/bootstrapper.ts +4 -1
- package/src/internal-plugins/activity-history/activity-history-item/list/group-history-items/group-history-items.test.ts +71 -215
- package/src/internal-plugins/activity-history/activity-history-item/list/group-history-items/group-history-items.ts +24 -1
- package/src/internal-plugins/activity-history/activity-history-item/selectors.ts +6 -0
- package/src/internal-plugins/activity-history/activity-history-item/slice.ts +2 -8
- package/src/internal-plugins/activity-history/activity-history-item/update/handler.ts +2 -2
- package/src/internal-plugins/activity-history/localization.ts +16 -0
- package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.test.ts +55 -30
- package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.ts +30 -10
- 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
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/handle-error/actions.d.ts +0 -4
- /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/actions.d.ts +0 -0
- /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/bootstrapper.d.ts +0 -0
- /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/component.d.ts +0 -0
- /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/template.d.ts +0 -0
- /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/reducers.d.ts +0 -0
- /package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/selectors.d.ts +0 -0
- /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
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/actions.ts +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/bootstrapper.ts +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/component.ts +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/styles.css +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/busy-component/template.ts +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/reducers.ts +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-busy/selectors.ts +0 -0
- /package/src/internal-plugins/activity-history/activity-history-item/{list → add}/handle-error/actions.ts +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
2
|
+
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
|
3
|
+
import { IActivityHistoryDiagnosticsFilter, isDiagnosticFilter } from "../../model";
|
|
4
|
+
import { addDiagnosticFiltersReducer } from "./reducer";
|
|
5
|
+
|
|
6
|
+
vi.mock("../../model", () => ({
|
|
7
|
+
isDiagnosticFilter: vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
describe("addDiagnosticFiltersReducer", () => {
|
|
11
|
+
let initialState: { filters: IActivityHistoryDiagnosticsFilter[] };
|
|
12
|
+
|
|
13
|
+
const baseFilter = (values: any[]): IActivityHistoryDiagnosticsFilter => ({
|
|
14
|
+
id: "diagnostics",
|
|
15
|
+
title: "Diagnòstics",
|
|
16
|
+
values,
|
|
17
|
+
enabledValues: [],
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
initialState = {
|
|
22
|
+
filters: [],
|
|
23
|
+
};
|
|
24
|
+
vi.clearAllMocks();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const slice = createSlice({
|
|
28
|
+
name: "activity",
|
|
29
|
+
initialState,
|
|
30
|
+
reducers: {
|
|
31
|
+
addDiagnosticFilters: addDiagnosticFiltersReducer,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const { addDiagnosticFilters } = slice.actions;
|
|
36
|
+
const reducer = slice.reducer;
|
|
37
|
+
|
|
38
|
+
it("should add a new diagnostic filter if none exists", () => {
|
|
39
|
+
(isDiagnosticFilter as any).mockReturnValue(false);
|
|
40
|
+
|
|
41
|
+
const newFilter = baseFilter([{ label: "Hipertensió", value: "I10" }]);
|
|
42
|
+
|
|
43
|
+
const nextState = reducer(initialState, addDiagnosticFilters(newFilter));
|
|
44
|
+
|
|
45
|
+
expect(nextState.filters).toHaveLength(1);
|
|
46
|
+
expect(nextState.filters[0]).toEqual(newFilter);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("should merge values if a diagnostic filter already exists", () => {
|
|
50
|
+
const existingFilter = baseFilter([{ label: "Diabetes", value: "E11" }]);
|
|
51
|
+
initialState.filters = [existingFilter];
|
|
52
|
+
|
|
53
|
+
(isDiagnosticFilter as any).mockImplementation((f) => f.id === "diagnostics");
|
|
54
|
+
|
|
55
|
+
const incomingFilter = baseFilter([{ label: "Hipertensió", value: "I10" }]);
|
|
56
|
+
|
|
57
|
+
const nextState = reducer(initialState, addDiagnosticFilters(incomingFilter));
|
|
58
|
+
|
|
59
|
+
expect(nextState.filters).toHaveLength(1);
|
|
60
|
+
expect(nextState.filters[0].values).toContainEqual({ label: "Diabetes", value: "E11" });
|
|
61
|
+
expect(nextState.filters[0].values).toContainEqual({ label: "Hipertensió", value: "I10" });
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("should avoid duplicate values when merging", () => {
|
|
65
|
+
const existingFilter = baseFilter([{ label: "Diabetes", value: "E11" }]);
|
|
66
|
+
initialState.filters = [existingFilter];
|
|
67
|
+
|
|
68
|
+
(isDiagnosticFilter as any).mockImplementation((f) => f.id === "diagnostics");
|
|
69
|
+
|
|
70
|
+
const incomingFilter = baseFilter([{ label: "Diabetes", value: "E11" }]);
|
|
71
|
+
|
|
72
|
+
const nextState = reducer(initialState, addDiagnosticFilters(incomingFilter));
|
|
73
|
+
|
|
74
|
+
expect(nextState.filters).toHaveLength(1);
|
|
75
|
+
expect(nextState.filters[0].values).toEqual([{ label: "Diabetes", value: "E11" }]);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("should preserve other properties of the existing filter", () => {
|
|
79
|
+
const existingFilter = {
|
|
80
|
+
...baseFilter([{ label: "A", value: "1" }]),
|
|
81
|
+
enabledValues: ["1"],
|
|
82
|
+
};
|
|
83
|
+
initialState.filters = [existingFilter];
|
|
84
|
+
|
|
85
|
+
(isDiagnosticFilter as any).mockReturnValue(true);
|
|
86
|
+
|
|
87
|
+
const incomingFilter = baseFilter([{ label: "B", value: "2" }]);
|
|
88
|
+
|
|
89
|
+
const nextState = reducer(initialState, addDiagnosticFilters(incomingFilter));
|
|
90
|
+
|
|
91
|
+
expect(nextState.filters[0].enabledValues).toEqual(["1"]); // no se sobreescribe
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
+
import { IActivityHistoryDiagnosticsFilter, isDiagnosticFilter } from "../../model";
|
|
3
|
+
|
|
4
|
+
export function addDiagnosticFiltersReducer(
|
|
5
|
+
state,
|
|
6
|
+
action: PayloadAction<IActivityHistoryDiagnosticsFilter>,
|
|
7
|
+
) {
|
|
8
|
+
const index = state.filters.findIndex(isDiagnosticFilter);
|
|
9
|
+
|
|
10
|
+
if (index === -1) {
|
|
11
|
+
state.filters.push(action.payload);
|
|
12
|
+
} else {
|
|
13
|
+
const existing = state.filters[index];
|
|
14
|
+
|
|
15
|
+
const mergedValues = [
|
|
16
|
+
...existing.values,
|
|
17
|
+
...action.payload.values.filter((v) => !existing.values.some((ev) => ev.value === v.value)),
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
state.filters[index] = {
|
|
21
|
+
...existing,
|
|
22
|
+
values: mergedValues,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { mapArrayToLabelValue } from "@primaria/plugins-core";
|
|
2
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
|
+
import { handleAddDiagnosticsFilter } from "./handle-add-diagnostics-options-from-item";
|
|
4
|
+
import { diagnosticsfilterId } from "../model";
|
|
5
|
+
|
|
6
|
+
vi.mock("@primaria/plugins-core", () => ({
|
|
7
|
+
mapArrayToLabelValue: vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
describe("handleAddDiagnosticsFilter", () => {
|
|
11
|
+
const mockDispatch = vi.fn();
|
|
12
|
+
const mockStore = { dispatch: mockDispatch };
|
|
13
|
+
|
|
14
|
+
const diagnosticsSample = [
|
|
15
|
+
{ descripcio: "Diabetes", codi: "E11" },
|
|
16
|
+
{ descripcio: "Hipertensió", codi: "I10" },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
vi.clearAllMocks();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("should dispatch a filter when items have diagnostics", () => {
|
|
24
|
+
(mapArrayToLabelValue as any).mockReturnValue([
|
|
25
|
+
{ label: "Diabetes", value: "E11" },
|
|
26
|
+
{ label: "Hipertensió", value: "I10" },
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
const items = [{ diagnostics: diagnosticsSample }];
|
|
30
|
+
|
|
31
|
+
handleAddDiagnosticsFilter(items, mockStore as any);
|
|
32
|
+
|
|
33
|
+
expect(mapArrayToLabelValue).toHaveBeenCalledWith(diagnosticsSample, "descripcio", "codi");
|
|
34
|
+
expect(mockDispatch).toHaveBeenCalledWith({
|
|
35
|
+
type: expect.any(String), // puedes ajustar esto si usas createAction
|
|
36
|
+
payload: {
|
|
37
|
+
id: diagnosticsfilterId,
|
|
38
|
+
title: "Diagnòstics",
|
|
39
|
+
values: [
|
|
40
|
+
{ label: "Diabetes", value: "E11" },
|
|
41
|
+
{ label: "Hipertensió", value: "I10" },
|
|
42
|
+
],
|
|
43
|
+
enabledValues: [],
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("should not dispatch if no diagnostics are present", () => {
|
|
49
|
+
const items = [{ diagnostics: [] }, { diagnostics: undefined }];
|
|
50
|
+
handleAddDiagnosticsFilter(items, mockStore as any);
|
|
51
|
+
expect(mockDispatch).not.toHaveBeenCalled();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("should deduplicate diagnostics by codi", () => {
|
|
55
|
+
const duplicatedDiagnostics = [
|
|
56
|
+
{ descripcio: "Diabetes", codi: "E11" },
|
|
57
|
+
{ descripcio: "Diabetis", codi: "E11" }, // mismo código
|
|
58
|
+
{ descripcio: "Hipertensió", codi: "I10" },
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
(mapArrayToLabelValue as any).mockReturnValue([
|
|
62
|
+
{ label: "Diabetes", value: "E11" },
|
|
63
|
+
{ label: "Hipertensió", value: "I10" },
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
const items = [{ diagnostics: duplicatedDiagnostics }];
|
|
67
|
+
|
|
68
|
+
handleAddDiagnosticsFilter(items, mockStore as any);
|
|
69
|
+
|
|
70
|
+
expect(mapArrayToLabelValue).toHaveBeenCalledWith(
|
|
71
|
+
[
|
|
72
|
+
{ descripcio: "Diabetes", codi: "E11" },
|
|
73
|
+
{ descripcio: "Hipertensió", codi: "I10" },
|
|
74
|
+
],
|
|
75
|
+
"descripcio",
|
|
76
|
+
"codi",
|
|
77
|
+
);
|
|
78
|
+
expect(mockDispatch).toHaveBeenCalled();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { mapArrayToLabelValue } from "@primaria/plugins-core";
|
|
2
|
+
import { Store } from "@reduxjs/toolkit";
|
|
3
|
+
import { IActivityHistoryItem } from "../../domain/model";
|
|
4
|
+
import { diagnosticsfilterId } from "../model";
|
|
5
|
+
import { addDiagnosticFilters } from "./add/actions";
|
|
6
|
+
|
|
7
|
+
export const handleAddDiagnosticsFilter = (items: IActivityHistoryItem[], store: Store) => {
|
|
8
|
+
const allDiagnostics = items
|
|
9
|
+
.flatMap((item) => item.diagnostics ?? [])
|
|
10
|
+
.filter((diag) => typeof diag.codi === "string" && diag.codi.trim() !== "")
|
|
11
|
+
.filter((diag, index, self) => index === self.findIndex((d) => d.codi === diag.codi));
|
|
12
|
+
|
|
13
|
+
if (allDiagnostics.length > 0) {
|
|
14
|
+
const newDiagnosticFilter = {
|
|
15
|
+
id: diagnosticsfilterId,
|
|
16
|
+
title: "Diagnòstics",
|
|
17
|
+
values: mapArrayToLabelValue(allDiagnostics, "descripcio", "codi"),
|
|
18
|
+
enabledValues: [],
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
store.dispatch(addDiagnosticFilters(newDiagnosticFilter));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export function mergeDiagnosticOptionsByCodi(array1, array2) {
|
|
26
|
+
const existingCodis = new Set(array1.map((obj) => obj.codi));
|
|
27
|
+
|
|
28
|
+
const newObjects = array2.filter((obj) => !existingCodis.has(obj.codi));
|
|
29
|
+
|
|
30
|
+
return [...array1, ...newObjects];
|
|
31
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createSelector } from "@reduxjs/toolkit";
|
|
2
|
+
import {
|
|
3
|
+
IActivityHistoryDiagnosticsFilter,
|
|
4
|
+
IActivityHistoryFilter,
|
|
5
|
+
isDiagnosticFilter,
|
|
6
|
+
} from "../model";
|
|
7
|
+
import { activityHistoryFiltersSelector } from "../selectors";
|
|
8
|
+
|
|
9
|
+
export const diagnosticFilterSelector = createSelector(
|
|
10
|
+
activityHistoryFiltersSelector,
|
|
11
|
+
(filters: IActivityHistoryFilter[]) => filters.find(isDiagnosticFilter),
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
export const diagnosticFilterEnabledValuesSelector = createSelector(
|
|
15
|
+
diagnosticFilterSelector,
|
|
16
|
+
(filter: IActivityHistoryDiagnosticsFilter) => filter?.enabledValues || [],
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export const areDiagnosticFiltersActive = createSelector(
|
|
20
|
+
diagnosticFilterEnabledValuesSelector,
|
|
21
|
+
(filters) => !!filters.length,
|
|
22
|
+
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BrokerExtensions } from "@primaria/plugins-core";
|
|
2
|
+
import { BrokerDisposableHandler } from "../../../../../../api/broker/primaria-broker";
|
|
3
|
+
import { SetDiagnosticFiltersHandler } from "./handler";
|
|
4
|
+
import { SetDiagnosticFiltersCommand } from "./request";
|
|
5
|
+
|
|
6
|
+
let request: BrokerDisposableHandler;
|
|
7
|
+
|
|
8
|
+
export const bootstrapSetDiagnosticFilter = (broker: BrokerExtensions) => {
|
|
9
|
+
request = broker.registerRequest(SetDiagnosticFiltersCommand, SetDiagnosticFiltersHandler);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const teardownSetDiagnosticFilter = () => {
|
|
13
|
+
request?.dispose();
|
|
14
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StoreBaseHandler } from "../../../../infrastructure/base-handlers";
|
|
2
|
+
import { setDiagnosticFilterValues } from "./actions";
|
|
3
|
+
import { SetDiagnosticFiltersCommand } from "./request";
|
|
4
|
+
|
|
5
|
+
export class SetDiagnosticFiltersHandler extends StoreBaseHandler {
|
|
6
|
+
async handle(request: SetDiagnosticFiltersCommand) {
|
|
7
|
+
try {
|
|
8
|
+
this.store.dispatch(setDiagnosticFilterValues(request.payload));
|
|
9
|
+
} catch (e) {
|
|
10
|
+
console.log(e.message);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -35,9 +35,10 @@ export interface IActivityHistoryCustomFilterGroup {
|
|
|
35
35
|
filters: IActivityHistoryCustomFilter[];
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
export type
|
|
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:
|
|
58
|
-
export const isNotCommonFilterGroup = (group:
|
|
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 {
|
|
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
|
|
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 = "";
|
package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/template.ts
CHANGED
|
@@ -25,6 +25,8 @@ export const template = (props: ActivityHistoryTimeline) => {
|
|
|
25
25
|
}
|
|
26
26
|
return html`
|
|
27
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>
|
|
28
30
|
${
|
|
29
31
|
props.historyGroups?.length > 0
|
|
30
32
|
? html`
|
|
@@ -32,7 +34,7 @@ export const template = (props: ActivityHistoryTimeline) => {
|
|
|
32
34
|
${virtualize({
|
|
33
35
|
items: props.historyGroups,
|
|
34
36
|
renderItem: (itemGroup: IActivityHistoryGroup, index: number) => html`
|
|
35
|
-
<div class="visit zIndex${props.historyGroups.length - index}" data-date=${ifDefined(itemGroup
|
|
37
|
+
<div class="visit zIndex${props.historyGroups.length - index}" data-date=${ifDefined(itemGroup?.items[0]?.date || itemGroup.subGroups[0]?.items[0]?.date)}>
|
|
36
38
|
${visitHeaderTemplate(props, itemGroup.items[0] || itemGroup.subGroups[0]?.items[0])}
|
|
37
39
|
<div class="visit__items">
|
|
38
40
|
${repeat(
|
|
@@ -111,11 +113,12 @@ const visitHeaderTemplate = (
|
|
|
111
113
|
};
|
|
112
114
|
|
|
113
115
|
const renderProfessionalValues = (props: ActivityHistoryTimeline, item: IActivityHistoryItem) => {
|
|
116
|
+
if(!item.professional) return nothing;
|
|
114
117
|
const showRole = shouldShowRole(item);
|
|
115
118
|
const professionalItems = [
|
|
116
119
|
props.highlighted(item.professional.name),
|
|
117
120
|
showRole ? props.highlighted(item.professional.role.description) : null,
|
|
118
|
-
props.highlighted(item.up.description)
|
|
121
|
+
props.highlighted(item.up.description),
|
|
119
122
|
props.highlighted(item.professional.speciality.description),
|
|
120
123
|
props.highlighted(item.service.description),
|
|
121
124
|
].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
|
+
}
|