@gen-epix/ui-client-casedb 4.0.1 → 4.1.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 (41) hide show
  1. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  2. package/dist/_chunks/CaseDbDownloadUtil.js +1 -1
  3. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  4. package/dist/_chunks/CaseInfoDialog.js +4 -4
  5. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  6. package/dist/_chunks/CaseSetInfoDialog.js +4 -4
  7. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  8. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  9. package/dist/_chunks/Dashboard.js +3 -2
  10. package/dist/_chunks/Dashboard.js.map +1 -1
  11. package/dist/_chunks/FindSimilarCasesDialog.js +6 -6
  12. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  13. package/dist/_chunks/HomePageTrends.js.map +1 -1
  14. package/dist/_chunks/LineListWidget.js +46 -45
  15. package/dist/_chunks/LineListWidget.js.map +1 -1
  16. package/dist/_chunks/Upload.js +308 -304
  17. package/dist/_chunks/Upload.js.map +1 -1
  18. package/dist/_chunks/UploadUtil.js +44 -40
  19. package/dist/_chunks/UploadUtil.js.map +1 -1
  20. package/dist/_chunks/dashboardStore.js.map +1 -1
  21. package/dist/classes/services/EventBusService/EventBusService.d.ts +9 -2
  22. package/dist/classes/services/EventBusService/index.js.map +1 -1
  23. package/dist/components/ui/MapWidget/index.js.map +1 -1
  24. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  25. package/dist/components/ui/SequenceDownloadDialog/index.js +53 -40
  26. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  27. package/dist/components/ui/TreeWidget/index.js +8 -2
  28. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  29. package/dist/locale/en.json +0 -11
  30. package/dist/locale/nl.json +0 -11
  31. package/dist/models/config.d.ts +2 -0
  32. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -0
  33. package/package.json +23 -23
  34. package/dist/components/ui/FileSelector/FileSelector.d.ts +0 -7
  35. package/dist/components/ui/FileSelector/index.d.ts +0 -1
  36. package/dist/components/ui/FileSelector/index.js +0 -206
  37. package/dist/components/ui/FileSelector/index.js.map +0 -1
  38. package/dist/utils/FileUtil/FileUtil.d.ts +0 -5
  39. package/dist/utils/FileUtil/index.d.ts +0 -1
  40. package/dist/utils/FileUtil/index.js +0 -15
  41. package/dist/utils/FileUtil/index.js.map +0 -1
@@ -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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"}
@@ -2301,7 +2301,7 @@ var Pr = class e {
2301
2301
  return t.map((e) => [
2302
2302
  e.id,
2303
2303
  i.name,
2304
- e.case_date ? r(e.case_date, d.DATE) : "",
2304
+ e.timed_at ? r(e.timed_at, d.DATE) : "",
2305
2305
  ...a.map((t) => o.getRowValue(e.content, t, i, !0).long)
2306
2306
  ]);
2307
2307
  }