@gen-epix/ui-client-casedb 4.2.0 → 4.3.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.
Files changed (32) hide show
  1. package/dist/_chunks/CaseInfoDialog.js +40 -39
  2. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  3. package/dist/_chunks/Dashboard.js +285 -286
  4. package/dist/_chunks/Dashboard.js.map +1 -1
  5. package/dist/_chunks/LineListWidget.js +138 -136
  6. package/dist/_chunks/LineListWidget.js.map +1 -1
  7. package/dist/_chunks/{chunk-BV7QT456.js → chunk-OB3PAWPO.js} +3 -3
  8. package/dist/_chunks/chunk-OB3PAWPO.js.map +1 -0
  9. package/dist/_chunks/yup.js +2 -2
  10. package/dist/_chunks/yup.js.map +1 -1
  11. package/dist/components/ui/HistogramWidget/index.js +161 -162
  12. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  13. package/dist/locale/en.json +6 -0
  14. package/dist/locale/nl.json +7 -1
  15. package/dist/pages/CasesDetailPage/index.js +1 -1
  16. package/dist/pages/ColsAdminPage/index.js +1 -1
  17. package/dist/pages/ConceptsAdminPage/index.js +1 -1
  18. package/dist/pages/DimsAdminPage/index.js +1 -1
  19. package/dist/pages/EventsDetailPage/index.js +1 -1
  20. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +120 -86
  21. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  22. package/dist/pages/RefColsAdminPage/index.js +1 -1
  23. package/dist/pages/RegionSetShapesAdminPage/index.js +1 -1
  24. package/dist/pages/RegionsAdminPage/index.js +1 -1
  25. package/dist/pages/UserEffectiveRightsAdminPage/index.js +1 -1
  26. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +1 -1
  27. package/dist/routes/index.js +93 -91
  28. package/dist/routes/index.js.map +1 -1
  29. package/dist/setup/setup.js +2 -3
  30. package/dist/setup/setup.js.map +1 -1
  31. package/package.json +26 -26
  32. package/dist/_chunks/chunk-BV7QT456.js.map +0 -1
@@ -44,8 +44,9 @@ import he from "@mui/icons-material/ArrowLeft";
44
44
  import { Spinner as ge } from "@gen-epix/ui-core-components/components/Spinner";
45
45
  import { useDeleteMutation as _e } from "@gen-epix/ui-client-common/hooks/useDeleteMutation";
46
46
  import { NavLink as ve } from "@gen-epix/ui-client-common/components/ui/NavLink";
47
+ import { FeatureFlagsService as ye } from "@gen-epix/ui-client-common/classes/services/FeatureFlagsService";
47
48
  //#region src/components/ui/CaseInfoDialog/CaseCaseSetInfo.tsx
48
- var ye = ({ caseDbCase: e, ...t }) => {
49
+ var be = ({ caseDbCase: e, ...t }) => {
49
50
  let r = v(), i = y(), { t: o } = H(), s = {
50
51
  invert: !1,
51
52
  key: "case_id",
@@ -105,7 +106,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
105
106
  })]
106
107
  })]
107
108
  });
108
- }, be = ({ caseDbCase: e, caseRights: t, formId: r, onFinish: i, onIsSavingChange: a, ...l }) => {
109
+ }, xe = ({ caseDbCase: e, caseRights: t, formId: r, onFinish: i, onIsSavingChange: a, ...l }) => {
109
110
  let u = R(s), d = o(u, (e) => e.completeCaseType), f = o(u, c((e) => e.mutateCachedCase)), [m, h] = V(!1), g = B(() => {
110
111
  let e = [];
111
112
  return t.read_col_ids.forEach((n) => {
@@ -162,7 +163,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
162
163
  onSubmit: _
163
164
  })] })]
164
165
  });
165
- }, xe = ({ caseDbCase: e, ...t }) => {
166
+ }, Se = ({ caseDbCase: e, ...t }) => {
166
167
  let { t: n } = H(), r = d(), i = q([r]);
167
168
  return /* @__PURE__ */ G(A, {
168
169
  ...t,
@@ -189,7 +190,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
189
190
  })
190
191
  ]
191
192
  });
192
- }, Se = ({ caseDbCase: e, ...n }) => {
193
+ }, Ce = ({ caseDbCase: e, ...n }) => {
193
194
  let { t: i } = H(), a = re(null), c = R(s), l = o(c, (e) => e.completeCaseType), u = B(() => t.getCols(l), [l]), d = z((e, t) => {
194
195
  a.current.open({
195
196
  organizationId: e,
@@ -233,7 +234,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
233
234
  /* @__PURE__ */ W(fe, { ref: a })
234
235
  ]
235
236
  });
236
- }, Ce = ({ ...e }) => {
237
+ }, we = ({ ...e }) => {
237
238
  let { t } = H();
238
239
  return /* @__PURE__ */ G(A, {
239
240
  ...e,
@@ -242,7 +243,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
242
243
  children: t`Shared in`
243
244
  }), /* @__PURE__ */ W(_, {})]
244
245
  });
