@uxland/primary-shell 5.4.7 → 5.6.0
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 +11766 -11398
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +833 -750
- package/dist/index.umd.cjs.map +1 -1
- package/dist/primary/shell/src/UI/components/primaria-shell/shell-header/header-divider/header-divider.d.ts +6 -0
- package/dist/primary/shell/src/UI/components/primaria-shell/shell-header/header-divider/template.d.ts +3 -0
- package/dist/primary/shell/src/UI/components/primaria-shell/shell-header/shell-header.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-busy/busy-component/component.d.ts +2 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/add/handle-busy/selectors.d.ts +1 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/up-filter-spec.d.ts +8 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/domain/specs/up-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 +3 -1
- 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/model.d.ts +13 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/slice.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/actions.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/bootstrapper.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/handler.d.ts +6 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/reducer.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/reducer.test.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/request.d.ts +6 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/handle-add-up-options-from-item.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/selectors.d.ts +185 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/actions.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/bootstrapper.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/handler.d.ts +6 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/reducer.d.ts +3 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/request.d.ts +4 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/activity-history-main.d.ts +2 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/activity-history-item/selectors.d.ts +60 -0
- package/package.json +2 -2
- package/src/UI/components/bootstrapper.ts +2 -0
- package/src/UI/components/communication-action-menu/template.ts +3 -2
- package/src/UI/components/primaria-shell/shell-header/header-divider/header-divider.ts +13 -0
- package/src/UI/components/primaria-shell/shell-header/header-divider/styles.css +5 -0
- package/src/UI/components/primaria-shell/shell-header/header-divider/template.ts +8 -0
- package/src/UI/components/primaria-shell/shell-header/shell-header.ts +27 -0
- package/src/UI/components/primaria-shell/shell-header/styles.css +4 -4
- package/src/UI/components/primaria-shell/shell-header/template.ts +2 -0
- package/src/UI/components/primaria-shell/styles.css +6 -1
- package/src/UI/internal-views/handle-views.ts +1 -1
- package/src/UI/internal-views/lower-nav-menu-views.ts +0 -17
- package/src/UI/internal-views/upper-nav-views.ts +32 -6
- 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-busy/busy-component/component.ts +7 -6
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-busy/busy-component/styles.css +11 -14
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-busy/busy-component/template.ts +2 -2
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-busy/selectors.ts +6 -6
- package/src/internal-plugins/activity-history/activity-history-item/add/handle-error/selectors.ts +4 -6
- package/src/internal-plugins/activity-history/activity-history-item/domain/specs/search-string-spec.ts +1 -1
- package/src/internal-plugins/activity-history/activity-history-item/domain/specs/up-filter-spec.test.ts +38 -0
- package/src/internal-plugins/activity-history/activity-history-item/domain/specs/up-filter-spec.ts +18 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/active-filters-badges.ts +21 -6
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/active-filters-badges/template.ts +65 -6
- 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 +16 -10
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/styles.css +1 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/UI/activity-history-filters/template.ts +53 -16
- package/src/internal-plugins/activity-history/activity-history-item/filter/bootstrapper.ts +6 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/custom-filters/reset-custom-filter/reducer.ts +1 -2
- package/src/internal-plugins/activity-history/activity-history-item/filter/model.ts +14 -8
- package/src/internal-plugins/activity-history/activity-history-item/filter/slice.ts +4 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/actions.ts +3 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/bootstrapper.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/handler.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/reducer.test.ts +93 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/reducer.ts +22 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/request.ts +5 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/handle-add-up-options-from-item.ts +20 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/selectors.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/actions.ts +3 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/bootstrapper.ts +14 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/handler.ts +13 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/reducer.ts +11 -0
- package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/request.ts +3 -0
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/activity-history-main.ts +11 -9
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/template.ts +2 -2
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/activity-history-timeline.ts +3 -6
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/template.ts +1 -1
- package/src/internal-plugins/activity-history/activity-history-item/selectors.ts +10 -23
- package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.ts +3 -1
- package/src/locales.ts +3 -6
|
@@ -22,6 +22,12 @@ const filterTemplates = {
|
|
|
22
22
|
<input slot="input" id="checkboxStory-${id}" type="checkbox" ?disabled=${!isEnabled}>
|
|
23
23
|
<label slot="label" for="checkboxStory-${id}">${title}</label>
|
|
24
24
|
</dss-checkbox>`,
|
|
25
|
+
|
|
26
|
+
[ActivityHistoryFilterType.Dropdown]: (id, title, handleChange, isSelected, isEnabled) => html`
|
|
27
|
+
<dss-input-dropdown type="default" .checked=${isSelected} @onChange=${(e) => handleChange(e)}>
|
|
28
|
+
<input slot="input" id="dropdownStory-${id}" type="text" ?disabled=${!isEnabled}>
|
|
29
|
+
<label slot="label" for="dropdownStory-${id}">${title}</label>
|
|
30
|
+
</dss-input-dropdown>`,
|
|
25
31
|
};
|
|
26
32
|
|
|
27
33
|
const getFilterTemplate = (
|
|
@@ -33,7 +39,7 @@ const getFilterTemplate = (
|
|
|
33
39
|
const isCustom = !!filterGroup?.id && !!option;
|
|
34
40
|
//const id = isCustom ? `${filterGroupId}-${filter.id}-${option.id}` : filter.id;
|
|
35
41
|
const id = crypto.randomUUID();
|
|
36
|
-
const title = isCustom ? option.title : filter.title;
|
|
42
|
+
const title = isCustom ? option.title || option.id : filter.title;
|
|
37
43
|
|
|
38
44
|
const handleChange = (e) => {
|
|
39
45
|
if (filter.singleOption) onChangeValue(filterGroup?.id, filter.id, null, e.detail);
|
|
@@ -61,12 +67,21 @@ export const template = (props: ActivityHistoryFilters) =>
|
|
|
61
67
|
${
|
|
62
68
|
props.diagnosticFilter &&
|
|
63
69
|
html`<div class="filter">
|
|
64
|
-
<dss-input-dropdown icon="" multiple dropdownFixed type="default" .elements=${props.diagnosticFilter?.values} @onInputDropdownChange=${props._handleDiagnosticFilterChange} .selectedValue=${props.diagnosticFilterEnabledValues} selectorStyle=${"max-height: 450px"}>
|
|
70
|
+
<dss-input-dropdown inputsize="md" icon="" multiple dropdownFixed type="default" .elements=${props.diagnosticFilter?.values} @onInputDropdownChange=${props._handleDiagnosticFilterChange} .selectedValue=${props.diagnosticFilterEnabledValues} selectorStyle=${"max-height: 450px"}>
|
|
65
71
|
<label slot="label" for="diagnostic-filter">${props.diagnosticFilter.title}</label>
|
|
66
72
|
<input id="diagnostic-filter" slot="input" type="text" class="dss-input" autocomplete="off"/>
|
|
67
73
|
</dss-input-dropdown>
|
|
68
74
|
</div>`
|
|
69
75
|
}
|
|
76
|
+
${
|
|
77
|
+
props.upFilter &&
|
|
78
|
+
html`<div class="filter">
|
|
79
|
+
<dss-input-dropdown inputsize="md" icon="" multiple dropdownFixed type="default" .elements=${props.upFilter?.values} @onInputDropdownChange=${props._handleUpFilterChange} .selectedValue=${props.upFilterEnabledValues} selectorStyle=${"max-height: 450px"}>
|
|
80
|
+
<label slot="label" for="up-filter">${props.upFilter.title}</label>
|
|
81
|
+
<input id="up-filter" slot="input" type="text" class="dss-input" autocomplete="off"/>
|
|
82
|
+
</dss-input-dropdown>
|
|
83
|
+
</div>`
|
|
84
|
+
}
|
|
70
85
|
${repeat(
|
|
71
86
|
props.customFilterGroups,
|
|
72
87
|
(group: IActivityHistoryCustomFilterGroup) => html`
|
|
@@ -91,17 +106,39 @@ const customFilterTemplate = (
|
|
|
91
106
|
filter: IActivityHistoryCustomFilter,
|
|
92
107
|
props: ActivityHistoryFilters,
|
|
93
108
|
group: IActivityHistoryCustomFilterGroup,
|
|
94
|
-
) =>
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
109
|
+
) => {
|
|
110
|
+
if (filter.type === ActivityHistoryFilterType.Dropdown) {
|
|
111
|
+
const elements = filter?.options.map(option => ({ value: option.id, label: option.title }));
|
|
112
|
+
return html`
|
|
113
|
+
<dss-input-dropdown
|
|
114
|
+
inputsize="md"
|
|
115
|
+
icon=""
|
|
116
|
+
multiple
|
|
117
|
+
dropdownFixed
|
|
118
|
+
type="default"
|
|
119
|
+
.elements=${elements}
|
|
120
|
+
@onInputDropdownChange=${(e) =>
|
|
121
|
+
props._onChangeCustomFilterValue(group.id, filter.id, e.detail.selectedValue[e.detail.selectedValue.length-1], true)
|
|
122
|
+
}
|
|
123
|
+
.selectedValue=${filter.enabledValues}
|
|
124
|
+
selectorStyle="max-height: 450px"
|
|
125
|
+
>
|
|
126
|
+
<label slot="label">${filter.title}</label>
|
|
127
|
+
<input slot="input" type="text" class="dss-input" autocomplete="off" />
|
|
128
|
+
</dss-input-dropdown>
|
|
129
|
+
`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return filter.singleOption
|
|
133
|
+
? getFilterTemplate(filter, props._onChangeCustomFilterValue.bind(props), group)
|
|
134
|
+
: html`
|
|
135
|
+
<primaria-accordion isOpen>
|
|
136
|
+
<div class="custom-filter-title" slot="title">${filter.title}</div>
|
|
137
|
+
<div class="custom-filter-content" slot="content">
|
|
138
|
+
${filter.options.map(option =>
|
|
139
|
+
getFilterTemplate(filter, props._onChangeCustomFilterValue.bind(props), group, option)
|
|
140
|
+
)}
|
|
141
|
+
</div>
|
|
142
|
+
</primaria-accordion>
|
|
143
|
+
`;
|
|
144
|
+
};
|
|
@@ -14,6 +14,8 @@ import { bootstrapAddDiagnosticFilter, teardownAddDiagnosticFilter } from "./dia
|
|
|
14
14
|
import { bootstrapSetDiagnosticFilter, teardownSetDiagnosticFilter } from "./diagnostic-filters/set/bootstrapper";
|
|
15
15
|
import { bootstrapResetCommonFilter, teardownResetCommonFilter } from "./common-filters/reset-common-filter/bootstrapper";
|
|
16
16
|
import { bootstrapResetCustomFilter, teardownResetCustomFilter } from "./custom-filters/reset-custom-filter/bootstrapper";
|
|
17
|
+
import { bootstrapAddUpFilter, teardownAddUpFilter } from "./up-filters/add/bootstrapper";
|
|
18
|
+
import { bootstrapSetUpFilter, teardownSetUpFilter } from "./up-filters/set/bootstrapper";
|
|
17
19
|
|
|
18
20
|
export const bootstrapFilters = (broker: BrokerExtensions) => {
|
|
19
21
|
bootstrapSetCommonFilter(broker);
|
|
@@ -24,6 +26,8 @@ export const bootstrapFilters = (broker: BrokerExtensions) => {
|
|
|
24
26
|
bootstrapSetDiagnosticFilter(broker);
|
|
25
27
|
bootstrapResetCommonFilter(broker);
|
|
26
28
|
bootstrapResetCustomFilter(broker);
|
|
29
|
+
bootstrapAddUpFilter(broker);
|
|
30
|
+
bootstrapSetUpFilter(broker);
|
|
27
31
|
};
|
|
28
32
|
|
|
29
33
|
export const teardownFilters = () => {
|
|
@@ -35,4 +39,6 @@ export const teardownFilters = () => {
|
|
|
35
39
|
teardownSetDiagnosticFilter();
|
|
36
40
|
teardownResetCommonFilter();
|
|
37
41
|
teardownResetCustomFilter();
|
|
42
|
+
teardownAddUpFilter();
|
|
43
|
+
teardownSetUpFilter();
|
|
38
44
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export function resetCustomFilterValuesReducer(state) {
|
|
2
2
|
state.filters = state.filters.map((f) => {
|
|
3
|
-
if (f.id !== "common" && f.id !== "history-diagnostics") {
|
|
4
|
-
console.log("filter", f);
|
|
3
|
+
if (f.id !== "common" && f.id !== "history-diagnostics" && f.id !== "history-up") {
|
|
5
4
|
return {
|
|
6
5
|
...f,
|
|
7
6
|
filters: f.filters.map((ff) => ({ ...ff, enabled: false, enabledValues: [] })),
|
|
@@ -6,6 +6,7 @@ type Constructor<T> = new (...args: any[]) => T;
|
|
|
6
6
|
export enum ActivityHistoryFilterType {
|
|
7
7
|
Switch = "switch",
|
|
8
8
|
Checkbox = "checkbox",
|
|
9
|
+
Dropdown = "dropdown",
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export enum ActivityHistoryFilterOperation {
|
|
@@ -56,14 +57,11 @@ export interface IActivityHistoryCustomFilter {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
export const isCommonFilterGroup = (group: IActivityHistoryFilter) => group.id === "common";
|
|
59
|
-
export const isNotCommonFilterGroup = (group: IActivityHistoryFilter) =>
|
|
60
|
-
|
|
61
|
-
export const
|
|
62
|
-
|
|
63
|
-
export const
|
|
64
|
-
!isDiagnosticFilter(filter);
|
|
65
|
-
export const isCustomFilter = (filter: IActivityHistoryFilter) =>
|
|
66
|
-
!isCommonFilterGroup(filter) && !isDiagnosticFilter(filter);
|
|
60
|
+
export const isNotCommonFilterGroup = (group: IActivityHistoryFilter) => !isCommonFilterGroup(group);
|
|
61
|
+
export const isDiagnosticFilter = (filter: IActivityHistoryFilter) => filter.id === diagnosticsfilterId;
|
|
62
|
+
export const isNotDiagnosticFilter = (filter: IActivityHistoryFilter) => !isDiagnosticFilter(filter);
|
|
63
|
+
export const isCustomFilter = (filter: IActivityHistoryFilter) => !isCommonFilterGroup(filter) && !isDiagnosticFilter(filter) && !isUpFilter(filter);
|
|
64
|
+
export const isUpFilter = (filter: IActivityHistoryFilter) => filter.id === upFilterId;
|
|
67
65
|
export interface IActivityHistoryDiagnosticsFilter {
|
|
68
66
|
id: string;
|
|
69
67
|
title: string;
|
|
@@ -71,6 +69,14 @@ export interface IActivityHistoryDiagnosticsFilter {
|
|
|
71
69
|
enabledValues: string[];
|
|
72
70
|
}
|
|
73
71
|
|
|
72
|
+
export interface IActivityHistoryUpFilter {
|
|
73
|
+
id: string;
|
|
74
|
+
title: string;
|
|
75
|
+
values: { label: string; value: string }[];
|
|
76
|
+
enabledValues: string[];
|
|
77
|
+
}
|
|
78
|
+
|
|
74
79
|
export const diagnosticsfilterId = "history-diagnostics";
|
|
75
80
|
export const relevantFilterId = "history-relevant";
|
|
76
81
|
export const ownFilterId = "history-own";
|
|
82
|
+
export const upFilterId = "history-up";
|
|
@@ -10,6 +10,8 @@ import { addDiagnosticFiltersReducer } from "./diagnostic-filters/add/reducer";
|
|
|
10
10
|
import { setDiagnosticFilterValuesReducer } from "./diagnostic-filters/set/reducer";
|
|
11
11
|
import { resetCommonFilterValuesReducer } from "./common-filters/reset-common-filter/reducer";
|
|
12
12
|
import { resetCustomFilterValuesReducer } from "./custom-filters/reset-custom-filter/reducer";
|
|
13
|
+
import { addUpFiltersReducer } from "./up-filters/add/reducer";
|
|
14
|
+
import { setUpFilterValuesReducer } from "./up-filters/set/reducer";
|
|
13
15
|
|
|
14
16
|
export const activityHistoryFiltersSlice = createSlice({
|
|
15
17
|
name: "activity-history-filters",
|
|
@@ -27,5 +29,7 @@ export const activityHistoryFiltersSlice = createSlice({
|
|
|
27
29
|
resetCustomFilterValues: resetCustomFilterValuesReducer,
|
|
28
30
|
addDiagnosticFilters: addDiagnosticFiltersReducer,
|
|
29
31
|
setDiagnosticFilterValues: setDiagnosticFilterValuesReducer,
|
|
32
|
+
addUpFilters: addUpFiltersReducer,
|
|
33
|
+
setUpFilterValues: setUpFilterValuesReducer,
|
|
30
34
|
},
|
|
31
35
|
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BrokerExtensions } from "@primaria/plugins-core";
|
|
2
|
+
import { BrokerDisposableHandler } from "../../../../../../api/broker/primaria-broker";
|
|
3
|
+
import { AddUpFiltersHandler } from "./handler";
|
|
4
|
+
import { AddUpFiltersCommand } from "./request";
|
|
5
|
+
|
|
6
|
+
let request: BrokerDisposableHandler;
|
|
7
|
+
|
|
8
|
+
export const bootstrapAddUpFilter = (broker: BrokerExtensions) => {
|
|
9
|
+
request = broker.registerRequest(AddUpFiltersCommand, AddUpFiltersHandler);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const teardownAddUpFilter = () => {
|
|
13
|
+
request?.dispose();
|
|
14
|
+
};
|
package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/handler.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { StoreBaseHandler } from "../../../../infrastructure/base-handlers";
|
|
2
|
+
import { addUpFilters } from "./actions";
|
|
3
|
+
import { AddUpFiltersCommand } from "./request";
|
|
4
|
+
|
|
5
|
+
export class AddUpFiltersHandler extends StoreBaseHandler {
|
|
6
|
+
async handle(request: AddUpFiltersCommand) {
|
|
7
|
+
try {
|
|
8
|
+
//TODO ensure are valid filters
|
|
9
|
+
this.store.dispatch(addUpFilters(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 { IActivityHistoryUpFilter, isUpFilter } from "../../model";
|
|
4
|
+
import { addUpFiltersReducer } from "./reducer";
|
|
5
|
+
|
|
6
|
+
vi.mock("../../model", () => ({
|
|
7
|
+
isUpFilter: vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
describe("addUpFiltersReducer", () => {
|
|
11
|
+
let initialState: { filters: IActivityHistoryUpFilter[] };
|
|
12
|
+
|
|
13
|
+
const baseFilter = (values: any[]): IActivityHistoryUpFilter => ({
|
|
14
|
+
id: "up",
|
|
15
|
+
title: "UP",
|
|
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
|
+
addUpFilters: addUpFiltersReducer,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const { addUpFilters } = slice.actions;
|
|
36
|
+
const reducer = slice.reducer;
|
|
37
|
+
|
|
38
|
+
it("should add a new up filter if none exists", () => {
|
|
39
|
+
(isUpFilter as any).mockReturnValue(false);
|
|
40
|
+
|
|
41
|
+
const newUp = baseFilter([{ label: "0773", value: "0773" }]);
|
|
42
|
+
|
|
43
|
+
const nextState = reducer(initialState, addUpFilters(newUp));
|
|
44
|
+
|
|
45
|
+
expect(nextState.filters).toHaveLength(1);
|
|
46
|
+
expect(nextState.filters[0]).toEqual(newUp);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("should merge values if a up filter already exists", () => {
|
|
50
|
+
const existingFilter = baseFilter([{ label: "0773", value: "0773" }]);
|
|
51
|
+
initialState.filters = [existingFilter];
|
|
52
|
+
|
|
53
|
+
(isUpFilter as any).mockImplementation((f) => f.id === "up");
|
|
54
|
+
|
|
55
|
+
const incomingFilter = baseFilter([{ label: "0444", value: "0444" }]);
|
|
56
|
+
|
|
57
|
+
const nextState = reducer(initialState, addUpFilters(incomingFilter));
|
|
58
|
+
|
|
59
|
+
expect(nextState.filters).toHaveLength(1);
|
|
60
|
+
expect(nextState.filters[0].values).toContainEqual({ label: "0773", value: "0773" });
|
|
61
|
+
expect(nextState.filters[0].values).toContainEqual({ label: "0444", value: "0444" });
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("should avoid duplicate values when merging", () => {
|
|
65
|
+
const existingFilter = baseFilter([{ label: "0444", value: "0444" }]);
|
|
66
|
+
initialState.filters = [existingFilter];
|
|
67
|
+
|
|
68
|
+
(isUpFilter as any).mockImplementation((f) => f.id === "up");
|
|
69
|
+
|
|
70
|
+
const incomingFilter = baseFilter([{ label: "0444", value: "0444" }]);
|
|
71
|
+
|
|
72
|
+
const nextState = reducer(initialState, addUpFilters(incomingFilter));
|
|
73
|
+
|
|
74
|
+
expect(nextState.filters).toHaveLength(1);
|
|
75
|
+
expect(nextState.filters[0].values).toEqual([{ label: "0444", value: "0444" }]);
|
|
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
|
+
(isUpFilter as any).mockReturnValue(true);
|
|
86
|
+
|
|
87
|
+
const incomingFilter = baseFilter([{ label: "B", value: "2" }]);
|
|
88
|
+
|
|
89
|
+
const nextState = reducer(initialState, addUpFilters(incomingFilter));
|
|
90
|
+
|
|
91
|
+
expect(nextState.filters[0].enabledValues).toEqual(["1"]); // no se sobreescribe
|
|
92
|
+
});
|
|
93
|
+
});
|
package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/add/reducer.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
+
import { IActivityHistoryUpFilter, isUpFilter } from "../../model";
|
|
3
|
+
|
|
4
|
+
export function addUpFiltersReducer(state, action: PayloadAction<IActivityHistoryUpFilter>) {
|
|
5
|
+
const index = state.filters.findIndex(isUpFilter);
|
|
6
|
+
|
|
7
|
+
if (index === -1) {
|
|
8
|
+
state.filters.push(action.payload);
|
|
9
|
+
} else {
|
|
10
|
+
const existing = state.filters[index];
|
|
11
|
+
|
|
12
|
+
const mergedValues = [
|
|
13
|
+
...existing.values,
|
|
14
|
+
...action.payload.values.filter((v) => !existing.values.some((ev) => ev.value === v.value)),
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
state.filters[index] = {
|
|
18
|
+
...existing,
|
|
19
|
+
values: mergedValues,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mapArrayToLabelValue } from "@primaria/plugins-core";
|
|
2
|
+
import { Store } from "@reduxjs/toolkit";
|
|
3
|
+
import { IActivityHistoryItem } from "../../domain/model";
|
|
4
|
+
import { upFilterId } from "../model";
|
|
5
|
+
import { addUpFilters } from "./add/actions";
|
|
6
|
+
|
|
7
|
+
export const handleAddUpFilter = (items: IActivityHistoryItem[], store: Store) => {
|
|
8
|
+
const allUps = items.flatMap((item) => item.up ?? []).filter((up, index, self) => index === self.findIndex((u) => u.id === up.id));
|
|
9
|
+
|
|
10
|
+
if (allUps.length > 0) {
|
|
11
|
+
const newUpFilter = {
|
|
12
|
+
id: upFilterId,
|
|
13
|
+
title: "UP",
|
|
14
|
+
values: mapArrayToLabelValue(allUps, "description", "id"),
|
|
15
|
+
enabledValues: [],
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
store.dispatch(addUpFilters(newUpFilter));
|
|
19
|
+
}
|
|
20
|
+
};
|
package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/selectors.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createSelector } from "@reduxjs/toolkit";
|
|
2
|
+
import { IActivityHistoryFilter, IActivityHistoryUpFilter, isUpFilter } from "../model";
|
|
3
|
+
import { activityHistoryFiltersSelector } from "../selectors";
|
|
4
|
+
|
|
5
|
+
export const upFilterSelector = createSelector(activityHistoryFiltersSelector, (filters: IActivityHistoryFilter[]) =>
|
|
6
|
+
filters.find(isUpFilter),
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
export const upFilterEnabledValuesSelector = createSelector(
|
|
10
|
+
upFilterSelector,
|
|
11
|
+
(filter: IActivityHistoryUpFilter) => filter?.enabledValues || [],
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
export const areUpFiltersActive = createSelector(upFilterEnabledValuesSelector, (filters) => !!filters.length);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BrokerExtensions } from "@primaria/plugins-core";
|
|
2
|
+
import { BrokerDisposableHandler } from "../../../../../../api/broker/primaria-broker";
|
|
3
|
+
import { SetUpFiltersHandler } from "./handler";
|
|
4
|
+
import { SetUpFiltersCommand } from "./request";
|
|
5
|
+
|
|
6
|
+
let request: BrokerDisposableHandler;
|
|
7
|
+
|
|
8
|
+
export const bootstrapSetUpFilter = (broker: BrokerExtensions) => {
|
|
9
|
+
request = broker.registerRequest(SetUpFiltersCommand, SetUpFiltersHandler);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const teardownSetUpFilter = () => {
|
|
13
|
+
request?.dispose();
|
|
14
|
+
};
|
package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/handler.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StoreBaseHandler } from "../../../../infrastructure/base-handlers";
|
|
2
|
+
import { setUpFilterValues } from "./actions";
|
|
3
|
+
import { SetUpFiltersCommand } from "./request";
|
|
4
|
+
|
|
5
|
+
export class SetUpFiltersHandler extends StoreBaseHandler {
|
|
6
|
+
async handle(request: SetUpFiltersCommand) {
|
|
7
|
+
try {
|
|
8
|
+
this.store.dispatch(setUpFilterValues(request.payload));
|
|
9
|
+
} catch (e) {
|
|
10
|
+
console.log(e.message);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
package/src/internal-plugins/activity-history/activity-history-item/filter/up-filters/set/reducer.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PayloadAction } from "@reduxjs/toolkit";
|
|
2
|
+
import { IActivityHistoryUpFilter, isUpFilter } from "../../model";
|
|
3
|
+
|
|
4
|
+
export function setUpFilterValuesReducer(state, action: PayloadAction<string[]>) {
|
|
5
|
+
state.filters = [...state.filters].map((f) => {
|
|
6
|
+
if (isUpFilter(f)) {
|
|
7
|
+
return { ...f, enabledValues: action.payload } as IActivityHistoryUpFilter;
|
|
8
|
+
}
|
|
9
|
+
return f;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
@@ -9,6 +9,7 @@ import { TYPES } from "../../../../infrastructure/ioc/types";
|
|
|
9
9
|
import { connectedProperty } from "../../../../infrastructure/state/connected-property";
|
|
10
10
|
import { SearchActivityHistoryItems } from "../../../search/request";
|
|
11
11
|
import { activityHistoryCollectionsSelector } from "../../../selectors";
|
|
12
|
+
import { isSomeCollectionLoadedAndOtherLoading, isCollectionInitialState } from "../../../add/handle-busy/selectors";
|
|
12
13
|
import { ActivityHistoryTimeline } from "../timeline/activity-history-timeline";
|
|
13
14
|
import styles from "./styles.css?inline";
|
|
14
15
|
import { template } from "./template";
|
|
@@ -45,6 +46,12 @@ export class ActivityHistoryMain extends PrimariaRegionHost(LitElement) {
|
|
|
45
46
|
@connectedProperty(activityHistoryCollectionsSelector)
|
|
46
47
|
historyItems: any[];
|
|
47
48
|
|
|
49
|
+
@connectedProperty(isCollectionInitialState)
|
|
50
|
+
isCollectionInitialState: boolean;
|
|
51
|
+
|
|
52
|
+
@connectedProperty(isSomeCollectionLoadedAndOtherLoading)
|
|
53
|
+
isSomeCollectionLoadedAndOtherLoading: boolean;
|
|
54
|
+
|
|
48
55
|
_maximize() {
|
|
49
56
|
this.maximized = true;
|
|
50
57
|
}
|
|
@@ -54,12 +61,9 @@ export class ActivityHistoryMain extends PrimariaRegionHost(LitElement) {
|
|
|
54
61
|
}
|
|
55
62
|
|
|
56
63
|
_subscribeEvents() {
|
|
57
|
-
const subscription = this.api.broker.subscribe(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this.maximized = false;
|
|
61
|
-
},
|
|
62
|
-
);
|
|
64
|
+
const subscription = this.api.broker.subscribe(shellEvents.openClinicalMonitoringRequested, () => {
|
|
65
|
+
this.maximized = false;
|
|
66
|
+
});
|
|
63
67
|
this.subscriptions.push(subscription);
|
|
64
68
|
}
|
|
65
69
|
|
|
@@ -88,9 +92,7 @@ export class ActivityHistoryMain extends PrimariaRegionHost(LitElement) {
|
|
|
88
92
|
|
|
89
93
|
scrollToClosestDate(date: Date) {
|
|
90
94
|
const selectedDate = date.getTime();
|
|
91
|
-
const timeline = this.shadowRoot.querySelector(
|
|
92
|
-
"activity-history-timeline",
|
|
93
|
-
) as ActivityHistoryTimeline;
|
|
95
|
+
const timeline = this.shadowRoot.querySelector("activity-history-timeline") as ActivityHistoryTimeline;
|
|
94
96
|
timeline._scrollIntoDate(selectedDate);
|
|
95
97
|
}
|
|
96
98
|
}
|
package/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/template.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { html } from "lit";
|
|
1
|
+
import { html, nothing } from "lit";
|
|
2
2
|
import { ActivityHistoryMain } from "./activity-history-main";
|
|
3
3
|
import { ExportPdf } from "../../../export-to-pdf/request";
|
|
4
4
|
import { translate } from "../../../../localization";
|
|
@@ -35,7 +35,7 @@ export const template = (props: ActivityHistoryMain) =>
|
|
|
35
35
|
<div class="content">
|
|
36
36
|
<active-filters-header></active-filters-header>
|
|
37
37
|
<activity-history-busy></activity-history-busy>
|
|
38
|
-
|
|
38
|
+
${!props.isCollectionInitialState ? html`<activity-history-timeline></activity-history-timeline>` : nothing}
|
|
39
39
|
</div>
|
|
40
40
|
</div>
|
|
41
41
|
</div>`;
|
|
@@ -7,10 +7,7 @@ import { activityHistoryGroupedItems } from "../../../selectors";
|
|
|
7
7
|
import styles from "./styles.css?inline";
|
|
8
8
|
import { template } from "./template";
|
|
9
9
|
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
10
|
-
import {
|
|
11
|
-
isAnyCollectionLoadingWithoutAnyLoaded,
|
|
12
|
-
isSomeCollectionLoadedAndOtherLoading,
|
|
13
|
-
} from "../../../add/handle-busy/selectors";
|
|
10
|
+
import { isSomeCollectionLoadedAndOtherLoading, isCollectionInitialState } from "../../../add/handle-busy/selectors";
|
|
14
11
|
import { virtualizerRef } from "@lit-labs/virtualizer/virtualize.js";
|
|
15
12
|
import "@lit-labs/virtualizer";
|
|
16
13
|
|
|
@@ -44,8 +41,8 @@ export class ActivityHistoryTimeline extends LitElement {
|
|
|
44
41
|
@connectedProperty(activityHistoryGroupedItems)
|
|
45
42
|
historyGroups: IActivityHistoryGroup[];
|
|
46
43
|
|
|
47
|
-
@connectedProperty(
|
|
48
|
-
|
|
44
|
+
@connectedProperty(isCollectionInitialState)
|
|
45
|
+
isCollectionInitialState: boolean;
|
|
49
46
|
|
|
50
47
|
@connectedProperty(isSomeCollectionLoadedAndOtherLoading)
|
|
51
48
|
isSomeCollectionLoadedAndOtherLoading: boolean;
|
package/src/internal-plugins/activity-history/activity-history-item/list/UI/timeline/template.ts
CHANGED
|
@@ -78,7 +78,7 @@ export const template = (props: ActivityHistoryTimeline) => {
|
|
|
78
78
|
`}
|
|
79
79
|
></lit-virtualizer>
|
|
80
80
|
`
|
|
81
|
-
: !props.
|
|
81
|
+
: !props.isCollectionInitialState && !props.isSomeCollectionLoadedAndOtherLoading
|
|
82
82
|
? html`
|
|
83
83
|
<dss-user-feedback
|
|
84
84
|
class="feedback"
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { createSelector } from "@reduxjs/toolkit";
|
|
2
2
|
import { RootState } from "../infrastructure/state/store";
|
|
3
3
|
import { getUniqueObjects } from "../utils/get-unique-values-by-prop-path";
|
|
4
|
-
import {
|
|
5
|
-
IActivityHistoryItem,
|
|
6
|
-
IActivityHistoryItemCollection,
|
|
7
|
-
TSearchActivityHistoryItemPredicate,
|
|
8
|
-
} from "./domain/model";
|
|
4
|
+
import { IActivityHistoryItem, IActivityHistoryItemCollection, TSearchActivityHistoryItemPredicate } from "./domain/model";
|
|
9
5
|
import { CommonFilterSpec } from "./domain/specs/common-filter-spec";
|
|
10
6
|
import { CustomFilterSpec } from "./domain/specs/custom-filter-spec";
|
|
11
7
|
import { SearchStringSpec } from "./domain/specs/search-string-spec";
|
|
@@ -18,9 +14,10 @@ import { sortGroupsByMostRecentDate } from "./list/sort-history-items-by-date/so
|
|
|
18
14
|
import { activityHistorySearchStringSelector } from "./search/selectors";
|
|
19
15
|
import { diagnosticFilterEnabledValuesSelector } from "./filter/diagnostic-filters/selectors";
|
|
20
16
|
import { DiagnosticCodeSpec } from "./domain/specs/diagnostics-filter-spec";
|
|
17
|
+
import { upFilterEnabledValuesSelector } from "./filter/up-filters/selectors";
|
|
18
|
+
import { UpFilterSpec } from "./domain/specs/up-filter-spec";
|
|
21
19
|
|
|
22
|
-
export const activityHistoryCollectionsSelector = (state: RootState) =>
|
|
23
|
-
state.activityHistoryCollections.collections;
|
|
20
|
+
export const activityHistoryCollectionsSelector = (state: RootState) => state.activityHistoryCollections.collections;
|
|
24
21
|
|
|
25
22
|
const mapItemsWithMetadata = (
|
|
26
23
|
items: IActivityHistoryItem[],
|
|
@@ -43,12 +40,7 @@ export const activityHistoryMappedItems = createSelector(
|
|
|
43
40
|
activityHistoryCollectionsSelector,
|
|
44
41
|
(collections: Record<string, IActivityHistoryItemCollection>) => {
|
|
45
42
|
return Object.values(collections).flatMap((collection: IActivityHistoryItemCollection) => {
|
|
46
|
-
return mapItemsWithMetadata(
|
|
47
|
-
collection.items,
|
|
48
|
-
collection.componentFactory,
|
|
49
|
-
collection.id,
|
|
50
|
-
collection.searchPredicate,
|
|
51
|
-
);
|
|
43
|
+
return mapItemsWithMetadata(collection.items, collection.componentFactory, collection.id, collection.searchPredicate);
|
|
52
44
|
});
|
|
53
45
|
},
|
|
54
46
|
);
|
|
@@ -56,10 +48,7 @@ export const activityHistoryMappedItems = createSelector(
|
|
|
56
48
|
export const customFilterGroupsWithOptionsSelector = createSelector(
|
|
57
49
|
activityHistoryCustomFilterGroupsSelector,
|
|
58
50
|
activityHistoryCollectionsSelector,
|
|
59
|
-
(
|
|
60
|
-
filterGroups: IActivityHistoryCustomFilterGroup[],
|
|
61
|
-
collections: Record<string, IActivityHistoryItemCollection>,
|
|
62
|
-
) => {
|
|
51
|
+
(filterGroups: IActivityHistoryCustomFilterGroup[], collections: Record<string, IActivityHistoryItemCollection>) => {
|
|
63
52
|
const result = filterGroups.map((filterGroup: IActivityHistoryCustomFilterGroup) => {
|
|
64
53
|
const collection = collections[filterGroup.id] as IActivityHistoryItemCollection;
|
|
65
54
|
return {
|
|
@@ -69,12 +58,7 @@ export const customFilterGroupsWithOptionsSelector = createSelector(
|
|
|
69
58
|
...f,
|
|
70
59
|
options:
|
|
71
60
|
(!f.singleOption
|
|
72
|
-
? getUniqueObjects<IActivityHistoryItem>(
|
|
73
|
-
collection.items,
|
|
74
|
-
f.propPathValue,
|
|
75
|
-
f.propsPathDescription,
|
|
76
|
-
f.title
|
|
77
|
-
)
|
|
61
|
+
? getUniqueObjects<IActivityHistoryItem>(collection.items, f.propPathValue, f.propsPathDescription, f.title)
|
|
78
62
|
: []) || [],
|
|
79
63
|
};
|
|
80
64
|
}),
|
|
@@ -90,12 +74,14 @@ export const activityHistoryGroupedItems = createSelector(
|
|
|
90
74
|
activityHistoryCommonFiltersSelector,
|
|
91
75
|
activityHistoryCustomFilterGroupsSelector,
|
|
92
76
|
diagnosticFilterEnabledValuesSelector,
|
|
77
|
+
upFilterEnabledValuesSelector,
|
|
93
78
|
(
|
|
94
79
|
items: IActivityHistoryItem[],
|
|
95
80
|
searchString: string,
|
|
96
81
|
commonFilters: IActivityHistoryCommonFilter[],
|
|
97
82
|
customFilters: IActivityHistoryCustomFilterGroup[],
|
|
98
83
|
diagnosticFilterEnabledValues: string[],
|
|
84
|
+
upFilterEnabledValues: string[],
|
|
99
85
|
) => {
|
|
100
86
|
const filteredItems = items.filter((item: IActivityHistoryItem) =>
|
|
101
87
|
new SearchStringSpec(searchString, item.searchPredicate)
|
|
@@ -103,6 +89,7 @@ export const activityHistoryGroupedItems = createSelector(
|
|
|
103
89
|
.and(new ComposedTypeSpec(customFilters))
|
|
104
90
|
.and(new CustomFilterSpec(customFilters))
|
|
105
91
|
.and(new DiagnosticCodeSpec(diagnosticFilterEnabledValues))
|
|
92
|
+
.and(new UpFilterSpec(upFilterEnabledValues))
|
|
106
93
|
.isSatisfiedBy(item),
|
|
107
94
|
);
|
|
108
95
|
|
|
@@ -13,7 +13,9 @@ export function getUniqueObjects<T>(
|
|
|
13
13
|
const title = propPathDescription.reduce((acc, key) => acc?.[key], item);
|
|
14
14
|
|
|
15
15
|
const isValidId = typeof id === "string" && id.trim() !== "";
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
//Tret el trim del title pels casos de migració on arriben camps buits
|
|
18
|
+
const isValidTitle = typeof title === "string";
|
|
17
19
|
|
|
18
20
|
if (isValidId && isValidTitle) {
|
|
19
21
|
if (!map.has(id)) {
|