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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/dist/@types/mui.d.ts +1 -1
  2. package/dist/@types/{ui-casedb.d.ts → ui-client-casedb.d.ts} +1 -1
  3. package/dist/_chunks/AddCasesToEventDialog.js +74 -74
  4. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  5. package/dist/_chunks/CaseContentForm.js +2 -2
  6. package/dist/_chunks/CaseContentForm.js.map +1 -1
  7. package/dist/_chunks/CaseDbDownloadUtil.js +40 -35
  8. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  9. package/dist/_chunks/CaseInfoDialog.js +195 -195
  10. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  11. package/dist/_chunks/CaseSetInfoDialog.js +131 -131
  12. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  13. package/dist/_chunks/CaseTypeInfoDialog.js +63 -61
  14. package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -1
  15. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +6 -6
  16. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  17. package/dist/_chunks/CompletCaseTypeLoader.js +3 -3
  18. package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -1
  19. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +1 -1
  20. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -1
  21. package/dist/_chunks/CustomTabPanel.js.map +1 -1
  22. package/dist/_chunks/Dashboard.js +399 -386
  23. package/dist/_chunks/Dashboard.js.map +1 -1
  24. package/dist/_chunks/DashboardStoreLoader.js +5 -5
  25. package/dist/_chunks/DashboardStoreLoader.js.map +1 -1
  26. package/dist/_chunks/DataCollectionAccessInfo.js +21 -21
  27. package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -1
  28. package/dist/_chunks/EpiCurveUtil.js +4 -4
  29. package/dist/_chunks/EpiCurveUtil.js.map +1 -1
  30. package/dist/_chunks/EpiCurveWidget.js +189 -183
  31. package/dist/_chunks/EpiCurveWidget.js.map +1 -1
  32. package/dist/_chunks/FilterUtil.js +103 -101
  33. package/dist/_chunks/FilterUtil.js.map +1 -1
  34. package/dist/_chunks/FindSimilarCasesDialog.js +16 -16
  35. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  36. package/dist/_chunks/FindSimilarCasesUtil.js +9 -9
  37. package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -1
  38. package/dist/_chunks/HomePageTrends.js +8 -8
  39. package/dist/_chunks/HomePageTrends.js.map +1 -1
  40. package/dist/_chunks/LegendaItem.js +3 -3
  41. package/dist/_chunks/LegendaItem.js.map +1 -1
  42. package/dist/_chunks/LineListWidget.js +23 -21
  43. package/dist/_chunks/LineListWidget.js.map +1 -1
  44. package/dist/_chunks/PanelSeparator.js +374 -384
  45. package/dist/_chunks/PanelSeparator.js.map +1 -1
  46. package/dist/_chunks/Upload.js +222 -207
  47. package/dist/_chunks/Upload.js.map +1 -1
  48. package/dist/_chunks/UploadUtil.js +1970 -841
  49. package/dist/_chunks/UploadUtil.js.map +1 -1
  50. package/dist/_chunks/UserRightsDialog.js +12 -12
  51. package/dist/_chunks/UserRightsDialog.js.map +1 -1
  52. package/dist/_chunks/_MapCache.js +2 -2
  53. package/dist/_chunks/_baseGet.js +1 -1
  54. package/dist/_chunks/_baseGet.js.map +1 -1
  55. package/dist/_chunks/_baseIteratee.js +1 -1
  56. package/dist/_chunks/_baseIteratee.js.map +1 -1
  57. package/dist/_chunks/_setToString.js.map +1 -1
  58. package/dist/_chunks/{chunk-KS7C4IRE.js → chunk-BV7QT456.js} +330 -495
  59. package/dist/_chunks/chunk-BV7QT456.js.map +1 -0
  60. package/dist/_chunks/cloneDeep.js +11 -9
  61. package/dist/_chunks/cloneDeep.js.map +1 -1
  62. package/dist/_chunks/dashboardStore.js +259 -261
  63. package/dist/_chunks/dashboardStore.js.map +1 -1
  64. package/dist/_chunks/esm.js +2900 -2868
  65. package/dist/_chunks/esm.js.map +1 -1
  66. package/dist/_chunks/format.js +8 -8
  67. package/dist/_chunks/format.js.map +1 -1
  68. package/dist/_chunks/index.esm.js +919 -796
  69. package/dist/_chunks/index.esm.js.map +1 -1
  70. package/dist/_chunks/index.module.js +1 -1
  71. package/dist/_chunks/index.module.js.map +1 -1
  72. package/dist/_chunks/protectedTokens.js +79 -81
  73. package/dist/_chunks/protectedTokens.js.map +1 -1
  74. package/dist/_chunks/react.js +1 -1
  75. package/dist/_chunks/react.js.map +1 -1
  76. package/dist/_chunks/round.js +1 -1
  77. package/dist/_chunks/round.js.map +1 -1
  78. package/dist/_chunks/shallow.js +2 -2
  79. package/dist/_chunks/shallow.js.map +1 -1
  80. package/dist/_chunks/sync.js +198 -161
  81. package/dist/_chunks/sync.js.map +1 -1
  82. package/dist/_chunks/toDate.js +1 -1
  83. package/dist/_chunks/toDate.js.map +1 -1
  84. package/dist/_chunks/toString.js +1 -1
  85. package/dist/_chunks/toString.js.map +1 -1
  86. package/dist/_chunks/useUnit.js.map +1 -1
  87. package/dist/_chunks/vanilla.js +1 -1
  88. package/dist/_chunks/vanilla.js.map +1 -1
  89. package/dist/_chunks/yup.js +5 -5
  90. package/dist/_chunks/yup.js.map +1 -1
  91. package/dist/classes/filters/SelectionFilter.d.ts +2 -2
  92. package/dist/classes/filters/TreeFilter.d.ts +2 -2
  93. package/dist/classes/services/DataService/index.js +3 -3
  94. package/dist/classes/services/DataService/index.js.map +1 -1
  95. package/dist/classes/services/EventBusService/EventBusService.d.ts +1 -1
  96. package/dist/classes/services/EventBusService/index.js.map +1 -1
  97. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +1 -1
  98. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -1
  99. package/dist/components/app/CaseDbApp/index.js +8 -5
  100. package/dist/components/app/CaseDbApp/index.js.map +1 -1
  101. package/dist/components/form/fields/ArrangementEditor/index.js +83 -83
  102. package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -1
  103. package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +2 -2
  104. package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +2 -2
  105. package/dist/components/ui/CaseContentFormDialog/index.js +1 -1
  106. package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -1
  107. package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +2 -2
  108. package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +2 -2
  109. package/dist/components/ui/CaseSummary/index.js +1 -1
  110. package/dist/components/ui/CaseSummary/index.js.map +1 -1
  111. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +2 -2
  112. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
  113. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +2 -2
  114. package/dist/components/ui/ContextMenu/index.js.map +1 -1
  115. package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +2 -2
  116. package/dist/components/ui/CreateEventDialog/index.js +9 -9
  117. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  118. package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
  119. package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
  120. package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
  121. package/dist/components/ui/DashboardEditCases/index.js +1 -1
  122. package/dist/components/ui/DashboardEditCases/index.js.map +1 -1
  123. package/dist/components/ui/FileSelector/index.js +46 -46
  124. package/dist/components/ui/FileSelector/index.js.map +1 -1
  125. package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +2 -2
  126. package/dist/components/ui/Grouping/index.js +50 -50
  127. package/dist/components/ui/Grouping/index.js.map +1 -1
  128. package/dist/components/ui/HistogramWidget/index.js +1 -1
  129. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  130. package/dist/components/ui/MapWidget/index.js +7 -3
  131. package/dist/components/ui/MapWidget/index.js.map +1 -1
  132. package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +2 -2
  133. package/dist/components/ui/RemoveCasesFromEventDialog/index.js +6 -6
  134. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  135. package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +2 -2
  136. package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +2 -2
  137. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  138. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  139. package/dist/components/ui/TreeDescription/index.js.map +1 -1
  140. package/dist/components/ui/TreeWidget/index.js +11 -11
  141. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  142. package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +2 -2
  143. package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +2 -2
  144. package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +2 -2
  145. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +2 -2
  146. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +25 -11
  147. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -1
  148. package/dist/components/ui/Warning/index.js.map +1 -1
  149. package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -1
  150. package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
  151. package/dist/components/ui/WidgetMenu/index.js +2 -2
  152. package/dist/components/ui/WidgetMenu/index.js.map +1 -1
  153. package/dist/components/ui/WidgetUnavailable/index.js.map +1 -1
  154. package/dist/constants/query.d.ts +1 -1
  155. package/dist/constants/query.js +1 -1
  156. package/dist/constants/query.js.map +1 -1
  157. package/dist/context/caseAbac/CaseAbacContext.d.ts +1 -1
  158. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +3 -3
  159. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -1
  160. package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +1 -1
  161. package/dist/dataHooks/useCaseRightsQuery/index.js +2 -2
  162. package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -1
  163. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +3 -3
  164. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -1
  165. package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +1 -1
  166. package/dist/dataHooks/useCaseSetRightsQuery/index.js +2 -2
  167. package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -1
  168. package/dist/dataHooks/useCaseSetStatsQuery/index.js +3 -3
  169. package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -1
  170. package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +1 -1
  171. package/dist/dataHooks/useCaseSetStatusesQuery/index.js +3 -3
  172. package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -1
  173. package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +1 -1
  174. package/dist/dataHooks/useCaseSetsQuery/index.js +3 -3
  175. package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -1
  176. package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +1 -1
  177. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +3 -3
  178. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -1
  179. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +1 -1
  180. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -1
  181. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +1 -1
  182. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +2 -2
  183. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -1
  184. package/dist/dataHooks/useCaseTypeSetsQuery/index.js +3 -3
  185. package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -1
  186. package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +1 -1
  187. package/dist/dataHooks/useCaseTypeStatsQuery/index.js +2 -2
  188. package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -1
  189. package/dist/dataHooks/useCaseTypesQuery/index.js +3 -3
  190. package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -1
  191. package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +1 -1
  192. package/dist/dataHooks/useColSetMembersQuery/index.js +2 -2
  193. package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -1
  194. package/dist/dataHooks/useColSetsQuery/index.js +3 -3
  195. package/dist/dataHooks/useColSetsQuery/index.js.map +1 -1
  196. package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +1 -1
  197. package/dist/dataHooks/useColTypesQuery/index.js.map +1 -1
  198. package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +1 -1
  199. package/dist/dataHooks/useColsQuery/index.js +3 -3
  200. package/dist/dataHooks/useColsQuery/index.js.map +1 -1
  201. package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +1 -1
  202. package/dist/dataHooks/useConceptQuery/index.js +3 -3
  203. package/dist/dataHooks/useConceptQuery/index.js.map +1 -1
  204. package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +1 -1
  205. package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -1
  206. package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +1 -1
  207. package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -1
  208. package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +1 -1
  209. package/dist/dataHooks/useConceptSetsQuery/index.js +3 -3
  210. package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -1
  211. package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +1 -1
  212. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +2 -2
  213. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -1
  214. package/dist/dataHooks/useDataCollectionsQuery/index.js +3 -3
  215. package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -1
  216. package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +1 -1
  217. package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -1
  218. package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +1 -1
  219. package/dist/dataHooks/useDimsQuery/index.js +3 -3
  220. package/dist/dataHooks/useDimsQuery/index.js.map +1 -1
  221. package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +1 -1
  222. package/dist/dataHooks/useDiseasesQuery/index.js +3 -3
  223. package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -1
  224. package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +1 -1
  225. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +3 -3
  226. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -1
  227. package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +1 -1
  228. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +3 -3
  229. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -1
  230. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +1 -1
  231. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +2 -2
  232. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -1
  233. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +2 -2
  234. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -1
  235. package/dist/dataHooks/useRefColsQuery/index.js +3 -3
  236. package/dist/dataHooks/useRefColsQuery/index.js.map +1 -1
  237. package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +1 -1
  238. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +2 -2
  239. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -1
  240. package/dist/dataHooks/useRefDimsQuery/index.js +3 -3
  241. package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -1
  242. package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +1 -1
  243. package/dist/dataHooks/useRegionQuery/index.js +3 -3
  244. package/dist/dataHooks/useRegionQuery/index.js.map +1 -1
  245. package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +1 -1
  246. package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -1
  247. package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +1 -1
  248. package/dist/dataHooks/useRegionSetsQuery/index.js +3 -3
  249. package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -1
  250. package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +1 -1
  251. package/dist/dataHooks/useSequencingProtocolsQuery/index.js +3 -3
  252. package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -1
  253. package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +1 -1
  254. package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -1
  255. package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +1 -1
  256. package/dist/dataHooks/useUnitQuery/useUnit.d.ts +1 -1
  257. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +2 -2
  258. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -1
  259. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +3 -3
  260. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -1
  261. package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +1 -1
  262. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +2 -2
  263. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -1
  264. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +2 -2
  265. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -1
  266. package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +1 -1
  267. package/dist/hooks/useUserCasePolicyNameFactory/index.js +3 -3
  268. package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -1
  269. package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +1 -1
  270. package/dist/locale/nl.json +1 -1
  271. package/dist/models/config.d.ts +1 -1
  272. package/dist/models/dashboard.d.ts +1 -1
  273. package/dist/models/dashboard.js.map +1 -1
  274. package/dist/models/theme.d.ts +2 -2
  275. package/dist/pages/CaseDbUsersAdminPage/index.js +5 -5
  276. package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -1
  277. package/dist/pages/CaseSetCategoryAdminPage/index.js +4 -4
  278. package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -1
  279. package/dist/pages/CaseSetStatusAdminPage/index.js +4 -4
  280. package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -1
  281. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +4 -4
  282. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -1
  283. package/dist/pages/CaseTypeSetsAdminPage/index.js +6 -6
  284. package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -1
  285. package/dist/pages/CaseTypesAdminPage/index.js +5 -5
  286. package/dist/pages/CaseTypesAdminPage/index.js.map +1 -1
  287. package/dist/pages/CasesDetailPage/index.js +5 -5
  288. package/dist/pages/CasesDetailPage/index.js.map +1 -1
  289. package/dist/pages/CasesPage/index.js +10 -10
  290. package/dist/pages/CasesPage/index.js.map +1 -1
  291. package/dist/pages/ColSetsAdminPage/index.js +6 -6
  292. package/dist/pages/ColSetsAdminPage/index.js.map +1 -1
  293. package/dist/pages/ColsAdminPage/index.js +5 -5
  294. package/dist/pages/ColsAdminPage/index.js.map +1 -1
  295. package/dist/pages/ConceptRelationsAdminPage/index.js +19 -19
  296. package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -1
  297. package/dist/pages/ConceptSetsAdminPage/index.js +5 -5
  298. package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -1
  299. package/dist/pages/ConceptsAdminPage/index.js +5 -5
  300. package/dist/pages/ConceptsAdminPage/index.js.map +1 -1
  301. package/dist/pages/DataCollectionSetsAdminPage/index.js +12 -12
  302. package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -1
  303. package/dist/pages/DataCollectionVisualizationPage/index.js +4 -4
  304. package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
  305. package/dist/pages/DataCollectionsAdminPage/index.js +4 -4
  306. package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -1
  307. package/dist/pages/DimsAdminPage/index.js +6 -6
  308. package/dist/pages/DimsAdminPage/index.js.map +1 -1
  309. package/dist/pages/DiseasesAdminPage/index.js +4 -4
  310. package/dist/pages/DiseasesAdminPage/index.js.map +1 -1
  311. package/dist/pages/EtiologicalAgentsAdminPage/index.js +4 -4
  312. package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -1
  313. package/dist/pages/EtiologiesAdminPage/index.js +3 -3
  314. package/dist/pages/EtiologiesAdminPage/index.js.map +1 -1
  315. package/dist/pages/EventsDetailPage/index.js +5 -5
  316. package/dist/pages/EventsDetailPage/index.js.map +1 -1
  317. package/dist/pages/EventsPage/index.js +11 -11
  318. package/dist/pages/EventsPage/index.js.map +1 -1
  319. package/dist/pages/HomePage/index.js +2 -2
  320. package/dist/pages/HomePage/index.js.map +1 -1
  321. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +4 -4
  322. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  323. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +4 -4
  324. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -1
  325. package/dist/pages/RefColsAdminPage/index.js +7 -7
  326. package/dist/pages/RefColsAdminPage/index.js.map +1 -1
  327. package/dist/pages/RefDimsAdminPage/index.js +5 -5
  328. package/dist/pages/RefDimsAdminPage/index.js.map +1 -1
  329. package/dist/pages/RegionRelationsAdminPage/index.js +3 -3
  330. package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -1
  331. package/dist/pages/RegionSetShapesAdminPage/index.js +4 -4
  332. package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -1
  333. package/dist/pages/RegionSetsAdminPage/index.js +5 -5
  334. package/dist/pages/RegionSetsAdminPage/index.js.map +1 -1
  335. package/dist/pages/RegionsAdminPage/index.js +5 -5
  336. package/dist/pages/RegionsAdminPage/index.js.map +1 -1
  337. package/dist/pages/TrendsPage/index.js +1 -1
  338. package/dist/pages/TrendsPage/index.js.map +1 -1
  339. package/dist/pages/UploadPage/index.js +1 -1
  340. package/dist/pages/UploadPage/index.js.map +1 -1
  341. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +4 -4
  342. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -1
  343. package/dist/pages/UserEffectiveRightsAdminPage/index.js +12 -12
  344. package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
  345. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +8 -8
  346. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  347. package/dist/pages/UserShareCasePoliciesAdminPage/index.js +4 -4
  348. package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -1
  349. package/dist/routes/adminRoutes.d.ts +1 -1
  350. package/dist/routes/index.js +11 -8
  351. package/dist/routes/index.js.map +1 -1
  352. package/dist/routes/routes.d.ts +1 -1
  353. package/dist/setup/setup.js +5 -5
  354. package/dist/setup/setup.js.map +1 -1
  355. package/dist/stores/dashboardStore/dashboardStore.d.ts +1 -1
  356. package/dist/stores/uploadStore/index.js +2 -2
  357. package/dist/stores/uploadStore/index.js.map +1 -1
  358. package/dist/stores/uploadStore/uploadStore.d.ts +1 -1
  359. package/dist/stores/userProfileStore/index.js +2 -2
  360. package/dist/stores/userProfileStore/index.js.map +1 -1
  361. package/dist/theme/demoTheme/index.js +2 -2
  362. package/dist/theme/demoTheme/index.js.map +1 -1
  363. package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +1 -1
  364. package/dist/utils/CaseDbDataUtil/index.js +1 -1
  365. package/dist/utils/CaseDbDataUtil/index.js.map +1 -1
  366. package/dist/utils/CaseDbStandardConfigUtil/index.js +2488 -1408
  367. package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
  368. package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +1 -1
  369. package/dist/utils/CaseDbTableUtil/index.js +1 -1
  370. package/dist/utils/CaseDbTableUtil/index.js.map +1 -1
  371. package/dist/utils/CaseSelectionUtil/index.js.map +1 -1
  372. package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +1 -1
  373. package/dist/utils/CaseTypeFormUtil/index.js +7 -10
  374. package/dist/utils/CaseTypeFormUtil/index.js.map +1 -1
  375. package/dist/utils/CaseTypeUtil/index.js +1 -1
  376. package/dist/utils/CaseTypeUtil/index.js.map +1 -1
  377. package/dist/utils/CaseUtil/index.js +3 -3
  378. package/dist/utils/CaseUtil/index.js.map +1 -1
  379. package/dist/utils/DashboardUtil/index.js +1 -1
  380. package/dist/utils/DashboardUtil/index.js.map +1 -1
  381. package/dist/utils/DataSetUtil/index.js.map +1 -1
  382. package/dist/utils/FileUtil/index.js +1 -1
  383. package/dist/utils/FileUtil/index.js.map +1 -1
  384. package/dist/utils/FilterUtil/FilterUtil.d.ts +2 -2
  385. package/dist/utils/HistogramUtil/index.js +1 -1
  386. package/dist/utils/HistogramUtil/index.js.map +1 -1
  387. package/dist/utils/MapUtil/index.js +1 -1
  388. package/dist/utils/MapUtil/index.js.map +1 -1
  389. package/dist/utils/StratificationUtil/index.js +3 -2
  390. package/dist/utils/StratificationUtil/index.js.map +1 -1
  391. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -1
  392. package/package.json +19 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { CaseDbCase, CaseDbCol, CaseDbCompleteCaseType } from '@gen-epix/api-casedb';
