@gen-epix/ui-client-casedb 4.0.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/LICENSE +287 -0
- package/README.md +101 -0
- package/dist/@types/mui.d.ts +12 -0
- package/dist/@types/ui-casedb.d.ts +3 -0
- package/dist/@types/vite-env.d.ts +3 -0
- package/dist/_chunks/AddCasesToEventDialog.js +246 -0
- package/dist/_chunks/AddCasesToEventDialog.js.map +1 -0
- package/dist/_chunks/CaseContentForm.js +43 -0
- package/dist/_chunks/CaseContentForm.js.map +1 -0
- package/dist/_chunks/CaseDbDownloadUtil.js +2307 -0
- package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -0
- package/dist/_chunks/CaseInfoDialog.js +509 -0
- package/dist/_chunks/CaseInfoDialog.js.map +1 -0
- package/dist/_chunks/CaseSetInfoDialog.js +479 -0
- package/dist/_chunks/CaseSetInfoDialog.js.map +1 -0
- package/dist/_chunks/CaseTypeInfoDialog.js +470 -0
- package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -0
- package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +123 -0
- package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -0
- package/dist/_chunks/CollectionIcon.js +18 -0
- package/dist/_chunks/CollectionIcon.js.map +1 -0
- package/dist/_chunks/CompletCaseTypeLoader.js +53 -0
- package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -0
- package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +18 -0
- package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -0
- package/dist/_chunks/CustomTabPanel.js +21 -0
- package/dist/_chunks/CustomTabPanel.js.map +1 -0
- package/dist/_chunks/Dashboard.js +2582 -0
- package/dist/_chunks/Dashboard.js.map +1 -0
- package/dist/_chunks/DashboardStoreLoader.js +67 -0
- package/dist/_chunks/DashboardStoreLoader.js.map +1 -0
- package/dist/_chunks/DataCollectionAccessInfo.js +66 -0
- package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -0
- package/dist/_chunks/EpiCurveUtil.js +378 -0
- package/dist/_chunks/EpiCurveUtil.js.map +1 -0
- package/dist/_chunks/EpiCurveWidget.js +570 -0
- package/dist/_chunks/EpiCurveWidget.js.map +1 -0
- package/dist/_chunks/FilterUtil.js +1537 -0
- package/dist/_chunks/FilterUtil.js.map +1 -0
- package/dist/_chunks/FindSimilarCasesDialog.js +439 -0
- package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -0
- package/dist/_chunks/FindSimilarCasesUtil.js +100 -0
- package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -0
- package/dist/_chunks/HomePageTrends.js +276 -0
- package/dist/_chunks/HomePageTrends.js.map +1 -0
- package/dist/_chunks/LegendaItem.js +325 -0
- package/dist/_chunks/LegendaItem.js.map +1 -0
- package/dist/_chunks/LineListWidget.js +702 -0
- package/dist/_chunks/LineListWidget.js.map +1 -0
- package/dist/_chunks/PanelSeparator.js +1676 -0
- package/dist/_chunks/PanelSeparator.js.map +1 -0
- package/dist/_chunks/Upload.js +1506 -0
- package/dist/_chunks/Upload.js.map +1 -0
- package/dist/_chunks/UploadUtil.js +1976 -0
- package/dist/_chunks/UploadUtil.js.map +1 -0
- package/dist/_chunks/UserRightsDialog.js +152 -0
- package/dist/_chunks/UserRightsDialog.js.map +1 -0
- package/dist/_chunks/_MapCache.js +274 -0
- package/dist/_chunks/_MapCache.js.map +1 -0
- package/dist/_chunks/_Set.js +9 -0
- package/dist/_chunks/_Set.js.map +1 -0
- package/dist/_chunks/_arrayIncludesWith.js +42 -0
- package/dist/_chunks/_arrayIncludesWith.js.map +1 -0
- package/dist/_chunks/_baseClone.js +262 -0
- package/dist/_chunks/_baseClone.js.map +1 -0
- package/dist/_chunks/_baseFlatten.js +26 -0
- package/dist/_chunks/_baseFlatten.js.map +1 -0
- package/dist/_chunks/_baseGet.js +246 -0
- package/dist/_chunks/_baseGet.js.map +1 -0
- package/dist/_chunks/_baseIteratee.js +246 -0
- package/dist/_chunks/_baseIteratee.js.map +1 -0
- package/dist/_chunks/_cacheHas.js +29 -0
- package/dist/_chunks/_cacheHas.js.map +1 -0
- package/dist/_chunks/_defineProperty.js +15 -0
- package/dist/_chunks/_defineProperty.js.map +1 -0
- package/dist/_chunks/_setToArray.js +15 -0
- package/dist/_chunks/_setToArray.js.map +1 -0
- package/dist/_chunks/_setToString.js +64 -0
- package/dist/_chunks/_setToString.js.map +1 -0
- package/dist/_chunks/chunk-KS7C4IRE.js +1327 -0
- package/dist/_chunks/chunk-KS7C4IRE.js.map +1 -0
- package/dist/_chunks/cloneDeep.js +119 -0
- package/dist/_chunks/cloneDeep.js.map +1 -0
- package/dist/_chunks/dashboardStore.js +743 -0
- package/dist/_chunks/dashboardStore.js.map +1 -0
- package/dist/_chunks/eachYearOfInterval.js +104 -0
- package/dist/_chunks/eachYearOfInterval.js.map +1 -0
- package/dist/_chunks/esm.js +46335 -0
- package/dist/_chunks/esm.js.map +1 -0
- package/dist/_chunks/format.js +504 -0
- package/dist/_chunks/format.js.map +1 -0
- package/dist/_chunks/hasIn.js +34 -0
- package/dist/_chunks/hasIn.js.map +1 -0
- package/dist/_chunks/index.esm.js +1342 -0
- package/dist/_chunks/index.esm.js.map +1 -0
- package/dist/_chunks/index.module.js +72 -0
- package/dist/_chunks/index.module.js.map +1 -0
- package/dist/_chunks/intersection.js +58 -0
- package/dist/_chunks/intersection.js.map +1 -0
- package/dist/_chunks/isArguments.js +27 -0
- package/dist/_chunks/isArguments.js.map +1 -0
- package/dist/_chunks/isArray.js +9 -0
- package/dist/_chunks/isArray.js.map +1 -0
- package/dist/_chunks/isArrayLike.js +30 -0
- package/dist/_chunks/isArrayLike.js.map +1 -0
- package/dist/_chunks/isObjectLike.js +18 -0
- package/dist/_chunks/isObjectLike.js.map +1 -0
- package/dist/_chunks/isValid.js +14 -0
- package/dist/_chunks/isValid.js.map +1 -0
- package/dist/_chunks/last.js +13 -0
- package/dist/_chunks/last.js.map +1 -0
- package/dist/_chunks/noop.js +10 -0
- package/dist/_chunks/noop.js.map +1 -0
- package/dist/_chunks/omit.js +81 -0
- package/dist/_chunks/omit.js.map +1 -0
- package/dist/_chunks/parseISO.js +117 -0
- package/dist/_chunks/parseISO.js.map +1 -0
- package/dist/_chunks/protectedTokens.js +630 -0
- package/dist/_chunks/protectedTokens.js.map +1 -0
- package/dist/_chunks/react.js +11 -0
- package/dist/_chunks/react.js.map +1 -0
- package/dist/_chunks/round.js +64 -0
- package/dist/_chunks/round.js.map +1 -0
- package/dist/_chunks/shallow.js +31 -0
- package/dist/_chunks/shallow.js.map +1 -0
- package/dist/_chunks/sync.js +3796 -0
- package/dist/_chunks/sync.js.map +1 -0
- package/dist/_chunks/toDate.js +18 -0
- package/dist/_chunks/toDate.js.map +1 -0
- package/dist/_chunks/toString.js +31 -0
- package/dist/_chunks/toString.js.map +1 -0
- package/dist/_chunks/useUnit.js +30 -0
- package/dist/_chunks/useUnit.js.map +1 -0
- package/dist/_chunks/userProfileStoreContext.js +7 -0
- package/dist/_chunks/userProfileStoreContext.js.map +1 -0
- package/dist/_chunks/vanilla.js +20 -0
- package/dist/_chunks/vanilla.js.map +1 -0
- package/dist/_chunks/yup.js +73 -0
- package/dist/_chunks/yup.js.map +1 -0
- package/dist/classes/errors/UploadError.d.ts +5 -0
- package/dist/classes/errors/index.d.ts +1 -0
- package/dist/classes/errors/index.js +11 -0
- package/dist/classes/errors/index.js.map +1 -0
- package/dist/classes/filters/SelectionFilter.d.ts +11 -0
- package/dist/classes/filters/TreeFilter.d.ts +11 -0
- package/dist/classes/services/DataService/DataService.d.ts +13 -0
- package/dist/classes/services/DataService/index.d.ts +1 -0
- package/dist/classes/services/DataService/index.js +83 -0
- package/dist/classes/services/DataService/index.js.map +1 -0
- package/dist/classes/services/EventBusService/EventBusService.d.ts +49 -0
- package/dist/classes/services/EventBusService/index.d.ts +1 -0
- package/dist/classes/services/EventBusService/index.js +16 -0
- package/dist/classes/services/EventBusService/index.js.map +1 -0
- package/dist/classes/services/LineListService/LineListCaseSetMembersService/LineListCaseSetMembersService.d.ts +9 -0
- package/dist/classes/services/LineListService/LineListCaseSetMembersService/index.d.ts +1 -0
- package/dist/classes/services/LineListService/LineListCaseSetMembersService/index.js +27 -0
- package/dist/classes/services/LineListService/LineListCaseSetMembersService/index.js.map +1 -0
- package/dist/classes/services/LineListService/LineListIsOwnCaseService/LineListIsOwnCaseService.d.ts +9 -0
- package/dist/classes/services/LineListService/LineListIsOwnCaseService/index.d.ts +1 -0
- package/dist/classes/services/LineListService/LineListIsOwnCaseService/index.js +30 -0
- package/dist/classes/services/LineListService/LineListIsOwnCaseService/index.js.map +1 -0
- package/dist/classes/services/LineListService/LineListServiceAbstract/LineListServiceAbstract.d.ts +11 -0
- package/dist/classes/services/LineListService/LineListServiceAbstract/index.d.ts +1 -0
- package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +55 -0
- package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -0
- package/dist/components/app/CaseDbApp/CaseDbApp.d.ts +1 -0
- package/dist/components/app/CaseDbApp/index.d.ts +1 -0
- package/dist/components/app/CaseDbApp/index.js +14 -0
- package/dist/components/app/CaseDbApp/index.js.map +1 -0
- package/dist/components/form/fields/ArrangementEditor/ArrangementEditor.d.ts +17 -0
- package/dist/components/form/fields/ArrangementEditor/index.d.ts +1 -0
- package/dist/components/form/fields/ArrangementEditor/index.js +130 -0
- package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -0
- package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +10 -0
- package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialogSuccessNotificationMessage.d.ts +6 -0
- package/dist/components/ui/AddCasesToEventDialog/index.d.ts +1 -0
- package/dist/components/ui/AddCasesToEventDialog/index.js +2 -0
- package/dist/components/ui/CaseContentForm/CaseContentForm.d.ts +10 -0
- package/dist/components/ui/CaseContentForm/index.d.ts +1 -0
- package/dist/components/ui/CaseContentForm/index.js +2 -0
- package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +9 -0
- package/dist/components/ui/CaseContentFormDialog/index.d.ts +1 -0
- package/dist/components/ui/CaseContentFormDialog/index.js +57 -0
- package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -0
- package/dist/components/ui/CaseInfoDialog/CaseCaseSetInfo.d.ts +6 -0
- package/dist/components/ui/CaseInfoDialog/CaseContent.d.ts +6 -0
- package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +15 -0
- package/dist/components/ui/CaseInfoDialog/CaseInfoForm.d.ts +10 -0
- package/dist/components/ui/CaseInfoDialog/CaseSharingForm.d.ts +9 -0
- package/dist/components/ui/CaseInfoDialog/CaseSharingInfo.d.ts +3 -0
- package/dist/components/ui/CaseInfoDialog/ReadOnlyCaseContent.d.ts +6 -0
- package/dist/components/ui/CaseInfoDialog/index.d.ts +1 -0
- package/dist/components/ui/CaseInfoDialog/index.js +2 -0
- package/dist/components/ui/CaseSetInfoDialog/CaseSetContent.d.ts +6 -0
- package/dist/components/ui/CaseSetInfoDialog/CaseSetDescription.d.ts +6 -0
- package/dist/components/ui/CaseSetInfoDialog/CaseSetForm.d.ts +8 -0
- package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +10 -0
- package/dist/components/ui/CaseSetInfoDialog/CaseSetSharingForm.d.ts +10 -0
- package/dist/components/ui/CaseSetInfoDialog/CaseSetSharingInfo.d.ts +3 -0
- package/dist/components/ui/CaseSetInfoDialog/index.d.ts +1 -0
- package/dist/components/ui/CaseSetInfoDialog/index.js +2 -0
- package/dist/components/ui/CaseSummary/CaseSummary.d.ts +5 -0
- package/dist/components/ui/CaseSummary/index.d.ts +1 -0
- package/dist/components/ui/CaseSummary/index.js +92 -0
- package/dist/components/ui/CaseSummary/index.js.map +1 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoAccessRights.d.ts +5 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoColAccessRights.d.ts +4 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoData.d.ts +5 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +7 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +3 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +8 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoRegions.d.ts +5 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoTrees.d.ts +5 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoValues.d.ts +5 -0
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoVariableDetails.d.ts +6 -0
- package/dist/components/ui/CaseTypeInfoDialog/index.d.ts +10 -0
- package/dist/components/ui/CaseTypeInfoDialog/index.js +2 -0
- package/dist/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarning.d.ts +5 -0
- package/dist/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarningCaseSetLink.d.ts +5 -0
- package/dist/components/ui/CasesAlreadyInCaseSetWarning/index.d.ts +1 -0
- package/dist/components/ui/CasesAlreadyInCaseSetWarning/index.js +2 -0
- package/dist/components/ui/CompletCaseTypeLoader/CompletCaseTypeLoader.d.ts +7 -0
- package/dist/components/ui/CompletCaseTypeLoader/index.d.ts +1 -0
- package/dist/components/ui/CompletCaseTypeLoader/index.js +2 -0
- package/dist/components/ui/CompletCaseTypeLoader/withEpiCompleteCaseTypeLoader.d.ts +4 -0
- package/dist/components/ui/ContextMenu/ContextMenu.d.ts +20 -0
- package/dist/components/ui/ContextMenu/index.d.ts +1 -0
- package/dist/components/ui/ContextMenu/index.js +96 -0
- package/dist/components/ui/ContextMenu/index.js.map +1 -0
- package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +10 -0
- package/dist/components/ui/CreateEventDialog/CreateEventDialogSuccessNotificationMessage.d.ts +6 -0
- package/dist/components/ui/CreateEventDialog/index.d.ts +1 -0
- package/dist/components/ui/CreateEventDialog/index.js +278 -0
- package/dist/components/ui/CreateEventDialog/index.js.map +1 -0
- package/dist/components/ui/CustomTabPanel/CustomTabPanel.d.ts +6 -0
- package/dist/components/ui/CustomTabPanel/index.d.ts +1 -0
- package/dist/components/ui/CustomTabPanel/index.js +2 -0
- package/dist/components/ui/Dashboard/Dashboard.d.ts +1 -0
- package/dist/components/ui/Dashboard/DashboardContent.d.ts +6 -0
- package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +6 -0
- package/dist/components/ui/Dashboard/DashboardGeneralSettingsForm.d.ts +1 -0
- package/dist/components/ui/Dashboard/DashboardLayoutRenderer.d.ts +9 -0
- package/dist/components/ui/Dashboard/DashboardLayoutSettingsForm.d.ts +4 -0
- package/dist/components/ui/Dashboard/DashboardSearch.d.ts +1 -0
- package/dist/components/ui/Dashboard/DashboardSearchSettings.d.ts +10 -0
- package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +8 -0
- package/dist/components/ui/Dashboard/DashboardWidget.d.ts +12 -0
- package/dist/components/ui/Dashboard/DashboardWidgetPlaceHolder.d.ts +1 -0
- package/dist/components/ui/Dashboard/DashboardWidgetSettingsForm.d.ts +4 -0
- package/dist/components/ui/Dashboard/DashboardZoneContext.d.ts +1 -0
- package/dist/components/ui/Dashboard/context/DashboardContext.d.ts +12 -0
- package/dist/components/ui/Dashboard/context/DashboardContextProvider.d.ts +6 -0
- package/dist/components/ui/Dashboard/index.d.ts +2 -0
- package/dist/components/ui/Dashboard/index.js +2 -0
- package/dist/components/ui/DashboardEditCases/DashboardEditCases.d.ts +6 -0
- package/dist/components/ui/DashboardEditCases/index.d.ts +1 -0
- package/dist/components/ui/DashboardEditCases/index.js +70 -0
- package/dist/components/ui/DashboardEditCases/index.js.map +1 -0
- package/dist/components/ui/DashboardStoreLoader/DashboardStoreLoader.d.ts +7 -0
- package/dist/components/ui/DashboardStoreLoader/DashboardStoreLoaderContent.d.ts +8 -0
- package/dist/components/ui/DashboardStoreLoader/index.d.ts +2 -0
- package/dist/components/ui/DashboardStoreLoader/index.js +2 -0
- package/dist/components/ui/DashboardStoreLoader/withEpiDashboardStore.d.ts +4 -0
- package/dist/components/ui/DataCollectionAccessInfo/DataCollectionAccessInfo.d.ts +1 -0
- package/dist/components/ui/DataCollectionAccessInfo/index.d.ts +1 -0
- package/dist/components/ui/DataCollectionAccessInfo/index.js +2 -0
- package/dist/components/ui/EpiCurveWidget/EpiCurveBarChart.d.ts +21 -0
- package/dist/components/ui/EpiCurveWidget/EpiCurveStackedAreaChart.d.ts +22 -0
- package/dist/components/ui/EpiCurveWidget/EpiCurveWidget.d.ts +2 -0
- package/dist/components/ui/EpiCurveWidget/index.d.ts +1 -0
- package/dist/components/ui/EpiCurveWidget/index.js +2 -0
- package/dist/components/ui/FileSelector/FileSelector.d.ts +7 -0
- package/dist/components/ui/FileSelector/index.d.ts +1 -0
- package/dist/components/ui/FileSelector/index.js +206 -0
- package/dist/components/ui/FileSelector/index.js.map +1 -0
- package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +11 -0
- package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialogDateRangeChart.d.ts +11 -0
- package/dist/components/ui/FindSimilarCasesDialog/index.d.ts +1 -0
- package/dist/components/ui/FindSimilarCasesDialog/index.js +2 -0
- package/dist/components/ui/Grouping/Grouping.d.ts +1 -0
- package/dist/components/ui/Grouping/index.d.ts +1 -0
- package/dist/components/ui/Grouping/index.js +102 -0
- package/dist/components/ui/Grouping/index.js.map +1 -0
- package/dist/components/ui/HistogramWidget/HistogramWidget.d.ts +1 -0
- package/dist/components/ui/HistogramWidget/index.d.ts +1 -0
- package/dist/components/ui/HistogramWidget/index.js +333 -0
- package/dist/components/ui/HistogramWidget/index.js.map +1 -0
- package/dist/components/ui/HomePageTrends/HomePageTrendCard.d.ts +9 -0
- package/dist/components/ui/HomePageTrends/HomePageTrends.d.ts +4 -0
- package/dist/components/ui/HomePageTrends/index.d.ts +1 -0
- package/dist/components/ui/HomePageTrends/index.js +2 -0
- package/dist/components/ui/LegendaItem/LegendaItem.d.ts +10 -0
- package/dist/components/ui/LegendaItem/index.d.ts +1 -0
- package/dist/components/ui/LegendaItem/index.js +2 -0
- package/dist/components/ui/LineListWidget/LineListWidget.d.ts +1 -0
- package/dist/components/ui/LineListWidget/LineListWidgetIsInEventCell.d.ts +6 -0
- package/dist/components/ui/LineListWidget/LineListWidgetIsOwnCaseCell.d.ts +6 -0
- package/dist/components/ui/LineListWidget/LineListWidgetPrimaryMenu.d.ts +5 -0
- package/dist/components/ui/LineListWidget/LineListWidgetSecondaryMenu.d.ts +1 -0
- package/dist/components/ui/LineListWidget/LineListWidgetTitle.d.ts +1 -0
- package/dist/components/ui/LineListWidget/index.d.ts +1 -0
- package/dist/components/ui/LineListWidget/index.js +2 -0
- package/dist/components/ui/LineListWidget/useEpiLineListWidgetEmitDownloadOptions.d.ts +1 -0
- package/dist/components/ui/MapWidget/MapWidget.d.ts +1 -0
- package/dist/components/ui/MapWidget/index.d.ts +1 -0
- package/dist/components/ui/MapWidget/index.js +302 -0
- package/dist/components/ui/MapWidget/index.js.map +1 -0
- package/dist/components/ui/PanelSeparator/PanelSeparatorHorizontal.d.ts +2 -0
- package/dist/components/ui/PanelSeparator/PanelSeparatorVertical.d.ts +2 -0
- package/dist/components/ui/PanelSeparator/index.d.ts +2 -0
- package/dist/components/ui/PanelSeparator/index.js +2 -0
- package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +10 -0
- package/dist/components/ui/RemoveCasesFromEventDialog/index.d.ts +1 -0
- package/dist/components/ui/RemoveCasesFromEventDialog/index.js +111 -0
- package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -0
- package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +9 -0
- package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +10 -0
- package/dist/components/ui/SequenceDownloadDialog/index.d.ts +1 -0
- package/dist/components/ui/SequenceDownloadDialog/index.js +89 -0
- package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -0
- package/dist/components/ui/TreeDescription/TreeDescription.d.ts +5 -0
- package/dist/components/ui/TreeDescription/index.d.ts +1 -0
- package/dist/components/ui/TreeDescription/index.js +40 -0
- package/dist/components/ui/TreeDescription/index.js.map +1 -0
- package/dist/components/ui/TreeWidget/TreeWidget.d.ts +1 -0
- package/dist/components/ui/TreeWidget/index.d.ts +1 -0
- package/dist/components/ui/TreeWidget/index.js +404 -0
- package/dist/components/ui/TreeWidget/index.js.map +1 -0
- package/dist/components/ui/Upload/Upload.d.ts +1 -0
- package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +18 -0
- package/dist/components/ui/Upload/UploadCreateCases.d.ts +1 -0
- package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +12 -0
- package/dist/components/ui/Upload/UploadMapColumns.d.ts +1 -0
- package/dist/components/ui/Upload/UploadMapSequences.d.ts +1 -0
- package/dist/components/ui/Upload/UploadNavigation.d.ts +10 -0
- package/dist/components/ui/Upload/UploadPreview.d.ts +4 -0
- package/dist/components/ui/Upload/UploadPreviewNavigation.d.ts +5 -0
- package/dist/components/ui/Upload/UploadSelectFile.d.ts +1 -0
- package/dist/components/ui/Upload/UploadSelectSequenceFiles.d.ts +1 -0
- package/dist/components/ui/Upload/index.d.ts +1 -0
- package/dist/components/ui/Upload/index.js +2 -0
- package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +9 -0
- package/dist/components/ui/UserRightsDialog/UserRightsDialogCaseAccessPolicy.d.ts +5 -0
- package/dist/components/ui/UserRightsDialog/index.d.ts +1 -0
- package/dist/components/ui/UserRightsDialog/index.js +2 -0
- package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +13 -0
- package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.d.ts +1 -0
- package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +373 -0
- package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -0
- package/dist/components/ui/Warning/Warning.d.ts +4 -0
- package/dist/components/ui/Warning/index.d.ts +1 -0
- package/dist/components/ui/Warning/index.js +29 -0
- package/dist/components/ui/Warning/index.js.map +1 -0
- package/dist/components/ui/WidgetHeaderIconButton/WidgetHeaderIconButton.d.ts +5 -0
- package/dist/components/ui/WidgetHeaderIconButton/index.d.ts +1 -0
- package/dist/components/ui/WidgetHeaderIconButton/index.js +24 -0
- package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -0
- package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +6 -0
- package/dist/components/ui/WidgetMenu/index.d.ts +1 -0
- package/dist/components/ui/WidgetMenu/index.js +26 -0
- package/dist/components/ui/WidgetMenu/index.js.map +1 -0
- package/dist/components/ui/WidgetUnavailable/WidgetUnavailable.d.ts +6 -0
- package/dist/components/ui/WidgetUnavailable/index.d.ts +1 -0
- package/dist/components/ui/WidgetUnavailable/index.js +18 -0
- package/dist/components/ui/WidgetUnavailable/index.js.map +1 -0
- package/dist/constants/dashboard.d.ts +9 -0
- package/dist/constants/dashboard.js +14 -0
- package/dist/constants/dashboard.js.map +1 -0
- package/dist/constants/query.d.ts +62 -0
- package/dist/constants/query.js +163 -0
- package/dist/constants/query.js.map +1 -0
- package/dist/context/caseAbac/CaseAbacContext.d.ts +14 -0
- package/dist/context/caseAbac/CaseAbacContextProvider.d.ts +6 -0
- package/dist/context/caseAbac/index.d.ts +3 -0
- package/dist/context/caseAbac/useCaseAbacContext.d.ts +2 -0
- package/dist/context/caseTypeAbac/CaseTypeAbacContext.d.ts +14 -0
- package/dist/context/caseTypeAbac/CaseTypeAbacContextProvider.d.ts +6 -0
- package/dist/context/caseTypeAbac/index.d.ts +3 -0
- package/dist/context/caseTypeAbac/useCaseTypeAbacContext.d.ts +2 -0
- package/dist/dataHooks/useAssemblyProtocolsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +21 -0
- package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -0
- package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +6 -0
- package/dist/dataHooks/useCaseRightsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseRightsQuery/index.js +17 -0
- package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseRightsQuery/useCaseRightsQuery.d.ts +3 -0
- package/dist/dataHooks/useCaseSetCategoriesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +22 -0
- package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +6 -0
- package/dist/dataHooks/useCaseSetRightsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseSetRightsQuery/index.js +13 -0
- package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseSetRightsQuery/useCaseSetRightsQuery.d.ts +3 -0
- package/dist/dataHooks/useCaseSetStatsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseSetStatsQuery/index.js +19 -0
- package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +5 -0
- package/dist/dataHooks/useCaseSetStatusesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseSetStatusesQuery/index.js +22 -0
- package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +6 -0
- package/dist/dataHooks/useCaseSetsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseSetsQuery/index.js +22 -0
- package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +6 -0
- package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +22 -0
- package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +6 -0
- package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js +21 -0
- package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +4 -0
- package/dist/dataHooks/useCaseTypeSetMembersQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +13 -0
- package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseTypeSetMembersQuery/useCaseTypeSetMembersQuery.d.ts +3 -0
- package/dist/dataHooks/useCaseTypeSetsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseTypeSetsQuery/index.js +25 -0
- package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +7 -0
- package/dist/dataHooks/useCaseTypeStatsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseTypeStatsQuery/index.js +13 -0
- package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseTypeStatsQuery/useCaseTypeStatsQuery.d.ts +3 -0
- package/dist/dataHooks/useCaseTypesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useCaseTypesQuery/index.js +24 -0
- package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -0
- package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +9 -0
- package/dist/dataHooks/useColSetMembersQuery/index.d.ts +1 -0
- package/dist/dataHooks/useColSetMembersQuery/index.js +13 -0
- package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -0
- package/dist/dataHooks/useColSetMembersQuery/useColSetMembersQuery.d.ts +3 -0
- package/dist/dataHooks/useColSetsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useColSetsQuery/index.js +21 -0
- package/dist/dataHooks/useColSetsQuery/index.js.map +1 -0
- package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +6 -0
- package/dist/dataHooks/useColTypesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useColTypesQuery/index.js +51 -0
- package/dist/dataHooks/useColTypesQuery/index.js.map +1 -0
- package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +4 -0
- package/dist/dataHooks/useColsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useColsQuery/index.js +27 -0
- package/dist/dataHooks/useColsQuery/index.js.map +1 -0
- package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +7 -0
- package/dist/dataHooks/useConceptQuery/index.d.ts +1 -0
- package/dist/dataHooks/useConceptQuery/index.js +26 -0
- package/dist/dataHooks/useConceptQuery/index.js.map +1 -0
- package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +7 -0
- package/dist/dataHooks/useConceptRelationTypeQuery/index.d.ts +1 -0
- package/dist/dataHooks/useConceptRelationTypeQuery/index.js +15 -0
- package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -0
- package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +4 -0
- package/dist/dataHooks/useConceptSetTypeQuery/index.d.ts +1 -0
- package/dist/dataHooks/useConceptSetTypeQuery/index.js +22 -0
- package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -0
- package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +4 -0
- package/dist/dataHooks/useConceptSetsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useConceptSetsQuery/index.js +21 -0
- package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -0
- package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +6 -0
- package/dist/dataHooks/useDataCollectionSetMembersQuery/index.d.ts +1 -0
- package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +13 -0
- package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -0
- package/dist/dataHooks/useDataCollectionSetMembersQuery/useDataCollectionSetMembersQuery.d.ts +3 -0
- package/dist/dataHooks/useDataCollectionsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useDataCollectionsQuery/index.js +22 -0
- package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -0
- package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +6 -0
- package/dist/dataHooks/useDimTypesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useDimTypesQuery/index.js +26 -0
- package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -0
- package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +4 -0
- package/dist/dataHooks/useDimsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useDimsQuery/index.js +26 -0
- package/dist/dataHooks/useDimsQuery/index.js.map +1 -0
- package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +7 -0
- package/dist/dataHooks/useDiseasesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useDiseasesQuery/index.js +21 -0
- package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -0
- package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +6 -0
- package/dist/dataHooks/useEtiologicalAgentsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +21 -0
- package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -0
- package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +6 -0
- package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +18 -0
- package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -0
- package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +5 -0
- package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +14 -0
- package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -0
- package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/useOrganizationAccessCasePoliciesQuery.d.ts +3 -0
- package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +14 -0
- package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -0
- package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/useOrganizationShareCasePoliciesQuery.d.ts +3 -0
- package/dist/dataHooks/useRefColsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useRefColsQuery/index.js +22 -0
- package/dist/dataHooks/useRefColsQuery/index.js.map +1 -0
- package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +6 -0
- package/dist/dataHooks/useRefColsValidationRulesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +13 -0
- package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -0
- package/dist/dataHooks/useRefColsValidationRulesQuery/useRefColsValidationRulesQuery.d.ts +3 -0
- package/dist/dataHooks/useRefDimsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useRefDimsQuery/index.js +22 -0
- package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -0
- package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +6 -0
- package/dist/dataHooks/useRegionQuery/index.d.ts +1 -0
- package/dist/dataHooks/useRegionQuery/index.js +25 -0
- package/dist/dataHooks/useRegionQuery/index.js.map +1 -0
- package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +7 -0
- package/dist/dataHooks/useRegionRelationTypeQuery/index.d.ts +1 -0
- package/dist/dataHooks/useRegionRelationTypeQuery/index.js +20 -0
- package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -0
- package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +4 -0
- package/dist/dataHooks/useRegionSetsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useRegionSetsQuery/index.js +21 -0
- package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -0
- package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +6 -0
- package/dist/dataHooks/useSequencingProtocolsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useSequencingProtocolsQuery/index.js +21 -0
- package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -0
- package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +6 -0
- package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js +42 -0
- package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -0
- package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +4 -0
- package/dist/dataHooks/useUnitQuery/index.d.ts +1 -0
- package/dist/dataHooks/useUnitQuery/index.js +2 -0
- package/dist/dataHooks/useUnitQuery/useUnit.d.ts +4 -0
- package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +14 -0
- package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -0
- package/dist/dataHooks/useUserAccessCasePoliciesQuery/useUserAccessCasePoliciesQuery.d.ts +3 -0
- package/dist/dataHooks/useUserEffectiveRightsQuery/index.d.ts +1 -0
- package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +83 -0
- package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -0
- package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +16 -0
- package/dist/dataHooks/useUserShareCasePoliciesQuery/index.d.ts +1 -0
- package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +14 -0
- package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -0
- package/dist/dataHooks/useUserShareCasePoliciesQuery/useUserShareCasePoliciesQuery.d.ts +3 -0
- package/dist/hooks/useOrganizationCasePolicyNameFactory/index.d.ts +1 -0
- package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +25 -0
- package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -0
- package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +3 -0
- package/dist/hooks/useUserCasePolicyNameFactory/index.d.ts +1 -0
- package/dist/hooks/useUserCasePolicyNameFactory/index.js +28 -0
- package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -0
- package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +3 -0
- package/dist/locale/en.json +676 -0
- package/dist/locale/nl.json +676 -0
- package/dist/models/caseAccess.d.ts +15 -0
- package/dist/models/caseAccess.js +0 -0
- package/dist/models/caseDb.d.ts +96 -0
- package/dist/models/caseDb.js +8 -0
- package/dist/models/caseDb.js.map +1 -0
- package/dist/models/config.d.ts +70 -0
- package/dist/models/config.js +0 -0
- package/dist/models/dashboard.d.ts +91 -0
- package/dist/models/dashboard.js +10 -0
- package/dist/models/dashboard.js.map +1 -0
- package/dist/models/stratification.d.ts +40 -0
- package/dist/models/stratification.js +12 -0
- package/dist/models/stratification.js.map +1 -0
- package/dist/models/theme.d.ts +17 -0
- package/dist/models/theme.js +0 -0
- package/dist/models/upload.d.ts +51 -0
- package/dist/models/upload.js +8 -0
- package/dist/models/upload.js.map +1 -0
- package/dist/pages/CaseDbUsersAdminPage/CaseDbUsersAdminPage.d.ts +1 -0
- package/dist/pages/CaseDbUsersAdminPage/index.d.ts +1 -0
- package/dist/pages/CaseDbUsersAdminPage/index.js +67 -0
- package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -0
- package/dist/pages/CaseSetCategoryAdminPage/CaseSetCategoryAdminPage.d.ts +1 -0
- package/dist/pages/CaseSetCategoryAdminPage/index.d.ts +1 -0
- package/dist/pages/CaseSetCategoryAdminPage/index.js +69 -0
- package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -0
- package/dist/pages/CaseSetStatusAdminPage/CaseSetStatusAdminPage.d.ts +1 -0
- package/dist/pages/CaseSetStatusAdminPage/index.d.ts +1 -0
- package/dist/pages/CaseSetStatusAdminPage/index.js +69 -0
- package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -0
- package/dist/pages/CaseTypeSetCategoriesAdminPage/CaseTypeSetCategoriesAdminPage.d.ts +1 -0
- package/dist/pages/CaseTypeSetCategoriesAdminPage/index.d.ts +1 -0
- package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +92 -0
- package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -0
- package/dist/pages/CaseTypeSetsAdminPage/CaseTypeSetsAdminPage.d.ts +1 -0
- package/dist/pages/CaseTypeSetsAdminPage/index.d.ts +1 -0
- package/dist/pages/CaseTypeSetsAdminPage/index.js +148 -0
- package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -0
- package/dist/pages/CaseTypesAdminPage/CaseTypesAdminPage.d.ts +1 -0
- package/dist/pages/CaseTypesAdminPage/index.d.ts +1 -0
- package/dist/pages/CaseTypesAdminPage/index.js +288 -0
- package/dist/pages/CaseTypesAdminPage/index.js.map +1 -0
- package/dist/pages/CasesDetailPage/CasesDetailPage.d.ts +1 -0
- package/dist/pages/CasesDetailPage/index.d.ts +1 -0
- package/dist/pages/CasesDetailPage/index.js +41 -0
- package/dist/pages/CasesDetailPage/index.js.map +1 -0
- package/dist/pages/CasesPage/CasesPage.d.ts +1 -0
- package/dist/pages/CasesPage/index.d.ts +1 -0
- package/dist/pages/CasesPage/index.js +229 -0
- package/dist/pages/CasesPage/index.js.map +1 -0
- package/dist/pages/ColSetsAdminPage/ColSetsAdminPage.d.ts +1 -0
- package/dist/pages/ColSetsAdminPage/index.d.ts +1 -0
- package/dist/pages/ColSetsAdminPage/index.js +109 -0
- package/dist/pages/ColSetsAdminPage/index.js.map +1 -0
- package/dist/pages/ColsAdminPage/ColsAdminPage.d.ts +1 -0
- package/dist/pages/ColsAdminPage/index.d.ts +1 -0
- package/dist/pages/ColsAdminPage/index.js +315 -0
- package/dist/pages/ColsAdminPage/index.js.map +1 -0
- package/dist/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.d.ts +1 -0
- package/dist/pages/ConceptRelationsAdminPage/index.d.ts +1 -0
- package/dist/pages/ConceptRelationsAdminPage/index.js +103 -0
- package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -0
- package/dist/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.d.ts +1 -0
- package/dist/pages/ConceptSetsAdminPage/index.d.ts +1 -0
- package/dist/pages/ConceptSetsAdminPage/index.js +112 -0
- package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -0
- package/dist/pages/ConceptsAdminPage/ConceptsAdminPage.d.ts +1 -0
- package/dist/pages/ConceptsAdminPage/index.d.ts +1 -0
- package/dist/pages/ConceptsAdminPage/index.js +94 -0
- package/dist/pages/ConceptsAdminPage/index.js.map +1 -0
- package/dist/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.d.ts +1 -0
- package/dist/pages/DataCollectionSetsAdminPage/index.d.ts +1 -0
- package/dist/pages/DataCollectionSetsAdminPage/index.js +99 -0
- package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -0
- package/dist/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.d.ts +1 -0
- package/dist/pages/DataCollectionVisualizationPage/index.d.ts +1 -0
- package/dist/pages/DataCollectionVisualizationPage/index.js +494 -0
- package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -0
- package/dist/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.d.ts +1 -0
- package/dist/pages/DataCollectionsAdminPage/index.d.ts +1 -0
- package/dist/pages/DataCollectionsAdminPage/index.js +54 -0
- package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -0
- package/dist/pages/DimsAdminPage/DimsAdminPage.d.ts +1 -0
- package/dist/pages/DimsAdminPage/index.d.ts +1 -0
- package/dist/pages/DimsAdminPage/index.js +146 -0
- package/dist/pages/DimsAdminPage/index.js.map +1 -0
- package/dist/pages/DiseasesAdminPage/DiseasesAdminPage.d.ts +1 -0
- package/dist/pages/DiseasesAdminPage/index.d.ts +1 -0
- package/dist/pages/DiseasesAdminPage/index.js +57 -0
- package/dist/pages/DiseasesAdminPage/index.js.map +1 -0
- package/dist/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.d.ts +1 -0
- package/dist/pages/EtiologicalAgentsAdminPage/index.d.ts +1 -0
- package/dist/pages/EtiologicalAgentsAdminPage/index.js +54 -0
- package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -0
- package/dist/pages/EtiologiesAdminPage/EtiologiesAdminPage.d.ts +1 -0
- package/dist/pages/EtiologiesAdminPage/index.d.ts +1 -0
- package/dist/pages/EtiologiesAdminPage/index.js +76 -0
- package/dist/pages/EtiologiesAdminPage/index.js.map +1 -0
- package/dist/pages/EventsDetailPage/EventsDetailPage.d.ts +1 -0
- package/dist/pages/EventsDetailPage/index.d.ts +1 -0
- package/dist/pages/EventsDetailPage/index.js +56 -0
- package/dist/pages/EventsDetailPage/index.js.map +1 -0
- package/dist/pages/EventsPage/EventsPage.d.ts +1 -0
- package/dist/pages/EventsPage/index.d.ts +1 -0
- package/dist/pages/EventsPage/index.js +221 -0
- package/dist/pages/EventsPage/index.js.map +1 -0
- package/dist/pages/HomePage/HomePage.d.ts +1 -0
- package/dist/pages/HomePage/index.d.ts +1 -0
- package/dist/pages/HomePage/index.js +35 -0
- package/dist/pages/HomePage/index.js.map +1 -0
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/OrganizationAccessCasePoliciesAdminPage.d.ts +1 -0
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.d.ts +1 -0
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +216 -0
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -0
- package/dist/pages/OrganizationShareCasePoliciesAdminPage/OrganizationShareCasePoliciesAdminPage.d.ts +1 -0
- package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.d.ts +1 -0
- package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +170 -0
- package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -0
- package/dist/pages/RefColsAdminPage/RefColsAdminPage.d.ts +1 -0
- package/dist/pages/RefColsAdminPage/index.d.ts +1 -0
- package/dist/pages/RefColsAdminPage/index.js +302 -0
- package/dist/pages/RefColsAdminPage/index.js.map +1 -0
- package/dist/pages/RefDimsAdminPage/RefDimsAdminPage.d.ts +1 -0
- package/dist/pages/RefDimsAdminPage/index.d.ts +1 -0
- package/dist/pages/RefDimsAdminPage/index.js +110 -0
- package/dist/pages/RefDimsAdminPage/index.js.map +1 -0
- package/dist/pages/RegionRelationsAdminPage/RegionRelationsAdminPage.d.ts +1 -0
- package/dist/pages/RegionRelationsAdminPage/index.d.ts +1 -0
- package/dist/pages/RegionRelationsAdminPage/index.js +102 -0
- package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -0
- package/dist/pages/RegionSetShapesAdminPage/RegionSetShapesAdminPage.d.ts +1 -0
- package/dist/pages/RegionSetShapesAdminPage/index.d.ts +1 -0
- package/dist/pages/RegionSetShapesAdminPage/index.js +73 -0
- package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -0
- package/dist/pages/RegionSetsAdminPage/RegionSetsAdminPage.d.ts +1 -0
- package/dist/pages/RegionSetsAdminPage/index.d.ts +1 -0
- package/dist/pages/RegionSetsAdminPage/index.js +101 -0
- package/dist/pages/RegionSetsAdminPage/index.js.map +1 -0
- package/dist/pages/RegionsAdminPage/RegionsAdminPage.d.ts +1 -0
- package/dist/pages/RegionsAdminPage/index.d.ts +1 -0
- package/dist/pages/RegionsAdminPage/index.js +99 -0
- package/dist/pages/RegionsAdminPage/index.js.map +1 -0
- package/dist/pages/TrendsPage/TrendsPage.d.ts +1 -0
- package/dist/pages/TrendsPage/index.d.ts +1 -0
- package/dist/pages/TrendsPage/index.js +17 -0
- package/dist/pages/TrendsPage/index.js.map +1 -0
- package/dist/pages/UploadPage/UploadPage.d.ts +1 -0
- package/dist/pages/UploadPage/index.d.ts +1 -0
- package/dist/pages/UploadPage/index.js +31 -0
- package/dist/pages/UploadPage/index.js.map +1 -0
- package/dist/pages/UserAccessCasePoliciesAdminPage/UserAccessCasePoliciesAdminPage.d.ts +1 -0
- package/dist/pages/UserAccessCasePoliciesAdminPage/index.d.ts +1 -0
- package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +206 -0
- package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -0
- package/dist/pages/UserEffectiveRightsAdminPage/UserEffectiveRightsAdminPage.d.ts +1 -0
- package/dist/pages/UserEffectiveRightsAdminPage/index.d.ts +1 -0
- package/dist/pages/UserEffectiveRightsAdminPage/index.js +246 -0
- package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/UserEffectiveRightsTesterAdminPage.d.ts +1 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.d.ts +1 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +195 -0
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -0
- package/dist/pages/UserShareCasePoliciesAdminPage/UserShareCasePoliciesAdminPage.d.ts +1 -0
- package/dist/pages/UserShareCasePoliciesAdminPage/index.d.ts +1 -0
- package/dist/pages/UserShareCasePoliciesAdminPage/index.js +169 -0
- package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -0
- package/dist/routes/adminRoutes.d.ts +6 -0
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +1110 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/routes.d.ts +6 -0
- package/dist/setup/setup.d.ts +1 -0
- package/dist/setup/setup.js +28 -0
- package/dist/setup/setup.js.map +1 -0
- package/dist/stores/dashboardStore/dashboardStore.d.ts +80 -0
- package/dist/stores/dashboardStore/dashboardStoreContext.d.ts +3 -0
- package/dist/stores/dashboardStore/index.d.ts +2 -0
- package/dist/stores/dashboardStore/index.js +2 -0
- package/dist/stores/uploadStore/index.d.ts +2 -0
- package/dist/stores/uploadStore/index.js +185 -0
- package/dist/stores/uploadStore/index.js.map +1 -0
- package/dist/stores/uploadStore/uploadStore.d.ts +80 -0
- package/dist/stores/uploadStore/uploadStoreContext.d.ts +3 -0
- package/dist/stores/userProfileStore/index.d.ts +1 -0
- package/dist/stores/userProfileStore/index.js +81 -0
- package/dist/stores/userProfileStore/index.js.map +1 -0
- package/dist/stores/userProfileStore/userProfileStore.d.ts +38 -0
- package/dist/stores/userProfileStore/userProfileStoreContext.d.ts +3 -0
- package/dist/theme/demoTheme/demoTheme.d.ts +3 -0
- package/dist/theme/demoTheme/index.d.ts +1 -0
- package/dist/theme/demoTheme/index.js +20 -0
- package/dist/theme/demoTheme/index.js.map +1 -0
- package/dist/utils/AbacUtil/AbacUtil.d.ts +7 -0
- package/dist/utils/AbacUtil/index.d.ts +1 -0
- package/dist/utils/AbacUtil/index.js +31 -0
- package/dist/utils/AbacUtil/index.js.map +1 -0
- package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +31 -0
- package/dist/utils/CaseDbDataUtil/index.d.ts +1 -0
- package/dist/utils/CaseDbDataUtil/index.js +43 -0
- package/dist/utils/CaseDbDataUtil/index.js.map +1 -0
- package/dist/utils/CaseDbDownloadUtil/CaseDbDownloadUtil.d.ts +17 -0
- package/dist/utils/CaseDbDownloadUtil/index.d.ts +1 -0
- package/dist/utils/CaseDbDownloadUtil/index.js +2 -0
- package/dist/utils/CaseDbStandardConfigUtil/CaseDbStandardConfigUtil.d.ts +7 -0
- package/dist/utils/CaseDbStandardConfigUtil/index.d.ts +1 -0
- package/dist/utils/CaseDbStandardConfigUtil/index.js +4778 -0
- package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -0
- package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +6 -0
- package/dist/utils/CaseDbTableUtil/index.d.ts +1 -0
- package/dist/utils/CaseDbTableUtil/index.js +41 -0
- package/dist/utils/CaseDbTableUtil/index.js.map +1 -0
- package/dist/utils/CaseSelectionUtil/CaseSelectionUtil.d.ts +8 -0
- package/dist/utils/CaseSelectionUtil/index.d.ts +1 -0
- package/dist/utils/CaseSelectionUtil/index.js +29 -0
- package/dist/utils/CaseSelectionUtil/index.js.map +1 -0
- package/dist/utils/CaseSetUtil/CaseSetUtil.d.ts +4 -0
- package/dist/utils/CaseSetUtil/index.d.ts +1 -0
- package/dist/utils/CaseSetUtil/index.js +13 -0
- package/dist/utils/CaseSetUtil/index.js.map +1 -0
- package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +20 -0
- package/dist/utils/CaseTypeFormUtil/index.d.ts +1 -0
- package/dist/utils/CaseTypeFormUtil/index.js +199 -0
- package/dist/utils/CaseTypeFormUtil/index.js.map +1 -0
- package/dist/utils/CaseTypeUtil/CaseTypeUtil.d.ts +39 -0
- package/dist/utils/CaseTypeUtil/index.d.ts +1 -0
- package/dist/utils/CaseTypeUtil/index.js +135 -0
- package/dist/utils/CaseTypeUtil/index.js.map +1 -0
- package/dist/utils/CaseUtil/CaseUtil.d.ts +18 -0
- package/dist/utils/CaseUtil/index.d.ts +1 -0
- package/dist/utils/CaseUtil/index.js +138 -0
- package/dist/utils/CaseUtil/index.js.map +1 -0
- package/dist/utils/DashboardUtil/DashboardUtil.d.ts +29 -0
- package/dist/utils/DashboardUtil/index.d.ts +1 -0
- package/dist/utils/DashboardUtil/index.js +152 -0
- package/dist/utils/DashboardUtil/index.js.map +1 -0
- package/dist/utils/DataSetUtil/DataSetUtil.d.ts +17 -0
- package/dist/utils/DataSetUtil/index.d.ts +1 -0
- package/dist/utils/DataSetUtil/index.js +43 -0
- package/dist/utils/DataSetUtil/index.js.map +1 -0
- package/dist/utils/EffectiveRightsUtil/EffectiveRightsUtil.d.ts +29 -0
- package/dist/utils/EffectiveRightsUtil/index.d.ts +1 -0
- package/dist/utils/EffectiveRightsUtil/index.js +118 -0
- package/dist/utils/EffectiveRightsUtil/index.js.map +1 -0
- package/dist/utils/EpiCurveUtil/EpiCurveUtil.d.ts +96 -0
- package/dist/utils/EpiCurveUtil/index.d.ts +1 -0
- package/dist/utils/EpiCurveUtil/index.js +2 -0
- package/dist/utils/FileUtil/FileUtil.d.ts +5 -0
- package/dist/utils/FileUtil/index.d.ts +1 -0
- package/dist/utils/FileUtil/index.js +15 -0
- package/dist/utils/FileUtil/index.js.map +1 -0
- package/dist/utils/FilterUtil/FilterUtil.d.ts +11 -0
- package/dist/utils/FilterUtil/index.d.ts +1 -0
- package/dist/utils/FilterUtil/index.js +2 -0
- package/dist/utils/FindSimilarCasesUtil/FindSimilarCasesUtil.d.ts +7 -0
- package/dist/utils/FindSimilarCasesUtil/index.d.ts +1 -0
- package/dist/utils/FindSimilarCasesUtil/index.js +2 -0
- package/dist/utils/HistogramUtil/HistogramUtil.d.ts +78 -0
- package/dist/utils/HistogramUtil/index.d.ts +1 -0
- package/dist/utils/HistogramUtil/index.js +145 -0
- package/dist/utils/HistogramUtil/index.js.map +1 -0
- package/dist/utils/MapUtil/MapUtil.d.ts +38 -0
- package/dist/utils/MapUtil/index.d.ts +1 -0
- package/dist/utils/MapUtil/index.js +210 -0
- package/dist/utils/MapUtil/index.js.map +1 -0
- package/dist/utils/StratificationUtil/StratificationUtil.d.ts +25 -0
- package/dist/utils/StratificationUtil/index.d.ts +1 -0
- package/dist/utils/StratificationUtil/index.js +198 -0
- package/dist/utils/StratificationUtil/index.js.map +1 -0
- package/dist/utils/TreeWidgetUtil/TreeWidgetUtil.d.ts +7 -0
- package/dist/utils/TreeWidgetUtil/index.d.ts +1 -0
- package/dist/utils/TreeWidgetUtil/index.js +35 -0
- package/dist/utils/TreeWidgetUtil/index.js.map +1 -0
- package/dist/utils/UploadUtil/UploadUtil.d.ts +106 -0
- package/dist/utils/UploadUtil/index.d.ts +1 -0
- package/dist/utils/UploadUtil/index.js +2 -0
- package/package.json +784 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Upload.js","names":[],"sources":["../../src/components/ui/Upload/UploadNavigation.tsx","../../src/components/ui/Upload/UploadSelectFile.tsx","../../src/components/ui/Upload/UploadMapColumns.tsx","../../src/components/ui/CompletCaseTypeLoader/withEpiCompleteCaseTypeLoader.tsx","../../src/components/ui/Upload/UploadEditColumnValuesDialog.tsx","../../src/components/ui/Upload/UploadCaseResultTable.tsx","../../src/components/ui/Upload/UploadPreviewNavigation.tsx","../../src/components/ui/Upload/UploadPreview.tsx","../../src/components/ui/Upload/UploadCreateCases.tsx","../../src/components/ui/Upload/UploadSelectSequenceFiles.tsx","../../src/components/ui/Upload/UploadMapSequences.tsx","../../src/components/ui/Upload/Upload.tsx"],"sourcesContent":["import type { ContainerOwnProps } from '@mui/material';\nimport {\n Box,\n Button,\n} from '@mui/material';\nimport { use } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\n\nimport { UploadStoreContext } from '../../../stores/uploadStore';\n\nexport type UploadNavigationProps = {\n readonly backLabel?: string;\n readonly containerProps?: ContainerOwnProps;\n readonly onGoBackButtonClick?: () => void;\n readonly onProceedButtonClick?: () => void;\n readonly proceedDisabled?: boolean;\n readonly proceedLabel?: string;\n};\n\nexport const UploadNavigation = ({\n backLabel,\n onGoBackButtonClick: onGoBack,\n onProceedButtonClick: onProceedButtonClick,\n proceedDisabled,\n proceedLabel,\n}: UploadNavigationProps) => {\n const { t } = useTranslation();\n const store = use(UploadStoreContext);\n const stepOrder = useStore(store, (state) => state.stepOrder);\n const activeStep = useStore(store, (state) => state.activeStep);\n const goBackFromFirstStepCallback = useStore(store, (state) => state.goBackFromFirstStepCallback);\n const goBackFromFirstStepLabel = useStore(store, (state) => state.goBackFromFirstStepLabel);\n\n const isFirstStep = activeStep === stepOrder[0];\n const onClickGoBack = isFirstStep ? (goBackFromFirstStepCallback ?? onGoBack) : onGoBack;\n const effectiveBackLabel = isFirstStep ? (goBackFromFirstStepLabel ?? backLabel) : backLabel;\n\n return (\n <Box\n sx={{\n borderTop: (theme) => `1px solid ${theme.palette.divider}`,\n display: 'flex',\n gap: 2,\n justifyContent: 'flex-end',\n marginTop: 1,\n paddingTop: 1,\n }}\n >\n {onClickGoBack && (\n <Button\n onClick={onClickGoBack}\n variant={'outlined'}\n >\n {effectiveBackLabel ?? t`Go back`}\n </Button>\n )}\n {onProceedButtonClick && (\n <Button\n color={'secondary'}\n disabled={proceedDisabled}\n onClick={onProceedButtonClick}\n variant={'contained'}\n >\n {proceedLabel ?? t`Next`}\n </Button>\n )}\n </Box>\n );\n\n};\n","import {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport type { Resolver } from 'react-hook-form';\nimport { useForm } from 'react-hook-form';\nimport {\n mixed,\n object,\n string,\n} from 'yup';\nimport {\n Alert,\n AlertTitle,\n Container,\n Typography,\n} from '@mui/material';\nimport { useStore } from 'zustand';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useItemQuery } from '@gen-epix/ui/hooks/useItemQuery';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { GenericForm } from '@gen-epix/ui-form/components/helpers/GenericForm';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\n\nimport {\n useCaseTypeOptionsQuery,\n useCaseTypesQuery,\n} from '../../../dataHooks/useCaseTypesQuery';\nimport { useDataCollectionOptionsQuery } from '../../../dataHooks/useDataCollectionsQuery';\nimport { useColsQuery } from '../../../dataHooks/useColsQuery';\nimport { UploadUtil } from '../../../utils/UploadUtil';\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { UploadNavigation } from './UploadNavigation';\n\ntype FormFields = {\n caseTypeId: string;\n createdInDataCollectionId: string;\n fileList: unknown;\n sheet: string;\n};\n\nexport const UploadSelectFile = () => {\n const { t } = useTranslation();\n const caseTypesQuery = useCaseTypesQuery();\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n const colsQuery = useColsQuery();\n const formId = useId();\n\n const store = use(UploadStoreContext);\n\n const caseTypeId = useStore(store, (state) => state.caseTypeId);\n const fileList = useStore(store, (state) => state.fileList);\n const fileName = useStore(store, (state) => state.fileName);\n const fileParsingError = useStore(store, (state) => state.fileParsingError);\n const goToNextStep = useStore(store, (state) => state.goToNextStep);\n const createdInDataCollectionOptions = useStore(store, (state) => state.createdInDataCollectionOptions);\n const rawData = useStore(store, (state) => state.rawData);\n const setCols = useStore(store, (state) => state.setCols);\n const setCaseTypeId = useStore(store, (state) => state.setCaseTypeId);\n const setCompleteCaseType = useStore(store, (state) => state.setCompleteCaseType);\n const setCreatedInDataCollectionId = useStore(store, (state) => state.setCreatedInDataCollectionId);\n const setFileList = useStore(store, (state) => state.setFileList);\n const setSheet = useStore(store, (state) => state.setSheet);\n const setDataCollectionOptions = useStore(store, (state) => state.setDataCollectionOptions);\n const sheet = useStore(store, (state) => state.sheet);\n const sheetOptions = useStore(store, (state) => state.sheetOptions);\n\n const schema = useMemo(() => object<FormFields>().shape({\n caseTypeId: string().uuid4().required(),\n createdInDataCollectionId: string().uuid4().required(),\n fileList: mixed().required(t`File is required`),\n sheet: string().required(t`Sheet is required`),\n }), [t]);\n\n const formMethods = useForm<FormFields>({\n defaultValues: {\n caseTypeId: null,\n createdInDataCollectionId: null,\n fileList: null,\n sheet: null,\n },\n resolver: yupResolver(schema) as unknown as Resolver<FormFields>,\n values: {\n caseTypeId: store.getState().caseTypeId ?? null,\n createdInDataCollectionId: store.getState().createdInDataCollectionId ?? null,\n fileList: store.getState().fileList ?? null,\n sheet: store.getState().sheet ?? null,\n },\n });\n const { handleSubmit, setError, setValue } = formMethods;\n\n useEffect(() => {\n if (Array.isArray(colsQuery?.data)) {\n setCols(colsQuery.data);\n }\n }, [colsQuery.data, setCols]);\n\n useEffect(() => {\n if (dataCollectionOptionsQuery?.options?.length) {\n setDataCollectionOptions(dataCollectionOptionsQuery.options);\n }\n }, [dataCollectionOptionsQuery?.options, setDataCollectionOptions]);\n\n const { data: completeCaseType, error: completeCaseTypeError, isLoading: isCompleteCaseTypeLoading } = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.COMPLETE_CASE_TYPES,\n itemId: caseTypeId,\n useQueryOptions: {\n enabled: !!caseTypeId,\n queryFn: async ({ signal }) => {\n return (await CaseDbCaseApi.getInstance().completeCaseTypesGetOne(caseTypeId, { signal })).data;\n },\n },\n });\n\n useEffect(() => {\n if (completeCaseType) {\n setCompleteCaseType(completeCaseType);\n }\n }, [completeCaseType, setCompleteCaseType]);\n\n const onFileListChange = useCallback(async (value: FileList) => {\n await setFileList(value);\n }, [setFileList]);\n\n const onSheetChange = useCallback(async (value: unknown) => {\n await setSheet(value as string);\n }, [setSheet]);\n\n const onCaseTypeIdChange = useCallback((value: unknown) => {\n setCaseTypeId(value as string);\n }, [setCaseTypeId]);\n\n const onCreatedInDataCollectionIdChange = useCallback((value: unknown) => {\n setCreatedInDataCollectionId(value as string);\n }, [setCreatedInDataCollectionId]);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n const fields: FormFieldDefinition<FormFields>[] = [\n {\n accept: '.csv,.tsv,.txt,.xlsx',\n definition: FORM_FIELD_DEFINITION_TYPE.FILE,\n label: t`File`,\n name: 'fileList',\n onChange: onFileListChange,\n } as const satisfies FormFieldDefinition<FormFields>,\n ];\n\n if (UploadUtil.isXlsxFile(fileName)) {\n fields.push({\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Sheet`,\n name: 'sheet',\n onChange: onSheetChange,\n options: sheetOptions,\n } as const satisfies FormFieldDefinition<FormFields>);\n }\n\n fields.push(...[\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !fileList,\n label: t`Case type`,\n loading: caseTypeOptionsQuery.isLoading,\n name: 'caseTypeId',\n onChange: onCaseTypeIdChange,\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n disabled: !fileList || !caseTypeId,\n label: t`Create in data collection`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n name: 'createdInDataCollectionId',\n onChange: onCreatedInDataCollectionIdChange,\n options: createdInDataCollectionOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const);\n\n return fields;\n }, [t, onFileListChange, fileName, caseTypeOptionsQuery.options, caseTypeOptionsQuery.isLoading, fileList, onCaseTypeIdChange, createdInDataCollectionOptions, dataCollectionOptionsQuery.isLoading, isCompleteCaseTypeLoading, caseTypeId, onCreatedInDataCollectionIdChange, sheetOptions, onSheetChange]);\n\n useEffect(() => {\n if (fileParsingError) {\n setError('fileList', { message: fileParsingError, type: 'manual' });\n } else {\n setError('fileList', undefined);\n }\n }, [fileParsingError, setError, setValue]);\n\n const onFormSubmit = useCallback(async () => {\n await goToNextStep();\n }, [goToNextStep]);\n\n const loadables = useArray([\n caseTypesQuery,\n caseTypeOptionsQuery,\n dataCollectionOptionsQuery,\n colsQuery,\n ]);\n\n const onProceedButtonClick = useCallback(async () => {\n await handleSubmit(onFormSubmit)();\n }, [handleSubmit, onFormSubmit]);\n\n const canUpload = useMemo(() => {\n if (colsQuery.isLoading === false && colsQuery.data?.length === 0) {\n return false;\n }\n if (caseTypeOptionsQuery.isLoading === false && caseTypeOptionsQuery.options?.length === 0) {\n return false;\n }\n if (dataCollectionOptionsQuery.isLoading === false && dataCollectionOptionsQuery.options?.length === 0) {\n return false;\n }\n return true;\n }, [colsQuery.data?.length, colsQuery.isLoading, caseTypeOptionsQuery.isLoading, caseTypeOptionsQuery.options?.length, dataCollectionOptionsQuery.isLoading, dataCollectionOptionsQuery.options?.length]);\n\n return (\n\n <ResponseHandler\n error={completeCaseTypeError}\n inlineSpinner\n loadables={loadables}\n >\n <Container maxWidth={'lg'}>\n {!canUpload && (\n <Alert\n severity={'warning'}\n sx={{ mb: 2 }}\n >\n {t('Upload is disabled because you have insufficient data access to proceed. Contact your organization administrator for assistance.')}\n </Alert>\n )}\n {canUpload && (\n <>\n {rawData && rawData.length > 0 && (\n <Alert\n severity={'info'}\n sx={{ mb: 2 }}\n >\n <AlertTitle>\n {t('{{fileName}} loaded successfully', { fileName })}\n </AlertTitle>\n {sheet && (\n <Typography>\n {t('Sheet name: {{sheet}}', { sheet: sheet || '' })}\n </Typography>\n )}\n <Typography>\n {t('Number of columns: {{columnCount}}', { columnCount: rawData[0].length })}\n </Typography>\n <Typography>\n {t('Number of data rows: {{rowCount}}', { rowCount: rawData.length - 1 })}\n </Typography>\n </Alert>\n )}\n <GenericForm<FormFields>\n formFieldDefinitions={formFieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n schema={schema}\n />\n <UploadNavigation\n onProceedButtonClick={onProceedButtonClick}\n />\n </>\n )}\n\n </Container>\n </ResponseHandler>\n );\n};\n","import type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport {\n useForm,\n useWatch,\n} from 'react-hook-form';\nimport {\n Alert,\n AlertTitle,\n Box,\n Container,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport uniq from 'lodash/uniq';\nimport { useStore } from 'zustand';\nimport difference from 'lodash/difference';\nimport { ConfigService } from '@gen-epix/ui/classes/services/ConfigService';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useIdentifierIssuerOwnOrganizationOptionsQuery } from '@gen-epix/ui/dataHooks/useIdentifierIssuerOwnOrganizationQuery';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { Select } from '@gen-epix/ui-form/components/fields/Select';\nimport { GenericForm } from '@gen-epix/ui-form/components/helpers/GenericForm';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\n\nimport { useColMapQuery } from '../../../dataHooks/useColsQuery';\nimport type { UploadMappedColumnsFormFields } from '../../../models/upload';\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { UploadUtil } from '../../../utils/UploadUtil';\n\nimport { UploadNavigation } from './UploadNavigation';\n\n\nexport const UploadMapColumns = () => {\n const { t } = useTranslation();\n const colMap = useColMapQuery();\n const identifierIssuerOptionsQuery = useIdentifierIssuerOwnOrganizationOptionsQuery();\n\n const store = use(UploadStoreContext);\n const completeCaseType = useStore(store, (state) => state.completeCaseType);\n const rawData = useStore(store, (state) => state.rawData);\n const fileName = useStore(store, (state) => state.fileName);\n const goToNextStep = useStore(store, (state) => state.goToNextStep);\n const goToPreviousStep = useStore(store, (state) => state.goToPreviousStep);\n const setMappedColumns = useStore(store, (state) => state.setMappedColumns);\n\n const loadables = useArray([\n colMap,\n identifierIssuerOptionsQuery,\n ]);\n\n const columnMappingFormId = useId();\n\n const schema = useMemo(() => {\n return UploadUtil.getColumnMappingSchema(rawData, completeCaseType);\n }, [completeCaseType, rawData]);\n\n const defaultValues: UploadMappedColumnsFormFields = useMemo(() => {\n return UploadUtil.getDefaultColumnMappingFormValues(rawData[0], store.getState().mappedColumns, identifierIssuerOptionsQuery.options);\n }, [rawData, store, identifierIssuerOptionsQuery.options]);\n\n const formMethods = useForm<UploadMappedColumnsFormFields>({\n defaultValues: { ...defaultValues },\n resolver: yupResolver(schema),\n values: { ...defaultValues },\n });\n\n const { clearErrors, control, handleSubmit } = formMethods;\n const columnMappingFormValues = useWatch({ control });\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<UploadMappedColumnsFormFields>[]>(() => {\n return UploadUtil.getColumnMappingFormFieldDefinitions(completeCaseType, rawData[0], fileName).map(def => ({\n ...def,\n onChange: () => clearErrors(),\n }));\n }, [completeCaseType, rawData, fileName, clearErrors]);\n\n useEffect(() => {\n const perform = async () => {\n await setMappedColumns(UploadUtil.getMappedColumnsFromFormData(columnMappingFormValues, rawData, colMap.map, completeCaseType));\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [setMappedColumns, columnMappingFormValues, rawData, colMap.map, completeCaseType]);\n\n const unMappedColumns = useMemo(() => {\n const knownIndicies = rawData[0].map((_col, index) => index);\n const mappedIndicies = UploadUtil.getMappedColumnsFromFormData(columnMappingFormValues, rawData, colMap.map, completeCaseType).map(mappedColumn => mappedColumn.originalIndex);\n return difference(knownIndicies, mappedIndicies).map(index => {\n return {\n originalIndex: index,\n originalLabel: rawData[0][index],\n };\n });\n }, [colMap.map, rawData, columnMappingFormValues, completeCaseType]);\n\n const onFormSubmit = useCallback(async (data: UploadMappedColumnsFormFields) => {\n await setMappedColumns(UploadUtil.getMappedColumnsFromFormData(data, rawData, colMap.map, completeCaseType));\n await goToNextStep();\n }, [rawData, colMap.map, goToNextStep, setMappedColumns, completeCaseType]);\n\n const sampleIdColIds = useMemo(() => {\n return UploadUtil.getSampleIdColIds(completeCaseType);\n }, [completeCaseType]);\n\n const renderField = useCallback((definition: FormFieldDefinition<UploadMappedColumnsFormFields>, element: ReactElement) => {\n const columnIndexInRawData = parseInt(definition.name, 10);\n const columnValues = uniq(rawData.slice(1).map((row) => row[columnIndexInRawData] ?? '')).filter(x => !!x);\n const firstFiveValuesString = columnValues.slice(0, 5).join(', ').trim() || t('<no data>');\n\n let elementWithIssuer = element;\n const fieldValue = columnMappingFormValues[definition.name];\n if (sampleIdColIds.includes(fieldValue)) {\n elementWithIssuer = (\n <>\n <Box>\n {element}\n </Box>\n <Box\n sx={{\n marginTop: 1,\n }}\n >\n <Select\n label={t('{{columnLabel}}: Identifier issuer', { columnLabel: definition.label })}\n loading={identifierIssuerOptionsQuery.isLoading}\n name={fieldValue}\n options={identifierIssuerOptionsQuery.options}\n />\n </Box>\n </>\n );\n }\n\n return (\n <TableRow key={definition.name}>\n <TableCell>\n {definition.label}\n </TableCell>\n <TableCell>\n {elementWithIssuer}\n </TableCell>\n <TableCell>\n {firstFiveValuesString}\n </TableCell>\n </TableRow>\n );\n }, [columnMappingFormValues, identifierIssuerOptionsQuery.isLoading, identifierIssuerOptionsQuery.options, rawData, sampleIdColIds, t]);\n\n const wrapForm = useCallback((children: ReactElement) => {\n return (\n <Table\n size={'small'}\n >\n <TableHead\n sx={{\n backgroundColor: (theme) => theme.palette.background.paper,\n position: 'sticky',\n top: 0,\n zIndex: (theme) => theme.zIndex.appBar - 1,\n }}\n >\n <TableRow>\n <TableCell sx={{ width: '33%' }}>\n {t`Source`}\n </TableCell>\n <TableCell sx={{ width: '33%' }}>\n {ConfigService.getInstance().config.applicationName}\n </TableCell>\n <TableCell sx={{ width: '34%' }}>\n {t`Data preview (first 5 unique values)`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {children}\n </TableBody>\n </Table>\n );\n }, [t]);\n\n const onProceedButtonClick = useCallback(async () => {\n await handleSubmit(onFormSubmit)();\n }, [handleSubmit, onFormSubmit]);\n\n const onGoBackButtonClick = useCallback(() => {\n goToPreviousStep();\n }, [goToPreviousStep]);\n\n return (\n <ResponseHandler loadables={loadables}>\n <Box\n sx={{\n display: 'grid',\n gridTemplateRows: 'max-content auto max-content',\n height: '100%',\n }}\n >\n <Container\n maxWidth={'lg'}\n sx={{\n marginBottom: 2,\n }}\n >\n <Alert severity={unMappedColumns.length === 0 ? 'info' : 'warning'}>\n <AlertTitle>\n {unMappedColumns.length === 0 ?\n t('All columns in {{fileName}} have been mapped to known columns in {{applicationName}}', { applicationName: ConfigService.getInstance().config.applicationName, fileName })\n : t('{{numUnmappedColumns}} column(s) in {{fileName}} are not mapped', { fileName, numUnmappedColumns: unMappedColumns.length })}\n </AlertTitle>\n {unMappedColumns.map((unmappedColumn) => (\n <Box key={unmappedColumn.originalIndex}>\n {t('The column \"{{columnName}}\" (column {{columnIndex}}) has not been mapped.', { columnIndex: unmappedColumn.originalIndex + 1, columnName: unmappedColumn.originalLabel })}\n </Box>\n ))}\n {unMappedColumns.length === 0 && t('You can proceed to the next step.')}\n </Alert>\n </Container>\n <Box\n sx={{\n overflowY: 'auto',\n position: 'relative',\n }}\n >\n <Box\n sx={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n <Container>\n <GenericForm<UploadMappedColumnsFormFields>\n formFieldDefinitions={formFieldDefinitions}\n formId={columnMappingFormId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n renderField={renderField}\n schema={schema}\n wrapForm={wrapForm}\n />\n </Container>\n </Box>\n </Box>\n <Box>\n <UploadNavigation\n onGoBackButtonClick={onGoBackButtonClick}\n onProceedButtonClick={onProceedButtonClick}\n />\n </Box>\n </Box>\n </ResponseHandler>\n );\n};\n","import {\n useCallback,\n useState,\n} from 'react';\nimport type { ComponentType } from 'react';\n\nimport type { CompletCaseTypeLoaderProps } from './CompletCaseTypeLoader';\nimport { CompletCaseTypeLoader } from './CompletCaseTypeLoader';\n\nexport type WithEpiCompleteCaseTypeLoaderProps = CompletCaseTypeLoaderProps;\n\nexport const withEpiCompleteCaseTypeLoader = <P extends WithEpiCompleteCaseTypeLoaderProps>(WrappedComponent: ComponentType<P>): ComponentType<P> => {\n return (props: WithEpiCompleteCaseTypeLoaderProps) => {\n const [isCompleteCaseTypeLoaded, setIsCompleteCaseTypeLoaded] = useState<boolean>(false);\n\n const onCompleteCaseTypeLoaded = useCallback(() => {\n setIsCompleteCaseTypeLoaded(true);\n }, []);\n\n return (\n <CompletCaseTypeLoader\n caseTypeId={props.caseTypeId}\n onCompleteCaseTypeLoaded={onCompleteCaseTypeLoaded}\n >\n {isCompleteCaseTypeLoaded && (\n <WrappedComponent\n {...props as P}\n />\n )}\n </CompletCaseTypeLoader>\n );\n };\n};\n","import { useTranslation } from 'react-i18next';\nimport type {\n CaseDbCase,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport type { DialogAction } from '@gen-epix/ui/components/ui/Dialog';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui/hoc/withDialog';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { ReactElement } from 'react';\nimport {\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport { useForm } from 'react-hook-form';\nimport {\n Alert,\n AlertTitle,\n Box,\n} from '@mui/material';\nimport { GenericForm } from '@gen-epix/ui-form/components/helpers/GenericForm';\nimport { FormUtil } from '@gen-epix/ui-form/utils/FormUtil';\n\nimport { CaseTypeFormUtil } from '../../../utils/CaseTypeFormUtil';\n\n\nexport interface UploadEditColumnValuesDialogOpenProps {\n colId: string;\n completeCaseType: CaseDbCompleteCaseType;\n shouldShowRightsWarning?: boolean;\n}\n\nexport interface UploadEditColumnValuesDialogProps extends WithDialogRenderProps<UploadEditColumnValuesDialogOpenProps> {\n onSubmit: (content: CaseDbCase['content']) => void;\n}\n\nexport type UploadEditColumnValuesDialogRefMethods = WithDialogRefMethods<UploadEditColumnValuesDialogProps, UploadEditColumnValuesDialogOpenProps>;\n\n\nexport const UploadEditColumnValuesDialog = withDialog<UploadEditColumnValuesDialogProps, UploadEditColumnValuesDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onSubmit,\n onTitleChange,\n openProps,\n }: UploadEditColumnValuesDialogProps,\n): ReactElement => {\n const { t } = useTranslation();\n const formId = useId();\n\n const col = useMemo(() => {\n return openProps.completeCaseType.cols[openProps.colId];\n }, [openProps.completeCaseType.cols, openProps.colId]);\n\n useEffect(() => {\n onTitleChange(t('Edit values for {{colLabel}} (for selected rows)', { colLabel: col.label }));\n }, [onTitleChange, col.label, t]);\n\n const schema = useMemo(() => CaseTypeFormUtil.createYupSchema({\n completeCaseType: openProps.completeCaseType,\n includedColIds: [openProps.colId],\n }), [openProps.completeCaseType, openProps.colId]);\n\n const formMethods = useForm<CaseDbCase['content']>({\n resolver: yupResolver(schema),\n });\n const { handleSubmit } = formMethods;\n\n const { fieldDefinitions } = useMemo(() => {\n return CaseTypeFormUtil.createFormDefinitions({\n completeCaseType: openProps.completeCaseType,\n includedColIds: [openProps.colId],\n });\n }, [openProps.completeCaseType, openProps.colId]);\n\n const onFormSubmit = useCallback((content: CaseDbCase['content']) => {\n onSubmit(FormUtil.createStringValuesFromFormValues(fieldDefinitions, content));\n onClose();\n }, [fieldDefinitions, onClose, onSubmit]);\n\n useEffect(() => {\n const actions: DialogAction[] = [\n {\n ...TestIdUtil.createAttributes('UploadEditColumnValuesDialog-submitButton'),\n color: 'primary',\n form: formId,\n label: t`Save and revalidate`,\n type: 'submit',\n variant: 'contained',\n },\n ];\n onActionsChange(actions);\n }, [formId, onActionsChange, t]);\n\n return (\n <Box>\n {openProps.shouldShowRightsWarning && (\n <Box sx={{ marginBottom: 2 }}>\n <Alert severity={'warning'}>\n <AlertTitle>\n {t`You do not have the necessary rights to edit all rows in this column.`}\n </AlertTitle>\n {t`Only the cases that you have write access to for this column will be updated. Please review the changes carefully before submitting.`}\n </Alert>\n </Box>\n )}\n <GenericForm<CaseDbCase['content']>\n formFieldDefinitions={fieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n schema={schema}\n />\n </Box>\n );\n}, {\n defaultTitle: '',\n fullWidth: true,\n maxWidth: 'md',\n testId: 'UploadEditColumnValuesDialog',\n});\n","import type { ReactElement } from 'react';\nimport {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport EditIcon from '@mui/icons-material/Edit';\nimport type { StoreApi } from 'zustand';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport ErrorOutlinedIcon from '@mui/icons-material/ErrorOutlined';\nimport AddIcon from '@mui/icons-material/Add';\nimport { useTranslation } from 'react-i18next';\nimport type {\n CaseDbCase,\n CaseDbCaseDataIssue,\n CaseDbCaseUploadResult,\n CaseDbCol,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport { CaseDbDataIssueType } from '@gen-epix/api-casedb';\nimport type {\n TableColumn,\n TableColumnParams,\n TableRowAndColumnParams,\n TableRowParams,\n} from '@gen-epix/ui/models/table';\nimport type { TableStore } from '@gen-epix/ui/stores/tableStore';\nimport {\n Table,\n TableMenu,\n} from '@gen-epix/ui/components/ui/Table';\nimport { TABLE_COLUMN_FROZEN } from '@gen-epix/ui/models/table';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { useInitializeTableStore } from '@gen-epix/ui/hooks/useInitializeTableStore';\n\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport type { CaseContentFormDialogRefMethods } from '../CaseContentFormDialog';\nimport { CaseContentFormDialog } from '../CaseContentFormDialog';\n\nimport type { UploadEditColumnValuesDialogRefMethods } from './UploadEditColumnValuesDialog';\nimport { UploadEditColumnValuesDialog } from './UploadEditColumnValuesDialog';\n\n\nexport type UploadCaseResultTableProps = {\n readonly caseRightsColMap?: { [colId: string]: string[] };\n readonly caseUploadResults?: CaseDbCaseUploadResult[];\n readonly completeCaseType: CaseDbCompleteCaseType;\n readonly getOriginalCellValue: (col: CaseDbCol, cellParams: TableRowAndColumnParams<CaseDbCaseUploadResult, null>, issue: CaseDbCaseDataIssue) => string;\n readonly onCaseContentEditSubmit: (caseId: string, content: CaseDbCase['content']) => void;\n readonly onColContentEditSubmit: (contentPerCaseId: { [caseId: string]: CaseDbCase['content'] }) => void;\n readonly tableStore: StoreApi<TableStore<CaseDbCaseUploadResult>>;\n};\n\nexport const UploadCaseResultTable = ({ caseRightsColMap, caseUploadResults, completeCaseType, getOriginalCellValue, onCaseContentEditSubmit, onColContentEditSubmit, tableStore }: UploadCaseResultTableProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n const caseFormDialogRef = useRef<CaseContentFormDialogRefMethods>(null);\n const uploadEditColumnValuesDialogRef = useRef<UploadEditColumnValuesDialogRefMethods>(null);\n\n const dataRulePriority: CaseDbDataIssueType[] = useMemo(() => [\n CaseDbDataIssueType.UNAUTHORIZED,\n CaseDbDataIssueType.INVALID,\n CaseDbDataIssueType.CONFLICT,\n CaseDbDataIssueType.MISSING,\n CaseDbDataIssueType.DERIVED,\n CaseDbDataIssueType.TRANSFORMED,\n ], []);\n\n const errorIssueTypes: CaseDbDataIssueType[] = useMemo(() => [\n CaseDbDataIssueType.UNAUTHORIZED,\n CaseDbDataIssueType.INVALID,\n ], []);\n\n const warningIssueTypes: CaseDbDataIssueType[] = useMemo(() => [\n CaseDbDataIssueType.MISSING,\n CaseDbDataIssueType.CONFLICT,\n ], []);\n\n const onTableCustomHeaderIconClick = useCallback((params: TableColumnParams<CaseDbCaseUploadResult, null>) => {\n uploadEditColumnValuesDialogRef.current?.open({\n colId: params.column.id,\n completeCaseType,\n shouldShowRightsWarning: caseRightsColMap?.[params.column.id]?.length !== caseUploadResults?.length,\n });\n }, [completeCaseType, caseRightsColMap, caseUploadResults]);\n\n const onCaseContentFormDialogSubmit = useCallback((caseId: string, content: CaseDbCase['content']) => {\n onCaseContentEditSubmit(caseId, content);\n }, [onCaseContentEditSubmit]);\n\n const onEpiUploadEditColumnValuesDialogSubmit = useCallback((content: CaseDbCase['content']) => {\n const contentPerCaseId: { [caseId: string]: CaseDbCase['content'] } = {};\n Object.keys(content).forEach((colId) => {\n const caseIds = caseRightsColMap?.[colId] ?? [];\n caseIds.forEach((caseId) => {\n contentPerCaseId[caseId] = {\n ...(contentPerCaseId[caseId] ?? {}),\n [colId]: content[colId],\n };\n });\n });\n onColContentEditSubmit(contentPerCaseId);\n }, [onColContentEditSubmit, caseRightsColMap]);\n\n const getIssueTooltipMessages = useCallback((issues: CaseDbCaseDataIssue[]) => {\n const messages: { key: string; message: string }[] = [];\n issues.forEach((issue) => {\n const columnLabel = completeCaseType.cols[issue.col_id].label;\n const message = `${columnLabel}: ${issue.message}`;\n messages.push({\n key: `${issue.col_id}-${issue.data_issue_type}-${issue.code}`,\n message,\n });\n });\n return messages;\n }, [completeCaseType.cols]);\n\n const getIssueTooltipContent = useCallback((issues: CaseDbCaseDataIssue[]) => {\n const messages = getIssueTooltipMessages(issues);\n return (\n <>\n {messages.map(({ key, message }, index) => (\n <Box\n key={key}\n sx={{ marginTop: index > 0 ? 1 : 0 }}\n >\n {message}\n </Box>\n ))}\n </>\n );\n }, [getIssueTooltipMessages]);\n\n const getIssueTooltipLabel = useCallback((issues: CaseDbCaseDataIssue[]) => {\n const messages = getIssueTooltipMessages(issues);\n return messages.map(m => m.message).join(', ');\n }, [getIssueTooltipMessages]);\n\n const getFilteredIssueTypes = useCallback((id: string, issues: CaseDbCaseDataIssue[], value: string) => {\n return issues.filter((issue) => {\n if (issue.col_id !== id) {\n return false;\n }\n if (issue.data_issue_type === CaseDbDataIssueType.TRANSFORMED && issue.original_value === value) {\n return false;\n }\n return true;\n }).sort((a, b) => dataRulePriority.indexOf(a.data_issue_type) - dataRulePriority.indexOf(b.data_issue_type));\n }, [dataRulePriority]);\n\n const renderHasIssueHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t('Indicates if there are any issues with the case')}\n >\n <ErrorOutlinedIcon\n fontSize={'small'}\n />\n </Tooltip>\n );\n }, [t]);\n\n const renderHasIssueCell = useCallback(({ row }: TableRowParams<CaseDbCaseUploadResult>) => {\n const errorIssues = row.data_issues.filter(i => i.data_issue_type === CaseDbDataIssueType.INVALID || i.data_issue_type === CaseDbDataIssueType.UNAUTHORIZED);\n if (errorIssues.length > 0) {\n return (\n <Tooltip\n aria-hidden={false}\n aria-label={getIssueTooltipLabel(errorIssues)}\n arrow\n title={getIssueTooltipContent(errorIssues)}\n >\n <ErrorOutlinedIcon\n fontSize={'small'}\n sx={{\n color: theme.palette.error.main,\n marginTop: '5px',\n }}\n />\n </Tooltip>\n );\n }\n }, [getIssueTooltipContent, getIssueTooltipLabel, theme.palette.error.main]);\n\n const renderIsNewHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t('Indicates if case is new (will be created)')}\n >\n <AddIcon\n fontSize={'small'}\n />\n </Tooltip>\n );\n }, [t]);\n\n const renderIsNewCell = useCallback(({ row }: TableRowParams<CaseDbCaseUploadResult>) => {\n return row.id ? null : (\n <AddIcon\n aria-hidden={false}\n aria-label={t`This case does not have an ID and will be created`}\n fontSize={'small'}\n sx={{\n marginTop: '5px',\n position: 'absolute',\n }}\n />\n );\n }, [t]);\n\n const renderCell = useCallback(({ id, row }: TableRowParams<CaseDbCaseUploadResult>) => {\n const rowValue = CaseUtil.getRowValue(row.validated_content, completeCaseType.cols[id], completeCaseType);\n const value = rowValue.long;\n const issues = getFilteredIssueTypes(id, row.data_issues, value);\n\n if (issues.length === 0) {\n return (\n <>\n {value}\n </>\n );\n }\n\n let iconColor: string = theme.palette.info.main;\n if (errorIssueTypes.includes(issues[0].data_issue_type)) {\n iconColor = theme.palette.error.main;\n } else if (warningIssueTypes.includes(issues[0].data_issue_type)) {\n iconColor = theme.palette.warning.main;\n }\n\n const originalValue = issues.find(x => x.original_value)?.original_value || '';\n const shouldShowOriginalValue = originalValue && value && originalValue !== value;\n\n const content = (\n <>\n {shouldShowOriginalValue && (\n <>\n <s>\n {originalValue}\n </s>\n {'\\u00A0'}\n </>\n )}\n {value && (\n <>\n {value}\n </>\n )}\n </>\n );\n\n\n return (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n }}\n >\n <Box\n sx={{\n height: theme.spacing(2),\n marginRight: theme.spacing(1),\n minHeight: theme.spacing(2),\n minWidth: theme.spacing(2),\n position: 'relative',\n width: theme.spacing(2),\n }}\n >\n <Tooltip\n arrow\n title={getIssueTooltipContent(issues)}\n >\n <ErrorOutlinedIcon\n fontSize={'small'}\n sx={{\n color: iconColor,\n marginTop: '-2px',\n position: 'absolute',\n }}\n />\n </Tooltip>\n </Box>\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {content}\n </Box>\n </Box>\n );\n }, [completeCaseType, errorIssueTypes, getFilteredIssueTypes, getIssueTooltipContent, theme, warningIssueTypes]);\n\n const tableColumns = useMemo<TableColumn<CaseDbCaseUploadResult>[]>(() => {\n const tableCols: TableColumn<CaseDbCaseUploadResult>[] = [];\n if (!caseUploadResults?.length) {\n return tableCols;\n }\n tableCols.push(TableUtil.createReadableIndexColumn());\n tableCols.push(TableUtil.createSelectableColumn());\n tableCols.push({\n disableEllipsis: true,\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n headerName: '',\n hideInFilter: true,\n id: 'gen-epix-ui-issue',\n isInitiallyVisible: true,\n renderCell: renderHasIssueCell,\n renderHeader: renderHasIssueHeader,\n resizable: false,\n type: 'text',\n valueGetter: () => '',\n widthPx: 38,\n });\n tableCols.push({\n disableEllipsis: true,\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n headerName: '',\n hideInFilter: true,\n id: 'gen-epix-ui-id',\n isInitiallyVisible: true,\n renderCell: renderIsNewCell,\n renderHeader: renderIsNewHeader,\n resizable: false,\n type: 'text',\n valueGetter: () => '',\n widthPx: 38,\n });\n\n const uniqueColIds: Set<string> = new Set();\n caseUploadResults.forEach((validatedCase) => {\n Object.keys(validatedCase.validated_content || {}).forEach((colId) => uniqueColIds.add(colId));\n validatedCase.data_issues.forEach((issue) => uniqueColIds.add(issue.col_id));\n });\n\n // eslint-disable-next-line react-hooks/refs\n completeCaseType.ordered_col_ids.forEach((colId) => {\n if (!uniqueColIds.has(colId)) {\n return;\n }\n const col = completeCaseType.cols[colId];\n\n const issuesForCol = caseUploadResults.flatMap(vc => vc.data_issues.filter((i) => i.col_id === col.id));\n const isInitiallyVisible = issuesForCol.length === 0 || issuesForCol.some(i => i.data_issue_type !== CaseDbDataIssueType.DERIVED);\n\n const shouldShowCustomHeaderIcon = caseRightsColMap[col.id]?.length;\n\n if (col) {\n tableCols.push({\n cellTitleGetter: (params) => {\n const issue = params.row.data_issues.find((i) => i.col_id === col.id);\n if (!issue && getOriginalCellValue) {\n const originalValue = getOriginalCellValue(col, params, issue) ?? '';\n return t('{{value}} (original value: \"{{originalValue}}\")', {\n originalValue,\n value: CaseUtil.getRowValue(params.row.validated_content, col, completeCaseType).short,\n });\n }\n return '';\n },\n customHeaderIcon: shouldShowCustomHeaderIcon ? {\n iconElement: (<EditIcon fontSize={'inherit'} />),\n label: t('Edit values for {{colLabel}} (for selected rows)', { colLabel: col.label }),\n onClick: onTableCustomHeaderIconClick,\n } : undefined,\n headerName: col.code,\n hideInFilter: true,\n id: col.id,\n isInitiallyVisible,\n renderCell,\n type: 'text',\n valueGetter: (params) => CaseUtil.getRowValue(params.row.validated_content, col, completeCaseType).short,\n widthPx: 250,\n } satisfies TableColumn<CaseDbCaseUploadResult>);\n }\n });\n\n if (caseUploadResults.some(vc => vc.id)) {\n tableCols.push({\n headerName: t('case_id'),\n hideInFilter: true,\n id: 'case_id',\n isInitiallyVisible: true,\n type: 'text',\n valueGetter: (params) => params.row.id || '',\n widthPx: 250,\n } satisfies TableColumn<CaseDbCaseUploadResult>);\n }\n\n tableCols.push(TableUtil.createActionsColumn({\n getActions: (params: TableRowParams<CaseDbCaseUploadResult>) => {\n const actions: ReactElement[] = [];\n actions.push(\n <MenuItem\n key={'editCase'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n caseFormDialogRef.current?.open({\n caseContent: params.row.validated_content,\n caseId: params.row.id,\n completeCaseType,\n enabledColIds: completeCaseType.ordered_col_ids,\n formId: `edit-case-form`,\n });\n }}\n >\n <ListItemIcon>\n <EditIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Edit`}\n </ListItemText>\n </MenuItem>,\n );\n return actions;\n },\n t,\n }));\n return tableCols;\n }, [caseUploadResults, renderHasIssueCell, renderHasIssueHeader, renderIsNewCell, renderIsNewHeader, completeCaseType, t, caseRightsColMap, onTableCustomHeaderIconClick, renderCell, getOriginalCellValue]);\n\n useInitializeTableStore<CaseDbCaseUploadResult>({ columns: tableColumns, createFiltersFromColumns: true, rows: caseUploadResults, store: tableStore });\n\n return (\n <>\n <Box>\n <TableMenu\n ContainerProps={{\n sx: {\n display: 'inline-block',\n float: 'right',\n },\n }}\n />\n </Box>\n <Table\n font={theme['gen-epix-ui-casedb'].lineList.font}\n />\n <CaseContentFormDialog\n onSubmit={onCaseContentFormDialogSubmit}\n ref={caseFormDialogRef}\n />\n <UploadEditColumnValuesDialog\n onSubmit={onEpiUploadEditColumnValuesDialogSubmit}\n ref={uploadEditColumnValuesDialogRef}\n />\n </>\n );\n};\n","import { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { use } from 'react';\nimport { useTableStoreContext } from '@gen-epix/ui/stores/tableStore';\nimport type { CaseDbCaseUploadResult } from '@gen-epix/api-casedb';\n\nimport { UploadStoreContext } from '../../../stores/uploadStore';\n\nimport { UploadNavigation } from './UploadNavigation';\n\nexport type UploadPreviewNavigationProps = {\n readonly onGoBackButtonClick: () => void;\n readonly onProceedButtonClick: () => void;\n};\n\nexport const UploadPreviewNavigation = ({ onGoBackButtonClick, onProceedButtonClick }: UploadPreviewNavigationProps) => {\n const { t } = useTranslation();\n const tableStore = useTableStoreContext<CaseDbCaseUploadResult>();\n const uploadStore = use(UploadStoreContext);\n\n const completeCaseType = useStore(uploadStore, (state) => state.completeCaseType);\n const selectedIds = useStore(tableStore, (state) => state.selectedIds);\n\n const proceedDisabled = !selectedIds.length || selectedIds.length > completeCaseType.props.create_max_n_cases;\n\n return (\n <UploadNavigation\n onGoBackButtonClick={onGoBackButtonClick}\n onProceedButtonClick={onProceedButtonClick}\n proceedDisabled={proceedDisabled}\n proceedLabel={selectedIds.length ? t('Proceed with {{count}} selected cases', { count: selectedIds.length }) : t('Proceed')}\n />\n );\n};\n","import {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useStore } from 'zustand';\nimport {\n Alert,\n AlertTitle,\n Box,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbCase,\n CaseDbCaseDataIssue,\n CaseDbCaseUploadResult,\n CaseDbCol,\n CaseDbUploadCasesCommand,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbDataIssueType,\n CaseDbEtlStatus,\n CaseDbUploadAction,\n} from '@gen-epix/api-casedb';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui/components/ui/Confirmation';\nimport type { TableRowAndColumnParams } from '@gen-epix/ui/models/table';\nimport { BackdropSpinner } from '@gen-epix/ui/components/ui/BackdropSpinner';\nimport { Confirmation } from '@gen-epix/ui/components/ui/Confirmation';\nimport {\n createTableStore,\n TableStoreContextProvider,\n} from '@gen-epix/ui/stores/tableStore';\nimport { QueryClientService } from '@gen-epix/ui/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useQueryMemo } from '@gen-epix/ui/hooks/useQueryMemo';\nimport { ObjectUtil } from '@gen-epix/ui-core/utils/ObjectUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { withEpiCompleteCaseTypeLoader } from '../CompletCaseTypeLoader/withEpiCompleteCaseTypeLoader';\nimport { CaseUtil } from '../../../utils/CaseUtil';\n\nimport { UploadCaseResultTable } from './UploadCaseResultTable';\nimport { UploadPreviewNavigation } from './UploadPreviewNavigation';\n\nexport type UploadPreviewProps = {\n readonly caseTypeId: string;\n};\n\nexport const UploadPreview = withEpiCompleteCaseTypeLoader<UploadPreviewProps>(({ caseTypeId }) => {\n const { t } = useTranslation();\n\n const store = use(UploadStoreContext);\n const goToNextStep = useStore(store, (state) => state.goToNextStep);\n const goToPreviousStep = useStore(store, (state) => state.goToPreviousStep);\n const completeCaseType = useStore(store, (state) => state.completeCaseType);\n const casesForVerificationFromSourceData = useStore(store, (state) => state.casesForVerificationFromSourceData);\n const createdInDataCollectionId = useStore(store, (state) => state.createdInDataCollectionId);\n const validateCasesQueryKey = useStore(store, (state) => state.validateCasesQueryKey);\n const caseRightsColMap = useStore(store, (state) => state.caseRightsColMap);\n const [exceedsMaxNumCases, setExceedsMaxNumCases] = useState(false);\n const [isRevalidatingCases, setIsRevalidatingCases] = useState(false);\n const [revalidationError, setRevalidationError] = useState<Error | null>(null);\n const selectedIdsRef = useRef<string[]>([]);\n const continueWithoutFixingConfirmationRef = useRef<ConfirmationRefMethods>(null);\n const continueWithoutSelectingAllCasesRef = useRef<ConfirmationRefMethods>(null);\n\n const getOriginalCellValue = useCallback((col: CaseDbCol, params: TableRowAndColumnParams<CaseDbCaseUploadResult, null>, _issue: CaseDbCaseDataIssue): string => {\n return casesForVerificationFromSourceData[params.rowIndex]?.case?.content[col.id] ?? '';\n }, [casesForVerificationFromSourceData]);\n\n const caseUploadValidationResultQuery = useQueryMemo({\n enabled: casesForVerificationFromSourceData.length > 0,\n gcTime: Infinity,\n queryFn: async ({ signal }) => {\n const response = (await CaseDbCaseApi.getInstance().uploadCases(ObjectUtil.deepNullifyEmptyStrings<CaseDbUploadCasesCommand>({\n case_batch: {\n cases: casesForVerificationFromSourceData,\n },\n case_type_id: caseTypeId,\n default_created_in_data_collection_id: createdInDataCollectionId ?? undefined,\n on_exists: CaseDbUploadAction.UPDATE,\n verify_only: true,\n }), { signal })).data;\n return response;\n },\n queryKey: validateCasesQueryKey,\n select: (data) => data.cases.map((caseUploadResult, index) => ({\n ...caseUploadResult,\n id: casesForVerificationFromSourceData[index].id,\n })),\n staleTime: Infinity,\n });\n\n\n const loadables = useArray([\n caseUploadValidationResultQuery,\n ]);\n\n const tableStore = useMemo(() => createTableStore<CaseDbCaseUploadResult>({\n idSelectorCallback: (row) => row.id,\n }), []);\n const setSelectedIds = useStore(tableStore, useShallow((state) => state.setSelectedIds));\n\n const revalidateCases = useCallback(async (casesToValidate: Array<{ content: CaseDbCase['content']; row: CaseDbCaseUploadResult }>) => {\n setIsRevalidatingCases(true);\n try {\n const batchValidationResult = (await CaseDbCaseApi.getInstance().uploadCases(ObjectUtil.deepNullifyEmptyStrings<CaseDbUploadCasesCommand>({\n case_batch: {\n cases: casesToValidate.map(({ content, row }, index) => {\n const caseFromSourceData = casesForVerificationFromSourceData.find(c => c.id === row.id);\n return {\n case: {\n case_type_id: completeCaseType.id,\n content: Object.fromEntries(\n Object.entries(content).map(([colId]) => {\n const col = completeCaseType.cols[colId];\n if (!col) {\n return [colId, content[colId]];\n }\n const rowValue = CaseUtil.getRowValue(content, col, completeCaseType);\n return [colId, rowValue.isMissing ? '' : rowValue.long];\n }),\n ),\n created_in_data_collection_id: caseFromSourceData?.case?.created_in_data_collection_id ?? createdInDataCollectionId,\n id: row.id ?? casesForVerificationFromSourceData[index].id,\n },\n };\n }),\n },\n case_type_id: caseTypeId,\n default_created_in_data_collection_id: createdInDataCollectionId ?? undefined,\n on_exists: CaseDbUploadAction.UPDATE,\n verify_only: true,\n }))).data;\n\n const resultById = new Map(\n casesToValidate.map(({ row }, index) => [row.id, batchValidationResult.cases[index]]),\n );\n\n QueryClientService.getInstance().queryClient.setQueryData(validateCasesQueryKey, {\n cases: caseUploadValidationResultQuery.data.map(row => {\n const newResult = resultById.get(row.id);\n if (newResult) {\n return { ...newResult, id: row.id };\n }\n return row;\n }),\n });\n\n const newlyFailedIds: string[] = [];\n casesToValidate.forEach(({ row }, index) => {\n const newResult = batchValidationResult.cases[index];\n if (newResult.status !== CaseDbEtlStatus.SKIPPED && newResult.status !== CaseDbEtlStatus.SUCCESS && newResult.status !== CaseDbEtlStatus.UPDATED) {\n if (!selectedIdsRef.current.includes(row.id)) {\n selectedIdsRef.current.push(row.id);\n newlyFailedIds.push(row.id);\n }\n }\n });\n\n if (newlyFailedIds.length > 0) {\n const currentSelectedIds = tableStore.getState().selectedIds;\n const idsToAdd = newlyFailedIds.filter(id => !currentSelectedIds.includes(id));\n if (idsToAdd.length > 0) {\n setSelectedIds([...currentSelectedIds, ...idsToAdd]);\n }\n }\n } catch (error) {\n setRevalidationError(error as Error);\n } finally {\n setIsRevalidatingCases(false);\n }\n\n }, [caseTypeId, caseUploadValidationResultQuery.data, casesForVerificationFromSourceData, completeCaseType, createdInDataCollectionId, setSelectedIds, tableStore, validateCasesQueryKey]);\n\n const onColContentEditSubmit = useCallback(async (contentPerCaseId: { [caseId: string]: CaseDbCase['content'] }) => {\n const selectedIds = tableStore.getState().selectedIds;\n await revalidateCases(\n caseUploadValidationResultQuery.data\n .filter(row => selectedIds.includes(row.id))\n .map(row => ({\n content: { ...row.validated_content, ...contentPerCaseId[row.id] },\n row,\n })),\n );\n }, [caseUploadValidationResultQuery.data, revalidateCases, tableStore]);\n\n const onCaseContentEditSubmit = useCallback(async (caseId: string, content: CaseDbCase['content']) => {\n const originalCaseUploadResult = caseUploadValidationResultQuery.data.find(r => r.id === caseId);\n await revalidateCases([{ content, row: originalCaseUploadResult }]);\n }, [caseUploadValidationResultQuery.data, revalidateCases]);\n\n useEffect(() => {\n const unsubscribe = tableStore.subscribe((state, prevState) => {\n if (state.selectedIds === prevState.selectedIds) {\n return;\n }\n selectedIdsRef.current = state.selectedIds;\n const newExceedsMaxNumCases = state.selectedIds.length > completeCaseType.props.create_max_n_cases;\n setExceedsMaxNumCases(newExceedsMaxNumCases);\n });\n\n return () => {\n unsubscribe();\n };\n }, [completeCaseType.props.create_max_n_cases, tableStore]);\n\n useEffect(() => {\n const newSelectedIds = (caseUploadValidationResultQuery.data ?? []).filter(validatedCase => {\n return !validatedCase.data_issues.some(issue => issue.data_issue_type === CaseDbDataIssueType.INVALID || issue.data_issue_type === CaseDbDataIssueType.UNAUTHORIZED);\n }).map(vc => vc.id);\n setSelectedIds(newSelectedIds);\n }, [caseUploadValidationResultQuery.data, setSelectedIds]);\n\n\n const onProceedWithoutFixingIssues = useCallback(async () => {\n const selectedIds = tableStore.getState().selectedIds;\n const validCases = caseUploadValidationResultQuery.data.filter(row => selectedIds.includes(row.id) && !row.data_issues.some(issue => issue.data_issue_type === CaseDbDataIssueType.INVALID));\n store.setState((state) => ({\n ...state,\n selectedIdsForUpload: validCases.map(c => c.id),\n validatedCases: caseUploadValidationResultQuery.data,\n }));\n await goToNextStep();\n }, [caseUploadValidationResultQuery.data, goToNextStep, store, tableStore]);\n\n const onProceed = useCallback(async () => {\n store.setState((state) => ({\n ...state,\n selectedIdsForUpload: selectedIdsRef.current,\n validatedCases: caseUploadValidationResultQuery.data,\n }));\n\n await goToNextStep();\n }, [goToNextStep, caseUploadValidationResultQuery.data, store]);\n\n const onProceedButtonClick = useCallback(async () => {\n if (caseUploadValidationResultQuery.data.some(row => tableStore.getState().selectedIds.includes(row.id) && (row.data_issues.some(issue => issue.data_issue_type === CaseDbDataIssueType.INVALID) || row.status === CaseDbEtlStatus.FAILED))) {\n continueWithoutFixingConfirmationRef.current?.open();\n return;\n }\n\n if (caseUploadValidationResultQuery.data.some(row => !tableStore.getState().selectedIds.includes(row.id) && !row.data_issues.some(issue => issue.data_issue_type === CaseDbDataIssueType.INVALID))) {\n continueWithoutSelectingAllCasesRef.current?.open();\n return;\n }\n\n await onProceed();\n }, [caseUploadValidationResultQuery.data, onProceed, tableStore]);\n\n const onGoBackButtonClick = useCallback(() => {\n goToPreviousStep();\n }, [goToPreviousStep]);\n\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateRows: `${exceedsMaxNumCases ? 'max-content' : ''} max-content auto max-content`,\n height: '100%',\n position: 'relative',\n width: '100%',\n }}\n >\n <TableStoreContextProvider store={tableStore}>\n <ResponseHandler\n error={revalidationError}\n inlineSpinner\n loadables={loadables}\n loadingMessage={t('Validating cases')}\n takingLongerTimeoutMs={10000}\n >\n {exceedsMaxNumCases && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'error'}>\n <AlertTitle>\n {t('You have exceeded the maximum number of {{maxCases}} cases for this case type. Please reduce the number of selected cases before proceeding.', {\n maxCases: completeCaseType.props.create_max_n_cases,\n })}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n <UploadCaseResultTable\n caseRightsColMap={caseRightsColMap}\n caseUploadResults={caseUploadValidationResultQuery.data || []}\n completeCaseType={completeCaseType}\n getOriginalCellValue={getOriginalCellValue}\n onCaseContentEditSubmit={onCaseContentEditSubmit}\n onColContentEditSubmit={onColContentEditSubmit}\n tableStore={tableStore}\n />\n <UploadPreviewNavigation\n onGoBackButtonClick={onGoBackButtonClick}\n onProceedButtonClick={onProceedButtonClick}\n />\n </ResponseHandler>\n </TableStoreContextProvider>\n <BackdropSpinner\n label={t('Revalidating cases')}\n open={isRevalidatingCases}\n />\n <Confirmation\n body={t`Some of the selected cases contain issues. If you proceed, these cases will be excluded. Are you sure you want to proceed without them?`}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Proceed`}\n onConfirm={onProceedWithoutFixingIssues}\n ref={continueWithoutFixingConfirmationRef}\n title={t`Issues found with selected cases`}\n />\n <Confirmation\n body={t`Not all cases are selected. Do you want to proceed without them?`}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Proceed`}\n onConfirm={onProceed}\n ref={continueWithoutSelectingAllCasesRef}\n title={t`Not all cases are selected.`}\n />\n </Box>\n );\n});\n","import { useTranslation } from 'react-i18next';\nimport type { ReactNode } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n Container,\n} from '@mui/material';\nimport { useStore } from 'zustand';\nimport { GenericErrorMessage } from '@gen-epix/ui/components/ui/GenericErrorMessage';\nimport { InactivityService } from '@gen-epix/ui/classes/services/InactivityService';\nimport { LinearProgressWithLabel } from '@gen-epix/ui/components/ui/LinearProgressWithLabel';\nimport { RouterService } from '@gen-epix/ui/classes/services/RouterService';\n\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { UploadError } from '../../../classes/errors';\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { UploadUtil } from '../../../utils/UploadUtil';\n\nimport { UploadNavigation } from './UploadNavigation';\n\n\nexport const UploadCreateCases = () => {\n const { t } = useTranslation();\n\n const store = use(UploadStoreContext);\n const reset = useStore(store, (state) => state.reset);\n const goToPreviousStep = useStore(store, (state) => state.goToPreviousStep);\n const sequenceMapping = useStore(store, (state) => state.sequenceMapping);\n const sequenceFilesDataTransfer = useStore(store, (state) => state.sequenceFilesDataTransfer);\n const validatedCases = useStore(store, (state) => state.validatedCases);\n const selectedIdsForUpload = useStore(store, (state) => state.selectedIdsForUpload);\n const casesForVerificationFromSourceData = useStore(store, (state) => state.casesForVerificationFromSourceData);\n const uploadCompleteButtonCallback = useStore(store, (state) => state.uploadCompleteButtonCallback);\n const uploadCompleteButtonLabel = useStore(store, (state) => state.uploadCompleteButtonLabel);\n const onUploadComplete = useStore(store, (state) => state.onUploadComplete);\n\n const completeCaseType = useStore(store, (state) => state.completeCaseType);\n const [progress, setProgress] = useState(0);\n const [progressMessage, setProgressMessage] = useState('');\n\n const [isUploadStarted, setIsUploadStarted] = useState(false);\n const [isUploadCompleted, setIsUploadCompleted] = useState(false);\n const [error, setError] = useState<unknown>(undefined);\n\n const sequenceFileStats = useMemo(() => {\n return UploadUtil.getSequenceMappingStats(sequenceMapping, sequenceFilesDataTransfer);\n }, [sequenceFilesDataTransfer, sequenceMapping]);\n\n const selectedValidatedCases = useMemo(() => {\n return validatedCases.filter(vc => selectedIdsForUpload.includes(vc.id));\n }, [validatedCases, selectedIdsForUpload]);\n\n useEffect(() => {\n const abortController = new AbortController();\n const { signal } = abortController;\n\n const abort = () => {\n abortController.abort();\n InactivityService.getInstance().resume();\n };\n\n if (!isUploadStarted) {\n return abort;\n }\n InactivityService.getInstance().pause();\n\n const perform = async () => {\n const result = await UploadUtil.createCasesAndUploadFiles({\n assemblyProtocolId: store.getState().assemblyProtocolId,\n casesForVerificationFromSourceData,\n completeCaseType: store.getState().completeCaseType,\n createdInDataCollectionId: store.getState().createdInDataCollectionId,\n mappedColumns: store.getState().mappedColumns,\n onComplete: () => {\n setIsUploadCompleted(true);\n },\n onError: (e: Error) => {\n setError(e);\n },\n onProgress: (percentage: number, message: string) => {\n setProgress(percentage);\n setProgressMessage(message);\n },\n sampleIdColId: store.getState().sampleIdColId,\n selectedValidatedCases,\n sequenceFilesDataTransfer,\n sequenceMapping,\n sequencingProtocolId: store.getState().sequencingProtocolId,\n signal,\n });\n if (onUploadComplete) {\n await onUploadComplete(result);\n }\n };\n\n perform().catch((e) => {\n if (!signal.aborted) {\n setError(e);\n }\n });\n\n\n return abort;\n }, [isUploadStarted, sequenceFilesDataTransfer, sequenceMapping, store, t, selectedValidatedCases, casesForVerificationFromSourceData, onUploadComplete]);\n\n\n const onStartOverButtonClick = useCallback(async () => {\n await reset();\n }, [reset]);\n\n const onStartUploadButtonClick = useCallback(() => {\n setIsUploadStarted(true);\n }, []);\n\n const onGoBackButtonClick = useCallback(() => {\n goToPreviousStep();\n }, [goToPreviousStep]);\n\n const onGotoCasesButtonClick = useCallback(async () => {\n const link = CaseTypeUtil.createCaseTypeLink(completeCaseType);\n await RouterService.getInstance().router.navigate(link);\n }, [completeCaseType]);\n\n let content: ReactNode;\n\n if (error) {\n content = (\n <Box>\n {error instanceof UploadError && (\n <Alert severity={'error'}>\n <AlertTitle>\n {t('Failed to create cases during upload.')}\n </AlertTitle>\n {t('An error occurred while creating cases. Please try again or contact support if the issue persists. Cases may have been partially created. No files were uploaded.')}\n </Alert>\n )}\n <GenericErrorMessage error={error} />\n </Box>\n );\n } else if (isUploadCompleted) {\n content = (\n <Box>\n <Box>\n <Alert severity={'success'}>\n <AlertTitle>\n {t('Upload completed.')}\n </AlertTitle>\n </Alert>\n </Box>\n <Box\n sx={{\n display: 'flex',\n gap: 2,\n justifyContent: 'flex-end',\n marginBottom: 1,\n marginTop: 2,\n }}\n >\n {uploadCompleteButtonCallback && uploadCompleteButtonLabel ? (\n <Button\n // eslint-disable-next-line @eslint-react/kit/jsx-handler-names\n onClick={uploadCompleteButtonCallback}\n variant={'contained'}\n >\n {uploadCompleteButtonLabel}\n </Button>\n ) : (\n <>\n <Button\n onClick={onStartOverButtonClick}\n variant={'outlined'}\n >\n {t('Upload more cases')}\n </Button>\n <Button\n onClick={onGotoCasesButtonClick}\n variant={'contained'}\n >\n {t('View uploaded cases')}\n </Button>\n </>\n )}\n </Box>\n </Box>\n );\n } else if (isUploadStarted) {\n content = (\n <Box>\n <Box\n sx={{\n marginBottom: 4,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('Uploading cases and files.')}\n </AlertTitle>\n {t('Please wait while the cases and associated files are being uploaded. This may take a while depending on the number and size of the files being uploaded.')}\n </Alert>\n </Box>\n <Box\n sx={{\n marginBottom: 2,\n marginTop: 4,\n }}\n >\n <LinearProgressWithLabel value={progress} />\n </Box>\n <Box\n sx={{\n fontWeight: 700,\n }}\n >\n {progressMessage}\n </Box>\n </Box>\n );\n } else {\n content = (\n <Box>\n <Box>\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('{{numCases}} cases are ready to be uploaded.', { numCases: selectedValidatedCases.length })}\n </AlertTitle>\n </Alert>\n </Box>\n {sequenceFileStats.mappedSequenceFiles.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('{{numSequenceFiles}} genome files are ready to be uploaded.', { numSequenceFiles: sequenceFileStats.mappedSequenceFiles.length })}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {sequenceFileStats.mappedReadsFiles.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('{{numReadsFiles}} reads files are ready to be uploaded.', { numReadsFiles: sequenceFileStats.mappedReadsFiles.length })}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {validatedCases.length - selectedValidatedCases.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'warning'}>\n <AlertTitle>\n {t('{{numCases}} cases were not selected and will not be uploaded.', { numCases: validatedCases.length - selectedValidatedCases.length })}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {sequenceFileStats.unmappedSequenceFiles.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'warning'}>\n <AlertTitle>\n {t('{{unmappedSequenceFiles}} unmapped genome files will not be uploaded.', { unmappedSequenceFiles: sequenceFileStats.unmappedSequenceFiles.length })}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n {sequenceFileStats.unmappedReadsFiles.length > 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Alert severity={'warning'}>\n <AlertTitle>\n {t('{{unmappedReadsFiles}} unmapped reads files will not be uploaded.', { unmappedReadsFiles: sequenceFileStats.unmappedReadsFiles.length })}\n </AlertTitle>\n </Alert>\n </Box>\n )}\n </Box>\n <UploadNavigation\n onGoBackButtonClick={onGoBackButtonClick}\n onProceedButtonClick={onStartUploadButtonClick}\n proceedLabel={'Start upload'}\n />\n </Box>\n );\n }\n\n return (\n <Container\n maxWidth={'xl'}\n sx={{\n height: '100%',\n }}\n >\n {content}\n </Container>\n );\n};\n","import {\n Alert,\n AlertTitle,\n Box,\n useTheme,\n} from '@mui/material';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport {\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 { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { GenericForm } from '@gen-epix/ui-form/components/helpers/GenericForm';\nimport type {\n FormFieldDefinition,\n SelectOption,\n} from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\n\nimport { FileSelector } from '../FileSelector';\nimport { UploadUtil } from '../../../utils/UploadUtil';\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { useSequencingProtocolOptionsQuery } from '../../../dataHooks/useSequencingProtocolsQuery';\nimport { useAssemblyProtocolOptionsQuery } from '../../../dataHooks/useAssemblyProtocolsQuery';\n\nimport { UploadNavigation } from './UploadNavigation';\n\n\ntype FormFields = {\n assemblyProtocolId: string;\n sampleIdColId: string;\n sequencingProtocolId: string;\n};\n\nconst getSelectedFiles = (dataTransfer?: DataTransfer) => {\n return Array.from(dataTransfer?.files ?? []);\n};\n\nconst createSchema = ({\n hasGenomeFiles,\n hasReadsFiles,\n hasSelectedFiles,\n}: {\n hasGenomeFiles: boolean;\n hasReadsFiles: boolean;\n hasSelectedFiles: boolean;\n}) => {\n return object<FormFields>().shape({\n assemblyProtocolId: hasGenomeFiles ? string().uuid4().required() : string().nullable().notRequired(),\n sampleIdColId: hasSelectedFiles ? string().uuid4().required() : string().nullable().notRequired(),\n sequencingProtocolId: hasReadsFiles ? string().uuid4().required() : string().nullable().notRequired(),\n });\n};\n\nexport const UploadSelectSequenceFiles = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const store = use(UploadStoreContext);\n const completeCaseType = useStore(store, (state) => state.completeCaseType);\n const mappedColumns = useStore(store, (state) => state.mappedColumns);\n const validatedCases = useStore(store, (state) => state.validatedCases);\n const goToNextStep = useStore(store, (state) => state.goToNextStep);\n const goToPreviousStep = useStore(store, (state) => state.goToPreviousStep);\n const setSequenceFilesDataTransfer = useStore(store, (state) => state.setSequenceFilesDataTransfer);\n const sampleIdColId = useStore(store, (state) => state.sampleIdColId);\n const initialDataTransfer = useStore(store, (state) => state.sequenceFilesDataTransfer);\n const [currentDataTransfer, setCurrentDataTransfer] = useState(initialDataTransfer);\n\n const formId = useId();\n\n const sequencingProtocolOptionsQuery = useSequencingProtocolOptionsQuery();\n const assemblyProtocolOptionsQuery = useAssemblyProtocolOptionsQuery();\n\n const loadables = useArray([\n sequencingProtocolOptionsQuery,\n assemblyProtocolOptionsQuery,\n ]);\n\n const sampleIdColIdOptions = useMemo<SelectOption<string>[]>(() => {\n return mappedColumns.filter(mc => mc.isSampleIdColumn).map(mc => ({\n label: mc.col.label,\n value: mc.col.id,\n } satisfies SelectOption<string>));\n }, [mappedColumns]);\n\n const selectedFiles = useMemo(() => {\n return getSelectedFiles(currentDataTransfer);\n }, [currentDataTransfer]);\n\n const hasSelectedFiles = selectedFiles.length > 0;\n const hasGenomeFiles = useMemo(() => {\n return selectedFiles.some(file => UploadUtil.isGenomeFile(file.name));\n }, [selectedFiles]);\n const hasReadsFiles = useMemo(() => {\n return selectedFiles.some(file => UploadUtil.isReadsFile(file.name));\n }, [selectedFiles]);\n\n const schema = useMemo(() => {\n return createSchema({\n hasGenomeFiles,\n hasReadsFiles,\n hasSelectedFiles,\n });\n }, [hasGenomeFiles, hasReadsFiles, hasSelectedFiles]);\n\n const defaultFormValues = useMemo<FormFields>(() => {\n return {\n assemblyProtocolId: store.getState().assemblyProtocolId ?? null,\n sampleIdColId: store.getState().sampleIdColId ?? null,\n sequencingProtocolId: store.getState().sequencingProtocolId ?? null,\n };\n }, [store]);\n\n const formMethods = useForm<FormFields>({\n defaultValues: defaultFormValues,\n resolver: yupResolver(schema) as unknown as Resolver<FormFields>,\n values: defaultFormValues,\n });\n const { handleSubmit, setValue } = formMethods;\n\n useEffect(() => {\n if (sequencingProtocolOptionsQuery.isLoading || assemblyProtocolOptionsQuery.isLoading) {\n return;\n }\n if (!store.getState().sequencingProtocolId) {\n setValue('sequencingProtocolId', sequencingProtocolOptionsQuery.options[0]?.value || null);\n store.setState({ sequencingProtocolId: sequencingProtocolOptionsQuery.options[0]?.value || null });\n }\n if (!store.getState().assemblyProtocolId) {\n setValue('assemblyProtocolId', assemblyProtocolOptionsQuery.options[0]?.value || null);\n store.setState({ assemblyProtocolId: assemblyProtocolOptionsQuery.options[0]?.value || null });\n }\n if (!store.getState().sampleIdColId) {\n setValue('sampleIdColId', sampleIdColIdOptions[0]?.value || null);\n store.setState({ sampleIdColId: sampleIdColIdOptions[0]?.value || null });\n }\n }, [assemblyProtocolOptionsQuery.isLoading, assemblyProtocolOptionsQuery.options, sequencingProtocolOptionsQuery.isLoading, sequencingProtocolOptionsQuery.options, setValue, store, sampleIdColIdOptions]);\n\n const onSequencingProtocolChange = useCallback((value: string) => {\n store.setState({ sequencingProtocolId: value });\n }, [store]);\n\n const onAssemblyProtocolChange = useCallback((value: string) => {\n store.setState({ assemblyProtocolId: value });\n }, [store]);\n\n const onSampleIdColIdChange = useCallback((value: string) => {\n store.setState({ sampleIdColId: value });\n }, [store]);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Genome files: assembly protocol`,\n loading: assemblyProtocolOptionsQuery.isLoading,\n name: 'assemblyProtocolId',\n onChange: onAssemblyProtocolChange,\n options: assemblyProtocolOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Reads files: sequencing protocol`,\n loading: sequencingProtocolOptionsQuery.isLoading,\n name: 'sequencingProtocolId',\n onChange: onSequencingProtocolChange,\n options: sequencingProtocolOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.SELECT,\n label: t`Sample ID column`,\n name: 'sampleIdColId',\n onChange: onSampleIdColIdChange,\n options: sampleIdColIdOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n ];\n }, [assemblyProtocolOptionsQuery.isLoading, assemblyProtocolOptionsQuery.options, onAssemblyProtocolChange, onSampleIdColIdChange, onSequencingProtocolChange, sampleIdColIdOptions, sequencingProtocolOptionsQuery.isLoading, sequencingProtocolOptionsQuery.options, t]);\n\n\n const hasWritableSampleIdColumn = useMemo(() => {\n return mappedColumns.some(mappedColumn => {\n return mappedColumn.isSampleIdColumn && mappedColumn.sampleIdentifierIssuerId;\n });\n }, [mappedColumns]);\n\n const hasRowContentForSampleIdColId = useMemo(() => {\n if (!sampleIdColId) {\n return false;\n }\n return validatedCases.some(vc => {\n return vc.validated_content[sampleIdColId]?.trim().length > 0;\n });\n }, [sampleIdColId, validatedCases]);\n\n const completeCaseTypeColStats = useMemo(() => {\n return UploadUtil.getCompleteCaseTypeColStats(completeCaseType);\n }, [completeCaseType]);\n\n const canUploadSequences = useMemo(() => {\n return completeCaseTypeColStats.sequenceColumns.length > 0;\n }, [completeCaseTypeColStats]);\n\n const canUploadReads = useMemo(() => {\n return completeCaseTypeColStats.readsColumns.length > 0;\n }, [completeCaseTypeColStats]);\n\n const canUpload = useMemo(() => {\n return hasWritableSampleIdColumn && hasRowContentForSampleIdColId && (canUploadSequences || canUploadReads);\n }, [hasWritableSampleIdColumn, hasRowContentForSampleIdColId, canUploadSequences, canUploadReads]);\n\n const accept = useMemo(() => {\n let acc = '';\n if (canUploadSequences) {\n acc += '.fa,.fasta,.fa.gz,.fasta.gz,';\n }\n if (canUploadReads) {\n acc += '.fq,.fastq,.fq.gz,.fastq.gz,';\n }\n return acc;\n }, [canUploadReads, canUploadSequences]);\n\n const onProceedButtonClick = useCallback(async () => {\n setSequenceFilesDataTransfer(canUpload ? currentDataTransfer : new DataTransfer());\n await handleSubmit(async () => {\n await goToNextStep();\n })();\n }, [canUpload, currentDataTransfer, goToNextStep, handleSubmit, setSequenceFilesDataTransfer]);\n\n const onGoBackButtonClick = useCallback(() => {\n goToPreviousStep();\n }, [goToPreviousStep]);\n\n const onDataTransferChange = useCallback((dt: DataTransfer) => {\n setCurrentDataTransfer(dt);\n setSequenceFilesDataTransfer(dt);\n }, [setSequenceFilesDataTransfer]);\n\n const wrapForm = useCallback((children: ReactElement) => {\n return (\n <Box\n sx={{\n display: 'grid',\n gap: theme.spacing(1),\n gridTemplateColumns: '1fr 1fr 1fr',\n }}\n >\n {children}\n </Box>\n );\n }, [theme]);\n\n const cantUploadMessage = useMemo<{ message: string; title: string }>(() => {\n if (!hasWritableSampleIdColumn) {\n return {\n message: t`No columns have been mapped as writable sample ID column with selected identifier issuer provider.`,\n title: t('Uploading of files is disabled.'),\n };\n }\n if (!hasRowContentForSampleIdColId) {\n return {\n message: t`No rows have a sample ID filled for the selected sample ID column.`,\n title: t('Uploading of files is disabled.'),\n };\n }\n if (!canUploadReads) {\n return {\n message: t`The selected case type does not support uploading read files.`,\n title: t('Uploading of read files is disabled.'),\n };\n }\n if (!canUploadSequences) {\n return {\n message: t`The selected case type does not support uploading sequence files.`,\n title: t('Uploading of sequence files is disabled.'),\n };\n }\n return null;\n }, [canUploadReads, canUploadSequences, hasRowContentForSampleIdColId, hasWritableSampleIdColumn, t]);\n\n const onSubmit = useCallback(() => {\n // noop, as we handle form submission manually in onProceedButtonClick\n }, []);\n\n return (\n <ResponseHandler\n loadables={loadables}\n >\n <Box\n sx={{\n display: 'grid',\n gridTemplateRows: `${canUpload ? '' : 'max-content '}max-content auto max-content`,\n height: '100%',\n position: 'relative',\n }}\n >\n {!canUpload && (\n <Box\n sx={{\n marginBottom: 2,\n }}\n >\n <Alert severity={'error'}>\n <AlertTitle>\n {cantUploadMessage.title}\n </AlertTitle>\n {cantUploadMessage.message}\n </Alert>\n </Box>\n )}\n <Box\n sx={{\n borderBottom: `1px solid ${theme.palette.divider}`,\n }}\n >\n <Box\n sx={{\n maxWidth: theme.spacing(128),\n }}\n >\n <GenericForm<FormFields>\n formFieldDefinitions={formFieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={onSubmit}\n schema={schema}\n wrapForm={wrapForm}\n />\n </Box>\n {!canUploadSequences && (\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('Uploading of sequences has been disabled.')}\n </AlertTitle>\n <Box>\n {t('Uploading of sequences is not supported for the selected case type.')}\n </Box>\n </Alert>\n </Box>\n )}\n {!canUploadReads && (\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <Alert severity={'info'}>\n <AlertTitle>\n {t('Uploading of read files has been disabled.')}\n </AlertTitle>\n <Box>\n {t('Uploading of read files is not supported for the selected case type.')}\n </Box>\n </Alert>\n </Box>\n )}\n </Box>\n <Box\n sx={{\n position: 'relative',\n }}\n >\n\n <Box\n sx={{\n bottom: 0,\n height: '100%',\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n }}\n >\n {canUpload && (\n <FileSelector\n accept={accept}\n initialDataTransfer={initialDataTransfer}\n numFilesAllowed={Infinity}\n onDataTransferChange={onDataTransferChange}\n />\n )}\n </Box>\n </Box>\n <UploadNavigation\n onGoBackButtonClick={onGoBackButtonClick}\n onProceedButtonClick={onProceedButtonClick}\n proceedLabel={!canUpload ? t`Proceed` : undefined}\n />\n </Box>\n </ResponseHandler>\n );\n};\n","import {\n Alert,\n AlertTitle,\n Autocomplete,\n Box,\n TextField,\n useTheme,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/react/shallow';\nimport type {\n CaseDbCaseUploadResult,\n CaseDbCol,\n} from '@gen-epix/api-casedb';\nimport type {\n TableColumn,\n TableRowParams,\n} from '@gen-epix/ui/models/table';\nimport {\n createTableStore,\n TableStoreContextProvider,\n} from '@gen-epix/ui/stores/tableStore';\nimport { Table } from '@gen-epix/ui/components/ui/Table';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { useInitializeTableStore } from '@gen-epix/ui/hooks/useInitializeTableStore';\n\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { UploadUtil } from '../../../utils/UploadUtil';\n\nimport { UploadNavigation } from './UploadNavigation';\n\nexport const UploadMapSequences = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const store = use(UploadStoreContext);\n const goToNextStep = useStore(store, (state) => state.goToNextStep);\n const goToPreviousStep = useStore(store, (state) => state.goToPreviousStep);\n const completeCaseType = useStore(store, (state) => state.completeCaseType);\n const sampleIdColId = useStore(store, (state) => state.sampleIdColId);\n const sequenceFilesDataTransfer = useStore(store, (state) => state.sequenceFilesDataTransfer);\n const selectedValidatedCases = useStore(store, useShallow((state) => {\n const selectedIdsForUpload = state.selectedIdsForUpload;\n return state.validatedCases.filter(vc => selectedIdsForUpload.includes(vc.id));\n }));\n const setSequenceMapping = useStore(store, (state) => state.setSequenceMapping);\n\n const completeCaseTypeColStats = useMemo(() => {\n return UploadUtil.getCompleteCaseTypeColStats(completeCaseType);\n }, [completeCaseType]);\n\n const alertTitleId = useId();\n const alertContentId = useId();\n\n const uploadSequenceMappingRef = useRef(store.getState().sequenceMapping);\n\n const onProceedButtonClick = useCallback(async () => {\n setSequenceMapping(uploadSequenceMappingRef.current);\n await goToNextStep();\n }, [setSequenceMapping, goToNextStep]);\n\n const onGoBackButtonClick = useCallback(() => {\n goToPreviousStep();\n }, [goToPreviousStep]);\n\n const updateAlert = useCallback(() => {\n // Note: This is done via DOM manipulation to prevent excessive re-renders of the entire table\n\n const alertTitleElement = document.getElementById(alertTitleId);\n const alertContentElement = document.getElementById(alertContentId);\n if (!alertTitleElement || !alertContentElement) {\n return;\n }\n const {\n mappedFiles,\n numberOfFilesToMap,\n unmappedFileNames,\n } = UploadUtil.getSequenceMappingStats(uploadSequenceMappingRef.current, sequenceFilesDataTransfer);\n\n alertTitleElement.innerHTML = numberOfFilesToMap === mappedFiles.length ? t('All {{numberOfFilesToMap}} files are mapped', { numberOfFilesToMap }) : t('{{mappedFilesLength}} of {{numberOfFilesToMap}} files mapped', { mappedFilesLength: mappedFiles.length, numberOfFilesToMap });\n alertContentElement.innerHTML = numberOfFilesToMap === mappedFiles.length ? '' : t('Unmapped files: {{unmappedFileNames}}', { unmappedFileNames: unmappedFileNames.join(', ') });\n }, [alertContentId, alertTitleId, sequenceFilesDataTransfer, t]);\n\n useEffect(() => {\n updateAlert();\n }, [updateAlert]);\n\n const tableStore = useMemo(() => createTableStore<CaseDbCaseUploadResult>({\n idSelectorCallback: (row) => row.id,\n }), []);\n\n const caseHasColumnContent = useCallback((rows: CaseDbCaseUploadResult[], col: CaseDbCol): boolean => {\n return rows.some((row) => {\n const value = CaseUtil.getRowValue(row.validated_content, col, completeCaseType);\n return value && !value?.isMissing;\n });\n }, [completeCaseType]);\n\n const sequenceDropDownOptions = useMemo(() => {\n return Array.from(sequenceFilesDataTransfer.files).map((file) => file.name).filter(name => name.endsWith('.fasta') || name.endsWith('.fa') || name.endsWith('.fa.gz') || name.endsWith('.fasta.gz'));\n }, [sequenceFilesDataTransfer.files]);\n\n const readsDropDownOptions = useMemo(() => {\n return Array.from(sequenceFilesDataTransfer.files).map((file) => file.name).filter(name => name.endsWith('.fastq') || name.endsWith('.fq') || name.endsWith('.fq.gz') || name.endsWith('.fastaq.gz'));\n }, [sequenceFilesDataTransfer.files]);\n\n const createDropDown = useCallback((kwArgs: { dropDownOptions: string[]; dropDownValue: string; label: string; onChange: (newValue: string) => void }) => {\n const { dropDownOptions, dropDownValue, label, onChange } = kwArgs;\n\n return (\n <Autocomplete\n freeSolo\n fullWidth\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onChange={(_, newValue) => {\n onChange(newValue);\n setSequenceMapping(uploadSequenceMappingRef.current);\n updateAlert();\n }}\n options={dropDownOptions}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n size={'small'}\n />\n )}\n sx={{\n lineHeight: 'initial',\n }}\n value={dropDownValue}\n />\n );\n }, [setSequenceMapping, updateAlert]);\n\n const renderSequenceCell = useCallback((tableRowParams: TableRowParams<CaseDbCaseUploadResult>) => {\n const col = completeCaseType.cols[tableRowParams.id];\n\n const id = tableRowParams.row.id;\n const dropDownValue = uploadSequenceMappingRef.current?.[tableRowParams.row.id]?.sequenceFileNames[col.id] || '';\n const onChange = (newValue: string) => {\n if (!newValue) {\n delete uploadSequenceMappingRef.current?.[id]?.sequenceFileNames[col.id];\n } else {\n uploadSequenceMappingRef.current[id].sequenceFileNames[col.id] = newValue;\n }\n };\n\n return (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n justifyContent: 'center',\n }}\n >\n {createDropDown({\n dropDownOptions: sequenceDropDownOptions,\n dropDownValue,\n label: col.label,\n onChange,\n })}\n </Box>\n );\n }, [completeCaseType, createDropDown, sequenceDropDownOptions]);\n\n\n const renderReadsCell = useCallback((tableRowParams: TableRowParams<CaseDbCaseUploadResult>) => {\n const col = completeCaseType.cols[tableRowParams.id];\n const isSequenceColumn = completeCaseTypeColStats.sequenceColumns.includes(col);\n\n const id = tableRowParams.row.id;\n const dropDownValueFwd = uploadSequenceMappingRef.current?.[id]?.readsFileNames?.[col.id]?.fwd || '';\n const dropDownValueRev = uploadSequenceMappingRef.current?.[id]?.readsFileNames?.[col.id]?.rev || '';\n const onChangeFwd = (newValue: string) => {\n if (!newValue) {\n\n delete uploadSequenceMappingRef.current?.[id]?.readsFileNames?.[col.id]?.fwd;\n } else {\n uploadSequenceMappingRef.current[id].readsFileNames[col.id].fwd = newValue;\n }\n };\n const onChangeRev = (newValue: string) => {\n if (!newValue) {\n\n delete uploadSequenceMappingRef.current?.[id]?.readsFileNames?.[col.id]?.rev;\n } else {\n uploadSequenceMappingRef.current[id].readsFileNames[col.id].rev = newValue;\n }\n };\n\n return (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n gap: 1,\n height: '100%',\n justifyContent: 'center',\n }}\n >\n {createDropDown({\n dropDownOptions: isSequenceColumn ? sequenceDropDownOptions : readsDropDownOptions,\n dropDownValue: dropDownValueFwd,\n label: `${col.label} FWD`,\n onChange: onChangeFwd,\n })}\n {createDropDown({\n dropDownOptions: isSequenceColumn ? sequenceDropDownOptions : readsDropDownOptions,\n dropDownValue: dropDownValueRev,\n label: `${col.label} REV`,\n onChange: onChangeRev,\n })}\n </Box>\n );\n }, [completeCaseType, completeCaseTypeColStats.sequenceColumns, createDropDown, sequenceDropDownOptions, readsDropDownOptions]);\n\n\n const tableColumns = useMemo<TableColumn<CaseDbCaseUploadResult>[]>(() => {\n const tableCols: TableColumn<CaseDbCaseUploadResult>[] = [];\n tableCols.push(\n TableUtil.createReadableIndexColumn(),\n );\n\n const columnsUsedForMapping = [\n ...completeCaseTypeColStats.sampleIdColumns,\n ...completeCaseTypeColStats.sequenceColumns,\n ...completeCaseTypeColStats.readsColumns,\n ];\n\n const sampleIdCol = completeCaseTypeColStats.sampleIdColumns.find(x => x.id === sampleIdColId);\n if (sampleIdCol && caseHasColumnContent(selectedValidatedCases, sampleIdCol)) {\n tableCols.push({\n headerName: sampleIdCol.label,\n hideInFilter: true,\n id: sampleIdCol.id,\n isInitiallyVisible: true,\n type: 'text',\n valueGetter: (params) => CaseUtil.getRowValue(params.row.validated_content, sampleIdCol, completeCaseType).short,\n widthPx: 300,\n });\n }\n\n // eslint-disable-next-line react-hooks/refs\n completeCaseTypeColStats.sequenceColumns.forEach((col) => {\n tableCols.push({\n cellTitleGetter: () => null,\n headerName: col.label,\n hideInFilter: true,\n id: col.id,\n isInitiallyVisible: true,\n renderCell: renderSequenceCell,\n type: 'text',\n valueGetter: (params) => CaseUtil.getRowValue(params.row.validated_content, col, completeCaseType).short,\n widthPx: 400,\n });\n });\n\n // eslint-disable-next-line react-hooks/refs\n completeCaseTypeColStats.readsColumns.forEach((col) => {\n tableCols.push({\n cellTitleGetter: () => null,\n headerName: col.label,\n hideInFilter: true,\n id: col.id,\n isInitiallyVisible: true,\n renderCell: renderReadsCell,\n type: 'text',\n valueGetter: (params) => CaseUtil.getRowValue(params.row.validated_content, col, completeCaseType).short,\n widthPx: 800,\n });\n });\n\n const uniqueColIds: Set<string> = new Set();\n selectedValidatedCases.forEach((vc) => {\n Object.keys(vc.validated_content || {}).forEach((colId) => uniqueColIds.add(colId));\n });\n\n const colIdsToIgnore = [...completeCaseTypeColStats.sequenceColumns.map(x => x.id), ...completeCaseTypeColStats.readsColumns.map(x => x.id), sampleIdCol?.id];\n\n completeCaseType.ordered_col_ids.forEach((colId) => {\n if (colIdsToIgnore.includes(colId) || !uniqueColIds.has(colId) || columnsUsedForMapping.find(c => c.id === colId)) {\n return;\n }\n\n const col = completeCaseType.cols[colId];\n if (col) {\n tableCols.push({\n headerName: col.code,\n hideInFilter: true,\n id: col.id,\n isInitiallyVisible: true,\n type: 'text',\n valueGetter: (params) => CaseUtil.getRowValue(params.row.validated_content, col, completeCaseType).short,\n widthPx: 250,\n } satisfies TableColumn<CaseDbCaseUploadResult>);\n }\n });\n\n return tableCols;\n }, [caseHasColumnContent, completeCaseType, completeCaseTypeColStats.readsColumns, completeCaseTypeColStats.sampleIdColumns, completeCaseTypeColStats.sequenceColumns, renderReadsCell, renderSequenceCell, sampleIdColId, selectedValidatedCases]);\n\n useInitializeTableStore<CaseDbCaseUploadResult>({ columns: tableColumns, createFiltersFromColumns: true, rows: selectedValidatedCases, store: tableStore });\n\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateRows: 'max-content auto max-content',\n height: '100%',\n }}\n >\n <Box sx={{ paddingBottom: 1 }}>\n <Alert severity={'info'}>\n <AlertTitle id={alertTitleId} />\n <Box id={alertContentId} />\n </Alert>\n </Box>\n <TableStoreContextProvider store={tableStore}>\n <Table\n font={theme['gen-epix-ui-casedb'].lineList.font}\n rowHeight={7}\n />\n <UploadNavigation\n onGoBackButtonClick={onGoBackButtonClick}\n onProceedButtonClick={onProceedButtonClick}\n />\n </TableStoreContextProvider>\n </Box>\n );\n};\n","import Box from '@mui/material/Box';\nimport { useTranslation } from 'react-i18next';\nimport {\n use,\n useMemo,\n} from 'react';\nimport {\n Container,\n useTheme,\n} from '@mui/material';\nimport { useStore } from 'zustand';\nimport { Stepper } from '@gen-epix/ui/components/ui/Stepper';\nimport type { Step } from '@gen-epix/ui/components/ui/Stepper';\n\nimport { UploadStoreContext } from '../../../stores/uploadStore';\nimport { UPLOAD_STEP } from '../../../models/upload';\n\nimport { UploadSelectFile } from './UploadSelectFile';\nimport { UploadMapColumns } from './UploadMapColumns';\nimport { UploadPreview } from './UploadPreview';\nimport { UploadCreateCases } from './UploadCreateCases';\nimport { UploadSelectSequenceFiles } from './UploadSelectSequenceFiles';\nimport { UploadMapSequences } from './UploadMapSequences';\n\nexport const Upload = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const store = use(UploadStoreContext);\n const completeCaseType = useStore(store, (state) => state.completeCaseType);\n const activeStep = useStore(store, (state) => state.activeStep);\n const stepOrder = useStore(store, (state) => state.stepOrder);\n\n const stepLabels = useMemo<Record<UPLOAD_STEP, string>>(() => {\n return {\n [UPLOAD_STEP.CREATE_CASES]: t`Submit`,\n [UPLOAD_STEP.MAP_COLUMNS]: t`Map columns`,\n [UPLOAD_STEP.MAP_SEQUENCES]: t`Map sequences`,\n [UPLOAD_STEP.PREVIEW]: t`Preview`,\n [UPLOAD_STEP.SELECT_FILE]: t`Select file`,\n [UPLOAD_STEP.SELECT_SEQUENCE_FILES]: t`Select sequence files`,\n };\n }, [t]);\n\n const optionalSteps = useMemo<UPLOAD_STEP[]>(() => {\n return [\n UPLOAD_STEP.SELECT_SEQUENCE_FILES,\n UPLOAD_STEP.MAP_SEQUENCES,\n ];\n }, []);\n\n const steps = useMemo<Step[]>(() => {\n return stepOrder.map((step) => ({\n key: String(step),\n label: stepLabels[step],\n optional: optionalSteps.includes(step),\n }));\n }, [optionalSteps, stepLabels, stepOrder]);\n\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateRows: 'max-content auto',\n height: '100%',\n position: 'relative',\n width: '100%',\n }}\n >\n <Container>\n <Stepper\n activeStep={String(activeStep)}\n steps={steps}\n sx={{\n marginY: 2,\n }}\n />\n </Container>\n <Box\n sx={{\n height: `calc(100% - ${theme.spacing(4)})`,\n marginBottom: 2,\n marginTop: 2,\n position: 'relative',\n }}\n >\n {activeStep === UPLOAD_STEP.SELECT_FILE && (\n <UploadSelectFile />\n )}\n {activeStep === UPLOAD_STEP.MAP_COLUMNS && (\n <UploadMapColumns />\n )}\n {activeStep === UPLOAD_STEP.PREVIEW && (\n <UploadPreview\n caseTypeId={completeCaseType.id}\n />\n )}\n {activeStep === UPLOAD_STEP.SELECT_SEQUENCE_FILES && (\n <UploadSelectSequenceFiles />\n )}\n {activeStep === UPLOAD_STEP.MAP_SEQUENCES && (\n <UploadMapSequences />\n )}\n {activeStep === UPLOAD_STEP.CREATE_CASES && (\n <UploadCreateCases />\n )}\n </Box>\n </Box>\n );\n};\n"],"mappings":"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"}
|