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

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 +11 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\nimport {\n Autocomplete,\n Box,\n TextField,\n ToggleButton,\n ToggleButtonGroup,\n Typography,\n useTheme,\n} from '@mui/material';\nimport EChartsReact from 'echarts-for-react';\nimport {\n dispose,\n getInstanceByDom,\n init,\n use as registerECharts,\n} from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { TooltipComponent } from 'echarts/components';\nimport { GraphChart } from 'echarts/charts';\nimport {\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport type {\n MouseEvent as ReactMouseEvent,\n SyntheticEvent,\n} from 'react';\nimport type {\n EChartsOption,\n GraphSeriesOption,\n} from 'echarts';\nimport type { AutocompleteRenderInputParams } from '@mui/material/Autocomplete';\nimport type { CaseDbOrganizationAccessCasePolicy } from '@gen-epix/api-casedb';\nimport { LoadableUtil } from '@gen-epix/ui/utils/LoadableUtil';\nimport { PageContainer } from '@gen-epix/ui/components/ui/PageContainer';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useOrganizationMapQuery } from '@gen-epix/ui/dataHooks/useOrganizationsQuery';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useDataCollectionsMapQuery } from '../../dataHooks/useDataCollectionsQuery';\nimport { useOrganizationAccessCasePoliciesQuery } from '../../dataHooks/useOrganizationAccessCasePoliciesQuery';\nimport { useOrganizationShareCasePoliciesQuery } from '../../dataHooks/useOrganizationShareCasePoliciesQuery';\nimport { EffectiveRightsUtil } from '../../utils/EffectiveRightsUtil';\n\nconst echartsCore = {\n dispose,\n getInstanceByDom,\n init,\n};\n\nregisterECharts([TooltipComponent, CanvasRenderer, GraphChart]);\n\ntype AccessLink = {\n accessPolicyCount: number;\n accessRights: AccessRightsSummary;\n dataCollectionName: string;\n lineStyle: NonNullable<GraphSeriesOption['lineStyle']>;\n linkType: 'access';\n organizationName: string;\n sharePolicyCount: number;\n source: string;\n sourceDataCollectionNames: string[];\n target: string;\n value: number;\n};\n\ntype AccessRightsSummary = Pick<CaseDbOrganizationAccessCasePolicy, 'add_case_set' | 'add_case' | 'is_private' | 'read_case_set' | 'remove_case_set' | 'remove_case' | 'write_case_set'>;\n\ntype Category = {\n name: string;\n};\n\ntype Graph = {\n categories: Category[];\n links: Link[];\n nodes: Node[];\n totalAccessLinks: number;\n totalDataCollections: number;\n totalOrganizations: number;\n totalShareLinks: number;\n zoom: number;\n};\n\ntype GraphTooltipParams = {\n data: Link | Node;\n dataType?: 'edge' | 'node';\n};\n\ntype Link = AccessLink | ShareLink;\n\ntype Node = {\n accessLinkCount: number;\n category: number;\n id: string;\n itemStyle: {\n borderColor: string;\n borderWidth: number;\n color: string;\n };\n label: NonNullable<GraphSeriesOption['label']>;\n name: string;\n nodeType: 'dataCollection' | 'organization';\n shareInCount: number;\n shareOutCount: number;\n symbol: 'circle' | 'roundRect';\n symbolSize: number;\n value: number;\n x: number;\n y: number;\n};\n\ntype SelectionOption = {\n label: string;\n value: string;\n};\n\ntype SelectionType = 'dataCollection' | 'organization';\n\ntype ShareLink = {\n lineStyle: NonNullable<GraphSeriesOption['lineStyle']>;\n linkType: 'share';\n organizationNames: string[];\n sharePolicyCount: number;\n source: string;\n sourceDataCollectionName: string;\n target: string;\n targetDataCollectionName: string;\n value: number;\n};\n\nconst EMPTY_GRAPH: Graph = {\n categories: [],\n links: [],\n nodes: [],\n totalAccessLinks: 0,\n totalDataCollections: 0,\n totalOrganizations: 0,\n totalShareLinks: 0,\n zoom: 1,\n};\n\nconst GRAPH_LAYOUT = {\n bottomPadding: 72,\n fitZoomSafetyFactor: 0.94,\n labelPadding: 12,\n nodeLabelWidth: 220,\n organizationX: 120,\n rowGap: 68,\n singleRowVerticalOffset: 96,\n sourceDataCollectionX: 1060,\n targetAndSourceDataCollectionX: 820,\n targetDataCollectionX: 620,\n topPadding: 72,\n viewportHorizontalPadding: 24,\n viewportVerticalPadding: 24,\n} as const;\n\nexport const DataCollectionVisualizationPage = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n const [selectionType, setSelectionType] = useState<SelectionType>('organization');\n const [selectedEntityId, setSelectedEntityId] = useState<string>(null);\n const dataCollectionMapQuery = useDataCollectionsMapQuery();\n const organizationMapQuery = useOrganizationMapQuery();\n const organizationAccessCasePoliciesQuery = useOrganizationAccessCasePoliciesQuery(policies => policies.filter(policy => policy.is_active));\n const organizationShareCasePoliciesQuery = useOrganizationShareCasePoliciesQuery(policies => policies.filter(policy => policy.is_active));\n\n const loadables = useArray([\n dataCollectionMapQuery,\n organizationMapQuery,\n organizationAccessCasePoliciesQuery,\n organizationShareCasePoliciesQuery,\n ]);\n\n const organizationOptions = useMemo<SelectionOption[]>(() => {\n return Array.from(organizationMapQuery.map.values())\n .map(organization => ({\n label: organization.name,\n value: organization.id,\n }))\n .sort((a, b) => StringUtil.advancedSortComperator(a.label, b.label));\n }, [organizationMapQuery.map]);\n\n const dataCollectionOptions = useMemo<SelectionOption[]>(() => {\n return Array.from(dataCollectionMapQuery.map.values())\n .map(dataCollection => ({\n label: dataCollection.name,\n value: dataCollection.id,\n }))\n .sort((a, b) => StringUtil.advancedSortComperator(a.label, b.label));\n }, [dataCollectionMapQuery.map]);\n\n const selectionOptions = useMemo(() => {\n return selectionType === 'organization' ? organizationOptions : dataCollectionOptions;\n }, [dataCollectionOptions, organizationOptions, selectionType]);\n\n const selectedOption = useMemo(() => {\n return selectionOptions.find(option => option.value === selectedEntityId) ?? null;\n }, [selectedEntityId, selectionOptions]);\n\n const selectionLabel = selectionType === 'organization' ? t`Organization` : t`Data collection`;\n const hasSelection = !!selectedEntityId;\n\n const onSelectionTypeChange = useCallback((_event: ReactMouseEvent<HTMLElement>, nextSelectionType: null | SelectionType) => {\n if (!nextSelectionType || nextSelectionType === selectionType) {\n return;\n }\n\n setSelectionType(nextSelectionType);\n setSelectedEntityId(null);\n }, [selectionType]);\n\n const getSelectionOptionLabel = useCallback((option: SelectionOption) => {\n return option.label;\n }, []);\n\n const isSelectionOptionEqualToValue = useCallback((option: SelectionOption, value: SelectionOption) => {\n return option.value === value.value;\n }, []);\n\n const onSelectionChange = useCallback((_event: SyntheticEvent, nextOption: null | SelectionOption) => {\n setSelectedEntityId(nextOption?.value ?? null);\n }, []);\n\n const renderSelectionInput = useCallback((params: AutocompleteRenderInputParams) => {\n return (\n <TextField\n {...params}\n label={selectionLabel}\n required\n size={'small'}\n />\n );\n }, [selectionLabel]);\n\n const graph = useMemo<Graph>(() => {\n if (LoadableUtil.isSomeLoading(loadables)) {\n return EMPTY_GRAPH;\n }\n\n if (!selectedEntityId) {\n return EMPTY_GRAPH;\n }\n\n const categories: Category[] = [\n {\n name: t`Organization`,\n },\n {\n name: t`Data collection`,\n },\n ];\n\n const organizationNodeColor = theme.palette.primary.main;\n const organizationNodeBorderColor = theme.palette.primary.dark;\n const dataCollectionNodeColor = theme.palette.secondary.main;\n const dataCollectionNodeBorderColor = theme.palette.secondary.dark;\n const accessLinkColor = theme.palette.primary.light;\n const shareLinkColor = theme.palette.warning.main;\n\n const policyGroups = EffectiveRightsUtil.getOrganizationPolicyGroups({\n organizationAccessCasePolicies: organizationAccessCasePoliciesQuery.data,\n organizationShareCasePolicies: organizationShareCasePoliciesQuery.data,\n });\n\n const filteredPolicyGroups = policyGroups.filter(policyGroup => {\n if (selectionType === 'organization') {\n return policyGroup.organization_id === selectedEntityId;\n }\n\n return policyGroup.data_collection_id === selectedEntityId\n || policyGroup.share_case_policies.some(policy => policy.from_data_collection_id === selectedEntityId);\n });\n\n const nodesById = new Map<string, Omit<Node, 'accessLinkCount' | 'label' | 'shareInCount' | 'shareOutCount' | 'symbolSize' | 'value' | 'x' | 'y'>>();\n const nodeStats = new Map<string, Pick<Node, 'accessLinkCount' | 'shareInCount' | 'shareOutCount'>>();\n const accessLinks: AccessLink[] = [];\n const shareLinksByKey = new Map<string, {\n organizationNames: Set<string>;\n sharePolicyCount: number;\n source: string;\n sourceDataCollectionName: string;\n target: string;\n targetDataCollectionName: string;\n }>();\n\n const buildNodeLabel = (position: 'left' | 'right'): Node['label'] => {\n return {\n color: theme.palette.text.primary,\n distance: 8,\n fontSize: 12,\n formatter: '{b}',\n overflow: 'truncate',\n position,\n show: true,\n width: GRAPH_LAYOUT.nodeLabelWidth,\n };\n };\n\n const ensureNode = (params: {\n borderColor: string;\n category: number;\n color: string;\n id: string;\n name: string;\n nodeType: Node['nodeType'];\n symbol: Node['symbol'];\n }) => {\n if (nodesById.has(params.id)) {\n return;\n }\n\n nodesById.set(params.id, {\n category: params.category,\n id: params.id,\n itemStyle: {\n borderColor: params.borderColor,\n borderWidth: 1.5,\n color: params.color,\n },\n name: params.name,\n nodeType: params.nodeType,\n symbol: params.symbol,\n });\n };\n\n const incrementNodeStat = (nodeId: string, key: keyof Pick<Node, 'accessLinkCount' | 'shareInCount' | 'shareOutCount'>) => {\n const currentStats = nodeStats.get(nodeId) ?? {\n accessLinkCount: 0,\n shareInCount: 0,\n shareOutCount: 0,\n };\n\n currentStats[key] += 1;\n nodeStats.set(nodeId, currentStats);\n };\n\n filteredPolicyGroups.forEach(policyGroup => {\n const organizationNodeId = `organization:${policyGroup.organization_id}`;\n const targetDataCollectionNodeId = `dataCollection:${policyGroup.data_collection_id}`;\n const organizationName = organizationMapQuery.map.get(policyGroup.organization_id)?.name ?? policyGroup.organization_id;\n const targetDataCollectionName = dataCollectionMapQuery.map.get(policyGroup.data_collection_id)?.name ?? policyGroup.data_collection_id;\n const sourceDataCollectionNames = Array.from(new Set(policyGroup.share_case_policies.map(policy => dataCollectionMapQuery.map.get(policy.from_data_collection_id)?.name ?? policy.from_data_collection_id))).sort();\n\n const accessRights = policyGroup.access_case_policies.reduce<AccessRightsSummary>((summary, policy) => {\n return {\n add_case: summary.add_case || policy.add_case,\n add_case_set: summary.add_case_set || policy.add_case_set,\n is_private: summary.is_private || policy.is_private,\n read_case_set: summary.read_case_set || policy.read_case_set,\n remove_case: summary.remove_case || policy.remove_case,\n remove_case_set: summary.remove_case_set || policy.remove_case_set,\n write_case_set: summary.write_case_set || policy.write_case_set,\n };\n }, {\n add_case: false,\n add_case_set: false,\n is_private: false,\n read_case_set: false,\n remove_case: false,\n remove_case_set: false,\n write_case_set: false,\n });\n\n ensureNode({\n borderColor: organizationNodeBorderColor,\n category: 0,\n color: organizationNodeColor,\n id: organizationNodeId,\n name: organizationName,\n nodeType: 'organization',\n symbol: 'roundRect',\n });\n ensureNode({\n borderColor: dataCollectionNodeBorderColor,\n category: 1,\n color: dataCollectionNodeColor,\n id: targetDataCollectionNodeId,\n name: targetDataCollectionName,\n nodeType: 'dataCollection',\n symbol: 'circle',\n });\n\n accessLinks.push({\n accessPolicyCount: policyGroup.access_case_policies.length,\n accessRights,\n dataCollectionName: targetDataCollectionName,\n lineStyle: {\n color: accessLinkColor,\n curveness: 0.08,\n opacity: 0.5,\n width: 1.5 + Math.min(policyGroup.access_case_policies.length * 0.35, 1.5),\n },\n linkType: 'access',\n organizationName,\n sharePolicyCount: policyGroup.share_case_policies.length,\n source: organizationNodeId,\n sourceDataCollectionNames,\n target: targetDataCollectionNodeId,\n value: Math.max(policyGroup.access_case_policies.length, 1),\n });\n\n incrementNodeStat(organizationNodeId, 'accessLinkCount');\n incrementNodeStat(targetDataCollectionNodeId, 'accessLinkCount');\n\n policyGroup.share_case_policies.forEach(sharePolicy => {\n const sourceDataCollectionNodeId = `dataCollection:${sharePolicy.from_data_collection_id}`;\n const sourceDataCollectionName = dataCollectionMapQuery.map.get(sharePolicy.from_data_collection_id)?.name ?? sharePolicy.from_data_collection_id;\n const shareLinkKey = `${sourceDataCollectionNodeId}::${targetDataCollectionNodeId}`;\n const existingShareLink = shareLinksByKey.get(shareLinkKey);\n\n ensureNode({\n borderColor: dataCollectionNodeBorderColor,\n category: 1,\n color: dataCollectionNodeColor,\n id: sourceDataCollectionNodeId,\n name: sourceDataCollectionName,\n nodeType: 'dataCollection',\n symbol: 'circle',\n });\n\n if (existingShareLink) {\n existingShareLink.organizationNames.add(organizationName);\n existingShareLink.sharePolicyCount += 1;\n return;\n }\n\n shareLinksByKey.set(shareLinkKey, {\n organizationNames: new Set([organizationName]),\n sharePolicyCount: 1,\n source: sourceDataCollectionNodeId,\n sourceDataCollectionName,\n target: targetDataCollectionNodeId,\n targetDataCollectionName,\n });\n });\n });\n\n const shareLinks = Array.from(shareLinksByKey.values()).map(shareLink => {\n incrementNodeStat(shareLink.source, 'shareOutCount');\n incrementNodeStat(shareLink.target, 'shareInCount');\n\n return {\n lineStyle: {\n color: shareLinkColor,\n curveness: 0.28,\n opacity: 0.45,\n type: 'dashed',\n width: 1.25 + Math.min(shareLink.sharePolicyCount * 0.3, 1.25),\n },\n linkType: 'share',\n organizationNames: Array.from(shareLink.organizationNames).sort(),\n sharePolicyCount: shareLink.sharePolicyCount,\n source: shareLink.source,\n sourceDataCollectionName: shareLink.sourceDataCollectionName,\n target: shareLink.target,\n targetDataCollectionName: shareLink.targetDataCollectionName,\n value: Math.max(shareLink.sharePolicyCount, 1),\n } satisfies ShareLink;\n });\n\n const rawNodes = Array.from(nodesById.values())\n .map(node => {\n const stats = nodeStats.get(node.id) ?? {\n accessLinkCount: 0,\n shareInCount: 0,\n shareOutCount: 0,\n };\n const totalConnections = stats.accessLinkCount + stats.shareInCount + stats.shareOutCount;\n\n return {\n ...node,\n accessLinkCount: stats.accessLinkCount,\n label: buildNodeLabel('right'),\n shareInCount: stats.shareInCount,\n shareOutCount: stats.shareOutCount,\n symbolSize: node.nodeType === 'organization'\n ? Math.min(22 + (stats.accessLinkCount * 2), 34)\n : Math.min(18 + (totalConnections * 1.5), 30),\n value: totalConnections,\n x: 0,\n y: 0,\n } satisfies Node;\n });\n\n const getDataCollectionLayoutRank = (node: Node) => {\n if (node.accessLinkCount > 0 && node.shareOutCount > 0) {\n return 1;\n }\n if (node.accessLinkCount > 0) {\n return 0;\n }\n return 2;\n };\n\n const getDataCollectionX = (node: Node) => {\n if (node.accessLinkCount > 0 && node.shareOutCount > 0) {\n return GRAPH_LAYOUT.targetAndSourceDataCollectionX;\n }\n if (node.accessLinkCount > 0) {\n return GRAPH_LAYOUT.targetDataCollectionX;\n }\n return GRAPH_LAYOUT.sourceDataCollectionX;\n };\n\n const getDataCollectionLabelPosition = (node: Node): 'left' | 'right' => {\n return node.accessLinkCount > 0 && node.shareOutCount === 0 ? 'left' : 'right';\n };\n\n const isSingleNodePair = rawNodes.filter(node => node.nodeType === 'organization').length === 1\n && rawNodes.filter(node => node.nodeType === 'dataCollection').length === 1;\n\n const organizationNodes = rawNodes\n .filter(node => node.nodeType === 'organization')\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((node, index) => {\n return {\n ...node,\n label: buildNodeLabel('right'),\n x: GRAPH_LAYOUT.organizationX,\n y: GRAPH_LAYOUT.topPadding + (index * GRAPH_LAYOUT.rowGap),\n } satisfies Node;\n });\n\n const dataCollectionNodes = rawNodes\n .filter(node => node.nodeType === 'dataCollection')\n .sort((a, b) => {\n const rankDifference = getDataCollectionLayoutRank(a) - getDataCollectionLayoutRank(b);\n if (rankDifference !== 0) {\n return rankDifference;\n }\n return a.name.localeCompare(b.name);\n })\n .map((node, index) => {\n return {\n ...node,\n label: buildNodeLabel(getDataCollectionLabelPosition(node)),\n x: getDataCollectionX(node),\n y: GRAPH_LAYOUT.topPadding + (index * GRAPH_LAYOUT.rowGap) + (isSingleNodePair ? GRAPH_LAYOUT.singleRowVerticalOffset : 0),\n } satisfies Node;\n });\n\n const nodes = [...organizationNodes, ...dataCollectionNodes];\n const nodeBounds = nodes.reduce((bounds, node) => {\n return {\n maxX: Math.max(bounds.maxX, node.x),\n maxY: Math.max(bounds.maxY, node.y),\n minX: Math.min(bounds.minX, node.x),\n minY: Math.min(bounds.minY, node.y),\n };\n }, {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n\n const contentBounds = nodes.reduce((bounds, node) => {\n const halfSymbolSize = node.symbolSize / 2;\n const labelPadding = GRAPH_LAYOUT.nodeLabelWidth + GRAPH_LAYOUT.labelPadding;\n const labelPosition = node.label.position === 'left' ? 'left' : 'right';\n\n return {\n maxX: Math.max(bounds.maxX, node.x + halfSymbolSize + (labelPosition === 'right' ? labelPadding : 0)),\n maxY: Math.max(bounds.maxY, node.y + halfSymbolSize + GRAPH_LAYOUT.viewportVerticalPadding),\n minX: Math.min(bounds.minX, node.x - halfSymbolSize - (labelPosition === 'left' ? labelPadding : 0)),\n minY: Math.min(bounds.minY, node.y - halfSymbolSize - GRAPH_LAYOUT.viewportVerticalPadding),\n };\n }, {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n\n const nodeWidth = Math.max(nodeBounds.maxX - nodeBounds.minX, 1);\n const nodeHeight = Math.max(nodeBounds.maxY - nodeBounds.minY, 1);\n const contentWidth = Math.max(contentBounds.maxX - contentBounds.minX, 1);\n const contentHeight = Math.max(contentBounds.maxY - contentBounds.minY, 1);\n const zoom = Math.max(\n Math.min(\n (nodeWidth / contentWidth),\n (nodeHeight / contentHeight),\n 1,\n ) * GRAPH_LAYOUT.fitZoomSafetyFactor,\n 0.1,\n );\n\n return {\n categories,\n links: [...accessLinks, ...shareLinks],\n nodes,\n totalAccessLinks: accessLinks.length,\n totalDataCollections: dataCollectionNodes.length,\n totalOrganizations: organizationNodes.length,\n totalShareLinks: shareLinks.length,\n zoom,\n } satisfies Graph;\n }, [dataCollectionMapQuery.map, loadables, organizationAccessCasePoliciesQuery.data, organizationMapQuery.map, organizationShareCasePoliciesQuery.data, selectedEntityId, selectionType, t, theme.palette.primary.dark, theme.palette.primary.light, theme.palette.primary.main, theme.palette.secondary.dark, theme.palette.secondary.main, theme.palette.text.primary, theme.palette.warning.main]);\n\n const formatAccessRights = useCallback((accessRights: AccessRightsSummary) => {\n const enabledRights = [\n accessRights.add_case ? t`Add case` : null,\n accessRights.remove_case ? t`Remove case` : null,\n accessRights.add_case_set ? t`Add case set` : null,\n accessRights.remove_case_set ? t`Remove case set` : null,\n accessRights.read_case_set ? t`Read case set` : null,\n accessRights.write_case_set ? t`Write case set` : null,\n accessRights.is_private ? t`Private` : null,\n ].filter((value): value is string => !!value);\n\n return enabledRights.length > 0 ? enabledRights.join(', ') : t`None`;\n }, [t]);\n\n const formatList = useCallback((items: string[]) => {\n return items.length > 0 ? items.join(', ') : t`None`;\n }, [t]);\n\n const getOptions = useCallback(() => {\n return {\n animation: false,\n series: [\n {\n bottom: GRAPH_LAYOUT.viewportVerticalPadding,\n categories: graph.categories,\n center: ['50%', '50%'],\n data: graph.nodes,\n edgeSymbol: ['none', 'arrow'],\n edgeSymbolSize: 8,\n emphasis: {\n focus: 'adjacency',\n lineStyle: {\n width: 3,\n },\n },\n layout: 'none',\n left: GRAPH_LAYOUT.viewportHorizontalPadding,\n lineStyle: {\n opacity: 0.45,\n },\n links: graph.links,\n right: GRAPH_LAYOUT.viewportHorizontalPadding,\n roam: true,\n roamTrigger: 'global',\n scaleLimit: {\n max: 4,\n min: 0.1,\n },\n top: GRAPH_LAYOUT.viewportVerticalPadding,\n type: 'graph',\n zoom: graph.zoom,\n } satisfies GraphSeriesOption,\n ],\n tooltip: {\n formatter: (params: unknown) => {\n const typedParams = params as GraphTooltipParams;\n\n if (typedParams.dataType === 'node') {\n const node = typedParams.data as Node;\n\n if (node.nodeType === 'organization') {\n return [\n `<strong>${node.name}</strong>`,\n `${t('Accessible data collections')}: ${node.accessLinkCount}`,\n `${t('Connected share routes')}: ${node.shareInCount + node.shareOutCount}`,\n ].join('<br/>');\n }\n\n return [\n `<strong>${node.name}</strong>`,\n `${t('Organization access links')}: ${node.accessLinkCount}`,\n `${t('Incoming share routes')}: ${node.shareInCount}`,\n `${t('Outgoing share routes')}: ${node.shareOutCount}`,\n ].join('<br/>');\n }\n\n const link = typedParams.data as Link;\n\n if (link.linkType === 'access') {\n return [\n `<strong>${link.organizationName} -> ${link.dataCollectionName}</strong>`,\n `${t('Type')}: ${t`Organization access`}`,\n `${t('Active access policies')}: ${link.accessPolicyCount}`,\n `${t('Enabled access rights')}: ${formatAccessRights(link.accessRights)}`,\n `${t('Share source collections')}: ${formatList(link.sourceDataCollectionNames)}`,\n ].join('<br/>');\n }\n\n return [\n `<strong>${link.sourceDataCollectionName} -> ${link.targetDataCollectionName}</strong>`,\n `${t('Type')}: ${t`Organization share`}`,\n `${t('Active share policies')}: ${link.sharePolicyCount}`,\n `${t('Organizations')}: ${formatList(link.organizationNames)}`,\n ].join('<br/>');\n },\n },\n } satisfies EChartsOption;\n }, [formatAccessRights, formatList, graph.categories, graph.links, graph.nodes, graph.zoom, t]);\n\n return (\n <PageContainer\n fullHeight\n fullWidth\n showBreadcrumbs\n testIdAttributes={TestIdUtil.createAttributes('DataCollectionVisualizationPage')}\n title={t`Data collection visualization`}\n >\n <Box\n sx={{\n display: 'grid',\n gap: 2,\n gridTemplateRows: 'auto minmax(0, 1fr)',\n height: '100%',\n minHeight: 0,\n overflow: 'hidden',\n }}\n >\n <ResponseHandler\n loadables={loadables}\n >\n <Box\n sx={{\n borderRadius: 2,\n display: 'grid',\n gap: 2,\n px: 2,\n py: 2,\n }}\n >\n <Box\n sx={{\n alignItems: 'end',\n display: 'grid',\n gap: 2,\n gridTemplateColumns: {\n md: 'max-content minmax(320px, 520px)',\n xs: '1fr',\n },\n }}\n >\n <Box\n sx={{\n display: 'grid',\n gap: 0.75,\n }}\n >\n <Typography\n color={'text.secondary'}\n variant={'overline'}\n >\n {t`Type`}\n </Typography>\n <ToggleButtonGroup\n exclusive\n onChange={onSelectionTypeChange}\n size={'small'}\n value={selectionType}\n >\n <ToggleButton value={'organization'}>\n {t`Organization`}\n </ToggleButton>\n <ToggleButton value={'dataCollection'}>\n {t`Data collection`}\n </ToggleButton>\n </ToggleButtonGroup>\n </Box>\n <Autocomplete\n disablePortal\n getOptionLabel={getSelectionOptionLabel}\n isOptionEqualToValue={isSelectionOptionEqualToValue}\n noOptionsText={t`No results`}\n onChange={onSelectionChange}\n options={selectionOptions}\n renderInput={renderSelectionInput}\n value={selectedOption}\n />\n </Box>\n {hasSelection ? (\n <Box\n sx={{\n color: 'text.secondary',\n display: 'flex',\n flexWrap: 'wrap',\n gap: 2,\n }}\n >\n <Box component={'span'}>\n {t('Organizations: {{count}}', { count: graph.totalOrganizations })}\n </Box>\n <Box component={'span'}>\n {t('Data collections: {{count}}', { count: graph.totalDataCollections })}\n </Box>\n <Box component={'span'}>\n {t('Access links: {{count}}', { count: graph.totalAccessLinks })}\n </Box>\n <Box component={'span'}>\n {t('Share routes: {{count}}', { count: graph.totalShareLinks })}\n </Box>\n <Box component={'span'}>\n {t`Solid links show organization access policies. Dashed links show sharing routes between data collections.`}\n </Box>\n </Box>\n ) : (\n <Typography color={'text.secondary'}>\n {t`Select an organization or data collection to show the visualization.`}\n </Typography>\n )}\n </Box>\n <Box\n sx={{\n borderRadius: 2,\n height: '100%',\n minHeight: 0,\n minWidth: 0,\n overflow: 'hidden',\n }}\n >\n {hasSelection && graph.nodes.length > 0 ? (\n <EChartsReact\n echarts={echartsCore}\n notMerge\n option={getOptions()}\n style={{\n height: '100%',\n width: '100%',\n }}\n />\n ) : (\n <Box\n sx={{\n color: 'text.secondary',\n display: 'grid',\n height: '100%',\n placeItems: 'center',\n px: 3,\n textAlign: 'center',\n }}\n >\n {hasSelection\n ? t`No active organization access or share policies are available to visualize.`\n : t`Select an organization or data collection to show the visualization.`}\n </Box>\n )}\n </Box>\n </ResponseHandler>\n </Box>\n </PageContainer>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\nimport {\n Autocomplete,\n Box,\n TextField,\n ToggleButton,\n ToggleButtonGroup,\n Typography,\n useTheme,\n} from '@mui/material';\nimport EChartsReact from 'echarts-for-react';\nimport {\n dispose,\n getInstanceByDom,\n init,\n use as registerECharts,\n} from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { TooltipComponent } from 'echarts/components';\nimport { GraphChart } from 'echarts/charts';\nimport {\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport type {\n MouseEvent as ReactMouseEvent,\n SyntheticEvent,\n} from 'react';\nimport type {\n EChartsOption,\n GraphSeriesOption,\n} from 'echarts';\nimport type { AutocompleteRenderInputParams } from '@mui/material/Autocomplete';\nimport type { CaseDbOrganizationAccessCasePolicy } from '@gen-epix/api-casedb';\nimport { LoadableUtil } from '@gen-epix/ui-client-common/utils/LoadableUtil';\nimport { PageContainer } from '@gen-epix/ui-client-common/components/ui/PageContainer';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useOrganizationMapQuery } from '@gen-epix/ui-client-common/dataHooks/useOrganizationsQuery';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useDataCollectionsMapQuery } from '../../dataHooks/useDataCollectionsQuery';\nimport { useOrganizationAccessCasePoliciesQuery } from '../../dataHooks/useOrganizationAccessCasePoliciesQuery';\nimport { useOrganizationShareCasePoliciesQuery } from '../../dataHooks/useOrganizationShareCasePoliciesQuery';\nimport { EffectiveRightsUtil } from '../../utils/EffectiveRightsUtil';\n\nconst echartsCore = {\n dispose,\n getInstanceByDom,\n init,\n};\n\nregisterECharts([TooltipComponent, CanvasRenderer, GraphChart]);\n\ntype AccessLink = {\n accessPolicyCount: number;\n accessRights: AccessRightsSummary;\n dataCollectionName: string;\n lineStyle: NonNullable<GraphSeriesOption['lineStyle']>;\n linkType: 'access';\n organizationName: string;\n sharePolicyCount: number;\n source: string;\n sourceDataCollectionNames: string[];\n target: string;\n value: number;\n};\n\ntype AccessRightsSummary = Pick<CaseDbOrganizationAccessCasePolicy, 'add_case_set' | 'add_case' | 'is_private' | 'read_case_set' | 'remove_case_set' | 'remove_case' | 'write_case_set'>;\n\ntype Category = {\n name: string;\n};\n\ntype Graph = {\n categories: Category[];\n links: Link[];\n nodes: Node[];\n totalAccessLinks: number;\n totalDataCollections: number;\n totalOrganizations: number;\n totalShareLinks: number;\n zoom: number;\n};\n\ntype GraphTooltipParams = {\n data: Link | Node;\n dataType?: 'edge' | 'node';\n};\n\ntype Link = AccessLink | ShareLink;\n\ntype Node = {\n accessLinkCount: number;\n category: number;\n id: string;\n itemStyle: {\n borderColor: string;\n borderWidth: number;\n color: string;\n };\n label: NonNullable<GraphSeriesOption['label']>;\n name: string;\n nodeType: 'dataCollection' | 'organization';\n shareInCount: number;\n shareOutCount: number;\n symbol: 'circle' | 'roundRect';\n symbolSize: number;\n value: number;\n x: number;\n y: number;\n};\n\ntype SelectionOption = {\n label: string;\n value: string;\n};\n\ntype SelectionType = 'dataCollection' | 'organization';\n\ntype ShareLink = {\n lineStyle: NonNullable<GraphSeriesOption['lineStyle']>;\n linkType: 'share';\n organizationNames: string[];\n sharePolicyCount: number;\n source: string;\n sourceDataCollectionName: string;\n target: string;\n targetDataCollectionName: string;\n value: number;\n};\n\nconst EMPTY_GRAPH: Graph = {\n categories: [],\n links: [],\n nodes: [],\n totalAccessLinks: 0,\n totalDataCollections: 0,\n totalOrganizations: 0,\n totalShareLinks: 0,\n zoom: 1,\n};\n\nconst GRAPH_LAYOUT = {\n bottomPadding: 72,\n fitZoomSafetyFactor: 0.94,\n labelPadding: 12,\n nodeLabelWidth: 220,\n organizationX: 120,\n rowGap: 68,\n singleRowVerticalOffset: 96,\n sourceDataCollectionX: 1060,\n targetAndSourceDataCollectionX: 820,\n targetDataCollectionX: 620,\n topPadding: 72,\n viewportHorizontalPadding: 24,\n viewportVerticalPadding: 24,\n} as const;\n\nexport const DataCollectionVisualizationPage = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n const [selectionType, setSelectionType] = useState<SelectionType>('organization');\n const [selectedEntityId, setSelectedEntityId] = useState<string>(null);\n const dataCollectionMapQuery = useDataCollectionsMapQuery();\n const organizationMapQuery = useOrganizationMapQuery();\n const organizationAccessCasePoliciesQuery = useOrganizationAccessCasePoliciesQuery(policies => policies.filter(policy => policy.is_active));\n const organizationShareCasePoliciesQuery = useOrganizationShareCasePoliciesQuery(policies => policies.filter(policy => policy.is_active));\n\n const loadables = useArray([\n dataCollectionMapQuery,\n organizationMapQuery,\n organizationAccessCasePoliciesQuery,\n organizationShareCasePoliciesQuery,\n ]);\n\n const organizationOptions = useMemo<SelectionOption[]>(() => {\n return Array.from(organizationMapQuery.map.values())\n .map(organization => ({\n label: organization.name,\n value: organization.id,\n }))\n .sort((a, b) => StringUtil.advancedSortComperator(a.label, b.label));\n }, [organizationMapQuery.map]);\n\n const dataCollectionOptions = useMemo<SelectionOption[]>(() => {\n return Array.from(dataCollectionMapQuery.map.values())\n .map(dataCollection => ({\n label: dataCollection.name,\n value: dataCollection.id,\n }))\n .sort((a, b) => StringUtil.advancedSortComperator(a.label, b.label));\n }, [dataCollectionMapQuery.map]);\n\n const selectionOptions = useMemo(() => {\n return selectionType === 'organization' ? organizationOptions : dataCollectionOptions;\n }, [dataCollectionOptions, organizationOptions, selectionType]);\n\n const selectedOption = useMemo(() => {\n return selectionOptions.find(option => option.value === selectedEntityId) ?? null;\n }, [selectedEntityId, selectionOptions]);\n\n const selectionLabel = selectionType === 'organization' ? t`Organization` : t`Data collection`;\n const hasSelection = !!selectedEntityId;\n\n const onSelectionTypeChange = useCallback((_event: ReactMouseEvent<HTMLElement>, nextSelectionType: null | SelectionType) => {\n if (!nextSelectionType || nextSelectionType === selectionType) {\n return;\n }\n\n setSelectionType(nextSelectionType);\n setSelectedEntityId(null);\n }, [selectionType]);\n\n const getSelectionOptionLabel = useCallback((option: SelectionOption) => {\n return option.label;\n }, []);\n\n const isSelectionOptionEqualToValue = useCallback((option: SelectionOption, value: SelectionOption) => {\n return option.value === value.value;\n }, []);\n\n const onSelectionChange = useCallback((_event: SyntheticEvent, nextOption: null | SelectionOption) => {\n setSelectedEntityId(nextOption?.value ?? null);\n }, []);\n\n const renderSelectionInput = useCallback((params: AutocompleteRenderInputParams) => {\n return (\n <TextField\n {...params}\n label={selectionLabel}\n required\n size={'small'}\n />\n );\n }, [selectionLabel]);\n\n const graph = useMemo<Graph>(() => {\n if (LoadableUtil.isSomeLoading(loadables)) {\n return EMPTY_GRAPH;\n }\n\n if (!selectedEntityId) {\n return EMPTY_GRAPH;\n }\n\n const categories: Category[] = [\n {\n name: t`Organization`,\n },\n {\n name: t`Data collection`,\n },\n ];\n\n const organizationNodeColor = theme.palette.primary.main;\n const organizationNodeBorderColor = theme.palette.primary.dark;\n const dataCollectionNodeColor = theme.palette.secondary.main;\n const dataCollectionNodeBorderColor = theme.palette.secondary.dark;\n const accessLinkColor = theme.palette.primary.light;\n const shareLinkColor = theme.palette.warning.main;\n\n const policyGroups = EffectiveRightsUtil.getOrganizationPolicyGroups({\n organizationAccessCasePolicies: organizationAccessCasePoliciesQuery.data,\n organizationShareCasePolicies: organizationShareCasePoliciesQuery.data,\n });\n\n const filteredPolicyGroups = policyGroups.filter(policyGroup => {\n if (selectionType === 'organization') {\n return policyGroup.organization_id === selectedEntityId;\n }\n\n return policyGroup.data_collection_id === selectedEntityId\n || policyGroup.share_case_policies.some(policy => policy.from_data_collection_id === selectedEntityId);\n });\n\n const nodesById = new Map<string, Omit<Node, 'accessLinkCount' | 'label' | 'shareInCount' | 'shareOutCount' | 'symbolSize' | 'value' | 'x' | 'y'>>();\n const nodeStats = new Map<string, Pick<Node, 'accessLinkCount' | 'shareInCount' | 'shareOutCount'>>();\n const accessLinks: AccessLink[] = [];\n const shareLinksByKey = new Map<string, {\n organizationNames: Set<string>;\n sharePolicyCount: number;\n source: string;\n sourceDataCollectionName: string;\n target: string;\n targetDataCollectionName: string;\n }>();\n\n const buildNodeLabel = (position: 'left' | 'right'): Node['label'] => {\n return {\n color: theme.palette.text.primary,\n distance: 8,\n fontSize: 12,\n formatter: '{b}',\n overflow: 'truncate',\n position,\n show: true,\n width: GRAPH_LAYOUT.nodeLabelWidth,\n };\n };\n\n const ensureNode = (params: {\n borderColor: string;\n category: number;\n color: string;\n id: string;\n name: string;\n nodeType: Node['nodeType'];\n symbol: Node['symbol'];\n }) => {\n if (nodesById.has(params.id)) {\n return;\n }\n\n nodesById.set(params.id, {\n category: params.category,\n id: params.id,\n itemStyle: {\n borderColor: params.borderColor,\n borderWidth: 1.5,\n color: params.color,\n },\n name: params.name,\n nodeType: params.nodeType,\n symbol: params.symbol,\n });\n };\n\n const incrementNodeStat = (nodeId: string, key: keyof Pick<Node, 'accessLinkCount' | 'shareInCount' | 'shareOutCount'>) => {\n const currentStats = nodeStats.get(nodeId) ?? {\n accessLinkCount: 0,\n shareInCount: 0,\n shareOutCount: 0,\n };\n\n currentStats[key] += 1;\n nodeStats.set(nodeId, currentStats);\n };\n\n filteredPolicyGroups.forEach(policyGroup => {\n const organizationNodeId = `organization:${policyGroup.organization_id}`;\n const targetDataCollectionNodeId = `dataCollection:${policyGroup.data_collection_id}`;\n const organizationName = organizationMapQuery.map.get(policyGroup.organization_id)?.name ?? policyGroup.organization_id;\n const targetDataCollectionName = dataCollectionMapQuery.map.get(policyGroup.data_collection_id)?.name ?? policyGroup.data_collection_id;\n const sourceDataCollectionNames = Array.from(new Set(policyGroup.share_case_policies.map(policy => dataCollectionMapQuery.map.get(policy.from_data_collection_id)?.name ?? policy.from_data_collection_id))).sort();\n\n const accessRights = policyGroup.access_case_policies.reduce<AccessRightsSummary>((summary, policy) => {\n return {\n add_case: summary.add_case || policy.add_case,\n add_case_set: summary.add_case_set || policy.add_case_set,\n is_private: summary.is_private || policy.is_private,\n read_case_set: summary.read_case_set || policy.read_case_set,\n remove_case: summary.remove_case || policy.remove_case,\n remove_case_set: summary.remove_case_set || policy.remove_case_set,\n write_case_set: summary.write_case_set || policy.write_case_set,\n };\n }, {\n add_case: false,\n add_case_set: false,\n is_private: false,\n read_case_set: false,\n remove_case: false,\n remove_case_set: false,\n write_case_set: false,\n });\n\n ensureNode({\n borderColor: organizationNodeBorderColor,\n category: 0,\n color: organizationNodeColor,\n id: organizationNodeId,\n name: organizationName,\n nodeType: 'organization',\n symbol: 'roundRect',\n });\n ensureNode({\n borderColor: dataCollectionNodeBorderColor,\n category: 1,\n color: dataCollectionNodeColor,\n id: targetDataCollectionNodeId,\n name: targetDataCollectionName,\n nodeType: 'dataCollection',\n symbol: 'circle',\n });\n\n accessLinks.push({\n accessPolicyCount: policyGroup.access_case_policies.length,\n accessRights,\n dataCollectionName: targetDataCollectionName,\n lineStyle: {\n color: accessLinkColor,\n curveness: 0.08,\n opacity: 0.5,\n width: 1.5 + Math.min(policyGroup.access_case_policies.length * 0.35, 1.5),\n },\n linkType: 'access',\n organizationName,\n sharePolicyCount: policyGroup.share_case_policies.length,\n source: organizationNodeId,\n sourceDataCollectionNames,\n target: targetDataCollectionNodeId,\n value: Math.max(policyGroup.access_case_policies.length, 1),\n });\n\n incrementNodeStat(organizationNodeId, 'accessLinkCount');\n incrementNodeStat(targetDataCollectionNodeId, 'accessLinkCount');\n\n policyGroup.share_case_policies.forEach(sharePolicy => {\n const sourceDataCollectionNodeId = `dataCollection:${sharePolicy.from_data_collection_id}`;\n const sourceDataCollectionName = dataCollectionMapQuery.map.get(sharePolicy.from_data_collection_id)?.name ?? sharePolicy.from_data_collection_id;\n const shareLinkKey = `${sourceDataCollectionNodeId}::${targetDataCollectionNodeId}`;\n const existingShareLink = shareLinksByKey.get(shareLinkKey);\n\n ensureNode({\n borderColor: dataCollectionNodeBorderColor,\n category: 1,\n color: dataCollectionNodeColor,\n id: sourceDataCollectionNodeId,\n name: sourceDataCollectionName,\n nodeType: 'dataCollection',\n symbol: 'circle',\n });\n\n if (existingShareLink) {\n existingShareLink.organizationNames.add(organizationName);\n existingShareLink.sharePolicyCount += 1;\n return;\n }\n\n shareLinksByKey.set(shareLinkKey, {\n organizationNames: new Set([organizationName]),\n sharePolicyCount: 1,\n source: sourceDataCollectionNodeId,\n sourceDataCollectionName,\n target: targetDataCollectionNodeId,\n targetDataCollectionName,\n });\n });\n });\n\n const shareLinks = Array.from(shareLinksByKey.values()).map(shareLink => {\n incrementNodeStat(shareLink.source, 'shareOutCount');\n incrementNodeStat(shareLink.target, 'shareInCount');\n\n return {\n lineStyle: {\n color: shareLinkColor,\n curveness: 0.28,\n opacity: 0.45,\n type: 'dashed',\n width: 1.25 + Math.min(shareLink.sharePolicyCount * 0.3, 1.25),\n },\n linkType: 'share',\n organizationNames: Array.from(shareLink.organizationNames).sort(),\n sharePolicyCount: shareLink.sharePolicyCount,\n source: shareLink.source,\n sourceDataCollectionName: shareLink.sourceDataCollectionName,\n target: shareLink.target,\n targetDataCollectionName: shareLink.targetDataCollectionName,\n value: Math.max(shareLink.sharePolicyCount, 1),\n } satisfies ShareLink;\n });\n\n const rawNodes = Array.from(nodesById.values())\n .map(node => {\n const stats = nodeStats.get(node.id) ?? {\n accessLinkCount: 0,\n shareInCount: 0,\n shareOutCount: 0,\n };\n const totalConnections = stats.accessLinkCount + stats.shareInCount + stats.shareOutCount;\n\n return {\n ...node,\n accessLinkCount: stats.accessLinkCount,\n label: buildNodeLabel('right'),\n shareInCount: stats.shareInCount,\n shareOutCount: stats.shareOutCount,\n symbolSize: node.nodeType === 'organization'\n ? Math.min(22 + (stats.accessLinkCount * 2), 34)\n : Math.min(18 + (totalConnections * 1.5), 30),\n value: totalConnections,\n x: 0,\n y: 0,\n } satisfies Node;\n });\n\n const getDataCollectionLayoutRank = (node: Node) => {\n if (node.accessLinkCount > 0 && node.shareOutCount > 0) {\n return 1;\n }\n if (node.accessLinkCount > 0) {\n return 0;\n }\n return 2;\n };\n\n const getDataCollectionX = (node: Node) => {\n if (node.accessLinkCount > 0 && node.shareOutCount > 0) {\n return GRAPH_LAYOUT.targetAndSourceDataCollectionX;\n }\n if (node.accessLinkCount > 0) {\n return GRAPH_LAYOUT.targetDataCollectionX;\n }\n return GRAPH_LAYOUT.sourceDataCollectionX;\n };\n\n const getDataCollectionLabelPosition = (node: Node): 'left' | 'right' => {\n return node.accessLinkCount > 0 && node.shareOutCount === 0 ? 'left' : 'right';\n };\n\n const isSingleNodePair = rawNodes.filter(node => node.nodeType === 'organization').length === 1\n && rawNodes.filter(node => node.nodeType === 'dataCollection').length === 1;\n\n const organizationNodes = rawNodes\n .filter(node => node.nodeType === 'organization')\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((node, index) => {\n return {\n ...node,\n label: buildNodeLabel('right'),\n x: GRAPH_LAYOUT.organizationX,\n y: GRAPH_LAYOUT.topPadding + (index * GRAPH_LAYOUT.rowGap),\n } satisfies Node;\n });\n\n const dataCollectionNodes = rawNodes\n .filter(node => node.nodeType === 'dataCollection')\n .sort((a, b) => {\n const rankDifference = getDataCollectionLayoutRank(a) - getDataCollectionLayoutRank(b);\n if (rankDifference !== 0) {\n return rankDifference;\n }\n return a.name.localeCompare(b.name);\n })\n .map((node, index) => {\n return {\n ...node,\n label: buildNodeLabel(getDataCollectionLabelPosition(node)),\n x: getDataCollectionX(node),\n y: GRAPH_LAYOUT.topPadding + (index * GRAPH_LAYOUT.rowGap) + (isSingleNodePair ? GRAPH_LAYOUT.singleRowVerticalOffset : 0),\n } satisfies Node;\n });\n\n const nodes = [...organizationNodes, ...dataCollectionNodes];\n const nodeBounds = nodes.reduce((bounds, node) => {\n return {\n maxX: Math.max(bounds.maxX, node.x),\n maxY: Math.max(bounds.maxY, node.y),\n minX: Math.min(bounds.minX, node.x),\n minY: Math.min(bounds.minY, node.y),\n };\n }, {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n\n const contentBounds = nodes.reduce((bounds, node) => {\n const halfSymbolSize = node.symbolSize / 2;\n const labelPadding = GRAPH_LAYOUT.nodeLabelWidth + GRAPH_LAYOUT.labelPadding;\n const labelPosition = node.label.position === 'left' ? 'left' : 'right';\n\n return {\n maxX: Math.max(bounds.maxX, node.x + halfSymbolSize + (labelPosition === 'right' ? labelPadding : 0)),\n maxY: Math.max(bounds.maxY, node.y + halfSymbolSize + GRAPH_LAYOUT.viewportVerticalPadding),\n minX: Math.min(bounds.minX, node.x - halfSymbolSize - (labelPosition === 'left' ? labelPadding : 0)),\n minY: Math.min(bounds.minY, node.y - halfSymbolSize - GRAPH_LAYOUT.viewportVerticalPadding),\n };\n }, {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n\n const nodeWidth = Math.max(nodeBounds.maxX - nodeBounds.minX, 1);\n const nodeHeight = Math.max(nodeBounds.maxY - nodeBounds.minY, 1);\n const contentWidth = Math.max(contentBounds.maxX - contentBounds.minX, 1);\n const contentHeight = Math.max(contentBounds.maxY - contentBounds.minY, 1);\n const zoom = Math.max(\n Math.min(\n (nodeWidth / contentWidth),\n (nodeHeight / contentHeight),\n 1,\n ) * GRAPH_LAYOUT.fitZoomSafetyFactor,\n 0.1,\n );\n\n return {\n categories,\n links: [...accessLinks, ...shareLinks],\n nodes,\n totalAccessLinks: accessLinks.length,\n totalDataCollections: dataCollectionNodes.length,\n totalOrganizations: organizationNodes.length,\n totalShareLinks: shareLinks.length,\n zoom,\n } satisfies Graph;\n }, [dataCollectionMapQuery.map, loadables, organizationAccessCasePoliciesQuery.data, organizationMapQuery.map, organizationShareCasePoliciesQuery.data, selectedEntityId, selectionType, t, theme.palette.primary.dark, theme.palette.primary.light, theme.palette.primary.main, theme.palette.secondary.dark, theme.palette.secondary.main, theme.palette.text.primary, theme.palette.warning.main]);\n\n const formatAccessRights = useCallback((accessRights: AccessRightsSummary) => {\n const enabledRights = [\n accessRights.add_case ? t`Add case` : null,\n accessRights.remove_case ? t`Remove case` : null,\n accessRights.add_case_set ? t`Add case set` : null,\n accessRights.remove_case_set ? t`Remove case set` : null,\n accessRights.read_case_set ? t`Read case set` : null,\n accessRights.write_case_set ? t`Write case set` : null,\n accessRights.is_private ? t`Private` : null,\n ].filter((value): value is string => !!value);\n\n return enabledRights.length > 0 ? enabledRights.join(', ') : t`None`;\n }, [t]);\n\n const formatList = useCallback((items: string[]) => {\n return items.length > 0 ? items.join(', ') : t`None`;\n }, [t]);\n\n const getOptions = useCallback(() => {\n return {\n animation: false,\n series: [\n {\n bottom: GRAPH_LAYOUT.viewportVerticalPadding,\n categories: graph.categories,\n center: ['50%', '50%'],\n data: graph.nodes,\n edgeSymbol: ['none', 'arrow'],\n edgeSymbolSize: 8,\n emphasis: {\n focus: 'adjacency',\n lineStyle: {\n width: 3,\n },\n },\n layout: 'none',\n left: GRAPH_LAYOUT.viewportHorizontalPadding,\n lineStyle: {\n opacity: 0.45,\n },\n links: graph.links,\n right: GRAPH_LAYOUT.viewportHorizontalPadding,\n roam: true,\n roamTrigger: 'global',\n scaleLimit: {\n max: 4,\n min: 0.1,\n },\n top: GRAPH_LAYOUT.viewportVerticalPadding,\n type: 'graph',\n zoom: graph.zoom,\n } satisfies GraphSeriesOption,\n ],\n tooltip: {\n formatter: (params: unknown) => {\n const typedParams = params as GraphTooltipParams;\n\n if (typedParams.dataType === 'node') {\n const node = typedParams.data as Node;\n\n if (node.nodeType === 'organization') {\n return [\n `<strong>${node.name}</strong>`,\n `${t('Accessible data collections')}: ${node.accessLinkCount}`,\n `${t('Connected share routes')}: ${node.shareInCount + node.shareOutCount}`,\n ].join('<br/>');\n }\n\n return [\n `<strong>${node.name}</strong>`,\n `${t('Organization access links')}: ${node.accessLinkCount}`,\n `${t('Incoming share routes')}: ${node.shareInCount}`,\n `${t('Outgoing share routes')}: ${node.shareOutCount}`,\n ].join('<br/>');\n }\n\n const link = typedParams.data as Link;\n\n if (link.linkType === 'access') {\n return [\n `<strong>${link.organizationName} -> ${link.dataCollectionName}</strong>`,\n `${t('Type')}: ${t`Organization access`}`,\n `${t('Active access policies')}: ${link.accessPolicyCount}`,\n `${t('Enabled access rights')}: ${formatAccessRights(link.accessRights)}`,\n `${t('Share source collections')}: ${formatList(link.sourceDataCollectionNames)}`,\n ].join('<br/>');\n }\n\n return [\n `<strong>${link.sourceDataCollectionName} -> ${link.targetDataCollectionName}</strong>`,\n `${t('Type')}: ${t`Organization share`}`,\n `${t('Active share policies')}: ${link.sharePolicyCount}`,\n `${t('Organizations')}: ${formatList(link.organizationNames)}`,\n ].join('<br/>');\n },\n },\n } satisfies EChartsOption;\n }, [formatAccessRights, formatList, graph.categories, graph.links, graph.nodes, graph.zoom, t]);\n\n return (\n <PageContainer\n fullHeight\n fullWidth\n showBreadcrumbs\n testIdAttributes={TestIdUtil.createAttributes('DataCollectionVisualizationPage')}\n title={t`Data collection visualization`}\n >\n <Box\n sx={{\n display: 'grid',\n gap: 2,\n gridTemplateRows: 'auto minmax(0, 1fr)',\n height: '100%',\n minHeight: 0,\n overflow: 'hidden',\n }}\n >\n <ResponseHandler\n loadables={loadables}\n >\n <Box\n sx={{\n borderRadius: 2,\n display: 'grid',\n gap: 2,\n px: 2,\n py: 2,\n }}\n >\n <Box\n sx={{\n alignItems: 'end',\n display: 'grid',\n gap: 2,\n gridTemplateColumns: {\n md: 'max-content minmax(320px, 520px)',\n xs: '1fr',\n },\n }}\n >\n <Box\n sx={{\n display: 'grid',\n gap: 0.75,\n }}\n >\n <Typography\n color={'text.secondary'}\n variant={'overline'}\n >\n {t`Type`}\n </Typography>\n <ToggleButtonGroup\n exclusive\n onChange={onSelectionTypeChange}\n size={'small'}\n value={selectionType}\n >\n <ToggleButton value={'organization'}>\n {t`Organization`}\n </ToggleButton>\n <ToggleButton value={'dataCollection'}>\n {t`Data collection`}\n </ToggleButton>\n </ToggleButtonGroup>\n </Box>\n <Autocomplete\n disablePortal\n getOptionLabel={getSelectionOptionLabel}\n isOptionEqualToValue={isSelectionOptionEqualToValue}\n noOptionsText={t`No results`}\n onChange={onSelectionChange}\n options={selectionOptions}\n renderInput={renderSelectionInput}\n value={selectedOption}\n />\n </Box>\n {hasSelection ? (\n <Box\n sx={{\n color: 'text.secondary',\n display: 'flex',\n flexWrap: 'wrap',\n gap: 2,\n }}\n >\n <Box component={'span'}>\n {t('Organizations: {{count}}', { count: graph.totalOrganizations })}\n </Box>\n <Box component={'span'}>\n {t('Data collections: {{count}}', { count: graph.totalDataCollections })}\n </Box>\n <Box component={'span'}>\n {t('Access links: {{count}}', { count: graph.totalAccessLinks })}\n </Box>\n <Box component={'span'}>\n {t('Share routes: {{count}}', { count: graph.totalShareLinks })}\n </Box>\n <Box component={'span'}>\n {t`Solid links show organization access policies. Dashed links show sharing routes between data collections.`}\n </Box>\n </Box>\n ) : (\n <Typography color={'text.secondary'}>\n {t`Select an organization or data collection to show the visualization.`}\n </Typography>\n )}\n </Box>\n <Box\n sx={{\n borderRadius: 2,\n height: '100%',\n minHeight: 0,\n minWidth: 0,\n overflow: 'hidden',\n }}\n >\n {hasSelection && graph.nodes.length > 0 ? (\n <EChartsReact\n echarts={echartsCore}\n notMerge\n option={getOptions()}\n style={{\n height: '100%',\n width: '100%',\n }}\n />\n ) : (\n <Box\n sx={{\n color: 'text.secondary',\n display: 'grid',\n height: '100%',\n placeItems: 'center',\n px: 3,\n textAlign: 'center',\n }}\n >\n {hasSelection\n ? t`No active organization access or share policies are available to visualize.`\n : t`Select an organization or data collection to show the visualization.`}\n </Box>\n )}\n </Box>\n </ResponseHandler>\n </Box>\n </PageContainer>\n );\n};\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
2
2
  import { object as t } from "yup";
3
3
  import { CaseDbCommandName as n, CaseDbOrganizationApi as r } from "@gen-epix/api-casedb";
4
- import { FORM_FIELD_DEFINITION_TYPE as i } from "@gen-epix/ui-form/models/form";
4
+ import { FORM_FIELD_DEFINITION_TYPE as i } from "@gen-epix/ui-core-form/models/form";
5
5
  import { useCallback as a, useMemo as o } from "react";
6
6
  import { useTranslation as s } from "react-i18next";
7
7
  import { jsx as c } from "react/jsx-runtime";
8
- import { TableUtil as l } from "@gen-epix/ui/utils/TableUtil";
8
+ import { TableUtil as l } from "@gen-epix/ui-client-common/utils/TableUtil";
9
9
  import { TestIdUtil as u } from "@gen-epix/ui-core/utils/TestIdUtil";
10
- import { SchemaUtil as d } from "@gen-epix/ui-form/utils/SchemaUtil";
11
- import { CrudPage as f } from "@gen-epix/ui/pages/CrudPage";
10
+ import { SchemaUtil as d } from "@gen-epix/ui-core-form/utils/SchemaUtil";
11
+ import { CrudPage as f } from "@gen-epix/ui-client-common/pages/CrudPage";
12
12
  //#region src/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.tsx
13
13
  var p = () => {
14
14
  let { t: p } = s(), m = a(async (e) => (await r.getInstance().dataCollectionsGetAll(null, null, { signal: e }))?.data, []), h = a(async (e) => await r.getInstance().dataCollectionsDeleteOne(e.id), []), g = a(async (e, t) => (await r.getInstance().dataCollectionsPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { object } from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbDataCollection,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOrganizationApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbDataCollection>;\n\nexport const DataCollectionsAdminPage = () => {\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbDataCollection) => {\n return await CaseDbOrganizationApi.getInstance().dataCollectionsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDataCollection) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: FormFields) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbDataCollection>[] => {\n return [\n TableUtil.createTextColumn<CaseDbDataCollection>({ id: 'name', name: t`Name` }),\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbDataCollection, CaseDbDataCollection, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new data collection`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DataCollectionCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Data collection`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DATA_COLLECTIONS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('DataCollectionsAdminPage')}\n title={t`Data collections`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA4BA,IAAa,UAAiC;CAC5C,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAsB,YAAY,CAAC,CAAC,sBAAsB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACjG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAsB,YAAY,CAAC,CAAC,yBAAyB,EAAK,EAAE,GAChF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAsB,YAAY,CAAC,CAAC,sBAAsB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MAChH,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAsB,YAAY,CAAC,CAAC,uBAAuB,CAAS,EAAA,CAAG,MACpF,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,aAAa,EAAW;EACxB,MAAM,EAAW;CACnB,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ,CACL,EAAU,iBAAuC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,CAChF,GACC,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,0BAA0B;EACxE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { object } from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbDataCollection,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOrganizationApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbDataCollection>;\n\nexport const DataCollectionsAdminPage = () => {\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbDataCollection) => {\n return await CaseDbOrganizationApi.getInstance().dataCollectionsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDataCollection) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOrganizationApi.getInstance().dataCollectionsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: FormFields) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n description: SchemaUtil.description,\n name: SchemaUtil.name,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbDataCollection>[] => {\n return [\n TableUtil.createTextColumn<CaseDbDataCollection>({ id: 'name', name: t`Name` }),\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbDataCollection, CaseDbDataCollection, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new data collection`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DataCollectionCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Data collection`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DATA_COLLECTIONS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('DataCollectionsAdminPage')}\n title={t`Data collections`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA4BA,IAAa,UAAiC;CAC5C,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAsB,YAAY,CAAC,CAAC,sBAAsB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACjG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAsB,YAAY,CAAC,CAAC,yBAAyB,EAAK,EAAE,GAChF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAsB,YAAY,CAAC,CAAC,sBAAsB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MAChH,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAsB,YAAY,CAAC,CAAC,uBAAuB,CAAS,EAAA,CAAG,MACpF,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,aAAa,EAAW;EACxB,MAAM,EAAW;CACnB,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ,CACL,EAAU,iBAAuC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,CAChF,GACC,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,0BAA0B;EACxE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -1,19 +1,19 @@
1
1
  import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
2
2
  import { useCaseTypeMapQuery as t, useCaseTypeOptionsQuery as n } from "../../dataHooks/useCaseTypesQuery/index.js";
3
- import { t as r } from "../../_chunks/chunk-KS7C4IRE.js";
3
+ import { t as r } from "../../_chunks/chunk-BV7QT456.js";
4
4
  import { useRefDimOptionsQuery as i } from "../../dataHooks/useRefDimsQuery/index.js";
5
5
  import { boolean as a, object as o, string as s } from "yup";
6
6
  import { CaseDbCaseApi as c, CaseDbCommandName as l, CaseDbPermissionType as u } from "@gen-epix/api-casedb";
7
- import { FORM_FIELD_DEFINITION_TYPE as d } from "@gen-epix/ui-form/models/form";
7
+ import { FORM_FIELD_DEFINITION_TYPE as d } from "@gen-epix/ui-core-form/models/form";
8
8
  import { useCallback as f, useMemo as p } from "react";
9
9
  import { useTranslation as m } from "react-i18next";
10
10
  import { jsx as h } from "react/jsx-runtime";
11
11
  import { useArray as g } from "@gen-epix/ui-core/hooks/useArray";
12
- import { TableUtil as _ } from "@gen-epix/ui/utils/TableUtil";
12
+ import { TableUtil as _ } from "@gen-epix/ui-client-common/utils/TableUtil";
13
13
  import { TestIdUtil as v } from "@gen-epix/ui-core/utils/TestIdUtil";
14
- import { SchemaUtil as y } from "@gen-epix/ui-form/utils/SchemaUtil";
15
- import { AuthorizationService as b } from "@gen-epix/ui/classes/services/AuthorizationService";
16
- import { CrudPage as x } from "@gen-epix/ui/pages/CrudPage";
14
+ import { SchemaUtil as y } from "@gen-epix/ui-core-form/utils/SchemaUtil";
15
+ import { AuthorizationService as b } from "@gen-epix/ui-client-common/classes/services/AuthorizationService";
16
+ import { CrudPage as x } from "@gen-epix/ui-client-common/pages/CrudPage";
17
17
  //#region src/pages/DimsAdminPage/DimsAdminPage.tsx
18
18
  var S = () => {
19
19
  let { caseTypeId: S } = r(), { t: C } = m(), w = i(), T = n(), E = t(), D = g([T, w]), O = f(async (e) => (await c.getInstance().dimsGetAll(null, null, { signal: e }))?.data, []), k = f((e) => S ? e.filter((e) => e.case_type_id === S) : e, [S]), A = f(async (e) => await c.getInstance().dimsDeleteOne(e.id), []), j = f(async (e, t) => (await c.getInstance().dimsPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DimsAdminPage/DimsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n boolean,\n object,\n string,\n} from 'yup';\nimport { useParams } from 'react-router-dom';\nimport type {\n CaseDbApiPermission,\n CaseDbDim,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbCommandName,\n CaseDbPermissionType,\n} from '@gen-epix/api-casedb';\nimport type { CrudPageSubPage } from '@gen-epix/ui/pages/CrudPage';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { AuthorizationService } from '@gen-epix/ui/classes/services/AuthorizationService';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\n\nimport {\n useCaseTypeMapQuery,\n useCaseTypeOptionsQuery,\n} from '../../dataHooks/useCaseTypesQuery';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useRefDimOptionsQuery } from '../../dataHooks/useRefDimsQuery';\n\ntype FormFields = OmitWithMetaData<CaseDbDim, 'case_type' | 'ref_dim'>;\n\nexport const DimsAdminPage = () => {\n const { caseTypeId } = useParams();\n const { t } = useTranslation();\n const refDimOptionsQuery = useRefDimOptionsQuery();\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const caseTypeMapQuery = useCaseTypeMapQuery();\n\n const loadables = useArray([caseTypeOptionsQuery, refDimOptionsQuery]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbCaseApi.getInstance().dimsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const fetchAllSelect = useCallback((dims: CaseDbDim[]) => {\n if (caseTypeId) {\n return dims.filter((dim) => dim.case_type_id === caseTypeId);\n }\n return dims;\n }, [caseTypeId]);\n\n const deleteOne = useCallback(async (item: CaseDbDim) => {\n return await CaseDbCaseApi.getInstance().dimsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDim) => {\n return (await CaseDbCaseApi.getInstance().dimsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbCaseApi.getInstance().dimsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbDim) => {\n return item.label;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n case_type_id: string().uuid4().required().max(100),\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n is_case_date_dim: boolean().required(),\n label: SchemaUtil.label,\n occurrence: SchemaUtil.number.required().min(0).integer().positive(),\n rank: SchemaUtil.rank,\n ref_dim_id: string().uuid4().required().max(100),\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Case type`,\n name: 'case_type_id',\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Reference dimension`,\n name: 'ref_dim_id',\n options: refDimOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Label`,\n name: 'label',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Description`,\n multiline: true,\n name: 'description',\n rows: 5,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Occurrence`,\n name: 'occurrence',\n type: 'number',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Rank`,\n name: 'rank',\n type: 'number',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const satisfies FormFieldDefinition<FormFields>[];\n }, [caseTypeOptionsQuery.options, refDimOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbDim>[] => {\n const columns: TableColumn<CaseDbDim>[] = [];\n\n if (!caseTypeId) {\n columns.push(\n TableUtil.createOptionsColumn<CaseDbDim>({ id: 'case_type_id', name: t`Case type`, options: caseTypeOptionsQuery.options }),\n );\n }\n\n columns.push(\n TableUtil.createOptionsColumn<CaseDbDim>({ id: 'ref_dim_id', name: t`Reference dimension`, options: refDimOptionsQuery.options }),\n TableUtil.createTextColumn<CaseDbDim>({ id: 'code', name: t`Code` }),\n TableUtil.createTextColumn<CaseDbDim>({ id: 'label', name: t`Label` }),\n TableUtil.createNumberColumn<CaseDbDim>({ id: 'occurrence', name: t`Occurrence` }),\n TableUtil.createNumberColumn<CaseDbDim>({ id: 'rank', name: t`Rank` }),\n );\n return columns;\n }, [caseTypeId, caseTypeOptionsQuery.options, refDimOptionsQuery.options, t]);\n\n const defaultNewItem = useMemo<Partial<FormFields>>(() => {\n return {\n case_type_id: caseTypeId ?? null,\n };\n }, [caseTypeId]);\n\n const subPages = useMemo<CrudPageSubPage<CaseDbDim>[]>(() => {\n if (!AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([\n { command_name: CaseDbCommandName.RefColCrudCommand, permission_type: CaseDbPermissionType.READ },\n ])) {\n return [];\n }\n\n return [\n {\n getPathName: (item: CaseDbDim) => caseTypeId ? `/management/case-types/${caseTypeId}/dimensions/${item.id}/columns` : `/management/dimensions/${item.id}/columns`,\n label: t`Manage columns`,\n } satisfies CrudPageSubPage<CaseDbDim>,\n ];\n }, [caseTypeId, t]);\n\n const title = useMemo(() => {\n const parts: string[] = [];\n\n if (caseTypeId && caseTypeMapQuery.map.has(caseTypeId)) {\n parts.push(caseTypeMapQuery.map.get(caseTypeId)?.name);\n }\n parts.push(t`Dimensions`);\n\n return parts;\n }, [caseTypeId, caseTypeMapQuery.map, t]);\n\n return (\n <CrudPage<FormFields, CaseDbDim, CaseDbDim, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new dimensions`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DimCrudCommand}\n defaultNewItem={defaultNewItem}\n defaultSortByField={caseTypeId ? 'rank' : 'case_type_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n fetchAllSelect={fetchAllSelect}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Dimension`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DIMS}\n schema={schema}\n subPages={subPages}\n tableColumns={tableColumns}\n tableStoreStorageNamePostFix={caseTypeId ? `CaseType` : undefined}\n testIdAttributes={TestIdUtil.createAttributes('DimsAdminPage')}\n title={title}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DimsAdminPage/DimsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n boolean,\n object,\n string,\n} from 'yup';\nimport { useParams } from 'react-router-dom';\nimport type {\n CaseDbApiPermission,\n CaseDbDim,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbCommandName,\n CaseDbPermissionType,\n} from '@gen-epix/api-casedb';\nimport type { CrudPageSubPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { AuthorizationService } from '@gen-epix/ui-client-common/classes/services/AuthorizationService';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport {\n useCaseTypeMapQuery,\n useCaseTypeOptionsQuery,\n} from '../../dataHooks/useCaseTypesQuery';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useRefDimOptionsQuery } from '../../dataHooks/useRefDimsQuery';\n\ntype FormFields = OmitWithMetaData<CaseDbDim, 'case_type' | 'ref_dim'>;\n\nexport const DimsAdminPage = () => {\n const { caseTypeId } = useParams();\n const { t } = useTranslation();\n const refDimOptionsQuery = useRefDimOptionsQuery();\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const caseTypeMapQuery = useCaseTypeMapQuery();\n\n const loadables = useArray([caseTypeOptionsQuery, refDimOptionsQuery]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbCaseApi.getInstance().dimsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const fetchAllSelect = useCallback((dims: CaseDbDim[]) => {\n if (caseTypeId) {\n return dims.filter((dim) => dim.case_type_id === caseTypeId);\n }\n return dims;\n }, [caseTypeId]);\n\n const deleteOne = useCallback(async (item: CaseDbDim) => {\n return await CaseDbCaseApi.getInstance().dimsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDim) => {\n return (await CaseDbCaseApi.getInstance().dimsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbCaseApi.getInstance().dimsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbDim) => {\n return item.label;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n case_type_id: string().uuid4().required().max(100),\n code: SchemaUtil.code,\n description: SchemaUtil.description,\n is_case_date_dim: boolean().required(),\n label: SchemaUtil.label,\n occurrence: SchemaUtil.number.required().min(0).integer().positive(),\n rank: SchemaUtil.rank,\n ref_dim_id: string().uuid4().required().max(100),\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Case type`,\n name: 'case_type_id',\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Reference dimension`,\n name: 'ref_dim_id',\n options: refDimOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Label`,\n name: 'label',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Description`,\n multiline: true,\n name: 'description',\n rows: 5,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Occurrence`,\n name: 'occurrence',\n type: 'number',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Rank`,\n name: 'rank',\n type: 'number',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const satisfies FormFieldDefinition<FormFields>[];\n }, [caseTypeOptionsQuery.options, refDimOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbDim>[] => {\n const columns: TableColumn<CaseDbDim>[] = [];\n\n if (!caseTypeId) {\n columns.push(\n TableUtil.createOptionsColumn<CaseDbDim>({ id: 'case_type_id', name: t`Case type`, options: caseTypeOptionsQuery.options }),\n );\n }\n\n columns.push(\n TableUtil.createOptionsColumn<CaseDbDim>({ id: 'ref_dim_id', name: t`Reference dimension`, options: refDimOptionsQuery.options }),\n TableUtil.createTextColumn<CaseDbDim>({ id: 'code', name: t`Code` }),\n TableUtil.createTextColumn<CaseDbDim>({ id: 'label', name: t`Label` }),\n TableUtil.createNumberColumn<CaseDbDim>({ id: 'occurrence', name: t`Occurrence` }),\n TableUtil.createNumberColumn<CaseDbDim>({ id: 'rank', name: t`Rank` }),\n );\n return columns;\n }, [caseTypeId, caseTypeOptionsQuery.options, refDimOptionsQuery.options, t]);\n\n const defaultNewItem = useMemo<Partial<FormFields>>(() => {\n return {\n case_type_id: caseTypeId ?? null,\n };\n }, [caseTypeId]);\n\n const subPages = useMemo<CrudPageSubPage<CaseDbDim>[]>(() => {\n if (!AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([\n { command_name: CaseDbCommandName.RefColCrudCommand, permission_type: CaseDbPermissionType.READ },\n ])) {\n return [];\n }\n\n return [\n {\n getPathName: (item: CaseDbDim) => caseTypeId ? `/management/case-types/${caseTypeId}/dimensions/${item.id}/columns` : `/management/dimensions/${item.id}/columns`,\n label: t`Manage columns`,\n } satisfies CrudPageSubPage<CaseDbDim>,\n ];\n }, [caseTypeId, t]);\n\n const title = useMemo(() => {\n const parts: string[] = [];\n\n if (caseTypeId && caseTypeMapQuery.map.has(caseTypeId)) {\n parts.push(caseTypeMapQuery.map.get(caseTypeId)?.name);\n }\n parts.push(t`Dimensions`);\n\n return parts;\n }, [caseTypeId, caseTypeMapQuery.map, t]);\n\n return (\n <CrudPage<FormFields, CaseDbDim, CaseDbDim, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new dimensions`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DimCrudCommand}\n defaultNewItem={defaultNewItem}\n defaultSortByField={caseTypeId ? 'rank' : 'case_type_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n fetchAllSelect={fetchAllSelect}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Dimension`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DIMS}\n schema={schema}\n subPages={subPages}\n tableColumns={tableColumns}\n tableStoreStorageNamePostFix={caseTypeId ? `CaseType` : undefined}\n testIdAttributes={TestIdUtil.createAttributes('DimsAdminPage')}\n title={title}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
2
2
  import { object as t, string as n } from "yup";
3
3
  import { CaseDbCommandName as r, CaseDbOntologyApi as i } from "@gen-epix/api-casedb";
4
- import { FORM_FIELD_DEFINITION_TYPE as a } from "@gen-epix/ui-form/models/form";
4
+ import { FORM_FIELD_DEFINITION_TYPE as a } from "@gen-epix/ui-core-form/models/form";
5
5
  import { useCallback as o, useMemo as s } from "react";
6
6
  import { useTranslation as c } from "react-i18next";
7
7
  import { jsx as l } from "react/jsx-runtime";
8
- import { TableUtil as u } from "@gen-epix/ui/utils/TableUtil";
8
+ import { TableUtil as u } from "@gen-epix/ui-client-common/utils/TableUtil";
9
9
  import { TestIdUtil as d } from "@gen-epix/ui-core/utils/TestIdUtil";
10
- import { SchemaUtil as f } from "@gen-epix/ui-form/utils/SchemaUtil";
11
- import { CrudPage as p } from "@gen-epix/ui/pages/CrudPage";
10
+ import { SchemaUtil as f } from "@gen-epix/ui-core-form/utils/SchemaUtil";
11
+ import { CrudPage as p } from "@gen-epix/ui-client-common/pages/CrudPage";
12
12
  //#region src/pages/DiseasesAdminPage/DiseasesAdminPage.tsx
13
13
  var m = () => {
14
14
  let { t: m } = c(), h = o(async (e) => (await i.getInstance().diseasesGetAll(null, null, { signal: e }))?.data, []), g = o(async (e) => await i.getInstance().diseasesDeleteOne(e.id), []), _ = o(async (e, t) => (await i.getInstance().diseasesPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DiseasesAdminPage/DiseasesAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbDisease,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbDisease>;\n\nexport const DiseasesAdminPage = () => {\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().diseasesGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbDisease) => {\n return await CaseDbOntologyApi.getInstance().diseasesDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDisease) => {\n return (await CaseDbOntologyApi.getInstance().diseasesPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().diseasesPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbDisease) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n icd_code: string().alphaNumeric().nullable().max(100),\n name: SchemaUtil.name,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`ICD Code`,\n name: 'icd_code',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbDisease>[] => {\n return [\n TableUtil.createTextColumn<CaseDbDisease>({ id: 'name', name: t`Name` }),\n TableUtil.createTextColumn<CaseDbDisease>({ id: 'icd_code', name: t`ICD Code` }),\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbDisease, CaseDbDisease, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new disease`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DiseaseCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Disease`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DISEASES}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('DiseasesAdminPage')}\n title={t`Diseases`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA+BA,IAAa,UAA0B;CACrC,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACtF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,EAAK,EAAE,GACrE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MACrG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,gBAAgB,CAAS,EAAA,CAAG,MACzE,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,UAAU,EAAO,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;EACpD,MAAM,EAAW;CACnB,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ,CACL,EAAU,iBAAgC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,GACvE,EAAU,iBAAgC;EAAE,IAAI;EAAY,MAAM,CAAC;CAAW,CAAC,CACjF,GACC,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,mBAAmB;EACjE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/DiseasesAdminPage/DiseasesAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbDisease,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbDisease>;\n\nexport const DiseasesAdminPage = () => {\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().diseasesGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbDisease) => {\n return await CaseDbOntologyApi.getInstance().diseasesDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbDisease) => {\n return (await CaseDbOntologyApi.getInstance().diseasesPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().diseasesPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbDisease) => {\n return item.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n icd_code: string().alphaNumeric().nullable().max(100),\n name: SchemaUtil.name,\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`ICD Code`,\n name: 'icd_code',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbDisease>[] => {\n return [\n TableUtil.createTextColumn<CaseDbDisease>({ id: 'name', name: t`Name` }),\n TableUtil.createTextColumn<CaseDbDisease>({ id: 'icd_code', name: t`ICD Code` }),\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbDisease, CaseDbDisease, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new disease`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.DiseaseCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Disease`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.DISEASES}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('DiseasesAdminPage')}\n title={t`Diseases`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA+BA,IAAa,UAA0B;CACrC,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACtF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,EAAK,EAAE,GACrE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,eAAe,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MACrG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,gBAAgB,CAAS,EAAA,CAAG,MACzE,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,MACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,UAAU,EAAO,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;EACpD,MAAM,EAAW;CACnB,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ,CACL,EAAU,iBAAgC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,GACvE,EAAU,iBAAgC;EAAE,IAAI;EAAY,MAAM,CAAC;CAAW,CAAC,CACjF,GACC,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,mBAAmB;EACjE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -1,14 +1,14 @@
1
1
  import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
2
2
  import { object as t, string as n } from "yup";
3
3
  import { CaseDbCommandName as r, CaseDbOntologyApi as i } from "@gen-epix/api-casedb";
4
- import { FORM_FIELD_DEFINITION_TYPE as a } from "@gen-epix/ui-form/models/form";
4
+ import { FORM_FIELD_DEFINITION_TYPE as a } from "@gen-epix/ui-core-form/models/form";
5
5
  import { useCallback as o, useMemo as s } from "react";
6
6
  import { useTranslation as c } from "react-i18next";
7
7
  import { jsx as l } from "react/jsx-runtime";
8
- import { TableUtil as u } from "@gen-epix/ui/utils/TableUtil";
8
+ import { TableUtil as u } from "@gen-epix/ui-client-common/utils/TableUtil";
9
9
  import { TestIdUtil as d } from "@gen-epix/ui-core/utils/TestIdUtil";
10
- import { SchemaUtil as f } from "@gen-epix/ui-form/utils/SchemaUtil";
11
- import { CrudPage as p } from "@gen-epix/ui/pages/CrudPage";
10
+ import { SchemaUtil as f } from "@gen-epix/ui-core-form/utils/SchemaUtil";
11
+ import { CrudPage as p } from "@gen-epix/ui-client-common/pages/CrudPage";
12
12
  //#region src/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.tsx
13
13
  var m = () => {
14
14
  let { t: m } = c(), h = o(async (e) => (await i.getInstance().etiologicalAgentsGetAll(null, null, { signal: e }))?.data, []), g = o(async (e) => await i.getInstance().etiologicalAgentsDeleteOne(e.id), []), _ = o(async (e, t) => (await i.getInstance().etiologicalAgentsPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbEtiologicalAgent,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbEtiologicalAgent>;\n\nexport const EtiologicalAgentsAdminPage = () => {\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().etiologicalAgentsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbEtiologicalAgent) => {\n return await CaseDbOntologyApi.getInstance().etiologicalAgentsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbEtiologicalAgent) => {\n return (await CaseDbOntologyApi.getInstance().etiologicalAgentsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().etiologicalAgentsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((variables: CaseDbEtiologicalAgent) => {\n return variables.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n name: SchemaUtil.name,\n type: string().extendedAlphaNumeric().required().max(100),\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Type`,\n name: 'type',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbEtiologicalAgent>[] => {\n return [\n TableUtil.createTextColumn<CaseDbEtiologicalAgent>({ id: 'name', name: t`Name` }),\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbEtiologicalAgent, CaseDbEtiologicalAgent, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new etiological agent`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.EtiologicalAgentCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Etiological agent`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.ETIOLOGICAL_AGENTS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('EtiologicalAgentsAdminPage')}\n title={t`EtiologicalAgents`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA+BA,IAAa,UAAmC;CAC9C,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,wBAAwB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MAC/F,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,2BAA2B,EAAK,EAAE,GAC9E,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,wBAAwB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MAC9G,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,yBAAyB,CAAS,EAAA,CAAG,MAClF,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAU,MAChB,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,MAAM,EAAW;EACjB,MAAM,EAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;CAC1D,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ,CACL,EAAU,iBAAyC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,CAClF,GACC,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,4BAA4B;EAC1E,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbEtiologicalAgent,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\n\ntype FormFields = OmitWithMetaData<CaseDbEtiologicalAgent>;\n\nexport const EtiologicalAgentsAdminPage = () => {\n const { t } = useTranslation();\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().etiologicalAgentsGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbEtiologicalAgent) => {\n return await CaseDbOntologyApi.getInstance().etiologicalAgentsDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbEtiologicalAgent) => {\n return (await CaseDbOntologyApi.getInstance().etiologicalAgentsPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().etiologicalAgentsPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((variables: CaseDbEtiologicalAgent) => {\n return variables.name;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n name: SchemaUtil.name,\n type: string().extendedAlphaNumeric().required().max(100),\n });\n }, []);\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Type`,\n name: 'type',\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbEtiologicalAgent>[] => {\n return [\n TableUtil.createTextColumn<CaseDbEtiologicalAgent>({ id: 'name', name: t`Name` }),\n ];\n }, [t]);\n\n return (\n <CrudPage<FormFields, CaseDbEtiologicalAgent, CaseDbEtiologicalAgent, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new etiological agent`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.EtiologicalAgentCrudCommand}\n defaultSortByField={'name'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Etiological agent`}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.ETIOLOGICAL_AGENTS}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('EtiologicalAgentsAdminPage')}\n title={t`EtiologicalAgents`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA+BA,IAAa,UAAmC;CAC9C,IAAM,EAAE,SAAM,EAAe,GAEvB,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,wBAAwB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MAC/F,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,2BAA2B,EAAK,EAAE,GAC9E,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,wBAAwB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MAC9G,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,yBAAyB,CAAS,EAAA,CAAG,MAClF,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAU,MAChB,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,MAAM,EAAW;EACjB,MAAM,EAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG;CAC1D,CAAC,GACA,CAAC,CAAC,GAEC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,MAAM;CACR,CACF,GACC,CAAC,CAAC,CAAC,GAEA,IAAe,QACZ,CACL,EAAU,iBAAyC;EAAE,IAAI;EAAQ,MAAM,CAAC;CAAO,CAAC,CAClF,GACC,CAAC,CAAC,CAAC;CAEN,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,4BAA4B;EAC1E,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -3,14 +3,14 @@ import { useDiseaseOptionsQuery as t } from "../../dataHooks/useDiseasesQuery/in
3
3
  import { useEtiologicalAgentOptionsQuery as n } from "../../dataHooks/useEtiologicalAgentsQuery/index.js";
4
4
  import { object as r, string as i } from "yup";
5
5
  import { CaseDbCommandName as a, CaseDbOntologyApi as o } from "@gen-epix/api-casedb";
6
- import { FORM_FIELD_DEFINITION_TYPE as s } from "@gen-epix/ui-form/models/form";
6
+ import { FORM_FIELD_DEFINITION_TYPE as s } from "@gen-epix/ui-core-form/models/form";
7
7
  import { useCallback as c, useMemo as l } from "react";
8
8
  import { useTranslation as u } from "react-i18next";
9
9
  import { jsx as d } from "react/jsx-runtime";
10
10
  import { useArray as f } from "@gen-epix/ui-core/hooks/useArray";
11
- import { TableUtil as p } from "@gen-epix/ui/utils/TableUtil";
11
+ import { TableUtil as p } from "@gen-epix/ui-client-common/utils/TableUtil";
12
12
  import { TestIdUtil as m } from "@gen-epix/ui-core/utils/TestIdUtil";
13
- import { CrudPage as h } from "@gen-epix/ui/pages/CrudPage";
13
+ import { CrudPage as h } from "@gen-epix/ui-client-common/pages/CrudPage";
14
14
  //#region src/pages/EtiologiesAdminPage/EtiologiesAdminPage.tsx
15
15
  var g = () => {
16
16
  let { t: g } = u(), _ = t(), v = n(), y = f([_, v]), b = c(async (e) => (await o.getInstance().etiologiesGetAll(null, null, { signal: e }))?.data, []), x = c(async (e) => await o.getInstance().etiologiesDeleteOne(e.id), []), S = c(async (e, t) => (await o.getInstance().etiologiesPutOne(t.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/EtiologiesAdminPage/EtiologiesAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbEtiology,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui/models/data';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { CrudPage } from '@gen-epix/ui/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\n\nimport { useDiseaseOptionsQuery } from '../../dataHooks/useDiseasesQuery';\nimport { useEtiologicalAgentOptionsQuery } from '../../dataHooks/useEtiologicalAgentsQuery';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\ntype FormFields = OmitWithMetaData<CaseDbEtiology, 'disease' | 'etiological_agent'>;\n\nexport const EtiologiesAdminPage = () => {\n const { t } = useTranslation();\n const diseaseOptionsQuery = useDiseaseOptionsQuery();\n const etiologicalAgentOptionsQuery = useEtiologicalAgentOptionsQuery();\n\n const loadables = useArray([diseaseOptionsQuery, etiologicalAgentOptionsQuery]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().etiologiesGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbEtiology) => {\n return await CaseDbOntologyApi.getInstance().etiologiesDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbEtiology) => {\n return (await CaseDbOntologyApi.getInstance().etiologiesPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().etiologiesPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbEtiology) => {\n return item.id;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n disease_id: string().uuid4().required(),\n etiological_agent_id: string().uuid4().required(),\n });\n }, []);\n\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Disease`,\n loading: diseaseOptionsQuery.isLoading,\n name: 'disease_id',\n options: diseaseOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Etiological agent`,\n loading: etiologicalAgentOptionsQuery.isLoading,\n name: 'etiological_agent_id',\n options: etiologicalAgentOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [etiologicalAgentOptionsQuery.isLoading, etiologicalAgentOptionsQuery.options, diseaseOptionsQuery.isLoading, diseaseOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbEtiology>[] => {\n return [\n TableUtil.createOptionsColumn<CaseDbEtiology>({ id: 'disease_id', name: t`Disease`, options: diseaseOptionsQuery.options }),\n TableUtil.createOptionsColumn<CaseDbEtiology>({ id: 'etiological_agent_id', name: t`Etiological agent`, options: etiologicalAgentOptionsQuery.options }),\n ];\n }, [etiologicalAgentOptionsQuery.options, diseaseOptionsQuery.options, t]);\n\n return (\n <CrudPage<FormFields, CaseDbEtiology, CaseDbEtiology, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new etiology`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.EtiologyCrudCommand}\n defaultSortByField={'disease_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Etiology`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.ETIOLOGIES}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('EtiologiesAdminPage')}\n title={t`Etiologies`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAgCA,IAAa,UAA4B;CACvC,IAAM,EAAE,SAAM,EAAe,GACvB,IAAsB,EAAuB,GAC7C,IAA+B,EAAgC,GAE/D,IAAY,EAAS,CAAC,GAAqB,CAA4B,CAAC,GAExE,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,iBAAiB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACxF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,oBAAoB,EAAK,EAAE,GACvE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,iBAAiB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MACvG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,CAAS,EAAA,CAAG,MAC3E,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,IACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,YAAY,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;EACtC,sBAAsB,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;CAClD,CAAC,GACA,CAAC,CAAC,GAGC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,SAAS,EAAoB;EAC7B,MAAM;EACN,SAAS,EAAoB;CAC/B,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,SAAS,EAA6B;EACtC,MAAM;EACN,SAAS,EAA6B;CACxC,CACF,GACC;EAAC,EAA6B;EAAW,EAA6B;EAAS,EAAoB;EAAW,EAAoB;EAAS;CAAC,CAAC,GAE1I,IAAe,QACZ,CACL,EAAU,oBAAoC;EAAE,IAAI;EAAc,MAAM,CAAC;EAAW,SAAS,EAAoB;CAAQ,CAAC,GAC1H,EAAU,oBAAoC;EAAE,IAAI;EAAwB,MAAM,CAAC;EAAqB,SAAS,EAA6B;CAAQ,CAAC,CACzJ,GACC;EAAC,EAA6B;EAAS,EAAoB;EAAS;CAAC,CAAC;CAEzE,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACA;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,qBAAqB;EACnE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/EtiologiesAdminPage/EtiologiesAdminPage.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n object,\n string,\n} from 'yup';\nimport type {\n CaseDbApiPermission,\n CaseDbEtiology,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbOntologyApi,\n} from '@gen-epix/api-casedb';\nimport type { OmitWithMetaData } from '@gen-epix/ui-client-common/models/data';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { CrudPage } from '@gen-epix/ui-client-common/pages/CrudPage';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport type { FormFieldDefinition } from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\n\nimport { useDiseaseOptionsQuery } from '../../dataHooks/useDiseasesQuery';\nimport { useEtiologicalAgentOptionsQuery } from '../../dataHooks/useEtiologicalAgentsQuery';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\n\ntype FormFields = OmitWithMetaData<CaseDbEtiology, 'disease' | 'etiological_agent'>;\n\nexport const EtiologiesAdminPage = () => {\n const { t } = useTranslation();\n const diseaseOptionsQuery = useDiseaseOptionsQuery();\n const etiologicalAgentOptionsQuery = useEtiologicalAgentOptionsQuery();\n\n const loadables = useArray([diseaseOptionsQuery, etiologicalAgentOptionsQuery]);\n\n const fetchAll = useCallback(async (signal: AbortSignal) => {\n return (await CaseDbOntologyApi.getInstance().etiologiesGetAll(null, null, { signal }))?.data;\n }, []);\n\n const deleteOne = useCallback(async (item: CaseDbEtiology) => {\n return await CaseDbOntologyApi.getInstance().etiologiesDeleteOne(item.id);\n }, []);\n\n const updateOne = useCallback(async (variables: FormFields, item: CaseDbEtiology) => {\n return (await CaseDbOntologyApi.getInstance().etiologiesPutOne(item.id, { id: item.id, ...variables })).data;\n }, []);\n\n const createOne = useCallback(async (variables: FormFields) => {\n return (await CaseDbOntologyApi.getInstance().etiologiesPostOne(variables)).data;\n }, []);\n\n const getName = useCallback((item: CaseDbEtiology) => {\n return item.id;\n }, []);\n\n const schema = useMemo(() => {\n return object<FormFields>().shape({\n disease_id: string().uuid4().required(),\n etiological_agent_id: string().uuid4().required(),\n });\n }, []);\n\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Disease`,\n loading: diseaseOptionsQuery.isLoading,\n name: 'disease_id',\n options: diseaseOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Etiological agent`,\n loading: etiologicalAgentOptionsQuery.isLoading,\n name: 'etiological_agent_id',\n options: etiologicalAgentOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [etiologicalAgentOptionsQuery.isLoading, etiologicalAgentOptionsQuery.options, diseaseOptionsQuery.isLoading, diseaseOptionsQuery.options, t]);\n\n const tableColumns = useMemo((): TableColumn<CaseDbEtiology>[] => {\n return [\n TableUtil.createOptionsColumn<CaseDbEtiology>({ id: 'disease_id', name: t`Disease`, options: diseaseOptionsQuery.options }),\n TableUtil.createOptionsColumn<CaseDbEtiology>({ id: 'etiological_agent_id', name: t`Etiological agent`, options: etiologicalAgentOptionsQuery.options }),\n ];\n }, [etiologicalAgentOptionsQuery.options, diseaseOptionsQuery.options, t]);\n\n return (\n <CrudPage<FormFields, CaseDbEtiology, CaseDbEtiology, CASEDB_QUERY_KEY, CaseDbApiPermission>\n createItemDialogTitle={t`Create new etiology`}\n createOne={createOne}\n crudCommandType={CaseDbCommandName.EtiologyCrudCommand}\n defaultSortByField={'disease_id'}\n defaultSortDirection={'asc'}\n deleteOne={deleteOne}\n fetchAll={fetchAll}\n formFieldDefinitions={formFieldDefinitions}\n getName={getName}\n itemName={t`Etiology`}\n loadables={loadables}\n resourceQueryKeyBase={CASEDB_QUERY_KEY.ETIOLOGIES}\n schema={schema}\n tableColumns={tableColumns}\n testIdAttributes={TestIdUtil.createAttributes('EtiologiesAdminPage')}\n title={t`Etiologies`}\n updateOne={updateOne}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAgCA,IAAa,UAA4B;CACvC,IAAM,EAAE,SAAM,EAAe,GACvB,IAAsB,EAAuB,GAC7C,IAA+B,EAAgC,GAE/D,IAAY,EAAS,CAAC,GAAqB,CAA4B,CAAC,GAExE,IAAW,EAAY,OAAO,OAC1B,MAAM,EAAkB,YAAY,CAAC,CAAC,iBAAiB,MAAM,MAAM,EAAE,UAAO,CAAC,EAAA,EAAI,MACxF,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,MAC5B,MAAM,EAAkB,YAAY,CAAC,CAAC,oBAAoB,EAAK,EAAE,GACvE,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,GAAuB,OAClD,MAAM,EAAkB,YAAY,CAAC,CAAC,iBAAiB,EAAK,IAAI;EAAE,IAAI,EAAK;EAAI,GAAG;CAAU,CAAC,EAAA,CAAG,MACvG,CAAC,CAAC,GAEC,IAAY,EAAY,OAAO,OAC3B,MAAM,EAAkB,YAAY,CAAC,CAAC,kBAAkB,CAAS,EAAA,CAAG,MAC3E,CAAC,CAAC,GAEC,IAAU,GAAa,MACpB,EAAK,IACX,CAAC,CAAC,GAEC,IAAS,QACN,EAAmB,CAAC,CAAC,MAAM;EAChC,YAAY,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;EACtC,sBAAsB,EAAO,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS;CAClD,CAAC,GACA,CAAC,CAAC,GAGC,IAAuB,QACpB,CACL;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,SAAS,EAAoB;EAC7B,MAAM;EACN,SAAS,EAAoB;CAC/B,GACA;EACE,YAAY,EAA2B;EACvC,OAAO,CAAC;EACR,SAAS,EAA6B;EACtC,MAAM;EACN,SAAS,EAA6B;CACxC,CACF,GACC;EAAC,EAA6B;EAAW,EAA6B;EAAS,EAAoB;EAAW,EAAoB;EAAS;CAAC,CAAC,GAE1I,IAAe,QACZ,CACL,EAAU,oBAAoC;EAAE,IAAI;EAAc,MAAM,CAAC;EAAW,SAAS,EAAoB;CAAQ,CAAC,GAC1H,EAAU,oBAAoC;EAAE,IAAI;EAAwB,MAAM,CAAC;EAAqB,SAAS,EAA6B;CAAQ,CAAC,CACzJ,GACC;EAAC,EAA6B;EAAS,EAAoB;EAAS;CAAC,CAAC;CAEzE,OACE,kBAAC,GAAD;EACE,uBAAuB,CAAC;EACb;EACX,iBAAiB,EAAkB;EACnC,oBAAoB;EACpB,sBAAsB;EACX;EACD;EACY;EACb;EACT,UAAU,CAAC;EACA;EACX,sBAAsB,EAAiB;EAC/B;EACM;EACd,kBAAkB,EAAW,iBAAiB,qBAAqB;EACnE,OAAO,CAAC;EACG;CACZ,CAAA;AAEL"}
@@ -1,17 +1,17 @@
1
1
  import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
2
2
  import { useCaseTypeMapQuery as t } from "../../dataHooks/useCaseTypesQuery/index.js";
3
3
  import { n } from "../../_chunks/Dashboard.js";
4
- import { t as r } from "../../_chunks/chunk-KS7C4IRE.js";
4
+ import { t as r } from "../../_chunks/chunk-BV7QT456.js";
5
5
  import { CaseDbCaseApi as i } from "@gen-epix/api-casedb";
6
6
  import { useEffect as a, useMemo as o } from "react";
7
7
  import { useTranslation as s } from "react-i18next";
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
  import { useArray as d } from "@gen-epix/ui-core/hooks/useArray";
12
12
  import { TestIdUtil as f } from "@gen-epix/ui-core/utils/TestIdUtil";
13
- import { PageContainer as p } from "@gen-epix/ui/components/ui/PageContainer";
14
- import { useUpdateBreadcrumb as m } from "@gen-epix/ui/hooks/useUpdateBreadcrumb";
13
+ import { PageContainer as p } from "@gen-epix/ui-client-common/components/ui/PageContainer";
14
+ import { useUpdateBreadcrumb as m } from "@gen-epix/ui-client-common/hooks/useUpdateBreadcrumb";
15
15
  //#region src/pages/EventsDetailPage/EventsDetailPage.tsx
16
16
  var h = () => {
17
17
  let { t: h } = s(), { caseSetId: g, slug: _ } = r(), v = t(), y = m("Event"), b = u({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/EventsDetailPage/EventsDetailPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\nimport { useParams } from 'react-router-dom';\nimport {\n useEffect,\n useMemo,\n} from 'react';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { PageContainer } from '@gen-epix/ui/components/ui/PageContainer';\nimport { ResponseHandler } from '@gen-epix/ui/components/ui/ResponseHandler';\nimport { useItemQuery } from '@gen-epix/ui/hooks/useItemQuery';\nimport { useUpdateBreadcrumb } from '@gen-epix/ui/hooks/useUpdateBreadcrumb';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { Dashboard } from '../../components/ui/Dashboard';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useCaseTypeMapQuery } from '../../dataHooks/useCaseTypesQuery';\n\nexport const EventsDetailPage = () => {\n const { t } = useTranslation();\n const { caseSetId, slug } = useParams();\n\n const caseTypeMapQuery = useCaseTypeMapQuery();\n const updateBreadcrumb = useUpdateBreadcrumb('Event');\n\n const caseSetQuery = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.CASE_SETS,\n itemId: caseSetId,\n useQueryOptions: {\n queryFn: async ({ signal }) => (await CaseDbCaseApi.getInstance().caseSetsGetOne(caseSetId, { signal })).data,\n },\n });\n\n const title = useMemo(() => {\n if (!caseSetQuery.data) {\n return t`Event`;\n }\n const caseTypeName = caseTypeMapQuery.isLoading || !caseTypeMapQuery.map.has(caseSetQuery.data.case_type_id) ? '⌛' : caseTypeMapQuery.map.get(caseSetQuery.data.case_type_id).name;\n\n return `${caseSetQuery.data.name} (${caseTypeName})`;\n }, [caseSetQuery.data, caseTypeMapQuery.isLoading, caseTypeMapQuery.map, t]);\n\n useEffect(() => {\n updateBreadcrumb(title);\n }, [title, updateBreadcrumb]);\n\n const loadables = useArray([caseTypeMapQuery, caseSetQuery]);\n\n return (\n <PageContainer\n fullHeight\n fullWidth\n showBreadcrumbs\n testIdAttributes={TestIdUtil.createAttributes('EventsDetailPage', { 'case-set-id': caseSetId, slug })}\n title={title}\n >\n <ResponseHandler\n loadables={loadables}\n >\n <Dashboard\n caseSet={caseSetQuery.data}\n caseTypeId={caseSetQuery.data?.case_type_id}\n />\n </ResponseHandler>\n </PageContainer>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,IAAa,UAAyB;CACpC,IAAM,EAAE,SAAM,EAAe,GACvB,EAAE,cAAW,YAAS,EAAU,GAEhC,IAAmB,EAAoB,GACvC,IAAmB,EAAoB,OAAO,GAE9C,IAAe,EAAa;EAChC,cAAc,EAAiB;EAC/B,QAAQ;EACR,iBAAiB,EACf,SAAS,OAAO,EAAE,iBAAc,MAAM,EAAc,YAAY,CAAC,CAAC,eAAe,GAAW,EAAE,UAAO,CAAC,EAAA,CAAG,KAC3G;CACF,CAAC,GAEK,IAAQ,QAAc;EAC1B,IAAI,CAAC,EAAa,MAChB,OAAO,CAAC;EAEV,IAAM,IAAe,EAAiB,aAAa,CAAC,EAAiB,IAAI,IAAI,EAAa,KAAK,YAAY,IAAI,MAAM,EAAiB,IAAI,IAAI,EAAa,KAAK,YAAY,CAAC,CAAC;EAE9K,OAAO,GAAG,EAAa,KAAK,KAAK,IAAI,EAAa;CACpD,GAAG;EAAC,EAAa;EAAM,EAAiB;EAAW,EAAiB;EAAK;CAAC,CAAC;CAE3E,QAAgB;EACd,EAAiB,CAAK;CACxB,GAAG,CAAC,GAAO,CAAgB,CAAC;CAE5B,IAAM,IAAY,EAAS,CAAC,GAAkB,CAAY,CAAC;CAE3D,OACE,kBAAC,GAAD;EACE,YAAA;EACA,WAAA;EACA,iBAAA;EACA,kBAAkB,EAAW,iBAAiB,oBAAoB;GAAE,eAAe;GAAW;EAAK,CAAC;EAC7F;YAEP,kBAAC,GAAD;GACa;aAEX,kBAAC,GAAD;IACE,SAAS,EAAa;IACtB,YAAY,EAAa,MAAM;GAChC,CAAA;EACc,CAAA;CACJ,CAAA;AAEnB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/pages/EventsDetailPage/EventsDetailPage.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next';\nimport { useParams } from 'react-router-dom';\nimport {\n useEffect,\n useMemo,\n} from 'react';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport { PageContainer } from '@gen-epix/ui-client-common/components/ui/PageContainer';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { useItemQuery } from '@gen-epix/ui-client-common/hooks/useItemQuery';\nimport { useUpdateBreadcrumb } from '@gen-epix/ui-client-common/hooks/useUpdateBreadcrumb';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { Dashboard } from '../../components/ui/Dashboard';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport { useCaseTypeMapQuery } from '../../dataHooks/useCaseTypesQuery';\n\nexport const EventsDetailPage = () => {\n const { t } = useTranslation();\n const { caseSetId, slug } = useParams();\n\n const caseTypeMapQuery = useCaseTypeMapQuery();\n const updateBreadcrumb = useUpdateBreadcrumb('Event');\n\n const caseSetQuery = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.CASE_SETS,\n itemId: caseSetId,\n useQueryOptions: {\n queryFn: async ({ signal }) => (await CaseDbCaseApi.getInstance().caseSetsGetOne(caseSetId, { signal })).data,\n },\n });\n\n const title = useMemo(() => {\n if (!caseSetQuery.data) {\n return t`Event`;\n }\n const caseTypeName = caseTypeMapQuery.isLoading || !caseTypeMapQuery.map.has(caseSetQuery.data.case_type_id) ? '⌛' : caseTypeMapQuery.map.get(caseSetQuery.data.case_type_id).name;\n\n return `${caseSetQuery.data.name} (${caseTypeName})`;\n }, [caseSetQuery.data, caseTypeMapQuery.isLoading, caseTypeMapQuery.map, t]);\n\n useEffect(() => {\n updateBreadcrumb(title);\n }, [title, updateBreadcrumb]);\n\n const loadables = useArray([caseTypeMapQuery, caseSetQuery]);\n\n return (\n <PageContainer\n fullHeight\n fullWidth\n showBreadcrumbs\n testIdAttributes={TestIdUtil.createAttributes('EventsDetailPage', { 'case-set-id': caseSetId, slug })}\n title={title}\n >\n <ResponseHandler\n loadables={loadables}\n >\n <Dashboard\n caseSet={caseSetQuery.data}\n caseTypeId={caseSetQuery.data?.case_type_id}\n />\n </ResponseHandler>\n </PageContainer>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,IAAa,UAAyB;CACpC,IAAM,EAAE,SAAM,EAAe,GACvB,EAAE,cAAW,YAAS,EAAU,GAEhC,IAAmB,EAAoB,GACvC,IAAmB,EAAoB,OAAO,GAE9C,IAAe,EAAa;EAChC,cAAc,EAAiB;EAC/B,QAAQ;EACR,iBAAiB,EACf,SAAS,OAAO,EAAE,iBAAc,MAAM,EAAc,YAAY,CAAC,CAAC,eAAe,GAAW,EAAE,UAAO,CAAC,EAAA,CAAG,KAC3G;CACF,CAAC,GAEK,IAAQ,QAAc;EAC1B,IAAI,CAAC,EAAa,MAChB,OAAO,CAAC;EAEV,IAAM,IAAe,EAAiB,aAAa,CAAC,EAAiB,IAAI,IAAI,EAAa,KAAK,YAAY,IAAI,MAAM,EAAiB,IAAI,IAAI,EAAa,KAAK,YAAY,CAAC,CAAC;EAE9K,OAAO,GAAG,EAAa,KAAK,KAAK,IAAI,EAAa;CACpD,GAAG;EAAC,EAAa;EAAM,EAAiB;EAAW,EAAiB;EAAK;CAAC,CAAC;CAE3E,QAAgB;EACd,EAAiB,CAAK;CACxB,GAAG,CAAC,GAAO,CAAgB,CAAC;CAE5B,IAAM,IAAY,EAAS,CAAC,GAAkB,CAAY,CAAC;CAE3D,OACE,kBAAC,GAAD;EACE,YAAA;EACA,WAAA;EACA,iBAAA;EACA,kBAAkB,EAAW,iBAAiB,oBAAoB;GAAE,eAAe;GAAW;EAAK,CAAC;EAC7F;EAEP,UAAA,kBAAC,GAAD;GACa;GAEX,UAAA,kBAAC,GAAD;IACE,SAAS,EAAa;IACtB,YAAY,EAAa,MAAM;GAChC,CAAA;EACc,CAAA;CACJ,CAAA;AAEnB"}
@@ -8,25 +8,25 @@ import { useCaseSetStatusOptionsQuery as i } from "../../dataHooks/useCaseSetSta
8
8
  import { CreateEventDialog as a } from "../../components/ui/CreateEventDialog/index.js";
9
9
  import { useCaseSetStatsMapQuery as o } from "../../dataHooks/useCaseSetStatsQuery/index.js";
10
10
  import { CaseDbCaseApi as s } from "@gen-epix/api-casedb";
11
- import { QueryClientService as ne } from "@gen-epix/ui/classes/services/QueryClientService";
11
+ import { QueryClientService as ne } from "@gen-epix/ui-client-common/classes/services/QueryClientService";
12
12
  import { DATE_FORMAT as c } from "@gen-epix/ui-core/constants/date";
13
- import { ConfigService as l } from "@gen-epix/ui/classes/services/ConfigService";
13
+ import { ConfigService as l } from "@gen-epix/ui-client-common/classes/services/ConfigService";
14
14
  import { Box as u, Button as d, ListItemIcon as f, ListItemText as p, MenuItem as m, Typography as h, useTheme as g } from "@mui/material";
15
15
  import { useCallback as _, useMemo as v, useRef as y } from "react";
16
16
  import { useTranslation as b } from "react-i18next";
17
- import { TableStoreContextProvider as re, createTableStore as ie } from "@gen-epix/ui/stores/tableStore";
17
+ import { TableStoreContextProvider as re, createTableStore as ie } from "@gen-epix/ui-client-common/stores/tableStore";
18
18
  import { Fragment as ae, jsx as x, jsxs as S } from "react/jsx-runtime";
19
- import { ResponseHandler as oe } from "@gen-epix/ui/components/ui/ResponseHandler";
19
+ import { ResponseHandler as oe } from "@gen-epix/ui-client-common/components/ui/ResponseHandler";
20
20
  import { useArray as C } from "@gen-epix/ui-core/hooks/useArray";
21
- import { useQueryMemo as w } from "@gen-epix/ui/hooks/useQueryMemo";
22
- import { Table as T, TableCaption as E, TableMenu as D, TableSidebarMenu as O } from "@gen-epix/ui/components/ui/Table";
23
- import { TableUtil as k } from "@gen-epix/ui/utils/TableUtil";
24
- import { useInitializeTableStore as A } from "@gen-epix/ui/hooks/useInitializeTableStore";
21
+ import { useQueryMemo as w } from "@gen-epix/ui-client-common/hooks/useQueryMemo";
22
+ import { Table as T, TableCaption as E, TableMenu as D, TableSidebarMenu as O } from "@gen-epix/ui-client-common/components/ui/Table";
23
+ import { TableUtil as k } from "@gen-epix/ui-client-common/utils/TableUtil";
24
+ import { useInitializeTableStore as A } from "@gen-epix/ui-client-common/hooks/useInitializeTableStore";
25
25
  import { TestIdUtil as j } from "@gen-epix/ui-core/utils/TestIdUtil";
26
- import { RouterService as M } from "@gen-epix/ui/classes/services/RouterService";
27
- import { LoadableUtil as N } from "@gen-epix/ui/utils/LoadableUtil";
26
+ import { RouterService as M } from "@gen-epix/ui-client-common/classes/services/RouterService";
27
+ import { LoadableUtil as N } from "@gen-epix/ui-client-common/utils/LoadableUtil";
28
28
  import P from "@mui/icons-material/ArrowCircleRight";
29
- import { PageContainer as F } from "@gen-epix/ui/components/ui/PageContainer";
29
+ import { PageContainer as F } from "@gen-epix/ui-client-common/components/ui/PageContainer";
30
30
  //#region src/pages/EventsPage/EventsPage.tsx
31
31
  var I = () => {
32
32
  let { t: I } = b(), L = g(), R = ee(), z = te(), B = i(), V = y(null), H = y(null), { data: U, error: W, isLoading: G } = w({