@gen-epix/ui-client-casedb 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/dist/@types/mui.d.ts +1 -1
  2. package/dist/@types/{ui-casedb.d.ts → ui-client-casedb.d.ts} +1 -1
  3. package/dist/_chunks/AddCasesToEventDialog.js +74 -74
  4. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  5. package/dist/_chunks/CaseContentForm.js +2 -2
  6. package/dist/_chunks/CaseContentForm.js.map +1 -1
  7. package/dist/_chunks/CaseDbDownloadUtil.js +40 -35
  8. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  9. package/dist/_chunks/CaseInfoDialog.js +195 -195
  10. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  11. package/dist/_chunks/CaseSetInfoDialog.js +131 -131
  12. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  13. package/dist/_chunks/CaseTypeInfoDialog.js +63 -61
  14. package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -1
  15. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +6 -6
  16. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  17. package/dist/_chunks/CompletCaseTypeLoader.js +3 -3
  18. package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -1
  19. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +1 -1
  20. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -1
  21. package/dist/_chunks/CustomTabPanel.js.map +1 -1
  22. package/dist/_chunks/Dashboard.js +399 -386
  23. package/dist/_chunks/Dashboard.js.map +1 -1
  24. package/dist/_chunks/DashboardStoreLoader.js +5 -5
  25. package/dist/_chunks/DashboardStoreLoader.js.map +1 -1
  26. package/dist/_chunks/DataCollectionAccessInfo.js +21 -21
  27. package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -1
  28. package/dist/_chunks/EpiCurveUtil.js +4 -4
  29. package/dist/_chunks/EpiCurveUtil.js.map +1 -1
  30. package/dist/_chunks/EpiCurveWidget.js +189 -183
  31. package/dist/_chunks/EpiCurveWidget.js.map +1 -1
  32. package/dist/_chunks/FilterUtil.js +103 -101
  33. package/dist/_chunks/FilterUtil.js.map +1 -1
  34. package/dist/_chunks/FindSimilarCasesDialog.js +16 -16
  35. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  36. package/dist/_chunks/FindSimilarCasesUtil.js +9 -9
  37. package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -1
  38. package/dist/_chunks/HomePageTrends.js +8 -8
  39. package/dist/_chunks/HomePageTrends.js.map +1 -1
  40. package/dist/_chunks/LegendaItem.js +3 -3
  41. package/dist/_chunks/LegendaItem.js.map +1 -1
  42. package/dist/_chunks/LineListWidget.js +23 -21
  43. package/dist/_chunks/LineListWidget.js.map +1 -1
  44. package/dist/_chunks/PanelSeparator.js +374 -384
  45. package/dist/_chunks/PanelSeparator.js.map +1 -1
  46. package/dist/_chunks/Upload.js +222 -207
  47. package/dist/_chunks/Upload.js.map +1 -1
  48. package/dist/_chunks/UploadUtil.js +1970 -841
  49. package/dist/_chunks/UploadUtil.js.map +1 -1
  50. package/dist/_chunks/UserRightsDialog.js +12 -12
  51. package/dist/_chunks/UserRightsDialog.js.map +1 -1
  52. package/dist/_chunks/_MapCache.js +2 -2
  53. package/dist/_chunks/_baseGet.js +1 -1
  54. package/dist/_chunks/_baseGet.js.map +1 -1
  55. package/dist/_chunks/_baseIteratee.js +1 -1
  56. package/dist/_chunks/_baseIteratee.js.map +1 -1
  57. package/dist/_chunks/_setToString.js.map +1 -1
  58. package/dist/_chunks/{chunk-KS7C4IRE.js → chunk-BV7QT456.js} +330 -495
  59. package/dist/_chunks/chunk-BV7QT456.js.map +1 -0
  60. package/dist/_chunks/cloneDeep.js +11 -9
  61. package/dist/_chunks/cloneDeep.js.map +1 -1
  62. package/dist/_chunks/dashboardStore.js +259 -261
  63. package/dist/_chunks/dashboardStore.js.map +1 -1
  64. package/dist/_chunks/esm.js +2900 -2868
  65. package/dist/_chunks/esm.js.map +1 -1
  66. package/dist/_chunks/format.js +8 -8
  67. package/dist/_chunks/format.js.map +1 -1
  68. package/dist/_chunks/index.esm.js +919 -796
  69. package/dist/_chunks/index.esm.js.map +1 -1
  70. package/dist/_chunks/index.module.js +1 -1
  71. package/dist/_chunks/index.module.js.map +1 -1
  72. package/dist/_chunks/protectedTokens.js +79 -81
  73. package/dist/_chunks/protectedTokens.js.map +1 -1
  74. package/dist/_chunks/react.js +1 -1
  75. package/dist/_chunks/react.js.map +1 -1
  76. package/dist/_chunks/round.js +1 -1
  77. package/dist/_chunks/round.js.map +1 -1
  78. package/dist/_chunks/shallow.js +2 -2
  79. package/dist/_chunks/shallow.js.map +1 -1
  80. package/dist/_chunks/sync.js +198 -161
  81. package/dist/_chunks/sync.js.map +1 -1
  82. package/dist/_chunks/toDate.js +1 -1
  83. package/dist/_chunks/toDate.js.map +1 -1
  84. package/dist/_chunks/toString.js +1 -1
  85. package/dist/_chunks/toString.js.map +1 -1
  86. package/dist/_chunks/useUnit.js.map +1 -1
  87. package/dist/_chunks/vanilla.js +1 -1
  88. package/dist/_chunks/vanilla.js.map +1 -1
  89. package/dist/_chunks/yup.js +5 -5
  90. package/dist/_chunks/yup.js.map +1 -1
  91. package/dist/classes/filters/SelectionFilter.d.ts +2 -2
  92. package/dist/classes/filters/TreeFilter.d.ts +2 -2
  93. package/dist/classes/services/DataService/index.js +3 -3
  94. package/dist/classes/services/DataService/index.js.map +1 -1
  95. package/dist/classes/services/EventBusService/EventBusService.d.ts +1 -1
  96. package/dist/classes/services/EventBusService/index.js.map +1 -1
  97. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +1 -1
  98. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -1
  99. package/dist/components/app/CaseDbApp/index.js +8 -5
  100. package/dist/components/app/CaseDbApp/index.js.map +1 -1
  101. package/dist/components/form/fields/ArrangementEditor/index.js +83 -83
  102. package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -1
  103. package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +2 -2
  104. package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +2 -2
  105. package/dist/components/ui/CaseContentFormDialog/index.js +1 -1
  106. package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -1
  107. package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +2 -2
  108. package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +2 -2
  109. package/dist/components/ui/CaseSummary/index.js +1 -1
  110. package/dist/components/ui/CaseSummary/index.js.map +1 -1
  111. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +2 -2
  112. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
  113. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +2 -2
  114. package/dist/components/ui/ContextMenu/index.js.map +1 -1
  115. package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +2 -2
  116. package/dist/components/ui/CreateEventDialog/index.js +9 -9
  117. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  118. package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
  119. package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
  120. package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
  121. package/dist/components/ui/DashboardEditCases/index.js +1 -1
  122. package/dist/components/ui/DashboardEditCases/index.js.map +1 -1
  123. package/dist/components/ui/FileSelector/index.js +46 -46
  124. package/dist/components/ui/FileSelector/index.js.map +1 -1
  125. package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +2 -2
  126. package/dist/components/ui/Grouping/index.js +50 -50
  127. package/dist/components/ui/Grouping/index.js.map +1 -1
  128. package/dist/components/ui/HistogramWidget/index.js +1 -1
  129. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  130. package/dist/components/ui/MapWidget/index.js +7 -3
  131. package/dist/components/ui/MapWidget/index.js.map +1 -1
  132. package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +2 -2
  133. package/dist/components/ui/RemoveCasesFromEventDialog/index.js +6 -6
  134. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  135. package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +2 -2
  136. package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +2 -2
  137. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  138. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  139. package/dist/components/ui/TreeDescription/index.js.map +1 -1
  140. package/dist/components/ui/TreeWidget/index.js +11 -11
  141. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  142. package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +2 -2
  143. package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +2 -2
  144. package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +2 -2
  145. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +2 -2
  146. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +25 -11
  147. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -1
  148. package/dist/components/ui/Warning/index.js.map +1 -1
  149. package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -1
  150. package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
  151. package/dist/components/ui/WidgetMenu/index.js +2 -2
  152. package/dist/components/ui/WidgetMenu/index.js.map +1 -1
  153. package/dist/components/ui/WidgetUnavailable/index.js.map +1 -1
  154. package/dist/constants/query.d.ts +1 -1
  155. package/dist/constants/query.js +1 -1
  156. package/dist/constants/query.js.map +1 -1
  157. package/dist/context/caseAbac/CaseAbacContext.d.ts +1 -1
  158. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +3 -3
  159. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -1
  160. package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +1 -1
  161. package/dist/dataHooks/useCaseRightsQuery/index.js +2 -2
  162. package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -1
  163. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +3 -3
  164. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -1
  165. package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +1 -1
  166. package/dist/dataHooks/useCaseSetRightsQuery/index.js +2 -2
  167. package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -1
  168. package/dist/dataHooks/useCaseSetStatsQuery/index.js +3 -3
  169. package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -1
  170. package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +1 -1
  171. package/dist/dataHooks/useCaseSetStatusesQuery/index.js +3 -3
  172. package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -1
  173. package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +1 -1
  174. package/dist/dataHooks/useCaseSetsQuery/index.js +3 -3
  175. package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -1
  176. package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +1 -1
  177. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +3 -3
  178. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -1
  179. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +1 -1
  180. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -1
  181. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +1 -1
  182. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +2 -2
  183. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -1
  184. package/dist/dataHooks/useCaseTypeSetsQuery/index.js +3 -3
  185. package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -1
  186. package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +1 -1
  187. package/dist/dataHooks/useCaseTypeStatsQuery/index.js +2 -2
  188. package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -1
  189. package/dist/dataHooks/useCaseTypesQuery/index.js +3 -3
  190. package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -1
  191. package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +1 -1
  192. package/dist/dataHooks/useColSetMembersQuery/index.js +2 -2
  193. package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -1
  194. package/dist/dataHooks/useColSetsQuery/index.js +3 -3
  195. package/dist/dataHooks/useColSetsQuery/index.js.map +1 -1
  196. package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +1 -1
  197. package/dist/dataHooks/useColTypesQuery/index.js.map +1 -1
  198. package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +1 -1
  199. package/dist/dataHooks/useColsQuery/index.js +3 -3
  200. package/dist/dataHooks/useColsQuery/index.js.map +1 -1
  201. package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +1 -1
  202. package/dist/dataHooks/useConceptQuery/index.js +3 -3
  203. package/dist/dataHooks/useConceptQuery/index.js.map +1 -1
  204. package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +1 -1
  205. package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -1
  206. package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +1 -1
  207. package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -1
  208. package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +1 -1
  209. package/dist/dataHooks/useConceptSetsQuery/index.js +3 -3
  210. package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -1
  211. package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +1 -1
  212. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +2 -2
  213. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -1
  214. package/dist/dataHooks/useDataCollectionsQuery/index.js +3 -3
  215. package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -1
  216. package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +1 -1
  217. package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -1
  218. package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +1 -1
  219. package/dist/dataHooks/useDimsQuery/index.js +3 -3
  220. package/dist/dataHooks/useDimsQuery/index.js.map +1 -1
  221. package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +1 -1
  222. package/dist/dataHooks/useDiseasesQuery/index.js +3 -3
  223. package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -1
  224. package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +1 -1
  225. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +3 -3
  226. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -1
  227. package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +1 -1
  228. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +3 -3
  229. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -1
  230. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +1 -1
  231. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +2 -2
  232. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -1
  233. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +2 -2
  234. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -1
  235. package/dist/dataHooks/useRefColsQuery/index.js +3 -3
  236. package/dist/dataHooks/useRefColsQuery/index.js.map +1 -1
  237. package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +1 -1
  238. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +2 -2
  239. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -1
  240. package/dist/dataHooks/useRefDimsQuery/index.js +3 -3
  241. package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -1
  242. package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +1 -1
  243. package/dist/dataHooks/useRegionQuery/index.js +3 -3
  244. package/dist/dataHooks/useRegionQuery/index.js.map +1 -1
  245. package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +1 -1
  246. package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -1
  247. package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +1 -1
  248. package/dist/dataHooks/useRegionSetsQuery/index.js +3 -3
  249. package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -1
  250. package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +1 -1
  251. package/dist/dataHooks/useSequencingProtocolsQuery/index.js +3 -3
  252. package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -1
  253. package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +1 -1
  254. package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -1
  255. package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +1 -1
  256. package/dist/dataHooks/useUnitQuery/useUnit.d.ts +1 -1
  257. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +2 -2
  258. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -1
  259. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +3 -3
  260. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -1
  261. package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +1 -1
  262. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +2 -2
  263. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -1
  264. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +2 -2
  265. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -1
  266. package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +1 -1
  267. package/dist/hooks/useUserCasePolicyNameFactory/index.js +3 -3
  268. package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -1
  269. package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +1 -1
  270. package/dist/locale/nl.json +1 -1
  271. package/dist/models/config.d.ts +1 -1
  272. package/dist/models/dashboard.d.ts +1 -1
  273. package/dist/models/dashboard.js.map +1 -1
  274. package/dist/models/theme.d.ts +2 -2
  275. package/dist/pages/CaseDbUsersAdminPage/index.js +5 -5
  276. package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -1
  277. package/dist/pages/CaseSetCategoryAdminPage/index.js +4 -4
  278. package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -1
  279. package/dist/pages/CaseSetStatusAdminPage/index.js +4 -4
  280. package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -1
  281. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +4 -4
  282. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -1
  283. package/dist/pages/CaseTypeSetsAdminPage/index.js +6 -6
  284. package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -1
  285. package/dist/pages/CaseTypesAdminPage/index.js +5 -5
  286. package/dist/pages/CaseTypesAdminPage/index.js.map +1 -1
  287. package/dist/pages/CasesDetailPage/index.js +5 -5
  288. package/dist/pages/CasesDetailPage/index.js.map +1 -1
  289. package/dist/pages/CasesPage/index.js +10 -10
  290. package/dist/pages/CasesPage/index.js.map +1 -1
  291. package/dist/pages/ColSetsAdminPage/index.js +6 -6
  292. package/dist/pages/ColSetsAdminPage/index.js.map +1 -1
  293. package/dist/pages/ColsAdminPage/index.js +5 -5
  294. package/dist/pages/ColsAdminPage/index.js.map +1 -1
  295. package/dist/pages/ConceptRelationsAdminPage/index.js +19 -19
  296. package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -1
  297. package/dist/pages/ConceptSetsAdminPage/index.js +5 -5
  298. package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -1
  299. package/dist/pages/ConceptsAdminPage/index.js +5 -5
  300. package/dist/pages/ConceptsAdminPage/index.js.map +1 -1
  301. package/dist/pages/DataCollectionSetsAdminPage/index.js +12 -12
  302. package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -1
  303. package/dist/pages/DataCollectionVisualizationPage/index.js +4 -4
  304. package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
  305. package/dist/pages/DataCollectionsAdminPage/index.js +4 -4
  306. package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -1
  307. package/dist/pages/DimsAdminPage/index.js +6 -6
  308. package/dist/pages/DimsAdminPage/index.js.map +1 -1
  309. package/dist/pages/DiseasesAdminPage/index.js +4 -4
  310. package/dist/pages/DiseasesAdminPage/index.js.map +1 -1
  311. package/dist/pages/EtiologicalAgentsAdminPage/index.js +4 -4
  312. package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -1
  313. package/dist/pages/EtiologiesAdminPage/index.js +3 -3
  314. package/dist/pages/EtiologiesAdminPage/index.js.map +1 -1
  315. package/dist/pages/EventsDetailPage/index.js +5 -5
  316. package/dist/pages/EventsDetailPage/index.js.map +1 -1
  317. package/dist/pages/EventsPage/index.js +11 -11
  318. package/dist/pages/EventsPage/index.js.map +1 -1
  319. package/dist/pages/HomePage/index.js +2 -2
  320. package/dist/pages/HomePage/index.js.map +1 -1
  321. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +4 -4
  322. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  323. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +4 -4
  324. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -1
  325. package/dist/pages/RefColsAdminPage/index.js +7 -7
  326. package/dist/pages/RefColsAdminPage/index.js.map +1 -1
  327. package/dist/pages/RefDimsAdminPage/index.js +5 -5
  328. package/dist/pages/RefDimsAdminPage/index.js.map +1 -1
  329. package/dist/pages/RegionRelationsAdminPage/index.js +3 -3
  330. package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -1
  331. package/dist/pages/RegionSetShapesAdminPage/index.js +4 -4
  332. package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -1
  333. package/dist/pages/RegionSetsAdminPage/index.js +5 -5
  334. package/dist/pages/RegionSetsAdminPage/index.js.map +1 -1
  335. package/dist/pages/RegionsAdminPage/index.js +5 -5
  336. package/dist/pages/RegionsAdminPage/index.js.map +1 -1
  337. package/dist/pages/TrendsPage/index.js +1 -1
  338. package/dist/pages/TrendsPage/index.js.map +1 -1
  339. package/dist/pages/UploadPage/index.js +1 -1
  340. package/dist/pages/UploadPage/index.js.map +1 -1
  341. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +4 -4
  342. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -1
  343. package/dist/pages/UserEffectiveRightsAdminPage/index.js +12 -12
  344. package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
  345. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +8 -8
  346. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  347. package/dist/pages/UserShareCasePoliciesAdminPage/index.js +4 -4
  348. package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -1
  349. package/dist/routes/adminRoutes.d.ts +1 -1
  350. package/dist/routes/index.js +11 -8
  351. package/dist/routes/index.js.map +1 -1
  352. package/dist/routes/routes.d.ts +1 -1
  353. package/dist/setup/setup.js +5 -5
  354. package/dist/setup/setup.js.map +1 -1
  355. package/dist/stores/dashboardStore/dashboardStore.d.ts +1 -1
  356. package/dist/stores/uploadStore/index.js +2 -2
  357. package/dist/stores/uploadStore/index.js.map +1 -1
  358. package/dist/stores/uploadStore/uploadStore.d.ts +1 -1
  359. package/dist/stores/userProfileStore/index.js +2 -2
  360. package/dist/stores/userProfileStore/index.js.map +1 -1
  361. package/dist/theme/demoTheme/index.js +2 -2
  362. package/dist/theme/demoTheme/index.js.map +1 -1
  363. package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +1 -1
  364. package/dist/utils/CaseDbDataUtil/index.js +1 -1
  365. package/dist/utils/CaseDbDataUtil/index.js.map +1 -1
  366. package/dist/utils/CaseDbStandardConfigUtil/index.js +2488 -1408
  367. package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
  368. package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +1 -1
  369. package/dist/utils/CaseDbTableUtil/index.js +1 -1
  370. package/dist/utils/CaseDbTableUtil/index.js.map +1 -1
  371. package/dist/utils/CaseSelectionUtil/index.js.map +1 -1
  372. package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +1 -1
  373. package/dist/utils/CaseTypeFormUtil/index.js +7 -10
  374. package/dist/utils/CaseTypeFormUtil/index.js.map +1 -1
  375. package/dist/utils/CaseTypeUtil/index.js +1 -1
  376. package/dist/utils/CaseTypeUtil/index.js.map +1 -1
  377. package/dist/utils/CaseUtil/index.js +3 -3
  378. package/dist/utils/CaseUtil/index.js.map +1 -1
  379. package/dist/utils/DashboardUtil/index.js +1 -1
  380. package/dist/utils/DashboardUtil/index.js.map +1 -1
  381. package/dist/utils/DataSetUtil/index.js.map +1 -1
  382. package/dist/utils/FileUtil/index.js +1 -1
  383. package/dist/utils/FileUtil/index.js.map +1 -1
  384. package/dist/utils/FilterUtil/FilterUtil.d.ts +2 -2
  385. package/dist/utils/HistogramUtil/index.js +1 -1
  386. package/dist/utils/HistogramUtil/index.js.map +1 -1
  387. package/dist/utils/MapUtil/index.js +1 -1
  388. package/dist/utils/MapUtil/index.js.map +1 -1
  389. package/dist/utils/StratificationUtil/index.js +3 -2
  390. package/dist/utils/StratificationUtil/index.js.map +1 -1
  391. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -1
  392. package/package.json +19 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CaseTypeInfoDialog.js","names":[],"sources":["../../src/context/caseTypeAbac/CaseTypeAbacContext.tsx","../../src/context/caseTypeAbac/CaseTypeAbacContextProvider.tsx","../../src/context/caseTypeAbac/useCaseTypeAbacContext.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoAccessRights.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoColAccessRights.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoData.tsx","../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isNumber.js","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoVariableDetails.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoValues.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoTrees.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoRegions.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport type {\n CaseDbCaseTypeAccessAbac,\n CaseDbDataCollection,\n} from '@gen-epix/api-casedb';\n\nexport type CaseTypeAbacContext = {\n caseTypeAccessAbacDict: { [key: string]: CaseDbCaseTypeAccessAbac };\n caseTypeAccessAbacs?: CaseDbCaseTypeAccessAbac[];\n effectiveColumnAccessRights?: Map<string, { read: boolean; write: boolean }>;\n userDataCollections: CaseDbDataCollection[];\n userDataCollectionsMap: Map<string, CaseDbDataCollection>;\n};\n\n// eslint-disable-next-line no-redeclare\nexport const CaseTypeAbacContext = createContext<CaseTypeAbacContext>(null);\n","import { useMemo } from 'react';\nimport type { PropsWithChildren } from 'react';\n\nimport { AbacUtil } from '../../utils/AbacUtil';\n\nimport { CaseTypeAbacContext } from './CaseTypeAbacContext';\n\nexport type CaseTypeAbacContextProviderProps = PropsWithChildren<{\n readonly caseTypeAbac: CaseTypeAbacContext;\n}>;\n\nexport const CaseTypeAbacContextProvider = (\n props: CaseTypeAbacContextProviderProps,\n) => {\n const { caseTypeAbac, children } = props;\n\n const sanitizedCaseAbac = useMemo<CaseTypeAbacContext>(() => {\n const caseTypeAccessAbacs = Object.values(caseTypeAbac.caseTypeAccessAbacDict).filter(x => !!caseTypeAbac.userDataCollectionsMap.get(x.data_collection_id)).sort((a, b) => {\n const aDataCollection = caseTypeAbac.userDataCollectionsMap.get(a.data_collection_id);\n const bDataCollection = caseTypeAbac.userDataCollectionsMap.get(b.data_collection_id);\n return aDataCollection?.name.localeCompare(bDataCollection?.name) ?? 0;\n });\n\n return {\n ...caseTypeAbac,\n caseTypeAccessAbacs,\n effectiveColumnAccessRights: AbacUtil.createEffectieveColumnAccessRights(caseTypeAccessAbacs),\n } satisfies CaseTypeAbacContext;\n }, [caseTypeAbac]);\n\n return (\n <CaseTypeAbacContext value={sanitizedCaseAbac}>\n {children}\n </CaseTypeAbacContext>\n );\n};\n","import { use } from 'react';\n\nimport { CaseTypeAbacContext } from './CaseTypeAbacContext';\n\nexport const useCaseTypeAbacContext = (): CaseTypeAbacContext => use(CaseTypeAbacContext);\n","import { useMemo } from 'react';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport { t } from 'i18next';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\n\nimport { useCaseTypeAbacContext } from '../../../context/caseTypeAbac';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\n\nexport type CaseTypeInfoAccessRightsProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\n\nexport const CaseTypeInfoAccessRights = ({ completeCaseType }: CaseTypeInfoAccessRightsProps) => {\n const cols = useMemo(() => CaseTypeUtil.getCols(completeCaseType), [completeCaseType]);\n const caseTypeAbacContext = useCaseTypeAbacContext();\n\n return (\n <>\n {(caseTypeAbacContext.caseTypeAccessAbacs ?? []).map(caseTypeAccessAbac => {\n const dataCollection = caseTypeAbacContext.userDataCollectionsMap.get(caseTypeAccessAbac.data_collection_id);\n return (\n <Accordion\n key={`${dataCollection.id}`}\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${dataCollection.id}`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${dataCollection.id}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {dataCollection.name}\n </AccordionSummary>\n <AccordionDetails>\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Column`}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Read`}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Write`}\n </TableCell>\n <TableCell sx={{ width: '40%' }} />\n </TableRow>\n </TableHead>\n <TableBody>\n {cols.map(col => {\n return (\n <TableRow key={col.id}>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {col.label}\n </TableCell>\n <TableCell\n sx={{ verticalAlign: 'top', width: '20%' }}\n >\n { caseTypeAccessAbac.read_col_ids.includes(col.id) ? t`Yes` : t`No`}\n </TableCell>\n <TableCell\n sx={{ verticalAlign: 'top', width: '20%' }}\n >\n { caseTypeAccessAbac.write_col_ids.includes(col.id) ? t`Yes` : t`No`}\n </TableCell>\n <TableCell sx={{ width: '40%' }} />\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </AccordionDetails>\n </Accordion>\n );\n })}\n </>\n );\n};\n","import type { ReactNode } from 'react';\nimport {\n Fragment,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport {\n Box,\n Button,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nimport { useCaseTypeAbacContext } from '../../../context/caseTypeAbac';\n\nexport type CaseTypeInfoColAccessRightsProps = {\n readonly colId: string;\n};\n\ntype DataCollectionAccess = {\n readonly dataCollectionId: string;\n readonly dataCollectionName: string;\n readonly hasReadAccess: boolean;\n readonly hasWriteAccess: boolean;\n};\n\nconst MAX_ITEMS = 5;\n\nexport const CaseTypeInfoColAccessRights = ({ colId }: CaseTypeInfoColAccessRightsProps) => {\n const { t } = useTranslation();\n const caseTypeAbacContext = useCaseTypeAbacContext();\n const [shouldShowMore, setShouldShowMore] = useState(false);\n\n const onShowMoreButtonClick = useCallback(() => {\n setShouldShowMore(true);\n }, []);\n\n const dataCollectionAccesses = useMemo<DataCollectionAccess[]>(() => {\n const x: DataCollectionAccess[] = [];\n caseTypeAbacContext.caseTypeAccessAbacs.forEach(caseTypeAccessAbac => {\n const dataCollection = caseTypeAbacContext.userDataCollectionsMap.get(caseTypeAccessAbac.data_collection_id);\n const hasWriteAccess = caseTypeAccessAbac.write_col_ids.includes(colId);\n const hasReadAccess = caseTypeAccessAbac.read_col_ids.includes(colId);\n if (hasWriteAccess || hasReadAccess) {\n x.push({\n dataCollectionId: dataCollection.id,\n dataCollectionName: dataCollection.name,\n hasReadAccess,\n hasWriteAccess,\n });\n }\n });\n return x;\n }, [caseTypeAbacContext.caseTypeAccessAbacs, caseTypeAbacContext.userDataCollectionsMap, colId]);\n\n const canRead = caseTypeAbacContext.effectiveColumnAccessRights.get(colId)?.read;\n const canWrite = caseTypeAbacContext.effectiveColumnAccessRights.get(colId)?.write;\n let effectiveRightLabel;\n if (canRead && canWrite) {\n effectiveRightLabel = t`read/write`;\n } else if (canRead) {\n effectiveRightLabel = t`read`;\n } else if (canWrite) {\n effectiveRightLabel = t`write`;\n } else {\n effectiveRightLabel = t`no access`;\n }\n\n return (\n <Box>\n <Box\n sx={{\n marginBottom: 1,\n }}\n >\n <Box>\n {t('Effective rights: {{effectiveRightLabel}}', { effectiveRightLabel })}\n </Box>\n </Box>\n <Box>\n {dataCollectionAccesses.slice(0, shouldShowMore ? undefined : MAX_ITEMS).map(dataCollectionAccess => {\n let element: ReactNode;\n if (dataCollectionAccess.hasWriteAccess && dataCollectionAccess.hasReadAccess) {\n element = (\n <>\n {t('{{dataCollectionName}}: read/write', { dataCollectionName: dataCollectionAccess.dataCollectionName })}\n </>\n );\n } else if (dataCollectionAccess.hasWriteAccess) {\n element = (\n <>\n {t('{{dataCollectionName}}: write', { dataCollectionName: dataCollectionAccess.dataCollectionName })}\n </>\n );\n } else if (dataCollectionAccess.hasReadAccess) {\n element = (\n <>\n {t('{{dataCollectionName}}: read', { dataCollectionName: dataCollectionAccess.dataCollectionName })}\n </>\n );\n }\n return (\n <Fragment key={dataCollectionAccess.dataCollectionId}>\n <Box>\n {element}\n </Box>\n </Fragment>\n );\n })}\n {dataCollectionAccesses.length > MAX_ITEMS && !shouldShowMore && (\n <Button\n onClick={onShowMoreButtonClick}\n size={'small'}\n variant={'text'}\n >\n {t('Show more')}\n </Button>\n )}\n </Box>\n </Box>\n );\n};\n","import {\n Box,\n Typography,\n} from '@mui/material';\nimport { t } from 'i18next';\n\nexport type CaseTypeInfoDataProps = {\n readonly name: string;\n readonly title: string;\n};\n\nexport const CaseTypeInfoData = ({ name, title }: CaseTypeInfoDataProps) => {\n return (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Typography\n component={'h4'}\n variant={'h4'}\n >\n {title}\n </Typography>\n <Typography\n component={'p'}\n variant={'body1'}\n >\n {name && (\n <>\n {name}\n </>\n )}\n {!name && (\n <>\n {t`Not applicable`}\n </>\n )}\n </Typography>\n </Box>\n );\n};\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","import { useTranslation } from 'react-i18next';\nimport {\n Box,\n Chip,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport isNumber from 'lodash/isNumber';\nimport type {\n CaseDbCompleteCaseType,\n CaseDbDim,\n} from '@gen-epix/api-casedb';\nimport { CaseDbColType } from '@gen-epix/api-casedb';\n\nimport { DataService } from '../../../classes/services/DataService';\n\nimport { CaseTypeInfoColAccessRights } from './CaseTypeInfoColAccessRights';\n\nexport type CaseTypeInfoVariableDetailsProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n readonly dim: CaseDbDim;\n};\n\nexport const CaseTypeInfoVariableDetails = ({ completeCaseType, dim }: CaseTypeInfoVariableDetailsProps) => {\n const { t } = useTranslation();\n const cols = completeCaseType.ordered_col_ids_by_dim[dim.id].map(x => completeCaseType.cols[x]);\n\n return (\n <>\n <Typography\n component={'p'}\n sx={{\n marginBottom: 2,\n }}\n >\n {dim.description}\n </Typography>\n <Table\n aria-label={t('Table describing columns inside {{dimensionCode}}', { dimensionCode: dim.code }).toString()}\n size={'small'}\n >\n <TableHead>\n <TableRow>\n <TableCell sx={{ width: '15%' }}>\n {t`Column`}\n </TableCell>\n <TableCell sx={{ width: '30%' }}>\n {t`Description`}\n </TableCell>\n <TableCell sx={{ width: '15%' }}>\n {t`Type`}\n </TableCell>\n <TableCell sx={{ width: '20%' }}>\n {t`Constraints`}\n </TableCell>\n <TableCell sx={{ width: '20%' }}>\n {t`Access rights`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {cols.filter(col => {\n // filter out columns that are of type GENETIC_DISTANCE\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return refCol.col_type !== CaseDbColType.GENETIC_DISTANCE;\n }).map(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return (\n <TableRow key={col.id}>\n <TableCell sx={{ verticalAlign: 'top', width: '15%' }}>\n {col.code}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '30%' }}>\n {refCol.description}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '15%' }}>\n {refCol.col_type}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {([\n CaseDbColType.DECIMAL_0,\n CaseDbColType.DECIMAL_1,\n CaseDbColType.DECIMAL_2,\n CaseDbColType.DECIMAL_3,\n CaseDbColType.DECIMAL_4,\n CaseDbColType.DECIMAL_5,\n CaseDbColType.DECIMAL_6,\n ] as CaseDbColType[]).includes(refCol.col_type) && (isNumber(col.min_value) || isNumber(col.max_value)) && (\n <>\n {t('min: {{min}}; max: {{max}}', { max: col.max_value, min: col.min_value })}\n </>\n )}\n {([\n CaseDbColType.TIME_DAY,\n CaseDbColType.TIME_MONTH,\n CaseDbColType.TIME_QUARTER,\n CaseDbColType.TIME_WEEK,\n CaseDbColType.TIME_YEAR,\n ] as CaseDbColType[]).includes(refCol.col_type) && (col.min_datetime || col.max_datetime) && (\n <>\n {t('from: {{from}}; to: {{to}}', { from: col.min_datetime ?? '-', to: col.max_datetime ?? '-' })}\n </>\n )}\n {refCol.col_type === CaseDbColType.TEXT && col.max_length && (\n <>\n {t('Max length: {{maxLength}}', { maxLength: col.max_length })}\n </>\n )}\n {refCol.col_type === CaseDbColType.GEO_REGION && refCol.region_set_id && (\n <>\n {DataService.getInstance().data.regionSets[refCol.region_set_id].name}\n </>\n )}\n {([CaseDbColType.NOMINAL, CaseDbColType.ORDINAL] as CaseDbColType[]).includes(refCol.col_type) && refCol.concept_set_id && DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id] && (\n <Box\n sx={{\n maxWidth: '100%',\n }}\n >\n <Stack\n sx={{\n columnGap: 1,\n direction: 'row',\n flexWrap: 'wrap',\n rowGap: 1,\n }}\n >\n {DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id].map(concept => (\n <Chip\n key={concept.id}\n label={`${concept.name} (${concept.code})`}\n />\n ))}\n </Stack>\n </Box>\n )}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n <CaseTypeInfoColAccessRights\n colId={col.id}\n />\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </>\n );\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\nimport { CaseDbDimType } from '@gen-epix/api-casedb';\n\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\n\nimport { CaseTypeInfoVariableDetails } from './CaseTypeInfoVariableDetails';\n\nexport type CaseTypeInfoValuesProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\n\nexport const CaseTypeInfoValues = ({ completeCaseType }: CaseTypeInfoValuesProps) => {\n return (\n <>\n {completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).filter(dim => {\n // Filter out dimensions that only include genetic distance columns\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n if (refDim.dim_type !== CaseDbDimType.OTHER) {\n return true;\n }\n const cols = CaseTypeUtil.getCols(completeCaseType, dim.id);\n const colTypes = cols.map(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return refCol.col_type;\n });\n return !colTypes.every(colType => colType === 'GENETIC_DISTANCE');\n }).map(dim => {\n\n return (\n <Accordion\n key={`${dim.id}-${dim.occurrence ?? 0}`}\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${dim.code}-${dim.occurrence ?? 0}-content`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${dim.code}-${dim.occurrence ?? 0}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {CaseTypeUtil.getDimLabel(completeCaseType, dim.id)}\n </AccordionSummary>\n <AccordionDetails>\n <CaseTypeInfoVariableDetails\n completeCaseType={completeCaseType}\n dim={dim}\n />\n </AccordionDetails>\n </Accordion>\n );\n })}\n </>\n );\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n useTheme,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\n\nimport { TreeDescription } from '../TreeDescription';\nimport { TreeWidgetUtil } from '../../../utils/TreeWidgetUtil';\n\nimport { CaseTypeInfoColAccessRights } from './CaseTypeInfoColAccessRights';\n\n\nexport type CaseTypeInfoTreesProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\nexport const CaseTypeInfoTrees = ({ completeCaseType }: CaseTypeInfoTreesProps) => {\n const treeConfigurations = useMemo(() => TreeWidgetUtil.getTreeConfigurations(completeCaseType), [completeCaseType]);\n const { t } = useTranslation();\n const theme = useTheme();\n\n return (\n <>\n {treeConfigurations.map(treeConfiguration => (\n <Accordion\n key={treeConfiguration.computedId}\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${treeConfiguration.computedId}-content`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${treeConfiguration.computedId}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {`${treeConfiguration.geneticDistanceProtocol.name} - ${treeConfiguration.treeAlgorithm.name}`}\n </AccordionSummary>\n <AccordionDetails>\n <Box\n sx={{\n '& dd': {\n marginLeft: theme.spacing(2),\n },\n '& dl': {\n margin: 0,\n },\n }}\n >\n <TreeDescription\n treeConfiguration={treeConfiguration}\n />\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <strong style={{ fontSize: '1rem' }}>\n {t`Access rights`}\n </strong>\n <CaseTypeInfoColAccessRights\n colId={treeConfiguration.col.id}\n />\n </Box>\n\n </Box>\n </AccordionDetails>\n </Accordion>\n ))}\n </>\n );\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { useTranslation } from 'react-i18next';\nimport uniq from 'lodash/uniq';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\n\nimport { DataService } from '../../../classes/services/DataService';\n\nexport type CaseTypeInfoRegionsProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\n\nexport const CaseTypeInfoRegions = ({ completeCaseType }: CaseTypeInfoRegionsProps) => {\n const { t } = useTranslation();\n\n const regionSetIds = uniq(Object.values(completeCaseType.ref_cols).map(refCol => refCol.region_set_id).filter(x => !!x));\n\n return (\n <>\n {regionSetIds.map(regionSetId => {\n // NOTE: this assumes a complete case type's regions have been loaded before\n const regions = DataService.getInstance().data.regionsByRegionSetId[regionSetId];\n const sortedRegions = regions.toSorted((a, b) => +a.code - +b.code);\n return (\n <Accordion\n key={regionSetId}\n slotProps={{ transition: { timeout: regions.length > 15 ? 0 : undefined, unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${regionSetId}-content`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${regionSetId}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {DataService.getInstance().data.regionSets[regionSetId].name}\n </AccordionSummary>\n <AccordionDetails>\n <Stack\n sx={{\n columnGap: 1,\n direction: 'row',\n flexWrap: 'wrap',\n rowGap: 1,\n }}\n >\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Code`}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '80%' }}>\n {t`Name`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {sortedRegions.map(region => (\n <TableRow key={region.id}>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {region.code}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '80%' }}>\n {region.name}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Stack>\n </AccordionDetails>\n </Accordion>\n );\n })}\n </>\n );\n};\n","import {\n Box,\n Typography,\n useTheme,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport type { WithDialogRenderProps } from '@gen-epix/ui/hoc/withDialog';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { RichTextEditorContent } from '@gen-epix/ui-form/components/fields/RichTextEditor';\n\nimport type { CaseTypeAbacContext } from '../../../context/caseTypeAbac';\nimport { CaseTypeAbacContextProvider } from '../../../context/caseTypeAbac';\nimport {\n useDataCollectionsMapQuery,\n useDataCollectionsQuery,\n} from '../../../dataHooks/useDataCollectionsQuery';\nimport { useDiseasesMapQuery } from '../../../dataHooks/useDiseasesQuery';\nimport { useEtiologicalAgentsMapQuery } from '../../../dataHooks/useEtiologicalAgentsQuery';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\n\nimport { CaseTypeInfoValues } from './CaseTypeInfoValues';\nimport { CaseTypeInfoTrees } from './CaseTypeInfoTrees';\nimport { CaseTypeInfoRegions } from './CaseTypeInfoRegions';\nimport { CaseTypeInfoData } from './CaseTypeInfoData';\nimport { CaseTypeInfoAccessRights } from './CaseTypeInfoAccessRights';\n\nexport type CaseTypeInfoDialogContentProps = Pick<WithDialogRenderProps, 'onPermalinkChange' | 'onTitleChange'>;\n\nexport const CaseTypeInfoDialogContent = ({ onPermalinkChange, onTitleChange }: CaseTypeInfoDialogContentProps) => {\n const { t } = useTranslation();\n const theme = useTheme();\n const diseasesMapQuery = useDiseasesMapQuery();\n const etiologicalAgentsMapQuery = useEtiologicalAgentsMapQuery();\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n const dataCollectionsQuery = useDataCollectionsQuery();\n const loadables = useArray([dataCollectionsMapQuery, dataCollectionsQuery, diseasesMapQuery, etiologicalAgentsMapQuery]);\n\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n\n const getDiseaseName = useCallback((id: string) => {\n if (!id || !diseasesMapQuery.map.has(id)) {\n return undefined;\n }\n const disease = diseasesMapQuery.map.get(id);\n const code = disease.icd_code ? ` (ICD Code: ${disease.icd_code})` : '';\n\n return `${disease.name}${code}`;\n }, [diseasesMapQuery.map]);\n\n const getEtiologicalAgentName = useCallback((id: string) => {\n if (!id || !etiologicalAgentsMapQuery.map.has(id)) {\n return undefined;\n }\n const etiologicalAgent = etiologicalAgentsMapQuery.map.get(id);\n\n return `${etiologicalAgent.name} (${etiologicalAgent.type})`;\n }, [etiologicalAgentsMapQuery.map]);\n\n useEffect(() => {\n onTitleChange(completeCaseType.name);\n }, [completeCaseType.name, onTitleChange]);\n\n useEffect(() => {\n if (completeCaseType) {\n onPermalinkChange(CaseTypeUtil.createCaseTypeLink(completeCaseType, true));\n }\n }, [completeCaseType.name, completeCaseType.id, onPermalinkChange, completeCaseType]);\n\n const caseTypeAbacContextValue = useMemo<CaseTypeAbacContext>(() => {\n return {\n caseTypeAccessAbacDict: completeCaseType.case_type_access_abacs,\n userDataCollections: dataCollectionsQuery.data,\n userDataCollectionsMap: dataCollectionsMapQuery.map,\n };\n }, [completeCaseType.case_type_access_abacs, dataCollectionsMapQuery.map, dataCollectionsQuery.data]);\n\n return (\n <ResponseHandler\n loadables={loadables}\n shouldHideActionButtons\n >\n <CaseTypeAbacContextProvider caseTypeAbac={caseTypeAbacContextValue}>\n <Box\n sx={{\n '& dd': {\n marginLeft: theme.spacing(1),\n },\n '& dl': {\n margin: 0,\n },\n '& dt': {\n fontWeight: 'bold',\n },\n }}\n >\n <Box\n sx={{\n marginBottom: 1,\n }}\n >\n <RichTextEditorContent source={completeCaseType?.description || t`No description available`} />\n </Box>\n <CaseTypeInfoData\n name={getDiseaseName(completeCaseType.disease_id)}\n title={t`Disease`}\n />\n <CaseTypeInfoData\n name={getEtiologicalAgentName(completeCaseType.etiological_agent_id)}\n title={t`Etiological agent`}\n />\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Variables by dimension`}\n </Typography>\n <CaseTypeInfoValues\n completeCaseType={completeCaseType}\n />\n </Box>\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Trees`}\n </Typography>\n <CaseTypeInfoTrees\n completeCaseType={completeCaseType}\n />\n </Box>\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Regions`}\n </Typography>\n <CaseTypeInfoRegions\n completeCaseType={completeCaseType}\n />\n </Box>\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Access rights`}\n </Typography>\n <CaseTypeInfoAccessRights\n completeCaseType={completeCaseType}\n />\n </Box>\n </Box>\n </CaseTypeAbacContextProvider>\n </ResponseHandler>\n );\n};\n","import type { ReactElement } from 'react';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui/hoc/withDialog';\n\nimport { CaseTypeInfoDialogContent } from './CaseTypeInfoDialogContent';\n\n\nexport interface CaseTypeInfoDialogOpenProps {\n //\n}\n\nexport interface CaseTypeInfoDialogProps extends WithDialogRenderProps<CaseTypeInfoDialogOpenProps> {\n //\n}\n\nexport type CaseTypeInfoDialogRefMethods = WithDialogRefMethods<CaseTypeInfoDialogProps, CaseTypeInfoDialogOpenProps>;\n\nexport const CaseTypeInfoDialog = withDialog<CaseTypeInfoDialogProps, CaseTypeInfoDialogOpenProps>((\n {\n onPermalinkChange,\n onTitleChange,\n }: CaseTypeInfoDialogProps,\n): ReactElement => {\n return (\n <CaseTypeInfoDialogContent\n onPermalinkChange={onPermalinkChange}\n onTitleChange={onTitleChange}\n />\n );\n}, {\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'CaseTypeInfoDialog',\n titleVariant: 'h2',\n});\n","import type { ReactElement } from 'react';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui/hoc/withDialog';\n\nimport { DashboardStoreLoader } from '../DashboardStoreLoader';\n\nimport { CaseTypeInfoDialogContent } from './CaseTypeInfoDialogContent';\n\nexport interface CaseTypeInfoDialogWithLoaderOpenProps {\n caseTypeId: string;\n}\n\nexport interface CaseTypeInfoDialogWithLoaderProps extends WithDialogRenderProps<CaseTypeInfoDialogWithLoaderOpenProps> {\n //\n}\n\nexport type CaseTypeInfoDialogWithLoaderRefMethods = WithDialogRefMethods<CaseTypeInfoDialogWithLoaderProps, CaseTypeInfoDialogWithLoaderOpenProps>;\n\nexport const CaseTypeInfoDialogWithLoader = withDialog<CaseTypeInfoDialogWithLoaderProps, CaseTypeInfoDialogWithLoaderOpenProps>((\n {\n onPermalinkChange,\n onTitleChange,\n openProps,\n }: CaseTypeInfoDialogWithLoaderProps,\n): ReactElement => {\n return (\n <DashboardStoreLoader caseTypeId={openProps.caseTypeId}>\n <CaseTypeInfoDialogContent\n onPermalinkChange={onPermalinkChange}\n onTitleChange={onTitleChange}\n />\n </DashboardStoreLoader>\n );\n}, {\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'CaseTypeInfoDialogWithLoader',\n titleVariant: 'h2',\n});\n"],"x_google_ignoreList":[6],"mappings":"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"}
