@gen-epix/ui-client-casedb 4.0.2 → 4.2.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/_chunks/AddCasesToEventDialog.js +98 -98
- package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
- package/dist/_chunks/CaseContentForm.js +10 -10
- package/dist/_chunks/CaseDbDownloadUtil.js +1 -1
- package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
- package/dist/_chunks/CaseInfoDialog.js +222 -222
- package/dist/_chunks/CaseInfoDialog.js.map +1 -1
- package/dist/_chunks/CaseSetInfoDialog.js +222 -222
- package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
- package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
- package/dist/_chunks/Dashboard.js +296 -295
- package/dist/_chunks/Dashboard.js.map +1 -1
- package/dist/_chunks/FindSimilarCasesDialog.js +81 -81
- package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
- package/dist/_chunks/HomePageTrends.js.map +1 -1
- package/dist/_chunks/LegendaItem.js.map +1 -1
- package/dist/_chunks/LineListWidget.js +46 -45
- package/dist/_chunks/LineListWidget.js.map +1 -1
- package/dist/_chunks/PanelSeparator.js +3 -3
- package/dist/_chunks/PanelSeparator.js.map +1 -1
- package/dist/_chunks/Upload.js +422 -418
- package/dist/_chunks/Upload.js.map +1 -1
- package/dist/_chunks/UploadUtil.js +44 -40
- package/dist/_chunks/UploadUtil.js.map +1 -1
- package/dist/_chunks/chunk-BV7QT456.js +1 -1
- package/dist/_chunks/chunk-BV7QT456.js.map +1 -1
- package/dist/_chunks/cloneDeep.js +1 -1
- package/dist/_chunks/cloneDeep.js.map +1 -1
- package/dist/_chunks/dashboardStore.js.map +1 -1
- package/dist/_chunks/esm.js +3 -3
- package/dist/_chunks/esm.js.map +1 -1
- package/dist/_chunks/index.module.js +1 -1
- package/dist/_chunks/index.module.js.map +1 -1
- package/dist/_chunks/react.js +1 -1
- package/dist/_chunks/react.js.map +1 -1
- package/dist/_chunks/shallow.js +2 -2
- package/dist/_chunks/shallow.js.map +1 -1
- package/dist/_chunks/vanilla.js +1 -1
- package/dist/_chunks/vanilla.js.map +1 -1
- package/dist/_chunks/yup.js +24 -24
- package/dist/_chunks/yup.js.map +1 -1
- package/dist/classes/services/EventBusService/EventBusService.d.ts +9 -2
- package/dist/classes/services/EventBusService/index.js.map +1 -1
- package/dist/components/form/fields/ArrangementEditor/index.js +30 -30
- package/dist/components/ui/CreateEventDialog/index.js +40 -40
- package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
- package/dist/components/ui/MapWidget/index.js.map +1 -1
- package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
- package/dist/components/ui/SequenceDownloadDialog/index.js +57 -44
- package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
- package/dist/components/ui/TreeWidget/index.js +8 -2
- package/dist/components/ui/TreeWidget/index.js.map +1 -1
- package/dist/locale/en.json +0 -11
- package/dist/locale/nl.json +0 -11
- package/dist/models/config.d.ts +2 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +59 -59
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
- package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -0
- package/package.json +68 -75
- package/dist/_chunks/index.esm.js +0 -1465
- package/dist/_chunks/index.esm.js.map +0 -1
- package/dist/components/ui/FileSelector/FileSelector.d.ts +0 -7
- package/dist/components/ui/FileSelector/index.d.ts +0 -1
- package/dist/components/ui/FileSelector/index.js +0 -206
- package/dist/components/ui/FileSelector/index.js.map +0 -1
- package/dist/utils/FileUtil/FileUtil.d.ts +0 -5
- package/dist/utils/FileUtil/index.d.ts +0 -1
- package/dist/utils/FileUtil/index.js +0 -15
- package/dist/utils/FileUtil/index.js.map +0 -1
|
@@ -3,21 +3,21 @@ import { CaseUtil as t } from "../utils/CaseUtil/index.js";
|
|
|
3
3
|
import { CaseDbDataUtil as n } from "../utils/CaseDbDataUtil/index.js";
|
|
4
4
|
import { CaseSetUtil as r } from "../utils/CaseSetUtil/index.js";
|
|
5
5
|
import { t as i } from "./react.js";
|
|
6
|
-
import { t as
|
|
7
|
-
import { t as
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { t as oe } from "./CasesAlreadyInCaseSetWarning.js";
|
|
6
|
+
import { t as a } from "./dashboardStore.js";
|
|
7
|
+
import { t as ee } from "./shallow.js";
|
|
8
|
+
import { useDataCollectionsMapQuery as te } from "../dataHooks/useDataCollectionsQuery/index.js";
|
|
9
|
+
import { useCaseSetOptionsQuery as o, useCaseSetsMapQuery as ne } from "../dataHooks/useCaseSetsQuery/index.js";
|
|
10
|
+
import { t as re } from "./CasesAlreadyInCaseSetWarning.js";
|
|
12
11
|
import { t as s } from "i18next";
|
|
13
12
|
import { CaseDbCaseApi as c } from "@gen-epix/api-casedb";
|
|
14
13
|
import { QueryClientService as l } from "@gen-epix/ui-client-common/classes/services/QueryClientService";
|
|
15
14
|
import { Alert as u, AlertTitle as d, Box as f, Link as p } from "@mui/material";
|
|
16
|
-
import { use as
|
|
17
|
-
import { useTranslation as
|
|
15
|
+
import { use as m, useCallback as h, useEffect as g, useId as ie, useMemo as _ } from "react";
|
|
16
|
+
import { useTranslation as ae } from "react-i18next";
|
|
18
17
|
import { jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
19
18
|
import { ResponseHandler as b } from "@gen-epix/ui-client-common/components/ui/ResponseHandler";
|
|
20
19
|
import { useArray as x } from "@gen-epix/ui-core/hooks/useArray";
|
|
20
|
+
import { FormProvider as oe, useForm as se, useWatch as ce } from "react-hook-form";
|
|
21
21
|
import { useQueryMemo as S } from "@gen-epix/ui-client-common/hooks/useQueryMemo";
|
|
22
22
|
import { Select as le } from "@gen-epix/ui-core-form/components/fields/Select";
|
|
23
23
|
import { withDialog as C } from "@gen-epix/ui-core-components/hoc/withDialog";
|
|
@@ -25,10 +25,10 @@ import { TestIdUtil as ue } from "@gen-epix/ui-core/utils/TestIdUtil";
|
|
|
25
25
|
import { FormUtil as w } from "@gen-epix/ui-core-form/utils/FormUtil";
|
|
26
26
|
import { RouterService as T } from "@gen-epix/ui-client-common/classes/services/RouterService";
|
|
27
27
|
import { useEditMutation as E } from "@gen-epix/ui-client-common/hooks/useEditMutation";
|
|
28
|
-
import { Autocomplete as
|
|
28
|
+
import { Autocomplete as de } from "@gen-epix/ui-core-form/components/fields/Autocomplete";
|
|
29
29
|
//#region src/components/ui/AddCasesToEventDialog/AddCasesToEventDialogSuccessNotificationMessage.tsx
|
|
30
|
-
var
|
|
31
|
-
let n =
|
|
30
|
+
var fe = ({ caseSet: e, numAddedCases: t }) => {
|
|
31
|
+
let n = h(async () => {
|
|
32
32
|
await T.getInstance().router.navigate({ pathname: r.createCaseSetLink(e) });
|
|
33
33
|
}, [e]);
|
|
34
34
|
return /* @__PURE__ */ y(f, { children: [/* @__PURE__ */ v(f, { children: s("Successfully added {{numAddedCases}} case(s) to event: {{name}}", {
|
|
@@ -42,87 +42,87 @@ var de = ({ caseSet: e, numAddedCases: t }) => {
|
|
|
42
42
|
children: s("View event: {{name}}", { name: e.name })
|
|
43
43
|
})
|
|
44
44
|
})] });
|
|
45
|
-
},
|
|
46
|
-
let { t: T } =
|
|
47
|
-
let t =
|
|
48
|
-
return !(t.case_type_id !==
|
|
45
|
+
}, D = C(({ onActionsChange: r, onClose: s, onTitleChange: p, openProps: C }) => {
|
|
46
|
+
let { t: T } = ae(), D = te(), O = o(), k = ne(), A = m(a), j = i(A, (e) => e.fetchData), M = i(A, (e) => e.completeCaseType), N = i(A, ee((e) => e.findSimilarCasesResults?.flatMap((e) => e.similarCaseIds) ?? [])), P = ie(), F = _(() => C.rows.map((e) => e.id).filter((e) => N.includes(e)), [C.rows, N]), I = _(() => (O.options ?? []).filter((e) => {
|
|
47
|
+
let t = k.map.get(e.value);
|
|
48
|
+
return !(t.case_type_id !== M.id || F.length === 0 && t?.id === C.currentCaseSet?.id);
|
|
49
49
|
}).map((e) => ({
|
|
50
50
|
...e,
|
|
51
51
|
label: e.value === C.currentCaseSet?.id ? T("{{eventName}} (currently shown event)", { eventName: e.label }) : e.label
|
|
52
52
|
})), [
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
O.options,
|
|
54
|
+
k.map,
|
|
55
|
+
M.id,
|
|
56
56
|
C.currentCaseSet?.id,
|
|
57
|
-
|
|
57
|
+
F.length,
|
|
58
58
|
T
|
|
59
|
-
]),
|
|
60
|
-
|
|
59
|
+
]), L = _(() => I.length === 1 ? I[0].value : F.length > 0 && C.currentCaseSet?.id ? C.currentCaseSet?.id : null, [
|
|
60
|
+
I,
|
|
61
61
|
C.currentCaseSet?.id,
|
|
62
|
-
|
|
63
|
-
]),
|
|
64
|
-
caseSetId:
|
|
62
|
+
F.length
|
|
63
|
+
]), R = se({ values: {
|
|
64
|
+
caseSetId: L,
|
|
65
65
|
shouldApplySharingToCases: !0
|
|
66
|
-
} }), { control:
|
|
66
|
+
} }), { control: z } = R, { caseSetId: B, shouldApplySharingToCases: V } = ce({ control: z }), H = _(() => ({
|
|
67
67
|
invert: !1,
|
|
68
68
|
key: "case_set_id",
|
|
69
|
-
members: [
|
|
69
|
+
members: [B],
|
|
70
70
|
type: "UUID_SET"
|
|
71
|
-
}), [
|
|
72
|
-
enabled: !!
|
|
73
|
-
queryFn: async ({ signal: e }) => (await c.getInstance().caseSetMembersPostQuery(
|
|
74
|
-
queryKey: l.getInstance().getGenericKey(e.CASE_SET_MEMBERS,
|
|
75
|
-
}),
|
|
71
|
+
}), [B]), { data: U, error: pe, isLoading: W } = S({
|
|
72
|
+
enabled: !!B,
|
|
73
|
+
queryFn: async ({ signal: e }) => (await c.getInstance().caseSetMembersPostQuery(H, null, null, { signal: e })).data,
|
|
74
|
+
queryKey: l.getInstance().getGenericKey(e.CASE_SET_MEMBERS, H)
|
|
75
|
+
}), G = _(() => ({
|
|
76
76
|
invert: !1,
|
|
77
77
|
key: "case_set_id",
|
|
78
|
-
members: [
|
|
78
|
+
members: [B],
|
|
79
79
|
type: "UUID_SET"
|
|
80
|
-
}), [
|
|
81
|
-
enabled: !!
|
|
82
|
-
queryFn: async ({ signal: e }) => (await c.getInstance().caseSetDataCollectionLinksPostQuery(
|
|
83
|
-
queryKey: l.getInstance().getGenericKey(e.CASE_SET_DATA_COLLECTION_LINKS,
|
|
84
|
-
}),
|
|
85
|
-
|
|
80
|
+
}), [B]), { data: K, error: me, isLoading: q } = S({
|
|
81
|
+
enabled: !!B,
|
|
82
|
+
queryFn: async ({ signal: e }) => (await c.getInstance().caseSetDataCollectionLinksPostQuery(G, null, null, { signal: e })).data,
|
|
83
|
+
queryKey: l.getInstance().getGenericKey(e.CASE_SET_DATA_COLLECTION_LINKS, G)
|
|
84
|
+
}), J = _(() => K?.map((e) => D.map.get(e.data_collection_id)).filter((e) => !!e), [K, D.map]), Y = _(() => C.rows.map((e) => e.id).filter((e) => !(U ?? []).map((e) => e.case_id).includes(e)), [U, C.rows]), X = h(async () => {
|
|
85
|
+
V && await t.applyDataCollectionLinks({
|
|
86
86
|
caseIds: C.rows ? C.rows.map((e) => e.id) : void 0,
|
|
87
|
-
caseSetDataCollectionIds:
|
|
88
|
-
caseSetId:
|
|
89
|
-
caseTypeId:
|
|
90
|
-
}), await
|
|
87
|
+
caseSetDataCollectionIds: K?.map((e) => e.data_collection_id),
|
|
88
|
+
caseSetId: B,
|
|
89
|
+
caseTypeId: M.id
|
|
90
|
+
}), await j(), s();
|
|
91
91
|
}, [
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
K,
|
|
93
|
+
B,
|
|
94
|
+
M.id,
|
|
95
|
+
j,
|
|
96
96
|
s,
|
|
97
97
|
C.rows,
|
|
98
|
-
|
|
99
|
-
]), he =
|
|
100
|
-
await
|
|
101
|
-
}, [
|
|
98
|
+
V
|
|
99
|
+
]), he = h(async () => {
|
|
100
|
+
await j(), s();
|
|
101
|
+
}, [j, s]), { isMutating: Z, mutate: Q } = E({
|
|
102
102
|
associationQueryKeys: l.getInstance().getQueryKeyDependencies([e.CASE_SET_MEMBERS], !0),
|
|
103
|
-
getErrorNotificationMessage: () => T("Failed add case(s) to {{caseSetName}}", { caseSetName:
|
|
104
|
-
getProgressNotificationMessage: () => T("Adding case(s) to {{caseSetName}}", { caseSetName:
|
|
105
|
-
getSuccessNotificationMessage: () => /* @__PURE__ */ v(
|
|
106
|
-
caseSet:
|
|
107
|
-
numAddedCases:
|
|
103
|
+
getErrorNotificationMessage: () => T("Failed add case(s) to {{caseSetName}}", { caseSetName: k.map.get(B).name }),
|
|
104
|
+
getProgressNotificationMessage: () => T("Adding case(s) to {{caseSetName}}", { caseSetName: k.map.get(B).name }),
|
|
105
|
+
getSuccessNotificationMessage: () => /* @__PURE__ */ v(fe, {
|
|
106
|
+
caseSet: k.map.get(B),
|
|
107
|
+
numAddedCases: Y.length
|
|
108
108
|
}),
|
|
109
109
|
onError: he,
|
|
110
|
-
onSuccess:
|
|
110
|
+
onSuccess: X,
|
|
111
111
|
queryFn: async (e) => (await c.getInstance().caseSetMembersPostSome(e), e)
|
|
112
|
-
}), $ =
|
|
113
|
-
Q(
|
|
112
|
+
}), $ = h((() => {
|
|
113
|
+
Q(Y.map((e) => ({
|
|
114
114
|
case_id: e,
|
|
115
|
-
case_set_id:
|
|
115
|
+
case_set_id: B
|
|
116
116
|
})));
|
|
117
117
|
}), [
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
Y,
|
|
119
|
+
B,
|
|
120
120
|
Q
|
|
121
|
-
]), ge =
|
|
121
|
+
]), ge = h((() => {
|
|
122
122
|
s();
|
|
123
123
|
}), [s]);
|
|
124
|
-
|
|
125
|
-
let e =
|
|
124
|
+
g(() => {
|
|
125
|
+
let e = B ? k.map.get(B) : null;
|
|
126
126
|
if (e) {
|
|
127
127
|
p(T("Add {{numCases}} selected case(s) to {{eventName}}", {
|
|
128
128
|
eventName: n.getCaseSetName(e),
|
|
@@ -132,101 +132,101 @@ var de = ({ caseSet: e, numAddedCases: t }) => {
|
|
|
132
132
|
}
|
|
133
133
|
p(T("Add {{numCases}} selected case(s) to an existing event", { numCases: C.rows.length }));
|
|
134
134
|
}, [
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
B,
|
|
136
|
+
k.map,
|
|
137
|
+
M.name,
|
|
138
138
|
p,
|
|
139
139
|
C.rows.length,
|
|
140
140
|
T
|
|
141
|
-
]),
|
|
141
|
+
]), g(() => {
|
|
142
142
|
let e = [];
|
|
143
143
|
e.push({
|
|
144
144
|
...ue.createAttributes("AddCasesToEventDialog-confirmButton"),
|
|
145
145
|
autoFocus: !0,
|
|
146
146
|
color: "secondary",
|
|
147
|
-
disabled:
|
|
148
|
-
form:
|
|
147
|
+
disabled: B && W || !B || Z || Y.length < 1,
|
|
148
|
+
form: P,
|
|
149
149
|
label: T`Confirm`,
|
|
150
|
-
loading:
|
|
150
|
+
loading: B && W || Z || q,
|
|
151
151
|
onClick: $,
|
|
152
152
|
type: "submit",
|
|
153
153
|
variant: "contained"
|
|
154
154
|
}), r(e);
|
|
155
155
|
}, [
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
B,
|
|
157
|
+
P,
|
|
158
158
|
Z,
|
|
159
|
-
|
|
159
|
+
W,
|
|
160
160
|
r,
|
|
161
161
|
ge,
|
|
162
162
|
$,
|
|
163
163
|
T,
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
Y.length,
|
|
165
|
+
q
|
|
166
166
|
]);
|
|
167
167
|
let _e = x([
|
|
168
|
+
O,
|
|
168
169
|
k,
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
]), ve = _(() => w.createBooleanOptions(T), [T]), ye = m(() => {}, []);
|
|
170
|
+
D
|
|
171
|
+
]), ve = _(() => w.createBooleanOptions(T), [T]), ye = h(() => {}, []);
|
|
172
172
|
return /* @__PURE__ */ v(b, {
|
|
173
173
|
isLoading: Z,
|
|
174
174
|
loadables: _e,
|
|
175
|
-
children: /* @__PURE__ */ v(
|
|
176
|
-
...
|
|
175
|
+
children: /* @__PURE__ */ v(oe, {
|
|
176
|
+
...R,
|
|
177
177
|
children: /* @__PURE__ */ y("form", {
|
|
178
178
|
autoComplete: "off",
|
|
179
179
|
onSubmit: ye,
|
|
180
180
|
children: [/* @__PURE__ */ y(f, { children: [/* @__PURE__ */ v(f, {
|
|
181
181
|
sx: { marginY: 1 },
|
|
182
|
-
children: /* @__PURE__ */ v(
|
|
183
|
-
infoMessage:
|
|
182
|
+
children: /* @__PURE__ */ v(de, {
|
|
183
|
+
infoMessage: I?.length === 0 ? T`No events of the same case type available` : void 0,
|
|
184
184
|
label: T`Select event`,
|
|
185
185
|
name: "caseSetId",
|
|
186
|
-
options:
|
|
186
|
+
options: I
|
|
187
187
|
})
|
|
188
188
|
}), /* @__PURE__ */ v(f, {
|
|
189
189
|
sx: { marginY: 1 },
|
|
190
190
|
children: /* @__PURE__ */ v(le, {
|
|
191
|
-
disabled:
|
|
192
|
-
infoMessage:
|
|
191
|
+
disabled: K?.length === 0,
|
|
192
|
+
infoMessage: K?.length === 0 ? T`No data collections to add` : void 0,
|
|
193
193
|
label: T`Should the selected cases be given the same access rights as the selected event?`,
|
|
194
|
-
loading:
|
|
194
|
+
loading: K?.length && q,
|
|
195
195
|
name: "shouldApplySharingToCases",
|
|
196
196
|
options: ve
|
|
197
197
|
})
|
|
198
|
-
})] }),
|
|
198
|
+
})] }), B && /* @__PURE__ */ v(f, {
|
|
199
199
|
sx: { marginY: 2 },
|
|
200
200
|
children: /* @__PURE__ */ y(b, {
|
|
201
|
-
error:
|
|
201
|
+
error: pe || me,
|
|
202
202
|
inlineSpinner: !0,
|
|
203
|
-
isLoading:
|
|
203
|
+
isLoading: W,
|
|
204
204
|
shouldHideActionButtons: !0,
|
|
205
205
|
children: [
|
|
206
|
-
|
|
206
|
+
J?.length > 0 && /* @__PURE__ */ v(f, {
|
|
207
207
|
sx: { marginY: 2 },
|
|
208
208
|
children: /* @__PURE__ */ y(u, {
|
|
209
209
|
severity: "info",
|
|
210
|
-
children: [/* @__PURE__ */ v(d, { children: T("The selected event is shared in the following data collection(s):") }),
|
|
210
|
+
children: [/* @__PURE__ */ v(d, { children: T("The selected event is shared in the following data collection(s):") }), J.map((e) => /* @__PURE__ */ v(f, { children: e.name }, e.id))]
|
|
211
211
|
})
|
|
212
212
|
}),
|
|
213
|
-
|
|
213
|
+
Y.length > 0 && /* @__PURE__ */ v(f, {
|
|
214
214
|
sx: { marginY: 2 },
|
|
215
215
|
children: /* @__PURE__ */ v(u, {
|
|
216
216
|
severity: "info",
|
|
217
|
-
children: /* @__PURE__ */ y(d, { children: [T("{{numCasesToAdd}} selected case(s) will be added to selected the event.", { numCasesToAdd:
|
|
217
|
+
children: /* @__PURE__ */ y(d, { children: [T("{{numCasesToAdd}} selected case(s) will be added to selected the event.", { numCasesToAdd: Y.length }), C.rows.length !== Y.length && /* @__PURE__ */ v(f, { children: T("{{numCasesAlreadyInEvent}} selected case(s) are already part of the selected event.", { numCasesAlreadyInEvent: C.rows.length - Y.length }) })] })
|
|
218
218
|
})
|
|
219
219
|
}),
|
|
220
|
-
|
|
220
|
+
Y.length === 0 && /* @__PURE__ */ v(f, {
|
|
221
221
|
sx: { marginY: 2 },
|
|
222
222
|
children: /* @__PURE__ */ v(u, {
|
|
223
223
|
severity: "error",
|
|
224
224
|
children: /* @__PURE__ */ v(d, { children: T("All selected case(s) are already part of the selected event.") })
|
|
225
225
|
})
|
|
226
226
|
}),
|
|
227
|
-
|
|
227
|
+
Y.length > 0 && /* @__PURE__ */ v(f, {
|
|
228
228
|
sx: { marginY: 2 },
|
|
229
|
-
children: /* @__PURE__ */ v(
|
|
229
|
+
children: /* @__PURE__ */ v(re, { cases: C.rows.filter((e) => Y.includes(e.id)) })
|
|
230
230
|
})
|
|
231
231
|
]
|
|
232
232
|
})
|
|
@@ -241,6 +241,6 @@ var de = ({ caseSet: e, numAddedCases: t }) => {
|
|
|
241
241
|
testId: "AddCasesToEventDialog"
|
|
242
242
|
});
|
|
243
243
|
//#endregion
|
|
244
|
-
export {
|
|
244
|
+
export { D as t };
|
|
245
245
|
|
|
246
246
|
//# sourceMappingURL=AddCasesToEventDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddCasesToEventDialog.js","names":[],"sources":["../../src/components/ui/AddCasesToEventDialog/AddCasesToEventDialogSuccessNotificationMessage.tsx","../../src/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.tsx"],"sourcesContent":["import { t } from 'i18next';\nimport {\n Box,\n Link,\n} from '@mui/material';\nimport { useCallback } from 'react';\nimport type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { RouterService } from '@gen-epix/ui-client-common/classes/services/RouterService';\n\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\n\nexport type AddCasesToEventDialogSuccessNotificationMessageProps = {\n readonly caseSet: CaseDbCaseSet;\n readonly numAddedCases: number;\n};\n\nexport const AddCasesToEventDialogSuccessNotificationMessage = ({ caseSet, numAddedCases }: AddCasesToEventDialogSuccessNotificationMessageProps) => {\n\n const onLinkClick = useCallback(async () => {\n await RouterService.getInstance().router.navigate({ pathname: CaseSetUtil.createCaseSetLink(caseSet) });\n }, [caseSet]);\n\n return (\n <Box>\n <Box>\n {t('Successfully added {{numAddedCases}} case(s) to event: {{name}}', { name: caseSet.name, numAddedCases })}\n </Box>\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Link\n href={'#'}\n onClick={onLinkClick}\n >\n {t('View event: {{name}}', { name: caseSet.name })}\n </Link>\n </Box>\n </Box>\n );\n};\n","import {\n Alert,\n AlertTitle,\n Box,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport type { ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport {\n FormProvider,\n useForm,\n useWatch,\n} from 'react-hook-form';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbCaseSetMember,\n CaseDbTypedUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useEditMutation } from '@gen-epix/ui-client-common/hooks/useEditMutation';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { FormUtil } from '@gen-epix/ui-core-form/utils/FormUtil';\nimport { Select } from '@gen-epix/ui-core-form/components/fields/Select';\nimport { Autocomplete } from '@gen-epix/ui-core-form/components/fields/Autocomplete';\n\nimport {\n useCaseSetOptionsQuery,\n useCaseSetsMapQuery,\n} from '../../../dataHooks/useCaseSetsQuery';\nimport { useDataCollectionsMapQuery } from '../../../dataHooks/useDataCollectionsQuery';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { CasesAlreadyInCaseSetWarning } from '../CasesAlreadyInCaseSetWarning';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\nimport { CaseDbDataUtil } from '../../../utils/CaseDbDataUtil';\n\nimport { AddCasesToEventDialogSuccessNotificationMessage } from './AddCasesToEventDialogSuccessNotificationMessage';\n\n\nexport interface AddCasesToEventDialogOpenProps {\n currentCaseSet: CaseDbCaseSet;\n rows: CaseDbCase[];\n}\n\nexport interface AddCasesToEventDialogProps extends WithDialogRenderProps<AddCasesToEventDialogOpenProps> {\n //\n}\n\nexport type AddCasesToEventDialogRefMethods = WithDialogRefMethods<AddCasesToEventDialogProps, AddCasesToEventDialogOpenProps>;\n\ntype FormFields = {\n caseSetId: string;\n shouldApplySharingToCases: boolean;\n};\n\nexport const AddCasesToEventDialog = withDialog<AddCasesToEventDialogProps, AddCasesToEventDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onTitleChange,\n openProps,\n }: AddCasesToEventDialogProps,\n): ReactElement => {\n const { t } = useTranslation();\n\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n const caseSetOptionsQuery = useCaseSetOptionsQuery();\n const caseSetsMapQuery = useCaseSetsMapQuery();\n const dashboardStore = use(DashboardStoreContext);\n const fetchData = useStore(dashboardStore, (state) => state.fetchData);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const similarCaseIds = useStore(dashboardStore, useShallow((state) => state.findSimilarCasesResults?.flatMap(result => result.similarCaseIds) ?? []));\n const formId = useId();\n const similarCaseIdsInRows = useMemo(() => {\n return openProps.rows.map(row => row.id).filter(id => similarCaseIds.includes(id));\n }, [openProps.rows, similarCaseIds]);\n\n const filteredCaseSetOptions = useMemo(() => (caseSetOptionsQuery.options ?? []).filter(option => {\n const caseSet = caseSetsMapQuery.map.get(option.value);\n\n if (caseSet.case_type_id !== completeCaseType.id) {\n return false;\n }\n\n if (similarCaseIdsInRows.length === 0 && caseSet?.id === openProps.currentCaseSet?.id) {\n return false;\n }\n\n return true;\n }).map(option => {\n return {\n ...option,\n label: option.value === openProps.currentCaseSet?.id ? t('{{eventName}} (currently shown event)', { eventName: option.label }) : option.label,\n };\n }), [caseSetOptionsQuery.options, caseSetsMapQuery.map, completeCaseType.id, openProps.currentCaseSet?.id, similarCaseIdsInRows.length, t]);\n\n const initialSetSetId = useMemo(() => {\n if (filteredCaseSetOptions.length === 1) {\n return filteredCaseSetOptions[0].value;\n }\n if (similarCaseIdsInRows.length > 0 && openProps.currentCaseSet?.id) {\n return openProps.currentCaseSet?.id;\n }\n return null;\n }, [filteredCaseSetOptions, openProps.currentCaseSet?.id, similarCaseIdsInRows.length]);\n\n const formMethods = useForm<FormFields>({\n values: {\n caseSetId: initialSetSetId,\n shouldApplySharingToCases: true,\n },\n });\n\n const { control } = formMethods;\n const { caseSetId, shouldApplySharingToCases } = useWatch({ control });\n\n const caseSetMembersFilter = useMemo<CaseDbTypedUuidSetFilter>(() => ({\n invert: false,\n key: 'case_set_id',\n members: [caseSetId],\n type: 'UUID_SET',\n }), [caseSetId]);\n const { data: caseSetMembers, error: caseSetMembersError, isLoading: isCaseSetMembersLoading } = useQueryMemo({\n enabled: !!caseSetId,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetMembersPostQuery(caseSetMembersFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SET_MEMBERS, caseSetMembersFilter),\n });\n\n const caseSetDataCollectionLinksFilter = useMemo<CaseDbTypedUuidSetFilter>(() => ({\n invert: false,\n key: 'case_set_id',\n members: [caseSetId],\n type: 'UUID_SET',\n }), [caseSetId]);\n const { data: caseSetDataCollectionLinks, error: caseSetDataCollectionLinksError, isLoading: isCaseSetDataCollectionLinksLoading } = useQueryMemo({\n enabled: !!caseSetId,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetDataCollectionLinksPostQuery(caseSetDataCollectionLinksFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SET_DATA_COLLECTION_LINKS, caseSetDataCollectionLinksFilter),\n });\n\n const caseSetDataCollections = useMemo(() => {\n return caseSetDataCollectionLinks?.map(link => dataCollectionsMapQuery.map.get(link.data_collection_id)).filter(x => !!x);\n }, [caseSetDataCollectionLinks, dataCollectionsMapQuery.map]);\n\n const caseIdsToAdd = useMemo(() => {\n return openProps.rows.map(row => row.id).filter(caseId => !(caseSetMembers ?? []).map(x => x.case_id).includes(caseId));\n }, [caseSetMembers, openProps.rows]);\n\n const onSuccess = useCallback(async () => {\n if (shouldApplySharingToCases) {\n await CaseUtil.applyDataCollectionLinks({\n caseIds: openProps.rows ? openProps.rows.map(row => row.id) : undefined,\n caseSetDataCollectionIds: caseSetDataCollectionLinks?.map(link => link.data_collection_id),\n caseSetId,\n caseTypeId: completeCaseType.id,\n });\n }\n await fetchData();\n onClose();\n }, [caseSetDataCollectionLinks, caseSetId, completeCaseType.id, fetchData, onClose, openProps.rows, shouldApplySharingToCases]);\n\n const onError = useCallback(async () => {\n await fetchData();\n onClose();\n }, [fetchData, onClose]);\n\n const { isMutating: isMutatingItems, mutate: mutateItems } = useEditMutation<CaseDbCaseSetMember[]>({\n associationQueryKeys: QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_SET_MEMBERS], true),\n getErrorNotificationMessage: () => t('Failed add case(s) to {{caseSetName}}', { caseSetName: caseSetsMapQuery.map.get(caseSetId).name }),\n getProgressNotificationMessage: () => t('Adding case(s) to {{caseSetName}}', { caseSetName: caseSetsMapQuery.map.get(caseSetId).name }),\n getSuccessNotificationMessage: () => (\n <AddCasesToEventDialogSuccessNotificationMessage\n caseSet={caseSetsMapQuery.map.get(caseSetId)}\n numAddedCases={caseIdsToAdd.length}\n />\n ),\n onError,\n onSuccess,\n queryFn: async (items: CaseDbCaseSetMember[]) => {\n await CaseDbCaseApi.getInstance().caseSetMembersPostSome(items);\n return items;\n },\n });\n\n const onConfirmButtonClick = useCallback((() => {\n mutateItems(caseIdsToAdd.map(caseId => ({\n case_id: caseId,\n case_set_id: caseSetId,\n } satisfies CaseDbCaseSetMember)));\n }), [caseIdsToAdd, caseSetId, mutateItems]);\n\n const onCancelButtonClick = useCallback((() => {\n onClose();\n }), [onClose]);\n\n useEffect(() => {\n const caseSet = caseSetId ? caseSetsMapQuery.map.get(caseSetId) : null;\n if (caseSet) {\n onTitleChange(t('Add {{numCases}} selected case(s) to {{eventName}}', { eventName: CaseDbDataUtil.getCaseSetName(caseSet), numCases: openProps.rows.length }));\n return;\n }\n onTitleChange(t('Add {{numCases}} selected case(s) to an existing event', { numCases: openProps.rows.length }));\n }, [caseSetId, caseSetsMapQuery.map, completeCaseType.name, onTitleChange, openProps.rows.length, t]);\n\n useEffect(() => {\n const actions: DialogAction[] = [];\n actions.push(\n {\n ...TestIdUtil.createAttributes('AddCasesToEventDialog-confirmButton'),\n autoFocus: true,\n color: 'secondary',\n disabled: (caseSetId && isCaseSetMembersLoading) || !caseSetId || isMutatingItems || caseIdsToAdd.length < 1,\n form: formId,\n label: t`Confirm`,\n loading: (caseSetId && isCaseSetMembersLoading) || isMutatingItems || isCaseSetDataCollectionLinksLoading,\n onClick: onConfirmButtonClick,\n type: 'submit',\n variant: 'contained',\n },\n );\n onActionsChange(actions);\n }, [caseSetId, formId, isMutatingItems, isCaseSetMembersLoading, onActionsChange, onCancelButtonClick, onConfirmButtonClick, t, caseIdsToAdd.length, isCaseSetDataCollectionLinksLoading]);\n\n const loadables = useArray([caseSetOptionsQuery, caseSetsMapQuery, dataCollectionsMapQuery]);\n\n const booleanOptions = useMemo(() => FormUtil.createBooleanOptions(t), [t]);\n\n const onSubmit = useCallback(() => {\n // noop, as the mutation is triggered by a button outside of the form\n }, []);\n\n return (\n <ResponseHandler\n isLoading={isMutatingItems}\n loadables={loadables}\n >\n <FormProvider {...formMethods}>\n <form\n autoComplete={'off'}\n onSubmit={onSubmit}\n >\n <Box>\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <Autocomplete\n infoMessage={filteredCaseSetOptions?.length === 0 ? t`No events of the same case type available` : undefined}\n label={t`Select event`}\n name={'caseSetId'}\n options={filteredCaseSetOptions}\n />\n </Box>\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <Select\n disabled={caseSetDataCollectionLinks?.length === 0}\n infoMessage={caseSetDataCollectionLinks?.length === 0 ? t`No data collections to add` : undefined}\n label={t`Should the selected cases be given the same access rights as the selected event?`}\n loading={caseSetDataCollectionLinks?.length && isCaseSetDataCollectionLinksLoading}\n name={'shouldApplySharingToCases'}\n options={booleanOptions}\n />\n </Box>\n </Box>\n {caseSetId && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <ResponseHandler\n error={caseSetMembersError || caseSetDataCollectionLinksError}\n inlineSpinner\n isLoading={isCaseSetMembersLoading}\n shouldHideActionButtons\n >\n {caseSetDataCollections?.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('The selected event is shared in the following data collection(s):')}\n </AlertTitle>\n {caseSetDataCollections.map(dataCollection => (\n <Box key={dataCollection.id}>\n {dataCollection.name}\n </Box>\n ))}\n </Alert>\n </Box>\n )}\n {caseIdsToAdd.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('{{numCasesToAdd}} selected case(s) will be added to selected the event.', { numCasesToAdd: caseIdsToAdd.length })}\n {openProps.rows.length !== caseIdsToAdd.length && (\n <Box>\n {t('{{numCasesAlreadyInEvent}} selected case(s) are already part of the selected event.', { numCasesAlreadyInEvent: openProps.rows.length - caseIdsToAdd.length })}\n </Box>\n )}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {caseIdsToAdd.length === 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'error'}>\n <AlertTitle>\n {t('All selected case(s) are already part of the selected event.')}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {caseIdsToAdd.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <CasesAlreadyInCaseSetWarning\n cases={openProps.rows.filter(row => caseIdsToAdd.includes(row.id))}\n />\n </Box>\n )}\n </ResponseHandler>\n </Box>\n )}\n </form>\n </FormProvider>\n </ResponseHandler>\n );\n}, {\n defaultTitle: '',\n fullWidth: true,\n maxWidth: 'md',\n testId: 'AddCasesToEventDialog',\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddCasesToEventDialog.js","names":[],"sources":["../../src/components/ui/AddCasesToEventDialog/AddCasesToEventDialogSuccessNotificationMessage.tsx","../../src/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.tsx"],"sourcesContent":["import { t } from 'i18next';\nimport {\n Box,\n Link,\n} from '@mui/material';\nimport { useCallback } from 'react';\nimport type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { RouterService } from '@gen-epix/ui-client-common/classes/services/RouterService';\n\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\n\nexport type AddCasesToEventDialogSuccessNotificationMessageProps = {\n readonly caseSet: CaseDbCaseSet;\n readonly numAddedCases: number;\n};\n\nexport const AddCasesToEventDialogSuccessNotificationMessage = ({ caseSet, numAddedCases }: AddCasesToEventDialogSuccessNotificationMessageProps) => {\n\n const onLinkClick = useCallback(async () => {\n await RouterService.getInstance().router.navigate({ pathname: CaseSetUtil.createCaseSetLink(caseSet) });\n }, [caseSet]);\n\n return (\n <Box>\n <Box>\n {t('Successfully added {{numAddedCases}} case(s) to event: {{name}}', { name: caseSet.name, numAddedCases })}\n </Box>\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Link\n href={'#'}\n onClick={onLinkClick}\n >\n {t('View event: {{name}}', { name: caseSet.name })}\n </Link>\n </Box>\n </Box>\n );\n};\n","import {\n Alert,\n AlertTitle,\n Box,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport type { ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport {\n FormProvider,\n useForm,\n useWatch,\n} from 'react-hook-form';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbCaseSetMember,\n CaseDbUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useEditMutation } from '@gen-epix/ui-client-common/hooks/useEditMutation';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { FormUtil } from '@gen-epix/ui-core-form/utils/FormUtil';\nimport { Select } from '@gen-epix/ui-core-form/components/fields/Select';\nimport { Autocomplete } from '@gen-epix/ui-core-form/components/fields/Autocomplete';\n\nimport {\n useCaseSetOptionsQuery,\n useCaseSetsMapQuery,\n} from '../../../dataHooks/useCaseSetsQuery';\nimport { useDataCollectionsMapQuery } from '../../../dataHooks/useDataCollectionsQuery';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { CasesAlreadyInCaseSetWarning } from '../CasesAlreadyInCaseSetWarning';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\nimport { CaseDbDataUtil } from '../../../utils/CaseDbDataUtil';\n\nimport { AddCasesToEventDialogSuccessNotificationMessage } from './AddCasesToEventDialogSuccessNotificationMessage';\n\n\nexport interface AddCasesToEventDialogOpenProps {\n currentCaseSet: CaseDbCaseSet;\n rows: CaseDbCase[];\n}\n\nexport interface AddCasesToEventDialogProps extends WithDialogRenderProps<AddCasesToEventDialogOpenProps> {\n //\n}\n\nexport type AddCasesToEventDialogRefMethods = WithDialogRefMethods<AddCasesToEventDialogProps, AddCasesToEventDialogOpenProps>;\n\ntype FormFields = {\n caseSetId: string;\n shouldApplySharingToCases: boolean;\n};\n\nexport const AddCasesToEventDialog = withDialog<AddCasesToEventDialogProps, AddCasesToEventDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onTitleChange,\n openProps,\n }: AddCasesToEventDialogProps,\n): ReactElement => {\n const { t } = useTranslation();\n\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n const caseSetOptionsQuery = useCaseSetOptionsQuery();\n const caseSetsMapQuery = useCaseSetsMapQuery();\n const dashboardStore = use(DashboardStoreContext);\n const fetchData = useStore(dashboardStore, (state) => state.fetchData);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const similarCaseIds = useStore(dashboardStore, useShallow((state) => state.findSimilarCasesResults?.flatMap(result => result.similarCaseIds) ?? []));\n const formId = useId();\n const similarCaseIdsInRows = useMemo(() => {\n return openProps.rows.map(row => row.id).filter(id => similarCaseIds.includes(id));\n }, [openProps.rows, similarCaseIds]);\n\n const filteredCaseSetOptions = useMemo(() => (caseSetOptionsQuery.options ?? []).filter(option => {\n const caseSet = caseSetsMapQuery.map.get(option.value);\n\n if (caseSet.case_type_id !== completeCaseType.id) {\n return false;\n }\n\n if (similarCaseIdsInRows.length === 0 && caseSet?.id === openProps.currentCaseSet?.id) {\n return false;\n }\n\n return true;\n }).map(option => {\n return {\n ...option,\n label: option.value === openProps.currentCaseSet?.id ? t('{{eventName}} (currently shown event)', { eventName: option.label }) : option.label,\n };\n }), [caseSetOptionsQuery.options, caseSetsMapQuery.map, completeCaseType.id, openProps.currentCaseSet?.id, similarCaseIdsInRows.length, t]);\n\n const initialSetSetId = useMemo(() => {\n if (filteredCaseSetOptions.length === 1) {\n return filteredCaseSetOptions[0].value;\n }\n if (similarCaseIdsInRows.length > 0 && openProps.currentCaseSet?.id) {\n return openProps.currentCaseSet?.id;\n }\n return null;\n }, [filteredCaseSetOptions, openProps.currentCaseSet?.id, similarCaseIdsInRows.length]);\n\n const formMethods = useForm<FormFields>({\n values: {\n caseSetId: initialSetSetId,\n shouldApplySharingToCases: true,\n },\n });\n\n const { control } = formMethods;\n const { caseSetId, shouldApplySharingToCases } = useWatch({ control });\n\n const caseSetMembersFilter = useMemo<CaseDbUuidSetFilter>(() => ({\n invert: false,\n key: 'case_set_id',\n members: [caseSetId],\n type: 'UUID_SET',\n }), [caseSetId]);\n const { data: caseSetMembers, error: caseSetMembersError, isLoading: isCaseSetMembersLoading } = useQueryMemo({\n enabled: !!caseSetId,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetMembersPostQuery(caseSetMembersFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SET_MEMBERS, caseSetMembersFilter),\n });\n\n const caseSetDataCollectionLinksFilter = useMemo<CaseDbUuidSetFilter>(() => ({\n invert: false,\n key: 'case_set_id',\n members: [caseSetId],\n type: 'UUID_SET',\n }), [caseSetId]);\n const { data: caseSetDataCollectionLinks, error: caseSetDataCollectionLinksError, isLoading: isCaseSetDataCollectionLinksLoading } = useQueryMemo({\n enabled: !!caseSetId,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetDataCollectionLinksPostQuery(caseSetDataCollectionLinksFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SET_DATA_COLLECTION_LINKS, caseSetDataCollectionLinksFilter),\n });\n\n const caseSetDataCollections = useMemo(() => {\n return caseSetDataCollectionLinks?.map(link => dataCollectionsMapQuery.map.get(link.data_collection_id)).filter(x => !!x);\n }, [caseSetDataCollectionLinks, dataCollectionsMapQuery.map]);\n\n const caseIdsToAdd = useMemo(() => {\n return openProps.rows.map(row => row.id).filter(caseId => !(caseSetMembers ?? []).map(x => x.case_id).includes(caseId));\n }, [caseSetMembers, openProps.rows]);\n\n const onSuccess = useCallback(async () => {\n if (shouldApplySharingToCases) {\n await CaseUtil.applyDataCollectionLinks({\n caseIds: openProps.rows ? openProps.rows.map(row => row.id) : undefined,\n caseSetDataCollectionIds: caseSetDataCollectionLinks?.map(link => link.data_collection_id),\n caseSetId,\n caseTypeId: completeCaseType.id,\n });\n }\n await fetchData();\n onClose();\n }, [caseSetDataCollectionLinks, caseSetId, completeCaseType.id, fetchData, onClose, openProps.rows, shouldApplySharingToCases]);\n\n const onError = useCallback(async () => {\n await fetchData();\n onClose();\n }, [fetchData, onClose]);\n\n const { isMutating: isMutatingItems, mutate: mutateItems } = useEditMutation<CaseDbCaseSetMember[]>({\n associationQueryKeys: QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_SET_MEMBERS], true),\n getErrorNotificationMessage: () => t('Failed add case(s) to {{caseSetName}}', { caseSetName: caseSetsMapQuery.map.get(caseSetId).name }),\n getProgressNotificationMessage: () => t('Adding case(s) to {{caseSetName}}', { caseSetName: caseSetsMapQuery.map.get(caseSetId).name }),\n getSuccessNotificationMessage: () => (\n <AddCasesToEventDialogSuccessNotificationMessage\n caseSet={caseSetsMapQuery.map.get(caseSetId)}\n numAddedCases={caseIdsToAdd.length}\n />\n ),\n onError,\n onSuccess,\n queryFn: async (items: CaseDbCaseSetMember[]) => {\n await CaseDbCaseApi.getInstance().caseSetMembersPostSome(items);\n return items;\n },\n });\n\n const onConfirmButtonClick = useCallback((() => {\n mutateItems(caseIdsToAdd.map(caseId => ({\n case_id: caseId,\n case_set_id: caseSetId,\n } satisfies CaseDbCaseSetMember)));\n }), [caseIdsToAdd, caseSetId, mutateItems]);\n\n const onCancelButtonClick = useCallback((() => {\n onClose();\n }), [onClose]);\n\n useEffect(() => {\n const caseSet = caseSetId ? caseSetsMapQuery.map.get(caseSetId) : null;\n if (caseSet) {\n onTitleChange(t('Add {{numCases}} selected case(s) to {{eventName}}', { eventName: CaseDbDataUtil.getCaseSetName(caseSet), numCases: openProps.rows.length }));\n return;\n }\n onTitleChange(t('Add {{numCases}} selected case(s) to an existing event', { numCases: openProps.rows.length }));\n }, [caseSetId, caseSetsMapQuery.map, completeCaseType.name, onTitleChange, openProps.rows.length, t]);\n\n useEffect(() => {\n const actions: DialogAction[] = [];\n actions.push(\n {\n ...TestIdUtil.createAttributes('AddCasesToEventDialog-confirmButton'),\n autoFocus: true,\n color: 'secondary',\n disabled: (caseSetId && isCaseSetMembersLoading) || !caseSetId || isMutatingItems || caseIdsToAdd.length < 1,\n form: formId,\n label: t`Confirm`,\n loading: (caseSetId && isCaseSetMembersLoading) || isMutatingItems || isCaseSetDataCollectionLinksLoading,\n onClick: onConfirmButtonClick,\n type: 'submit',\n variant: 'contained',\n },\n );\n onActionsChange(actions);\n }, [caseSetId, formId, isMutatingItems, isCaseSetMembersLoading, onActionsChange, onCancelButtonClick, onConfirmButtonClick, t, caseIdsToAdd.length, isCaseSetDataCollectionLinksLoading]);\n\n const loadables = useArray([caseSetOptionsQuery, caseSetsMapQuery, dataCollectionsMapQuery]);\n\n const booleanOptions = useMemo(() => FormUtil.createBooleanOptions(t), [t]);\n\n const onSubmit = useCallback(() => {\n // noop, as the mutation is triggered by a button outside of the form\n }, []);\n\n return (\n <ResponseHandler\n isLoading={isMutatingItems}\n loadables={loadables}\n >\n <FormProvider {...formMethods}>\n <form\n autoComplete={'off'}\n onSubmit={onSubmit}\n >\n <Box>\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <Autocomplete\n infoMessage={filteredCaseSetOptions?.length === 0 ? t`No events of the same case type available` : undefined}\n label={t`Select event`}\n name={'caseSetId'}\n options={filteredCaseSetOptions}\n />\n </Box>\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <Select\n disabled={caseSetDataCollectionLinks?.length === 0}\n infoMessage={caseSetDataCollectionLinks?.length === 0 ? t`No data collections to add` : undefined}\n label={t`Should the selected cases be given the same access rights as the selected event?`}\n loading={caseSetDataCollectionLinks?.length && isCaseSetDataCollectionLinksLoading}\n name={'shouldApplySharingToCases'}\n options={booleanOptions}\n />\n </Box>\n </Box>\n {caseSetId && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <ResponseHandler\n error={caseSetMembersError || caseSetDataCollectionLinksError}\n inlineSpinner\n isLoading={isCaseSetMembersLoading}\n shouldHideActionButtons\n >\n {caseSetDataCollections?.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('The selected event is shared in the following data collection(s):')}\n </AlertTitle>\n {caseSetDataCollections.map(dataCollection => (\n <Box key={dataCollection.id}>\n {dataCollection.name}\n </Box>\n ))}\n </Alert>\n </Box>\n )}\n {caseIdsToAdd.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('{{numCasesToAdd}} selected case(s) will be added to selected the event.', { numCasesToAdd: caseIdsToAdd.length })}\n {openProps.rows.length !== caseIdsToAdd.length && (\n <Box>\n {t('{{numCasesAlreadyInEvent}} selected case(s) are already part of the selected event.', { numCasesAlreadyInEvent: openProps.rows.length - caseIdsToAdd.length })}\n </Box>\n )}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {caseIdsToAdd.length === 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'error'}>\n <AlertTitle>\n {t('All selected case(s) are already part of the selected event.')}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {caseIdsToAdd.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <CasesAlreadyInCaseSetWarning\n cases={openProps.rows.filter(row => caseIdsToAdd.includes(row.id))}\n />\n </Box>\n )}\n </ResponseHandler>\n </Box>\n )}\n </form>\n </FormProvider>\n </ResponseHandler>\n );\n}, {\n defaultTitle: '',\n fullWidth: true,\n maxWidth: 'md',\n testId: 'AddCasesToEventDialog',\n});\n"],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { CaseTypeFormUtil as e } from "../utils/CaseTypeFormUtil/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { t } from "./yup.js";
|
|
3
|
+
import { useCallback as n, useEffect as r, useMemo as i } from "react";
|
|
4
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
5
|
+
import { useForm as o } from "react-hook-form";
|
|
6
6
|
import { GenericForm as s } from "@gen-epix/ui-core-form/components/helpers/GenericForm";
|
|
7
7
|
import { FormUtil as c } from "@gen-epix/ui-core-form/utils/FormUtil";
|
|
8
8
|
//#region src/components/ui/CaseContentForm/CaseContentForm.tsx
|
|
9
9
|
var l = ({ caseContent: l, caseId: u, completeCaseType: d, enabledColIds: f, formId: p, onSubmit: m }) => {
|
|
10
|
-
let h =
|
|
10
|
+
let h = i(() => e.createYupSchema({ completeCaseType: d }), [d]), g = o({ resolver: t(h) }), { handleSubmit: _, reset: v, setValue: y } = g, b = n((e) => {
|
|
11
11
|
e.forEach((e) => {
|
|
12
12
|
y(e, null);
|
|
13
13
|
});
|
|
14
|
-
}, [y]), { fieldDefinitions: x, groupDefinitions: S } =
|
|
14
|
+
}, [y]), { fieldDefinitions: x, groupDefinitions: S } = i(() => e.createFormDefinitions({
|
|
15
15
|
completeCaseType: d,
|
|
16
16
|
enabledColIds: f,
|
|
17
17
|
onClearGroupFields: b
|
|
@@ -19,16 +19,16 @@ var l = ({ caseContent: l, caseId: u, completeCaseType: d, enabledColIds: f, for
|
|
|
19
19
|
d,
|
|
20
20
|
b,
|
|
21
21
|
f
|
|
22
|
-
]), C =
|
|
22
|
+
]), C = n((e) => {
|
|
23
23
|
u && m(u, c.createStringValuesFromFormValues(x, e));
|
|
24
24
|
}, [
|
|
25
25
|
u,
|
|
26
26
|
x,
|
|
27
27
|
m
|
|
28
|
-
]), w =
|
|
29
|
-
return
|
|
28
|
+
]), w = i(() => c.createFormValues(x, l), [x, l]);
|
|
29
|
+
return r(() => {
|
|
30
30
|
v(w);
|
|
31
|
-
}, [v, w]), /* @__PURE__ */
|
|
31
|
+
}, [v, w]), /* @__PURE__ */ a(s, {
|
|
32
32
|
formFieldDefinitions: x,
|
|
33
33
|
formGroupDefinitions: S,
|
|
34
34
|
formId: p,
|