245
- }, we = /* @__PURE__ */ e(i(), 1), Te = ({ caseDbCase: e, formId: t, onFinish: r, onIsSavingChange: i, ...a }) => {
246
+ }, Te = /* @__PURE__ */ e(i(), 1), Ee = ({ caseDbCase: e, formId: t, onFinish: r, onIsSavingChange: i, ...a }) => {
246
247
  let { t: o } = H(), [s, c] = V(!1), u = h(), d = B(() => x().shape({ dataCollectionIds: b().of(ee().uuid4()).required() }), []), f = B(() => [{
247
248
  definition: O.AUTOCOMPLETE,
248
249
  label: o`Data collections`,
@@ -262,7 +263,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
262
263
  });
263
264
  try {
264
265
  await D.getInstance().cancelQueries(a);
265
- let n = u?.rights?.[0], r = (0, we.default)(t, n.shared_in_data_collection_ids), i = (0, we.default)(n.shared_in_data_collection_ids, t);
266
+ let n = u?.rights?.[0], r = (0, Te.default)(t, n.shared_in_data_collection_ids), i = (0, Te.default)(n.shared_in_data_collection_ids, t);
266
267
  r.length > 0 && await C.getInstance().caseDataCollectionLinksPostSome(r.map((t) => ({
267
268
  case_id: e.id,
268
269
  data_collection_id: t
@@ -296,7 +297,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
296
297
  schema: d
297
298
  })]
298
299
  });
299
- }, Ee = /* @__PURE__ */ function(e) {
300
+ }, De = /* @__PURE__ */ function(e) {
300
301
  return e.EDIT = "EDIT", e.INFO = "INFO", e.SHARING = "SHARING", e;
301
302
  }({}), Z = Y(({ onActionsChange: e, onClose: t, onTitleChange: r, openProps: i }) => {
302
303
  let { t: a } = H(), l = B(() => [i.caseId], [i.caseId]), p = f(), h = d(), _ = u(), v = R(s), y = o(v, c((e) => e.fetchData)), [b, x] = V(i.initialTab ?? "INFO"), [ee, S] = V(!1), [w, T] = V(!1), [E, O] = V(!1), k = re(null), A = ne(), j = ne(), M = z(async () => {
@@ -331,23 +332,23 @@ var ye = ({ caseDbCase: e, ...t }) => {
331
332
  key: "case_id",
332
333
  members: [Y?.id],
333
334
  type: "UUID_SET"
334
- }), [Y?.id]), { data: ve, error: we, isLoading: Ee } = oe({
335
+ }), [Y?.id]), { data: ve, error: Te, isLoading: De } = oe({
335
336
  enabled: !!Y,
336
337
  queryFn: async ({ signal: e }) => (await C.getInstance().caseDataCollectionLinksPostQuery(fe, null, null, { signal: e })).data,
337
338
  queryKey: D.getInstance().getGenericKey(n.CASE_DATA_COLLECTION_LINKS, fe)
338
- }), Z = B(() => !!J.data && J.data.some((e) => e.is_full_access || e.write_col_ids.length), [J.data]), Q = B(() => !!J.data && J.data.some((e) => e.is_full_access || e.remove_data_collection_ids.length || e.add_data_collection_ids.length), [J.data]), De = z(() => !!J.data && J.data.some((e) => e.is_full_access || e.can_delete), [J]), Oe = z(() => {
339
+ }), Z = B(() => !!J.data && J.data.some((e) => e.is_full_access || e.write_col_ids.length) && !ye.getInstance().featureFlags?.disable_upload, [J.data]), Q = B(() => !!J.data && J.data.some((e) => e.is_full_access || e.remove_data_collection_ids.length || e.add_data_collection_ids.length), [J.data]), Oe = z(() => !!J.data && J.data.some((e) => e.is_full_access || e.can_delete), [J]), ke = z(() => {
339
340
  x("EDIT");
340
- }, []), ke = z(() => {
341
- x("SHARING");
342
341
  }, []), Ae = z(() => {
342
+ x("SHARING");
343
+ }, []), je = z(() => {
343
344
  x("INFO");
344
- }, []), je = z((e) => {
345
- S(e);
346
345
  }, []), Me = z((e) => {
346
+ S(e);
347
+ }, []), Ne = z((e) => {
347
348
  T(e);
348
- }, []), Ne = z(() => {
349
- k.current.open();
350
349
  }, []), Pe = z(() => {
350
+ k.current.open();
351
+ }, []), Fe = z(() => {
351
352
  I(Y);
352
353
  }, [Y, I]), $ = ee || w;
353
354
  te(() => {
@@ -363,7 +364,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
363
364
  color: "primary",
364
365
  disabled: $,
365
366
  label: a`Go back`,
366
- onClick: Ae,
367
+ onClick: je,
367
368
  startIcon: /* @__PURE__ */ W(he, {}),
368
369
  variant: "outlined"
369
370
  }), b === "EDIT" && Z ? t.push({
@@ -387,9 +388,9 @@ var ye = ({ caseDbCase: e, ...t }) => {
387
388
  }) : b === "INFO" && (t.push({
388
389
  ...X.createAttributes("CaseSetInfoDialog-deleteButton"),
389
390
  color: "primary",
390
- disabled: !De(),
391
+ disabled: !Oe(),
391
392
  label: a`Delete`,
392
- onClick: Ne,
393
+ onClick: Pe,
393
394
  startIcon: /* @__PURE__ */ W(me, {}),
394
395
  variant: "outlined"
395
396
  }), t.push({
@@ -397,7 +398,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
397
398
  color: "primary",
398
399
  disabled: !Q,
399
400
  label: a`Share`,
400
- onClick: ke,
401
+ onClick: Ae,
401
402
  startIcon: /* @__PURE__ */ W(pe, {}),
402
403
  variant: "outlined"
403
404
  }), t.push({
@@ -405,27 +406,27 @@ var ye = ({ caseDbCase: e, ...t }) => {
405
406
  color: "primary",
406
407
  disabled: !Z,
407
408
  label: a`Edit`,
408
- onClick: Oe,
409
+ onClick: ke,
409
410
  startIcon: /* @__PURE__ */ W(ce, {}),
410
411
  variant: "outlined"
411
412
  })), e(t);
412
413
  }, [
413
414
  e,
414
- Oe,
415
+ ke,
415
416
  a,
416
417
  b,
418
+ je,
417
419
  Ae,
418
- ke,
419
420
  A,
420
421
  j,
421
422
  t,
422
423
  $,
423
424
  Q,
424
- Ne,
425
- De,
425
+ Pe,
426
+ Oe,
426
427
  Z
427
428
  ]);
428
- let Fe = B(() => ({
429
+ let Ie = B(() => ({
429
430
  createdInDataCollection: Y ? h.map.get(Y.created_in_data_collection_id) : void 0,
430
431
  itemDataCollectionLinks: [ve],
431
432
  rights: J.data,
@@ -444,45 +445,45 @@ var ye = ({ caseDbCase: e, ...t }) => {
444
445
  inline: !0,
445
446
  label: a`Refreshing data`
446
447
  }) : /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W(K, {
447
- error: ue || we,
448
+ error: ue || Te,
448
449
  inlineSpinner: !0,
449
- isLoading: de || Ee,
450
+ isLoading: de || De,
450
451
  loadables: ae,
451
452
  shouldHideActionButtons: !0,
452
453
  children: /* @__PURE__ */ G(g, {
453
- caseAbac: Fe,
454
+ caseAbac: Ie,
454
455
  children: [
455
- /* @__PURE__ */ W(xe, {
456
+ /* @__PURE__ */ W(Se, {
456
457
  caseDbCase: Y,
457
458
  sx: { marginBottom: 2 }
458
459
  }),
459
460
  b === "INFO" && /* @__PURE__ */ G(U, { children: [
460
- /* @__PURE__ */ W(Ce, { sx: { marginBottom: 2 } }),
461
- /* @__PURE__ */ W(ye, {
461
+ /* @__PURE__ */ W(we, { sx: { marginBottom: 2 } }),
462
+ /* @__PURE__ */ W(be, {
462
463
  caseDbCase: Y,
463
464
  sx: { marginBottom: 2 }
464
465
  }),
465
- /* @__PURE__ */ W(Se, {
466
+ /* @__PURE__ */ W(Ce, {
466
467
  caseDbCase: Y,
467
468
  sx: { marginBottom: 2 }
468
469
  })
469
470
  ] }),
470
- b === "EDIT" && Z && /* @__PURE__ */ W(be, {
471
+ b === "EDIT" && Z && /* @__PURE__ */ W(xe, {
471
472
  caseDbCase: Y,
472
473
  caseRights: J.data?.[0],
473
474
  formId: A,
474
475
  onFinish: M,
475
- onIsSavingChange: je
476
+ onIsSavingChange: Me
476
477
  }),
477
478
  b === "EDIT" && !Z && /* @__PURE__ */ W(L, {
478
479
  variant: "body1",
479
480
  children: a`You do not have permissions to edit this case.`
480
481
  }),
481
- b === "SHARING" && Q && /* @__PURE__ */ W(Te, {
482
+ b === "SHARING" && Q && /* @__PURE__ */ W(Ee, {
482
483
  caseDbCase: Y,
483
484
  formId: j,
484
485
  onFinish: M,
485
- onIsSavingChange: Me
486
+ onIsSavingChange: Ne
486
487
  }),
487
488
  b === "SHARING" && !Q && /* @__PURE__ */ W(L, {
488
489
  variant: "body1",
@@ -494,7 +495,7 @@ var ye = ({ caseDbCase: e, ...t }) => {
494
495
  body: a`Are you sure you want to delete the case?`,
495
496
  cancelLabel: a`Cancel`,
496
497
  confirmLabel: a`Delete`,
497
- onConfirm: Pe,
498
+ onConfirm: Fe,
498
499
  ref: k,
499
500
  title: a`Delete case?`
500
501
  })] });
@@ -504,6 +505,6 @@ var ye = ({ caseDbCase: e, ...t }) => {
504
505
  testId: "CaseInfoDialog"
505
506
  });
506
507
  //#endregion
507
- export { Z as n, Ee as t };
508
+ export { Z as n, De as t };
508
509
 
509
510
  //# sourceMappingURL=CaseInfoDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CaseInfoDialog.js","names":[],"sources":["../../src/components/ui/CaseInfoDialog/CaseCaseSetInfo.tsx","../../src/components/ui/CaseInfoDialog/CaseInfoForm.tsx","../../src/components/ui/CaseInfoDialog/ReadOnlyCaseContent.tsx","../../src/components/ui/CaseInfoDialog/CaseContent.tsx","../../src/components/ui/CaseInfoDialog/CaseSharingInfo.tsx","../../src/components/ui/CaseInfoDialog/CaseSharingForm.tsx","../../src/components/ui/CaseInfoDialog/CaseInfoDialog.tsx"],"sourcesContent":["import type { BoxProps } from '@mui/material';\nimport {\n Box,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport type {\n CaseDbCase,\n CaseDbUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { NavLink } from '@gen-epix/ui-client-common/components/ui/NavLink';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useCaseSetCategoryMapQuery } from '../../../dataHooks/useCaseSetCategoriesQuery';\nimport { useCaseSetStatusMapQuery } from '../../../dataHooks/useCaseSetStatusesQuery';\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nexport type CaseCaseSetInfoProps = {\n readonly caseDbCase: CaseDbCase;\n} & BoxProps;\n\nexport const CaseCaseSetInfo = ({ caseDbCase, ...boxProps }: CaseCaseSetInfoProps) => {\n const caseSetCategoryMapQuery = useCaseSetCategoryMapQuery();\n const caseSetStatusMapQuery = useCaseSetStatusMapQuery();\n\n const { t } = useTranslation();\n const caseSetMembersFilter: CaseDbUuidSetFilter = {\n invert: false,\n key: 'case_id',\n members: [caseDbCase.id],\n type: 'UUID_SET',\n };\n const { data: caseSetMembers, error: caseSetMembersError, isLoading: isCaseSetMembersLoading } = useQueryMemo({\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 caseSetsFilter: CaseDbUuidSetFilter = {\n invert: false,\n key: 'id',\n members: caseSetMembers?.map((caseSetMember) => caseSetMember.case_set_id) ?? [],\n type: 'UUID_SET',\n };\n const { data: caseSets, error: caseSetsError, isLoading: isCaseSetsLoading } = useQueryMemo({\n enabled: caseSetsFilter.members.length > 0,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetsPostQuery(caseSetsFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS, caseSetsFilter),\n });\n\n const loadables = useArray([caseSetCategoryMapQuery, caseSetStatusMapQuery]);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Events`}\n </Typography>\n <ResponseHandler\n error={caseSetMembersError || caseSetsError}\n inlineSpinner\n isLoading={isCaseSetMembersLoading || isCaseSetsLoading}\n loadables={loadables}\n shouldHideActionButtons\n >\n {caseSets?.length > 0 && (\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Name`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Category`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Status`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {caseSets?.map((caseSet) => (\n <TableRow key={caseSet.id}>\n <TableCell>\n <NavLink\n activeAsText\n to={CaseSetUtil.createCaseSetLink(caseSet)}\n >\n {caseSet.name}\n </NavLink>\n </TableCell>\n <TableCell>\n {caseSetCategoryMapQuery.map.get(caseSet.case_set_category_id)?.name ?? t`Unknown`}\n </TableCell>\n <TableCell>\n {caseSetStatusMapQuery.map.get(caseSet.case_set_status_id)?.name ?? t`Unknown`}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n {(!caseSets || caseSets?.length === 0) && (\n <Box sx={{ fontStyle: 'italic' }}>\n {t`None`}\n </Box>\n )}\n </ResponseHandler>\n </Box>\n );\n};\n","import {\n use,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useStore } from 'zustand';\nimport { t } from 'i18next';\nimport { useShallow } from 'zustand/shallow';\nimport {\n Box,\n Typography,\n} from '@mui/material';\nimport type { BoxProps } from '@mui/material';\nimport type {\n CaseDbCase,\n CaseDbCaseRights,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbEtlStatus,\n CaseDbUploadAction,\n} from '@gen-epix/api-casedb';\nimport { NotificationService } from '@gen-epix/ui-client-common/classes/services/NotificationService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { Spinner } from '@gen-epix/ui-core-components/components/Spinner';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\nimport { CaseContentForm } from '../CaseContentForm';\n\nexport type CaseInfoFormProps = {\n readonly caseDbCase: CaseDbCase;\n readonly caseRights: CaseDbCaseRights;\n readonly formId: string;\n readonly onFinish: () => void;\n readonly onIsSavingChange: (isSaving: boolean) => void;\n} & BoxProps;\n\nexport const CaseInfoForm = ({ caseDbCase, caseRights, formId, onFinish, onIsSavingChange, ...boxProps }: CaseInfoFormProps) => {\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n\n const mutateCachedCase = useStore(dashboardStore, useShallow((state) => state.mutateCachedCase));\n const [isSaving, setIsSaving] = useState(false);\n\n const enabledColIds = useMemo(() => {\n const colIds: string[] = [];\n\n caseRights.read_col_ids.forEach(colId => {\n if (caseRights.write_col_ids.includes(colId)) {\n colIds.push(colId);\n }\n });\n return colIds;\n }, [caseRights]);\n\n const onFormSubmit = useCallback((caseId: string, content: CaseDbCase['content']) => {\n setIsSaving(true);\n onIsSavingChange(true);\n const perform = async () => {\n const queryKeys = QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASES], true);\n const notificationKey = NotificationService.getInstance().showNotification({\n isLoading: true,\n message: t('Saving case data'),\n severity: 'info',\n });\n try {\n await QueryClientService.getInstance().cancelQueries(queryKeys);\n const uploadResult = (await CaseDbCaseApi.getInstance().uploadCases({\n case_batch: {\n cases: [\n {\n case: {\n case_type_id: completeCaseType.id,\n content,\n created_in_data_collection_id: caseDbCase.created_in_data_collection_id,\n id: caseId,\n },\n },\n ],\n },\n case_type_id: completeCaseType.id,\n on_exists: CaseDbUploadAction.UPDATE,\n })).data;\n if (uploadResult.status !== CaseDbEtlStatus.SKIPPED && uploadResult.status !== CaseDbEtlStatus.SUCCESS && uploadResult.status !== CaseDbEtlStatus.UPDATED) {\n throw new Error('Case upload failed');\n }\n // await CaseDbCaseApi.getInstance().casesPutOne(item.id, item);\n mutateCachedCase(caseDbCase.id, caseDbCase);\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Successfully saved case data.'), 'success');\n } catch (_error) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Could not save case data.'), 'error');\n } finally {\n await QueryClientService.getInstance().invalidateQueryKeys(queryKeys);\n setIsSaving(false);\n onIsSavingChange(false);\n onFinish();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [completeCaseType.id, caseDbCase, mutateCachedCase, onFinish, onIsSavingChange]);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Content`}\n </Typography>\n <Box>\n {isSaving && (\n <Spinner\n inline\n label={t`Saving case data`}\n />\n )}\n {!isSaving && (\n <CaseContentForm\n caseContent={caseDbCase.content}\n caseId={caseDbCase.id}\n completeCaseType={completeCaseType}\n enabledColIds={enabledColIds}\n formId={formId}\n onSubmit={onFormSubmit}\n />\n )}\n </Box>\n </Box>\n );\n};\n","import type { BoxProps } from '@mui/material';\nimport {\n Box,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport { GenericErrorMessage } from '@gen-epix/ui-client-common/components/ui/GenericErrorMessage';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useDataCollectionsMapQuery } from '../../../dataHooks/useDataCollectionsQuery';\n\nexport type ReadOnlyCaseContentProps = {\n readonly caseDbCase: CaseDbCase;\n} & BoxProps;\n\nexport const ReadOnlyCaseContent = ({ caseDbCase, ...boxProps }: ReadOnlyCaseContentProps) => {\n const { t } = useTranslation();\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n\n const loadables = useArray([dataCollectionsMapQuery]);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Read-only content`}\n </Typography>\n {!caseDbCase && (\n <GenericErrorMessage\n error={new Error('Case could not be found')}\n />\n )}\n <ResponseHandler\n inlineSpinner\n loadables={loadables}\n shouldHideActionButtons\n >\n {caseDbCase && (\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Column`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% * 2/3)',\n }}\n >\n {t`Value`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell>\n {t`Case id`}\n </TableCell>\n <TableCell>\n {caseDbCase.id}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n )}\n </ResponseHandler>\n </Box>\n );\n};\n","import type { BoxProps } from '@mui/material';\nimport {\n Box,\n Link,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport { CaseDbColType } from '@gen-epix/api-casedb';\nimport type { EpiContactDetailsDialogRefMethods } from '@gen-epix/ui-client-common/components/epi/EpiContactDetailsDialog';\nimport { EpiContactDetailsDialog } from '@gen-epix/ui-client-common/components/epi/EpiContactDetailsDialog';\nimport { GenericErrorMessage } from '@gen-epix/ui-client-common/components/ui/GenericErrorMessage';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { CaseUtil } from '../../../utils/CaseUtil';\n\n\nexport type CaseContentProps = {\n readonly caseDbCase: CaseDbCase;\n} & BoxProps;\n\nexport const CaseContent = ({ caseDbCase, ...boxProps }: CaseContentProps) => {\n const { t } = useTranslation();\n const contactDetailsDialogRef = useRef<EpiContactDetailsDialogRefMethods>(null);\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n\n const cols = useMemo(() => CaseTypeUtil.getCols(completeCaseType), [completeCaseType]);\n\n const onOrganizationLinkClick = useCallback((organizationId: string, organizationName: string) => {\n contactDetailsDialogRef.current.open({\n organizationId,\n organizationName,\n });\n }, []);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Content`}\n </Typography>\n {!caseDbCase && (\n <GenericErrorMessage\n error={new Error('Case could not be found')}\n />\n )}\n {caseDbCase && (\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: 'calc(100% / 3)',\n }}\n >\n {t`Column`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% / 3 * 2)',\n }}\n >\n {t`Value`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {cols.map(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n const columnValue = CaseUtil.getRowValue(caseDbCase.content, col, completeCaseType);\n return (\n <TableRow key={col.id}>\n <TableCell\n sx={{\n width: 'calc(100% / 3)',\n }}\n >\n {col.label}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% / 3 * 2)',\n }}\n >\n {refCol.col_type === CaseDbColType.ORGANIZATION && !columnValue.isMissing && (\n <Link\n color={'primary'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onOrganizationLinkClick(caseDbCase.content[col.id], columnValue.long);\n }}\n sx={{\n cursor: 'pointer',\n }}\n >\n {columnValue.long}\n </Link>\n )}\n {refCol.col_type !== CaseDbColType.ORGANIZATION && (\n <>\n {columnValue.long}\n </>\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n )}\n <EpiContactDetailsDialog ref={contactDetailsDialogRef} />\n </Box>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport {\n Box,\n Typography,\n} from '@mui/material';\nimport type { BoxProps } from '@mui/material';\n\nimport { DataCollectionAccessInfo } from '../DataCollectionAccessInfo';\n\nexport type CaseSharingInfoProps = BoxProps;\n\nexport const CaseSharingInfo = ({ ...boxProps }: CaseSharingInfoProps) => {\n const { t } = useTranslation();\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Shared in`}\n </Typography>\n <DataCollectionAccessInfo />\n </Box>\n );\n};\n","import {\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n object,\n string,\n} from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport type { Resolver } from 'react-hook-form';\nimport { useForm } from 'react-hook-form';\nimport difference from 'lodash/difference';\nimport {\n Box,\n Typography,\n} from '@mui/material';\nimport type { BoxProps } from '@mui/material';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { NotificationService } from '@gen-epix/ui-client-common/classes/services/NotificationService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { Spinner } from '@gen-epix/ui-core-components/components/Spinner';\nimport { GenericForm } from '@gen-epix/ui-core-form/components/helpers/GenericForm';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { FormUtil } from '@gen-epix/ui-core-form/utils/FormUtil';\n\nimport { useCaseAbacContext } from '../../../context/caseAbac';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nexport type CaseSharingFormProps = {\n readonly caseDbCase: CaseDbCase;\n readonly formId: string;\n readonly onFinish: () => void;\n readonly onIsSavingChange: (isSaving: boolean) => void;\n} & BoxProps;\n\ntype FormFields = {\n dataCollectionIds?: string[];\n};\n\nexport const CaseSharingForm = ({ caseDbCase, formId, onFinish, onIsSavingChange, ...boxProps }: CaseSharingFormProps) => {\n const { t } = useTranslation();\n const [isSaving, setIsSaving] = useState(false);\n const caseAbacContext = useCaseAbacContext();\n\n const schema = useMemo(() => object<FormFields>().shape({\n dataCollectionIds: array().of(string().uuid4()).required(),\n }), []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Data collections`,\n multiple: true,\n name: 'dataCollectionIds',\n options: caseAbacContext?.itemDataCollectionOptions?.[0] ?? [],\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const, [t, caseAbacContext]);\n\n const item = useMemo<FormFields>(() => {\n return {\n dataCollectionIds: caseAbacContext?.rights?.[0]?.shared_in_data_collection_ids ?? [],\n };\n }, [caseAbacContext]);\n\n const values = useMemo<FormFields>(() => FormUtil.createFormValues(formFieldDefinitions, item), [formFieldDefinitions, item]);\n\n const formMethods = useForm<FormFields>({\n resolver: yupResolver(schema) as Resolver<FormFields>,\n values,\n });\n const { handleSubmit } = formMethods;\n\n const onFormSubmit = useCallback(({ dataCollectionIds }: FormFields) => {\n const perform = async () => {\n setIsSaving(true);\n onIsSavingChange(true);\n const queryKeys = QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_DATA_COLLECTION_LINKS], true);\n const notificationKey = NotificationService.getInstance().showNotification({\n isLoading: true,\n message: t('Saving case data collections'),\n severity: 'info',\n });\n try {\n await QueryClientService.getInstance().cancelQueries(queryKeys);\n const rights = caseAbacContext?.rights?.[0];\n const dataCollectionIdsToAdd = difference(dataCollectionIds, rights.shared_in_data_collection_ids);\n const dataCollectionIdsToRemove = difference(rights.shared_in_data_collection_ids, dataCollectionIds);\n\n if (dataCollectionIdsToAdd.length > 0) {\n await CaseDbCaseApi.getInstance().caseDataCollectionLinksPostSome(dataCollectionIdsToAdd.map(data_collection_id => ({\n case_id: caseDbCase.id,\n data_collection_id,\n })));\n }\n if (dataCollectionIdsToRemove.length > 0) {\n await CaseDbCaseApi.getInstance().caseDataCollectionLinksDeleteSome(caseAbacContext.itemDataCollectionLinks[0]?.filter(x => dataCollectionIdsToRemove.includes(x.data_collection_id)).map(x => x.id).join(','));\n }\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Successfully saved case data collections.'), 'success');\n } catch (_error) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Could not save case data collections.'), 'error');\n } finally {\n await QueryClientService.getInstance().invalidateQueryKeys(queryKeys);\n setIsSaving(false);\n onIsSavingChange(false);\n onFinish();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [caseAbacContext, caseDbCase.id, onFinish, onIsSavingChange, t]);\n\n if (isSaving) {\n return (\n <Spinner\n inline\n label={t`Saving case data collections`}\n />\n );\n }\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Data collections`}\n </Typography>\n <GenericForm<FormFields>\n formFieldDefinitions={formFieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n schema={schema}\n />\n </Box>\n );\n};\n","import SaveIcon from '@mui/icons-material/Save';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ShareIcon from '@mui/icons-material/Share';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ArrowLeftIcon from '@mui/icons-material/ArrowLeft';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbCase,\n CaseDbUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui-core-components/components/Confirmation';\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 { Confirmation } from '@gen-epix/ui-core-components/components/Confirmation';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { Spinner } from '@gen-epix/ui-core-components/components/Spinner';\nimport { useDeleteMutation } from '@gen-epix/ui-client-common/hooks/useDeleteMutation';\nimport { useItemQuery } from '@gen-epix/ui-client-common/hooks/useItemQuery';\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 { Typography } from '@mui/material';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport type { CaseAbacContext } from '../../../context/caseAbac';\nimport { CaseAbacContextProvider } from '../../../context/caseAbac';\nimport { useCaseRightsQuery } from '../../../dataHooks/useCaseRightsQuery';\nimport {\n useDataCollectionOptionsQuery,\n useDataCollectionsMapQuery,\n useDataCollectionsQuery,\n} from '../../../dataHooks/useDataCollectionsQuery';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { CaseCaseSetInfo } from './CaseCaseSetInfo';\nimport { CaseInfoForm } from './CaseInfoForm';\nimport { ReadOnlyCaseContent } from './ReadOnlyCaseContent';\nimport { CaseContent } from './CaseContent';\nimport { CaseSharingInfo } from './CaseSharingInfo';\nimport { CaseSharingForm } from './CaseSharingForm';\n\n\nexport enum CASE_INFO_DIALOG_TAB_NAME {\n EDIT = 'EDIT',\n INFO = 'INFO',\n SHARING = 'SHARING',\n}\n\nexport interface CaseInfoDialogOpenProps {\n caseId: string;\n caseTypeId: string;\n initialTab?: CASE_INFO_DIALOG_TAB_NAME;\n}\n\nexport interface CaseInfoDialogProps extends WithDialogRenderProps<CaseInfoDialogOpenProps> {\n //\n}\n\nexport type CaseInfoDialogRefMethods = WithDialogRefMethods<CaseInfoDialogProps, CaseInfoDialogOpenProps>;\n\nexport const CaseInfoDialog = withDialog<CaseInfoDialogProps, CaseInfoDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onTitleChange,\n openProps,\n }: CaseInfoDialogProps,\n): ReactElement => {\n const { t } = useTranslation();\n const caseIds = useMemo(() => [openProps.caseId], [openProps.caseId]);\n const dataCollectionsQuery = useDataCollectionsQuery();\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n\n const dashboardStore = use(DashboardStoreContext);\n const fetchData = useStore(dashboardStore, useShallow((state) => state.fetchData));\n const [currentTab, setCurrentTab] = useState<CASE_INFO_DIALOG_TAB_NAME>(openProps.initialTab ?? CASE_INFO_DIALOG_TAB_NAME.INFO);\n const [isEpiCaseFormSaving, setIsEpiCaseFormSaving] = useState(false);\n const [isEpiCaseDataCollectionFormSaving, setIsEpiCaseDataCollectionFormSaving] = useState(false);\n const [isRefreshingData, setIsRefreshingData] = useState(false);\n const deleteConfirmationRef = useRef<ConfirmationRefMethods>(null);\n const valuesFormId = useId();\n const dataCollectionsFormId = useId();\n\n const onFinish = useCallback(async () => {\n setIsEpiCaseFormSaving(false);\n setIsEpiCaseDataCollectionFormSaving(false);\n setIsRefreshingData(true);\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.INFO);\n await fetchData();\n setIsRefreshingData(false);\n }, [fetchData]);\n\n const onDeleteSuccess = useCallback(async () => {\n await onFinish();\n onClose();\n }, [onClose, onFinish]);\n\n const onDeleteError = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const { isMutating: isDeleteMutating, mutate: deleteMutate } = useDeleteMutation<CaseDbCase>({\n associationQueryKeys: QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASES], true),\n getErrorNotificationMessage: (data) => t('Unable to remove case: {{id}}.', { id: data.id }),\n getProgressNotificationMessage: (data) => t('Deleting case: {{id}}...', { id: data.id }),\n getSuccessNotificationMessage: (data) => t('Case: {{id}}, has been removed.', { id: data.id }),\n onError: onDeleteError,\n onSuccess: onDeleteSuccess,\n queryFn: async (item: CaseDbCase) => {\n return await CaseDbCaseApi.getInstance().casesDeleteOne(item.id);\n },\n resourceQueryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASES),\n });\n\n const caseRightsQuery = useCaseRightsQuery(caseIds, openProps.caseTypeId, !isDeleteMutating && !isRefreshingData);\n const loadables = useArray([caseRightsQuery, dataCollectionsQuery, dataCollectionsMapQuery, dataCollectionOptionsQuery]);\n\n const { data: caseDbCase, error: caseError, isLoading: caseIsLoading } = useItemQuery<CaseDbCase>({\n baseQueryKey: CASEDB_QUERY_KEY.CASES_LAZY,\n itemId: openProps.caseId,\n useQueryOptions: {\n enabled: !isDeleteMutating && !isRefreshingData,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().casesGetOne(openProps.caseId, { signal });\n return response.data;\n },\n },\n });\n\n const caseDataCollectionLinksFilter = useMemo<CaseDbUuidSetFilter>(() => ({\n invert: false,\n key: 'case_id',\n members: [caseDbCase?.id],\n type: 'UUID_SET',\n }), [caseDbCase?.id]);\n const { data: caseDataCollectionLinks, error: caseDataCollectionLinksError, isLoading: isCaseDataCollectionLinksLoading } = useQueryMemo({\n enabled: !!caseDbCase,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseDataCollectionLinksPostQuery(caseDataCollectionLinksFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_DATA_COLLECTION_LINKS, caseDataCollectionLinksFilter),\n });\n\n\n const canEdit = useMemo(() => {\n return !!caseRightsQuery.data && caseRightsQuery.data.some((right) => right.is_full_access || right.write_col_ids.length);\n }, [caseRightsQuery.data]);\n\n const canShare = useMemo(() => {\n return !!caseRightsQuery.data && caseRightsQuery.data.some((right) => right.is_full_access || right.remove_data_collection_ids.length || right.add_data_collection_ids.length);\n }, [caseRightsQuery.data]);\n\n const canDelete = useCallback(() => {\n return !!caseRightsQuery.data && caseRightsQuery.data.some((right) => right.is_full_access || right.can_delete);\n }, [caseRightsQuery]);\n\n const onEditButtonClick = useCallback(() => {\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.EDIT);\n }, []);\n\n const onShareButtonClick = useCallback(() => {\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.SHARING);\n }, []);\n\n const onGoBackButtonClick = useCallback(() => {\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.INFO);\n }, []);\n\n\n const onEpiCaseFormIsSavingChange = useCallback((isSaving: boolean) => {\n setIsEpiCaseFormSaving(isSaving);\n }, []);\n\n const onEpiCaseDataCollectionFormIsSavingChange = useCallback((isSaving: boolean) => {\n setIsEpiCaseDataCollectionFormSaving(isSaving);\n }, []);\n\n const onDeleteEventButtonClick = useCallback(() => {\n deleteConfirmationRef.current.open();\n }, []);\n\n const onDeleteConfirmationConfirm = useCallback(() => {\n deleteMutate(caseDbCase);\n }, [caseDbCase, deleteMutate]);\n\n const isSaving = isEpiCaseFormSaving || isEpiCaseDataCollectionFormSaving;\n\n useEffect(() => {\n if (currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT) {\n onTitleChange(t`Case information - Edit`);\n } else if (currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING) {\n onTitleChange(t`Case information - Share`);\n } else {\n onTitleChange(t`Case information`);\n }\n }, [currentTab, onTitleChange, t]);\n\n useEffect(() => {\n const actions: DialogAction[] = [];\n\n if (currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT || currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING) {\n actions.push({\n ...TestIdUtil.createAttributes('CaseInfoDialog-goBackButton'),\n color: 'primary',\n disabled: isSaving,\n label: t`Go back`,\n onClick: onGoBackButtonClick,\n startIcon: <ArrowLeftIcon />,\n variant: 'outlined',\n });\n }\n\n if (currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT && canEdit) {\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-saveButton'),\n color: 'secondary',\n disabled: isSaving,\n form: valuesFormId,\n label: t`Save`,\n startIcon: <SaveIcon />,\n type: 'submit',\n variant: 'contained',\n },\n );\n } else if (currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING && canShare) {\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-saveButton'),\n color: 'secondary',\n disabled: isSaving,\n form: dataCollectionsFormId,\n label: t`Save`,\n startIcon: <SaveIcon />,\n type: 'submit',\n variant: 'contained',\n },\n );\n } else if (currentTab === CASE_INFO_DIALOG_TAB_NAME.INFO) {\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseSetInfoDialog-deleteButton'),\n color: 'primary',\n disabled: !canDelete(),\n label: t`Delete`,\n onClick: onDeleteEventButtonClick,\n startIcon: <DeleteIcon />,\n variant: 'outlined',\n },\n );\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-editDataCollectionsButton'),\n color: 'primary',\n disabled: !canShare,\n label: t`Share`,\n onClick: onShareButtonClick,\n startIcon: <ShareIcon />,\n variant: 'outlined',\n },\n );\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-editCaseContentButton'),\n color: 'primary',\n disabled: !canEdit,\n label: t`Edit`,\n onClick: onEditButtonClick,\n startIcon: <EditIcon />,\n variant: 'outlined',\n },\n );\n }\n onActionsChange(actions);\n }, [onActionsChange, onEditButtonClick, t, currentTab, onGoBackButtonClick, onShareButtonClick, valuesFormId, dataCollectionsFormId, onClose, isSaving, canShare, onDeleteEventButtonClick, canDelete, canEdit]);\n\n const caseAbacContextValue = useMemo<CaseAbacContext>(() => {\n return {\n createdInDataCollection: caseDbCase ? dataCollectionsMapQuery.map.get(caseDbCase.created_in_data_collection_id) : undefined,\n itemDataCollectionLinks: [caseDataCollectionLinks],\n rights: caseRightsQuery.data,\n userDataCollectionOptions: dataCollectionOptionsQuery.options,\n userDataCollections: dataCollectionsQuery.data,\n userDataCollectionsMap: dataCollectionsMapQuery.map,\n };\n }, [dataCollectionsQuery.data, dataCollectionsMapQuery.map, dataCollectionOptionsQuery.options, caseDataCollectionLinks, caseRightsQuery.data, caseDbCase]);\n\n if (isRefreshingData) {\n return (\n <Spinner\n inline\n label={t`Refreshing data`}\n />\n );\n }\n\n return (\n <>\n <ResponseHandler\n error={caseError || caseDataCollectionLinksError}\n inlineSpinner\n isLoading={caseIsLoading || isCaseDataCollectionLinksLoading}\n loadables={loadables}\n shouldHideActionButtons\n >\n <CaseAbacContextProvider caseAbac={caseAbacContextValue}>\n <ReadOnlyCaseContent\n caseDbCase={caseDbCase}\n sx={{\n marginBottom: 2,\n }}\n />\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.INFO && (\n <>\n <CaseSharingInfo\n sx={{\n marginBottom: 2,\n }}\n />\n <CaseCaseSetInfo\n caseDbCase={caseDbCase}\n sx={{\n marginBottom: 2,\n }}\n />\n <CaseContent\n caseDbCase={caseDbCase}\n sx={{\n marginBottom: 2,\n }}\n />\n </>\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT && canEdit && (\n <CaseInfoForm\n caseDbCase={caseDbCase}\n caseRights={caseRightsQuery.data?.[0]}\n formId={valuesFormId}\n onFinish={onFinish}\n onIsSavingChange={onEpiCaseFormIsSavingChange}\n />\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT && !canEdit && (\n <Typography variant={'body1'}>\n {t`You do not have permissions to edit this case.`}\n </Typography>\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING && canShare && (\n <CaseSharingForm\n caseDbCase={caseDbCase}\n formId={dataCollectionsFormId}\n onFinish={onFinish}\n onIsSavingChange={onEpiCaseDataCollectionFormIsSavingChange}\n />\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING && !canShare && (\n <Typography variant={'body1'}>\n {t`You do not have permissions to share this case.`}\n </Typography>\n )}\n </CaseAbacContextProvider>\n </ResponseHandler>\n <Confirmation\n body={t`Are you sure you want to delete the case?`}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Delete`}\n onConfirm={onDeleteConfirmationConfirm}\n ref={deleteConfirmationRef}\n title={t`Delete case?`}\n />\n </>\n );\n}, {\n fullWidth: true,\n maxWidth: 'lg',\n testId: 'CaseInfoDialog',\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"CaseInfoDialog.js","names":[],"sources":["../../src/components/ui/CaseInfoDialog/CaseCaseSetInfo.tsx","../../src/components/ui/CaseInfoDialog/CaseInfoForm.tsx","../../src/components/ui/CaseInfoDialog/ReadOnlyCaseContent.tsx","../../src/components/ui/CaseInfoDialog/CaseContent.tsx","../../src/components/ui/CaseInfoDialog/CaseSharingInfo.tsx","../../src/components/ui/CaseInfoDialog/CaseSharingForm.tsx","../../src/components/ui/CaseInfoDialog/CaseInfoDialog.tsx"],"sourcesContent":["import type { BoxProps } from '@mui/material';\nimport {\n Box,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport type {\n CaseDbCase,\n CaseDbUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { NavLink } from '@gen-epix/ui-client-common/components/ui/NavLink';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useCaseSetCategoryMapQuery } from '../../../dataHooks/useCaseSetCategoriesQuery';\nimport { useCaseSetStatusMapQuery } from '../../../dataHooks/useCaseSetStatusesQuery';\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nexport type CaseCaseSetInfoProps = {\n readonly caseDbCase: CaseDbCase;\n} & BoxProps;\n\nexport const CaseCaseSetInfo = ({ caseDbCase, ...boxProps }: CaseCaseSetInfoProps) => {\n const caseSetCategoryMapQuery = useCaseSetCategoryMapQuery();\n const caseSetStatusMapQuery = useCaseSetStatusMapQuery();\n\n const { t } = useTranslation();\n const caseSetMembersFilter: CaseDbUuidSetFilter = {\n invert: false,\n key: 'case_id',\n members: [caseDbCase.id],\n type: 'UUID_SET',\n };\n const { data: caseSetMembers, error: caseSetMembersError, isLoading: isCaseSetMembersLoading } = useQueryMemo({\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 caseSetsFilter: CaseDbUuidSetFilter = {\n invert: false,\n key: 'id',\n members: caseSetMembers?.map((caseSetMember) => caseSetMember.case_set_id) ?? [],\n type: 'UUID_SET',\n };\n const { data: caseSets, error: caseSetsError, isLoading: isCaseSetsLoading } = useQueryMemo({\n enabled: caseSetsFilter.members.length > 0,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetsPostQuery(caseSetsFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS, caseSetsFilter),\n });\n\n const loadables = useArray([caseSetCategoryMapQuery, caseSetStatusMapQuery]);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Events`}\n </Typography>\n <ResponseHandler\n error={caseSetMembersError || caseSetsError}\n inlineSpinner\n isLoading={isCaseSetMembersLoading || isCaseSetsLoading}\n loadables={loadables}\n shouldHideActionButtons\n >\n {caseSets?.length > 0 && (\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Name`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Category`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Status`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {caseSets?.map((caseSet) => (\n <TableRow key={caseSet.id}>\n <TableCell>\n <NavLink\n activeAsText\n to={CaseSetUtil.createCaseSetLink(caseSet)}\n >\n {caseSet.name}\n </NavLink>\n </TableCell>\n <TableCell>\n {caseSetCategoryMapQuery.map.get(caseSet.case_set_category_id)?.name ?? t`Unknown`}\n </TableCell>\n <TableCell>\n {caseSetStatusMapQuery.map.get(caseSet.case_set_status_id)?.name ?? t`Unknown`}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n {(!caseSets || caseSets?.length === 0) && (\n <Box sx={{ fontStyle: 'italic' }}>\n {t`None`}\n </Box>\n )}\n </ResponseHandler>\n </Box>\n );\n};\n","import {\n use,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useStore } from 'zustand';\nimport { t } from 'i18next';\nimport { useShallow } from 'zustand/shallow';\nimport {\n Box,\n Typography,\n} from '@mui/material';\nimport type { BoxProps } from '@mui/material';\nimport type {\n CaseDbCase,\n CaseDbCaseRights,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbEtlStatus,\n CaseDbUploadAction,\n} from '@gen-epix/api-casedb';\nimport { NotificationService } from '@gen-epix/ui-client-common/classes/services/NotificationService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { Spinner } from '@gen-epix/ui-core-components/components/Spinner';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\nimport { CaseContentForm } from '../CaseContentForm';\n\nexport type CaseInfoFormProps = {\n readonly caseDbCase: CaseDbCase;\n readonly caseRights: CaseDbCaseRights;\n readonly formId: string;\n readonly onFinish: () => void;\n readonly onIsSavingChange: (isSaving: boolean) => void;\n} & BoxProps;\n\nexport const CaseInfoForm = ({ caseDbCase, caseRights, formId, onFinish, onIsSavingChange, ...boxProps }: CaseInfoFormProps) => {\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n\n const mutateCachedCase = useStore(dashboardStore, useShallow((state) => state.mutateCachedCase));\n const [isSaving, setIsSaving] = useState(false);\n\n const enabledColIds = useMemo(() => {\n const colIds: string[] = [];\n\n caseRights.read_col_ids.forEach(colId => {\n if (caseRights.write_col_ids.includes(colId)) {\n colIds.push(colId);\n }\n });\n return colIds;\n }, [caseRights]);\n\n const onFormSubmit = useCallback((caseId: string, content: CaseDbCase['content']) => {\n setIsSaving(true);\n onIsSavingChange(true);\n const perform = async () => {\n const queryKeys = QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASES], true);\n const notificationKey = NotificationService.getInstance().showNotification({\n isLoading: true,\n message: t('Saving case data'),\n severity: 'info',\n });\n try {\n await QueryClientService.getInstance().cancelQueries(queryKeys);\n const uploadResult = (await CaseDbCaseApi.getInstance().uploadCases({\n case_batch: {\n cases: [\n {\n case: {\n case_type_id: completeCaseType.id,\n content,\n created_in_data_collection_id: caseDbCase.created_in_data_collection_id,\n id: caseId,\n },\n },\n ],\n },\n case_type_id: completeCaseType.id,\n on_exists: CaseDbUploadAction.UPDATE,\n })).data;\n if (uploadResult.status !== CaseDbEtlStatus.SKIPPED && uploadResult.status !== CaseDbEtlStatus.SUCCESS && uploadResult.status !== CaseDbEtlStatus.UPDATED) {\n throw new Error('Case upload failed');\n }\n // await CaseDbCaseApi.getInstance().casesPutOne(item.id, item);\n mutateCachedCase(caseDbCase.id, caseDbCase);\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Successfully saved case data.'), 'success');\n } catch (_error) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Could not save case data.'), 'error');\n } finally {\n await QueryClientService.getInstance().invalidateQueryKeys(queryKeys);\n setIsSaving(false);\n onIsSavingChange(false);\n onFinish();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [completeCaseType.id, caseDbCase, mutateCachedCase, onFinish, onIsSavingChange]);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Content`}\n </Typography>\n <Box>\n {isSaving && (\n <Spinner\n inline\n label={t`Saving case data`}\n />\n )}\n {!isSaving && (\n <CaseContentForm\n caseContent={caseDbCase.content}\n caseId={caseDbCase.id}\n completeCaseType={completeCaseType}\n enabledColIds={enabledColIds}\n formId={formId}\n onSubmit={onFormSubmit}\n />\n )}\n </Box>\n </Box>\n );\n};\n","import type { BoxProps } from '@mui/material';\nimport {\n Box,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport { GenericErrorMessage } from '@gen-epix/ui-client-common/components/ui/GenericErrorMessage';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useDataCollectionsMapQuery } from '../../../dataHooks/useDataCollectionsQuery';\n\nexport type ReadOnlyCaseContentProps = {\n readonly caseDbCase: CaseDbCase;\n} & BoxProps;\n\nexport const ReadOnlyCaseContent = ({ caseDbCase, ...boxProps }: ReadOnlyCaseContentProps) => {\n const { t } = useTranslation();\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n\n const loadables = useArray([dataCollectionsMapQuery]);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Read-only content`}\n </Typography>\n {!caseDbCase && (\n <GenericErrorMessage\n error={new Error('Case could not be found')}\n />\n )}\n <ResponseHandler\n inlineSpinner\n loadables={loadables}\n shouldHideActionButtons\n >\n {caseDbCase && (\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: 'calc(100% * 1/3)',\n }}\n >\n {t`Column`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% * 2/3)',\n }}\n >\n {t`Value`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell>\n {t`Case id`}\n </TableCell>\n <TableCell>\n {caseDbCase.id}\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n )}\n </ResponseHandler>\n </Box>\n );\n};\n","import type { BoxProps } from '@mui/material';\nimport {\n Box,\n Link,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport { CaseDbColType } from '@gen-epix/api-casedb';\nimport type { EpiContactDetailsDialogRefMethods } from '@gen-epix/ui-client-common/components/epi/EpiContactDetailsDialog';\nimport { EpiContactDetailsDialog } from '@gen-epix/ui-client-common/components/epi/EpiContactDetailsDialog';\nimport { GenericErrorMessage } from '@gen-epix/ui-client-common/components/ui/GenericErrorMessage';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { CaseUtil } from '../../../utils/CaseUtil';\n\n\nexport type CaseContentProps = {\n readonly caseDbCase: CaseDbCase;\n} & BoxProps;\n\nexport const CaseContent = ({ caseDbCase, ...boxProps }: CaseContentProps) => {\n const { t } = useTranslation();\n const contactDetailsDialogRef = useRef<EpiContactDetailsDialogRefMethods>(null);\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n\n const cols = useMemo(() => CaseTypeUtil.getCols(completeCaseType), [completeCaseType]);\n\n const onOrganizationLinkClick = useCallback((organizationId: string, organizationName: string) => {\n contactDetailsDialogRef.current.open({\n organizationId,\n organizationName,\n });\n }, []);\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Content`}\n </Typography>\n {!caseDbCase && (\n <GenericErrorMessage\n error={new Error('Case could not be found')}\n />\n )}\n {caseDbCase && (\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: 'calc(100% / 3)',\n }}\n >\n {t`Column`}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% / 3 * 2)',\n }}\n >\n {t`Value`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {cols.map(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n const columnValue = CaseUtil.getRowValue(caseDbCase.content, col, completeCaseType);\n return (\n <TableRow key={col.id}>\n <TableCell\n sx={{\n width: 'calc(100% / 3)',\n }}\n >\n {col.label}\n </TableCell>\n <TableCell\n sx={{\n width: 'calc(100% / 3 * 2)',\n }}\n >\n {refCol.col_type === CaseDbColType.ORGANIZATION && !columnValue.isMissing && (\n <Link\n color={'primary'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onOrganizationLinkClick(caseDbCase.content[col.id], columnValue.long);\n }}\n sx={{\n cursor: 'pointer',\n }}\n >\n {columnValue.long}\n </Link>\n )}\n {refCol.col_type !== CaseDbColType.ORGANIZATION && (\n <>\n {columnValue.long}\n </>\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n )}\n <EpiContactDetailsDialog ref={contactDetailsDialogRef} />\n </Box>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport {\n Box,\n Typography,\n} from '@mui/material';\nimport type { BoxProps } from '@mui/material';\n\nimport { DataCollectionAccessInfo } from '../DataCollectionAccessInfo';\n\nexport type CaseSharingInfoProps = BoxProps;\n\nexport const CaseSharingInfo = ({ ...boxProps }: CaseSharingInfoProps) => {\n const { t } = useTranslation();\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Shared in`}\n </Typography>\n <DataCollectionAccessInfo />\n </Box>\n );\n};\n","import {\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n object,\n string,\n} from 'yup';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport type { Resolver } from 'react-hook-form';\nimport { useForm } from 'react-hook-form';\nimport difference from 'lodash/difference';\nimport {\n Box,\n Typography,\n} from '@mui/material';\nimport type { BoxProps } from '@mui/material';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { NotificationService } from '@gen-epix/ui-client-common/classes/services/NotificationService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { Spinner } from '@gen-epix/ui-core-components/components/Spinner';\nimport { GenericForm } from '@gen-epix/ui-core-form/components/helpers/GenericForm';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { FormUtil } from '@gen-epix/ui-core-form/utils/FormUtil';\n\nimport { useCaseAbacContext } from '../../../context/caseAbac';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nexport type CaseSharingFormProps = {\n readonly caseDbCase: CaseDbCase;\n readonly formId: string;\n readonly onFinish: () => void;\n readonly onIsSavingChange: (isSaving: boolean) => void;\n} & BoxProps;\n\ntype FormFields = {\n dataCollectionIds?: string[];\n};\n\nexport const CaseSharingForm = ({ caseDbCase, formId, onFinish, onIsSavingChange, ...boxProps }: CaseSharingFormProps) => {\n const { t } = useTranslation();\n const [isSaving, setIsSaving] = useState(false);\n const caseAbacContext = useCaseAbacContext();\n\n const schema = useMemo(() => object<FormFields>().shape({\n dataCollectionIds: array().of(string().uuid4()).required(),\n }), []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Data collections`,\n multiple: true,\n name: 'dataCollectionIds',\n options: caseAbacContext?.itemDataCollectionOptions?.[0] ?? [],\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const, [t, caseAbacContext]);\n\n const item = useMemo<FormFields>(() => {\n return {\n dataCollectionIds: caseAbacContext?.rights?.[0]?.shared_in_data_collection_ids ?? [],\n };\n }, [caseAbacContext]);\n\n const values = useMemo<FormFields>(() => FormUtil.createFormValues(formFieldDefinitions, item), [formFieldDefinitions, item]);\n\n const formMethods = useForm<FormFields>({\n resolver: yupResolver(schema) as Resolver<FormFields>,\n values,\n });\n const { handleSubmit } = formMethods;\n\n const onFormSubmit = useCallback(({ dataCollectionIds }: FormFields) => {\n const perform = async () => {\n setIsSaving(true);\n onIsSavingChange(true);\n const queryKeys = QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_DATA_COLLECTION_LINKS], true);\n const notificationKey = NotificationService.getInstance().showNotification({\n isLoading: true,\n message: t('Saving case data collections'),\n severity: 'info',\n });\n try {\n await QueryClientService.getInstance().cancelQueries(queryKeys);\n const rights = caseAbacContext?.rights?.[0];\n const dataCollectionIdsToAdd = difference(dataCollectionIds, rights.shared_in_data_collection_ids);\n const dataCollectionIdsToRemove = difference(rights.shared_in_data_collection_ids, dataCollectionIds);\n\n if (dataCollectionIdsToAdd.length > 0) {\n await CaseDbCaseApi.getInstance().caseDataCollectionLinksPostSome(dataCollectionIdsToAdd.map(data_collection_id => ({\n case_id: caseDbCase.id,\n data_collection_id,\n })));\n }\n if (dataCollectionIdsToRemove.length > 0) {\n await CaseDbCaseApi.getInstance().caseDataCollectionLinksDeleteSome(caseAbacContext.itemDataCollectionLinks[0]?.filter(x => dataCollectionIdsToRemove.includes(x.data_collection_id)).map(x => x.id).join(','));\n }\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Successfully saved case data collections.'), 'success');\n } catch (_error) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Could not save case data collections.'), 'error');\n } finally {\n await QueryClientService.getInstance().invalidateQueryKeys(queryKeys);\n setIsSaving(false);\n onIsSavingChange(false);\n onFinish();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [caseAbacContext, caseDbCase.id, onFinish, onIsSavingChange, t]);\n\n if (isSaving) {\n return (\n <Spinner\n inline\n label={t`Saving case data collections`}\n />\n );\n }\n\n return (\n <Box {...boxProps}>\n <Typography variant={'h6'}>\n {t`Data collections`}\n </Typography>\n <GenericForm<FormFields>\n formFieldDefinitions={formFieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n schema={schema}\n />\n </Box>\n );\n};\n","import SaveIcon from '@mui/icons-material/Save';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ShareIcon from '@mui/icons-material/Share';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport ArrowLeftIcon from '@mui/icons-material/ArrowLeft';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbCase,\n CaseDbUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui-core-components/components/Confirmation';\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 { Confirmation } from '@gen-epix/ui-core-components/components/Confirmation';\nimport { FeatureFlagsService } from '@gen-epix/ui-client-common/classes/services/FeatureFlagsService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { Spinner } from '@gen-epix/ui-core-components/components/Spinner';\nimport { useDeleteMutation } from '@gen-epix/ui-client-common/hooks/useDeleteMutation';\nimport { useItemQuery } from '@gen-epix/ui-client-common/hooks/useItemQuery';\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 { Typography } from '@mui/material';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport type { CaseAbacContext } from '../../../context/caseAbac';\nimport { CaseAbacContextProvider } from '../../../context/caseAbac';\nimport { useCaseRightsQuery } from '../../../dataHooks/useCaseRightsQuery';\nimport {\n useDataCollectionOptionsQuery,\n useDataCollectionsMapQuery,\n useDataCollectionsQuery,\n} from '../../../dataHooks/useDataCollectionsQuery';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { CaseCaseSetInfo } from './CaseCaseSetInfo';\nimport { CaseInfoForm } from './CaseInfoForm';\nimport { ReadOnlyCaseContent } from './ReadOnlyCaseContent';\nimport { CaseContent } from './CaseContent';\nimport { CaseSharingInfo } from './CaseSharingInfo';\nimport { CaseSharingForm } from './CaseSharingForm';\n\n\nexport enum CASE_INFO_DIALOG_TAB_NAME {\n EDIT = 'EDIT',\n INFO = 'INFO',\n SHARING = 'SHARING',\n}\n\nexport interface CaseInfoDialogOpenProps {\n caseId: string;\n caseTypeId: string;\n initialTab?: CASE_INFO_DIALOG_TAB_NAME;\n}\n\nexport interface CaseInfoDialogProps extends WithDialogRenderProps<CaseInfoDialogOpenProps> {\n //\n}\n\nexport type CaseInfoDialogRefMethods = WithDialogRefMethods<CaseInfoDialogProps, CaseInfoDialogOpenProps>;\n\nexport const CaseInfoDialog = withDialog<CaseInfoDialogProps, CaseInfoDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onTitleChange,\n openProps,\n }: CaseInfoDialogProps,\n): ReactElement => {\n const { t } = useTranslation();\n const caseIds = useMemo(() => [openProps.caseId], [openProps.caseId]);\n const dataCollectionsQuery = useDataCollectionsQuery();\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n\n const dashboardStore = use(DashboardStoreContext);\n const fetchData = useStore(dashboardStore, useShallow((state) => state.fetchData));\n const [currentTab, setCurrentTab] = useState<CASE_INFO_DIALOG_TAB_NAME>(openProps.initialTab ?? CASE_INFO_DIALOG_TAB_NAME.INFO);\n const [isEpiCaseFormSaving, setIsEpiCaseFormSaving] = useState(false);\n const [isEpiCaseDataCollectionFormSaving, setIsEpiCaseDataCollectionFormSaving] = useState(false);\n const [isRefreshingData, setIsRefreshingData] = useState(false);\n const deleteConfirmationRef = useRef<ConfirmationRefMethods>(null);\n const valuesFormId = useId();\n const dataCollectionsFormId = useId();\n\n const onFinish = useCallback(async () => {\n setIsEpiCaseFormSaving(false);\n setIsEpiCaseDataCollectionFormSaving(false);\n setIsRefreshingData(true);\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.INFO);\n await fetchData();\n setIsRefreshingData(false);\n }, [fetchData]);\n\n const onDeleteSuccess = useCallback(async () => {\n await onFinish();\n onClose();\n }, [onClose, onFinish]);\n\n const onDeleteError = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const { isMutating: isDeleteMutating, mutate: deleteMutate } = useDeleteMutation<CaseDbCase>({\n associationQueryKeys: QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASES], true),\n getErrorNotificationMessage: (data) => t('Unable to remove case: {{id}}.', { id: data.id }),\n getProgressNotificationMessage: (data) => t('Deleting case: {{id}}...', { id: data.id }),\n getSuccessNotificationMessage: (data) => t('Case: {{id}}, has been removed.', { id: data.id }),\n onError: onDeleteError,\n onSuccess: onDeleteSuccess,\n queryFn: async (item: CaseDbCase) => {\n return await CaseDbCaseApi.getInstance().casesDeleteOne(item.id);\n },\n resourceQueryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASES),\n });\n\n const caseRightsQuery = useCaseRightsQuery(caseIds, openProps.caseTypeId, !isDeleteMutating && !isRefreshingData);\n const loadables = useArray([caseRightsQuery, dataCollectionsQuery, dataCollectionsMapQuery, dataCollectionOptionsQuery]);\n\n const { data: caseDbCase, error: caseError, isLoading: caseIsLoading } = useItemQuery<CaseDbCase>({\n baseQueryKey: CASEDB_QUERY_KEY.CASES_LAZY,\n itemId: openProps.caseId,\n useQueryOptions: {\n enabled: !isDeleteMutating && !isRefreshingData,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().casesGetOne(openProps.caseId, { signal });\n return response.data;\n },\n },\n });\n\n const caseDataCollectionLinksFilter = useMemo<CaseDbUuidSetFilter>(() => ({\n invert: false,\n key: 'case_id',\n members: [caseDbCase?.id],\n type: 'UUID_SET',\n }), [caseDbCase?.id]);\n const { data: caseDataCollectionLinks, error: caseDataCollectionLinksError, isLoading: isCaseDataCollectionLinksLoading } = useQueryMemo({\n enabled: !!caseDbCase,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseDataCollectionLinksPostQuery(caseDataCollectionLinksFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_DATA_COLLECTION_LINKS, caseDataCollectionLinksFilter),\n });\n\n\n const canEdit = useMemo(() => {\n return !!caseRightsQuery.data && caseRightsQuery.data.some((right) => right.is_full_access || right.write_col_ids.length) && !FeatureFlagsService.getInstance().featureFlags?.disable_upload;\n }, [caseRightsQuery.data]);\n\n const canShare = useMemo(() => {\n return !!caseRightsQuery.data && caseRightsQuery.data.some((right) => right.is_full_access || right.remove_data_collection_ids.length || right.add_data_collection_ids.length);\n }, [caseRightsQuery.data]);\n\n const canDelete = useCallback(() => {\n return !!caseRightsQuery.data && caseRightsQuery.data.some((right) => right.is_full_access || right.can_delete);\n }, [caseRightsQuery]);\n\n const onEditButtonClick = useCallback(() => {\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.EDIT);\n }, []);\n\n const onShareButtonClick = useCallback(() => {\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.SHARING);\n }, []);\n\n const onGoBackButtonClick = useCallback(() => {\n setCurrentTab(CASE_INFO_DIALOG_TAB_NAME.INFO);\n }, []);\n\n\n const onEpiCaseFormIsSavingChange = useCallback((isSaving: boolean) => {\n setIsEpiCaseFormSaving(isSaving);\n }, []);\n\n const onEpiCaseDataCollectionFormIsSavingChange = useCallback((isSaving: boolean) => {\n setIsEpiCaseDataCollectionFormSaving(isSaving);\n }, []);\n\n const onDeleteEventButtonClick = useCallback(() => {\n deleteConfirmationRef.current.open();\n }, []);\n\n const onDeleteConfirmationConfirm = useCallback(() => {\n deleteMutate(caseDbCase);\n }, [caseDbCase, deleteMutate]);\n\n const isSaving = isEpiCaseFormSaving || isEpiCaseDataCollectionFormSaving;\n\n useEffect(() => {\n if (currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT) {\n onTitleChange(t`Case information - Edit`);\n } else if (currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING) {\n onTitleChange(t`Case information - Share`);\n } else {\n onTitleChange(t`Case information`);\n }\n }, [currentTab, onTitleChange, t]);\n\n useEffect(() => {\n const actions: DialogAction[] = [];\n\n if (currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT || currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING) {\n actions.push({\n ...TestIdUtil.createAttributes('CaseInfoDialog-goBackButton'),\n color: 'primary',\n disabled: isSaving,\n label: t`Go back`,\n onClick: onGoBackButtonClick,\n startIcon: <ArrowLeftIcon />,\n variant: 'outlined',\n });\n }\n\n if (currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT && canEdit) {\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-saveButton'),\n color: 'secondary',\n disabled: isSaving,\n form: valuesFormId,\n label: t`Save`,\n startIcon: <SaveIcon />,\n type: 'submit',\n variant: 'contained',\n },\n );\n } else if (currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING && canShare) {\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-saveButton'),\n color: 'secondary',\n disabled: isSaving,\n form: dataCollectionsFormId,\n label: t`Save`,\n startIcon: <SaveIcon />,\n type: 'submit',\n variant: 'contained',\n },\n );\n } else if (currentTab === CASE_INFO_DIALOG_TAB_NAME.INFO) {\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseSetInfoDialog-deleteButton'),\n color: 'primary',\n disabled: !canDelete(),\n label: t`Delete`,\n onClick: onDeleteEventButtonClick,\n startIcon: <DeleteIcon />,\n variant: 'outlined',\n },\n );\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-editDataCollectionsButton'),\n color: 'primary',\n disabled: !canShare,\n label: t`Share`,\n onClick: onShareButtonClick,\n startIcon: <ShareIcon />,\n variant: 'outlined',\n },\n );\n actions.push(\n {\n ...TestIdUtil.createAttributes('CaseInfoDialog-editCaseContentButton'),\n color: 'primary',\n disabled: !canEdit,\n label: t`Edit`,\n onClick: onEditButtonClick,\n startIcon: <EditIcon />,\n variant: 'outlined',\n },\n );\n }\n onActionsChange(actions);\n }, [onActionsChange, onEditButtonClick, t, currentTab, onGoBackButtonClick, onShareButtonClick, valuesFormId, dataCollectionsFormId, onClose, isSaving, canShare, onDeleteEventButtonClick, canDelete, canEdit]);\n\n const caseAbacContextValue = useMemo<CaseAbacContext>(() => {\n return {\n createdInDataCollection: caseDbCase ? dataCollectionsMapQuery.map.get(caseDbCase.created_in_data_collection_id) : undefined,\n itemDataCollectionLinks: [caseDataCollectionLinks],\n rights: caseRightsQuery.data,\n userDataCollectionOptions: dataCollectionOptionsQuery.options,\n userDataCollections: dataCollectionsQuery.data,\n userDataCollectionsMap: dataCollectionsMapQuery.map,\n };\n }, [dataCollectionsQuery.data, dataCollectionsMapQuery.map, dataCollectionOptionsQuery.options, caseDataCollectionLinks, caseRightsQuery.data, caseDbCase]);\n\n if (isRefreshingData) {\n return (\n <Spinner\n inline\n label={t`Refreshing data`}\n />\n );\n }\n\n return (\n <>\n <ResponseHandler\n error={caseError || caseDataCollectionLinksError}\n inlineSpinner\n isLoading={caseIsLoading || isCaseDataCollectionLinksLoading}\n loadables={loadables}\n shouldHideActionButtons\n >\n <CaseAbacContextProvider caseAbac={caseAbacContextValue}>\n <ReadOnlyCaseContent\n caseDbCase={caseDbCase}\n sx={{\n marginBottom: 2,\n }}\n />\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.INFO && (\n <>\n <CaseSharingInfo\n sx={{\n marginBottom: 2,\n }}\n />\n <CaseCaseSetInfo\n caseDbCase={caseDbCase}\n sx={{\n marginBottom: 2,\n }}\n />\n <CaseContent\n caseDbCase={caseDbCase}\n sx={{\n marginBottom: 2,\n }}\n />\n </>\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT && canEdit && (\n <CaseInfoForm\n caseDbCase={caseDbCase}\n caseRights={caseRightsQuery.data?.[0]}\n formId={valuesFormId}\n onFinish={onFinish}\n onIsSavingChange={onEpiCaseFormIsSavingChange}\n />\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.EDIT && !canEdit && (\n <Typography variant={'body1'}>\n {t`You do not have permissions to edit this case.`}\n </Typography>\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING && canShare && (\n <CaseSharingForm\n caseDbCase={caseDbCase}\n formId={dataCollectionsFormId}\n onFinish={onFinish}\n onIsSavingChange={onEpiCaseDataCollectionFormIsSavingChange}\n />\n )}\n {currentTab === CASE_INFO_DIALOG_TAB_NAME.SHARING && !canShare && (\n <Typography variant={'body1'}>\n {t`You do not have permissions to share this case.`}\n </Typography>\n )}\n </CaseAbacContextProvider>\n </ResponseHandler>\n <Confirmation\n body={t`Are you sure you want to delete the case?`}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Delete`}\n onConfirm={onDeleteConfirmationConfirm}\n ref={deleteConfirmationRef}\n title={t`Delete case?`}\n />\n </>\n );\n}, {\n fullWidth: true,\n maxWidth: 'lg',\n testId: 'CaseInfoDialog',\n});\n"],"mappings":"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"}