1
+ {"version":3,"file":"CaseTypeInfoDialog.js","names":[],"sources":["../../src/context/caseTypeAbac/CaseTypeAbacContext.tsx","../../src/context/caseTypeAbac/CaseTypeAbacContextProvider.tsx","../../src/context/caseTypeAbac/useCaseTypeAbacContext.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoAccessRights.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoColAccessRights.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoData.tsx","../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isNumber.js","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoVariableDetails.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoValues.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoTrees.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoRegions.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.tsx","../../src/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport type {\n CaseDbCaseTypeAccessAbac,\n CaseDbDataCollection,\n} from '@gen-epix/api-casedb';\n\nexport type CaseTypeAbacContext = {\n caseTypeAccessAbacDict: { [key: string]: CaseDbCaseTypeAccessAbac };\n caseTypeAccessAbacs?: CaseDbCaseTypeAccessAbac[];\n effectiveColumnAccessRights?: Map<string, { read: boolean; write: boolean }>;\n userDataCollections: CaseDbDataCollection[];\n userDataCollectionsMap: Map<string, CaseDbDataCollection>;\n};\n\n// eslint-disable-next-line no-redeclare\nexport const CaseTypeAbacContext = createContext<CaseTypeAbacContext>(null);\n","import { useMemo } from 'react';\nimport type { PropsWithChildren } from 'react';\n\nimport { AbacUtil } from '../../utils/AbacUtil';\n\nimport { CaseTypeAbacContext } from './CaseTypeAbacContext';\n\nexport type CaseTypeAbacContextProviderProps = PropsWithChildren<{\n readonly caseTypeAbac: CaseTypeAbacContext;\n}>;\n\nexport const CaseTypeAbacContextProvider = (\n props: CaseTypeAbacContextProviderProps,\n) => {\n const { caseTypeAbac, children } = props;\n\n const sanitizedCaseAbac = useMemo<CaseTypeAbacContext>(() => {\n const caseTypeAccessAbacs = Object.values(caseTypeAbac.caseTypeAccessAbacDict).filter(x => !!caseTypeAbac.userDataCollectionsMap.get(x.data_collection_id)).sort((a, b) => {\n const aDataCollection = caseTypeAbac.userDataCollectionsMap.get(a.data_collection_id);\n const bDataCollection = caseTypeAbac.userDataCollectionsMap.get(b.data_collection_id);\n return aDataCollection?.name.localeCompare(bDataCollection?.name) ?? 0;\n });\n\n return {\n ...caseTypeAbac,\n caseTypeAccessAbacs,\n effectiveColumnAccessRights: AbacUtil.createEffectieveColumnAccessRights(caseTypeAccessAbacs),\n } satisfies CaseTypeAbacContext;\n }, [caseTypeAbac]);\n\n return (\n <CaseTypeAbacContext value={sanitizedCaseAbac}>\n {children}\n </CaseTypeAbacContext>\n );\n};\n","import { use } from 'react';\n\nimport { CaseTypeAbacContext } from './CaseTypeAbacContext';\n\nexport const useCaseTypeAbacContext = (): CaseTypeAbacContext => use(CaseTypeAbacContext);\n","import { useMemo } from 'react';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport { t } from 'i18next';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\n\nimport { useCaseTypeAbacContext } from '../../../context/caseTypeAbac';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\n\nexport type CaseTypeInfoAccessRightsProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\n\nexport const CaseTypeInfoAccessRights = ({ completeCaseType }: CaseTypeInfoAccessRightsProps) => {\n const cols = useMemo(() => CaseTypeUtil.getCols(completeCaseType), [completeCaseType]);\n const caseTypeAbacContext = useCaseTypeAbacContext();\n\n return (\n <>\n {(caseTypeAbacContext.caseTypeAccessAbacs ?? []).map(caseTypeAccessAbac => {\n const dataCollection = caseTypeAbacContext.userDataCollectionsMap.get(caseTypeAccessAbac.data_collection_id);\n return (\n <Accordion\n key={`${dataCollection.id}`}\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${dataCollection.id}`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${dataCollection.id}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {dataCollection.name}\n </AccordionSummary>\n <AccordionDetails>\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Column`}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Read`}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Write`}\n </TableCell>\n <TableCell sx={{ width: '40%' }} />\n </TableRow>\n </TableHead>\n <TableBody>\n {cols.map(col => {\n return (\n <TableRow key={col.id}>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {col.label}\n </TableCell>\n <TableCell\n sx={{ verticalAlign: 'top', width: '20%' }}\n >\n { caseTypeAccessAbac.read_col_ids.includes(col.id) ? t`Yes` : t`No`}\n </TableCell>\n <TableCell\n sx={{ verticalAlign: 'top', width: '20%' }}\n >\n { caseTypeAccessAbac.write_col_ids.includes(col.id) ? t`Yes` : t`No`}\n </TableCell>\n <TableCell sx={{ width: '40%' }} />\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </AccordionDetails>\n </Accordion>\n );\n })}\n </>\n );\n};\n","import type { ReactNode } from 'react';\nimport {\n Fragment,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport {\n Box,\n Button,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nimport { useCaseTypeAbacContext } from '../../../context/caseTypeAbac';\n\nexport type CaseTypeInfoColAccessRightsProps = {\n readonly colId: string;\n};\n\ntype DataCollectionAccess = {\n readonly dataCollectionId: string;\n readonly dataCollectionName: string;\n readonly hasReadAccess: boolean;\n readonly hasWriteAccess: boolean;\n};\n\nconst MAX_ITEMS = 5;\n\nexport const CaseTypeInfoColAccessRights = ({ colId }: CaseTypeInfoColAccessRightsProps) => {\n const { t } = useTranslation();\n const caseTypeAbacContext = useCaseTypeAbacContext();\n const [shouldShowMore, setShouldShowMore] = useState(false);\n\n const onShowMoreButtonClick = useCallback(() => {\n setShouldShowMore(true);\n }, []);\n\n const dataCollectionAccesses = useMemo<DataCollectionAccess[]>(() => {\n const x: DataCollectionAccess[] = [];\n caseTypeAbacContext.caseTypeAccessAbacs.forEach(caseTypeAccessAbac => {\n const dataCollection = caseTypeAbacContext.userDataCollectionsMap.get(caseTypeAccessAbac.data_collection_id);\n const hasWriteAccess = caseTypeAccessAbac.write_col_ids.includes(colId);\n const hasReadAccess = caseTypeAccessAbac.read_col_ids.includes(colId);\n if (hasWriteAccess || hasReadAccess) {\n x.push({\n dataCollectionId: dataCollection.id,\n dataCollectionName: dataCollection.name,\n hasReadAccess,\n hasWriteAccess,\n });\n }\n });\n return x;\n }, [caseTypeAbacContext.caseTypeAccessAbacs, caseTypeAbacContext.userDataCollectionsMap, colId]);\n\n const canRead = caseTypeAbacContext.effectiveColumnAccessRights.get(colId)?.read;\n const canWrite = caseTypeAbacContext.effectiveColumnAccessRights.get(colId)?.write;\n let effectiveRightLabel;\n if (canRead && canWrite) {\n effectiveRightLabel = t`read/write`;\n } else if (canRead) {\n effectiveRightLabel = t`read`;\n } else if (canWrite) {\n effectiveRightLabel = t`write`;\n } else {\n effectiveRightLabel = t`no access`;\n }\n\n return (\n <Box>\n <Box\n sx={{\n marginBottom: 1,\n }}\n >\n <Box>\n {t('Effective rights: {{effectiveRightLabel}}', { effectiveRightLabel })}\n </Box>\n </Box>\n <Box>\n {dataCollectionAccesses.slice(0, shouldShowMore ? undefined : MAX_ITEMS).map(dataCollectionAccess => {\n let element: ReactNode;\n if (dataCollectionAccess.hasWriteAccess && dataCollectionAccess.hasReadAccess) {\n element = (\n <>\n {t('{{dataCollectionName}}: read/write', { dataCollectionName: dataCollectionAccess.dataCollectionName })}\n </>\n );\n } else if (dataCollectionAccess.hasWriteAccess) {\n element = (\n <>\n {t('{{dataCollectionName}}: write', { dataCollectionName: dataCollectionAccess.dataCollectionName })}\n </>\n );\n } else if (dataCollectionAccess.hasReadAccess) {\n element = (\n <>\n {t('{{dataCollectionName}}: read', { dataCollectionName: dataCollectionAccess.dataCollectionName })}\n </>\n );\n }\n return (\n <Fragment key={dataCollectionAccess.dataCollectionId}>\n <Box>\n {element}\n </Box>\n </Fragment>\n );\n })}\n {dataCollectionAccesses.length > MAX_ITEMS && !shouldShowMore && (\n <Button\n onClick={onShowMoreButtonClick}\n size={'small'}\n variant={'text'}\n >\n {t('Show more')}\n </Button>\n )}\n </Box>\n </Box>\n );\n};\n","import {\n Box,\n Typography,\n} from '@mui/material';\nimport { t } from 'i18next';\n\nexport type CaseTypeInfoDataProps = {\n readonly name: string;\n readonly title: string;\n};\n\nexport const CaseTypeInfoData = ({ name, title }: CaseTypeInfoDataProps) => {\n return (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Typography\n component={'h4'}\n variant={'h4'}\n >\n {title}\n </Typography>\n <Typography\n component={'p'}\n variant={'body1'}\n >\n {name && (\n <>\n {name}\n </>\n )}\n {!name && (\n <>\n {t`Not applicable`}\n </>\n )}\n </Typography>\n </Box>\n );\n};\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","import { useTranslation } from 'react-i18next';\nimport {\n Box,\n Chip,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from '@mui/material';\nimport isNumber from 'lodash/isNumber';\nimport type {\n CaseDbCompleteCaseType,\n CaseDbDim,\n} from '@gen-epix/api-casedb';\nimport { CaseDbColType } from '@gen-epix/api-casedb';\n\nimport { DataService } from '../../../classes/services/DataService';\n\nimport { CaseTypeInfoColAccessRights } from './CaseTypeInfoColAccessRights';\n\nexport type CaseTypeInfoVariableDetailsProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n readonly dim: CaseDbDim;\n};\n\nexport const CaseTypeInfoVariableDetails = ({ completeCaseType, dim }: CaseTypeInfoVariableDetailsProps) => {\n const { t } = useTranslation();\n const cols = completeCaseType.ordered_col_ids_by_dim[dim.id].map(x => completeCaseType.cols[x]);\n\n return (\n <>\n <Typography\n component={'p'}\n sx={{\n marginBottom: 2,\n }}\n >\n {dim.description}\n </Typography>\n <Table\n aria-label={t('Table describing columns inside {{dimensionCode}}', { dimensionCode: dim.code }).toString()}\n size={'small'}\n >\n <TableHead>\n <TableRow>\n <TableCell sx={{ width: '15%' }}>\n {t`Column`}\n </TableCell>\n <TableCell sx={{ width: '30%' }}>\n {t`Description`}\n </TableCell>\n <TableCell sx={{ width: '15%' }}>\n {t`Type`}\n </TableCell>\n <TableCell sx={{ width: '20%' }}>\n {t`Constraints`}\n </TableCell>\n <TableCell sx={{ width: '20%' }}>\n {t`Access rights`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {cols.filter(col => {\n // filter out columns that are of type GENETIC_DISTANCE\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return refCol.col_type !== CaseDbColType.GENETIC_DISTANCE;\n }).map(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return (\n <TableRow key={col.id}>\n <TableCell sx={{ verticalAlign: 'top', width: '15%' }}>\n {col.code}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '30%' }}>\n {refCol.description}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '15%' }}>\n {refCol.col_type}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {([\n CaseDbColType.DECIMAL_0,\n CaseDbColType.DECIMAL_1,\n CaseDbColType.DECIMAL_2,\n CaseDbColType.DECIMAL_3,\n CaseDbColType.DECIMAL_4,\n CaseDbColType.DECIMAL_5,\n CaseDbColType.DECIMAL_6,\n ] as CaseDbColType[]).includes(refCol.col_type) && (isNumber(col.min_value) || isNumber(col.max_value)) && (\n <>\n {t('min: {{min}}; max: {{max}}', { max: col.max_value, min: col.min_value })}\n </>\n )}\n {([\n CaseDbColType.TIME_DAY,\n CaseDbColType.TIME_MONTH,\n CaseDbColType.TIME_QUARTER,\n CaseDbColType.TIME_WEEK,\n CaseDbColType.TIME_YEAR,\n ] as CaseDbColType[]).includes(refCol.col_type) && (col.min_datetime || col.max_datetime) && (\n <>\n {t('from: {{from}}; to: {{to}}', { from: col.min_datetime ?? '-', to: col.max_datetime ?? '-' })}\n </>\n )}\n {refCol.col_type === CaseDbColType.TEXT && col.max_length && (\n <>\n {t('Max length: {{maxLength}}', { maxLength: col.max_length })}\n </>\n )}\n {refCol.col_type === CaseDbColType.GEO_REGION && refCol.region_set_id && (\n <>\n {DataService.getInstance().data.regionSets[refCol.region_set_id].name}\n </>\n )}\n {([CaseDbColType.NOMINAL, CaseDbColType.ORDINAL] as CaseDbColType[]).includes(refCol.col_type) && refCol.concept_set_id && DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id] && (\n <Box\n sx={{\n maxWidth: '100%',\n }}\n >\n <Stack\n sx={{\n columnGap: 1,\n direction: 'row',\n flexWrap: 'wrap',\n rowGap: 1,\n }}\n >\n {DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id].map(concept => (\n <Chip\n key={concept.id}\n label={`${concept.name} (${concept.code})`}\n />\n ))}\n </Stack>\n </Box>\n )}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n <CaseTypeInfoColAccessRights\n colId={col.id}\n />\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </>\n );\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\nimport { CaseDbDimType } from '@gen-epix/api-casedb';\n\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\n\nimport { CaseTypeInfoVariableDetails } from './CaseTypeInfoVariableDetails';\n\nexport type CaseTypeInfoValuesProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\n\nexport const CaseTypeInfoValues = ({ completeCaseType }: CaseTypeInfoValuesProps) => {\n return (\n <>\n {completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).filter(dim => {\n // Filter out dimensions that only include genetic distance columns\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n if (refDim.dim_type !== CaseDbDimType.OTHER) {\n return true;\n }\n const cols = CaseTypeUtil.getCols(completeCaseType, dim.id);\n const colTypes = cols.map(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return refCol.col_type;\n });\n return !colTypes.every(colType => colType === 'GENETIC_DISTANCE');\n }).map(dim => {\n\n return (\n <Accordion\n key={`${dim.id}-${dim.occurrence ?? 0}`}\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${dim.code}-${dim.occurrence ?? 0}-content`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${dim.code}-${dim.occurrence ?? 0}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {CaseTypeUtil.getDimLabel(completeCaseType, dim.id)}\n </AccordionSummary>\n <AccordionDetails>\n <CaseTypeInfoVariableDetails\n completeCaseType={completeCaseType}\n dim={dim}\n />\n </AccordionDetails>\n </Accordion>\n );\n })}\n </>\n );\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n useTheme,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\n\nimport { TreeDescription } from '../TreeDescription';\nimport { TreeWidgetUtil } from '../../../utils/TreeWidgetUtil';\n\nimport { CaseTypeInfoColAccessRights } from './CaseTypeInfoColAccessRights';\n\n\nexport type CaseTypeInfoTreesProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\nexport const CaseTypeInfoTrees = ({ completeCaseType }: CaseTypeInfoTreesProps) => {\n const treeConfigurations = useMemo(() => TreeWidgetUtil.getTreeConfigurations(completeCaseType), [completeCaseType]);\n const { t } = useTranslation();\n const theme = useTheme();\n\n return (\n <>\n {treeConfigurations.map(treeConfiguration => (\n <Accordion\n key={treeConfiguration.computedId}\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${treeConfiguration.computedId}-content`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${treeConfiguration.computedId}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {`${treeConfiguration.geneticDistanceProtocol.name} - ${treeConfiguration.treeAlgorithm.name}`}\n </AccordionSummary>\n <AccordionDetails>\n <Box\n sx={{\n '& dd': {\n marginLeft: theme.spacing(2),\n },\n '& dl': {\n margin: 0,\n },\n }}\n >\n <TreeDescription\n treeConfiguration={treeConfiguration}\n />\n <Box\n sx={{\n marginY: 1,\n }}\n >\n <strong style={{ fontSize: '1rem' }}>\n {t`Access rights`}\n </strong>\n <CaseTypeInfoColAccessRights\n colId={treeConfiguration.col.id}\n />\n </Box>\n\n </Box>\n </AccordionDetails>\n </Accordion>\n ))}\n </>\n );\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport { useTranslation } from 'react-i18next';\nimport uniq from 'lodash/uniq';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\n\nimport { DataService } from '../../../classes/services/DataService';\n\nexport type CaseTypeInfoRegionsProps = {\n readonly completeCaseType: CaseDbCompleteCaseType;\n};\n\nexport const CaseTypeInfoRegions = ({ completeCaseType }: CaseTypeInfoRegionsProps) => {\n const { t } = useTranslation();\n\n const regionSetIds = uniq(Object.values(completeCaseType.ref_cols).map(refCol => refCol.region_set_id).filter(x => !!x));\n\n return (\n <>\n {regionSetIds.map(regionSetId => {\n // NOTE: this assumes a complete case type's regions have been loaded before\n const regions = DataService.getInstance().data.regionsByRegionSetId[regionSetId];\n const sortedRegions = regions.toSorted((a, b) => +a.code - +b.code);\n return (\n <Accordion\n key={regionSetId}\n slotProps={{ transition: { timeout: regions.length > 15 ? 0 : undefined, unmountOnExit: true } }}\n >\n <AccordionSummary\n aria-controls={`panel-${regionSetId}-content`}\n expandIcon={<ExpandMoreIcon />}\n id={`panel-${regionSetId}-header`}\n sx={{\n fontWeight: 'bold',\n }}\n >\n {DataService.getInstance().data.regionSets[regionSetId].name}\n </AccordionSummary>\n <AccordionDetails>\n <Stack\n sx={{\n columnGap: 1,\n direction: 'row',\n flexWrap: 'wrap',\n rowGap: 1,\n }}\n >\n <Table size={'small'}>\n <TableHead>\n <TableRow>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {t`Code`}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '80%' }}>\n {t`Name`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {sortedRegions.map(region => (\n <TableRow key={region.id}>\n <TableCell sx={{ verticalAlign: 'top', width: '20%' }}>\n {region.code}\n </TableCell>\n <TableCell sx={{ verticalAlign: 'top', width: '80%' }}>\n {region.name}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Stack>\n </AccordionDetails>\n </Accordion>\n );\n })}\n </>\n );\n};\n","import {\n Box,\n Typography,\n useTheme,\n} from '@mui/material';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport type { WithDialogRenderProps } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { RichTextEditorContent } from '@gen-epix/ui-core-form/components/fields/RichTextEditor';\n\nimport type { CaseTypeAbacContext } from '../../../context/caseTypeAbac';\nimport { CaseTypeAbacContextProvider } from '../../../context/caseTypeAbac';\nimport {\n useDataCollectionsMapQuery,\n useDataCollectionsQuery,\n} from '../../../dataHooks/useDataCollectionsQuery';\nimport { useDiseasesMapQuery } from '../../../dataHooks/useDiseasesQuery';\nimport { useEtiologicalAgentsMapQuery } from '../../../dataHooks/useEtiologicalAgentsQuery';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\n\nimport { CaseTypeInfoValues } from './CaseTypeInfoValues';\nimport { CaseTypeInfoTrees } from './CaseTypeInfoTrees';\nimport { CaseTypeInfoRegions } from './CaseTypeInfoRegions';\nimport { CaseTypeInfoData } from './CaseTypeInfoData';\nimport { CaseTypeInfoAccessRights } from './CaseTypeInfoAccessRights';\n\nexport type CaseTypeInfoDialogContentProps = Pick<WithDialogRenderProps, 'onPermalinkChange' | 'onTitleChange'>;\n\nexport const CaseTypeInfoDialogContent = ({ onPermalinkChange, onTitleChange }: CaseTypeInfoDialogContentProps) => {\n const { t } = useTranslation();\n const theme = useTheme();\n const diseasesMapQuery = useDiseasesMapQuery();\n const etiologicalAgentsMapQuery = useEtiologicalAgentsMapQuery();\n const dataCollectionsMapQuery = useDataCollectionsMapQuery();\n const dataCollectionsQuery = useDataCollectionsQuery();\n const loadables = useArray([dataCollectionsMapQuery, dataCollectionsQuery, diseasesMapQuery, etiologicalAgentsMapQuery]);\n\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n\n const getDiseaseName = useCallback((id: string) => {\n if (!id || !diseasesMapQuery.map.has(id)) {\n return undefined;\n }\n const disease = diseasesMapQuery.map.get(id);\n const code = disease.icd_code ? ` (ICD Code: ${disease.icd_code})` : '';\n\n return `${disease.name}${code}`;\n }, [diseasesMapQuery.map]);\n\n const getEtiologicalAgentName = useCallback((id: string) => {\n if (!id || !etiologicalAgentsMapQuery.map.has(id)) {\n return undefined;\n }\n const etiologicalAgent = etiologicalAgentsMapQuery.map.get(id);\n\n return `${etiologicalAgent.name} (${etiologicalAgent.type})`;\n }, [etiologicalAgentsMapQuery.map]);\n\n useEffect(() => {\n onTitleChange(completeCaseType.name);\n }, [completeCaseType.name, onTitleChange]);\n\n useEffect(() => {\n if (completeCaseType) {\n onPermalinkChange(CaseTypeUtil.createCaseTypeLink(completeCaseType, true));\n }\n }, [completeCaseType.name, completeCaseType.id, onPermalinkChange, completeCaseType]);\n\n const caseTypeAbacContextValue = useMemo<CaseTypeAbacContext>(() => {\n return {\n caseTypeAccessAbacDict: completeCaseType.case_type_access_abacs,\n userDataCollections: dataCollectionsQuery.data,\n userDataCollectionsMap: dataCollectionsMapQuery.map,\n };\n }, [completeCaseType.case_type_access_abacs, dataCollectionsMapQuery.map, dataCollectionsQuery.data]);\n\n return (\n <ResponseHandler\n loadables={loadables}\n shouldHideActionButtons\n >\n <CaseTypeAbacContextProvider caseTypeAbac={caseTypeAbacContextValue}>\n <Box\n sx={{\n '& dd': {\n marginLeft: theme.spacing(1),\n },\n '& dl': {\n margin: 0,\n },\n '& dt': {\n fontWeight: 'bold',\n },\n }}\n >\n <Box\n sx={{\n marginBottom: 1,\n }}\n >\n <RichTextEditorContent source={completeCaseType?.description || t`No description available`} />\n </Box>\n <CaseTypeInfoData\n name={getDiseaseName(completeCaseType.disease_id)}\n title={t`Disease`}\n />\n <CaseTypeInfoData\n name={getEtiologicalAgentName(completeCaseType.etiological_agent_id)}\n title={t`Etiological agent`}\n />\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Variables by dimension`}\n </Typography>\n <CaseTypeInfoValues\n completeCaseType={completeCaseType}\n />\n </Box>\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Trees`}\n </Typography>\n <CaseTypeInfoTrees\n completeCaseType={completeCaseType}\n />\n </Box>\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Regions`}\n </Typography>\n <CaseTypeInfoRegions\n completeCaseType={completeCaseType}\n />\n </Box>\n <Box\n sx={{\n marginY: 3,\n }}\n >\n <Typography\n component={'h4'}\n sx={{\n marginY: 1,\n }}\n variant={'h4'}\n >\n {t`Access rights`}\n </Typography>\n <CaseTypeInfoAccessRights\n completeCaseType={completeCaseType}\n />\n </Box>\n </Box>\n </CaseTypeAbacContextProvider>\n </ResponseHandler>\n );\n};\n","import type { ReactElement } from 'react';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\n\nimport { CaseTypeInfoDialogContent } from './CaseTypeInfoDialogContent';\n\n\nexport interface CaseTypeInfoDialogOpenProps {\n //\n}\n\nexport interface CaseTypeInfoDialogProps extends WithDialogRenderProps<CaseTypeInfoDialogOpenProps> {\n //\n}\n\nexport type CaseTypeInfoDialogRefMethods = WithDialogRefMethods<CaseTypeInfoDialogProps, CaseTypeInfoDialogOpenProps>;\n\nexport const CaseTypeInfoDialog = withDialog<CaseTypeInfoDialogProps, CaseTypeInfoDialogOpenProps>((\n {\n onPermalinkChange,\n onTitleChange,\n }: CaseTypeInfoDialogProps,\n): ReactElement => {\n return (\n <CaseTypeInfoDialogContent\n onPermalinkChange={onPermalinkChange}\n onTitleChange={onTitleChange}\n />\n );\n}, {\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'CaseTypeInfoDialog',\n titleVariant: 'h2',\n});\n","import type { ReactElement } from 'react';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\n\nimport { DashboardStoreLoader } from '../DashboardStoreLoader';\n\nimport { CaseTypeInfoDialogContent } from './CaseTypeInfoDialogContent';\n\nexport interface CaseTypeInfoDialogWithLoaderOpenProps {\n caseTypeId: string;\n}\n\nexport interface CaseTypeInfoDialogWithLoaderProps extends WithDialogRenderProps<CaseTypeInfoDialogWithLoaderOpenProps> {\n //\n}\n\nexport type CaseTypeInfoDialogWithLoaderRefMethods = WithDialogRefMethods<CaseTypeInfoDialogWithLoaderProps, CaseTypeInfoDialogWithLoaderOpenProps>;\n\nexport const CaseTypeInfoDialogWithLoader = withDialog<CaseTypeInfoDialogWithLoaderProps, CaseTypeInfoDialogWithLoaderOpenProps>((\n {\n onPermalinkChange,\n onTitleChange,\n openProps,\n }: CaseTypeInfoDialogWithLoaderProps,\n): ReactElement => {\n return (\n <DashboardStoreLoader caseTypeId={openProps.caseTypeId}>\n <CaseTypeInfoDialogContent\n onPermalinkChange={onPermalinkChange}\n onTitleChange={onTitleChange}\n />\n </DashboardStoreLoader>\n );\n}, {\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'CaseTypeInfoDialogWithLoader',\n titleVariant: 'h2',\n});\n"],"x_google_ignoreList":[6],"mappings":"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"}
@@ -7,17 +7,17 @@ import { useCaseSetStatusMapQuery as a } from "../dataHooks/useCaseSetStatusesQu
7
7
  import { CaseSummary as o } from "../components/ui/CaseSummary/index.js";
