@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.
- package/dist/index.js +3306 -3479
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +143 -94
- 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/specs/diagnostics-filter-spec.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/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.d.ts +12 -0
- 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
- 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/package.json +1 -2
- package/src/UI/images/feedback-error.svg +9 -0
- package/src/UI/internal-views/upper-nav-views.ts +90 -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 +2 -0
- package/src/internal-plugins/activity-history/activity-history-item/add/add-history-items/handler.ts +2 -0
- 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/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/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 +30 -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 +42 -21
- package/src/internal-plugins/activity-history/activity-history-item/list/bootstrapper.ts +4 -1
- package/src/internal-plugins/activity-history/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.test.ts +93 -0
- package/src/internal-plugins/activity-history/activity-history-item/list/merge-history-items-and-subgroups/merge-history-items-and-subgroups.ts +34 -0
- package/src/internal-plugins/activity-history/activity-history-item/list/sort-history-items-by-date/sort-history-items-by-date.ts +31 -26
- package/src/internal-plugins/activity-history/activity-history-item/selectors.ts +5 -0
- package/src/internal-plugins/activity-history/activity-history-item/slice.ts +2 -8
- package/src/internal-plugins/activity-history/localization.ts +16 -0
- 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/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
|
@@ -8,9 +8,15 @@ import { template } from "./template";
|
|
|
8
8
|
import styles from "./styles.css?inline";
|
|
9
9
|
import { activeGroupsWithEnabledFilters } from "../../custom-filters/selectors";
|
|
10
10
|
import { SetCustomFilterValue } from "../../custom-filters/set-custom-filter-value/request";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
IActivityHistoryCustomFilterGroup,
|
|
13
|
+
IActivityHistoryDiagnosticsFilter,
|
|
14
|
+
IActivityHistoryFilter,
|
|
15
|
+
} from "../../model";
|
|
12
16
|
import { activityHistoryEnabledCommonFiltersSelector } from "../../common-filters/selectors";
|
|
13
17
|
import { SetCommonFilter } from "../../common-filters/set-common-filter/request";
|
|
18
|
+
import { diagnosticFilterSelector } from "../../diagnostic-filters/selectors";
|
|
19
|
+
import { SetDiagnosticFiltersCommand } from "../../diagnostic-filters/set/request";
|
|
14
20
|
|
|
15
21
|
//@ts-ignore
|
|
16
22
|
@customElement("active-filters-badges")
|
|
@@ -29,11 +35,14 @@ export class ActiveFiltersBadges extends LitElement {
|
|
|
29
35
|
activityHistoryCommonFiltersSelector;
|
|
30
36
|
|
|
31
37
|
@connectedProperty(activityHistoryEnabledCommonFiltersSelector)
|
|
32
|
-
enabledCommonFilters:
|
|
38
|
+
enabledCommonFilters: IActivityHistoryFilter[];
|
|
33
39
|
|
|
34
40
|
@connectedProperty(activeGroupsWithEnabledFilters)
|
|
35
41
|
enabledFilters: IActivityHistoryCustomFilterGroup[];
|
|
36
42
|
|
|
43
|
+
@connectedProperty(diagnosticFilterSelector)
|
|
44
|
+
diagnosticFilterEnabled: IActivityHistoryDiagnosticsFilter;
|
|
45
|
+
|
|
37
46
|
_onDeleteFilterValue(filterGroupId: string, filterId: string, optionId: string, value: boolean) {
|
|
38
47
|
this.api.broker.send(
|
|
39
48
|
new SetCustomFilterValue({
|
|
@@ -48,4 +57,12 @@ export class ActiveFiltersBadges extends LitElement {
|
|
|
48
57
|
_onDeleteCommonFilterValue(filterId: string) {
|
|
49
58
|
this.api.broker.send(new SetCommonFilter({ id: filterId, enabled: false }));
|
|
50
59
|
}
|
|
60
|
+
|
|
61
|
+
_onDeleteDiagnosticFilterValue(diagnosticValue: string) {
|
|
62
|
+
this.api.broker.send(
|
|
63
|
+
new SetDiagnosticFiltersCommand([
|
|
64
|
+
...this.diagnosticFilterEnabled.enabledValues.filter((v) => v !== diagnosticValue),
|
|
65
|
+
]),
|
|
66
|
+
);
|
|
67
|
+
}
|
|
51
68
|
}
|
|
@@ -27,16 +27,64 @@ const renderCommonChip = (filter, props) => html`
|
|
|
27
27
|
></dss-chip>
|
|
28
28
|
`;
|
|
29
29
|
|
|
30
|
+
const renderDiagnosticChip = (id, value, props) => html`
|
|
31
|
+
<dss-chip
|
|
32
|
+
label=${value}
|
|
33
|
+
size="sm"
|
|
34
|
+
hasdelete
|
|
35
|
+
selected
|
|
36
|
+
@click=${() => props._onDeleteDiagnosticFilterValue(id)}
|
|
37
|
+
@onDelete=${() => props._onDeleteDiagnosticFilterValue(id)}
|
|
38
|
+
></dss-chip>
|
|
39
|
+
`;
|
|
40
|
+
|
|
30
41
|
const renderFilterTitle = (title) => html`<div class="filter-title">${`${title}:`}</div>`;
|
|
31
42
|
|
|
32
43
|
export const template = (props: ActiveFiltersBadges) => {
|
|
33
|
-
if (
|
|
44
|
+
if (
|
|
45
|
+
props.enabledFilters.length === 0 &&
|
|
46
|
+
props.enabledCommonFilters.length === 0 &&
|
|
47
|
+
props.diagnosticFilterEnabled.enabledValues.length === 0
|
|
48
|
+
)
|
|
49
|
+
return nothing;
|
|
34
50
|
|
|
35
51
|
let visibleCount = 0;
|
|
36
52
|
const visibleChips: any[] = [];
|
|
37
53
|
const hiddenElements: any[] = [];
|
|
38
54
|
const hiddenChips: any[] = [];
|
|
39
55
|
|
|
56
|
+
const diagnostic = props.diagnosticFilterEnabled;
|
|
57
|
+
|
|
58
|
+
if (diagnostic) {
|
|
59
|
+
const { title, values, enabledValues } = diagnostic;
|
|
60
|
+
const selectedOptions = values.filter((opt) => enabledValues.includes(opt.value));
|
|
61
|
+
|
|
62
|
+
if (selectedOptions.length > 0) {
|
|
63
|
+
let titleAddedToVisible = false;
|
|
64
|
+
let titleAddedToHidden = false;
|
|
65
|
+
|
|
66
|
+
for (const option of selectedOptions) {
|
|
67
|
+
const chip = renderDiagnosticChip(option.value, option.label, props);
|
|
68
|
+
|
|
69
|
+
if (visibleCount < MAX_VISIBLE_CHIPS) {
|
|
70
|
+
if (!titleAddedToVisible) {
|
|
71
|
+
visibleChips.push(renderFilterTitle(title));
|
|
72
|
+
titleAddedToVisible = true;
|
|
73
|
+
}
|
|
74
|
+
visibleChips.push(chip);
|
|
75
|
+
visibleCount++;
|
|
76
|
+
} else {
|
|
77
|
+
if (!titleAddedToHidden) {
|
|
78
|
+
hiddenElements.push(renderFilterTitle(title));
|
|
79
|
+
titleAddedToHidden = true;
|
|
80
|
+
}
|
|
81
|
+
hiddenElements.push(chip);
|
|
82
|
+
hiddenChips.push(chip);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
40
88
|
for (const filter of props.enabledCommonFilters) {
|
|
41
89
|
const chip = renderCommonChip(filter, props);
|
|
42
90
|
|
|
@@ -6,6 +6,7 @@ import { connectedProperty } from "../../../../infrastructure/state/connected-pr
|
|
|
6
6
|
import { activityHistorySearchStringSelector } from "../../../search/selectors";
|
|
7
7
|
import { areCustomFiltersActive } from "../../custom-filters/selectors";
|
|
8
8
|
import { areCommonFiltersActive } from "../../common-filters/selectors";
|
|
9
|
+
import { areDiagnosticFiltersActive } from "../../diagnostic-filters/selectors";
|
|
9
10
|
|
|
10
11
|
//@ts-ignore
|
|
11
12
|
@customElement("active-filters-header")
|
|
@@ -26,4 +27,7 @@ export class ActiveFiltersHeader extends LitElement {
|
|
|
26
27
|
|
|
27
28
|
@connectedProperty(areCommonFiltersActive)
|
|
28
29
|
areCommonFiltersActive: boolean;
|
|
30
|
+
|
|
31
|
+
@connectedProperty(areDiagnosticFiltersActive)
|
|
32
|
+
areDiagnosticFiltersActive: boolean;
|
|
29
33
|
}
|
|
@@ -4,7 +4,11 @@ import { PrimariaApi } from "../../../../../../api/api";
|
|
|
4
4
|
import { lazyInject } from "../../../../infrastructure/ioc/container";
|
|
5
5
|
import { TYPES } from "../../../../infrastructure/ioc/types";
|
|
6
6
|
import { connectedProperty } from "../../../../infrastructure/state/connected-property";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
IActivityHistoryCommonFilter,
|
|
9
|
+
IActivityHistoryCustomFilterGroup,
|
|
10
|
+
IActivityHistoryDiagnosticsFilter,
|
|
11
|
+
} from "../../model";
|
|
8
12
|
import styles from "./styles.css?inline";
|
|
9
13
|
import { template } from "./template";
|
|
10
14
|
import { SetCustomFilterGroup } from "../../custom-filters/set-custom-filter-group/request";
|
|
@@ -12,6 +16,11 @@ import { SetCommonFilter } from "../../common-filters/set-common-filter/request"
|
|
|
12
16
|
import { activityHistoryCommonFiltersSelector } from "../../common-filters/selectors";
|
|
13
17
|
import { SetCustomFilterValue } from "../../custom-filters/set-custom-filter-value/request";
|
|
14
18
|
import { customFilterGroupsWithOptionsSelector } from "../../../selectors";
|
|
19
|
+
import {
|
|
20
|
+
diagnosticFilterEnabledValuesSelector,
|
|
21
|
+
diagnosticFilterSelector,
|
|
22
|
+
} from "../../diagnostic-filters/selectors";
|
|
23
|
+
import { SetDiagnosticFiltersCommand } from "../../diagnostic-filters/set/request";
|
|
15
24
|
|
|
16
25
|
//@ts-ignore
|
|
17
26
|
@customElement("activity-history-filters")
|
|
@@ -30,6 +39,12 @@ export class ActivityHistoryFilters extends LitElement {
|
|
|
30
39
|
@connectedProperty(customFilterGroupsWithOptionsSelector)
|
|
31
40
|
customFilterGroups: IActivityHistoryCustomFilterGroup[];
|
|
32
41
|
|
|
42
|
+
@connectedProperty(diagnosticFilterSelector)
|
|
43
|
+
diagnosticFilter: IActivityHistoryDiagnosticsFilter;
|
|
44
|
+
|
|
45
|
+
@connectedProperty(diagnosticFilterEnabledValuesSelector)
|
|
46
|
+
diagnosticFilterEnabledValues: string[];
|
|
47
|
+
|
|
33
48
|
@lazyInject(TYPES.primaryApi)
|
|
34
49
|
api: PrimariaApi;
|
|
35
50
|
|
|
@@ -72,4 +87,9 @@ export class ActivityHistoryFilters extends LitElement {
|
|
|
72
87
|
}),
|
|
73
88
|
);
|
|
74
89
|
}
|
|
90
|
+
|
|
91
|
+
_handleDiagnosticFilterChange(e: CustomEvent) {
|
|
92
|
+
const selectedValues = e.detail.selectedValue;
|
|
93
|
+
this.api.broker.send(new SetDiagnosticFiltersCommand(selectedValues));
|
|
94
|
+
}
|
|
75
95
|
}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
IActivityHistoryCommonFilter,
|
|
7
7
|
IActivityHistoryCustomFilter,
|
|
8
8
|
IActivityHistoryCustomFilterGroup,
|
|
9
|
-
|
|
9
|
+
IActivityHistoryFilter,
|
|
10
10
|
} from "../../model";
|
|
11
11
|
import { translate } from "../../../../localization";
|
|
12
12
|
|
|
@@ -27,7 +27,7 @@ const filterTemplates = {
|
|
|
27
27
|
const getFilterTemplate = (
|
|
28
28
|
filter: IActivityHistoryCommonFilter | IActivityHistoryCustomFilter,
|
|
29
29
|
onChangeValue: (...args: any[]) => void,
|
|
30
|
-
filterGroup?:
|
|
30
|
+
filterGroup?: IActivityHistoryFilter,
|
|
31
31
|
option?: { id: string; title: string },
|
|
32
32
|
) => {
|
|
33
33
|
const isCustom = !!filterGroup?.id && !!option;
|
|
@@ -62,6 +62,15 @@ export const template = (props: ActivityHistoryFilters) =>
|
|
|
62
62
|
? html`<div class="filters-sidebar-opened">${translate("filters.filters")}<dss-icon-button ?hidden=${props.wrapperMaximized} @click=${() => props._toggleFilters()} size="md" variant="primary" icon="keyboard_double_arrow_left"></dss-icon-button></div>
|
|
63
63
|
<div class="filter-container">
|
|
64
64
|
${repeat(props.commonFilters, (filter: IActivityHistoryCommonFilter) => html`<div class="filter">${getFilterTemplate(filter, props._onChangeCommonFilterValue.bind(props))}</div> `)}
|
|
65
|
+
${
|
|
66
|
+
props.diagnosticFilter &&
|
|
67
|
+
html`<div class="filter">
|
|
68
|
+
<dss-input-dropdown icon="" multiple dropdownFixed type="default" .elements=${props.diagnosticFilter?.values} @onInputDropdownChange=${props._handleDiagnosticFilterChange} .selectedValue=${props.diagnosticFilterEnabledValues}>
|
|
69
|
+
<label slot="label" for="diagnostic-filter">${props.diagnosticFilter.title}</label>
|
|
70
|
+
<input id="diagnostic-filter" slot="input" type="text" class="dss-input" autocomplete="off"/>
|
|
71
|
+
</dss-input-dropdown>
|
|
72
|
+
</div>`
|
|
73
|
+
}
|
|
65
74
|
${repeat(
|
|
66
75
|
props.customFilterGroups,
|
|
67
76
|
(group: IActivityHistoryCustomFilterGroup) => html`
|
|
@@ -16,12 +16,22 @@ import {
|
|
|
16
16
|
bootstrapSetCustomFilterValue,
|
|
17
17
|
teardownSetCustomFilterValue,
|
|
18
18
|
} from "./custom-filters/set-custom-filter-value/bootstrapper";
|
|
19
|
+
import {
|
|
20
|
+
bootstrapAddDiagnosticFilter,
|
|
21
|
+
teardownAddDiagnosticFilter,
|
|
22
|
+
} from "./diagnostic-filters/add/bootstrapper";
|
|
23
|
+
import {
|
|
24
|
+
bootstrapSetDiagnosticFilter,
|
|
25
|
+
teardownSetDiagnosticFilter,
|
|
26
|
+
} from "./diagnostic-filters/set/bootstrapper";
|
|
19
27
|
|
|
20
28
|
export const bootstrapFilters = (broker: BrokerExtensions) => {
|
|
21
29
|
bootstrapSetCommonFilter(broker);
|
|
22
30
|
bootstrapAddCustomFilter(broker);
|
|
23
31
|
bootstrapSetCustomFilterGroup(broker);
|
|
24
32
|
bootstrapSetCustomFilterValue(broker);
|
|
33
|
+
bootstrapAddDiagnosticFilter(broker);
|
|
34
|
+
bootstrapSetDiagnosticFilter(broker);
|
|
25
35
|
};
|
|
26
36
|
|
|
27
37
|
export const teardownFilters = () => {
|
|
@@ -29,4 +39,6 @@ export const teardownFilters = () => {
|
|
|
29
39
|
teardownAddCustomFilter();
|
|
30
40
|
teardownSetCustomFilterGroup();
|
|
31
41
|
teardownSetCustomFilterValue();
|
|
42
|
+
teardownAddDiagnosticFilter();
|
|
43
|
+
teardownSetDiagnosticFilter();
|
|
32
44
|
};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { OwnSpec } from "../../domain/specs/own-spec";
|
|
2
2
|
import { RelevantSpec } from "../../domain/specs/relevant-spec";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
IActivityHistoryCommonFilterGroup,
|
|
5
|
+
ActivityHistoryFilterType,
|
|
6
|
+
relevantFilterId,
|
|
7
|
+
ownFilterId,
|
|
8
|
+
} from "../model";
|
|
4
9
|
|
|
5
10
|
export const commonFilters: IActivityHistoryCommonFilterGroup[] = [
|
|
6
11
|
{
|
|
@@ -8,14 +13,14 @@ export const commonFilters: IActivityHistoryCommonFilterGroup[] = [
|
|
|
8
13
|
title: "Comuns",
|
|
9
14
|
filters: [
|
|
10
15
|
{
|
|
11
|
-
id:
|
|
16
|
+
id: relevantFilterId,
|
|
12
17
|
title: "Veure rellevants",
|
|
13
18
|
spec: RelevantSpec,
|
|
14
19
|
enabled: false,
|
|
15
20
|
type: ActivityHistoryFilterType.Switch,
|
|
16
21
|
},
|
|
17
22
|
{
|
|
18
|
-
id:
|
|
23
|
+
id: ownFilterId,
|
|
19
24
|
title: "Veure meus",
|
|
20
25
|
spec: OwnSpec,
|
|
21
26
|
enabled: false,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
-
import {
|
|
2
|
+
import { IActivityHistoryCustomFilterGroup } from "../../model";
|
|
3
3
|
|
|
4
4
|
export function addCustomFiltersReducer(
|
|
5
5
|
state,
|
|
6
|
-
action: PayloadAction<
|
|
6
|
+
action: PayloadAction<IActivityHistoryCustomFilterGroup>,
|
|
7
7
|
) {
|
|
8
8
|
state.filters = [...state.filters, action.payload];
|
|
9
9
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IActivityHistoryCustomFilterGroup } from "../../model";
|
|
2
2
|
|
|
3
3
|
export class AddCustomFiltersCommand {
|
|
4
|
-
constructor(public payload:
|
|
4
|
+
constructor(public payload: IActivityHistoryCustomFilterGroup) {}
|
|
5
5
|
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { createSelector } from "@reduxjs/toolkit";
|
|
2
2
|
import {
|
|
3
|
-
IActivityHistoryCustomFilter,
|
|
4
3
|
IActivityHistoryCustomFilterGroup,
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
IActivityHistoryFilter,
|
|
5
|
+
isCustomFilter,
|
|
7
6
|
} from "../model";
|
|
8
7
|
import { activityHistoryFiltersSelector } from "../selectors";
|
|
9
8
|
|
|
10
9
|
export const activityHistoryCustomFilterGroupsSelector = createSelector(
|
|
11
10
|
activityHistoryFiltersSelector,
|
|
12
|
-
(filters:
|
|
13
|
-
const customFilters = filters.filter(
|
|
11
|
+
(filters: IActivityHistoryFilter[]) => {
|
|
12
|
+
const customFilters = filters.filter(isCustomFilter);
|
|
14
13
|
return customFilters.sort(sortBySortProperty);
|
|
15
14
|
},
|
|
16
15
|
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BrokerExtensions } from "@primaria/plugins-core";
|
|
2
|
+
import { BrokerDisposableHandler } from "../../../../../../api/broker/primaria-broker";
|
|
3
|
+
import { AddDiagnosticFiltersHandler } from "./handler";
|
|
4
|
+
import { AddDiagnosticFiltersCommand } from "./request";
|
|
5
|
+
|
|
6
|
+
let request: BrokerDisposableHandler;
|
|
7
|
+
|
|
8
|
+
export const bootstrapAddDiagnosticFilter = (broker: BrokerExtensions) => {
|
|
9
|
+
request = broker.registerRequest(AddDiagnosticFiltersCommand, AddDiagnosticFiltersHandler);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const teardownAddDiagnosticFilter = () => {
|
|
13
|
+
request?.dispose();
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { StoreBaseHandler } from "../../../../infrastructure/base-handlers";
|
|
2
|
+
import { addDiagnosticFilters } from "./actions";
|
|
3
|
+
import { AddDiagnosticFiltersCommand } from "./request";
|
|
4
|
+
|
|
5
|
+
export class AddDiagnosticFiltersHandler extends StoreBaseHandler {
|
|
6
|
+
async handle(request: AddDiagnosticFiltersCommand) {
|
|
7
|
+
try {
|
|
8
|
+
//TODO ensure are valid filters
|
|
9
|
+
this.store.dispatch(addDiagnosticFilters(request.payload));
|
|
10
|
+
} catch (e) {
|
|
11
|
+
console.log(e.message);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -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,30 @@
|
|
|
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, index, self) => index === self.findIndex((d) => d.codi === diag.codi));
|
|
11
|
+
|
|
12
|
+
if (allDiagnostics.length > 0) {
|
|
13
|
+
const newDiagnosticFilter = {
|
|
14
|
+
id: diagnosticsfilterId,
|
|
15
|
+
title: "Diagnòstics",
|
|
16
|
+
values: mapArrayToLabelValue(allDiagnostics, "descripcio", "codi"),
|
|
17
|
+
enabledValues: [],
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
store.dispatch(addDiagnosticFilters(newDiagnosticFilter));
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export function mergeDiagnosticOptionsByCodi(array1, array2) {
|
|
25
|
+
const existingCodis = new Set(array1.map((obj) => obj.codi));
|
|
26
|
+
|
|
27
|
+
const newObjects = array2.filter((obj) => !existingCodis.has(obj.codi));
|
|
28
|
+
|
|
29
|
+
return [...array1, ...newObjects];
|
|
30
|
+
}
|
|
@@ -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
|
+
}
|