2
- import { GetTableCellRowComparatorProps, GetTableCellValueProps, TableColumnText } from '@gen-epix/ui/models/table';
2
+ import { GetTableCellRowComparatorProps, GetTableCellValueProps, TableColumnText } from '@gen-epix/ui-client-common/models/table';
3
3
  export declare class CaseDbTableUtil {
4
4
  static createCaseTypeCellRowComperator({ column, dataContext, direction }: GetTableCellRowComparatorProps<TableColumnText<CaseDbCase, CaseDbCompleteCaseType, CaseDbCol>, CaseDbCompleteCaseType>): (a: CaseDbCase, b: CaseDbCase) => number;
5
5
  static getTableCaseTypeCellValue<TRowData>({ column, dataContext, row, rowIndex }: GetTableCellValueProps<TRowData, TableColumnText<TRowData, CaseDbCompleteCaseType, CaseDbCol>, CaseDbCompleteCaseType>): string;
@@ -22,7 +22,7 @@ var r = class {
22
22
  n.DECIMAL_4,
23
23
  n.DECIMAL_5,
24
24
  n.DECIMAL_6
25
- ].includes(d.col_type) ? (c.raw - +l.raw) * f : c.short.localeCompare(l.short) * f;
25
+ ].includes(d.col_type) ? (+c.raw - l.raw) * f : c.short.localeCompare(l.short) * f;
26
26
  };
27
27
  }
