@gen-epix/ui-client-casedb 4.0.2 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/AddCasesToEventDialog.js +98 -98
- package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
- package/dist/_chunks/CaseContentForm.js +10 -10
- package/dist/_chunks/CaseDbDownloadUtil.js +1 -1
- package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
- package/dist/_chunks/CaseInfoDialog.js +222 -222
- package/dist/_chunks/CaseInfoDialog.js.map +1 -1
- package/dist/_chunks/CaseSetInfoDialog.js +222 -222
- package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
- package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
- package/dist/_chunks/Dashboard.js +296 -295
- package/dist/_chunks/Dashboard.js.map +1 -1
- package/dist/_chunks/FindSimilarCasesDialog.js +81 -81
- package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
- package/dist/_chunks/HomePageTrends.js.map +1 -1
- package/dist/_chunks/LegendaItem.js.map +1 -1
- package/dist/_chunks/LineListWidget.js +46 -45
- package/dist/_chunks/LineListWidget.js.map +1 -1
- package/dist/_chunks/PanelSeparator.js +3 -3
- package/dist/_chunks/PanelSeparator.js.map +1 -1
- package/dist/_chunks/Upload.js +422 -418
- package/dist/_chunks/Upload.js.map +1 -1
- package/dist/_chunks/UploadUtil.js +44 -40
- package/dist/_chunks/UploadUtil.js.map +1 -1
- package/dist/_chunks/chunk-BV7QT456.js +1 -1
- package/dist/_chunks/chunk-BV7QT456.js.map +1 -1
- package/dist/_chunks/cloneDeep.js +1 -1
- package/dist/_chunks/cloneDeep.js.map +1 -1
- package/dist/_chunks/dashboardStore.js.map +1 -1
- package/dist/_chunks/esm.js +3 -3
- package/dist/_chunks/esm.js.map +1 -1
- package/dist/_chunks/index.module.js +1 -1
- package/dist/_chunks/index.module.js.map +1 -1
- package/dist/_chunks/react.js +1 -1
- package/dist/_chunks/react.js.map +1 -1
- package/dist/_chunks/shallow.js +2 -2
- package/dist/_chunks/shallow.js.map +1 -1
- package/dist/_chunks/vanilla.js +1 -1
- package/dist/_chunks/vanilla.js.map +1 -1
- package/dist/_chunks/yup.js +24 -24
- package/dist/_chunks/yup.js.map +1 -1
- package/dist/classes/services/EventBusService/EventBusService.d.ts +9 -2
- package/dist/classes/services/EventBusService/index.js.map +1 -1
- package/dist/components/form/fields/ArrangementEditor/index.js +30 -30
- package/dist/components/ui/CreateEventDialog/index.js +40 -40
- package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
- package/dist/components/ui/MapWidget/index.js.map +1 -1
- package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
- package/dist/components/ui/SequenceDownloadDialog/index.js +57 -44
- package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
- package/dist/components/ui/TreeWidget/index.js +8 -2
- package/dist/components/ui/TreeWidget/index.js.map +1 -1
- package/dist/locale/en.json +0 -11
- package/dist/locale/nl.json +0 -11
- package/dist/models/config.d.ts +2 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +59 -59
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
- package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -0
- package/package.json +68 -75
- package/dist/_chunks/index.esm.js +0 -1465
- package/dist/_chunks/index.esm.js.map +0 -1
- package/dist/components/ui/FileSelector/FileSelector.d.ts +0 -7
- package/dist/components/ui/FileSelector/index.d.ts +0 -1
- package/dist/components/ui/FileSelector/index.js +0 -206
- package/dist/components/ui/FileSelector/index.js.map +0 -1
- package/dist/utils/FileUtil/FileUtil.d.ts +0 -5
- package/dist/utils/FileUtil/index.d.ts +0 -1
- package/dist/utils/FileUtil/index.js +0 -15
- package/dist/utils/FileUtil/index.js.map +0 -1
|
@@ -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 CaseDbTypedUuidSetFilter,\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: CaseDbTypedUuidSetFilter = {\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: CaseDbTypedUuidSetFilter = {\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 CaseDbTypedUuidSetFilter,\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<CaseDbTypedUuidSetFilter>(() => ({\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 { 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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"}
|