8
8
  import { t as s } from "i18next";
9
9
  import { CaseDbCaseApi as c, CaseDbLogLevel as l } from "@gen-epix/api-casedb";
10
- import { QueryClientService as u } from "@gen-epix/ui/classes/services/QueryClientService";
10
+ import { QueryClientService as u } from "@gen-epix/ui-client-common/classes/services/QueryClientService";
11
11
  import { Alert as d, AlertTitle as f, Link as p, Table as m, TableBody as h, TableCell as g, TableHead as _, TableRow as v, useTheme as y } from "@mui/material";
12
12
  import { useCallback as b, useMemo as x, useRef as S } from "react";
13
13
  import { useTranslation as C } from "react-i18next";
14
14
  import { jsx as w, jsxs as T } from "react/jsx-runtime";
15
- import { LogService as E } from "@gen-epix/ui/classes/services/LogService";
16
- import { ResponseHandler as D } from "@gen-epix/ui/components/ui/ResponseHandler";
15
+ import { LogService as E } from "@gen-epix/ui-client-common/classes/services/LogService";
16
+ import { ResponseHandler as D } from "@gen-epix/ui-client-common/components/ui/ResponseHandler";
17
17
  import { useArray as O } from "@gen-epix/ui-core/hooks/useArray";
18
- import { useQueryMemo as k } from "@gen-epix/ui/hooks/useQueryMemo";
19
- import { Confirmation as A } from "@gen-epix/ui/components/ui/Confirmation";
20
- import { RouterService as j } from "@gen-epix/ui/classes/services/RouterService";
18
+ import { useQueryMemo as k } from "@gen-epix/ui-client-common/hooks/useQueryMemo";
19
+ import { Confirmation as A } from "@gen-epix/ui-core-components/components/Confirmation";
20
+ import { RouterService as j } from "@gen-epix/ui-client-common/classes/services/RouterService";
21
21
  //#region src/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarningCaseSetLink.tsx