28
28
  static getTableCaseTypeCellValue({ column: e, dataContext: n, row: r, rowIndex: i }) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/CaseDbTableUtil/CaseDbTableUtil.ts"],"sourcesContent":["import type {\n CaseDbCase,\n CaseDbCol,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport { CaseDbColType } from '@gen-epix/api-casedb';\nimport type {\n GetTableCellRowComparatorProps,\n GetTableCellValueProps,\n TableColumn,\n TableColumnText,\n} from '@gen-epix/ui/models/table';\n\nimport { DataService } from '../../classes/services/DataService';\nimport { CaseUtil } from '../CaseUtil';\n\nexport class CaseDbTableUtil {\n // Cell value getters\n public static createCaseTypeCellRowComperator({ column, dataContext, direction }: GetTableCellRowComparatorProps<TableColumnText<CaseDbCase, CaseDbCompleteCaseType, CaseDbCol>, CaseDbCompleteCaseType>): (a: CaseDbCase, b: CaseDbCase) => number {\n return (a: CaseDbCase, b: CaseDbCase) => {\n const aValue = CaseUtil.getRowValue(a.content, column.columnContext, dataContext);\n const bValue = CaseUtil.getRowValue(b.content, column.columnContext, dataContext);\n const col = column.columnContext;\n const refCol = dataContext.ref_cols[col.ref_col_id];\n\n const directionMultiplier = direction === 'asc' ? 1 : -1;\n\n if (aValue.raw === bValue.raw) {\n return 0;\n }\n if (aValue.isMissing) {\n return 1;\n }\n if (bValue.isMissing) {\n return -1;\n }\n\n if (refCol.col_type === CaseDbColType.ORDINAL) {\n const conceptSetConceptIds = DataService.getInstance().data.conceptsIdsBySetId[refCol.concept_set_id];\n return (conceptSetConceptIds.indexOf(aValue.raw) - conceptSetConceptIds.indexOf(bValue.raw)) * directionMultiplier;\n }\n\n if (([CaseDbColType.DECIMAL_0, CaseDbColType.DECIMAL_1, CaseDbColType.DECIMAL_2, CaseDbColType.DECIMAL_3, CaseDbColType.DECIMAL_4, CaseDbColType.DECIMAL_4, CaseDbColType.DECIMAL_5, CaseDbColType.DECIMAL_6] as CaseDbColType[]).includes(refCol.col_type)) {\n return (+aValue.raw - +bValue.raw) * directionMultiplier;\n }\n\n return aValue.short.localeCompare(bValue.short) * directionMultiplier;\n };\n }\n\n public static getTableCaseTypeCellValue<TRowData>({ column, dataContext, row, rowIndex }: GetTableCellValueProps<TRowData, TableColumnText<TRowData, CaseDbCompleteCaseType, CaseDbCol>, CaseDbCompleteCaseType>): string {\n if (column.valueGetter) {\n return column.valueGetter({ column: column as TableColumn<TRowData, CaseDbCompleteCaseType>, dataContext, id: column.id, row, rowIndex });\n }\n return CaseUtil.getRowValue((row as CaseDbCase).content, column.columnContext, dataContext).raw;\n }\n}\n"],"mappings":";;;;AAgBA,IAAa,IAAb,MAA6B;CAE3B,OAAc,gCAAgC,EAAE,WAAQ,gBAAa,gBAA+K;EAClP,QAAQ,GAAe,MAAkB;GACvC,IAAM,IAAS,EAAS,YAAY,EAAE,SAAS,EAAO,eAAe,CAAW,GAC1E,IAAS,EAAS,YAAY,EAAE,SAAS,EAAO,eAAe,CAAW,GAC1E,IAAM,EAAO,eACb,IAAS,EAAY,SAAS,EAAI,aAElC,IAAsB,MAAc,QAAQ,IAAI;GAEtD,IAAI,EAAO,QAAQ,EAAO,KACxB,OAAO;GAET,IAAI,EAAO,WACT,OAAO;GAET,IAAI,EAAO,WACT,OAAO;GAGT,IAAI,EAAO,aAAa,EAAc,SAAS;IAC7C,IAAM,IAAuB,EAAY,YAAY,CAAC,CAAC,KAAK,mBAAmB,EAAO;IACtF,QAAQ,EAAqB,QAAQ,EAAO,GAAG,IAAI,EAAqB,QAAQ,EAAO,GAAG,KAAK;GACjG;GAMA,OAJK;IAAC,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;GAAS,CAAC,CAAqB,SAAS,EAAO,QAAQ,KAC/O,EAAO,MAAM,CAAC,EAAO,OAAO,IAGhC,EAAO,MAAM,cAAc,EAAO,KAAK,IAAI;EACpD;CACF;CAEA,OAAc,0BAAoC,EAAE,WAAQ,gBAAa,QAAK,eAA4I;EAIxN,OAHI,EAAO,cACF,EAAO,YAAY;GAAU;GAAyD;GAAa,IAAI,EAAO;GAAI;GAAK;EAAS,CAAC,IAEnI,EAAS,YAAa,EAAmB,SAAS,EAAO,eAAe,CAAW,CAAC,CAAC;CAC9F;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/CaseDbTableUtil/CaseDbTableUtil.ts"],"sourcesContent":["import type {\n CaseDbCase,\n CaseDbCol,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport { CaseDbColType } from '@gen-epix/api-casedb';\nimport type {\n GetTableCellRowComparatorProps,\n GetTableCellValueProps,\n TableColumn,\n TableColumnText,\n} from '@gen-epix/ui-client-common/models/table';\n\nimport { DataService } from '../../classes/services/DataService';\nimport { CaseUtil } from '../CaseUtil';\n\nexport class CaseDbTableUtil {\n // Cell value getters\n public static createCaseTypeCellRowComperator({ column, dataContext, direction }: GetTableCellRowComparatorProps<TableColumnText<CaseDbCase, CaseDbCompleteCaseType, CaseDbCol>, CaseDbCompleteCaseType>): (a: CaseDbCase, b: CaseDbCase) => number {\n return (a: CaseDbCase, b: CaseDbCase) => {\n const aValue = CaseUtil.getRowValue(a.content, column.columnContext, dataContext);\n const bValue = CaseUtil.getRowValue(b.content, column.columnContext, dataContext);\n const col = column.columnContext;\n const refCol = dataContext.ref_cols[col.ref_col_id];\n\n const directionMultiplier = direction === 'asc' ? 1 : -1;\n\n if (aValue.raw === bValue.raw) {\n return 0;\n }\n if (aValue.isMissing) {\n return 1;\n }\n if (bValue.isMissing) {\n return -1;\n }\n\n if (refCol.col_type === CaseDbColType.ORDINAL) {\n const conceptSetConceptIds = DataService.getInstance().data.conceptsIdsBySetId[refCol.concept_set_id];\n return (conceptSetConceptIds.indexOf(aValue.raw) - conceptSetConceptIds.indexOf(bValue.raw)) * directionMultiplier;\n }\n\n if (([CaseDbColType.DECIMAL_0, CaseDbColType.DECIMAL_1, CaseDbColType.DECIMAL_2, CaseDbColType.DECIMAL_3, CaseDbColType.DECIMAL_4, CaseDbColType.DECIMAL_4, CaseDbColType.DECIMAL_5, CaseDbColType.DECIMAL_6] as CaseDbColType[]).includes(refCol.col_type)) {\n return (+aValue.raw - +bValue.raw) * directionMultiplier;\n }\n\n return aValue.short.localeCompare(bValue.short) * directionMultiplier;\n };\n }\n\n public static getTableCaseTypeCellValue<TRowData>({ column, dataContext, row, rowIndex }: GetTableCellValueProps<TRowData, TableColumnText<TRowData, CaseDbCompleteCaseType, CaseDbCol>, CaseDbCompleteCaseType>): string {\n if (column.valueGetter) {\n return column.valueGetter({ column: column as TableColumn<TRowData, CaseDbCompleteCaseType>, dataContext, id: column.id, row, rowIndex });\n }\n return CaseUtil.getRowValue((row as CaseDbCase).content, column.columnContext, dataContext).raw;\n }\n}\n"],"mappings":";;;;AAgBA,IAAa,IAAb,MAA6B;CAE3B,OAAc,gCAAgC,EAAE,WAAQ,gBAAa,gBAA+K;EAClP,QAAQ,GAAe,MAAkB;GACvC,IAAM,IAAS,EAAS,YAAY,EAAE,SAAS,EAAO,eAAe,CAAW,GAC1E,IAAS,EAAS,YAAY,EAAE,SAAS,EAAO,eAAe,CAAW,GAC1E,IAAM,EAAO,eACb,IAAS,EAAY,SAAS,EAAI,aAElC,IAAsB,MAAc,QAAQ,IAAI;GAEtD,IAAI,EAAO,QAAQ,EAAO,KACxB,OAAO;GAET,IAAI,EAAO,WACT,OAAO;GAET,IAAI,EAAO,WACT,OAAO;GAGT,IAAI,EAAO,aAAa,EAAc,SAAS;IAC7C,IAAM,IAAuB,EAAY,YAAY,CAAC,CAAC,KAAK,mBAAmB,EAAO;IACtF,QAAQ,EAAqB,QAAQ,EAAO,GAAG,IAAI,EAAqB,QAAQ,EAAO,GAAG,KAAK;GACjG;GAMA,OAJK;IAAC,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;IAAW,EAAc;GAAS,CAAC,CAAqB,SAAS,EAAO,QAAQ,KAChP,CAAC,EAAO,MAAO,EAAO,OAAO,IAGhC,EAAO,MAAM,cAAc,EAAO,KAAK,IAAI;EACpD;CACF;CAEA,OAAc,0BAAoC,EAAE,WAAQ,gBAAa,QAAK,eAA4I;EAIxN,OAHI,EAAO,cACF,EAAO,YAAY;GAAU;GAAyD;GAAa,IAAI,EAAO;GAAI;GAAK;EAAS,CAAC,IAEnI,EAAS,YAAa,EAAmB,SAAS,EAAO,eAAe,CAAW,CAAC,CAAC;CAC9F;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/CaseSelectionUtil/CaseSelectionUtil.ts"],"sourcesContent":["import intersection from 'lodash/intersection';\n\nexport class CaseSelectionUtil {\n public static addComponentCaseIdsToSelection(componentCaseIds: string[], selectedIds: string[]): string[] {\n const caseIds = [...selectedIds, ...componentCaseIds];\n return Array.from(new Set(caseIds));\n }\n\n public static canAddToSelection(componentCaseIds: string[], selectedIds: string[]): boolean {\n const intersectedCaseIds = intersection(componentCaseIds, selectedIds);\n return intersectedCaseIds.length !== componentCaseIds.length;\n }\n\n public static canRefineSelection(componentCaseIds: string[], selectedIds: string[]): boolean {\n const intersectedCaseIds = intersection(componentCaseIds, selectedIds);\n const negationResult = intersectedCaseIds.length === 0 || (intersectedCaseIds.length === componentCaseIds.length && intersectedCaseIds.length === selectedIds.length);\n return !negationResult;\n }\n\n public static canRemoveFromSelection(componentCaseIds: string[], selectedIds: string[]): boolean {\n const intersectedCaseIds = intersection(componentCaseIds, selectedIds);\n return intersectedCaseIds.length > 0;\n }\n\n public static refineSelectionWithComponentCaseIds(componentCaseIds: string[], selectedIds: string[]): string[] {\n return componentCaseIds.filter(caseId => selectedIds.includes(caseId));\n }\n\n public static removeComponentCaseIdsFromSelection(componentCaseIds: string[], selectedIds: string[]): string[] {\n return selectedIds.filter(caseId => !componentCaseIds.includes(caseId));\n }\n}\n"],"mappings":";;;mCAEa,IAAb,MAA+B;CAC7B,OAAc,+BAA+B,GAA4B,GAAiC;EACxG,IAAM,IAAU,CAAC,GAAG,GAAa,GAAG,CAAgB;EACpD,OAAO,MAAM,KAAK,IAAI,IAAI,CAAO,CAAC;CACpC;CAEA,OAAc,kBAAkB,GAA4B,GAAgC;EAE1F,QAAA,GAAA,EAAA,QAAA,CADwC,GAAkB,CACnD,CAAA,CAAmB,WAAW,EAAiB;CACxD;CAEA,OAAc,mBAAmB,GAA4B,GAAgC;EAC3F,IAAM,KAAA,GAAA,EAAA,QAAA,CAAkC,GAAkB,CAAW;EAErE,OAAO,EADgB,EAAmB,WAAW,KAAM,EAAmB,WAAW,EAAiB,UAAU,EAAmB,WAAW,EAAY;CAEhK;CAEA,OAAc,uBAAuB,GAA4B,GAAgC;EAE/F,QAAA,GAAA,EAAA,QAAA,CADwC,GAAkB,CACnD,CAAA,CAAmB,SAAS;CACrC;CAEA,OAAc,oCAAoC,GAA4B,GAAiC;EAC7G,OAAO,EAAiB,QAAO,MAAU,EAAY,SAAS,CAAM,CAAC;CACvE;CAEA,OAAc,oCAAoC,GAA4B,GAAiC;EAC7G,OAAO,EAAY,QAAO,MAAU,CAAC,EAAiB,SAAS,CAAM,CAAC;CACxE;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/CaseSelectionUtil/CaseSelectionUtil.ts"],"sourcesContent":["import intersection from 'lodash/intersection';\n\nexport class CaseSelectionUtil {\n public static addComponentCaseIdsToSelection(componentCaseIds: string[], selectedIds: string[]): string[] {\n const caseIds = [...selectedIds, ...componentCaseIds];\n return Array.from(new Set(caseIds));\n }\n\n public static canAddToSelection(componentCaseIds: string[], selectedIds: string[]): boolean {\n const intersectedCaseIds = intersection(componentCaseIds, selectedIds);\n return intersectedCaseIds.length !== componentCaseIds.length;\n }\n\n public static canRefineSelection(componentCaseIds: string[], selectedIds: string[]): boolean {\n const intersectedCaseIds = intersection(componentCaseIds, selectedIds);\n const negationResult = intersectedCaseIds.length === 0 || (intersectedCaseIds.length === componentCaseIds.length && intersectedCaseIds.length === selectedIds.length);\n return !negationResult;\n }\n\n public static canRemoveFromSelection(componentCaseIds: string[], selectedIds: string[]): boolean {\n const intersectedCaseIds = intersection(componentCaseIds, selectedIds);\n return intersectedCaseIds.length > 0;\n }\n\n public static refineSelectionWithComponentCaseIds(componentCaseIds: string[], selectedIds: string[]): string[] {\n return componentCaseIds.filter(caseId => selectedIds.includes(caseId));\n }\n\n public static removeComponentCaseIdsFromSelection(componentCaseIds: string[], selectedIds: string[]): string[] {\n return selectedIds.filter(caseId => !componentCaseIds.includes(caseId));\n }\n}\n"],"mappings":";;;mCAEa,IAAb,MAA+B;CAC7B,OAAc,+BAA+B,GAA4B,GAAiC;EACxG,IAAM,IAAU,CAAC,GAAG,GAAa,GAAG,CAAgB;EACpD,OAAO,MAAM,KAAK,IAAI,IAAI,CAAO,CAAC;CACpC;CAEA,OAAc,kBAAkB,GAA4B,GAAgC;EAE1F,QAAA,GAD2B,EAAA,QAAA,CAAa,GAAkB,CACnD,CAAA,CAAmB,WAAW,EAAiB;CACxD;CAEA,OAAc,mBAAmB,GAA4B,GAAgC;EAC3F,IAAM,KAAA,GAAqB,EAAA,QAAA,CAAa,GAAkB,CAAW;EAErE,OAAO,EADgB,EAAmB,WAAW,KAAM,EAAmB,WAAW,EAAiB,UAAU,EAAmB,WAAW,EAAY;CAEhK;CAEA,OAAc,uBAAuB,GAA4B,GAAgC;EAE/F,QAAA,GAD2B,EAAA,QAAA,CAAa,GAAkB,CACnD,CAAA,CAAmB,SAAS;CACrC;CAEA,OAAc,oCAAoC,GAA4B,GAAiC;EAC7G,OAAO,EAAiB,QAAO,MAAU,EAAY,SAAS,CAAM,CAAC;CACvE;CAEA,OAAc,oCAAoC,GAA4B,GAAiC;EAC7G,OAAO,EAAY,QAAO,MAAU,CAAC,EAAiB,SAAS,CAAM,CAAC;CACxE;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { CaseDbCase, CaseDbCompleteCaseType } from '@gen-epix/api-casedb';
2
2
  import { ObjectSchema } from 'yup';
3
- import { FormFieldDefinition, FormGroupDefinition } from '@gen-epix/ui-form/models/form';
3
+ import { FormFieldDefinition, FormGroupDefinition } from '@gen-epix/ui-core-form/models/form';
4
4
  export declare class CaseTypeFormUtil {
5
5
  static createFormDefinitions(kwArgs: {
6
6
  completeCaseType: CaseDbCompleteCaseType;
@@ -6,7 +6,7 @@ import { object as i, string as a } from "yup";
6
6
  import { t as o } from "i18next";
7
7
  import { CaseDbColType as s, CaseDbDimType as c } from "@gen-epix/api-casedb";
8
8
  import { StringUtil as l } from "@gen-epix/ui-core/utils/StringUtil";
9
- import { FORM_FIELD_DEFINITION_TYPE as u } from "@gen-epix/ui-form/models/form";
9
+ import { FORM_FIELD_DEFINITION_TYPE as u } from "@gen-epix/ui-core-form/models/form";
10
10
  //#region src/utils/CaseTypeFormUtil/CaseTypeFormUtil.ts
11
11
  var d = class {
12
12
  static createFormDefinitions(e) {
@@ -94,15 +94,12 @@ var d = class {
94
94
  });
95
95
  }
96
96
  break;
97
- case s.TIME_DAY:
98
- e.push({
99
- definition: u.DATE,
100
- disabled: r,
101
- label: t.label,
102
- name: t.id
103
- });
104
- break;
105
- default: break;
97
+ case s.TIME_DAY: e.push({
98
+ definition: u.DATE,
99
+ disabled: r,
100
+ label: t.label,
101
+ name: t.id
102
+ });
106
103
  }
107
104
  return e;
108
105
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/CaseTypeFormUtil/CaseTypeFormUtil.ts"],"sourcesContent":["import type {\n CaseDbCase,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbColType,\n CaseDbDimType,\n} from '@gen-epix/api-casedb';\nimport { isValid } from 'date-fns';\nimport { t } from 'i18next';\nimport type { ObjectSchema } from 'yup';\nimport {\n object,\n string,\n} from 'yup';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\nimport type {\n FormFieldDefinition,\n FormGroupDefinition,\n FormGroupMessage,\n} from '@gen-epix/ui-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-form/models/form';\n\nimport { DataService } from '../../classes/services/DataService';\nimport { AbacUtil } from '../AbacUtil';\nimport { CaseTypeUtil } from '../CaseTypeUtil';\n\nexport class CaseTypeFormUtil {\n\n public static createFormDefinitions(kwArgs: { completeCaseType: CaseDbCompleteCaseType; enabledColIds?: string[]; includedColIds?: string[]; onClearGroupFields?: (fieldNames: string[]) => void }): { fieldDefinitions: FormFieldDefinition<CaseDbCase['content']>[]; groupDefinitions: FormGroupDefinition[] } {\n const { completeCaseType, enabledColIds, includedColIds, onClearGroupFields } = kwArgs;\n const cols = CaseTypeUtil.getCols(completeCaseType);\n const dimensions = CaseTypeUtil.getDims(completeCaseType);\n const effectiveColumnAccessRights = AbacUtil.createEffectieveColumnAccessRights(Object.values(completeCaseType.case_type_access_abacs));\n const fieldDefinitions: FormFieldDefinition<CaseDbCase['content']>[] = cols.reduce((acc, col) => {\n const hasAccess = effectiveColumnAccessRights.get(col.id)?.write;\n if (!hasAccess) {\n return acc;\n }\n if (includedColIds && !includedColIds.includes(col.id)) {\n return acc;\n }\n const disabled = enabledColIds ? !enabledColIds.includes(col.id) : false;\n\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n switch (refCol.col_type) {\n case CaseDbColType.DECIMAL_0:\n case CaseDbColType.DECIMAL_1:\n case CaseDbColType.DECIMAL_2:\n case CaseDbColType.DECIMAL_3:\n case CaseDbColType.DECIMAL_4:\n case CaseDbColType.DECIMAL_5:\n case CaseDbColType.DECIMAL_6:\n case CaseDbColType.ID_CASE:\n case CaseDbColType.ID_EVENT:\n case CaseDbColType.ID_GENETIC_SEQUENCE:\n case CaseDbColType.ID_PERSON:\n case CaseDbColType.ID_SAMPLE:\n case CaseDbColType.TEXT:\n case CaseDbColType.TIME_MONTH:\n case CaseDbColType.TIME_QUARTER:\n case CaseDbColType.TIME_WEEK:\n case CaseDbColType.TIME_YEAR:\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n disabled,\n label: col.label,\n name: col.id,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n break;\n case CaseDbColType.GEO_REGION:\n if (DataService.getInstance().data.regionsByRegionSetId[refCol.region_set_id]) {\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled,\n label: col.label,\n name: col.id,\n options: DataService.getInstance().data.regionsByRegionSetId[refCol.region_set_id].map(region => ({\n label: DataService.getInstance().data.regionSets[refCol.region_set_id].region_code_as_label ? region.code : region.name,\n value: region.id,\n })),\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n }\n break;\n case CaseDbColType.INTERVAL:\n case CaseDbColType.NOMINAL:\n case CaseDbColType.ORDINAL:\n if (DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id]) {\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled,\n label: col.label,\n name: col.id,\n options: DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id].map(concept => ({\n label: concept.name,\n value: concept.id,\n })),\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n }\n break;\n case CaseDbColType.ORGANIZATION:\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled,\n label: col.label,\n name: col.id,\n options: (DataService.getInstance().data.organizations ?? []).map(organization => ({\n label: organization.name,\n value: organization.id,\n })).sort((a, b) => StringUtil.advancedSortComperator(a.label, b.label)),\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n break;\n case CaseDbColType.REGULAR_LANGUAGE:\n try {\n new RegExp(col.pattern);\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n disabled,\n label: col.label,\n name: col.id,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n } catch (_error) {\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n disabled,\n label: col.label,\n name: col.id,\n warningMessage: t`Unable to parse regular expression. You may enter text, but it's not guaranteed to be valid.`,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n }\n break;\n case CaseDbColType.TIME_DAY:\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.DATE,\n disabled,\n label: col.label,\n name: col.id,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n break;\n default:\n break;\n }\n\n return acc;\n }, [] as FormFieldDefinition<CaseDbCase['content']>[]);\n\n dimensions.forEach(dim => {\n const colIds = CaseTypeUtil.getCols(completeCaseType, dim.id).map(col => col.id);\n fieldDefinitions.forEach(definition => {\n if (colIds.includes(definition.name)) {\n definition.groupKey = dim.id;\n }\n });\n });\n\n const groupDefinitions: FormGroupDefinition[] = [];\n\n dimensions.forEach(dim => {\n const colsInDim = CaseTypeUtil.getCols(completeCaseType, dim.id);\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n const messages: FormGroupMessage[] = [];\n\n if (refDim.dim_type === CaseDbDimType.GEO) {\n messages.push({ message: t`This dimension contains geographical regions. When making updates, first clear all values and only fill in the highest known resolution(s) of the geographical regions.`, severity: 'info' });\n }\n if (refDim.dim_type === CaseDbDimType.TIME) {\n messages.push({ message: t`This dimension contains time-related data. When making updates, first clear all values and only fill in the highest known resolution(s) of the time-related data.`, severity: 'info' });\n }\n const DECIMAL_COL_TYPES = [CaseDbColType.DECIMAL_0, CaseDbColType.DECIMAL_1, CaseDbColType.DECIMAL_2, CaseDbColType.DECIMAL_3, CaseDbColType.DECIMAL_4, CaseDbColType.DECIMAL_5, CaseDbColType.DECIMAL_6] as const;\n if (\n (colsInDim.some(col => completeCaseType.ref_cols[col.ref_col_id].col_type === CaseDbColType.ORDINAL) || colsInDim.some(col => completeCaseType.ref_cols[col.ref_col_id].col_type === CaseDbColType.INTERVAL)) &&\n colsInDim.some(col => (DECIMAL_COL_TYPES as readonly string[]).includes(completeCaseType.ref_cols[col.ref_col_id].col_type))\n ) {\n messages.push({ message: t`This dimension contains a mix of ordinal/interval and decimal columns. When making updates, first clear all values and only fill in the highest known resolution(s) of the data (typically the decimal data).`, severity: 'info' });\n }\n\n const groupFieldNames = fieldDefinitions.filter(f => f.groupKey === dim.id).map(f => f.name);\n groupDefinitions.push({\n groupKey: dim.id,\n label: dim.label,\n messages: onClearGroupFields\n ? messages.map(msg => ({\n ...msg,\n buttonLabel: t('Clear all {{dimension}} fields', { dimension: dim.label }),\n onButtonClick: () => onClearGroupFields(groupFieldNames),\n }))\n : messages,\n });\n });\n\n return { fieldDefinitions, groupDefinitions };\n }\n\n public static createYupSchema(kwArgs: { completeCaseType: CaseDbCompleteCaseType; includedColIds?: string[] }): ObjectSchema<{ [key: string]: string }> {\n const { completeCaseType, includedColIds } = kwArgs;\n const effectiveColumnAccessRights = AbacUtil.createEffectieveColumnAccessRights(Object.values(completeCaseType.case_type_access_abacs));\n\n return CaseTypeUtil.getCols(completeCaseType).reduce((s, col) => {\n const hasAccess = effectiveColumnAccessRights.get(col.id)?.write;\n if (!hasAccess) {\n return s;\n }\n if (includedColIds && !includedColIds.includes(col.id)) {\n return s;\n }\n\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n switch (refCol.col_type) {\n case CaseDbColType.DECIMAL_0:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal0().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.DECIMAL_1:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal1().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_2:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal2().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_3:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal3().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_4:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal4().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_5:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal5().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_6:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal6().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.GENETIC_DISTANCE:\n case CaseDbColType.GENETIC_READS:\n case CaseDbColType.GENETIC_SEQUENCE:\n return s;\n case CaseDbColType.GEO_LATLON:\n return s.concat(object().shape({\n [col.id]: string().nullable().latLong().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.GEO_REGION:\n case CaseDbColType.INTERVAL:\n case CaseDbColType.NOMINAL:\n case CaseDbColType.ORDINAL:\n case CaseDbColType.ORGANIZATION:\n return s.concat(object().shape({\n [col.id]: string().nullable().uuid4().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.ID_CASE:\n case CaseDbColType.ID_EVENT:\n case CaseDbColType.ID_GENETIC_SEQUENCE:\n case CaseDbColType.ID_PERSON:\n case CaseDbColType.ID_SAMPLE:\n return s.concat(object().shape({\n [col.id]: string().nullable().extendedAlphaNumeric().max(255).transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.REGULAR_LANGUAGE:\n try {\n return s.concat(object().shape({\n [col.id]: string().nullable().matches(new RegExp(col.pattern), t('Invalid value for pattern \"{{pattern}}\"', { pattern: col.pattern })),\n })).transform((_val: unknown, orig: string) => orig || null);\n } catch (_error) {\n return s.concat(object().shape({\n [col.id]: string().nullable().max(col.max_length ?? 65535),\n })).transform((_val: unknown, orig: string) => orig || null);\n }\n case CaseDbColType.TEXT:\n return s.concat(object().shape({\n [col.id]: string().nullable().extendedAlphaNumeric().max(65535).transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_DAY:\n return s.concat(object().shape({\n [col.id]: string().nullable().transform((_val: unknown, orig: Date) => isValid(orig) ? orig.toISOString() : null),\n }));\n case CaseDbColType.TIME_MONTH:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeMonth().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_QUARTER:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeQuarter().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_WEEK:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeWeek().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_YEAR:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeYear().transform((_val: unknown, orig: string) => orig || null),\n }));\n default:\n console.warn(`Unknown column type: ${refCol.col_type}`);\n return s;\n }\n }, object({}));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/CaseTypeFormUtil/CaseTypeFormUtil.ts"],"sourcesContent":["import type {\n CaseDbCase,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbColType,\n CaseDbDimType,\n} from '@gen-epix/api-casedb';\nimport { isValid } from 'date-fns';\nimport { t } from 'i18next';\nimport type { ObjectSchema } from 'yup';\nimport {\n object,\n string,\n} from 'yup';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\nimport type {\n FormFieldDefinition,\n FormGroupDefinition,\n FormGroupMessage,\n} from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\n\nimport { DataService } from '../../classes/services/DataService';\nimport { AbacUtil } from '../AbacUtil';\nimport { CaseTypeUtil } from '../CaseTypeUtil';\n\nexport class CaseTypeFormUtil {\n\n public static createFormDefinitions(kwArgs: { completeCaseType: CaseDbCompleteCaseType; enabledColIds?: string[]; includedColIds?: string[]; onClearGroupFields?: (fieldNames: string[]) => void }): { fieldDefinitions: FormFieldDefinition<CaseDbCase['content']>[]; groupDefinitions: FormGroupDefinition[] } {\n const { completeCaseType, enabledColIds, includedColIds, onClearGroupFields } = kwArgs;\n const cols = CaseTypeUtil.getCols(completeCaseType);\n const dimensions = CaseTypeUtil.getDims(completeCaseType);\n const effectiveColumnAccessRights = AbacUtil.createEffectieveColumnAccessRights(Object.values(completeCaseType.case_type_access_abacs));\n const fieldDefinitions: FormFieldDefinition<CaseDbCase['content']>[] = cols.reduce((acc, col) => {\n const hasAccess = effectiveColumnAccessRights.get(col.id)?.write;\n if (!hasAccess) {\n return acc;\n }\n if (includedColIds && !includedColIds.includes(col.id)) {\n return acc;\n }\n const disabled = enabledColIds ? !enabledColIds.includes(col.id) : false;\n\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n switch (refCol.col_type) {\n case CaseDbColType.DECIMAL_0:\n case CaseDbColType.DECIMAL_1:\n case CaseDbColType.DECIMAL_2:\n case CaseDbColType.DECIMAL_3:\n case CaseDbColType.DECIMAL_4:\n case CaseDbColType.DECIMAL_5:\n case CaseDbColType.DECIMAL_6:\n case CaseDbColType.ID_CASE:\n case CaseDbColType.ID_EVENT:\n case CaseDbColType.ID_GENETIC_SEQUENCE:\n case CaseDbColType.ID_PERSON:\n case CaseDbColType.ID_SAMPLE:\n case CaseDbColType.TEXT:\n case CaseDbColType.TIME_MONTH:\n case CaseDbColType.TIME_QUARTER:\n case CaseDbColType.TIME_WEEK:\n case CaseDbColType.TIME_YEAR:\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n disabled,\n label: col.label,\n name: col.id,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n break;\n case CaseDbColType.GEO_REGION:\n if (DataService.getInstance().data.regionsByRegionSetId[refCol.region_set_id]) {\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled,\n label: col.label,\n name: col.id,\n options: DataService.getInstance().data.regionsByRegionSetId[refCol.region_set_id].map(region => ({\n label: DataService.getInstance().data.regionSets[refCol.region_set_id].region_code_as_label ? region.code : region.name,\n value: region.id,\n })),\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n }\n break;\n case CaseDbColType.INTERVAL:\n case CaseDbColType.NOMINAL:\n case CaseDbColType.ORDINAL:\n if (DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id]) {\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled,\n label: col.label,\n name: col.id,\n options: DataService.getInstance().data.conceptsBySetId[refCol.concept_set_id].map(concept => ({\n label: concept.name,\n value: concept.id,\n })),\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n }\n break;\n case CaseDbColType.ORGANIZATION:\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled,\n label: col.label,\n name: col.id,\n options: (DataService.getInstance().data.organizations ?? []).map(organization => ({\n label: organization.name,\n value: organization.id,\n })).sort((a, b) => StringUtil.advancedSortComperator(a.label, b.label)),\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n break;\n case CaseDbColType.REGULAR_LANGUAGE:\n try {\n new RegExp(col.pattern);\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n disabled,\n label: col.label,\n name: col.id,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n } catch (_error) {\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n disabled,\n label: col.label,\n name: col.id,\n warningMessage: t`Unable to parse regular expression. You may enter text, but it's not guaranteed to be valid.`,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n }\n break;\n case CaseDbColType.TIME_DAY:\n acc.push({\n definition: FORM_FIELD_DEFINITION_TYPE.DATE,\n disabled,\n label: col.label,\n name: col.id,\n } as const satisfies FormFieldDefinition<CaseDbCase['content']>);\n break;\n default:\n break;\n }\n\n return acc;\n }, [] as FormFieldDefinition<CaseDbCase['content']>[]);\n\n dimensions.forEach(dim => {\n const colIds = CaseTypeUtil.getCols(completeCaseType, dim.id).map(col => col.id);\n fieldDefinitions.forEach(definition => {\n if (colIds.includes(definition.name)) {\n definition.groupKey = dim.id;\n }\n });\n });\n\n const groupDefinitions: FormGroupDefinition[] = [];\n\n dimensions.forEach(dim => {\n const colsInDim = CaseTypeUtil.getCols(completeCaseType, dim.id);\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n const messages: FormGroupMessage[] = [];\n\n if (refDim.dim_type === CaseDbDimType.GEO) {\n messages.push({ message: t`This dimension contains geographical regions. When making updates, first clear all values and only fill in the highest known resolution(s) of the geographical regions.`, severity: 'info' });\n }\n if (refDim.dim_type === CaseDbDimType.TIME) {\n messages.push({ message: t`This dimension contains time-related data. When making updates, first clear all values and only fill in the highest known resolution(s) of the time-related data.`, severity: 'info' });\n }\n const DECIMAL_COL_TYPES = [CaseDbColType.DECIMAL_0, CaseDbColType.DECIMAL_1, CaseDbColType.DECIMAL_2, CaseDbColType.DECIMAL_3, CaseDbColType.DECIMAL_4, CaseDbColType.DECIMAL_5, CaseDbColType.DECIMAL_6] as const;\n if (\n (colsInDim.some(col => completeCaseType.ref_cols[col.ref_col_id].col_type === CaseDbColType.ORDINAL) || colsInDim.some(col => completeCaseType.ref_cols[col.ref_col_id].col_type === CaseDbColType.INTERVAL)) &&\n colsInDim.some(col => (DECIMAL_COL_TYPES as readonly string[]).includes(completeCaseType.ref_cols[col.ref_col_id].col_type))\n ) {\n messages.push({ message: t`This dimension contains a mix of ordinal/interval and decimal columns. When making updates, first clear all values and only fill in the highest known resolution(s) of the data (typically the decimal data).`, severity: 'info' });\n }\n\n const groupFieldNames = fieldDefinitions.filter(f => f.groupKey === dim.id).map(f => f.name);\n groupDefinitions.push({\n groupKey: dim.id,\n label: dim.label,\n messages: onClearGroupFields\n ? messages.map(msg => ({\n ...msg,\n buttonLabel: t('Clear all {{dimension}} fields', { dimension: dim.label }),\n onButtonClick: () => onClearGroupFields(groupFieldNames),\n }))\n : messages,\n });\n });\n\n return { fieldDefinitions, groupDefinitions };\n }\n\n public static createYupSchema(kwArgs: { completeCaseType: CaseDbCompleteCaseType; includedColIds?: string[] }): ObjectSchema<{ [key: string]: string }> {\n const { completeCaseType, includedColIds } = kwArgs;\n const effectiveColumnAccessRights = AbacUtil.createEffectieveColumnAccessRights(Object.values(completeCaseType.case_type_access_abacs));\n\n return CaseTypeUtil.getCols(completeCaseType).reduce((s, col) => {\n const hasAccess = effectiveColumnAccessRights.get(col.id)?.write;\n if (!hasAccess) {\n return s;\n }\n if (includedColIds && !includedColIds.includes(col.id)) {\n return s;\n }\n\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n switch (refCol.col_type) {\n case CaseDbColType.DECIMAL_0:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal0().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.DECIMAL_1:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal1().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_2:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal2().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_3:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal3().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_4:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal4().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_5:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal5().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.DECIMAL_6:\n return s.concat(object().shape({\n [col.id]: string().nullable().decimal6().transform((_val: unknown, orig: string) => orig ?? null),\n }));\n case CaseDbColType.GENETIC_DISTANCE:\n case CaseDbColType.GENETIC_READS:\n case CaseDbColType.GENETIC_SEQUENCE:\n return s;\n case CaseDbColType.GEO_LATLON:\n return s.concat(object().shape({\n [col.id]: string().nullable().latLong().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.GEO_REGION:\n case CaseDbColType.INTERVAL:\n case CaseDbColType.NOMINAL:\n case CaseDbColType.ORDINAL:\n case CaseDbColType.ORGANIZATION:\n return s.concat(object().shape({\n [col.id]: string().nullable().uuid4().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.ID_CASE:\n case CaseDbColType.ID_EVENT:\n case CaseDbColType.ID_GENETIC_SEQUENCE:\n case CaseDbColType.ID_PERSON:\n case CaseDbColType.ID_SAMPLE:\n return s.concat(object().shape({\n [col.id]: string().nullable().extendedAlphaNumeric().max(255).transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.REGULAR_LANGUAGE:\n try {\n return s.concat(object().shape({\n [col.id]: string().nullable().matches(new RegExp(col.pattern), t('Invalid value for pattern \"{{pattern}}\"', { pattern: col.pattern })),\n })).transform((_val: unknown, orig: string) => orig || null);\n } catch (_error) {\n return s.concat(object().shape({\n [col.id]: string().nullable().max(col.max_length ?? 65535),\n })).transform((_val: unknown, orig: string) => orig || null);\n }\n case CaseDbColType.TEXT:\n return s.concat(object().shape({\n [col.id]: string().nullable().extendedAlphaNumeric().max(65535).transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_DAY:\n return s.concat(object().shape({\n [col.id]: string().nullable().transform((_val: unknown, orig: Date) => isValid(orig) ? orig.toISOString() : null),\n }));\n case CaseDbColType.TIME_MONTH:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeMonth().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_QUARTER:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeQuarter().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_WEEK:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeWeek().transform((_val: unknown, orig: string) => orig || null),\n }));\n case CaseDbColType.TIME_YEAR:\n return s.concat(object().shape({\n [col.id]: string().nullable().timeYear().transform((_val: unknown, orig: string) => orig || null),\n }));\n default:\n console.warn(`Unknown column type: ${refCol.col_type}`);\n return s;\n }\n }, object({}));\n }\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { WindowService as f } from "@gen-epix/ui-core/classes/services/WindowSer
10
10
  //#region ../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createSet.js
11
11
  var p = /* @__PURE__ */ t(((e, t) => {
12
12
  var n = o(), r = s(), i = c();
13
- t.exports = n && 1 / i(new n([, -0]))[1] == Infinity ? function(e) {
13
+ t.exports = n && 1 / i(new n([, -0]))[1] == 1 / 0 ? function(e) {
14
14
  return new n(e);
15
15
  } : r;
16
16
  })), m = /* @__PURE__ */ t(((e, t) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createSet.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseUniq.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/uniq.js","../../../src/utils/CaseTypeUtil/CaseTypeUtil.ts"],"sourcesContent":["var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","import uniq from 'lodash/uniq';\nimport type {\n CaseDbCaseType,\n CaseDbCol,\n CaseDbCompleteCaseType,\n CaseDbDim,\n CaseDbRefCol,\n CaseDbRefDim,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbColType,\n CaseDbDimType,\n} from '@gen-epix/api-casedb';\nimport { WindowService } from '@gen-epix/ui-core/classes/services/WindowService';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\n\n\nexport const SELECTION_FILTER_GROUP = 'selection';\nexport const TREE_FILTER_GROUP = 'tree';\n\nexport class CaseTypeUtil {\n public static createCaseTypeLink(caseType: CaseDbCaseType | CaseDbCompleteCaseType, full?: boolean): string {\n const path = `/cases/${StringUtil.createSlug(caseType.name)}/${caseType.id}`;\n if (full) {\n return `${WindowService.getInstance().window.location.origin}${path}`;\n }\n return path;\n }\n\n /**\n * Find paired FWD/REV columns in the same dimension.\n * @param completeCaseType The complete case type object.\n * @returns An array of paired FWD/REV columns.\n */\n public static findPairedReadsCols(completeCaseType: CaseDbCompleteCaseType): { fwd: CaseDbCol; rev: CaseDbCol }[] {\n const pairs: { fwd: CaseDbCol; rev: CaseDbCol }[] = [];\n\n completeCaseType.ordered_dim_ids.forEach(dimId => {\n const cols = completeCaseType.ordered_col_ids_by_dim[dimId].map(x => completeCaseType.cols[x]);\n if (!cols) {\n return;\n }\n const readsColumns = cols.filter(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return refCol?.col_type === CaseDbColType.GENETIC_READS;\n });\n\n if (readsColumns.length === 2) {\n pairs.push({ fwd: readsColumns[0], rev: readsColumns[1] });\n }\n\n });\n\n return pairs;\n }\n\n /**\n * Find a unique column by its column ID or column ID.\n * @param completeCaseType The complete case type object.\n * @param id The ID of the column or column.\n * @returns The unique column if found, otherwise null.\n */\n public static findUniqueColByColIdRefOrColId(completeCaseType: CaseDbCompleteCaseType, id: string): CaseDbCol {\n const colId = Object.values(completeCaseType.cols).find(col => col.ref_col_id === id);\n if (colId) {\n return colId;\n }\n const colIds = Object.values(completeCaseType.ref_cols).filter(ref_col => ref_col.id === id);\n if (colIds.length !== 1) {\n return null;\n }\n const cols = Object.values(completeCaseType.cols).filter(col => col.ref_col_id === colIds[0].id);\n if (cols.length !== 1) {\n return null;\n }\n return cols[0];\n }\n\n public static getCols(completeCaseType: CaseDbCompleteCaseType, dimId?: string): CaseDbCol[] {\n if (!dimId) {\n return Object.values(completeCaseType.ordered_col_ids).map(id => completeCaseType.cols[id]);\n }\n return completeCaseType.ordered_col_ids_by_dim[dimId].map(id => completeCaseType.cols[id]);\n }\n\n /**\n * Get columns by their column type.\n * @param completeCaseType The complete case type object.\n * @param colType The column type to filter by.\n * @returns An array of columns matching the specified column type.\n */\n public static getColsByType(completeCaseType: CaseDbCompleteCaseType, colType: CaseDbColType[]): CaseDbCol[] {\n return Object.values(completeCaseType.cols).filter(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return colType.includes(refCol?.col_type);\n });\n }\n\n public static getDimLabel(completeCaseType: CaseDbCompleteCaseType, dimId: string): string {\n const dim = completeCaseType.dims[dimId];\n return dim.code;\n }\n\n public static getDims(completeCaseType: CaseDbCompleteCaseType, dimTypes?: CaseDbDimType[]): CaseDbDim[] {\n const dims = Object.values(completeCaseType.ordered_dim_ids).map(x => completeCaseType.dims[x]);\n if (!dimTypes?.length) {\n return dims;\n }\n return dims.filter(dim => {\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n return dimTypes.includes(refDim.dim_type);\n });\n }\n\n public static getInitialVisibleColIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const visibleColumnIds: string[] = [];\n\n completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).forEach((dim) => {\n const refDims = completeCaseType.ref_dims[dim.ref_dim_id];\n\n const cols = completeCaseType.ordered_col_ids_by_dim[dim.id].map(id => completeCaseType.cols[id]);\n const refCols = cols.map(col => completeCaseType.ref_cols[col.ref_col_id]);\n\n if (refDims.dim_type === CaseDbDimType.GEO) {\n visibleColumnIds.push(CaseTypeUtil.getPreferredGEOCol(cols).id);\n } else if (refDims.dim_type === CaseDbDimType.TIME || refDims.dim_type === CaseDbDimType.NUMBER || CaseTypeUtil.isGeneticDistanceDim(refDims, refCols)) {\n visibleColumnIds.push(CaseTypeUtil.getPreferredColInDimHavingHighestRank(cols, completeCaseType).id);\n } else {\n visibleColumnIds.push(...cols.filter(cc => {\n const refCol = completeCaseType.ref_cols[cc.ref_col_id];\n const hiddenColTypes: CaseDbColType[] = [CaseDbColType.GENETIC_READS, CaseDbColType.GENETIC_SEQUENCE];\n return !hiddenColTypes.includes(refCol.col_type);\n }).map(c => c.id));\n }\n });\n\n return visibleColumnIds;\n }\n\n public static getPreferredColInDimHavingHighestRank(cols: CaseDbCol[], completeCaseType: CaseDbCompleteCaseType): CaseDbCol {\n return cols.find(col => completeCaseType.ref_cols[col.ref_col_id].rank === 1) ?? cols?.[0];\n }\n\n public static getPreferredGEOCol(cols: CaseDbCol[]): CaseDbCol {\n return cols[Math.min(cols.length - 1, Math.floor((cols.length - 1) / 2))];\n }\n\n\n public static getRegionSetIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const regionSetIds: string[] = [];\n const cols = CaseTypeUtil.getCols(completeCaseType);\n cols.forEach(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n if (refCol.region_set_id && !regionSetIds.includes(refCol.region_set_id)) {\n regionSetIds.push(refCol.region_set_id);\n }\n });\n return regionSetIds;\n }\n\n\n public static getWritableColIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const writableColIds: string[] = [];\n Object.values(completeCaseType.case_type_access_abacs).forEach((abac) => {\n writableColIds.push(...abac.write_col_ids);\n });\n return uniq(writableColIds);\n }\n\n\n public static getWritableImportExportColIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const writableColIds = CaseTypeUtil.getWritableColIds(completeCaseType);\n return Object.keys(completeCaseType.cols).filter(colId => {\n if (!writableColIds.includes(colId)) {\n return false;\n }\n const col = completeCaseType.cols[colId];\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n if (([CaseDbColType.GENETIC_DISTANCE, CaseDbColType.GENETIC_PROFILE, CaseDbColType.GENETIC_READS, CaseDbColType.GENETIC_SEQUENCE] as CaseDbColType[]).includes(refCol.col_type)) {\n return false;\n }\n return true;\n });\n }\n\n public static isGeneticDistanceDim(refDim: CaseDbRefDim, refCols: CaseDbRefCol[]): boolean {\n return refDim.dim_type === CaseDbDimType.OTHER && refCols.find(refCol => refCol.col_type === CaseDbColType.GENETIC_DISTANCE) !== undefined;\n }\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createSet.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseUniq.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/uniq.js","../../../src/utils/CaseTypeUtil/CaseTypeUtil.ts"],"sourcesContent":["var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","import uniq from 'lodash/uniq';\nimport type {\n CaseDbCaseType,\n CaseDbCol,\n CaseDbCompleteCaseType,\n CaseDbDim,\n CaseDbRefCol,\n CaseDbRefDim,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbColType,\n CaseDbDimType,\n} from '@gen-epix/api-casedb';\nimport { WindowService } from '@gen-epix/ui-core/classes/services/WindowService';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\n\n\nexport const SELECTION_FILTER_GROUP = 'selection';\nexport const TREE_FILTER_GROUP = 'tree';\n\nexport class CaseTypeUtil {\n public static createCaseTypeLink(caseType: CaseDbCaseType | CaseDbCompleteCaseType, full?: boolean): string {\n const path = `/cases/${StringUtil.createSlug(caseType.name)}/${caseType.id}`;\n if (full) {\n return `${WindowService.getInstance().window.location.origin}${path}`;\n }\n return path;\n }\n\n /**\n * Find paired FWD/REV columns in the same dimension.\n * @param completeCaseType The complete case type object.\n * @returns An array of paired FWD/REV columns.\n */\n public static findPairedReadsCols(completeCaseType: CaseDbCompleteCaseType): { fwd: CaseDbCol; rev: CaseDbCol }[] {\n const pairs: { fwd: CaseDbCol; rev: CaseDbCol }[] = [];\n\n completeCaseType.ordered_dim_ids.forEach(dimId => {\n const cols = completeCaseType.ordered_col_ids_by_dim[dimId].map(x => completeCaseType.cols[x]);\n if (!cols) {\n return;\n }\n const readsColumns = cols.filter(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return refCol?.col_type === CaseDbColType.GENETIC_READS;\n });\n\n if (readsColumns.length === 2) {\n pairs.push({ fwd: readsColumns[0], rev: readsColumns[1] });\n }\n\n });\n\n return pairs;\n }\n\n /**\n * Find a unique column by its column ID or column ID.\n * @param completeCaseType The complete case type object.\n * @param id The ID of the column or column.\n * @returns The unique column if found, otherwise null.\n */\n public static findUniqueColByColIdRefOrColId(completeCaseType: CaseDbCompleteCaseType, id: string): CaseDbCol {\n const colId = Object.values(completeCaseType.cols).find(col => col.ref_col_id === id);\n if (colId) {\n return colId;\n }\n const colIds = Object.values(completeCaseType.ref_cols).filter(ref_col => ref_col.id === id);\n if (colIds.length !== 1) {\n return null;\n }\n const cols = Object.values(completeCaseType.cols).filter(col => col.ref_col_id === colIds[0].id);\n if (cols.length !== 1) {\n return null;\n }\n return cols[0];\n }\n\n public static getCols(completeCaseType: CaseDbCompleteCaseType, dimId?: string): CaseDbCol[] {\n if (!dimId) {\n return Object.values(completeCaseType.ordered_col_ids).map(id => completeCaseType.cols[id]);\n }\n return completeCaseType.ordered_col_ids_by_dim[dimId].map(id => completeCaseType.cols[id]);\n }\n\n /**\n * Get columns by their column type.\n * @param completeCaseType The complete case type object.\n * @param colType The column type to filter by.\n * @returns An array of columns matching the specified column type.\n */\n public static getColsByType(completeCaseType: CaseDbCompleteCaseType, colType: CaseDbColType[]): CaseDbCol[] {\n return Object.values(completeCaseType.cols).filter(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n return colType.includes(refCol?.col_type);\n });\n }\n\n public static getDimLabel(completeCaseType: CaseDbCompleteCaseType, dimId: string): string {\n const dim = completeCaseType.dims[dimId];\n return dim.code;\n }\n\n public static getDims(completeCaseType: CaseDbCompleteCaseType, dimTypes?: CaseDbDimType[]): CaseDbDim[] {\n const dims = Object.values(completeCaseType.ordered_dim_ids).map(x => completeCaseType.dims[x]);\n if (!dimTypes?.length) {\n return dims;\n }\n return dims.filter(dim => {\n const refDim = completeCaseType.ref_dims[dim.ref_dim_id];\n return dimTypes.includes(refDim.dim_type);\n });\n }\n\n public static getInitialVisibleColIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const visibleColumnIds: string[] = [];\n\n completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).forEach((dim) => {\n const refDims = completeCaseType.ref_dims[dim.ref_dim_id];\n\n const cols = completeCaseType.ordered_col_ids_by_dim[dim.id].map(id => completeCaseType.cols[id]);\n const refCols = cols.map(col => completeCaseType.ref_cols[col.ref_col_id]);\n\n if (refDims.dim_type === CaseDbDimType.GEO) {\n visibleColumnIds.push(CaseTypeUtil.getPreferredGEOCol(cols).id);\n } else if (refDims.dim_type === CaseDbDimType.TIME || refDims.dim_type === CaseDbDimType.NUMBER || CaseTypeUtil.isGeneticDistanceDim(refDims, refCols)) {\n visibleColumnIds.push(CaseTypeUtil.getPreferredColInDimHavingHighestRank(cols, completeCaseType).id);\n } else {\n visibleColumnIds.push(...cols.filter(cc => {\n const refCol = completeCaseType.ref_cols[cc.ref_col_id];\n const hiddenColTypes: CaseDbColType[] = [CaseDbColType.GENETIC_READS, CaseDbColType.GENETIC_SEQUENCE];\n return !hiddenColTypes.includes(refCol.col_type);\n }).map(c => c.id));\n }\n });\n\n return visibleColumnIds;\n }\n\n public static getPreferredColInDimHavingHighestRank(cols: CaseDbCol[], completeCaseType: CaseDbCompleteCaseType): CaseDbCol {\n return cols.find(col => completeCaseType.ref_cols[col.ref_col_id].rank === 1) ?? cols?.[0];\n }\n\n public static getPreferredGEOCol(cols: CaseDbCol[]): CaseDbCol {\n return cols[Math.min(cols.length - 1, Math.floor((cols.length - 1) / 2))];\n }\n\n\n public static getRegionSetIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const regionSetIds: string[] = [];\n const cols = CaseTypeUtil.getCols(completeCaseType);\n cols.forEach(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n if (refCol.region_set_id && !regionSetIds.includes(refCol.region_set_id)) {\n regionSetIds.push(refCol.region_set_id);\n }\n });\n return regionSetIds;\n }\n\n\n public static getWritableColIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const writableColIds: string[] = [];\n Object.values(completeCaseType.case_type_access_abacs).forEach((abac) => {\n writableColIds.push(...abac.write_col_ids);\n });\n return uniq(writableColIds);\n }\n\n\n public static getWritableImportExportColIds(completeCaseType: CaseDbCompleteCaseType): string[] {\n const writableColIds = CaseTypeUtil.getWritableColIds(completeCaseType);\n return Object.keys(completeCaseType.cols).filter(colId => {\n if (!writableColIds.includes(colId)) {\n return false;\n }\n const col = completeCaseType.cols[colId];\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n if (([CaseDbColType.GENETIC_DISTANCE, CaseDbColType.GENETIC_PROFILE, CaseDbColType.GENETIC_READS, CaseDbColType.GENETIC_SEQUENCE] as CaseDbColType[]).includes(refCol.col_type)) {\n return false;\n }\n return true;\n });\n }\n\n public static isGeneticDistanceDim(refDim: CaseDbRefDim, refCols: CaseDbRefCol[]): boolean {\n return refDim.dim_type === CaseDbDimType.OTHER && refCols.find(refCol => refCol.col_type === CaseDbColType.GENETIC_DISTANCE) !== undefined;\n }\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
@@ -9,9 +9,9 @@ import { CASEDB_QUERY_KEY as f } from "../../constants/query.js";
9
9
  import { DataService as p } from "../../classes/services/DataService/index.js";
10
10
  import { t as m } from "i18next";
11
11
  import { CaseDbCaseApi as h, CaseDbColType as g } from "@gen-epix/api-casedb";
12
- import { QueryClientService as _ } from "@gen-epix/ui/classes/services/QueryClientService";
13
- import { ConfigService as v } from "@gen-epix/ui/classes/services/ConfigService";
14
- import { NotificationService as y } from "@gen-epix/ui/classes/services/NotificationService";
12
+ import { QueryClientService as _ } from "@gen-epix/ui-client-common/classes/services/QueryClientService";
13
+ import { ConfigService as v } from "@gen-epix/ui-client-common/classes/services/ConfigService";
14
+ import { NotificationService as y } from "@gen-epix/ui-client-common/classes/services/NotificationService";
15
15
  //#region ../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseDifference.js
16
16
  var b = /* @__PURE__ */ t(((e, t) => {
17
17
  var c = n(), l = i(), u = a(), d = o(), f = s(), p = r(), m = 200;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseDifference.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/difference.js","../../../src/utils/CaseUtil/CaseUtil.ts"],"sourcesContent":["var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nmodule.exports = difference;\n","import { t } from 'i18next';\nimport difference from 'lodash/difference';\nimport intersection from 'lodash/intersection';\nimport type {\n CaseDbCaseDataCollectionLink,\n CaseDbCol,\n CaseDbCompleteCaseType,\n CaseDbRefCol,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbColType,\n} from '@gen-epix/api-casedb';\nimport { ConfigService } from '@gen-epix/ui/classes/services/ConfigService';\nimport { NotificationService } from '@gen-epix/ui/classes/services/NotificationService';\nimport { QueryClientService } from '@gen-epix/ui/classes/services/QueryClientService';\n\nimport { DataService } from '../../classes/services/DataService';\nimport type { CaseTypeRowValue } from '../../models/caseDb';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport type { CaseDbConfig } from '../../models/config';\n\nexport class CaseUtil {\n public static async applyDataCollectionLinks(kwArgs: { caseIds?: string[]; caseSetDataCollectionIds: string[]; caseSetId?: string; caseTypeId: string }): Promise<void> {\n const { caseIds, caseSetDataCollectionIds, caseSetId, caseTypeId } = kwArgs;\n\n if (!caseSetId && !caseIds) {\n throw new Error('Either caseSetId or caseIds must be provided');\n }\n\n const notificationKey = NotificationService.getInstance().showNotification({\n isLoading: true,\n message: t('Applying sharing to the cases'),\n severity: 'info',\n });\n\n try {\n if (!caseSetDataCollectionIds.length) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has not been applied to the cases because the event is not shared.'), 'info');\n }\n\n let normalizedCaseIds: string[] = [];\n if (caseIds) {\n normalizedCaseIds = caseIds;\n } else {\n normalizedCaseIds = (await CaseDbCaseApi.getInstance().caseSetMembersPostQuery({\n invert: false,\n key: 'case_set_id',\n members: [caseSetId],\n type: 'UUID_SET',\n }, null, null)).data.map(x => x.case_id);\n }\n\n if (!normalizedCaseIds.length) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has not been applied to the cases because there are no cases in the event.'), 'info');\n }\n\n const dataLinksToAdd: CaseDbCaseDataCollectionLink[] = [];\n const caseRights = (await CaseDbCaseApi.getInstance().retrieveCaseRights({\n case_ids: normalizedCaseIds,\n case_type_id: caseTypeId,\n })).data;\n\n caseRights.forEach((caseRight) => {\n const caseId = caseRight.case_id;\n const caseMissingDataCollectionIds = difference(caseSetDataCollectionIds, caseRight.shared_in_data_collection_ids);\n if (!caseMissingDataCollectionIds.length) {\n return;\n }\n\n (caseRight.is_full_access ? caseMissingDataCollectionIds : intersection(caseRight.add_data_collection_ids, caseSetDataCollectionIds)).forEach((dataCollectionId) => {\n const dataLink: CaseDbCaseDataCollectionLink = {\n case_id: caseId,\n data_collection_id: dataCollectionId,\n };\n dataLinksToAdd.push(dataLink);\n });\n });\n\n if (!dataLinksToAdd.length) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has not been applied to the cases because sharing has already been applied.'), 'info');\n return;\n }\n\n // Batch add the data collection links\n await CaseDbCaseApi.getInstance().caseDataCollectionLinksPostSome(dataLinksToAdd);\n await QueryClientService.getInstance().invalidateQueryKeys(QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_DATA_COLLECTION_LINKS], true));\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has been applied to the cases'), 'success');\n\n } catch (_error) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing could not be applied to selected cases due to an error.'), 'error');\n }\n }\n\n public static getMappedValue(raw: string, col: CaseDbCol, completeCaseType: CaseDbCompleteCaseType, machineReadable = false): CaseTypeRowValue {\n if (!raw) {\n return CaseUtil.getMissingRowValue(raw, machineReadable);\n }\n\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n\n if (refCol.col_type === CaseDbColType.ORGANIZATION) {\n return CaseUtil.getOrganizationMappedValue(raw);\n } else if (refCol.region_set_id) {\n return CaseUtil.getRegionMappedValue(refCol, raw);\n } else if (refCol.concept_set_id) {\n return CaseUtil.getConceptMappedValue(raw);\n }\n return CaseUtil.getMissingRowValue(raw, machineReadable);\n }\n\n public static getMissingRowValue(raw: string, machineReadable = true): CaseTypeRowValue {\n const { DATA_MISSING_CHARACTER } = ConfigService.getInstance<CaseDbConfig>().config.epi;\n const dataMissingCharacter = machineReadable ? '' : DATA_MISSING_CHARACTER;\n\n return {\n full: t('{{dataMissingCharacter}} (missing)', { dataMissingCharacter }),\n isMissing: true,\n long: dataMissingCharacter,\n raw,\n short: dataMissingCharacter,\n };\n }\n\n public static getRowValue(content: { [key: string]: string }, col: CaseDbCol, completeCaseType: CaseDbCompleteCaseType, machineReadable = false): CaseTypeRowValue {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n const hasMappedValue = refCol.col_type === CaseDbColType.ORGANIZATION || refCol.region_set_id || refCol.concept_set_id;\n if (hasMappedValue) {\n return CaseUtil.getMappedValue(content[col.id], col, completeCaseType, machineReadable);\n }\n\n const { DATA_MISSING_CHARACTER } = ConfigService.getInstance<CaseDbConfig>().config.epi;\n const dataMissingCharacter = machineReadable ? '' : DATA_MISSING_CHARACTER;\n\n const rowValue: CaseTypeRowValue = {\n full: content[col.id] ?? t('{{dataMissingCharacter}} (missing)', { dataMissingCharacter }),\n isMissing: !content[col.id],\n long: content[col.id] ?? dataMissingCharacter,\n raw: content?.[col.id],\n short: content[col.id] ?? dataMissingCharacter,\n };\n return rowValue;\n }\n\n private static getConceptMappedValue(raw: string): CaseTypeRowValue {\n const concept = DataService.getInstance().data.conceptsById?.[raw];\n if (!concept) {\n return CaseUtil.getMissingRowValue(raw);\n }\n return {\n full: `${concept.code} (${concept.name})`,\n isMissing: false,\n long: concept.name,\n raw,\n short: concept.code,\n };\n }\n\n private static getOrganizationMappedValue(raw: string): CaseTypeRowValue {\n const organization = DataService.getInstance().data?.organizationsById?.[raw];\n if (!organization) {\n return CaseUtil.getMissingRowValue(raw);\n }\n return {\n full: organization.name,\n isMissing: false,\n long: organization.name,\n raw,\n short: organization.name,\n };\n }\n\n private static getRegionMappedValue(refCol: CaseDbRefCol, raw: string): CaseTypeRowValue {\n const regionSet = DataService.getInstance().data.regionSets[refCol.region_set_id];\n const region = DataService.getInstance().data.regionsById?.[raw];\n if (!region) {\n return CaseUtil.getMissingRowValue(raw);\n }\n return {\n full: regionSet.region_code_as_label ? region.code : region.name,\n isMissing: false,\n long: regionSet.region_code_as_label ? region.code : region.name,\n raw,\n short: regionSet.region_code_as_label ? region.code : region.name,\n };\n }\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseDifference.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/difference.js","../../../src/utils/CaseUtil/CaseUtil.ts"],"sourcesContent":["var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseDifference;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nmodule.exports = difference;\n","import { t } from 'i18next';\nimport difference from 'lodash/difference';\nimport intersection from 'lodash/intersection';\nimport type {\n CaseDbCaseDataCollectionLink,\n CaseDbCol,\n CaseDbCompleteCaseType,\n CaseDbRefCol,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbColType,\n} from '@gen-epix/api-casedb';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { NotificationService } from '@gen-epix/ui-client-common/classes/services/NotificationService';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\n\nimport { DataService } from '../../classes/services/DataService';\nimport type { CaseTypeRowValue } from '../../models/caseDb';\nimport { CASEDB_QUERY_KEY } from '../../constants/query';\nimport type { CaseDbConfig } from '../../models/config';\n\nexport class CaseUtil {\n public static async applyDataCollectionLinks(kwArgs: { caseIds?: string[]; caseSetDataCollectionIds: string[]; caseSetId?: string; caseTypeId: string }): Promise<void> {\n const { caseIds, caseSetDataCollectionIds, caseSetId, caseTypeId } = kwArgs;\n\n if (!caseSetId && !caseIds) {\n throw new Error('Either caseSetId or caseIds must be provided');\n }\n\n const notificationKey = NotificationService.getInstance().showNotification({\n isLoading: true,\n message: t('Applying sharing to the cases'),\n severity: 'info',\n });\n\n try {\n if (!caseSetDataCollectionIds.length) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has not been applied to the cases because the event is not shared.'), 'info');\n }\n\n let normalizedCaseIds: string[] = [];\n if (caseIds) {\n normalizedCaseIds = caseIds;\n } else {\n normalizedCaseIds = (await CaseDbCaseApi.getInstance().caseSetMembersPostQuery({\n invert: false,\n key: 'case_set_id',\n members: [caseSetId],\n type: 'UUID_SET',\n }, null, null)).data.map(x => x.case_id);\n }\n\n if (!normalizedCaseIds.length) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has not been applied to the cases because there are no cases in the event.'), 'info');\n }\n\n const dataLinksToAdd: CaseDbCaseDataCollectionLink[] = [];\n const caseRights = (await CaseDbCaseApi.getInstance().retrieveCaseRights({\n case_ids: normalizedCaseIds,\n case_type_id: caseTypeId,\n })).data;\n\n caseRights.forEach((caseRight) => {\n const caseId = caseRight.case_id;\n const caseMissingDataCollectionIds = difference(caseSetDataCollectionIds, caseRight.shared_in_data_collection_ids);\n if (!caseMissingDataCollectionIds.length) {\n return;\n }\n\n (caseRight.is_full_access ? caseMissingDataCollectionIds : intersection(caseRight.add_data_collection_ids, caseSetDataCollectionIds)).forEach((dataCollectionId) => {\n const dataLink: CaseDbCaseDataCollectionLink = {\n case_id: caseId,\n data_collection_id: dataCollectionId,\n };\n dataLinksToAdd.push(dataLink);\n });\n });\n\n if (!dataLinksToAdd.length) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has not been applied to the cases because sharing has already been applied.'), 'info');\n return;\n }\n\n // Batch add the data collection links\n await CaseDbCaseApi.getInstance().caseDataCollectionLinksPostSome(dataLinksToAdd);\n await QueryClientService.getInstance().invalidateQueryKeys(QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_DATA_COLLECTION_LINKS], true));\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing has been applied to the cases'), 'success');\n\n } catch (_error) {\n NotificationService.getInstance().fulfillNotification(notificationKey, t('Sharing could not be applied to selected cases due to an error.'), 'error');\n }\n }\n\n public static getMappedValue(raw: string, col: CaseDbCol, completeCaseType: CaseDbCompleteCaseType, machineReadable = false): CaseTypeRowValue {\n if (!raw) {\n return CaseUtil.getMissingRowValue(raw, machineReadable);\n }\n\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n\n if (refCol.col_type === CaseDbColType.ORGANIZATION) {\n return CaseUtil.getOrganizationMappedValue(raw);\n } else if (refCol.region_set_id) {\n return CaseUtil.getRegionMappedValue(refCol, raw);\n } else if (refCol.concept_set_id) {\n return CaseUtil.getConceptMappedValue(raw);\n }\n return CaseUtil.getMissingRowValue(raw, machineReadable);\n }\n\n public static getMissingRowValue(raw: string, machineReadable = true): CaseTypeRowValue {\n const { DATA_MISSING_CHARACTER } = ConfigService.getInstance<CaseDbConfig>().config.epi;\n const dataMissingCharacter = machineReadable ? '' : DATA_MISSING_CHARACTER;\n\n return {\n full: t('{{dataMissingCharacter}} (missing)', { dataMissingCharacter }),\n isMissing: true,\n long: dataMissingCharacter,\n raw,\n short: dataMissingCharacter,\n };\n }\n\n public static getRowValue(content: { [key: string]: string }, col: CaseDbCol, completeCaseType: CaseDbCompleteCaseType, machineReadable = false): CaseTypeRowValue {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n const hasMappedValue = refCol.col_type === CaseDbColType.ORGANIZATION || refCol.region_set_id || refCol.concept_set_id;\n if (hasMappedValue) {\n return CaseUtil.getMappedValue(content[col.id], col, completeCaseType, machineReadable);\n }\n\n const { DATA_MISSING_CHARACTER } = ConfigService.getInstance<CaseDbConfig>().config.epi;\n const dataMissingCharacter = machineReadable ? '' : DATA_MISSING_CHARACTER;\n\n const rowValue: CaseTypeRowValue = {\n full: content[col.id] ?? t('{{dataMissingCharacter}} (missing)', { dataMissingCharacter }),\n isMissing: !content[col.id],\n long: content[col.id] ?? dataMissingCharacter,\n raw: content?.[col.id],\n short: content[col.id] ?? dataMissingCharacter,\n };\n return rowValue;\n }\n\n private static getConceptMappedValue(raw: string): CaseTypeRowValue {\n const concept = DataService.getInstance().data.conceptsById?.[raw];\n if (!concept) {\n return CaseUtil.getMissingRowValue(raw);\n }\n return {\n full: `${concept.code} (${concept.name})`,\n isMissing: false,\n long: concept.name,\n raw,\n short: concept.code,\n };\n }\n\n private static getOrganizationMappedValue(raw: string): CaseTypeRowValue {\n const organization = DataService.getInstance().data?.organizationsById?.[raw];\n if (!organization) {\n return CaseUtil.getMissingRowValue(raw);\n }\n return {\n full: organization.name,\n isMissing: false,\n long: organization.name,\n raw,\n short: organization.name,\n };\n }\n\n private static getRegionMappedValue(refCol: CaseDbRefCol, raw: string): CaseTypeRowValue {\n const regionSet = DataService.getInstance().data.regionSets[refCol.region_set_id];\n const region = DataService.getInstance().data.regionsById?.[raw];\n if (!region) {\n return CaseUtil.getMissingRowValue(raw);\n }\n return {\n full: regionSet.region_code_as_label ? region.code : region.name,\n isMissing: false,\n long: regionSet.region_code_as_label ? region.code : region.name,\n raw,\n short: regionSet.region_code_as_label ? region.code : region.name,\n };\n }\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { h as e, p as t } from "../../_chunks/_MapCache.js";
2
2
  import { t as n } from "../../_chunks/_baseIteratee.js";
3
3
  import { DASHBOARD_ARRANGEMENT_ORIENTATION as r, WIDGET_CONSTRAINT_CARDINAL_DIRECTION as i } from "../../models/dashboard.js";
4
- import { ConfigService as a } from "@gen-epix/ui/classes/services/ConfigService";
4
+ import { ConfigService as a } from "@gen-epix/ui-client-common/classes/services/ConfigService";
5
5
  //#region ../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseSum.js
6
6
  var o = /* @__PURE__ */ t(((e, t) => {
7
7
  function n(e, t) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseSum.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/sumBy.js","../../../src/utils/DashboardUtil/DashboardUtil.ts"],"sourcesContent":["/**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\nfunction baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n}\n\nmodule.exports = baseSum;\n","var baseIteratee = require('./_baseIteratee'),\n baseSum = require('./_baseSum');\n\n/**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\nfunction sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, baseIteratee(iteratee, 2))\n : 0;\n}\n\nmodule.exports = sumBy;\n","import { ConfigService } from '@gen-epix/ui/classes/services/ConfigService';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport type { FieldValues } from 'react-hook-form';\nimport sumBy from 'lodash/sumBy';\n\nimport {\n DASHBOARD_ARRANGEMENT_ORIENTATION,\n WIDGET_CONSTRAINT_CARDINAL_DIRECTION,\n} from '../../models/dashboard';\nimport type {\n DashboardArrangement,\n DashboardArrangementCell,\n DashboardArrangementConfig,\n DashboardArrangementWidgetAssignments,\n WidgetDataBase,\n WidgetsConfig,\n} from '../../models/dashboard';\nimport type { CaseDbConfig } from '../../models/config';\n\nexport type ArrangementGroupInfo = {\n groupId: string;\n orientation: 'horizontal' | 'vertical';\n};\n\nexport class DashboardUtil {\n public static readonly dashboardLayoutStorageKey = 'GENEPIX-EpiDashboard-Layout-v1.3';\n\n public static createDashboardArrangementConfigInitialState(): DashboardArrangementConfig {\n const defaultArrangementKey = ConfigService.getInstance<CaseDbConfig>().config.dashboard.DEFAULT_ARRANGEMENT_KEY;\n\n return {\n arrangementKey: defaultArrangementKey,\n arrangementWidgetAssignments: ConfigService.getInstance<CaseDbConfig>().config.dashboard.DEFAULT_WIDGET_ASSIGNMENTS[defaultArrangementKey],\n };\n }\n\n\n public static getAdjacentZones(\n arrangement: DashboardArrangement,\n zoneName: string,\n direction: WIDGET_CONSTRAINT_CARDINAL_DIRECTION,\n ): string[] {\n const adjacencyMap: Record<string, Partial<Record<WIDGET_CONSTRAINT_CARDINAL_DIRECTION, string[]>>> = {};\n\n const addAdjacency = (zone: string, dir: WIDGET_CONSTRAINT_CARDINAL_DIRECTION, adjacent: string[]) => {\n adjacencyMap[zone] ??= {};\n adjacencyMap[zone][dir] ??= [];\n adjacencyMap[zone][dir].push(...adjacent);\n };\n\n const traverse = (arr: DashboardArrangement) => {\n const isHorizontal = arr.orientation === DASHBOARD_ARRANGEMENT_ORIENTATION.HORIZONTAL;\n arr.cells.forEach((cell, index) => {\n if (index > 0) {\n const prevCell = arr.cells[index - 1];\n if (isHorizontal) {\n const prevEast = DashboardUtil.getBoundaryLeafZones(prevCell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.EAST);\n const currWest = DashboardUtil.getBoundaryLeafZones(cell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.WEST);\n prevEast.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.EAST, currWest));\n currWest.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.WEST, prevEast));\n } else {\n const prevSouth = DashboardUtil.getBoundaryLeafZones(prevCell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.SOUTH);\n const currNorth = DashboardUtil.getBoundaryLeafZones(cell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.NORTH);\n prevSouth.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.SOUTH, currNorth));\n currNorth.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.NORTH, prevSouth));\n }\n }\n if ('cells' in cell) {\n traverse(cell);\n }\n });\n };\n\n traverse(arrangement);\n return adjacencyMap[zoneName]?.[direction] ?? [];\n }\n\n public static getArrangementGroupInfos(arrangement: DashboardArrangement, storagePrefix: string, path = 'root'): ArrangementGroupInfo[] {\n const result: ArrangementGroupInfo[] = [{\n groupId: `${storagePrefix}-${path}`,\n orientation: arrangement.orientation,\n }];\n arrangement.cells.forEach((cell, index) => {\n if ('cells' in cell) {\n result.push(...DashboardUtil.getArrangementGroupInfos(cell, storagePrefix, `${path}-${index}`));\n }\n });\n return result;\n }\n\n public static getArrangementWidgetAssignments(arrangement: DashboardArrangement, arrangementWidgetAssignments?: { [key: string]: string }): { [key: string]: string } {\n // traverse the arrangement and create an object with all zones set to empty string\n const emptyAssignments: { [key: string]: string } = {};\n const traverseArrangement = (arr: DashboardArrangement) => {\n arr.cells.forEach((item) => {\n if ('name' in item) {\n emptyAssignments[item.name] = arrangementWidgetAssignments?.[item.name] || null;\n } else {\n traverseArrangement(item);\n }\n });\n };\n traverseArrangement(arrangement);\n return emptyAssignments;\n }\n\n public static getAvailableWidgets(\n arrangementConfig: DashboardArrangementConfig,\n zoneName: string,\n widgetsConfig: WidgetsConfig<FieldValues, WidgetDataBase, WidgetDataBase>,\n ): string[] {\n const assignments = DashboardUtil.getArrangementWidgetAssignments(\n DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey),\n arrangementConfig.arrangementWidgetAssignments,\n );\n const assignedWidgetNames = new Set(\n Object.entries(assignments)\n .filter(([zone]) => zone !== zoneName)\n .map(([, widgetName]) => widgetName)\n .filter(Boolean),\n );\n return Object.keys(widgetsConfig).filter(widgetName => {\n if (assignedWidgetNames.has(widgetName)) {\n return false;\n }\n const constraints = widgetsConfig[widgetName].constraints ?? [];\n const arrangement = DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey);\n return constraints.every((constraint) => {\n if (constraint.require_adjacent) {\n const { direction, widgetName: requiredWidget } = constraint.require_adjacent;\n const adjacentZones = DashboardUtil.getAdjacentZones(arrangement, zoneName, direction);\n return adjacentZones.some(zone => assignments[zone] === requiredWidget);\n }\n if (constraint.require_adjacent_direct_sibling) {\n const { widgetName: requiredWidget } = constraint.require_adjacent_direct_sibling;\n const siblingZones = DashboardUtil.getSiblingZonesInSameCellsArray(arrangement, zoneName);\n return siblingZones.some(zone => assignments[zone] === requiredWidget);\n }\n return true;\n });\n });\n }\n\n public static getCaseCount(cases: CaseDbCase[]): number {\n // when count is null, 1 should be assumed\n return sumBy(cases, (row) => (row.count ?? 1));\n }\n\n public static getEnabledWidgets(arrangementConfig: DashboardArrangementConfig): string[] {\n const arrangementWidgetAssignments = DashboardUtil.getArrangementWidgetAssignments(DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey), arrangementConfig.arrangementWidgetAssignments);\n return Object.keys(arrangementWidgetAssignments).filter(widgetName => arrangementWidgetAssignments[widgetName]);\n }\n\n public static getSelectedRows(cases: CaseDbCase[], selectedIds: string[]): CaseDbCase[] {\n return cases.filter(row => selectedIds.includes(row.id));\n }\n\n public static isArrangementWidgetAssignmentsValid(\n assignments: DashboardArrangementWidgetAssignments,\n widgets: WidgetsConfig<FieldValues, WidgetDataBase, WidgetDataBase>,\n ): boolean {\n return Object.values(assignments).every((widgetName) => !widgetName || widgetName in widgets);\n }\n\n public static isSingleWidget(arrangementConfig: DashboardArrangementConfig, widgetName: string): boolean {\n const arrangementWidgetAssignments = DashboardUtil.getArrangementWidgetAssignments(DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey), arrangementConfig.arrangementWidgetAssignments);\n return arrangementWidgetAssignments?.[widgetName] && Object.keys(arrangementWidgetAssignments).length === 1;\n }\n\n public static removeInvalidWidgetAssignments(\n config: DashboardArrangementConfig,\n widgetsConfig: WidgetsConfig<FieldValues, WidgetDataBase, WidgetDataBase>,\n ): DashboardArrangementConfig {\n let updatedConfig = config;\n let changed = true;\n while (changed) {\n changed = false;\n const assignments = { ...updatedConfig.arrangementWidgetAssignments };\n for (const [zoneName, widgetName] of Object.entries(assignments)) {\n if (!widgetName) {\n continue;\n }\n const availableWidgets = DashboardUtil.getAvailableWidgets(updatedConfig, zoneName, widgetsConfig);\n if (!availableWidgets.includes(widgetName)) {\n\n assignments[zoneName] = null;\n changed = true;\n }\n }\n if (changed) {\n updatedConfig = { ...updatedConfig, arrangementWidgetAssignments: assignments };\n }\n }\n return updatedConfig;\n }\n\n public static validateAndMigrateArrangementConfig(config: DashboardArrangementConfig): DashboardArrangementConfig {\n const dashboardConfig = ConfigService.getInstance<CaseDbConfig>().config.dashboard;\n let result = config;\n\n if (!result.arrangementKey || !(result.arrangementKey in dashboardConfig.ARRANGEMENT_OPTIONS)) {\n result = { ...result, arrangementKey: dashboardConfig.DEFAULT_ARRANGEMENT_KEY };\n }\n\n if (!DashboardUtil.isArrangementWidgetAssignmentsValid(result.arrangementWidgetAssignments, dashboardConfig.WIDGETS)) {\n result = {\n ...result,\n arrangementWidgetAssignments: dashboardConfig.DEFAULT_WIDGET_ASSIGNMENTS[result.arrangementKey]\n ?? dashboardConfig.DEFAULT_WIDGET_ASSIGNMENTS[dashboardConfig.DEFAULT_ARRANGEMENT_KEY],\n };\n }\n\n return result;\n }\n\n private static getArrangementByKey(arrangementKey: string): DashboardArrangement {\n return ConfigService.getInstance<CaseDbConfig>().config.dashboard.ARRANGEMENT_OPTIONS[arrangementKey];\n }\n\n private static getBoundaryLeafZones(\n cell: DashboardArrangement | DashboardArrangementCell,\n direction: WIDGET_CONSTRAINT_CARDINAL_DIRECTION,\n ): string[] {\n if ('name' in cell) {\n return [cell.name];\n }\n const { cells, orientation } = cell;\n if (cells.length === 0) {\n return [];\n }\n const isHorizontal = orientation === DASHBOARD_ARRANGEMENT_ORIENTATION.HORIZONTAL;\n if (direction === WIDGET_CONSTRAINT_CARDINAL_DIRECTION.EAST) {\n return isHorizontal\n ? DashboardUtil.getBoundaryLeafZones(cells[cells.length - 1], direction)\n : cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction));\n }\n if (direction === WIDGET_CONSTRAINT_CARDINAL_DIRECTION.WEST) {\n return isHorizontal\n ? DashboardUtil.getBoundaryLeafZones(cells[0], direction)\n : cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction));\n }\n if (direction === WIDGET_CONSTRAINT_CARDINAL_DIRECTION.SOUTH) {\n return isHorizontal\n ? cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction))\n : DashboardUtil.getBoundaryLeafZones(cells[cells.length - 1], direction);\n }\n // NORTH\n return isHorizontal\n ? cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction))\n : DashboardUtil.getBoundaryLeafZones(cells[0], direction);\n }\n\n private static getSiblingZonesInSameCellsArray(\n arrangement: DashboardArrangement,\n zoneName: string,\n ): string[] {\n const search = (arr: DashboardArrangement): null | string[] => {\n const directLeafNames = arr.cells\n .filter((cell): cell is DashboardArrangementCell => 'name' in cell)\n .map(cell => cell.name);\n if (directLeafNames.includes(zoneName)) {\n return directLeafNames.filter(name => name !== zoneName);\n }\n for (const cell of arr.cells) {\n if ('cells' in cell) {\n const result = search(cell);\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n };\n return search(arrangement) ?? [];\n }\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseSum.js","../../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/sumBy.js","../../../src/utils/DashboardUtil/DashboardUtil.ts"],"sourcesContent":["/**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\nfunction baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n}\n\nmodule.exports = baseSum;\n","var baseIteratee = require('./_baseIteratee'),\n baseSum = require('./_baseSum');\n\n/**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\nfunction sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, baseIteratee(iteratee, 2))\n : 0;\n}\n\nmodule.exports = sumBy;\n","import { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport type { FieldValues } from 'react-hook-form';\nimport sumBy from 'lodash/sumBy';\n\nimport {\n DASHBOARD_ARRANGEMENT_ORIENTATION,\n WIDGET_CONSTRAINT_CARDINAL_DIRECTION,\n} from '../../models/dashboard';\nimport type {\n DashboardArrangement,\n DashboardArrangementCell,\n DashboardArrangementConfig,\n DashboardArrangementWidgetAssignments,\n WidgetDataBase,\n WidgetsConfig,\n} from '../../models/dashboard';\nimport type { CaseDbConfig } from '../../models/config';\n\nexport type ArrangementGroupInfo = {\n groupId: string;\n orientation: 'horizontal' | 'vertical';\n};\n\nexport class DashboardUtil {\n public static readonly dashboardLayoutStorageKey = 'GENEPIX-EpiDashboard-Layout-v1.3';\n\n public static createDashboardArrangementConfigInitialState(): DashboardArrangementConfig {\n const defaultArrangementKey = ConfigService.getInstance<CaseDbConfig>().config.dashboard.DEFAULT_ARRANGEMENT_KEY;\n\n return {\n arrangementKey: defaultArrangementKey,\n arrangementWidgetAssignments: ConfigService.getInstance<CaseDbConfig>().config.dashboard.DEFAULT_WIDGET_ASSIGNMENTS[defaultArrangementKey],\n };\n }\n\n\n public static getAdjacentZones(\n arrangement: DashboardArrangement,\n zoneName: string,\n direction: WIDGET_CONSTRAINT_CARDINAL_DIRECTION,\n ): string[] {\n const adjacencyMap: Record<string, Partial<Record<WIDGET_CONSTRAINT_CARDINAL_DIRECTION, string[]>>> = {};\n\n const addAdjacency = (zone: string, dir: WIDGET_CONSTRAINT_CARDINAL_DIRECTION, adjacent: string[]) => {\n adjacencyMap[zone] ??= {};\n adjacencyMap[zone][dir] ??= [];\n adjacencyMap[zone][dir].push(...adjacent);\n };\n\n const traverse = (arr: DashboardArrangement) => {\n const isHorizontal = arr.orientation === DASHBOARD_ARRANGEMENT_ORIENTATION.HORIZONTAL;\n arr.cells.forEach((cell, index) => {\n if (index > 0) {\n const prevCell = arr.cells[index - 1];\n if (isHorizontal) {\n const prevEast = DashboardUtil.getBoundaryLeafZones(prevCell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.EAST);\n const currWest = DashboardUtil.getBoundaryLeafZones(cell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.WEST);\n prevEast.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.EAST, currWest));\n currWest.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.WEST, prevEast));\n } else {\n const prevSouth = DashboardUtil.getBoundaryLeafZones(prevCell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.SOUTH);\n const currNorth = DashboardUtil.getBoundaryLeafZones(cell, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.NORTH);\n prevSouth.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.SOUTH, currNorth));\n currNorth.forEach(z => addAdjacency(z, WIDGET_CONSTRAINT_CARDINAL_DIRECTION.NORTH, prevSouth));\n }\n }\n if ('cells' in cell) {\n traverse(cell);\n }\n });\n };\n\n traverse(arrangement);\n return adjacencyMap[zoneName]?.[direction] ?? [];\n }\n\n public static getArrangementGroupInfos(arrangement: DashboardArrangement, storagePrefix: string, path = 'root'): ArrangementGroupInfo[] {\n const result: ArrangementGroupInfo[] = [{\n groupId: `${storagePrefix}-${path}`,\n orientation: arrangement.orientation,\n }];\n arrangement.cells.forEach((cell, index) => {\n if ('cells' in cell) {\n result.push(...DashboardUtil.getArrangementGroupInfos(cell, storagePrefix, `${path}-${index}`));\n }\n });\n return result;\n }\n\n public static getArrangementWidgetAssignments(arrangement: DashboardArrangement, arrangementWidgetAssignments?: { [key: string]: string }): { [key: string]: string } {\n // traverse the arrangement and create an object with all zones set to empty string\n const emptyAssignments: { [key: string]: string } = {};\n const traverseArrangement = (arr: DashboardArrangement) => {\n arr.cells.forEach((item) => {\n if ('name' in item) {\n emptyAssignments[item.name] = arrangementWidgetAssignments?.[item.name] || null;\n } else {\n traverseArrangement(item);\n }\n });\n };\n traverseArrangement(arrangement);\n return emptyAssignments;\n }\n\n public static getAvailableWidgets(\n arrangementConfig: DashboardArrangementConfig,\n zoneName: string,\n widgetsConfig: WidgetsConfig<FieldValues, WidgetDataBase, WidgetDataBase>,\n ): string[] {\n const assignments = DashboardUtil.getArrangementWidgetAssignments(\n DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey),\n arrangementConfig.arrangementWidgetAssignments,\n );\n const assignedWidgetNames = new Set(\n Object.entries(assignments)\n .filter(([zone]) => zone !== zoneName)\n .map(([, widgetName]) => widgetName)\n .filter(Boolean),\n );\n return Object.keys(widgetsConfig).filter(widgetName => {\n if (assignedWidgetNames.has(widgetName)) {\n return false;\n }\n const constraints = widgetsConfig[widgetName].constraints ?? [];\n const arrangement = DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey);\n return constraints.every((constraint) => {\n if (constraint.require_adjacent) {\n const { direction, widgetName: requiredWidget } = constraint.require_adjacent;\n const adjacentZones = DashboardUtil.getAdjacentZones(arrangement, zoneName, direction);\n return adjacentZones.some(zone => assignments[zone] === requiredWidget);\n }\n if (constraint.require_adjacent_direct_sibling) {\n const { widgetName: requiredWidget } = constraint.require_adjacent_direct_sibling;\n const siblingZones = DashboardUtil.getSiblingZonesInSameCellsArray(arrangement, zoneName);\n return siblingZones.some(zone => assignments[zone] === requiredWidget);\n }\n return true;\n });\n });\n }\n\n public static getCaseCount(cases: CaseDbCase[]): number {\n // when count is null, 1 should be assumed\n return sumBy(cases, (row) => (row.count ?? 1));\n }\n\n public static getEnabledWidgets(arrangementConfig: DashboardArrangementConfig): string[] {\n const arrangementWidgetAssignments = DashboardUtil.getArrangementWidgetAssignments(DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey), arrangementConfig.arrangementWidgetAssignments);\n return Object.keys(arrangementWidgetAssignments).filter(widgetName => arrangementWidgetAssignments[widgetName]);\n }\n\n public static getSelectedRows(cases: CaseDbCase[], selectedIds: string[]): CaseDbCase[] {\n return cases.filter(row => selectedIds.includes(row.id));\n }\n\n public static isArrangementWidgetAssignmentsValid(\n assignments: DashboardArrangementWidgetAssignments,\n widgets: WidgetsConfig<FieldValues, WidgetDataBase, WidgetDataBase>,\n ): boolean {\n return Object.values(assignments).every((widgetName) => !widgetName || widgetName in widgets);\n }\n\n public static isSingleWidget(arrangementConfig: DashboardArrangementConfig, widgetName: string): boolean {\n const arrangementWidgetAssignments = DashboardUtil.getArrangementWidgetAssignments(DashboardUtil.getArrangementByKey(arrangementConfig.arrangementKey), arrangementConfig.arrangementWidgetAssignments);\n return arrangementWidgetAssignments?.[widgetName] && Object.keys(arrangementWidgetAssignments).length === 1;\n }\n\n public static removeInvalidWidgetAssignments(\n config: DashboardArrangementConfig,\n widgetsConfig: WidgetsConfig<FieldValues, WidgetDataBase, WidgetDataBase>,\n ): DashboardArrangementConfig {\n let updatedConfig = config;\n let changed = true;\n while (changed) {\n changed = false;\n const assignments = { ...updatedConfig.arrangementWidgetAssignments };\n for (const [zoneName, widgetName] of Object.entries(assignments)) {\n if (!widgetName) {\n continue;\n }\n const availableWidgets = DashboardUtil.getAvailableWidgets(updatedConfig, zoneName, widgetsConfig);\n if (!availableWidgets.includes(widgetName)) {\n\n assignments[zoneName] = null;\n changed = true;\n }\n }\n if (changed) {\n updatedConfig = { ...updatedConfig, arrangementWidgetAssignments: assignments };\n }\n }\n return updatedConfig;\n }\n\n public static validateAndMigrateArrangementConfig(config: DashboardArrangementConfig): DashboardArrangementConfig {\n const dashboardConfig = ConfigService.getInstance<CaseDbConfig>().config.dashboard;\n let result = config;\n\n if (!result.arrangementKey || !(result.arrangementKey in dashboardConfig.ARRANGEMENT_OPTIONS)) {\n result = { ...result, arrangementKey: dashboardConfig.DEFAULT_ARRANGEMENT_KEY };\n }\n\n if (!DashboardUtil.isArrangementWidgetAssignmentsValid(result.arrangementWidgetAssignments, dashboardConfig.WIDGETS)) {\n result = {\n ...result,\n arrangementWidgetAssignments: dashboardConfig.DEFAULT_WIDGET_ASSIGNMENTS[result.arrangementKey]\n ?? dashboardConfig.DEFAULT_WIDGET_ASSIGNMENTS[dashboardConfig.DEFAULT_ARRANGEMENT_KEY],\n };\n }\n\n return result;\n }\n\n private static getArrangementByKey(arrangementKey: string): DashboardArrangement {\n return ConfigService.getInstance<CaseDbConfig>().config.dashboard.ARRANGEMENT_OPTIONS[arrangementKey];\n }\n\n private static getBoundaryLeafZones(\n cell: DashboardArrangement | DashboardArrangementCell,\n direction: WIDGET_CONSTRAINT_CARDINAL_DIRECTION,\n ): string[] {\n if ('name' in cell) {\n return [cell.name];\n }\n const { cells, orientation } = cell;\n if (cells.length === 0) {\n return [];\n }\n const isHorizontal = orientation === DASHBOARD_ARRANGEMENT_ORIENTATION.HORIZONTAL;\n if (direction === WIDGET_CONSTRAINT_CARDINAL_DIRECTION.EAST) {\n return isHorizontal\n ? DashboardUtil.getBoundaryLeafZones(cells[cells.length - 1], direction)\n : cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction));\n }\n if (direction === WIDGET_CONSTRAINT_CARDINAL_DIRECTION.WEST) {\n return isHorizontal\n ? DashboardUtil.getBoundaryLeafZones(cells[0], direction)\n : cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction));\n }\n if (direction === WIDGET_CONSTRAINT_CARDINAL_DIRECTION.SOUTH) {\n return isHorizontal\n ? cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction))\n : DashboardUtil.getBoundaryLeafZones(cells[cells.length - 1], direction);\n }\n // NORTH\n return isHorizontal\n ? cells.flatMap(c => DashboardUtil.getBoundaryLeafZones(c, direction))\n : DashboardUtil.getBoundaryLeafZones(cells[0], direction);\n }\n\n private static getSiblingZonesInSameCellsArray(\n arrangement: DashboardArrangement,\n zoneName: string,\n ): string[] {\n const search = (arr: DashboardArrangement): null | string[] => {\n const directLeafNames = arr.cells\n .filter((cell): cell is DashboardArrangementCell => 'name' in cell)\n .map(cell => cell.name);\n if (directLeafNames.includes(zoneName)) {\n return directLeafNames.filter(name => name !== zoneName);\n }\n for (const cell of arr.cells) {\n if ('cells' in cell) {\n const result = search(cell);\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n };\n return search(arrangement) ?? [];\n }\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/DataSetUtil/DataSetUtil.ts"],"sourcesContent":["import intersection from 'lodash/intersection';\n\nexport class DataSetUtil {\n public static getCategorizedSetMembers(kwArgs: { childMemberIds: string[]; mappedSetMembers: Map<string, string[]>; parentMemberIds: string[]; parentSetId: string }): { categorizedMemberIds: string[]; setIds: string[]; uncategorizedMemberIds: string[] } {\n const { childMemberIds, mappedSetMembers, parentMemberIds, parentSetId } = kwArgs;\n const intersectedMemberIds = intersection(parentMemberIds, childMemberIds);\n let uncategorizedMemberIds: string[] = [];\n const categorizedMemberIds: string[] = [];\n\n const setIds: string[] = [];\n if (intersectedMemberIds.length) {\n if (intersectedMemberIds.length === parentMemberIds.length && intersectedMemberIds.length === childMemberIds.length) {\n // all members are in the parent set and child set, so we can use the parent set id (optimization)\n setIds.push(parentSetId);\n categorizedMemberIds.push(...intersectedMemberIds);\n } else {\n mappedSetMembers.forEach((memberIds, setId) => {\n const setIntersectedMemberIds = intersection(memberIds, intersectedMemberIds);\n if (setIntersectedMemberIds.length === memberIds.length) {\n setIds.push(setId);\n categorizedMemberIds.push(...setIntersectedMemberIds);\n }\n });\n uncategorizedMemberIds = intersectedMemberIds.filter(id => !categorizedMemberIds.includes(id));\n }\n }\n\n // sanitize setIds (remove duplicates, larger sets containing smaller sets)\n const sanitizedSetIds: string[] = [];\n if (setIds.length <= 1) {\n sanitizedSetIds.push(...setIds);\n } else {\n const sortedSetsIdsBySize = Array.from(mappedSetMembers.entries()).filter(([setId]) => setIds.includes(setId)).sort((a, b) => b[1].length - a[1].length).map(x => x[0]);\n setIds.forEach(setId => {\n const setIdIndex = sortedSetsIdsBySize.indexOf(setId);\n for (let i = 0; i < setIdIndex; i++) {\n const otherSetId = sortedSetsIdsBySize[i];\n if (mappedSetMembers.get(otherSetId)?.length && mappedSetMembers.get(setId)?.length) {\n const otherSetMemberIds = mappedSetMembers.get(otherSetId) || [];\n const setMemberIds = mappedSetMembers.get(setId) || [];\n if (intersection(otherSetMemberIds, setMemberIds).length === setMemberIds.length) {\n // other set contains current set, do not add current set\n return;\n }\n }\n }\n sanitizedSetIds.push(setId);\n });\n }\n\n return {\n categorizedMemberIds,\n setIds: sanitizedSetIds,\n uncategorizedMemberIds,\n };\n\n }\n\n public static getMappedSetMembers<T>(kwArgs: { items: T[]; memberProperty: keyof T & string; setProperty: keyof T & string }): Map<string, string[]> {\n const { items, memberProperty, setProperty } = kwArgs;\n const mappedSets = new Map<string, string[]>();\n items.forEach(member => {\n if (!mappedSets.has(member[setProperty] as string)) {\n mappedSets.set(member[setProperty] as string, []);\n }\n mappedSets.get(member[setProperty] as string)?.push(member[memberProperty] as string);\n });\n return mappedSets;\n }\n}\n"],"mappings":";;;mCAEa,IAAb,MAAyB;CACvB,OAAc,yBAAyB,GAAuN;EAC5P,IAAM,EAAE,mBAAgB,qBAAkB,oBAAiB,mBAAgB,GACrE,KAAA,GAAA,EAAA,QAAA,CAAoC,GAAiB,CAAc,GACrE,IAAmC,CAAC,GAClC,IAAiC,CAAC,GAElC,IAAmB,CAAC;EAC1B,AAAI,EAAqB,WACnB,EAAqB,WAAW,EAAgB,UAAU,EAAqB,WAAW,EAAe,UAE3G,EAAO,KAAK,CAAW,GACvB,EAAqB,KAAK,GAAG,CAAoB,MAEjD,EAAiB,SAAS,GAAW,MAAU;GAC7C,IAAM,KAAA,GAAA,EAAA,QAAA,CAAuC,GAAW,CAAoB;GAC5E,AAAI,EAAwB,WAAW,EAAU,WAC/C,EAAO,KAAK,CAAK,GACjB,EAAqB,KAAK,GAAG,CAAuB;EAExD,CAAC,GACD,IAAyB,EAAqB,QAAO,MAAM,CAAC,EAAqB,SAAS,CAAE,CAAC;EAKjG,IAAM,IAA4B,CAAC;EACnC,IAAI,EAAO,UAAU,GACnB,EAAgB,KAAK,GAAG,CAAM;OACzB;GACL,IAAM,IAAsB,MAAM,KAAK,EAAiB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAW,EAAO,SAAS,CAAK,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,KAAI,MAAK,EAAE,EAAE;GACtK,EAAO,SAAQ,MAAS;IACtB,IAAM,IAAa,EAAoB,QAAQ,CAAK;IACpD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAY,KAAK;KACnC,IAAM,IAAa,EAAoB;KACvC,IAAI,EAAiB,IAAI,CAAU,CAAC,EAAE,UAAU,EAAiB,IAAI,CAAK,CAAC,EAAE,QAAQ;MACnF,IAAM,IAAoB,EAAiB,IAAI,CAAU,KAAK,CAAC,GACzD,IAAe,EAAiB,IAAI,CAAK,KAAK,CAAC;MACrD,KAAA,GAAA,EAAA,QAAA,CAAiB,GAAmB,CAAY,CAAC,CAAC,WAAW,EAAa,QAExE;KAEJ;IACF;IACA,EAAgB,KAAK,CAAK;GAC5B,CAAC;EACH;EAEA,OAAO;GACL;GACA,QAAQ;GACR;EACF;CAEF;CAEA,OAAc,oBAAuB,GAAgH;EACnJ,IAAM,EAAE,UAAO,mBAAgB,mBAAgB,GACzC,oBAAa,IAAI,IAAsB;EAO7C,OANA,EAAM,SAAQ,MAAU;GAItB,AAHK,EAAW,IAAI,EAAO,EAAsB,KAC/C,EAAW,IAAI,EAAO,IAAwB,CAAC,CAAC,GAElD,EAAW,IAAI,EAAO,EAAsB,CAAC,EAAE,KAAK,EAAO,EAAyB;EACtF,CAAC,GACM;CACT;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/DataSetUtil/DataSetUtil.ts"],"sourcesContent":["import intersection from 'lodash/intersection';\n\nexport class DataSetUtil {\n public static getCategorizedSetMembers(kwArgs: { childMemberIds: string[]; mappedSetMembers: Map<string, string[]>; parentMemberIds: string[]; parentSetId: string }): { categorizedMemberIds: string[]; setIds: string[]; uncategorizedMemberIds: string[] } {\n const { childMemberIds, mappedSetMembers, parentMemberIds, parentSetId } = kwArgs;\n const intersectedMemberIds = intersection(parentMemberIds, childMemberIds);\n let uncategorizedMemberIds: string[] = [];\n const categorizedMemberIds: string[] = [];\n\n const setIds: string[] = [];\n if (intersectedMemberIds.length) {\n if (intersectedMemberIds.length === parentMemberIds.length && intersectedMemberIds.length === childMemberIds.length) {\n // all members are in the parent set and child set, so we can use the parent set id (optimization)\n setIds.push(parentSetId);\n categorizedMemberIds.push(...intersectedMemberIds);\n } else {\n mappedSetMembers.forEach((memberIds, setId) => {\n const setIntersectedMemberIds = intersection(memberIds, intersectedMemberIds);\n if (setIntersectedMemberIds.length === memberIds.length) {\n setIds.push(setId);\n categorizedMemberIds.push(...setIntersectedMemberIds);\n }\n });\n uncategorizedMemberIds = intersectedMemberIds.filter(id => !categorizedMemberIds.includes(id));\n }\n }\n\n // sanitize setIds (remove duplicates, larger sets containing smaller sets)\n const sanitizedSetIds: string[] = [];\n if (setIds.length <= 1) {\n sanitizedSetIds.push(...setIds);\n } else {\n const sortedSetsIdsBySize = Array.from(mappedSetMembers.entries()).filter(([setId]) => setIds.includes(setId)).sort((a, b) => b[1].length - a[1].length).map(x => x[0]);\n setIds.forEach(setId => {\n const setIdIndex = sortedSetsIdsBySize.indexOf(setId);\n for (let i = 0; i < setIdIndex; i++) {\n const otherSetId = sortedSetsIdsBySize[i];\n if (mappedSetMembers.get(otherSetId)?.length && mappedSetMembers.get(setId)?.length) {\n const otherSetMemberIds = mappedSetMembers.get(otherSetId) || [];\n const setMemberIds = mappedSetMembers.get(setId) || [];\n if (intersection(otherSetMemberIds, setMemberIds).length === setMemberIds.length) {\n // other set contains current set, do not add current set\n return;\n }\n }\n }\n sanitizedSetIds.push(setId);\n });\n }\n\n return {\n categorizedMemberIds,\n setIds: sanitizedSetIds,\n uncategorizedMemberIds,\n };\n\n }\n\n public static getMappedSetMembers<T>(kwArgs: { items: T[]; memberProperty: keyof T & string; setProperty: keyof T & string }): Map<string, string[]> {\n const { items, memberProperty, setProperty } = kwArgs;\n const mappedSets = new Map<string, string[]>();\n items.forEach(member => {\n if (!mappedSets.has(member[setProperty] as string)) {\n mappedSets.set(member[setProperty] as string, []);\n }\n mappedSets.get(member[setProperty] as string)?.push(member[memberProperty] as string);\n });\n return mappedSets;\n }\n}\n"],"mappings":";;;mCAEa,IAAb,MAAyB;CACvB,OAAc,yBAAyB,GAAuN;EAC5P,IAAM,EAAE,mBAAgB,qBAAkB,oBAAiB,mBAAgB,GACrE,KAAA,GAAuB,EAAA,QAAA,CAAa,GAAiB,CAAc,GACrE,IAAmC,CAAC,GAClC,IAAiC,CAAC,GAElC,IAAmB,CAAC;EAC1B,AAAI,EAAqB,WACnB,EAAqB,WAAW,EAAgB,UAAU,EAAqB,WAAW,EAAe,UAE3G,EAAO,KAAK,CAAW,GACvB,EAAqB,KAAK,GAAG,CAAoB,MAEjD,EAAiB,SAAS,GAAW,MAAU;GAC7C,IAAM,KAAA,GAA0B,EAAA,QAAA,CAAa,GAAW,CAAoB;GAC5E,AAAI,EAAwB,WAAW,EAAU,WAC/C,EAAO,KAAK,CAAK,GACjB,EAAqB,KAAK,GAAG,CAAuB;EAExD,CAAC,GACD,IAAyB,EAAqB,QAAO,MAAM,CAAC,EAAqB,SAAS,CAAE,CAAC;EAKjG,IAAM,IAA4B,CAAC;EACnC,IAAI,EAAO,UAAU,GACnB,EAAgB,KAAK,GAAG,CAAM;OACzB;GACL,IAAM,IAAsB,MAAM,KAAK,EAAiB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAW,EAAO,SAAS,CAAK,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,KAAI,MAAK,EAAE,EAAE;GACtK,EAAO,SAAQ,MAAS;IACtB,IAAM,IAAa,EAAoB,QAAQ,CAAK;IACpD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAY,KAAK;KACnC,IAAM,IAAa,EAAoB;KACvC,IAAI,EAAiB,IAAI,CAAU,CAAC,EAAE,UAAU,EAAiB,IAAI,CAAK,CAAC,EAAE,QAAQ;MACnF,IAAM,IAAoB,EAAiB,IAAI,CAAU,KAAK,CAAC,GACzD,IAAe,EAAiB,IAAI,CAAK,KAAK,CAAC;MACrD,KAAA,GAAI,EAAA,QAAA,CAAa,GAAmB,CAAY,CAAC,CAAC,WAAW,EAAa,QAExE;KAEJ;IACF;IACA,EAAgB,KAAK,CAAK;GAC5B,CAAC;EACH;EAEA,OAAO;GACL;GACA,QAAQ;GACR;EACF;CAEF;CAEA,OAAc,oBAAuB,GAAgH;EACnJ,IAAM,EAAE,UAAO,mBAAgB,mBAAgB,GACzC,oBAAa,IAAI,IAAsB;EAO7C,OANA,EAAM,SAAQ,MAAU;GAItB,AAHK,EAAW,IAAI,EAAO,EAAsB,KAC/C,EAAW,IAAI,EAAO,IAAwB,CAAC,CAAC,GAElD,EAAW,IAAI,EAAO,EAAsB,CAAC,EAAE,KAAK,EAAO,EAAyB;EACtF,CAAC,GACM;CACT;AACF"}
@@ -6,7 +6,7 @@ var t = class {
6
6
  return n.endsWith(".gz") || n.endsWith(".gzip") ? e.GZIP : e.NONE;
7
7
  }
8
8
  static getReadableFileSize(e) {
9
- return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(2)} KB` : e < 1024 * 1024 * 1024 ? `${(e / (1024 * 1024)).toFixed(2)} MB` : `${(e / (1024 * 1024 * 1024)).toFixed(2)} GB`;
9
+ return e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(2)} KB` : e < 1073741824 ? `${(e / 1048576).toFixed(2)} MB` : `${(e / 1073741824).toFixed(2)} GB`;
10
10
  }
11
11
  };
12
12
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/FileUtil/FileUtil.ts"],"sourcesContent":["import { CaseDbFileCompression } from '@gen-epix/api-casedb';\n\nexport class FileUtil {\n public static getFileCompressionFromFileName(fileName: string): CaseDbFileCompression {\n const lowerFileName = fileName.toLowerCase();\n if (lowerFileName.endsWith('.gz') || lowerFileName.endsWith('.gzip')) {\n return CaseDbFileCompression.GZIP;\n }\n return CaseDbFileCompression.NONE;\n }\n\n public static getReadableFileSize(sizeInBytes: number): string {\n if (sizeInBytes < 1024) {\n return `${sizeInBytes} B`;\n } else if (sizeInBytes < 1024 * 1024) {\n return `${(sizeInBytes / 1024).toFixed(2)} KB`;\n } else if (sizeInBytes < 1024 * 1024 * 1024) {\n return `${(sizeInBytes / (1024 * 1024)).toFixed(2)} MB`;\n }\n return `${(sizeInBytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n }\n}\n"],"mappings":";;AAEA,IAAa,IAAb,MAAsB;CACpB,OAAc,+BAA+B,GAAyC;EACpF,IAAM,IAAgB,EAAS,YAAY;EAI3C,OAHI,EAAc,SAAS,KAAK,KAAK,EAAc,SAAS,OAAO,IAC1D,EAAsB,OAExB,EAAsB;CAC/B;CAEA,OAAc,oBAAoB,GAA6B;EAQ7D,OAPI,IAAc,OACT,GAAG,EAAY,MACb,IAAc,OAAO,OACvB,IAAI,IAAc,KAAA,CAAM,QAAQ,CAAC,EAAE,OACjC,IAAc,OAAO,OAAO,OAC9B,IAAI,KAAe,OAAO,MAAA,CAAO,QAAQ,CAAC,EAAE,OAE9C,IAAI,KAAe,OAAO,OAAO,MAAA,CAAO,QAAQ,CAAC,EAAE;CAC5D;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/FileUtil/FileUtil.ts"],"sourcesContent":["import { CaseDbFileCompression } from '@gen-epix/api-casedb';\n\nexport class FileUtil {\n public static getFileCompressionFromFileName(fileName: string): CaseDbFileCompression {\n const lowerFileName = fileName.toLowerCase();\n if (lowerFileName.endsWith('.gz') || lowerFileName.endsWith('.gzip')) {\n return CaseDbFileCompression.GZIP;\n }\n return CaseDbFileCompression.NONE;\n }\n\n public static getReadableFileSize(sizeInBytes: number): string {\n if (sizeInBytes < 1024) {\n return `${sizeInBytes} B`;\n } else if (sizeInBytes < 1024 * 1024) {\n return `${(sizeInBytes / 1024).toFixed(2)} KB`;\n } else if (sizeInBytes < 1024 * 1024 * 1024) {\n return `${(sizeInBytes / (1024 * 1024)).toFixed(2)} MB`;\n }\n return `${(sizeInBytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n }\n}\n"],"mappings":";;AAEA,IAAa,IAAb,MAAsB;CACpB,OAAc,+BAA+B,GAAyC;EACpF,IAAM,IAAgB,EAAS,YAAY;EAI3C,OAHI,EAAc,SAAS,KAAK,KAAK,EAAc,SAAS,OAAO,IAC1D,EAAsB,OAExB,EAAsB;CAC/B;CAEA,OAAc,oBAAoB,GAA6B;EAQ7D,OAPI,IAAc,OACT,GAAG,EAAY,MACb,IAAc,UAChB,IAAI,IAAc,KAAA,CAAM,QAAQ,CAAC,EAAE,OACjC,IAAc,aAChB,IAAI,IAAe,QAAA,CAAc,QAAQ,CAAC,EAAE,OAE9C,IAAI,IAAe,WAAA,CAAqB,QAAQ,CAAC,EAAE;CAC5D;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { CaseDbCol, CaseDbCompleteCaseType, CaseDbRefCol } from '@gen-epix/api-casedb';
2
- import { FilterDimension, Filters } from '@gen-epix/ui/models/filter';
3
- import { MultiSelectFilter, TextFilter } from '@gen-epix/ui/classes/filters';
2
+ import { FilterDimension, Filters } from '@gen-epix/ui-client-common/models/filter';
3
+ import { MultiSelectFilter, TextFilter } from '@gen-epix/ui-client-common/classes/filters';
4
4
  export declare class FilterUtil {
5
5
  private static readonly colTypeBlackList;
6
6
  static createCategoricalFilter(col: CaseDbCol, dimId: string, completeCaseType: CaseDbCompleteCaseType): MultiSelectFilter | TextFilter;
@@ -4,7 +4,7 @@ import { STRATIFICATION_MODE as n } from "../../models/stratification.js";
4
4
  import { CaseDbDataUtil as r } from "../CaseDbDataUtil/index.js";
5
5
  import { StratificationUtil as i } from "../StratificationUtil/index.js";
6
6
  import { CaseDbColType as a } from "@gen-epix/api-casedb";
7
- import { ConfigService as o } from "@gen-epix/ui/classes/services/ConfigService";
7
+ import { ConfigService as o } from "@gen-epix/ui-client-common/classes/services/ConfigService";
8
8
  //#region src/utils/HistogramUtil/HistogramUtil.ts
9
9
  var s = [
10
10
  a.INTERVAL,