22
22
  var M = /* @__PURE__ */ e(t(), 1), N = ({ caseSet: e }) => {
23
23
  let t = i(), n = a(), o = O([t, n]), c = S(null), l = b(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"CasesAlreadyInCaseSetWarning.js","names":[],"sources":["../../src/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarningCaseSetLink.tsx","../../src/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarning.tsx"],"sourcesContent":["import { Link } from '@mui/material';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport { t } from 'i18next';\nimport type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui/components/ui/Confirmation';\nimport { Confirmation } from '@gen-epix/ui/components/ui/Confirmation';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { RouterService } from '@gen-epix/ui/classes/services/RouterService';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useCaseSetCategoryMapQuery } from '../../../dataHooks/useCaseSetCategoriesQuery';\nimport { useCaseSetStatusMapQuery } from '../../../dataHooks/useCaseSetStatusesQuery';\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\n\n\nexport type CasesAlreadyInCaseSetWarningCaseSetLinkProps = {\n readonly caseSet: CaseDbCaseSet;\n};\n\nexport const CasesAlreadyInCaseSetWarningCaseSetLink = ({ caseSet }: CasesAlreadyInCaseSetWarningCaseSetLinkProps) => {\n const caseSetCategoryMapQuery = useCaseSetCategoryMapQuery();\n const caseSetStatusMapQuery = useCaseSetStatusMapQuery();\n const loadables = useArray([caseSetCategoryMapQuery, caseSetStatusMapQuery]);\n const confirmationRef = useRef<ConfirmationRefMethods>(null);\n\n const onLinkClick = useCallback(() => {\n confirmationRef.current?.open();\n }, []);\n\n const onConfirm = useCallback(async () => {\n await RouterService.getInstance().router.navigate(CaseSetUtil.createCaseSetLink(caseSet));\n }, [caseSet]);\n\n\n return (\n <ResponseHandler\n loadables={loadables}\n shouldHideActionButtons\n >\n <Link\n color={'primary'}\n href={'#'}\n onClick={onLinkClick}\n sx={{\n display: 'table',\n }}\n >\n {`${caseSet.name} (${caseSetCategoryMapQuery.map.get(caseSet.case_set_category_id)?.name}, ${caseSetStatusMapQuery.map.get(caseSet.case_set_status_id)?.name})`}\n </Link>\n <Confirmation\n body={t('This will navigate to the \"{{caseSetName}}\"-event. You will loose your current selection of cases and all applied filters. Do you want to continue?', { caseSetName: caseSet.name })}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Continue`}\n onConfirm={onConfirm}\n ref={confirmationRef}\n title={t('Do you want to navigate to the \"{{caseSetName}}\"-event?', { caseSetName: caseSet.name })}\n />\n </ResponseHandler>\n );\n};\n","import {\n Alert,\n AlertTitle,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n useTheme,\n} from '@mui/material';\nimport uniq from 'lodash/uniq';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type {\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbTypedUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbLogLevel,\n} from '@gen-epix/api-casedb';\nimport { LogService } from '@gen-epix/ui/classes/services/LogService';\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';\n\nimport { CaseSummary } from '../CaseSummary';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { CasesAlreadyInCaseSetWarningCaseSetLink } from './CasesAlreadyInCaseSetWarningCaseSetLink';\n\nexport type CasesAlreadyInCaseSetWarningProps = {\n readonly cases: CaseDbCase[];\n};\n\nexport const CasesAlreadyInCaseSetWarning = ({ cases }: CasesAlreadyInCaseSetWarningProps) => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n // Load all case set members for the given cases\n const caseSetMembersFilter = useMemo<CaseDbTypedUuidSetFilter>(() => {\n return {\n invert: false,\n key: 'case_id',\n members: cases?.map(row => row.id) ?? [],\n type: 'UUID_SET',\n };\n }, [cases]);\n const { data: caseSetMembers, error: caseSetMembersError, isLoading: isCaseSetMembersLoading } = useQueryMemo({\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetMembersPostQuery(caseSetMembersFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SET_MEMBERS, caseSetMembersFilter),\n });\n\n // Load all case sets for the given case set members\n const existingCaseSetsFilter = useMemo<CaseDbTypedUuidSetFilter>(() => {\n return {\n invert: false,\n key: 'id',\n members: uniq((caseSetMembers ?? []).map(x => x.case_set_id)) ?? [],\n type: 'UUID_SET',\n };\n }, [caseSetMembers]);\n const { data: caseSets, error: caseSetsError, isLoading: isCaseSetsLoading } = useQueryMemo({\n enabled: existingCaseSetsFilter.members.length > 0,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetsPostQuery(existingCaseSetsFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS, existingCaseSetsFilter),\n });\n\n const caseSetsByCase = useMemo(() => {\n const map = new Map<CaseDbCase, CaseDbCaseSet[]>();\n if (!caseSets || !caseSetMembers) {\n return map;\n }\n\n caseSetMembers?.forEach(member => {\n const caseItem = cases.find(x => x.id === member.case_id);\n const caseSetItem = caseSets.find(x => x.id === member.case_set_id);\n if (!caseItem || !caseSetItem) {\n LogService.getInstance().log([\n {\n detail: member,\n level: CaseDbLogLevel.DEBUG,\n topic: 'MISSING_CASE_OR_CASE_SET',\n },\n ]);\n return;\n }\n if (!map.has(caseItem)) {\n map.set(caseItem, []);\n }\n map.get(caseItem).push(caseSetItem);\n });\n return map;\n }, [caseSets, caseSetMembers, cases]);\n\n return (\n <ResponseHandler\n error={caseSetMembersError || caseSetsError}\n isLoading={isCaseSetMembersLoading || isCaseSetsLoading}\n shouldHideActionButtons\n >\n {caseSetsByCase.size > 0 && (\n <Alert\n severity={'warning'}\n slotProps={{\n message: {\n sx: {\n flexGrow: 1,\n },\n },\n }}\n >\n <AlertTitle\n sx={{\n width: '100%',\n }}\n >\n {t('{{numCases}} selected case(s) are already part of other event(s):', { numCases: caseSetsByCase.size })}\n </AlertTitle>\n <Table\n size={'small'}\n sx={{\n width: '100%',\n }}\n >\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: '50%',\n }}\n >\n {t`Case`}\n </TableCell>\n <TableCell\n sx={{\n width: '50%',\n }}\n >\n {t`Events`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {(Array.from(caseSetsByCase) ?? []).map(([caseItem, caseItemCaseSets]) => {\n return (\n <TableRow key={caseItem.id}>\n <TableCell\n sx={{\n verticalAlign: 'top',\n width: '50%',\n }}\n >\n <CaseSummary\n caseDbCase={caseItem}\n />\n </TableCell>\n <TableCell\n sx={{\n '& :nth-of-type(2)': {\n marginTop: theme.spacing(1),\n },\n verticalAlign: 'top',\n width: '50%',\n }}\n >\n {caseItemCaseSets.sort((a, b) => a.name.localeCompare(b.name)).map(caseItemCaseSet => (\n <CasesAlreadyInCaseSetWarningCaseSetLink\n caseSet={caseItemCaseSet}\n key={caseItemCaseSet.id}\n />\n ))}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </Alert>\n )}\n </ResponseHandler>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"CasesAlreadyInCaseSetWarning.js","names":[],"sources":["../../src/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarningCaseSetLink.tsx","../../src/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarning.tsx"],"sourcesContent":["import { Link } from '@mui/material';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport { t } from 'i18next';\nimport type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui-core-components/components/Confirmation';\nimport { Confirmation } from '@gen-epix/ui-core-components/components/Confirmation';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { RouterService } from '@gen-epix/ui-client-common/classes/services/RouterService';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useCaseSetCategoryMapQuery } from '../../../dataHooks/useCaseSetCategoriesQuery';\nimport { useCaseSetStatusMapQuery } from '../../../dataHooks/useCaseSetStatusesQuery';\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\n\n\nexport type CasesAlreadyInCaseSetWarningCaseSetLinkProps = {\n readonly caseSet: CaseDbCaseSet;\n};\n\nexport const CasesAlreadyInCaseSetWarningCaseSetLink = ({ caseSet }: CasesAlreadyInCaseSetWarningCaseSetLinkProps) => {\n const caseSetCategoryMapQuery = useCaseSetCategoryMapQuery();\n const caseSetStatusMapQuery = useCaseSetStatusMapQuery();\n const loadables = useArray([caseSetCategoryMapQuery, caseSetStatusMapQuery]);\n const confirmationRef = useRef<ConfirmationRefMethods>(null);\n\n const onLinkClick = useCallback(() => {\n confirmationRef.current?.open();\n }, []);\n\n const onConfirm = useCallback(async () => {\n await RouterService.getInstance().router.navigate(CaseSetUtil.createCaseSetLink(caseSet));\n }, [caseSet]);\n\n\n return (\n <ResponseHandler\n loadables={loadables}\n shouldHideActionButtons\n >\n <Link\n color={'primary'}\n href={'#'}\n onClick={onLinkClick}\n sx={{\n display: 'table',\n }}\n >\n {`${caseSet.name} (${caseSetCategoryMapQuery.map.get(caseSet.case_set_category_id)?.name}, ${caseSetStatusMapQuery.map.get(caseSet.case_set_status_id)?.name})`}\n </Link>\n <Confirmation\n body={t('This will navigate to the \"{{caseSetName}}\"-event. You will loose your current selection of cases and all applied filters. Do you want to continue?', { caseSetName: caseSet.name })}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Continue`}\n onConfirm={onConfirm}\n ref={confirmationRef}\n title={t('Do you want to navigate to the \"{{caseSetName}}\"-event?', { caseSetName: caseSet.name })}\n />\n </ResponseHandler>\n );\n};\n","import {\n Alert,\n AlertTitle,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n useTheme,\n} from '@mui/material';\nimport uniq from 'lodash/uniq';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type {\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbTypedUuidSetFilter,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbLogLevel,\n} from '@gen-epix/api-casedb';\nimport { LogService } from '@gen-epix/ui-client-common/classes/services/LogService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\n\nimport { CaseSummary } from '../CaseSummary';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { CasesAlreadyInCaseSetWarningCaseSetLink } from './CasesAlreadyInCaseSetWarningCaseSetLink';\n\nexport type CasesAlreadyInCaseSetWarningProps = {\n readonly cases: CaseDbCase[];\n};\n\nexport const CasesAlreadyInCaseSetWarning = ({ cases }: CasesAlreadyInCaseSetWarningProps) => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n // Load all case set members for the given cases\n const caseSetMembersFilter = useMemo<CaseDbTypedUuidSetFilter>(() => {\n return {\n invert: false,\n key: 'case_id',\n members: cases?.map(row => row.id) ?? [],\n type: 'UUID_SET',\n };\n }, [cases]);\n const { data: caseSetMembers, error: caseSetMembersError, isLoading: isCaseSetMembersLoading } = useQueryMemo({\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetMembersPostQuery(caseSetMembersFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SET_MEMBERS, caseSetMembersFilter),\n });\n\n // Load all case sets for the given case set members\n const existingCaseSetsFilter = useMemo<CaseDbTypedUuidSetFilter>(() => {\n return {\n invert: false,\n key: 'id',\n members: uniq((caseSetMembers ?? []).map(x => x.case_set_id)) ?? [],\n type: 'UUID_SET',\n };\n }, [caseSetMembers]);\n const { data: caseSets, error: caseSetsError, isLoading: isCaseSetsLoading } = useQueryMemo({\n enabled: existingCaseSetsFilter.members.length > 0,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetsPostQuery(existingCaseSetsFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS, existingCaseSetsFilter),\n });\n\n const caseSetsByCase = useMemo(() => {\n const map = new Map<CaseDbCase, CaseDbCaseSet[]>();\n if (!caseSets || !caseSetMembers) {\n return map;\n }\n\n caseSetMembers?.forEach(member => {\n const caseItem = cases.find(x => x.id === member.case_id);\n const caseSetItem = caseSets.find(x => x.id === member.case_set_id);\n if (!caseItem || !caseSetItem) {\n LogService.getInstance().log([\n {\n detail: member,\n level: CaseDbLogLevel.DEBUG,\n topic: 'MISSING_CASE_OR_CASE_SET',\n },\n ]);\n return;\n }\n if (!map.has(caseItem)) {\n map.set(caseItem, []);\n }\n map.get(caseItem).push(caseSetItem);\n });\n return map;\n }, [caseSets, caseSetMembers, cases]);\n\n return (\n <ResponseHandler\n error={caseSetMembersError || caseSetsError}\n isLoading={isCaseSetMembersLoading || isCaseSetsLoading}\n shouldHideActionButtons\n >\n {caseSetsByCase.size > 0 && (\n <Alert\n severity={'warning'}\n slotProps={{\n message: {\n sx: {\n flexGrow: 1,\n },\n },\n }}\n >\n <AlertTitle\n sx={{\n width: '100%',\n }}\n >\n {t('{{numCases}} selected case(s) are already part of other event(s):', { numCases: caseSetsByCase.size })}\n </AlertTitle>\n <Table\n size={'small'}\n sx={{\n width: '100%',\n }}\n >\n <TableHead>\n <TableRow>\n <TableCell\n sx={{\n width: '50%',\n }}\n >\n {t`Case`}\n </TableCell>\n <TableCell\n sx={{\n width: '50%',\n }}\n >\n {t`Events`}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {(Array.from(caseSetsByCase) ?? []).map(([caseItem, caseItemCaseSets]) => {\n return (\n <TableRow key={caseItem.id}>\n <TableCell\n sx={{\n verticalAlign: 'top',\n width: '50%',\n }}\n >\n <CaseSummary\n caseDbCase={caseItem}\n />\n </TableCell>\n <TableCell\n sx={{\n '& :nth-of-type(2)': {\n marginTop: theme.spacing(1),\n },\n verticalAlign: 'top',\n width: '50%',\n }}\n >\n {caseItemCaseSets.sort((a, b) => a.name.localeCompare(b.name)).map(caseItemCaseSet => (\n <CasesAlreadyInCaseSetWarningCaseSetLink\n caseSet={caseItemCaseSet}\n key={caseItemCaseSet.id}\n />\n ))}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </Alert>\n )}\n </ResponseHandler>\n );\n};\n"],"mappings":"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"}
@@ -4,10 +4,10 @@ import { CaseDbCaseApi as n } from "@gen-epix/api-casedb";
4
4
  import { Box as r } from "@mui/material";
5
5
  import { useEffect as i, useState as a } from "react";
6
6
  import { useTranslation as o } from "react-i18next";
7
- import { AxiosUtil as s } from "@gen-epix/ui/utils/AxiosUtil";
7
+ import { AxiosUtil as s } from "@gen-epix/ui-client-common/utils/AxiosUtil";
8
8
  import { jsx as c } from "react/jsx-runtime";
9
- import { ResponseHandler as l } from "@gen-epix/ui/components/ui/ResponseHandler";
10
- import { useItemQuery as u } from "@gen-epix/ui/hooks/useItemQuery";
9
+ import { ResponseHandler as l } from "@gen-epix/ui-client-common/components/ui/ResponseHandler";
10
+ import { useItemQuery as u } from "@gen-epix/ui-client-common/hooks/useItemQuery";
11
11
  //#region src/components/ui/CompletCaseTypeLoader/CompletCaseTypeLoader.tsx
12
12
  var d = ({ caseTypeId: d, children: f, onCompleteCaseTypeLoaded: p }) => {
13
13
  let { t: m } = o(), [h, g] = a(!0), [_, v] = a(), { data: y, error: b, isLoading: x } = u({
@@ -1 +1 @@
1
- {"version":3,"file":"CompletCaseTypeLoader.js","names":[],"sources":["../../src/components/ui/CompletCaseTypeLoader/CompletCaseTypeLoader.tsx"],"sourcesContent":["import { Box } from '@mui/material';\nimport type { PropsWithChildren } from 'react';\nimport {\n useEffect,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { AxiosUtil } from '@gen-epix/ui/utils/AxiosUtil';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useItemQuery } from '@gen-epix/ui/hooks/useItemQuery';\n\nimport { DataService } from '../../../classes/services/DataService';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\n\nexport type CompletCaseTypeLoaderProps = PropsWithChildren<{\n readonly caseTypeId: string;\n readonly onCompleteCaseTypeLoaded?: (completeCaseType: CaseDbCompleteCaseType) => void;\n}>;\n\nexport const CompletCaseTypeLoader = ({ caseTypeId, children, onCompleteCaseTypeLoaded }: CompletCaseTypeLoaderProps) => {\n const { t } = useTranslation();\n const [isSideEffectLoading, setIsSideEffectLoading] = useState(true);\n const [sideEffectError, setSideEffectError] = useState<Error>();\n\n const { data: completeCaseType, error: completeCaseTypeError, isLoading: isCompleteCaseTypeLoading } = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.COMPLETE_CASE_TYPES,\n itemId: caseTypeId,\n useQueryOptions: {\n queryFn: async ({ signal }) => {\n return (await CaseDbCaseApi.getInstance().completeCaseTypesGetOne(caseTypeId, { signal })).data;\n },\n },\n });\n\n useEffect(() => {\n if (completeCaseType && onCompleteCaseTypeLoaded) {\n onCompleteCaseTypeLoaded(completeCaseType);\n }\n }, [completeCaseType, onCompleteCaseTypeLoaded]);\n\n useEffect(() => {\n const abortController = new AbortController();\n if (completeCaseType) {\n const perform = async () => {\n try {\n await Promise.all([\n DataService.getInstance().loadConcepts(abortController.signal),\n DataService.getInstance().loadMissingRegions(completeCaseType, abortController.signal),\n DataService.getInstance().loadTreeAlgorithms(completeCaseType, abortController.signal),\n DataService.getInstance().loadOrganizations(abortController.signal),\n ]);\n setIsSideEffectLoading(false);\n } catch (error) {\n if (!AxiosUtil.isAxiosCanceledError(error)) {\n setSideEffectError(error as Error);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }\n return () => {\n abortController.abort();\n };\n }, [completeCaseType]);\n\n return (\n <Box\n sx={{\n height: '100%',\n position: 'relative',\n width: '100%',\n }}\n >\n <ResponseHandler\n error={completeCaseTypeError || sideEffectError}\n isLoading={isCompleteCaseTypeLoading || isSideEffectLoading}\n loadingMessage={t`Loading case type`}\n >\n {children}\n </ResponseHandler>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;AAsBA,IAAa,KAAyB,EAAE,eAAY,aAAU,kCAA2D;CACvH,IAAM,EAAE,SAAM,EAAe,GACvB,CAAC,GAAqB,KAA0B,EAAS,EAAI,GAC7D,CAAC,GAAiB,KAAsB,EAAgB,GAExD,EAAE,MAAM,GAAkB,OAAO,GAAuB,WAAW,MAA8B,EAAa;EAClH,cAAc,EAAiB;EAC/B,QAAQ;EACR,iBAAiB,EACf,SAAS,OAAO,EAAE,iBACR,MAAM,EAAc,YAAY,CAAC,CAAC,wBAAwB,GAAY,EAAE,UAAO,CAAC,EAAA,CAAG,KAE/F;CACF,CAAC;CAkCD,OAhCA,QAAgB;EACd,AAAI,KAAoB,KACtB,EAAyB,CAAgB;CAE7C,GAAG,CAAC,GAAkB,CAAwB,CAAC,GAE/C,QAAgB;EACd,IAAM,IAAkB,IAAI,gBAAgB;EAoB5C,OAnBI,MAiBF,YAhB4B;GAC1B,IAAI;IAOF,AANA,MAAM,QAAQ,IAAI;KAChB,EAAY,YAAY,CAAC,CAAC,aAAa,EAAgB,MAAM;KAC7D,EAAY,YAAY,CAAC,CAAC,mBAAmB,GAAkB,EAAgB,MAAM;KACrF,EAAY,YAAY,CAAC,CAAC,mBAAmB,GAAkB,EAAgB,MAAM;KACrF,EAAY,YAAY,CAAC,CAAC,kBAAkB,EAAgB,MAAM;IACpE,CAAC,GACD,EAAuB,EAAK;GAC9B,SAAS,GAAO;IACd,AAAK,EAAU,qBAAqB,CAAK,KACvC,EAAmB,CAAc;GAErC;EACF,EAEA,CAAQ,SAEG;GACX,EAAgB,MAAM;EACxB;CACF,GAAG,CAAC,CAAgB,CAAC,GAGnB,kBAAC,GAAD;EACE,IAAI;GACF,QAAQ;GACR,UAAU;GACV,OAAO;EACT;YAEA,kBAAC,GAAD;GACE,OAAO,KAAyB;GAChC,WAAW,KAA6B;GACxC,gBAAgB,CAAC;GAEhB;EACc,CAAA;CACd,CAAA;AAET"}
1
+ {"version":3,"file":"CompletCaseTypeLoader.js","names":[],"sources":["../../src/components/ui/CompletCaseTypeLoader/CompletCaseTypeLoader.tsx"],"sourcesContent":["import { Box } from '@mui/material';\nimport type { PropsWithChildren } from 'react';\nimport {\n useEffect,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport type { CaseDbCompleteCaseType } from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { AxiosUtil } from '@gen-epix/ui-client-common/utils/AxiosUtil';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useItemQuery } from '@gen-epix/ui-client-common/hooks/useItemQuery';\n\nimport { DataService } from '../../../classes/services/DataService';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\n\nexport type CompletCaseTypeLoaderProps = PropsWithChildren<{\n readonly caseTypeId: string;\n readonly onCompleteCaseTypeLoaded?: (completeCaseType: CaseDbCompleteCaseType) => void;\n}>;\n\nexport const CompletCaseTypeLoader = ({ caseTypeId, children, onCompleteCaseTypeLoaded }: CompletCaseTypeLoaderProps) => {\n const { t } = useTranslation();\n const [isSideEffectLoading, setIsSideEffectLoading] = useState(true);\n const [sideEffectError, setSideEffectError] = useState<Error>();\n\n const { data: completeCaseType, error: completeCaseTypeError, isLoading: isCompleteCaseTypeLoading } = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.COMPLETE_CASE_TYPES,\n itemId: caseTypeId,\n useQueryOptions: {\n queryFn: async ({ signal }) => {\n return (await CaseDbCaseApi.getInstance().completeCaseTypesGetOne(caseTypeId, { signal })).data;\n },\n },\n });\n\n useEffect(() => {\n if (completeCaseType && onCompleteCaseTypeLoaded) {\n onCompleteCaseTypeLoaded(completeCaseType);\n }\n }, [completeCaseType, onCompleteCaseTypeLoaded]);\n\n useEffect(() => {\n const abortController = new AbortController();\n if (completeCaseType) {\n const perform = async () => {\n try {\n await Promise.all([\n DataService.getInstance().loadConcepts(abortController.signal),\n DataService.getInstance().loadMissingRegions(completeCaseType, abortController.signal),\n DataService.getInstance().loadTreeAlgorithms(completeCaseType, abortController.signal),\n DataService.getInstance().loadOrganizations(abortController.signal),\n ]);\n setIsSideEffectLoading(false);\n } catch (error) {\n if (!AxiosUtil.isAxiosCanceledError(error)) {\n setSideEffectError(error as Error);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }\n return () => {\n abortController.abort();\n };\n }, [completeCaseType]);\n\n return (\n <Box\n sx={{\n height: '100%',\n position: 'relative',\n width: '100%',\n }}\n >\n <ResponseHandler\n error={completeCaseTypeError || sideEffectError}\n isLoading={isCompleteCaseTypeLoading || isSideEffectLoading}\n loadingMessage={t`Loading case type`}\n >\n {children}\n </ResponseHandler>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;AAsBA,IAAa,KAAyB,EAAE,eAAY,aAAU,kCAA2D;CACvH,IAAM,EAAE,SAAM,EAAe,GACvB,CAAC,GAAqB,KAA0B,EAAS,EAAI,GAC7D,CAAC,GAAiB,KAAsB,EAAgB,GAExD,EAAE,MAAM,GAAkB,OAAO,GAAuB,WAAW,MAA8B,EAAa;EAClH,cAAc,EAAiB;EAC/B,QAAQ;EACR,iBAAiB,EACf,SAAS,OAAO,EAAE,iBACR,MAAM,EAAc,YAAY,CAAC,CAAC,wBAAwB,GAAY,EAAE,UAAO,CAAC,EAAA,CAAG,KAE/F;CACF,CAAC;CAkCD,OAhCA,QAAgB;EACd,AAAI,KAAoB,KACtB,EAAyB,CAAgB;CAE7C,GAAG,CAAC,GAAkB,CAAwB,CAAC,GAE/C,QAAgB;EACd,IAAM,IAAkB,IAAI,gBAAgB;EAoB5C,OAnBI,MAiBF,YAhB4B;GAC1B,IAAI;IAOF,AANA,MAAM,QAAQ,IAAI;KAChB,EAAY,YAAY,CAAC,CAAC,aAAa,EAAgB,MAAM;KAC7D,EAAY,YAAY,CAAC,CAAC,mBAAmB,GAAkB,EAAgB,MAAM;KACrF,EAAY,YAAY,CAAC,CAAC,mBAAmB,GAAkB,EAAgB,MAAM;KACrF,EAAY,YAAY,CAAC,CAAC,kBAAkB,EAAgB,MAAM;IACpE,CAAC,GACD,EAAuB,EAAK;GAC9B,SAAS,GAAO;IACd,AAAK,EAAU,qBAAqB,CAAK,KACvC,EAAmB,CAAc;GAErC;EACF,EAEA,CAAQ,SAEG;GACX,EAAgB,MAAM;EACxB;CACF,GAAG,CAAC,CAAgB,CAAC,GAGnB,kBAAC,GAAD;EACE,IAAI;GACF,QAAQ;GACR,UAAU;GACV,OAAO;EACT;EAEA,UAAA,kBAAC,GAAD;GACE,OAAO,KAAyB;GAChC,WAAW,KAA6B;GACxC,gBAAgB,CAAC;GAEhB;EACc,CAAA;CACd,CAAA;AAET"}
@@ -2,7 +2,7 @@ import { CaseSetUtil as e } from "../utils/CaseSetUtil/index.js";
2
2
  import { t } from "i18next";
3
3
  import { Box as n } from "@mui/material";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
- import { NavLink as a } from "@gen-epix/ui/components/ui/NavLink";
5
+ import { NavLink as a } from "@gen-epix/ui-client-common/components/ui/NavLink";
6
6
  //#region src/components/ui/CreateEventDialog/CreateEventDialogSuccessNotificationMessage.tsx
7
7
  var o = ({ caseSet: o, isCreating: s }) => /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ i(n, { children: [s && t("Successfully created event: {{name}}", { name: o.name }), !s && t("Successfully edited event: {{name}}", { name: o.name })] }), /* @__PURE__ */ r(n, {
8
8
  sx: { marginY: 2 },
@@ -1 +1 @@
1
- {"version":3,"file":"CreateEventDialogSuccessNotificationMessage.js","names":[],"sources":["../../src/components/ui/CreateEventDialog/CreateEventDialogSuccessNotificationMessage.tsx"],"sourcesContent":["import { t } from 'i18next';\nimport { Box } from '@mui/material';\nimport type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { NavLink } from '@gen-epix/ui/components/ui/NavLink';\n\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\n\nexport type CreateEventDialogSuccessNotificationMessageProps = {\n readonly caseSet: CaseDbCaseSet;\n readonly isCreating?: boolean;\n};\n\nexport const CreateEventDialogSuccessNotificationMessage = ({ caseSet, isCreating }: CreateEventDialogSuccessNotificationMessageProps) => {\n return (\n <Box>\n <Box>\n {isCreating && t('Successfully created event: {{name}}', { name: caseSet.name })}\n {!isCreating && t('Successfully edited event: {{name}}', { name: caseSet.name })}\n </Box>\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <NavLink\n activeAsText\n to={CaseSetUtil.createCaseSetLink(caseSet)}\n >\n {t('View event: {{name}}', { name: caseSet.name })}\n </NavLink>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAYA,IAAa,KAA+C,EAAE,YAAS,oBAEnE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACG,KAAc,EAAE,wCAAwC,EAAE,MAAM,EAAQ,KAAK,CAAC,GAC9E,CAAC,KAAc,EAAE,uCAAuC,EAAE,MAAM,EAAQ,KAAK,CAAC,CAC5E,EAAA,CAAA,GACL,kBAAC,GAAD;CACE,IAAI,EACF,SAAS,EACX;WAEA,kBAAC,GAAD;EACE,cAAA;EACA,IAAI,EAAY,kBAAkB,CAAO;YAExC,EAAE,wBAAwB,EAAE,MAAM,EAAQ,KAAK,CAAC;CAC1C,CAAA;AACN,CAAA,CACF,EAAA,CAAA"}
1
+ {"version":3,"file":"CreateEventDialogSuccessNotificationMessage.js","names":[],"sources":["../../src/components/ui/CreateEventDialog/CreateEventDialogSuccessNotificationMessage.tsx"],"sourcesContent":["import { t } from 'i18next';\nimport { Box } from '@mui/material';\nimport type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { NavLink } from '@gen-epix/ui-client-common/components/ui/NavLink';\n\nimport { CaseSetUtil } from '../../../utils/CaseSetUtil';\n\nexport type CreateEventDialogSuccessNotificationMessageProps = {\n readonly caseSet: CaseDbCaseSet;\n readonly isCreating?: boolean;\n};\n\nexport const CreateEventDialogSuccessNotificationMessage = ({ caseSet, isCreating }: CreateEventDialogSuccessNotificationMessageProps) => {\n return (\n <Box>\n <Box>\n {isCreating && t('Successfully created event: {{name}}', { name: caseSet.name })}\n {!isCreating && t('Successfully edited event: {{name}}', { name: caseSet.name })}\n </Box>\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <NavLink\n activeAsText\n to={CaseSetUtil.createCaseSetLink(caseSet)}\n >\n {t('View event: {{name}}', { name: caseSet.name })}\n </NavLink>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAYA,IAAa,KAA+C,EAAE,YAAS,oBAEnE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACG,KAAc,EAAE,wCAAwC,EAAE,MAAM,EAAQ,KAAK,CAAC,GAC9E,CAAC,KAAc,EAAE,uCAAuC,EAAE,MAAM,EAAQ,KAAK,CAAC,CAC5E,EAAA,CAAA,GACL,kBAAC,GAAD;CACE,IAAI,EACF,SAAS,EACX;CAEA,UAAA,kBAAC,GAAD;EACE,cAAA;EACA,IAAI,EAAY,kBAAkB,CAAO;EAExC,UAAA,EAAE,wBAAwB,EAAE,MAAM,EAAQ,KAAK,CAAC;CAC1C,CAAA;AACN,CAAA,CACF,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTabPanel.js","names":[],"sources":["../../src/components/ui/CustomTabPanel/CustomTabPanel.tsx"],"sourcesContent":["import { Box } from '@mui/material';\nimport type { PropsWithChildren } from 'react';\n\nexport type CustomTabPanelProps = PropsWithChildren<{\n readonly index: number;\n readonly value: number;\n}>;\n\nexport const CustomTabPanel = (props: CustomTabPanelProps) => {\n const { children, index, value, ...other } = props;\n\n return (\n <div\n aria-labelledby={`simple-tab-${index}`}\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n role={'tabpanel'}\n {...other}\n >\n {value === index && (\n <Box sx={{ p: 3 }}>\n {children}\n </Box>\n )}\n </div>\n );\n};\n"],"mappings":";;;AAQA,IAAa,KAAkB,MAA+B;CAC5D,IAAM,EAAE,aAAU,UAAO,UAAO,GAAG,MAAU;CAE7C,OACE,kBAAC,OAAD;EACE,mBAAiB,cAAc;EAC/B,QAAQ,MAAU;EAClB,IAAI,mBAAmB;EACvB,MAAM;EACN,GAAI;YAEH,MAAU,KACT,kBAAC,GAAD;GAAK,IAAI,EAAE,GAAG,EAAE;GACb;EACE,CAAA;CAEJ,CAAA;AAET"}
1
+ {"version":3,"file":"CustomTabPanel.js","names":[],"sources":["../../src/components/ui/CustomTabPanel/CustomTabPanel.tsx"],"sourcesContent":["import { Box } from '@mui/material';\nimport type { PropsWithChildren } from 'react';\n\nexport type CustomTabPanelProps = PropsWithChildren<{\n readonly index: number;\n readonly value: number;\n}>;\n\nexport const CustomTabPanel = (props: CustomTabPanelProps) => {\n const { children, index, value, ...other } = props;\n\n return (\n <div\n aria-labelledby={`simple-tab-${index}`}\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n role={'tabpanel'}\n {...other}\n >\n {value === index && (\n <Box sx={{ p: 3 }}>\n {children}\n </Box>\n )}\n </div>\n );\n};\n"],"mappings":";;;AAQA,IAAa,KAAkB,MAA+B;CAC5D,IAAM,EAAE,aAAU,UAAO,UAAO,GAAG,MAAU;CAE7C,OACE,kBAAC,OAAD;EACE,mBAAiB,cAAc;EAC/B,QAAQ,MAAU;EAClB,IAAI,mBAAmB;EACvB,MAAM;EACN,GAAI;EAEH,UAAA,MAAU,KACT,kBAAC,GAAD;GAAK,IAAI,EAAE,GAAG,EAAE;GACb;EACE,CAAA;CAEJ,CAAA;AAET"}