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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/dist/@types/mui.d.ts +1 -1
  2. package/dist/@types/{ui-casedb.d.ts → ui-client-casedb.d.ts} +1 -1
  3. package/dist/_chunks/AddCasesToEventDialog.js +74 -74
  4. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  5. package/dist/_chunks/CaseContentForm.js +2 -2
  6. package/dist/_chunks/CaseContentForm.js.map +1 -1
  7. package/dist/_chunks/CaseDbDownloadUtil.js +40 -35
  8. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  9. package/dist/_chunks/CaseInfoDialog.js +195 -195
  10. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  11. package/dist/_chunks/CaseSetInfoDialog.js +131 -131
  12. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  13. package/dist/_chunks/CaseTypeInfoDialog.js +63 -61
  14. package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -1
  15. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +6 -6
  16. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  17. package/dist/_chunks/CompletCaseTypeLoader.js +3 -3
  18. package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -1
  19. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +1 -1
  20. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -1
  21. package/dist/_chunks/CustomTabPanel.js.map +1 -1
  22. package/dist/_chunks/Dashboard.js +399 -386
  23. package/dist/_chunks/Dashboard.js.map +1 -1
  24. package/dist/_chunks/DashboardStoreLoader.js +5 -5
  25. package/dist/_chunks/DashboardStoreLoader.js.map +1 -1
  26. package/dist/_chunks/DataCollectionAccessInfo.js +21 -21
  27. package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -1
  28. package/dist/_chunks/EpiCurveUtil.js +4 -4
  29. package/dist/_chunks/EpiCurveUtil.js.map +1 -1
  30. package/dist/_chunks/EpiCurveWidget.js +189 -183
  31. package/dist/_chunks/EpiCurveWidget.js.map +1 -1
  32. package/dist/_chunks/FilterUtil.js +103 -101
  33. package/dist/_chunks/FilterUtil.js.map +1 -1
  34. package/dist/_chunks/FindSimilarCasesDialog.js +16 -16
  35. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  36. package/dist/_chunks/FindSimilarCasesUtil.js +9 -9
  37. package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -1
  38. package/dist/_chunks/HomePageTrends.js +8 -8
  39. package/dist/_chunks/HomePageTrends.js.map +1 -1
  40. package/dist/_chunks/LegendaItem.js +3 -3
  41. package/dist/_chunks/LegendaItem.js.map +1 -1
  42. package/dist/_chunks/LineListWidget.js +23 -21
  43. package/dist/_chunks/LineListWidget.js.map +1 -1
  44. package/dist/_chunks/PanelSeparator.js +374 -384
  45. package/dist/_chunks/PanelSeparator.js.map +1 -1
  46. package/dist/_chunks/Upload.js +222 -207
  47. package/dist/_chunks/Upload.js.map +1 -1
  48. package/dist/_chunks/UploadUtil.js +1970 -841
  49. package/dist/_chunks/UploadUtil.js.map +1 -1
  50. package/dist/_chunks/UserRightsDialog.js +12 -12
  51. package/dist/_chunks/UserRightsDialog.js.map +1 -1
  52. package/dist/_chunks/_MapCache.js +2 -2
  53. package/dist/_chunks/_baseGet.js +1 -1
  54. package/dist/_chunks/_baseGet.js.map +1 -1
  55. package/dist/_chunks/_baseIteratee.js +1 -1
  56. package/dist/_chunks/_baseIteratee.js.map +1 -1
  57. package/dist/_chunks/_setToString.js.map +1 -1
  58. package/dist/_chunks/{chunk-KS7C4IRE.js → chunk-BV7QT456.js} +330 -495
  59. package/dist/_chunks/chunk-BV7QT456.js.map +1 -0
  60. package/dist/_chunks/cloneDeep.js +11 -9
  61. package/dist/_chunks/cloneDeep.js.map +1 -1
  62. package/dist/_chunks/dashboardStore.js +259 -261
  63. package/dist/_chunks/dashboardStore.js.map +1 -1
  64. package/dist/_chunks/esm.js +2900 -2868
  65. package/dist/_chunks/esm.js.map +1 -1
  66. package/dist/_chunks/format.js +8 -8
  67. package/dist/_chunks/format.js.map +1 -1
  68. package/dist/_chunks/index.esm.js +919 -796
  69. package/dist/_chunks/index.esm.js.map +1 -1
  70. package/dist/_chunks/index.module.js +1 -1
  71. package/dist/_chunks/index.module.js.map +1 -1
  72. package/dist/_chunks/protectedTokens.js +79 -81
  73. package/dist/_chunks/protectedTokens.js.map +1 -1
  74. package/dist/_chunks/react.js +1 -1
  75. package/dist/_chunks/react.js.map +1 -1
  76. package/dist/_chunks/round.js +1 -1
  77. package/dist/_chunks/round.js.map +1 -1
  78. package/dist/_chunks/shallow.js +2 -2
  79. package/dist/_chunks/shallow.js.map +1 -1
  80. package/dist/_chunks/sync.js +198 -161
  81. package/dist/_chunks/sync.js.map +1 -1
  82. package/dist/_chunks/toDate.js +1 -1
  83. package/dist/_chunks/toDate.js.map +1 -1
  84. package/dist/_chunks/toString.js +1 -1
  85. package/dist/_chunks/toString.js.map +1 -1
  86. package/dist/_chunks/useUnit.js.map +1 -1
  87. package/dist/_chunks/vanilla.js +1 -1
  88. package/dist/_chunks/vanilla.js.map +1 -1
  89. package/dist/_chunks/yup.js +5 -5
  90. package/dist/_chunks/yup.js.map +1 -1
  91. package/dist/classes/filters/SelectionFilter.d.ts +2 -2
  92. package/dist/classes/filters/TreeFilter.d.ts +2 -2
  93. package/dist/classes/services/DataService/index.js +3 -3
  94. package/dist/classes/services/DataService/index.js.map +1 -1
  95. package/dist/classes/services/EventBusService/EventBusService.d.ts +1 -1
  96. package/dist/classes/services/EventBusService/index.js.map +1 -1
  97. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +1 -1
  98. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -1
  99. package/dist/components/app/CaseDbApp/index.js +8 -5
  100. package/dist/components/app/CaseDbApp/index.js.map +1 -1
  101. package/dist/components/form/fields/ArrangementEditor/index.js +83 -83
  102. package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -1
  103. package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +2 -2
  104. package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +2 -2
  105. package/dist/components/ui/CaseContentFormDialog/index.js +1 -1
  106. package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -1
  107. package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +2 -2
  108. package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +2 -2
  109. package/dist/components/ui/CaseSummary/index.js +1 -1
  110. package/dist/components/ui/CaseSummary/index.js.map +1 -1
  111. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +2 -2
  112. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
  113. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +2 -2
  114. package/dist/components/ui/ContextMenu/index.js.map +1 -1
  115. package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +2 -2
  116. package/dist/components/ui/CreateEventDialog/index.js +9 -9
  117. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  118. package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
  119. package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
  120. package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
  121. package/dist/components/ui/DashboardEditCases/index.js +1 -1
  122. package/dist/components/ui/DashboardEditCases/index.js.map +1 -1
  123. package/dist/components/ui/FileSelector/index.js +46 -46
  124. package/dist/components/ui/FileSelector/index.js.map +1 -1
  125. package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +2 -2
  126. package/dist/components/ui/Grouping/index.js +50 -50
  127. package/dist/components/ui/Grouping/index.js.map +1 -1
  128. package/dist/components/ui/HistogramWidget/index.js +1 -1
  129. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  130. package/dist/components/ui/MapWidget/index.js +7 -3
  131. package/dist/components/ui/MapWidget/index.js.map +1 -1
  132. package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +2 -2
  133. package/dist/components/ui/RemoveCasesFromEventDialog/index.js +6 -6
  134. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  135. package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +2 -2
  136. package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +2 -2
  137. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  138. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  139. package/dist/components/ui/TreeDescription/index.js.map +1 -1
  140. package/dist/components/ui/TreeWidget/index.js +11 -11
  141. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  142. package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +2 -2
  143. package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +2 -2
  144. package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +2 -2
  145. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +2 -2
  146. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +25 -11
  147. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -1
  148. package/dist/components/ui/Warning/index.js.map +1 -1
  149. package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -1
  150. package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
  151. package/dist/components/ui/WidgetMenu/index.js +2 -2
  152. package/dist/components/ui/WidgetMenu/index.js.map +1 -1
  153. package/dist/components/ui/WidgetUnavailable/index.js.map +1 -1
  154. package/dist/constants/query.d.ts +1 -1
  155. package/dist/constants/query.js +1 -1
  156. package/dist/constants/query.js.map +1 -1
  157. package/dist/context/caseAbac/CaseAbacContext.d.ts +1 -1
  158. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +3 -3
  159. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -1
  160. package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +1 -1
  161. package/dist/dataHooks/useCaseRightsQuery/index.js +2 -2
  162. package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -1
  163. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +3 -3
  164. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -1
  165. package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +1 -1
  166. package/dist/dataHooks/useCaseSetRightsQuery/index.js +2 -2
  167. package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -1
  168. package/dist/dataHooks/useCaseSetStatsQuery/index.js +3 -3
  169. package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -1
  170. package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +1 -1
  171. package/dist/dataHooks/useCaseSetStatusesQuery/index.js +3 -3
  172. package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -1
  173. package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +1 -1
  174. package/dist/dataHooks/useCaseSetsQuery/index.js +3 -3
  175. package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -1
  176. package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +1 -1
  177. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +3 -3
  178. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -1
  179. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +1 -1
  180. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -1
  181. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +1 -1
  182. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +2 -2
  183. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -1
  184. package/dist/dataHooks/useCaseTypeSetsQuery/index.js +3 -3
  185. package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -1
  186. package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +1 -1
  187. package/dist/dataHooks/useCaseTypeStatsQuery/index.js +2 -2
  188. package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -1
  189. package/dist/dataHooks/useCaseTypesQuery/index.js +3 -3
  190. package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -1
  191. package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +1 -1
  192. package/dist/dataHooks/useColSetMembersQuery/index.js +2 -2
  193. package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -1
  194. package/dist/dataHooks/useColSetsQuery/index.js +3 -3
  195. package/dist/dataHooks/useColSetsQuery/index.js.map +1 -1
  196. package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +1 -1
  197. package/dist/dataHooks/useColTypesQuery/index.js.map +1 -1
  198. package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +1 -1
  199. package/dist/dataHooks/useColsQuery/index.js +3 -3
  200. package/dist/dataHooks/useColsQuery/index.js.map +1 -1
  201. package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +1 -1
  202. package/dist/dataHooks/useConceptQuery/index.js +3 -3
  203. package/dist/dataHooks/useConceptQuery/index.js.map +1 -1
  204. package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +1 -1
  205. package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -1
  206. package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +1 -1
  207. package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -1
  208. package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +1 -1
  209. package/dist/dataHooks/useConceptSetsQuery/index.js +3 -3
  210. package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -1
  211. package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +1 -1
  212. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +2 -2
  213. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -1
  214. package/dist/dataHooks/useDataCollectionsQuery/index.js +3 -3
  215. package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -1
  216. package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +1 -1
  217. package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -1
  218. package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +1 -1
  219. package/dist/dataHooks/useDimsQuery/index.js +3 -3
  220. package/dist/dataHooks/useDimsQuery/index.js.map +1 -1
  221. package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +1 -1
  222. package/dist/dataHooks/useDiseasesQuery/index.js +3 -3
  223. package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -1
  224. package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +1 -1
  225. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +3 -3
  226. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -1
  227. package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +1 -1
  228. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +3 -3
  229. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -1
  230. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +1 -1
  231. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +2 -2
  232. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -1
  233. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +2 -2
  234. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -1
  235. package/dist/dataHooks/useRefColsQuery/index.js +3 -3
  236. package/dist/dataHooks/useRefColsQuery/index.js.map +1 -1
  237. package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +1 -1
  238. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +2 -2
  239. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -1
  240. package/dist/dataHooks/useRefDimsQuery/index.js +3 -3
  241. package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -1
  242. package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +1 -1
  243. package/dist/dataHooks/useRegionQuery/index.js +3 -3
  244. package/dist/dataHooks/useRegionQuery/index.js.map +1 -1
  245. package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +1 -1
  246. package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -1
  247. package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +1 -1
  248. package/dist/dataHooks/useRegionSetsQuery/index.js +3 -3
  249. package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -1
  250. package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +1 -1
  251. package/dist/dataHooks/useSequencingProtocolsQuery/index.js +3 -3
  252. package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -1
  253. package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +1 -1
  254. package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -1
  255. package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +1 -1
  256. package/dist/dataHooks/useUnitQuery/useUnit.d.ts +1 -1
  257. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +2 -2
  258. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -1
  259. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +3 -3
  260. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -1
  261. package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +1 -1
  262. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +2 -2
  263. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -1
  264. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +2 -2
  265. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -1
  266. package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +1 -1
  267. package/dist/hooks/useUserCasePolicyNameFactory/index.js +3 -3
  268. package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -1
  269. package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +1 -1
  270. package/dist/locale/nl.json +1 -1
  271. package/dist/models/config.d.ts +1 -1
  272. package/dist/models/dashboard.d.ts +1 -1
  273. package/dist/models/dashboard.js.map +1 -1
  274. package/dist/models/theme.d.ts +2 -2
  275. package/dist/pages/CaseDbUsersAdminPage/index.js +5 -5
  276. package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -1
  277. package/dist/pages/CaseSetCategoryAdminPage/index.js +4 -4
  278. package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -1
  279. package/dist/pages/CaseSetStatusAdminPage/index.js +4 -4
  280. package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -1
  281. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +4 -4
  282. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -1
  283. package/dist/pages/CaseTypeSetsAdminPage/index.js +6 -6
  284. package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -1
  285. package/dist/pages/CaseTypesAdminPage/index.js +5 -5
  286. package/dist/pages/CaseTypesAdminPage/index.js.map +1 -1
  287. package/dist/pages/CasesDetailPage/index.js +5 -5
  288. package/dist/pages/CasesDetailPage/index.js.map +1 -1
  289. package/dist/pages/CasesPage/index.js +10 -10
  290. package/dist/pages/CasesPage/index.js.map +1 -1
  291. package/dist/pages/ColSetsAdminPage/index.js +6 -6
  292. package/dist/pages/ColSetsAdminPage/index.js.map +1 -1
  293. package/dist/pages/ColsAdminPage/index.js +5 -5
  294. package/dist/pages/ColsAdminPage/index.js.map +1 -1
  295. package/dist/pages/ConceptRelationsAdminPage/index.js +19 -19
  296. package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -1
  297. package/dist/pages/ConceptSetsAdminPage/index.js +5 -5
  298. package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -1
  299. package/dist/pages/ConceptsAdminPage/index.js +5 -5
  300. package/dist/pages/ConceptsAdminPage/index.js.map +1 -1
  301. package/dist/pages/DataCollectionSetsAdminPage/index.js +12 -12
  302. package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -1
  303. package/dist/pages/DataCollectionVisualizationPage/index.js +4 -4
  304. package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
  305. package/dist/pages/DataCollectionsAdminPage/index.js +4 -4
  306. package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -1
  307. package/dist/pages/DimsAdminPage/index.js +6 -6
  308. package/dist/pages/DimsAdminPage/index.js.map +1 -1
  309. package/dist/pages/DiseasesAdminPage/index.js +4 -4
  310. package/dist/pages/DiseasesAdminPage/index.js.map +1 -1
  311. package/dist/pages/EtiologicalAgentsAdminPage/index.js +4 -4
  312. package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -1
  313. package/dist/pages/EtiologiesAdminPage/index.js +3 -3
  314. package/dist/pages/EtiologiesAdminPage/index.js.map +1 -1
  315. package/dist/pages/EventsDetailPage/index.js +5 -5
  316. package/dist/pages/EventsDetailPage/index.js.map +1 -1
  317. package/dist/pages/EventsPage/index.js +11 -11
  318. package/dist/pages/EventsPage/index.js.map +1 -1
  319. package/dist/pages/HomePage/index.js +2 -2
  320. package/dist/pages/HomePage/index.js.map +1 -1
  321. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +4 -4
  322. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  323. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +4 -4
  324. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -1
  325. package/dist/pages/RefColsAdminPage/index.js +7 -7
  326. package/dist/pages/RefColsAdminPage/index.js.map +1 -1
  327. package/dist/pages/RefDimsAdminPage/index.js +5 -5
  328. package/dist/pages/RefDimsAdminPage/index.js.map +1 -1
  329. package/dist/pages/RegionRelationsAdminPage/index.js +3 -3
  330. package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -1
  331. package/dist/pages/RegionSetShapesAdminPage/index.js +4 -4
  332. package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -1
  333. package/dist/pages/RegionSetsAdminPage/index.js +5 -5
  334. package/dist/pages/RegionSetsAdminPage/index.js.map +1 -1
  335. package/dist/pages/RegionsAdminPage/index.js +5 -5
  336. package/dist/pages/RegionsAdminPage/index.js.map +1 -1
  337. package/dist/pages/TrendsPage/index.js +1 -1
  338. package/dist/pages/TrendsPage/index.js.map +1 -1
  339. package/dist/pages/UploadPage/index.js +1 -1
  340. package/dist/pages/UploadPage/index.js.map +1 -1
  341. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +4 -4
  342. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -1
  343. package/dist/pages/UserEffectiveRightsAdminPage/index.js +12 -12
  344. package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
  345. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +8 -8
  346. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  347. package/dist/pages/UserShareCasePoliciesAdminPage/index.js +4 -4
  348. package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -1
  349. package/dist/routes/adminRoutes.d.ts +1 -1
  350. package/dist/routes/index.js +11 -8
  351. package/dist/routes/index.js.map +1 -1
  352. package/dist/routes/routes.d.ts +1 -1
  353. package/dist/setup/setup.js +5 -5
  354. package/dist/setup/setup.js.map +1 -1
  355. package/dist/stores/dashboardStore/dashboardStore.d.ts +1 -1
  356. package/dist/stores/uploadStore/index.js +2 -2
  357. package/dist/stores/uploadStore/index.js.map +1 -1
  358. package/dist/stores/uploadStore/uploadStore.d.ts +1 -1
  359. package/dist/stores/userProfileStore/index.js +2 -2
  360. package/dist/stores/userProfileStore/index.js.map +1 -1
  361. package/dist/theme/demoTheme/index.js +2 -2
  362. package/dist/theme/demoTheme/index.js.map +1 -1
  363. package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +1 -1
  364. package/dist/utils/CaseDbDataUtil/index.js +1 -1
  365. package/dist/utils/CaseDbDataUtil/index.js.map +1 -1
  366. package/dist/utils/CaseDbStandardConfigUtil/index.js +2488 -1408
  367. package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
  368. package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +1 -1
  369. package/dist/utils/CaseDbTableUtil/index.js +1 -1
  370. package/dist/utils/CaseDbTableUtil/index.js.map +1 -1
  371. package/dist/utils/CaseSelectionUtil/index.js.map +1 -1
  372. package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +1 -1
  373. package/dist/utils/CaseTypeFormUtil/index.js +7 -10
  374. package/dist/utils/CaseTypeFormUtil/index.js.map +1 -1
  375. package/dist/utils/CaseTypeUtil/index.js +1 -1
  376. package/dist/utils/CaseTypeUtil/index.js.map +1 -1
  377. package/dist/utils/CaseUtil/index.js +3 -3
  378. package/dist/utils/CaseUtil/index.js.map +1 -1
  379. package/dist/utils/DashboardUtil/index.js +1 -1
  380. package/dist/utils/DashboardUtil/index.js.map +1 -1
  381. package/dist/utils/DataSetUtil/index.js.map +1 -1
  382. package/dist/utils/FileUtil/index.js +1 -1
  383. package/dist/utils/FileUtil/index.js.map +1 -1
  384. package/dist/utils/FilterUtil/FilterUtil.d.ts +2 -2
  385. package/dist/utils/HistogramUtil/index.js +1 -1
  386. package/dist/utils/HistogramUtil/index.js.map +1 -1
  387. package/dist/utils/MapUtil/index.js +1 -1
  388. package/dist/utils/MapUtil/index.js.map +1 -1
  389. package/dist/utils/StratificationUtil/index.js +3 -2
  390. package/dist/utils/StratificationUtil/index.js.map +1 -1
  391. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -1
  392. package/package.json +19 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"LegendaItem.js","names":["useSyncExternalStoreExports"],"sources":["../../builtin:esm-external-require-react","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.7/node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.17_immer@11.1.9_react@19.2.7_use-sync-external-store@1.6.0_react@19.2.7_/node_modules/zustand/esm/traditional.mjs","../../src/components/ui/Dashboard/context/DashboardContext.tsx","../../src/components/ui/LegendaItem/LegendaItem.tsx"],"sourcesContent":["import * as m from 'react';module.exports = { ...m };","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","import type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { createContext } from 'react';\nimport type { Subject } from '@gen-epix/ui-core/classes/Subject';\n\nimport type {\n Highlighting,\n LineListRangeSubjectValue,\n LinkedScrollSubjectValue,\n} from '../../../../models/caseDb';\n\nexport type DashboardContextValue = {\n caseSet?: CaseDbCaseSet;\n highlight: (highlighting: Highlighting) => void;\n highlightSubject: Subject<Highlighting>;\n lineListRangeSubject: Subject<LineListRangeSubjectValue>;\n linkedScrollSubject: Subject<LinkedScrollSubjectValue>;\n reset: () => void;\n};\n\nexport const DashboardContext = createContext<DashboardContextValue>(null);\n","import type { TooltipProps } from '@mui/material';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport { ConfigService } from '@gen-epix/ui/classes/services/ConfigService';\nimport { useStore } from 'zustand';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport type {\n MouseEvent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport {\n use,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport isArray from 'lodash/isArray';\nimport { useStoreWithEqualityFn } from 'zustand/traditional';\n\nimport type { CaseDbConfig } from '../../../models/config';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport type { StratificationLegendaItem } from '../../../models/stratification';\nimport {\n STRATIFICATION_MODE,\n STRATIFICATION_SELECTED,\n} from '../../../models/stratification';\nimport { ContextMenu } from '../ContextMenu';\nimport type { ContextMenuConfigWithAnchor } from '../ContextMenu';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\n\nexport type LegendaItemProps = {\n readonly children?: ReactNode;\n readonly item: StratificationLegendaItem;\n readonly tooltip?: boolean;\n readonly tooltipProps?: Partial<TooltipProps>;\n};\n\nexport const LegendaItem = ({ children, item, tooltip, tooltipProps }: LegendaItemProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n const dashboardContext = use(DashboardContext);\n const dashboardStore = use(DashboardStoreContext);\n const stratification = useStore(dashboardStore, (state) => state.stratification);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const setFilterValue = useStore(dashboardStore, (state) => state.setFilterValue);\n const filters = useStoreWithEqualityFn(dashboardStore, (state) => state.filters, (a, b) => JSON.stringify(a.map(filter => filter.filterValue)) === JSON.stringify(b.map(filter => filter.filterValue)));\n const [focussedLegendaItem, setFocussedLegendaItem] = useState<StratificationLegendaItem>(null);\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithAnchor | null>(null);\n\n const parseIdsFromAnchorElement = useCallback((element: Element): string[] => {\n if (!stratification?.caseIdColors) {\n return [];\n }\n\n const caseIds: string[] = [];\n const color = element.getAttribute('data-color');\n\n Object.entries(stratification.caseIdColors).forEach(([caseId, rowColor]) => {\n if (rowColor === color) {\n caseIds.push(caseId);\n }\n });\n\n return caseIds;\n }, [stratification]);\n\n const onClick = useCallback((event: MouseEvent<HTMLDivElement>) => {\n setFocussedLegendaItem(item);\n setContextMenuConfig({\n anchorElement: event.currentTarget,\n mouseEvent: event.nativeEvent,\n parseIdsFromAnchorElement,\n });\n }, [item, parseIdsFromAnchorElement]);\n\n const onMouseOver = useCallback(() => {\n dashboardContext.highlight({\n caseIds: Object.entries(stratification?.caseIdColors).filter(([_itemId, itemColor]) => itemColor === item.color).map(([itemId]) => itemId),\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [item.color, stratification, dashboardContext]);\n\n const onMouseLeave = useCallback(() => {\n dashboardContext.highlight({\n caseIds: [],\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [dashboardContext]);\n\n const onNodeMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n }, []);\n\n const onShowOnlySelectedLegendaItemMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (focussedLegendaItem.rowValue.raw === STRATIFICATION_SELECTED.SELECTED.toString()) {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n } else {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n }\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n const filter = filters.find(f => f.id === stratification.col.id);\n if (filter) {\n const filterValue = isArray(filter.initialFilterValue) ? [focussedLegendaItem.rowValue.raw] : focussedLegendaItem.rowValue.raw;\n await setFilterValue(stratification.col.id, filterValue);\n }\n } else {\n // not implemented\n }\n\n onMenuClose();\n }, [filters, focussedLegendaItem, setFilterValue, stratification]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n if (!focussedLegendaItem) {\n return null;\n }\n let label: string;\n\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (!focussedLegendaItem.caseIds?.length || focussedLegendaItem.caseIds?.length === sortedData.length) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem?.rowValue?.raw === STRATIFICATION_SELECTED.SELECTED.toString() ? t('selected rows') : t('unselected rows') });\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n if (!focussedLegendaItem || focussedLegendaItem?.rowValue?.isMissing || !stratification?.col?.id) {\n return null;\n }\n const filter = filters.find(f => f.id === stratification.col.id);\n if (!filter) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem.rowValue.short });\n } else {\n return null;\n }\n\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => onShowOnlySelectedLegendaItemMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {label}\n </ListItemText>\n </MenuItem>\n );\n }, [filters, focussedLegendaItem, onShowOnlySelectedLegendaItemMenuItemClick, stratification, t, sortedData]);\n\n const disabled = stratification?.mode === STRATIFICATION_MODE.FIELD && item.caseIds.length === 0;\n\n const innerContent = useMemo(() => {\n const value = item.rowValue.isMissing ? ConfigService.getInstance<CaseDbConfig>().config.epi.DATA_MISSING_CHARACTER : item.rowValue.short;\n return (\n <Box\n sx={{\n alignItems: 'center',\n cursor: disabled ? 'initial' : 'pointer',\n display: 'flex',\n opacity: disabled ? 0.3 : 1,\n }}\n >\n <Box\n sx={{\n background: item.color,\n height: theme.spacing(2),\n marginRight: theme.spacing(1),\n minHeight: theme.spacing(2),\n minWidth: theme.spacing(2),\n outline: `1px solid ${theme.palette.background.paper}`,\n width: theme.spacing(2),\n }}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {children || value}\n </Box>\n </Box>\n );\n }, [children, disabled, item.color, item.rowValue.isMissing, item.rowValue.short, theme]);\n\n return (\n <>\n <Box\n component={'div'}\n data-color={item.color}\n onClick={disabled ? undefined : onClick}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {tooltip && (\n <Tooltip\n {...tooltipProps}\n title={item.rowValue.full}\n >\n {innerContent}\n </Tooltip>\n )}\n {!tooltip && innerContent}\n </Box>\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onNodeMenuClose}\n />\n </>\n );\n};\n"],"x_google_ignoreList":[1,2,3,4,5,6,7],"mappings":"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"}
1
+ {"version":3,"file":"LegendaItem.js","names":["useSyncExternalStoreExports"],"sources":["../../builtin:esm-external-require-react","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.2.18_immer@11.1.18_react@19.2.8_use-sync-external-store@1.6.0_react@19.2.8_/node_modules/zustand/esm/traditional.mjs","../../src/components/ui/Dashboard/context/DashboardContext.tsx","../../src/components/ui/LegendaItem/LegendaItem.tsx"],"sourcesContent":["import * as m from 'react';module.exports = { ...m };","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","import type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { createContext } from 'react';\nimport type { Subject } from '@gen-epix/ui-core/classes/Subject';\n\nimport type {\n Highlighting,\n LineListRangeSubjectValue,\n LinkedScrollSubjectValue,\n} from '../../../../models/caseDb';\n\nexport type DashboardContextValue = {\n caseSet?: CaseDbCaseSet;\n highlight: (highlighting: Highlighting) => void;\n highlightSubject: Subject<Highlighting>;\n lineListRangeSubject: Subject<LineListRangeSubjectValue>;\n linkedScrollSubject: Subject<LinkedScrollSubjectValue>;\n reset: () => void;\n};\n\nexport const DashboardContext = createContext<DashboardContextValue>(null);\n","import type { TooltipProps } from '@mui/material';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { useStore } from 'zustand';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport type {\n MouseEvent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport {\n use,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport isArray from 'lodash/isArray';\nimport { useStoreWithEqualityFn } from 'zustand/traditional';\n\nimport type { CaseDbConfig } from '../../../models/config';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport type { StratificationLegendaItem } from '../../../models/stratification';\nimport {\n STRATIFICATION_MODE,\n STRATIFICATION_SELECTED,\n} from '../../../models/stratification';\nimport { ContextMenu } from '../ContextMenu';\nimport type { ContextMenuConfigWithAnchor } from '../ContextMenu';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\n\nexport type LegendaItemProps = {\n readonly children?: ReactNode;\n readonly item: StratificationLegendaItem;\n readonly tooltip?: boolean;\n readonly tooltipProps?: Partial<TooltipProps>;\n};\n\nexport const LegendaItem = ({ children, item, tooltip, tooltipProps }: LegendaItemProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n const dashboardContext = use(DashboardContext);\n const dashboardStore = use(DashboardStoreContext);\n const stratification = useStore(dashboardStore, (state) => state.stratification);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const setFilterValue = useStore(dashboardStore, (state) => state.setFilterValue);\n const filters = useStoreWithEqualityFn(dashboardStore, (state) => state.filters, (a, b) => JSON.stringify(a.map(filter => filter.filterValue)) === JSON.stringify(b.map(filter => filter.filterValue)));\n const [focussedLegendaItem, setFocussedLegendaItem] = useState<StratificationLegendaItem>(null);\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithAnchor | null>(null);\n\n const parseIdsFromAnchorElement = useCallback((element: Element): string[] => {\n if (!stratification?.caseIdColors) {\n return [];\n }\n\n const caseIds: string[] = [];\n const color = element.getAttribute('data-color');\n\n Object.entries(stratification.caseIdColors).forEach(([caseId, rowColor]) => {\n if (rowColor === color) {\n caseIds.push(caseId);\n }\n });\n\n return caseIds;\n }, [stratification]);\n\n const onClick = useCallback((event: MouseEvent<HTMLDivElement>) => {\n setFocussedLegendaItem(item);\n setContextMenuConfig({\n anchorElement: event.currentTarget,\n mouseEvent: event.nativeEvent,\n parseIdsFromAnchorElement,\n });\n }, [item, parseIdsFromAnchorElement]);\n\n const onMouseOver = useCallback(() => {\n dashboardContext.highlight({\n caseIds: Object.entries(stratification?.caseIdColors).filter(([_itemId, itemColor]) => itemColor === item.color).map(([itemId]) => itemId),\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [item.color, stratification, dashboardContext]);\n\n const onMouseLeave = useCallback(() => {\n dashboardContext.highlight({\n caseIds: [],\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [dashboardContext]);\n\n const onNodeMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n }, []);\n\n const onShowOnlySelectedLegendaItemMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (focussedLegendaItem.rowValue.raw === STRATIFICATION_SELECTED.SELECTED.toString()) {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n } else {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n }\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n const filter = filters.find(f => f.id === stratification.col.id);\n if (filter) {\n const filterValue = isArray(filter.initialFilterValue) ? [focussedLegendaItem.rowValue.raw] : focussedLegendaItem.rowValue.raw;\n await setFilterValue(stratification.col.id, filterValue);\n }\n } else {\n // not implemented\n }\n\n onMenuClose();\n }, [filters, focussedLegendaItem, setFilterValue, stratification]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n if (!focussedLegendaItem) {\n return null;\n }\n let label: string;\n\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (!focussedLegendaItem.caseIds?.length || focussedLegendaItem.caseIds?.length === sortedData.length) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem?.rowValue?.raw === STRATIFICATION_SELECTED.SELECTED.toString() ? t('selected rows') : t('unselected rows') });\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n if (!focussedLegendaItem || focussedLegendaItem?.rowValue?.isMissing || !stratification?.col?.id) {\n return null;\n }\n const filter = filters.find(f => f.id === stratification.col.id);\n if (!filter) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem.rowValue.short });\n } else {\n return null;\n }\n\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => onShowOnlySelectedLegendaItemMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {label}\n </ListItemText>\n </MenuItem>\n );\n }, [filters, focussedLegendaItem, onShowOnlySelectedLegendaItemMenuItemClick, stratification, t, sortedData]);\n\n const disabled = stratification?.mode === STRATIFICATION_MODE.FIELD && item.caseIds.length === 0;\n\n const innerContent = useMemo(() => {\n const value = item.rowValue.isMissing ? ConfigService.getInstance<CaseDbConfig>().config.epi.DATA_MISSING_CHARACTER : item.rowValue.short;\n return (\n <Box\n sx={{\n alignItems: 'center',\n cursor: disabled ? 'initial' : 'pointer',\n display: 'flex',\n opacity: disabled ? 0.3 : 1,\n }}\n >\n <Box\n sx={{\n background: item.color,\n height: theme.spacing(2),\n marginRight: theme.spacing(1),\n minHeight: theme.spacing(2),\n minWidth: theme.spacing(2),\n outline: `1px solid ${theme.palette.background.paper}`,\n width: theme.spacing(2),\n }}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {children || value}\n </Box>\n </Box>\n );\n }, [children, disabled, item.color, item.rowValue.isMissing, item.rowValue.short, theme]);\n\n return (\n <>\n <Box\n component={'div'}\n data-color={item.color}\n onClick={disabled ? undefined : onClick}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {tooltip && (\n <Tooltip\n {...tooltipProps}\n title={item.rowValue.full}\n >\n {innerContent}\n </Tooltip>\n )}\n {!tooltip && innerContent}\n </Box>\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onNodeMenuClose}\n />\n </>\n );\n};\n"],"x_google_ignoreList":[1,2,3,4,5,6,7],"mappings":"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"}
@@ -23,22 +23,22 @@ import { LineListCaseSetMembersService as S } from "../classes/services/LineList
23
23
  import { LineListIsOwnCaseService as C } from "../classes/services/LineListService/LineListIsOwnCaseService/index.js";
24
24
  import { CaseDbColType as w, CaseDbCommandName as T, CaseDbPermissionType as E } from "@gen-epix/api-casedb";
25
25
  import { StringUtil as ee } from "@gen-epix/ui-core/utils/StringUtil";
26
- import { ConfigService as D } from "@gen-epix/ui/classes/services/ConfigService";
26
+ import { ConfigService as D } from "@gen-epix/ui-client-common/classes/services/ConfigService";
27
27
  import { Box as O, CircularProgress as k, Link as te, ListItemIcon as A, ListItemText as j, MenuItem as M, Tooltip as N, Typography as P, useTheme as F } from "@mui/material";
28
28
  import { memo as I, use as L, useCallback as R, useEffect as z, useMemo as B, useRef as ne, useState as V } from "react";
29
29
  import { useTranslation as H } from "react-i18next";
30
30
  import { Fragment as re, jsx as U, jsxs as W } from "react/jsx-runtime";
31
31
  import ie from "@mui/icons-material/Edit";
32
- import { Table as ae } from "@gen-epix/ui/components/ui/Table";
33
- import { TABLE_COLUMN_FROZEN as G } from "@gen-epix/ui/models/table";
34
- import { TableUtil as K } from "@gen-epix/ui/utils/TableUtil";
32
+ import { Table as ae } from "@gen-epix/ui-client-common/components/ui/Table";
33
+ import { TABLE_COLUMN_FROZEN as G } from "@gen-epix/ui-client-common/models/table";
34
+ import { TableUtil as K } from "@gen-epix/ui-client-common/utils/TableUtil";
35
35
  import oe from "@mui/icons-material/Share";
36
36
  import { Subject as se } from "@gen-epix/ui-core/classes/Subject";
37
37
  import q from "@mui/icons-material/Troubleshoot";
38
38
  import ce from "@mui/icons-material/CorporateFare";
39
39
  import le from "@mui/icons-material/ArrowCircleRight";
40
- import { AuthorizationService as J } from "@gen-epix/ui/classes/services/AuthorizationService";
41
- import { useColumnsMenu as Y } from "@gen-epix/ui/hooks/useColumnsMenu";
40
+ import { AuthorizationService as J } from "@gen-epix/ui-client-common/classes/services/AuthorizationService";
41
+ import { useColumnsMenu as Y } from "@gen-epix/ui-client-common/hooks/useColumnsMenu";
42
42
  import ue from "@mui/icons-material/Link";
43
43
  //#region src/components/ui/LineListWidget/LineListWidgetIsInEventCell.tsx
44
44
  var de = I(({ row: e }) => {
@@ -112,7 +112,7 @@ var de = I(({ row: e }) => {
112
112
  })
113
113
  ] });
114
114
  }), pe = () => {
115
- let e = L(u), { t } = H(), n = l(e, m((e) => e.sortedData));
115
+ let e = L(u), { t } = H(), n = l(e, m((e) => e.sortedData)), r = l(e, m((e) => e.selectedIds));
116
116
  return /* @__PURE__ */ U(P, {
117
117
  "aria-live": "polite",
118
118
  component: "div",
@@ -122,7 +122,7 @@ var de = I(({ row: e }) => {
122
122
  lineHeight: (e) => e.spacing(3)
123
123
  },
124
124
  children: t("Line list: {{shownCount}} cases, {{selectedCount}} selected", {
125
- selectedCount: l(e, m((e) => e.selectedIds)).length ?? 0,
125
+ selectedCount: r.length ?? 0,
126
126
  shownCount: n.length ?? 0
127
127
  })
128
128
  });
@@ -143,8 +143,7 @@ var de = I(({ row: e }) => {
143
143
  h,
144
144
  o,
145
145
  x
146
- ]), C = B(() => S.filter((e) => a?.includes(e.id)), [S, a]), w = B(() => o.filter((e) => a?.includes(e.id)), [o, a]);
147
- return /* @__PURE__ */ U(b, { menu: B(() => {
146
+ ]), C = B(() => S.filter((e) => a?.includes(e.id)), [S, a]), w = B(() => o.filter((e) => a?.includes(e.id)), [o, a]), ee = B(() => {
148
147
  let t = J.getInstance().doesUserHavePermission([{
149
148
  command_name: T.CreateCaseSetCommand,
150
149
  permission_type: E.EXECUTE
@@ -227,14 +226,14 @@ var de = I(({ row: e }) => {
227
226
  s,
228
227
  w,
229
228
  C
230
- ]) });
229
+ ]);
230
+ return /* @__PURE__ */ U(b, { menu: ee });
231
231
  }, he = () => {
232
232
  let e = F(), t = L(u), { t: n } = H(), r = l(t, m((e) => e.getWidgetData(c.TREE).zoomLevel === 1)), i = l(t, m((e) => e.setSorting)), a = R(() => {
233
233
  (async () => {
234
234
  await i(null, null), f.getInstance().emit("onLinkLineListAndTree");
235
235
  })();
236
- }, [i]);
237
- return /* @__PURE__ */ U(b, { menu: B(() => [{
236
+ }, [i]), o = B(() => [{
238
237
  callback: a,
239
238
  disabled: r,
240
239
  label: n`Link and snap the Tree to the Line list (resets tree zoom level and Line List sorting)`,
@@ -244,7 +243,8 @@ var de = I(({ row: e }) => {
244
243
  a,
245
244
  n,
246
245
  e.palette.error.main
247
- ]) });
246
+ ]);
247
+ return /* @__PURE__ */ U(b, { menu: o });
248
248
  }, ge = () => {
249
249
  let { t: e } = H(), t = L(u), n = l(t, m((e) => e.sortedData)), r = l(t, m((e) => e.completeCaseType)), i = R(() => t.getState().getCurrentColumnVisualSettings().filter((e) => e.isVisible).map((e) => e.id), [t]);
250
250
  z(() => {
@@ -621,12 +621,14 @@ var de = I(({ row: e }) => {
621
621
  Y(Pe);
622
622
  }, [Y, Pe]), z(() => {
623
623
  let e = t.highlightSubject.subscribe((e) => {
624
- if (e?.origin !== c.LINE_LIST) if (e.scrollIntoView) {
625
- let t = e.caseIds[0], n = k.findIndex((e) => e.id === t);
626
- n !== -1 && b.current?.scrollToIndex(n, () => {
627
- m.next(e.caseIds);
628
- });
629
- } else m.next(e.caseIds);
624
+ if (e?.origin !== c.LINE_LIST) {
625
+ if (e.scrollIntoView) {
626
+ let t = e.caseIds[0], n = k.findIndex((e) => e.id === t);
627
+ n !== -1 && b.current?.scrollToIndex(n, () => {
628
+ m.next(e.caseIds);
629
+ });
630
+ } else m.next(e.caseIds);
631
+ }
630
632
  });
631
633
  return () => {
632
634
  e();
@@ -679,7 +681,7 @@ var de = I(({ row: e }) => {
679
681
  width: "100%"
680
682
  },
681
683
  children: /* @__PURE__ */ U(ae, {
682
- font: p["gen-epix-ui-casedb"].lineList.font,
684
+ font: p["gen-epix-ui-client-casedb"].lineList.font,
683
685
  forceHorizontalOverflow: !0,
684
686
  getRowName: Ve,
685
687
  initialVisibleItemIndex: T.getState().getWidgetData(c.LINE_LIST)?.visibleItemItemIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"LineListWidget.js","names":[],"sources":["../../src/components/ui/LineListWidget/LineListWidgetIsInEventCell.tsx","../../src/components/ui/LineListWidget/LineListWidgetIsOwnCaseCell.tsx","../../src/components/ui/LineListWidget/LineListWidgetTitle.tsx","../../src/components/ui/LineListWidget/LineListWidgetPrimaryMenu.tsx","../../src/components/ui/LineListWidget/LineListWidgetSecondaryMenu.tsx","../../src/components/ui/LineListWidget/useEpiLineListWidgetEmitDownloadOptions.tsx","../../src/components/ui/LineListWidget/LineListWidget.tsx"],"sourcesContent":["import {\n Box,\n CircularProgress,\n useTheme,\n} from '@mui/material';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport {\n memo,\n useEffect,\n useState,\n} from 'react';\n\nimport CollectionIcon from '../../../assets/icons/CollectionIcon.svg?react';\nimport { LineListCaseSetMembersService } from '../../../classes/services/LineListService/LineListCaseSetMembersService';\n\ntype LineListWidgetIsInEventCellProps = {\n readonly row: CaseDbCase;\n};\n\nexport const LineListWidgetIsInEventCell = memo(({ row }: LineListWidgetIsInEventCellProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [isTrue, setIsTrue] = useState(false);\n const theme = useTheme();\n\n useEffect(() => {\n const perform = async () => {\n try {\n setIsTrue(await LineListCaseSetMembersService.getInstance().query(row.id));\n } catch (_error) {\n setHasError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n void perform();\n }, [row.id]);\n\n return (\n <Box>\n {isLoading && (\n <CircularProgress\n size={16}\n sx={{\n marginTop: '4px',\n position: 'absolute',\n }}\n />\n )}\n {!isLoading && hasError && (\n <Box sx={{ color: `${theme.palette.error.main}` }}>\n {'?'}\n </Box>\n )}\n {!isLoading && !hasError && isTrue && (\n <CollectionIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n )}\n\n </Box>\n );\n});\n","import {\n Box,\n CircularProgress,\n useTheme,\n} from '@mui/material';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport {\n memo,\n useEffect,\n useState,\n} from 'react';\nimport CorporateFareIcon from '@mui/icons-material/CorporateFare';\n\nimport { LineListIsOwnCaseService } from '../../../classes/services/LineListService/LineListIsOwnCaseService';\n\ntype LineListWidgetIsOwnCaseCellProps = {\n readonly row: CaseDbCase;\n};\n\nexport const LineListWidgetIsOwnCaseCell = memo(({ row }: LineListWidgetIsOwnCaseCellProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [isTrue, setIsTrue] = useState(false);\n const theme = useTheme();\n\n useEffect(() => {\n const perform = async () => {\n try {\n setIsTrue(await LineListIsOwnCaseService.getInstance().query(row.id));\n } catch (_error) {\n setHasError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n void perform();\n }, [row.id]);\n\n return (\n <Box>\n {isLoading && (\n <CircularProgress\n size={16}\n sx={{\n marginTop: '4px',\n position: 'absolute',\n }}\n />\n )}\n {!isLoading && hasError && (\n <Box sx={{ color: `${theme.palette.error.main}` }}>\n {'?'}\n </Box>\n )}\n {!isLoading && !hasError && isTrue && (\n <CorporateFareIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n )}\n\n </Box>\n );\n});\n","import { use } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport { Typography } from '@mui/material';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\n\nexport const LineListWidgetTitle = () => {\n const dashboardStore = use(DashboardStoreContext);\n const { t } = useTranslation();\n const sortedData = useStore(dashboardStore, useShallow((state) => state.sortedData));\n const selectedIds = useStore(dashboardStore, useShallow((state) => state.selectedIds));\n\n return (\n <Typography\n aria-live={'polite'}\n component={'div'}\n role={'status'}\n sx={{\n fontWeight: 600,\n lineHeight: theme => theme.spacing(3),\n }}\n >\n {t('Line list: {{shownCount}} cases, {{selectedCount}} selected', { selectedCount: selectedIds.length ?? 0, shownCount: sortedData.length ?? 0 })}\n </Typography>\n );\n};\n","import {\n use,\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbApiPermission,\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbPermissionType,\n} from '@gen-epix/api-casedb';\nimport type { MenuItemData } from '@gen-epix/ui/models/nestedMenu';\nimport type { TableColumn } from '@gen-epix/ui/models/table';\nimport { AuthorizationService } from '@gen-epix/ui/classes/services/AuthorizationService';\nimport { useColumnsMenu } from '@gen-epix/ui/hooks/useColumnsMenu';\nimport last from 'lodash/last';\n\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { WidgetMenu } from '../WidgetMenu';\nimport { SelectionFilter } from '../../../classes/filters/SelectionFilter';\n\n\nexport type LineListWidgetPrimaryMenuProps = {\n readonly caseSet?: CaseDbCaseSet;\n};\n\n\nexport const LineListWidgetPrimaryMenu = ({\n caseSet,\n}: LineListWidgetPrimaryMenuProps) => {\n const dashboardStore = use(DashboardStoreContext);\n const { t } = useTranslation();\n const selectedIds = useStore(dashboardStore, useShallow((state) => state.selectedIds));\n const sortedData = useStore(dashboardStore, useShallow((state) => state.sortedData));\n const completeCaseType = useStore(dashboardStore, useShallow((state) => state.completeCaseType));\n const setFilterValue = useStore(dashboardStore, useShallow((state) => state.setFilterValue));\n const filters = useStore(dashboardStore, useShallow((state) => state.filters));\n const setSelectedIds = useStore(dashboardStore, useShallow((state) => state.setSelectedIds));\n const findSimilarCasesResults = useStore(dashboardStore, useShallow((state) => state.findSimilarCasesResults));\n\n const hasCellData = useCallback((row: CaseDbCase, tableColumn: TableColumn<CaseDbCase, CaseDbCompleteCaseType>, rowIndex: number) => {\n if (tableColumn.valueGetter) {\n return !!tableColumn.valueGetter({\n column: tableColumn,\n dataContext: completeCaseType,\n id: tableColumn.id,\n row,\n rowIndex,\n });\n }\n return !CaseUtil.getRowValue(row.content, completeCaseType.cols[tableColumn.id], completeCaseType).isMissing;\n }, [completeCaseType]);\n\n const createFilterFromSelectedRowCaseIds = useCallback(async () => {\n await setFilterValue('selected', selectedIds);\n setSelectedIds([]);\n }, [setFilterValue, selectedIds, setSelectedIds]);\n\n const hasSelectionFilter = filters.some((filter) => filter instanceof SelectionFilter && filter.filterValue.length > 0);\n const columnsMenuItem = useColumnsMenu({ hasCellData });\n\n const similarCaseIds = useMemo(() => findSimilarCasesResults?.flatMap((result) => result.similarCaseIds) || [], [findSimilarCasesResults]);\n\n const rowsWithoutSimilarCases = useMemo(() => {\n if (!findSimilarCasesResults?.length) {\n return sortedData;\n }\n return sortedData.filter((row) => !similarCaseIds.includes(row.id));\n }, [findSimilarCasesResults, sortedData, similarCaseIds]);\n\n const selectedRowsWithoutSimilarCases = useMemo(() => {\n return rowsWithoutSimilarCases.filter((row) => selectedIds?.includes(row.id));\n }, [rowsWithoutSimilarCases, selectedIds]);\n\n const selectedRows = useMemo(() => {\n return sortedData.filter((row) => selectedIds?.includes(row.id));\n }, [sortedData, selectedIds]);\n\n const menu = useMemo<MenuItemData[]>(() => {\n const shouldShowCreateEventMenuItem = AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([{ command_name: CaseDbCommandName.CreateCaseSetCommand, permission_type: CaseDbPermissionType.EXECUTE }]);\n const shouldShowAddToEventMenuItem = AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([{ command_name: CaseDbCommandName.CaseSetMemberCrudCommand, permission_type: CaseDbPermissionType.CREATE }]);\n const shouldShowRemoveFromEventMenuItem = !!caseSet && AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([{ command_name: CaseDbCommandName.CaseSetMemberCrudCommand, permission_type: CaseDbPermissionType.DELETE }]);\n const shouldShowBulkEditCaseMenuItem = true;\n\n const actionsColumnMenuItem: MenuItemData = {\n items: [\n {\n callback: createFilterFromSelectedRowCaseIds,\n disabled: !selectedIds?.length || similarCaseIds.length > 0,\n divider: true,\n label: t`Create filter from selected cases`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openFindSimilarCasesDialog', {\n allRows: sortedData,\n completeCaseType,\n selectedRows: sortedData,\n }),\n disabled: hasSelectionFilter,\n label: t`Find similar cases`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openFindSimilarCasesDialog', {\n allRows: sortedData,\n completeCaseType,\n selectedRows,\n }),\n disabled: !selectedIds?.length || hasSelectionFilter,\n label: t`Find similar cases (based on selected cases)`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openRemoveFindSimilarCasesResultDialog', {\n completeCaseType,\n }),\n disabled: !findSimilarCasesResults?.length,\n label: t`Remove similar cases from results`,\n },\n ],\n label: t`Actions`,\n };\n\n if (shouldShowCreateEventMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openCreateEventDialog', {\n completeCaseType,\n rows: selectedRows,\n }),\n disabled: !selectedIds?.length,\n label: t`Create new event with selected cases`,\n },\n );\n }\n\n if (shouldShowAddToEventMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openAddCasesToEventDialog', {\n currentCaseSet: caseSet,\n rows: selectedRows,\n }),\n disabled: !selectedIds?.length,\n label: t`Add selected cases to an existing event`,\n },\n );\n }\n\n if (shouldShowRemoveFromEventMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openRemoveCasesFromEventDialog', {\n caseSet,\n rows: selectedRowsWithoutSimilarCases,\n }),\n disabled: !selectedRowsWithoutSimilarCases.length,\n label: t`Remove selected cases from this event`,\n },\n );\n }\n if (actionsColumnMenuItem.items.length > 3) {\n actionsColumnMenuItem.items[3].divider = true;\n }\n\n last(actionsColumnMenuItem.items).divider = true;\n if (shouldShowBulkEditCaseMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openEditCases', selectedRows),\n disabled: !selectedIds?.length,\n label: t`Edit selected cases`,\n },\n );\n }\n\n const menus: MenuItemData[] = [\n columnsMenuItem,\n actionsColumnMenuItem,\n ];\n\n return menus;\n }, [caseSet, t, selectedIds?.length, hasSelectionFilter, similarCaseIds.length, createFilterFromSelectedRowCaseIds, findSimilarCasesResults?.length, columnsMenuItem, sortedData, completeCaseType, selectedRows, selectedRowsWithoutSimilarCases]);\n\n\n return <WidgetMenu menu={menu} />;\n};\n","import {\n use,\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport LinkIcon from '@mui/icons-material/Link';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport { useTheme } from '@mui/material';\nimport type { MenuItemData } from '@gen-epix/ui/models/nestedMenu';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { WidgetMenu } from '../WidgetMenu';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport type { TreeWidgetData } from '../../../models/dashboard';\n\nexport const LineListWidgetSecondaryMenu = () => {\n const theme = useTheme();\n const dashboardStore = use(DashboardStoreContext);\n const { t } = useTranslation();\n const isTreeLinked = useStore(dashboardStore, useShallow((state) => state.getWidgetData<TreeWidgetData>(DASHBOARD_COMPONENT_NAME.TREE).zoomLevel === 1));\n const setSorting = useStore(dashboardStore, useShallow((state) => state.setSorting));\n\n const onLinkButtonClick = useCallback(() => {\n const perform = async () => {\n await setSorting(null, null);\n EventBusService.getInstance().emit('onLinkLineListAndTree');\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [setSorting]);\n\n const menu = useMemo<MenuItemData[]>(() => {\n return [\n {\n callback: onLinkButtonClick,\n disabled: isTreeLinked,\n label: t`Link and snap the Tree to the Line list (resets tree zoom level and Line List sorting)`,\n leftIcon: (\n <LinkIcon\n sx={{\n color: isTreeLinked ? undefined : theme.palette.error.main,\n }}\n />\n ),\n },\n ];\n }, [isTreeLinked, onLinkButtonClick, t, theme.palette.error.main]);\n\n return <WidgetMenu menu={menu} />;\n};\n","import {\n use,\n useCallback,\n useEffect,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\n\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseDbDownloadUtil } from '../../../utils/CaseDbDownloadUtil';\nimport { DashboardUtil } from '../../../utils/DashboardUtil';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\n\nexport const useEpiLineListWidgetEmitDownloadOptions = () => {\n const { t } = useTranslation();\n const dashboardStore = use(DashboardStoreContext);\n const sortedData = useStore(dashboardStore, useShallow((state) => state.sortedData));\n const completeCaseType = useStore(dashboardStore, useShallow((state) => state.completeCaseType));\n\n const getVisibleColumnIds = useCallback(() => {\n return dashboardStore.getState().getCurrentColumnVisualSettings().filter(x => x.isVisible).map(x => x.id);\n }, [dashboardStore]);\n\n useEffect(() => {\n const emitDownloadOptions = (selectedIds: string[]) => {\n EventBusService.getInstance().emit('onDownloadOptionsChanged', {\n items: [\n {\n disabled: !sortedData?.length,\n items: [\n {\n callback: async () => CaseDbDownloadUtil.downloadAsExcel(sortedData, getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as Excel`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadAsCsv(sortedData, getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as CSV`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openSequenceDownloadDialog', { cases: sortedData }),\n label: t`Download sequences`,\n },\n {\n callback: () => null,\n disabled: true,\n label: t`Download allele profiles`,\n },\n ],\n label: t`All rows`,\n },\n {\n disabled: selectedIds.length === 0,\n items: [\n {\n callback: async () => CaseDbDownloadUtil.downloadAsExcel(DashboardUtil.getSelectedRows(sortedData, selectedIds), getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as Excel`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadAsCsv(DashboardUtil.getSelectedRows(sortedData, selectedIds), getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as CSV`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openSequenceDownloadDialog', { cases: sortedData.filter(c => selectedIds.includes(c.id)) }),\n label: t`Download sequences`,\n },\n {\n callback: () => null,\n disabled: true,\n label: t`Download allele profiles`,\n },\n ],\n label: t`Selected rows`,\n },\n ],\n zone: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n zoneLabel: t`Line list`,\n });\n };\n emitDownloadOptions(dashboardStore.getState().selectedIds);\n const unsubscribe = dashboardStore.subscribe((state, prevState) => {\n if (JSON.stringify(state.selectedIds) !== JSON.stringify(prevState.selectedIds)) {\n emitDownloadOptions(state.selectedIds);\n }\n });\n\n const onDownloadOptionsRequested = () => {\n emitDownloadOptions(dashboardStore.getState().selectedIds);\n };\n const eventBusService = EventBusService.getInstance();\n eventBusService.addEventListener('onDownloadOptionsRequested', onDownloadOptionsRequested);\n return () => {\n eventBusService.emit('onDownloadOptionsChanged', {\n items: null,\n zone: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n zoneLabel: t`Line list`,\n });\n eventBusService.removeEventListener('onDownloadOptionsRequested', onDownloadOptionsRequested);\n unsubscribe();\n };\n }, [completeCaseType, dashboardStore, getVisibleColumnIds, sortedData, t]);\n};\n","import {\n Box,\n Link,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useDebouncedCallback } from 'use-debounce';\nimport type { ListRange } from 'react-virtuoso';\nimport TroubleshootIcon from '@mui/icons-material/Troubleshoot';\nimport CorporateFareIcon from '@mui/icons-material/CorporateFare';\nimport ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight';\nimport 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 TableColumn,\n TableColumnText,\n TableRowAndColumnParams,\n TableRowParams,\n} from '@gen-epix/ui/models/table';\nimport type { TableRef } from '@gen-epix/ui/components/ui/Table';\nimport { ConfigService } from '@gen-epix/ui/classes/services/ConfigService';\nimport { Table } from '@gen-epix/ui/components/ui/Table';\nimport { TABLE_COLUMN_FROZEN } from '@gen-epix/ui/models/table';\nimport { TableUtil } from '@gen-epix/ui/utils/TableUtil';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ShareIcon from '@mui/icons-material/Share';\nimport { Subject } from '@gen-epix/ui-core/classes/Subject';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\n\nimport CollectionIcon from '../../../assets/icons/CollectionIcon.svg?react';\nimport { LegendaItem } from '../LegendaItem';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { LineListCaseSetMembersService } from '../../../classes/services/LineListService/LineListCaseSetMembersService';\nimport type { LineListWidgetData } from '../../../models/dashboard';\nimport type {\n Stratification,\n StratificationLegendaItem,\n} from '../../../models/stratification';\nimport { STRATIFICATION_MODE } from '../../../models/stratification';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport type { CaseDbConfig } from '../../../models/config';\nimport { CaseDbTableUtil } from '../../../utils/CaseDbTableUtil';\nimport { CASE_INFO_DIALOG_TAB_NAME } from '../CaseInfoDialog';\nimport { StratificationUtil } from '../../../utils/StratificationUtil';\nimport { DashboardWidget } from '../Dashboard';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { LineListIsOwnCaseService } from '../../../classes/services/LineListService/LineListIsOwnCaseService';\n\nimport { LineListWidgetIsInEventCell } from './LineListWidgetIsInEventCell';\nimport { LineListWidgetIsOwnCaseCell } from './LineListWidgetIsOwnCaseCell';\nimport { LineListWidgetTitle } from './LineListWidgetTitle';\nimport { LineListWidgetPrimaryMenu } from './LineListWidgetPrimaryMenu';\nimport { LineListWidgetSecondaryMenu } from './LineListWidgetSecondaryMenu';\nimport { useEpiLineListWidgetEmitDownloadOptions } from './useEpiLineListWidgetEmitDownloadOptions';\n\nexport const LineListWidget = () => {\n const { caseSet } = use(DashboardContext);\n const dashboardContext = use(DashboardContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const { t } = useTranslation();\n const theme = useTheme();\n const rowHighlightingSubject = useMemo(() => new Subject<string[]>([]), []);\n const tableRef = useRef<TableRef>(null);\n\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const isCondensed = useStore(dashboardStore, (state) => state.isCondensed);\n const stratification = useStore(dashboardStore, (state) => state.stratification?.mode === STRATIFICATION_MODE.FIELD ? state.stratification : null);\n const updateWidgetData = useStore(dashboardStore, (state) => state.updateWidgetData);\n const treeAddresses = useStore(dashboardStore, (state) => state.treeAddresses);\n const setTableColumns = useStore(dashboardStore, (state) => state.setColumns);\n const isDataLoading = useStore(dashboardStore, (state) => state.isDataLoading);\n\n useEffect(() => {\n return () => {\n dashboardContext.lineListRangeSubject.next(undefined);\n };\n }, [dashboardContext]);\n\n const openCaseInfoDialog = useCallback((caseId: string, tabName: CASE_INFO_DIALOG_TAB_NAME) => {\n EventBusService.getInstance().emit('openCaseInfoDialog', {\n caseId,\n caseTypeId: completeCaseType.id,\n initialTab: tabName,\n });\n }, [completeCaseType.id]);\n\n const onAddToEventClick = useCallback((row: CaseDbCase) => {\n EventBusService.getInstance().emit('openAddCasesToEventDialog', {\n currentCaseSet: caseSet,\n rows: [row],\n });\n }, [caseSet]);\n\n\n const onIndexCellClick = useCallback((row: CaseDbCase) => {\n openCaseInfoDialog(row.id, CASE_INFO_DIALOG_TAB_NAME.INFO);\n }, [openCaseInfoDialog]);\n\n const getColumnWidth = useCallback((col: CaseDbCol, label: string) => {\n let maxTextLength = label?.length * 0.8;\n sortedData.forEach(row => {\n const value = CaseUtil.getRowValue(row.content, col, completeCaseType).short;\n if (value?.length > maxTextLength) {\n maxTextLength = value.length;\n }\n });\n\n let maxWidth = +theme.spacing(5).replace('px', '') + maxTextLength * 7;\n if (stratification?.col?.id === col.id) {\n maxWidth = maxWidth + +theme.spacing(3).replace('px', '');\n }\n\n const { MAX_COLUMN_WIDTH, REQUIRED_EXTRA_CELL_PADDING_TO_FIT_CONTENT } = ConfigService.getInstance<CaseDbConfig>().config.lineList;\n return Math.min(MAX_COLUMN_WIDTH, maxWidth) + REQUIRED_EXTRA_CELL_PADDING_TO_FIT_CONTENT;\n }, [completeCaseType, sortedData, stratification?.col?.id, theme]);\n\n const onOrganizationCellClick = useCallback((organizationId: string, organizationName: string) => {\n EventBusService.getInstance().emit('openContactDetailsDialog', {\n organizationId,\n organizationName,\n });\n }, []);\n\n const renderOrganizationCell = useCallback(({ id, row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const rowValue = CaseUtil.getRowValue(row.content, completeCaseType.cols[id], completeCaseType);\n if (rowValue.isMissing) {\n return rowValue.short;\n }\n const legendaItem: StratificationLegendaItem = {\n caseIds: [row.id],\n color: stratification?.caseIdColors[row.id],\n columnType: completeCaseType.ref_cols[completeCaseType.cols[id].ref_col_id].col_type,\n rowValue,\n };\n\n const link = (\n <Link\n color={'primary'}\n component={'button'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onOrganizationCellClick(row.content[id], rowValue.long);\n }}\n sx={{\n cursor: 'pointer',\n }}\n >\n {rowValue.short}\n </Link>\n );\n if (id === stratification?.col?.id) {\n return (\n <LegendaItem\n item={legendaItem}\n >\n {link}\n </LegendaItem>\n );\n }\n return link;\n }, [completeCaseType, onOrganizationCellClick, stratification?.caseIdColors, stratification?.col?.id]);\n\n const onGeneticSequenceCellClick = useCallback((id: string, row: CaseDbCase) => {\n EventBusService.getInstance().emit('openSequenceDownloadDialog', {\n cases: [row],\n geneticSequenceColId: id,\n });\n }, []);\n\n const renderGeneticSequenceCell = useCallback(({ id, row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n return (\n <Link\n color={'primary'}\n component={'button'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onGeneticSequenceCellClick(id, row);\n }}\n sx={{\n cursor: 'pointer',\n }}\n >\n {row.content[id]}\n </Link>\n );\n }, [onGeneticSequenceCellClick]);\n\n const renderIsInEventHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t`Indicates if the case is in an event.`}\n >\n <CollectionIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n </Tooltip>\n );\n }, [t, theme]);\n\n const renderIsInEventCell = useCallback(({ row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n return <LineListWidgetIsInEventCell row={row} />;\n }, []);\n\n const renderIsOwnCaseHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t`Indicates if the case is owned by the current user (the case is in a private data collection that is owned by the user's organization).`}\n >\n <CorporateFareIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n </Tooltip>\n );\n }, [t, theme]);\n\n const renderIsOwnCaseCell = useCallback(({ row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n return <LineListWidgetIsOwnCaseCell row={row} />;\n }, []);\n\n const renderSimilarCell = useCallback(({ row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const similarCaseIds = dashboardStore.getState().findSimilarCasesResults.reduce<string[]>((acc, result) => [...acc, ...result.similarCaseIds], []);\n if (similarCaseIds.includes(row.id)) {\n return (\n <TroubleshootIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n );\n }\n return null;\n }, [dashboardStore, theme]);\n\n\n const renderSimilarHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t`Indicates if the case has been identified as a similar case, based on the find similar cases result.`}\n >\n <TroubleshootIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n </Tooltip>\n );\n }, [t, theme]);\n\n\n const renderCell = useCallback(({ id, row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const rowValue = CaseUtil.getRowValue(row.content, completeCaseType.cols[id], completeCaseType);\n const legendaItem: StratificationLegendaItem = {\n caseIds: [row.id],\n color: stratification?.caseIdColors[row.id],\n columnType: completeCaseType.ref_cols[completeCaseType.cols[id].ref_col_id].col_type,\n rowValue,\n };\n if (id === stratification?.col?.id) {\n return (\n <LegendaItem\n item={legendaItem}\n />\n );\n }\n\n return (\n <>\n {rowValue.short}\n </>\n );\n }, [completeCaseType, stratification?.caseIdColors, stratification?.col?.id]);\n\n const frozenTableColumnsLeft = useMemo<TableColumn<CaseDbCase, CaseDbCompleteCaseType>[]>(() => {\n return [\n TableUtil.createReadableIndexColumn({\n getAriaLabel: (params: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => t('Show case information for {{index}}', { index: params.rowIndex + 1 }),\n }),\n TableUtil.createSelectableColumn(),\n {\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n id: 'isInEvent',\n isInitiallyVisible: true,\n renderCell: renderIsInEventCell,\n renderHeader: renderIsInEventHeader,\n resizable: false,\n type: 'text',\n widthPx: 24,\n } satisfies TableColumn<CaseDbCase, CaseDbCompleteCaseType>,\n {\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n id: 'isOwnCase',\n isInitiallyVisible: true,\n renderCell: renderIsOwnCaseCell,\n renderHeader: renderIsOwnCaseHeader,\n resizable: false,\n type: 'text',\n widthPx: 24,\n } satisfies TableColumn<CaseDbCase, CaseDbCompleteCaseType>,\n {\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n headerTooltipContent: t`Is similar case?`,\n id: 'similar',\n isInitiallyVisible: true,\n renderCell: renderSimilarCell,\n renderHeader: renderSimilarHeader,\n resizable: false,\n type: 'text',\n widthPx: 24,\n } satisfies TableColumn<CaseDbCase, CaseDbCompleteCaseType>,\n ];\n }, [renderIsInEventCell, renderIsInEventHeader, renderIsOwnCaseCell, renderIsOwnCaseHeader, t, renderSimilarCell, renderSimilarHeader]);\n\n const frozenTableColumnsRight = useMemo<TableColumn<CaseDbCase, CaseDbCompleteCaseType>[]>(() => {\n return [\n TableUtil.createActionsColumn({\n columnContext: null,\n getActions: (params: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const actions: ReactElement[] = [\n (\n <MenuItem\n key={'showInformation'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => openCaseInfoDialog(params.row.id, CASE_INFO_DIALOG_TAB_NAME.INFO)}\n >\n <ListItemIcon>\n <ArrowCircleRightIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Show information`}\n </ListItemText>\n </MenuItem>\n ),\n (\n <MenuItem\n key={'editInformation'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => openCaseInfoDialog(params.row.id, CASE_INFO_DIALOG_TAB_NAME.EDIT)}\n >\n <ListItemIcon>\n <EditIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Edit information`}\n </ListItemText>\n </MenuItem>\n ),\n (\n <MenuItem\n key={'share'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => openCaseInfoDialog(params.row.id, CASE_INFO_DIALOG_TAB_NAME.SHARING)}\n >\n <ListItemIcon>\n <ShareIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Share`}\n </ListItemText>\n </MenuItem>\n ),\n (\n <MenuItem\n key={'addToEvent'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => onAddToEventClick(params.row)}\n >\n <ListItemIcon>\n <CollectionIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Add to event`}\n </ListItemText>\n </MenuItem>\n ),\n ];\n return actions;\n },\n t,\n }),\n ];\n }, [onAddToEventClick, openCaseInfoDialog, t]);\n\n\n const columnStratificationCache = useMemo(() => {\n const cache: Record<string, Stratification> = {};\n if (!isCondensed) {\n return cache;\n }\n completeCaseType.ordered_col_ids.forEach((colId) => {\n const col = completeCaseType.cols[colId];\n cache[colId] = StratificationUtil.getStratification({\n col,\n completeCaseType,\n mode: STRATIFICATION_MODE.FIELD,\n sortedData,\n useExtraGradients: true,\n });\n });\n\n return cache;\n }, [completeCaseType, isCondensed, sortedData]);\n\n const cellColorGetter = useCallback((params: TableRowAndColumnParams<CaseDbCase, CaseDbCompleteCaseType>): string | undefined => {\n const columnStratification = columnStratificationCache[params.column.id];\n return columnStratification?.caseIdColors[params.row.id];\n }, [columnStratificationCache]);\n\n const cellTitleGetter = useCallback((params: TableRowAndColumnParams<CaseDbCase, CaseDbCompleteCaseType>): string | undefined => {\n const rowValue = CaseUtil.getRowValue(params.row.content, completeCaseType.cols[params.column.id], completeCaseType);\n return rowValue.isMissing ? undefined : rowValue.long;\n }, [completeCaseType]);\n\n const tableColumns = useMemo<TableColumn<CaseDbCase, CaseDbCompleteCaseType>[]>(() => {\n const { DATA_MISSING_CHARACTER } = ConfigService.getInstance<CaseDbConfig>().config.epi;\n\n const initialVisibleColumnIds = CaseTypeUtil.getInitialVisibleColIds(completeCaseType);\n const caseTypeTableColumns: TableColumn<CaseDbCase, CaseDbCompleteCaseType>[] = [];\n\n\n completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).forEach((dim) => {\n completeCaseType.ordered_col_ids_by_dim[dim.id].map(id => completeCaseType.cols[id]).forEach(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n const baseCaseTypeTableColumn: Partial<TableColumn<CaseDbCase, CaseDbCompleteCaseType, CaseDbCol>> = {\n cellColorGetter,\n cellTitleGetter,\n columnContext: col,\n headerName: col.label,\n headerTooltipContent: refCol.description,\n id: col.id,\n isInitiallyVisible: initialVisibleColumnIds.includes(col.id),\n };\n if (refCol.col_type === CaseDbColType.GENETIC_DISTANCE) {\n caseTypeTableColumns.push({\n ...baseCaseTypeTableColumn,\n cellTitleGetter: (params) => {\n const value = treeAddresses[col.id]?.addresses[params.row.id] ? `${treeAddresses[col.id].algorithmCode} ${treeAddresses[col.id].addresses[params.row.id]}` : undefined;\n return value ?? undefined;\n },\n comparatorFactory: ({ direction }: GetTableCellRowComparatorProps<TableColumnText<CaseDbCase, CaseDbCompleteCaseType>, CaseDbCompleteCaseType>) => (a: CaseDbCase, b: CaseDbCase) => {\n const sortValue = StringUtil.advancedSortComperator(treeAddresses[col.id]?.addresses?.[a.id], treeAddresses[col.id]?.addresses?.[b.id]);\n return direction === 'asc' ? sortValue : -sortValue;\n },\n type: 'text',\n valueGetter: (params) => {\n const value = treeAddresses[col.id]?.addresses[params.row.id] ? `${treeAddresses[col.id].algorithmCode} ${treeAddresses[col.id].addresses[params.row.id]}` : undefined;\n return value ?? DATA_MISSING_CHARACTER;\n },\n widthPx: 200,\n } as TableColumn<CaseDbCase, CaseDbCompleteCaseType>);\n } else {\n let cellRenderer: (params: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => ReactElement | string;\n if (refCol.col_type === CaseDbColType.ORGANIZATION) {\n cellRenderer = renderOrganizationCell;\n } else if (refCol.col_type === CaseDbColType.GENETIC_SEQUENCE) {\n cellRenderer = renderGeneticSequenceCell;\n } else {\n cellRenderer = renderCell;\n }\n\n caseTypeTableColumns.push({\n ...baseCaseTypeTableColumn,\n comparatorFactory: CaseDbTableUtil.createCaseTypeCellRowComperator,\n renderCell: cellRenderer,\n textAlign: ([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) ? 'right' : 'left',\n type: 'text',\n widthPx: getColumnWidth(col, col.label),\n } as TableColumn<CaseDbCase, CaseDbCompleteCaseType>);\n }\n });\n });\n\n return [\n ...frozenTableColumnsLeft,\n ...caseTypeTableColumns,\n ...frozenTableColumnsRight,\n ];\n }, [completeCaseType, frozenTableColumnsLeft, frozenTableColumnsRight, cellColorGetter, cellTitleGetter, treeAddresses, getColumnWidth, renderOrganizationCell, renderGeneticSequenceCell, renderCell]);\n\n const onRowMouseEnter = useCallback((row: CaseDbCase) => {\n dashboardContext.highlight({\n caseIds: [row.id],\n origin: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n });\n }, [dashboardContext]);\n\n\n const onRowMouseLeave = useCallback(() => {\n dashboardContext.highlight({\n caseIds: [],\n origin: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n });\n }, [dashboardContext]);\n\n useEffect(() => {\n setTableColumns(tableColumns);\n }, [setTableColumns, tableColumns]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting?.origin === DASHBOARD_COMPONENT_NAME.LINE_LIST) {\n return;\n }\n if (highlighting.scrollIntoView) {\n const firstHighlightedCaseId = highlighting.caseIds[0];\n const index = sortedData.findIndex(row => row.id === firstHighlightedCaseId);\n if (index !== -1) {\n tableRef.current?.scrollToIndex(index, () => {\n rowHighlightingSubject.next(highlighting.caseIds);\n });\n }\n } else {\n rowHighlightingSubject.next(highlighting.caseIds);\n }\n });\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, rowHighlightingSubject, sortedData]);\n\n useEpiLineListWidgetEmitDownloadOptions();\n\n const updateVisibleIndexDebounced = useDebouncedCallback((index: number) => {\n updateWidgetData<LineListWidgetData>(DASHBOARD_COMPONENT_NAME.LINE_LIST, {\n visibleItemItemIndex: index,\n });\n }, 500);\n\n const onTableVisibleItemIndexChange = useCallback((index: number) => {\n updateVisibleIndexDebounced(index);\n }, [updateVisibleIndexDebounced]);\n\n const onRangeChangedDebounced = useDebouncedCallback(async (range: ListRange) => {\n await LineListCaseSetMembersService.getInstance().loadRange(sortedData.slice(range.startIndex, Math.min(range.endIndex + 1, sortedData.length)).map(row => row.id));\n await LineListIsOwnCaseService.getInstance().loadRange(sortedData.slice(range.startIndex, Math.min(range.endIndex + 1, sortedData.length)).map(row => row.id), completeCaseType.id);\n }, ConfigService.getInstance<CaseDbConfig>().config.lineList.CASE_SET_MEMBERS_FETCH_DEBOUNCE_DELAY_MS, {\n leading: false,\n trailing: true,\n });\n\n const onRangeChanged = useCallback((range: ListRange) => {\n dashboardContext.lineListRangeSubject.next(range);\n void onRangeChangedDebounced(range);\n }, [dashboardContext, onRangeChangedDebounced]);\n\n useEffect(() => {\n return () => {\n LineListCaseSetMembersService.getInstance().cleanStaleQueue();\n LineListIsOwnCaseService.getInstance().cleanStaleQueue();\n };\n }, []);\n\n const onVerticalScrollPositionChange = useCallback((position: number) => {\n if (isNaN(position)) {\n return;\n }\n dashboardContext.linkedScrollSubject.next({\n origin: containerRef.current,\n position,\n });\n }, [dashboardContext]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.linkedScrollSubject.subscribe((data) => {\n if (data.origin === containerRef.current) {\n return;\n }\n tableRef.current.setVerticalScrollPosition(data.position);\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext]);\n\n const getRowName = useCallback((row: CaseDbCase): string => {\n return row.id;\n }, []);\n\n return (\n <DashboardWidget\n isLoading={isDataLoading}\n primaryMenu={<LineListWidgetPrimaryMenu caseSet={caseSet} />}\n secondaryMenu={<LineListWidgetSecondaryMenu />}\n title={<LineListWidgetTitle />}\n widgetName={DASHBOARD_COMPONENT_NAME.LINE_LIST}\n >\n <Box\n ref={containerRef}\n sx={{\n height: '100%',\n width: '100%',\n }}\n >\n <Table\n font={theme['gen-epix-ui-casedb'].lineList.font}\n forceHorizontalOverflow\n getRowName={getRowName}\n initialVisibleItemIndex={dashboardStore.getState().getWidgetData<LineListWidgetData>(DASHBOARD_COMPONENT_NAME.LINE_LIST)?.visibleItemItemIndex}\n onRangeChanged={onRangeChanged}\n onReadableIndexClick={onIndexCellClick}\n onRowMouseEnter={onRowMouseEnter}\n onRowMouseLeave={onRowMouseLeave}\n onVerticalScrollPositionChange={onVerticalScrollPositionChange}\n onVisibleItemIndexChange={onTableVisibleItemIndexChange}\n ref={tableRef}\n rowHeight={3}\n rowHighlightingSubject={rowHighlightingSubject}\n />\n </Box>\n </DashboardWidget>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAa,KAA8B,GAAM,EAAE,aAA4C;CAC7F,IAAM,CAAC,GAAW,KAAgB,EAAS,EAAI,GACzC,CAAC,GAAU,KAAe,EAAS,EAAK,GACxC,CAAC,GAAQ,KAAa,EAAS,EAAK,GACpC,IAAQ,EAAS;CAgBvB,OAdA,QAAgB;EAWd,aAV4B;GAC1B,IAAI;IACF,EAAU,MAAM,EAA8B,YAAY,CAAC,CAAC,MAAM,EAAI,EAAE,CAAC;GAC3E,QAAiB;IACf,EAAY,EAAI;GAClB,UAAU;IACR,EAAa,EAAK;GACpB;EACF,EAEK,CAAQ;CACf,GAAG,CAAC,EAAI,EAAE,CAAC,GAGT,kBAAC,GAAD,EAAA,UAAA;EACG,KACC,kBAAC,GAAD;GACE,MAAM;GACN,IAAI;IACF,WAAW;IACX,UAAU;GACZ;EACD,CAAA;EAEF,CAAC,KAAa,KACb,kBAAC,GAAD;GAAK,IAAI,EAAE,OAAO,GAAG,EAAM,QAAQ,MAAM,OAAO;aAC7C;EACE,CAAA;EAEN,CAAC,KAAa,CAAC,KAAY,KAC1B,kBAAC,GAAD;GACE,UAAU;GACV,OAAO;IACL,OAAO,EAAM,QAAQ,QAAQ;IAC7B,QAAQ;IACR,YAAY,EAAM,QAAQ,GAAI;IAC9B,UAAU;IACV,OAAO;GACT;EACD,CAAA;CAGA,EAAA,CAAA;AAET,CAAC,GCnDY,KAA8B,GAAM,EAAE,aAA4C;CAC7F,IAAM,CAAC,GAAW,KAAgB,EAAS,EAAI,GACzC,CAAC,GAAU,KAAe,EAAS,EAAK,GACxC,CAAC,GAAQ,KAAa,EAAS,EAAK,GACpC,IAAQ,EAAS;CAgBvB,OAdA,QAAgB;EAWd,aAV4B;GAC1B,IAAI;IACF,EAAU,MAAM,EAAyB,YAAY,CAAC,CAAC,MAAM,EAAI,EAAE,CAAC;GACtE,QAAiB;IACf,EAAY,EAAI;GAClB,UAAU;IACR,EAAa,EAAK;GACpB;EACF,EAEK,CAAQ;CACf,GAAG,CAAC,EAAI,EAAE,CAAC,GAGT,kBAAC,GAAD,EAAA,UAAA;EACG,KACC,kBAAC,GAAD;GACE,MAAM;GACN,IAAI;IACF,WAAW;IACX,UAAU;GACZ;EACD,CAAA;EAEF,CAAC,KAAa,KACb,kBAAC,GAAD;GAAK,IAAI,EAAE,OAAO,GAAG,EAAM,QAAQ,MAAM,OAAO;aAC7C;EACE,CAAA;EAEN,CAAC,KAAa,CAAC,KAAY,KAC1B,kBAAC,IAAD;GACE,UAAU;GACV,OAAO;IACL,OAAO,EAAM,QAAQ,QAAQ;IAC7B,QAAQ;IACR,YAAY,EAAM,QAAQ,GAAI;IAC9B,UAAU;IACV,OAAO;GACT;EACD,CAAA;CAGA,EAAA,CAAA;AAET,CAAC,GC9DY,WAA4B;CACvC,IAAM,IAAiB,EAAI,CAAqB,GAC1C,EAAE,MAAM,EAAe,GACvB,IAAa,EAAS,GAAgB,GAAY,MAAU,EAAM,UAAU,CAAC;CAGnF,OACE,kBAAC,GAAD;EACE,aAAW;EACX,WAAW;EACX,MAAM;EACN,IAAI;GACF,YAAY;GACZ,aAAY,MAAS,EAAM,QAAQ,CAAC;EACtC;YAEC,EAAE,+DAA+D;GAAE,eAZpD,EAAS,GAAgB,GAAY,MAAU,EAAM,WAAW,CAYG,CAAA,CAAY,UAAU;GAAG,YAAY,EAAW,UAAU;EAAE,CAAC;CACtI,CAAA;AAEhB,kCCSa,MAA6B,EACxC,iBACoC;CACpC,IAAM,IAAiB,EAAI,CAAqB,GAC1C,EAAE,SAAM,EAAe,GACvB,IAAc,EAAS,GAAgB,GAAY,MAAU,EAAM,WAAW,CAAC,GAC/E,IAAa,EAAS,GAAgB,GAAY,MAAU,EAAM,UAAU,CAAC,GAC7E,IAAmB,EAAS,GAAgB,GAAY,MAAU,EAAM,gBAAgB,CAAC,GACzF,IAAiB,EAAS,GAAgB,GAAY,MAAU,EAAM,cAAc,CAAC,GACrF,IAAU,EAAS,GAAgB,GAAY,MAAU,EAAM,OAAO,CAAC,GACvE,IAAiB,EAAS,GAAgB,GAAY,MAAU,EAAM,cAAc,CAAC,GACrF,IAA0B,EAAS,GAAgB,GAAY,MAAU,EAAM,uBAAuB,CAAC,GAEvG,IAAc,GAAa,GAAiB,GAA8D,MAC1G,EAAY,cACP,CAAC,CAAC,EAAY,YAAY;EAC/B,QAAQ;EACR,aAAa;EACb,IAAI,EAAY;EAChB;EACA;CACF,CAAC,IAEI,CAAC,EAAS,YAAY,EAAI,SAAS,EAAiB,KAAK,EAAY,KAAK,CAAgB,CAAC,CAAC,WAClG,CAAC,CAAgB,CAAC,GAEf,IAAqC,EAAY,YAAY;EAEjE,AADA,MAAM,EAAe,YAAY,CAAW,GAC5C,EAAe,CAAC,CAAC;CACnB,GAAG;EAAC;EAAgB;EAAa;CAAc,CAAC,GAE1C,IAAqB,EAAQ,MAAM,MAAW,aAAkB,KAAmB,EAAO,YAAY,SAAS,CAAC,GAChH,IAAkB,EAAe,EAAE,eAAY,CAAC,GAEhD,IAAiB,QAAc,GAAyB,SAAS,MAAW,EAAO,cAAc,KAAK,CAAC,GAAG,CAAC,CAAuB,CAAC,GAEnI,IAA0B,QACzB,GAAyB,SAGvB,EAAW,QAAQ,MAAQ,CAAC,EAAe,SAAS,EAAI,EAAE,CAAC,IAFzD,GAGR;EAAC;EAAyB;EAAY;CAAc,CAAC,GAElD,IAAkC,QAC/B,EAAwB,QAAQ,MAAQ,GAAa,SAAS,EAAI,EAAE,CAAC,GAC3E,CAAC,GAAyB,CAAW,CAAC,GAEnC,IAAe,QACZ,EAAW,QAAQ,MAAQ,GAAa,SAAS,EAAI,EAAE,CAAC,GAC9D,CAAC,GAAY,CAAW,CAAC;CA2G5B,OAAO,kBAAC,GAAD,EAAkB,MAzGZ,QAA8B;EACzC,IAAM,IAAgC,EAAqB,YAAY,CAAC,CAAC,uBAA4C,CAAC;GAAE,cAAc,EAAkB;GAAsB,iBAAiB,EAAqB;EAAQ,CAAC,CAAC,GACxN,IAA+B,EAAqB,YAAY,CAAC,CAAC,uBAA4C,CAAC;GAAE,cAAc,EAAkB;GAA0B,iBAAiB,EAAqB;EAAO,CAAC,CAAC,GAC1N,IAAoC,CAAC,CAAC,KAAW,EAAqB,YAAY,CAAC,CAAC,uBAA4C,CAAC;GAAE,cAAc,EAAkB;GAA0B,iBAAiB,EAAqB;EAAO,CAAC,CAAC,GAG5O,IAAsC;GAC1C,OAAO;IACL;KACE,UAAU;KACV,UAAU,CAAC,GAAa,UAAU,EAAe,SAAS;KAC1D,SAAS;KACT,OAAO,CAAC;IACV;IACA;KACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,8BAA8B;MAC/E,SAAS;MACT;MACA,cAAc;KAChB,CAAC;KACD,UAAU;KACV,OAAO,CAAC;IACV;IACA;KACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,8BAA8B;MAC/E,SAAS;MACT;MACA;KACF,CAAC;KACD,UAAU,CAAC,GAAa,UAAU;KAClC,OAAO,CAAC;IACV;IACA;KACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,0CAA0C,EAC3F,oBACF,CAAC;KACD,UAAU,CAAC,GAAyB;KACpC,OAAO,CAAC;IACV;GACF;GACA,OAAO,CAAC;EACV;EA4DA,OA1DI,KACF,EAAsB,MAAM,KAC1B;GACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,yBAAyB;IAC1E;IACA,MAAM;GACR,CAAC;GACD,UAAU,CAAC,GAAa;GACxB,OAAO,CAAC;EACV,CACF,GAGE,KACF,EAAsB,MAAM,KAC1B;GACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,6BAA6B;IAC9E,gBAAgB;IAChB,MAAM;GACR,CAAC;GACD,UAAU,CAAC,GAAa;GACxB,OAAO,CAAC;EACV,CACF,GAGE,KACF,EAAsB,MAAM,KAC1B;GACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,kCAAkC;IACnF;IACA,MAAM;GACR,CAAC;GACD,UAAU,CAAC,EAAgC;GAC3C,OAAO,CAAC;EACV,CACF,GAEE,EAAsB,MAAM,SAAS,MACvC,EAAsB,MAAM,EAAE,CAAC,UAAU,KAG3C,CAAA,GAAA,EAAA,QAAA,CAAK,EAAsB,KAAK,CAAC,CAAC,UAAU,IAE1C,EAAsB,MAAM,KAC1B;GACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,iBAAiB,CAAY;GAChF,UAAU,CAAC,GAAa;GACxB,OAAO,CAAC;EACV,CACF,GAQK,CAJL,GACA,CAGK;CACT,GAAG;EAAC;EAAS;EAAG,GAAa;EAAQ;EAAoB,EAAe;EAAQ;EAAoC,GAAyB;EAAQ;EAAiB;EAAY;EAAkB;EAAc;CAA+B,CAGxN,EAAO,CAAA;AAClC,GC/Ka,WAAoC;CAC/C,IAAM,IAAQ,EAAS,GACjB,IAAiB,EAAI,CAAqB,GAC1C,EAAE,SAAM,EAAe,GACvB,IAAe,EAAS,GAAgB,GAAY,MAAU,EAAM,cAA8B,EAAyB,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,GACjJ,IAAa,EAAS,GAAgB,GAAY,MAAU,EAAM,UAAU,CAAC,GAE7E,IAAoB,QAAkB;EAM1C,aAL4B;GAE1B,AADA,MAAM,EAAW,MAAM,IAAI,GAC3B,EAAgB,YAAY,CAAC,CAAC,KAAK,uBAAuB;EAC5D,EAEA,CAAQ;CACV,GAAG,CAAC,CAAU,CAAC;CAmBf,OAAO,kBAAC,GAAD,EAAkB,MAjBZ,QACJ,CACL;EACE,UAAU;EACV,UAAU;EACV,OAAO,CAAC;EACR,UACE,kBAAC,IAAD,EACE,IAAI,EACF,OAAO,IAAe,KAAA,IAAY,EAAM,QAAQ,MAAM,KACxD,EACD,CAAA;CAEL,CACF,GACC;EAAC;EAAc;EAAmB;EAAG,EAAM,QAAQ,MAAM;CAAI,CAEvC,EAAO,CAAA;AAClC,GCrCa,WAAgD;CAC3D,IAAM,EAAE,SAAM,EAAe,GACvB,IAAiB,EAAI,CAAqB,GAC1C,IAAa,EAAS,GAAgB,GAAY,MAAU,EAAM,UAAU,CAAC,GAC7E,IAAmB,EAAS,GAAgB,GAAY,MAAU,EAAM,gBAAgB,CAAC,GAEzF,IAAsB,QACnB,EAAe,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC,QAAO,MAAK,EAAE,SAAS,CAAC,CAAC,KAAI,MAAK,EAAE,EAAE,GACvG,CAAC,CAAc,CAAC;CAEnB,QAAgB;EACd,IAAM,KAAuB,MAA0B;GACrD,EAAgB,YAAY,CAAC,CAAC,KAAK,4BAA4B;IAC7D,OAAO,CACL;KACE,UAAU,CAAC,GAAY;KACvB,OAAO;MACL;OACE,UAAU,YAAY,EAAmB,gBAAgB,GAAY,EAAoB,GAAG,GAAkB,CAAC;OAC/G,OAAO,CAAC;MACV;MACA;OACE,gBAAgB,EAAmB,cAAc,GAAY,EAAoB,GAAG,GAAkB,CAAC;OACvG,OAAO,CAAC;MACV;MACA;OACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,8BAA8B,EAAE,OAAO,EAAW,CAAC;OACtG,OAAO,CAAC;MACV;MACA;OACE,gBAAgB;OAChB,UAAU;OACV,OAAO,CAAC;MACV;KACF;KACA,OAAO,CAAC;IACV,GACA;KACE,UAAU,EAAY,WAAW;KACjC,OAAO;MACL;OACE,UAAU,YAAY,EAAmB,gBAAgB,EAAc,gBAAgB,GAAY,CAAW,GAAG,EAAoB,GAAG,GAAkB,CAAC;OAC3J,OAAO,CAAC;MACV;MACA;OACE,gBAAgB,EAAmB,cAAc,EAAc,gBAAgB,GAAY,CAAW,GAAG,EAAoB,GAAG,GAAkB,CAAC;OACnJ,OAAO,CAAC;MACV;MACA;OACE,gBAAgB,EAAgB,YAAY,CAAC,CAAC,KAAK,8BAA8B,EAAE,OAAO,EAAW,QAAO,MAAK,EAAY,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;OAC9I,OAAO,CAAC;MACV;MACA;OACE,gBAAgB;OAChB,UAAU;OACV,OAAO,CAAC;MACV;KACF;KACA,OAAO,CAAC;IACV,CACF;IACA,MAAM,EAAyB;IAC/B,WAAW,CAAC;GACd,CAAC;EACH;EACA,EAAoB,EAAe,SAAS,CAAC,CAAC,WAAW;EACzD,IAAM,IAAc,EAAe,WAAW,GAAO,MAAc;GACjE,AAAI,KAAK,UAAU,EAAM,WAAW,MAAM,KAAK,UAAU,EAAU,WAAW,KAC5E,EAAoB,EAAM,WAAW;EAEzC,CAAC,GAEK,UAAmC;GACvC,EAAoB,EAAe,SAAS,CAAC,CAAC,WAAW;EAC3D,GACM,IAAkB,EAAgB,YAAY;EAEpD,OADA,EAAgB,iBAAiB,8BAA8B,CAA0B,SAC5E;GAOX,AANA,EAAgB,KAAK,4BAA4B;IAC/C,OAAO;IACP,MAAM,EAAyB;IAC/B,WAAW,CAAC;GACd,CAAC,GACD,EAAgB,oBAAoB,8BAA8B,CAA0B,GAC5F,EAAY;EACd;CACF,GAAG;EAAC;EAAkB;EAAgB;EAAqB;EAAY;CAAC,CAAC;AAC3E,GC1Ba,UAAuB;CAClC,IAAM,EAAE,eAAY,EAAI,CAAgB,GAClC,IAAmB,EAAI,CAAgB,GACvC,IAAe,GAAuB,IAAI,GAC1C,EAAE,SAAM,EAAe,GACvB,IAAQ,EAAS,GACjB,IAAyB,QAAc,IAAI,GAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,GACpE,IAAW,GAAiB,IAAI,GAEhC,IAAiB,EAAI,CAAqB,GAC1C,IAAmB,EAAS,IAAiB,MAAU,EAAM,gBAAgB,GAC7E,IAAa,EAAS,IAAiB,MAAU,EAAM,UAAU,GACjE,IAAc,EAAS,IAAiB,MAAU,EAAM,WAAW,GACnE,IAAiB,EAAS,IAAiB,MAAU,EAAM,gBAAgB,SAAS,EAAoB,QAAQ,EAAM,iBAAiB,IAAI,GAC3I,IAAmB,EAAS,IAAiB,MAAU,EAAM,gBAAgB,GAC7E,IAAgB,EAAS,IAAiB,MAAU,EAAM,aAAa,GACvE,IAAkB,EAAS,IAAiB,MAAU,EAAM,UAAU,GACtE,KAAgB,EAAS,IAAiB,MAAU,EAAM,aAAa;CAE7E,cACe;EACX,EAAiB,qBAAqB,KAAK,KAAA,CAAS;CACtD,GACC,CAAC,CAAgB,CAAC;CAErB,IAAM,IAAqB,GAAa,GAAgB,MAAuC;EAC7F,EAAgB,YAAY,CAAC,CAAC,KAAK,sBAAsB;GACvD;GACA,YAAY,EAAiB;GAC7B,YAAY;EACd,CAAC;CACH,GAAG,CAAC,EAAiB,EAAE,CAAC,GAElB,IAAoB,GAAa,MAAoB;EACzD,EAAgB,YAAY,CAAC,CAAC,KAAK,6BAA6B;GAC9D,gBAAgB;GAChB,MAAM,CAAC,CAAG;EACZ,CAAC;CACH,GAAG,CAAC,CAAO,CAAC,GAGN,KAAmB,GAAa,MAAoB;EACxD,EAAmB,EAAI,IAAI,EAA0B,IAAI;CAC3D,GAAG,CAAC,CAAkB,CAAC,GAEjB,KAAiB,GAAa,GAAgB,MAAkB;EACpE,IAAI,IAAgB,GAAO,SAAS;EACpC,EAAW,SAAQ,MAAO;GACxB,IAAM,IAAQ,EAAS,YAAY,EAAI,SAAS,GAAK,CAAgB,CAAC,CAAC;GACvE,AAAI,GAAO,SAAS,MAClB,IAAgB,EAAM;EAE1B,CAAC;EAED,IAAI,IAAW,CAAC,EAAM,QAAQ,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,IAAI,IAAgB;EACrE,AAAI,GAAgB,KAAK,OAAO,EAAI,OAClC,KAAsB,CAAC,EAAM,QAAQ,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE;EAG1D,IAAM,EAAE,qBAAkB,kDAA+C,EAAc,YAA0B,CAAC,CAAC,OAAO;EAC1H,OAAO,KAAK,IAAI,GAAkB,CAAQ,IAAI;CAChD,GAAG;EAAC;EAAkB;EAAY,GAAgB,KAAK;EAAI;CAAK,CAAC,GAE3D,KAA0B,GAAa,GAAwB,MAA6B;EAChG,EAAgB,YAAY,CAAC,CAAC,KAAK,4BAA4B;GAC7D;GACA;EACF,CAAC;CACH,GAAG,CAAC,CAAC,GAEC,KAAyB,GAAa,EAAE,OAAI,aAA8D;EAC9G,IAAM,IAAW,EAAS,YAAY,EAAI,SAAS,EAAiB,KAAK,IAAK,CAAgB;EAC9F,IAAI,EAAS,WACX,OAAO,EAAS;EAElB,IAAM,IAAyC;GAC7C,SAAS,CAAC,EAAI,EAAE;GAChB,OAAO,GAAgB,aAAa,EAAI;GACxC,YAAY,EAAiB,SAAS,EAAiB,KAAK,EAAG,CAAC,WAAW,CAAC;GAC5E;EACF,GAEM,IACJ,kBAAC,IAAD;GACE,OAAO;GACP,WAAW;GAEX,eAAe;IACb,GAAwB,EAAI,QAAQ,IAAK,EAAS,IAAI;GACxD;GACA,IAAI,EACF,QAAQ,UACV;aAEC,EAAS;EACN,CAAA;EAWR,OATI,MAAO,GAAgB,KAAK,KAE5B,kBAAC,GAAD;GACE,MAAM;aAEL;EACU,CAAA,IAGV;CACT,GAAG;EAAC;EAAkB;EAAyB,GAAgB;EAAc,GAAgB,KAAK;CAAE,CAAC,GAE/F,KAA6B,GAAa,GAAY,MAAoB;EAC9E,EAAgB,YAAY,CAAC,CAAC,KAAK,8BAA8B;GAC/D,OAAO,CAAC,CAAG;GACX,sBAAsB;EACxB,CAAC;CACH,GAAG,CAAC,CAAC,GAEC,KAA4B,GAAa,EAAE,OAAI,aAEjD,kBAAC,IAAD;EACE,OAAO;EACP,WAAW;EAEX,eAAe;GACb,GAA2B,GAAI,CAAG;EACpC;EACA,IAAI,EACF,QAAQ,UACV;YAEC,EAAI,QAAQ;CACT,CAAA,GAEP,CAAC,EAA0B,CAAC,GAEzB,KAAwB,QAE1B,kBAAC,GAAD;EACE,eAAa;EACb,OAAA;EACA,OAAO,CAAC;YAER,kBAAC,GAAD;GACE,UAAU;GACV,OAAO;IACL,OAAO,EAAM,QAAQ,QAAQ;IAC7B,QAAQ;IACR,YAAY,EAAM,QAAQ,GAAI;IAC9B,UAAU;IACV,OAAO;GACT;EACD,CAAA;CACM,CAAA,GAEV,CAAC,GAAG,CAAK,CAAC,GAEP,KAAsB,GAAa,EAAE,aAClC,kBAAC,IAAD,EAAkC,OAAM,CAAA,GAC9C,CAAC,CAAC,GAEC,KAAwB,QAE1B,kBAAC,GAAD;EACE,eAAa;EACb,OAAA;EACA,OAAO,CAAC;YAER,kBAAC,IAAD;GACE,UAAU;GACV,OAAO;IACL,OAAO,EAAM,QAAQ,QAAQ;IAC7B,QAAQ;IACR,YAAY,EAAM,QAAQ,GAAI;IAC9B,UAAU;IACV,OAAO;GACT;EACD,CAAA;CACM,CAAA,GAEV,CAAC,GAAG,CAAK,CAAC,GAEP,KAAsB,GAAa,EAAE,aAClC,kBAAC,IAAD,EAAkC,OAAM,CAAA,GAC9C,CAAC,CAAC,GAEC,KAAoB,GAAa,EAAE,aAChB,EAAe,SAAS,CAAC,CAAC,wBAAwB,QAAkB,GAAK,MAAW,CAAC,GAAG,GAAK,GAAG,EAAO,cAAc,GAAG,CAAC,CAC5I,CAAA,CAAe,SAAS,EAAI,EAAE,IAE9B,kBAAC,GAAD;EACE,UAAU;EACV,OAAO;GACL,OAAO,EAAM,QAAQ,QAAQ;GAC7B,QAAQ;GACR,YAAY,EAAM,QAAQ,GAAI;GAC9B,UAAU;GACV,OAAO;EACT;CACD,CAAA,IAGE,MACN,CAAC,GAAgB,CAAK,CAAC,GAGpB,KAAsB,QAExB,kBAAC,GAAD;EACE,eAAa;EACb,OAAA;EACA,OAAO,CAAC;YAER,kBAAC,GAAD;GACE,UAAU;GACV,OAAO;IACL,OAAO,EAAM,QAAQ,QAAQ;IAC7B,QAAQ;IACR,YAAY,EAAM,QAAQ,GAAI;IAC9B,UAAU;IACV,OAAO;GACT;EACD,CAAA;CACM,CAAA,GAEV,CAAC,GAAG,CAAK,CAAC,GAGP,KAAa,GAAa,EAAE,OAAI,aAA8D;EAClG,IAAM,IAAW,EAAS,YAAY,EAAI,SAAS,EAAiB,KAAK,IAAK,CAAgB,GACxF,IAAyC;GAC7C,SAAS,CAAC,EAAI,EAAE;GAChB,OAAO,GAAgB,aAAa,EAAI;GACxC,YAAY,EAAiB,SAAS,EAAiB,KAAK,EAAG,CAAC,WAAW,CAAC;GAC5E;EACF;EASA,OARI,MAAO,GAAgB,KAAK,KAE5B,kBAAC,GAAD,EACE,MAAM,EACP,CAAA,IAKH,kBAAA,IAAA,EAAA,UACG,EAAS,MACV,CAAA;CAEN,GAAG;EAAC;EAAkB,GAAgB;EAAc,GAAgB,KAAK;CAAE,CAAC,GAEtE,KAAyB,QACtB;EACL,EAAU,0BAA0B,EAClC,eAAe,MAA+D,EAAE,uCAAuC,EAAE,OAAO,EAAO,WAAW,EAAE,CAAC,EACvJ,CAAC;EACD,EAAU,uBAAuB;EACjC;GACE,QAAQ,EAAoB;GAC5B,IAAI;GACJ,oBAAoB;GACpB,YAAY;GACZ,cAAc;GACd,WAAW;GACX,MAAM;GACN,SAAS;EACX;EACA;GACE,QAAQ,EAAoB;GAC5B,IAAI;GACJ,oBAAoB;GACpB,YAAY;GACZ,cAAc;GACd,WAAW;GACX,MAAM;GACN,SAAS;EACX;EACA;GACE,QAAQ,EAAoB;GAC5B,sBAAsB,CAAC;GACvB,IAAI;GACJ,oBAAoB;GACpB,YAAY;GACZ,cAAc;GACd,WAAW;GACX,MAAM;GACN,SAAS;EACX;CACF,GACC;EAAC;EAAqB;EAAuB;EAAqB;EAAuB;EAAG;EAAmB;CAAmB,CAAC,GAEhI,KAA0B,QACvB,CACL,EAAU,oBAAoB;EAC5B,eAAe;EACf,aAAa,MA2DJ;GAxDH,kBAAC,GAAD;IAGE,eAAe,EAAmB,EAAO,IAAI,IAAI,EAA0B,IAAI;cAHjF,CAKE,kBAAC,GAAD,EAAA,UACE,kBAAC,IAAD,CAAuB,CAAA,EACX,CAAA,GACd,kBAAC,GAAD,EAAA,UACG,CAAC,mBACU,CAAA,CACN;MAVH,iBAUG;GAGV,kBAAC,GAAD;IAGE,eAAe,EAAmB,EAAO,IAAI,IAAI,EAA0B,IAAI;cAHjF,CAKE,kBAAC,GAAD,EAAA,UACE,kBAAC,IAAD,CAAW,CAAA,EACC,CAAA,GACd,kBAAC,GAAD,EAAA,UACG,CAAC,mBACU,CAAA,CACN;MAVH,iBAUG;GAGV,kBAAC,GAAD;IAGE,eAAe,EAAmB,EAAO,IAAI,IAAI,EAA0B,OAAO;cAHpF,CAKE,kBAAC,GAAD,EAAA,UACE,kBAAC,IAAD,CAAY,CAAA,EACA,CAAA,GACd,kBAAC,GAAD,EAAA,UACG,CAAC,QACU,CAAA,CACN;MAVH,OAUG;GAGV,kBAAC,GAAD;IAGE,eAAe,EAAkB,EAAO,GAAG;cAH7C,CAKE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,CAAiB,CAAA,EACL,CAAA,GACd,kBAAC,GAAD,EAAA,UACG,CAAC,eACU,CAAA,CACN;MAVH,YAUG;EAGP;EAET;CACF,CAAC,CACH,GACC;EAAC;EAAmB;EAAoB;CAAC,CAAC,GAGvC,KAA4B,QAAc;EAC9C,IAAM,IAAwC,CAAC;EAe/C,OAdK,KAGL,EAAiB,gBAAgB,SAAS,MAAU;GAClD,IAAM,IAAM,EAAiB,KAAK;GAClC,EAAM,KAAS,EAAmB,kBAAkB;IAClD;IACA;IACA,MAAM,EAAoB;IAC1B;IACA,mBAAmB;GACrB,CAAC;EACH,CAAC,GAXQ;CAcX,GAAG;EAAC;EAAkB;EAAa;CAAU,CAAC,GAExC,KAAkB,GAAa,MACN,GAA0B,EAAO,OAAO,GAC9D,EAAsB,aAAa,EAAO,IAAI,KACpD,CAAC,EAAyB,CAAC,GAExB,IAAkB,GAAa,MAA4F;EAC/H,IAAM,IAAW,EAAS,YAAY,EAAO,IAAI,SAAS,EAAiB,KAAK,EAAO,OAAO,KAAK,CAAgB;EACnH,OAAO,EAAS,YAAY,KAAA,IAAY,EAAS;CACnD,GAAG,CAAC,CAAgB,CAAC,GAEf,KAAe,QAAiE;EACpF,IAAM,EAAE,8BAA2B,EAAc,YAA0B,CAAC,CAAC,OAAO,KAE9E,IAA0B,EAAa,wBAAwB,CAAgB,GAC/E,IAA0E,CAAC;EAuDjF,OApDA,EAAiB,gBAAgB,KAAI,MAAK,EAAiB,KAAK,EAAE,CAAC,CAAC,SAAS,MAAQ;GACnF,EAAiB,uBAAuB,EAAI,GAAG,CAAC,KAAI,MAAM,EAAiB,KAAK,EAAG,CAAC,CAAC,SAAQ,MAAO;IAClG,IAAM,IAAS,EAAiB,SAAS,EAAI,aACvC,IAA+F;KACnG;KACA;KACA,eAAe;KACf,YAAY,EAAI;KAChB,sBAAsB,EAAO;KAC7B,IAAI,EAAI;KACR,oBAAoB,EAAwB,SAAS,EAAI,EAAE;IAC7D;IACA,IAAI,EAAO,aAAa,EAAc,kBACpC,EAAqB,KAAK;KACxB,GAAG;KACH,kBAAkB,OACF,EAAc,EAAI,GAAG,EAAE,UAAU,EAAO,IAAI,MAAM,GAAG,EAAc,EAAI,GAAG,CAAC,cAAc,GAAG,EAAc,EAAI,GAAG,CAAC,UAAU,EAAO,IAAI,QAAQ,KAAA,MAC7I,KAAA;KAElB,oBAAoB,EAAE,oBAA8H,GAAe,MAAkB;MACnL,IAAM,IAAY,GAAW,uBAAuB,EAAc,EAAI,GAAG,EAAE,YAAY,EAAE,KAAK,EAAc,EAAI,GAAG,EAAE,YAAY,EAAE,GAAG;MACtI,OAAO,MAAc,QAAQ,IAAY,CAAC;KAC5C;KACA,MAAM;KACN,cAAc,OACE,EAAc,EAAI,GAAG,EAAE,UAAU,EAAO,IAAI,MAAM,GAAG,EAAc,EAAI,GAAG,CAAC,cAAc,GAAG,EAAc,EAAI,GAAG,CAAC,UAAU,EAAO,IAAI,QAAQ,KAAA,MAC7I;KAElB,SAAS;IACX,CAAoD;SAC/C;KACL,IAAI;KASJ,AARA,AAKE,IALE,EAAO,aAAa,EAAc,eACrB,KACN,EAAO,aAAa,EAAc,mBAC5B,KAEA,IAGjB,EAAqB,KAAK;MACxB,GAAG;MACH,mBAAmB,EAAgB;MACnC,YAAY;MACZ,WAAY;OAAC,EAAc;OAAW,EAAc;OAAW,EAAc;OAAW,EAAc;OAAW,EAAc;OAAW,EAAc;OAAW,EAAc;OAAW,EAAc;MAAS,CAAC,CAAqB,SAAS,EAAO,QAAQ,IAAI,UAAU;MAC/Q,MAAM;MACN,SAAS,GAAe,GAAK,EAAI,KAAK;KACxC,CAAoD;IACtD;GACF,CAAC;EACH,CAAC,GAEM;GACL,GAAG;GACH,GAAG;GACH,GAAG;EACL;CACF,GAAG;EAAC;EAAkB;EAAwB;EAAyB;EAAiB;EAAiB;EAAe;EAAgB;EAAwB;EAA2B;CAAU,CAAC,GAEhM,KAAkB,GAAa,MAAoB;EACvD,EAAiB,UAAU;GACzB,SAAS,CAAC,EAAI,EAAE;GAChB,QAAQ,EAAyB;EACnC,CAAC;CACH,GAAG,CAAC,CAAgB,CAAC,GAGf,KAAkB,QAAkB;EACxC,EAAiB,UAAU;GACzB,SAAS,CAAC;GACV,QAAQ,EAAyB;EACnC,CAAC;CACH,GAAG,CAAC,CAAgB,CAAC;CA4BrB,AA1BA,QAAgB;EACd,EAAgB,EAAY;CAC9B,GAAG,CAAC,GAAiB,EAAY,CAAC,GAElC,QAAgB;EACd,IAAM,IAAc,EAAiB,iBAAiB,WAAW,MAAiB;GAC5E,OAAc,WAAW,EAAyB,WAGtD,IAAI,EAAa,gBAAgB;IAC/B,IAAM,IAAyB,EAAa,QAAQ,IAC9C,IAAQ,EAAW,WAAU,MAAO,EAAI,OAAO,CAAsB;IAC3E,AAAI,MAAU,MACZ,EAAS,SAAS,cAAc,SAAa;KAC3C,EAAuB,KAAK,EAAa,OAAO;IAClD,CAAC;GAEL,OACE,EAAuB,KAAK,EAAa,OAAO;EAEpD,CAAC;EACD,aAAa;GACX,EAAY;EACd;CACF,GAAG;EAAC;EAAkB;EAAwB;CAAU,CAAC,GAEzD,GAAwC;CAExC,IAAM,KAA8B,GAAsB,MAAkB;EAC1E,EAAqC,EAAyB,WAAW,EACvE,sBAAsB,EACxB,CAAC;CACH,GAAG,GAAG,GAEA,KAAgC,GAAa,MAAkB;EACnE,GAA4B,CAAK;CACnC,GAAG,CAAC,EAA2B,CAAC,GAE1B,IAA0B,EAAqB,OAAO,MAAqB;EAE/E,AADA,MAAM,EAA8B,YAAY,CAAC,CAAC,UAAU,EAAW,MAAM,EAAM,YAAY,KAAK,IAAI,EAAM,WAAW,GAAG,EAAW,MAAM,CAAC,CAAC,CAAC,KAAI,MAAO,EAAI,EAAE,CAAC,GAClK,MAAM,EAAyB,YAAY,CAAC,CAAC,UAAU,EAAW,MAAM,EAAM,YAAY,KAAK,IAAI,EAAM,WAAW,GAAG,EAAW,MAAM,CAAC,CAAC,CAAC,KAAI,MAAO,EAAI,EAAE,GAAG,EAAiB,EAAE;CACpL,GAAG,EAAc,YAA0B,CAAC,CAAC,OAAO,SAAS,0CAA0C;EACrG,SAAS;EACT,UAAU;CACZ,CAAC,GAEK,KAAiB,GAAa,MAAqB;EAEvD,AADA,EAAiB,qBAAqB,KAAK,CAAK,GAChD,EAA6B,CAAK;CACpC,GAAG,CAAC,GAAkB,CAAuB,CAAC;CAE9C,cACe;EAEX,AADA,EAA8B,YAAY,CAAC,CAAC,gBAAgB,GAC5D,EAAyB,YAAY,CAAC,CAAC,gBAAgB;CACzD,GACC,CAAC,CAAC;CAEL,IAAM,KAAiC,GAAa,MAAqB;EACnE,MAAM,CAAQ,KAGlB,EAAiB,oBAAoB,KAAK;GACxC,QAAQ,EAAa;GACrB;EACF,CAAC;CACH,GAAG,CAAC,CAAgB,CAAC;CAErB,QAAgB;EACd,IAAM,IAAc,EAAiB,oBAAoB,WAAW,MAAS;GACvE,EAAK,WAAW,EAAa,WAGjC,EAAS,QAAQ,0BAA0B,EAAK,QAAQ;EAC1D,CAAC;EAED,aAAa;GACX,EAAY;EACd;CACF,GAAG,CAAC,CAAgB,CAAC;CAErB,IAAM,KAAa,GAAa,MACvB,EAAI,IACV,CAAC,CAAC;CAEL,OACE,kBAAC,GAAD;EACE,WAAW;EACX,aAAa,kBAAC,IAAD,EAAoC,WAAU,CAAA;EAC3D,eAAe,kBAAC,IAAD,CAA8B,CAAA;EAC7C,OAAO,kBAAC,IAAD,CAAsB,CAAA;EAC7B,YAAY,EAAyB;YAErC,kBAAC,GAAD;GACE,KAAK;GACL,IAAI;IACF,QAAQ;IACR,OAAO;GACT;aAEA,kBAAC,IAAD;IACE,MAAM,EAAM,qBAAqB,CAAC,SAAS;IAC3C,yBAAA;IACY;IACZ,yBAAyB,EAAe,SAAS,CAAC,CAAC,cAAkC,EAAyB,SAAS,CAAC,EAAE;IAC1G;IAChB,sBAAsB;IACL;IACA;IACe;IAChC,0BAA0B;IAC1B,KAAK;IACL,WAAW;IACa;GACzB,CAAA;EACE,CAAA;CACU,CAAA;AAErB"}
1
+ {"version":3,"file":"LineListWidget.js","names":[],"sources":["../../src/components/ui/LineListWidget/LineListWidgetIsInEventCell.tsx","../../src/components/ui/LineListWidget/LineListWidgetIsOwnCaseCell.tsx","../../src/components/ui/LineListWidget/LineListWidgetTitle.tsx","../../src/components/ui/LineListWidget/LineListWidgetPrimaryMenu.tsx","../../src/components/ui/LineListWidget/LineListWidgetSecondaryMenu.tsx","../../src/components/ui/LineListWidget/useEpiLineListWidgetEmitDownloadOptions.tsx","../../src/components/ui/LineListWidget/LineListWidget.tsx"],"sourcesContent":["import {\n Box,\n CircularProgress,\n useTheme,\n} from '@mui/material';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport {\n memo,\n useEffect,\n useState,\n} from 'react';\n\nimport CollectionIcon from '../../../assets/icons/CollectionIcon.svg?react';\nimport { LineListCaseSetMembersService } from '../../../classes/services/LineListService/LineListCaseSetMembersService';\n\ntype LineListWidgetIsInEventCellProps = {\n readonly row: CaseDbCase;\n};\n\nexport const LineListWidgetIsInEventCell = memo(({ row }: LineListWidgetIsInEventCellProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [isTrue, setIsTrue] = useState(false);\n const theme = useTheme();\n\n useEffect(() => {\n const perform = async () => {\n try {\n setIsTrue(await LineListCaseSetMembersService.getInstance().query(row.id));\n } catch (_error) {\n setHasError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n void perform();\n }, [row.id]);\n\n return (\n <Box>\n {isLoading && (\n <CircularProgress\n size={16}\n sx={{\n marginTop: '4px',\n position: 'absolute',\n }}\n />\n )}\n {!isLoading && hasError && (\n <Box sx={{ color: `${theme.palette.error.main}` }}>\n {'?'}\n </Box>\n )}\n {!isLoading && !hasError && isTrue && (\n <CollectionIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n )}\n\n </Box>\n );\n});\n","import {\n Box,\n CircularProgress,\n useTheme,\n} from '@mui/material';\nimport type { CaseDbCase } from '@gen-epix/api-casedb';\nimport {\n memo,\n useEffect,\n useState,\n} from 'react';\nimport CorporateFareIcon from '@mui/icons-material/CorporateFare';\n\nimport { LineListIsOwnCaseService } from '../../../classes/services/LineListService/LineListIsOwnCaseService';\n\ntype LineListWidgetIsOwnCaseCellProps = {\n readonly row: CaseDbCase;\n};\n\nexport const LineListWidgetIsOwnCaseCell = memo(({ row }: LineListWidgetIsOwnCaseCellProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [isTrue, setIsTrue] = useState(false);\n const theme = useTheme();\n\n useEffect(() => {\n const perform = async () => {\n try {\n setIsTrue(await LineListIsOwnCaseService.getInstance().query(row.id));\n } catch (_error) {\n setHasError(true);\n } finally {\n setIsLoading(false);\n }\n };\n\n void perform();\n }, [row.id]);\n\n return (\n <Box>\n {isLoading && (\n <CircularProgress\n size={16}\n sx={{\n marginTop: '4px',\n position: 'absolute',\n }}\n />\n )}\n {!isLoading && hasError && (\n <Box sx={{ color: `${theme.palette.error.main}` }}>\n {'?'}\n </Box>\n )}\n {!isLoading && !hasError && isTrue && (\n <CorporateFareIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n )}\n\n </Box>\n );\n});\n","import { use } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport { Typography } from '@mui/material';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\n\nexport const LineListWidgetTitle = () => {\n const dashboardStore = use(DashboardStoreContext);\n const { t } = useTranslation();\n const sortedData = useStore(dashboardStore, useShallow((state) => state.sortedData));\n const selectedIds = useStore(dashboardStore, useShallow((state) => state.selectedIds));\n\n return (\n <Typography\n aria-live={'polite'}\n component={'div'}\n role={'status'}\n sx={{\n fontWeight: 600,\n lineHeight: theme => theme.spacing(3),\n }}\n >\n {t('Line list: {{shownCount}} cases, {{selectedCount}} selected', { selectedCount: selectedIds.length ?? 0, shownCount: sortedData.length ?? 0 })}\n </Typography>\n );\n};\n","import {\n use,\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport type {\n CaseDbApiPermission,\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCommandName,\n CaseDbPermissionType,\n} from '@gen-epix/api-casedb';\nimport type { MenuItemData } from '@gen-epix/ui-core-components/models/nestedMenu';\nimport type { TableColumn } from '@gen-epix/ui-client-common/models/table';\nimport { AuthorizationService } from '@gen-epix/ui-client-common/classes/services/AuthorizationService';\nimport { useColumnsMenu } from '@gen-epix/ui-client-common/hooks/useColumnsMenu';\nimport last from 'lodash/last';\n\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { WidgetMenu } from '../WidgetMenu';\nimport { SelectionFilter } from '../../../classes/filters/SelectionFilter';\n\n\nexport type LineListWidgetPrimaryMenuProps = {\n readonly caseSet?: CaseDbCaseSet;\n};\n\n\nexport const LineListWidgetPrimaryMenu = ({\n caseSet,\n}: LineListWidgetPrimaryMenuProps) => {\n const dashboardStore = use(DashboardStoreContext);\n const { t } = useTranslation();\n const selectedIds = useStore(dashboardStore, useShallow((state) => state.selectedIds));\n const sortedData = useStore(dashboardStore, useShallow((state) => state.sortedData));\n const completeCaseType = useStore(dashboardStore, useShallow((state) => state.completeCaseType));\n const setFilterValue = useStore(dashboardStore, useShallow((state) => state.setFilterValue));\n const filters = useStore(dashboardStore, useShallow((state) => state.filters));\n const setSelectedIds = useStore(dashboardStore, useShallow((state) => state.setSelectedIds));\n const findSimilarCasesResults = useStore(dashboardStore, useShallow((state) => state.findSimilarCasesResults));\n\n const hasCellData = useCallback((row: CaseDbCase, tableColumn: TableColumn<CaseDbCase, CaseDbCompleteCaseType>, rowIndex: number) => {\n if (tableColumn.valueGetter) {\n return !!tableColumn.valueGetter({\n column: tableColumn,\n dataContext: completeCaseType,\n id: tableColumn.id,\n row,\n rowIndex,\n });\n }\n return !CaseUtil.getRowValue(row.content, completeCaseType.cols[tableColumn.id], completeCaseType).isMissing;\n }, [completeCaseType]);\n\n const createFilterFromSelectedRowCaseIds = useCallback(async () => {\n await setFilterValue('selected', selectedIds);\n setSelectedIds([]);\n }, [setFilterValue, selectedIds, setSelectedIds]);\n\n const hasSelectionFilter = filters.some((filter) => filter instanceof SelectionFilter && filter.filterValue.length > 0);\n const columnsMenuItem = useColumnsMenu({ hasCellData });\n\n const similarCaseIds = useMemo(() => findSimilarCasesResults?.flatMap((result) => result.similarCaseIds) || [], [findSimilarCasesResults]);\n\n const rowsWithoutSimilarCases = useMemo(() => {\n if (!findSimilarCasesResults?.length) {\n return sortedData;\n }\n return sortedData.filter((row) => !similarCaseIds.includes(row.id));\n }, [findSimilarCasesResults, sortedData, similarCaseIds]);\n\n const selectedRowsWithoutSimilarCases = useMemo(() => {\n return rowsWithoutSimilarCases.filter((row) => selectedIds?.includes(row.id));\n }, [rowsWithoutSimilarCases, selectedIds]);\n\n const selectedRows = useMemo(() => {\n return sortedData.filter((row) => selectedIds?.includes(row.id));\n }, [sortedData, selectedIds]);\n\n const menu = useMemo<MenuItemData[]>(() => {\n const shouldShowCreateEventMenuItem = AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([{ command_name: CaseDbCommandName.CreateCaseSetCommand, permission_type: CaseDbPermissionType.EXECUTE }]);\n const shouldShowAddToEventMenuItem = AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([{ command_name: CaseDbCommandName.CaseSetMemberCrudCommand, permission_type: CaseDbPermissionType.CREATE }]);\n const shouldShowRemoveFromEventMenuItem = !!caseSet && AuthorizationService.getInstance().doesUserHavePermission<CaseDbApiPermission>([{ command_name: CaseDbCommandName.CaseSetMemberCrudCommand, permission_type: CaseDbPermissionType.DELETE }]);\n const shouldShowBulkEditCaseMenuItem = true;\n\n const actionsColumnMenuItem: MenuItemData = {\n items: [\n {\n callback: createFilterFromSelectedRowCaseIds,\n disabled: !selectedIds?.length || similarCaseIds.length > 0,\n divider: true,\n label: t`Create filter from selected cases`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openFindSimilarCasesDialog', {\n allRows: sortedData,\n completeCaseType,\n selectedRows: sortedData,\n }),\n disabled: hasSelectionFilter,\n label: t`Find similar cases`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openFindSimilarCasesDialog', {\n allRows: sortedData,\n completeCaseType,\n selectedRows,\n }),\n disabled: !selectedIds?.length || hasSelectionFilter,\n label: t`Find similar cases (based on selected cases)`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openRemoveFindSimilarCasesResultDialog', {\n completeCaseType,\n }),\n disabled: !findSimilarCasesResults?.length,\n label: t`Remove similar cases from results`,\n },\n ],\n label: t`Actions`,\n };\n\n if (shouldShowCreateEventMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openCreateEventDialog', {\n completeCaseType,\n rows: selectedRows,\n }),\n disabled: !selectedIds?.length,\n label: t`Create new event with selected cases`,\n },\n );\n }\n\n if (shouldShowAddToEventMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openAddCasesToEventDialog', {\n currentCaseSet: caseSet,\n rows: selectedRows,\n }),\n disabled: !selectedIds?.length,\n label: t`Add selected cases to an existing event`,\n },\n );\n }\n\n if (shouldShowRemoveFromEventMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openRemoveCasesFromEventDialog', {\n caseSet,\n rows: selectedRowsWithoutSimilarCases,\n }),\n disabled: !selectedRowsWithoutSimilarCases.length,\n label: t`Remove selected cases from this event`,\n },\n );\n }\n if (actionsColumnMenuItem.items.length > 3) {\n actionsColumnMenuItem.items[3].divider = true;\n }\n\n last(actionsColumnMenuItem.items).divider = true;\n if (shouldShowBulkEditCaseMenuItem) {\n actionsColumnMenuItem.items.push(\n {\n callback: () => EventBusService.getInstance().emit('openEditCases', selectedRows),\n disabled: !selectedIds?.length,\n label: t`Edit selected cases`,\n },\n );\n }\n\n const menus: MenuItemData[] = [\n columnsMenuItem,\n actionsColumnMenuItem,\n ];\n\n return menus;\n }, [caseSet, t, selectedIds?.length, hasSelectionFilter, similarCaseIds.length, createFilterFromSelectedRowCaseIds, findSimilarCasesResults?.length, columnsMenuItem, sortedData, completeCaseType, selectedRows, selectedRowsWithoutSimilarCases]);\n\n\n return <WidgetMenu menu={menu} />;\n};\n","import {\n use,\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport LinkIcon from '@mui/icons-material/Link';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\nimport { useTheme } from '@mui/material';\nimport type { MenuItemData } from '@gen-epix/ui-core-components/models/nestedMenu';\n\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { WidgetMenu } from '../WidgetMenu';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport type { TreeWidgetData } from '../../../models/dashboard';\n\nexport const LineListWidgetSecondaryMenu = () => {\n const theme = useTheme();\n const dashboardStore = use(DashboardStoreContext);\n const { t } = useTranslation();\n const isTreeLinked = useStore(dashboardStore, useShallow((state) => state.getWidgetData<TreeWidgetData>(DASHBOARD_COMPONENT_NAME.TREE).zoomLevel === 1));\n const setSorting = useStore(dashboardStore, useShallow((state) => state.setSorting));\n\n const onLinkButtonClick = useCallback(() => {\n const perform = async () => {\n await setSorting(null, null);\n EventBusService.getInstance().emit('onLinkLineListAndTree');\n };\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n perform();\n }, [setSorting]);\n\n const menu = useMemo<MenuItemData[]>(() => {\n return [\n {\n callback: onLinkButtonClick,\n disabled: isTreeLinked,\n label: t`Link and snap the Tree to the Line list (resets tree zoom level and Line List sorting)`,\n leftIcon: (\n <LinkIcon\n sx={{\n color: isTreeLinked ? undefined : theme.palette.error.main,\n }}\n />\n ),\n },\n ];\n }, [isTreeLinked, onLinkButtonClick, t, theme.palette.error.main]);\n\n return <WidgetMenu menu={menu} />;\n};\n","import {\n use,\n useCallback,\n useEffect,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useShallow } from 'zustand/shallow';\n\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseDbDownloadUtil } from '../../../utils/CaseDbDownloadUtil';\nimport { DashboardUtil } from '../../../utils/DashboardUtil';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\n\nexport const useEpiLineListWidgetEmitDownloadOptions = () => {\n const { t } = useTranslation();\n const dashboardStore = use(DashboardStoreContext);\n const sortedData = useStore(dashboardStore, useShallow((state) => state.sortedData));\n const completeCaseType = useStore(dashboardStore, useShallow((state) => state.completeCaseType));\n\n const getVisibleColumnIds = useCallback(() => {\n return dashboardStore.getState().getCurrentColumnVisualSettings().filter(x => x.isVisible).map(x => x.id);\n }, [dashboardStore]);\n\n useEffect(() => {\n const emitDownloadOptions = (selectedIds: string[]) => {\n EventBusService.getInstance().emit('onDownloadOptionsChanged', {\n items: [\n {\n disabled: !sortedData?.length,\n items: [\n {\n callback: async () => CaseDbDownloadUtil.downloadAsExcel(sortedData, getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as Excel`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadAsCsv(sortedData, getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as CSV`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openSequenceDownloadDialog', { cases: sortedData }),\n label: t`Download sequences`,\n },\n {\n callback: () => null,\n disabled: true,\n label: t`Download allele profiles`,\n },\n ],\n label: t`All rows`,\n },\n {\n disabled: selectedIds.length === 0,\n items: [\n {\n callback: async () => CaseDbDownloadUtil.downloadAsExcel(DashboardUtil.getSelectedRows(sortedData, selectedIds), getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as Excel`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadAsCsv(DashboardUtil.getSelectedRows(sortedData, selectedIds), getVisibleColumnIds(), completeCaseType, t),\n label: t`Download as CSV`,\n },\n {\n callback: () => EventBusService.getInstance().emit('openSequenceDownloadDialog', { cases: sortedData.filter(c => selectedIds.includes(c.id)) }),\n label: t`Download sequences`,\n },\n {\n callback: () => null,\n disabled: true,\n label: t`Download allele profiles`,\n },\n ],\n label: t`Selected rows`,\n },\n ],\n zone: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n zoneLabel: t`Line list`,\n });\n };\n emitDownloadOptions(dashboardStore.getState().selectedIds);\n const unsubscribe = dashboardStore.subscribe((state, prevState) => {\n if (JSON.stringify(state.selectedIds) !== JSON.stringify(prevState.selectedIds)) {\n emitDownloadOptions(state.selectedIds);\n }\n });\n\n const onDownloadOptionsRequested = () => {\n emitDownloadOptions(dashboardStore.getState().selectedIds);\n };\n const eventBusService = EventBusService.getInstance();\n eventBusService.addEventListener('onDownloadOptionsRequested', onDownloadOptionsRequested);\n return () => {\n eventBusService.emit('onDownloadOptionsChanged', {\n items: null,\n zone: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n zoneLabel: t`Line list`,\n });\n eventBusService.removeEventListener('onDownloadOptionsRequested', onDownloadOptionsRequested);\n unsubscribe();\n };\n }, [completeCaseType, dashboardStore, getVisibleColumnIds, sortedData, t]);\n};\n","import {\n Box,\n Link,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useStore } from 'zustand';\nimport { useDebouncedCallback } from 'use-debounce';\nimport type { ListRange } from 'react-virtuoso';\nimport TroubleshootIcon from '@mui/icons-material/Troubleshoot';\nimport CorporateFareIcon from '@mui/icons-material/CorporateFare';\nimport ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight';\nimport 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 TableColumn,\n TableColumnText,\n TableRowAndColumnParams,\n TableRowParams,\n} from '@gen-epix/ui-client-common/models/table';\nimport type { TableRef } from '@gen-epix/ui-client-common/components/ui/Table';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { Table } from '@gen-epix/ui-client-common/components/ui/Table';\nimport { TABLE_COLUMN_FROZEN } from '@gen-epix/ui-client-common/models/table';\nimport { TableUtil } from '@gen-epix/ui-client-common/utils/TableUtil';\nimport EditIcon from '@mui/icons-material/Edit';\nimport ShareIcon from '@mui/icons-material/Share';\nimport { Subject } from '@gen-epix/ui-core/classes/Subject';\nimport { StringUtil } from '@gen-epix/ui-core/utils/StringUtil';\n\nimport CollectionIcon from '../../../assets/icons/CollectionIcon.svg?react';\nimport { LegendaItem } from '../LegendaItem';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { LineListCaseSetMembersService } from '../../../classes/services/LineListService/LineListCaseSetMembersService';\nimport type { LineListWidgetData } from '../../../models/dashboard';\nimport type {\n Stratification,\n StratificationLegendaItem,\n} from '../../../models/stratification';\nimport { STRATIFICATION_MODE } from '../../../models/stratification';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport type { CaseDbConfig } from '../../../models/config';\nimport { CaseDbTableUtil } from '../../../utils/CaseDbTableUtil';\nimport { CASE_INFO_DIALOG_TAB_NAME } from '../CaseInfoDialog';\nimport { StratificationUtil } from '../../../utils/StratificationUtil';\nimport { DashboardWidget } from '../Dashboard';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { LineListIsOwnCaseService } from '../../../classes/services/LineListService/LineListIsOwnCaseService';\n\nimport { LineListWidgetIsInEventCell } from './LineListWidgetIsInEventCell';\nimport { LineListWidgetIsOwnCaseCell } from './LineListWidgetIsOwnCaseCell';\nimport { LineListWidgetTitle } from './LineListWidgetTitle';\nimport { LineListWidgetPrimaryMenu } from './LineListWidgetPrimaryMenu';\nimport { LineListWidgetSecondaryMenu } from './LineListWidgetSecondaryMenu';\nimport { useEpiLineListWidgetEmitDownloadOptions } from './useEpiLineListWidgetEmitDownloadOptions';\n\nexport const LineListWidget = () => {\n const { caseSet } = use(DashboardContext);\n const dashboardContext = use(DashboardContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const { t } = useTranslation();\n const theme = useTheme();\n const rowHighlightingSubject = useMemo(() => new Subject<string[]>([]), []);\n const tableRef = useRef<TableRef>(null);\n\n const dashboardStore = use(DashboardStoreContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const isCondensed = useStore(dashboardStore, (state) => state.isCondensed);\n const stratification = useStore(dashboardStore, (state) => state.stratification?.mode === STRATIFICATION_MODE.FIELD ? state.stratification : null);\n const updateWidgetData = useStore(dashboardStore, (state) => state.updateWidgetData);\n const treeAddresses = useStore(dashboardStore, (state) => state.treeAddresses);\n const setTableColumns = useStore(dashboardStore, (state) => state.setColumns);\n const isDataLoading = useStore(dashboardStore, (state) => state.isDataLoading);\n\n useEffect(() => {\n return () => {\n dashboardContext.lineListRangeSubject.next(undefined);\n };\n }, [dashboardContext]);\n\n const openCaseInfoDialog = useCallback((caseId: string, tabName: CASE_INFO_DIALOG_TAB_NAME) => {\n EventBusService.getInstance().emit('openCaseInfoDialog', {\n caseId,\n caseTypeId: completeCaseType.id,\n initialTab: tabName,\n });\n }, [completeCaseType.id]);\n\n const onAddToEventClick = useCallback((row: CaseDbCase) => {\n EventBusService.getInstance().emit('openAddCasesToEventDialog', {\n currentCaseSet: caseSet,\n rows: [row],\n });\n }, [caseSet]);\n\n\n const onIndexCellClick = useCallback((row: CaseDbCase) => {\n openCaseInfoDialog(row.id, CASE_INFO_DIALOG_TAB_NAME.INFO);\n }, [openCaseInfoDialog]);\n\n const getColumnWidth = useCallback((col: CaseDbCol, label: string) => {\n let maxTextLength = label?.length * 0.8;\n sortedData.forEach(row => {\n const value = CaseUtil.getRowValue(row.content, col, completeCaseType).short;\n if (value?.length > maxTextLength) {\n maxTextLength = value.length;\n }\n });\n\n let maxWidth = +theme.spacing(5).replace('px', '') + maxTextLength * 7;\n if (stratification?.col?.id === col.id) {\n maxWidth = maxWidth + +theme.spacing(3).replace('px', '');\n }\n\n const { MAX_COLUMN_WIDTH, REQUIRED_EXTRA_CELL_PADDING_TO_FIT_CONTENT } = ConfigService.getInstance<CaseDbConfig>().config.lineList;\n return Math.min(MAX_COLUMN_WIDTH, maxWidth) + REQUIRED_EXTRA_CELL_PADDING_TO_FIT_CONTENT;\n }, [completeCaseType, sortedData, stratification?.col?.id, theme]);\n\n const onOrganizationCellClick = useCallback((organizationId: string, organizationName: string) => {\n EventBusService.getInstance().emit('openContactDetailsDialog', {\n organizationId,\n organizationName,\n });\n }, []);\n\n const renderOrganizationCell = useCallback(({ id, row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const rowValue = CaseUtil.getRowValue(row.content, completeCaseType.cols[id], completeCaseType);\n if (rowValue.isMissing) {\n return rowValue.short;\n }\n const legendaItem: StratificationLegendaItem = {\n caseIds: [row.id],\n color: stratification?.caseIdColors[row.id],\n columnType: completeCaseType.ref_cols[completeCaseType.cols[id].ref_col_id].col_type,\n rowValue,\n };\n\n const link = (\n <Link\n color={'primary'}\n component={'button'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onOrganizationCellClick(row.content[id], rowValue.long);\n }}\n sx={{\n cursor: 'pointer',\n }}\n >\n {rowValue.short}\n </Link>\n );\n if (id === stratification?.col?.id) {\n return (\n <LegendaItem\n item={legendaItem}\n >\n {link}\n </LegendaItem>\n );\n }\n return link;\n }, [completeCaseType, onOrganizationCellClick, stratification?.caseIdColors, stratification?.col?.id]);\n\n const onGeneticSequenceCellClick = useCallback((id: string, row: CaseDbCase) => {\n EventBusService.getInstance().emit('openSequenceDownloadDialog', {\n cases: [row],\n geneticSequenceColId: id,\n });\n }, []);\n\n const renderGeneticSequenceCell = useCallback(({ id, row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n return (\n <Link\n color={'primary'}\n component={'button'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onGeneticSequenceCellClick(id, row);\n }}\n sx={{\n cursor: 'pointer',\n }}\n >\n {row.content[id]}\n </Link>\n );\n }, [onGeneticSequenceCellClick]);\n\n const renderIsInEventHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t`Indicates if the case is in an event.`}\n >\n <CollectionIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n </Tooltip>\n );\n }, [t, theme]);\n\n const renderIsInEventCell = useCallback(({ row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n return <LineListWidgetIsInEventCell row={row} />;\n }, []);\n\n const renderIsOwnCaseHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t`Indicates if the case is owned by the current user (the case is in a private data collection that is owned by the user's organization).`}\n >\n <CorporateFareIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n </Tooltip>\n );\n }, [t, theme]);\n\n const renderIsOwnCaseCell = useCallback(({ row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n return <LineListWidgetIsOwnCaseCell row={row} />;\n }, []);\n\n const renderSimilarCell = useCallback(({ row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const similarCaseIds = dashboardStore.getState().findSimilarCasesResults.reduce<string[]>((acc, result) => [...acc, ...result.similarCaseIds], []);\n if (similarCaseIds.includes(row.id)) {\n return (\n <TroubleshootIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n );\n }\n return null;\n }, [dashboardStore, theme]);\n\n\n const renderSimilarHeader = useCallback(() => {\n return (\n <Tooltip\n aria-hidden={false}\n arrow\n title={t`Indicates if the case has been identified as a similar case, based on the find similar cases result.`}\n >\n <TroubleshootIcon\n fontSize={'small'}\n style={{\n color: theme.palette.primary.main,\n height: 20,\n marginLeft: theme.spacing(-0.5),\n position: 'absolute',\n width: 20,\n }}\n />\n </Tooltip>\n );\n }, [t, theme]);\n\n\n const renderCell = useCallback(({ id, row }: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const rowValue = CaseUtil.getRowValue(row.content, completeCaseType.cols[id], completeCaseType);\n const legendaItem: StratificationLegendaItem = {\n caseIds: [row.id],\n color: stratification?.caseIdColors[row.id],\n columnType: completeCaseType.ref_cols[completeCaseType.cols[id].ref_col_id].col_type,\n rowValue,\n };\n if (id === stratification?.col?.id) {\n return (\n <LegendaItem\n item={legendaItem}\n />\n );\n }\n\n return (\n <>\n {rowValue.short}\n </>\n );\n }, [completeCaseType, stratification?.caseIdColors, stratification?.col?.id]);\n\n const frozenTableColumnsLeft = useMemo<TableColumn<CaseDbCase, CaseDbCompleteCaseType>[]>(() => {\n return [\n TableUtil.createReadableIndexColumn({\n getAriaLabel: (params: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => t('Show case information for {{index}}', { index: params.rowIndex + 1 }),\n }),\n TableUtil.createSelectableColumn(),\n {\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n id: 'isInEvent',\n isInitiallyVisible: true,\n renderCell: renderIsInEventCell,\n renderHeader: renderIsInEventHeader,\n resizable: false,\n type: 'text',\n widthPx: 24,\n } satisfies TableColumn<CaseDbCase, CaseDbCompleteCaseType>,\n {\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n id: 'isOwnCase',\n isInitiallyVisible: true,\n renderCell: renderIsOwnCaseCell,\n renderHeader: renderIsOwnCaseHeader,\n resizable: false,\n type: 'text',\n widthPx: 24,\n } satisfies TableColumn<CaseDbCase, CaseDbCompleteCaseType>,\n {\n frozen: TABLE_COLUMN_FROZEN.LEFT,\n headerTooltipContent: t`Is similar case?`,\n id: 'similar',\n isInitiallyVisible: true,\n renderCell: renderSimilarCell,\n renderHeader: renderSimilarHeader,\n resizable: false,\n type: 'text',\n widthPx: 24,\n } satisfies TableColumn<CaseDbCase, CaseDbCompleteCaseType>,\n ];\n }, [renderIsInEventCell, renderIsInEventHeader, renderIsOwnCaseCell, renderIsOwnCaseHeader, t, renderSimilarCell, renderSimilarHeader]);\n\n const frozenTableColumnsRight = useMemo<TableColumn<CaseDbCase, CaseDbCompleteCaseType>[]>(() => {\n return [\n TableUtil.createActionsColumn({\n columnContext: null,\n getActions: (params: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => {\n const actions: ReactElement[] = [\n (\n <MenuItem\n key={'showInformation'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => openCaseInfoDialog(params.row.id, CASE_INFO_DIALOG_TAB_NAME.INFO)}\n >\n <ListItemIcon>\n <ArrowCircleRightIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Show information`}\n </ListItemText>\n </MenuItem>\n ),\n (\n <MenuItem\n key={'editInformation'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => openCaseInfoDialog(params.row.id, CASE_INFO_DIALOG_TAB_NAME.EDIT)}\n >\n <ListItemIcon>\n <EditIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Edit information`}\n </ListItemText>\n </MenuItem>\n ),\n (\n <MenuItem\n key={'share'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => openCaseInfoDialog(params.row.id, CASE_INFO_DIALOG_TAB_NAME.SHARING)}\n >\n <ListItemIcon>\n <ShareIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Share`}\n </ListItemText>\n </MenuItem>\n ),\n (\n <MenuItem\n key={'addToEvent'}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => onAddToEventClick(params.row)}\n >\n <ListItemIcon>\n <CollectionIcon />\n </ListItemIcon>\n <ListItemText>\n {t`Add to event`}\n </ListItemText>\n </MenuItem>\n ),\n ];\n return actions;\n },\n t,\n }),\n ];\n }, [onAddToEventClick, openCaseInfoDialog, t]);\n\n\n const columnStratificationCache = useMemo(() => {\n const cache: Record<string, Stratification> = {};\n if (!isCondensed) {\n return cache;\n }\n completeCaseType.ordered_col_ids.forEach((colId) => {\n const col = completeCaseType.cols[colId];\n cache[colId] = StratificationUtil.getStratification({\n col,\n completeCaseType,\n mode: STRATIFICATION_MODE.FIELD,\n sortedData,\n useExtraGradients: true,\n });\n });\n\n return cache;\n }, [completeCaseType, isCondensed, sortedData]);\n\n const cellColorGetter = useCallback((params: TableRowAndColumnParams<CaseDbCase, CaseDbCompleteCaseType>): string | undefined => {\n const columnStratification = columnStratificationCache[params.column.id];\n return columnStratification?.caseIdColors[params.row.id];\n }, [columnStratificationCache]);\n\n const cellTitleGetter = useCallback((params: TableRowAndColumnParams<CaseDbCase, CaseDbCompleteCaseType>): string | undefined => {\n const rowValue = CaseUtil.getRowValue(params.row.content, completeCaseType.cols[params.column.id], completeCaseType);\n return rowValue.isMissing ? undefined : rowValue.long;\n }, [completeCaseType]);\n\n const tableColumns = useMemo<TableColumn<CaseDbCase, CaseDbCompleteCaseType>[]>(() => {\n const { DATA_MISSING_CHARACTER } = ConfigService.getInstance<CaseDbConfig>().config.epi;\n\n const initialVisibleColumnIds = CaseTypeUtil.getInitialVisibleColIds(completeCaseType);\n const caseTypeTableColumns: TableColumn<CaseDbCase, CaseDbCompleteCaseType>[] = [];\n\n\n completeCaseType.ordered_dim_ids.map(x => completeCaseType.dims[x]).forEach((dim) => {\n completeCaseType.ordered_col_ids_by_dim[dim.id].map(id => completeCaseType.cols[id]).forEach(col => {\n const refCol = completeCaseType.ref_cols[col.ref_col_id];\n const baseCaseTypeTableColumn: Partial<TableColumn<CaseDbCase, CaseDbCompleteCaseType, CaseDbCol>> = {\n cellColorGetter,\n cellTitleGetter,\n columnContext: col,\n headerName: col.label,\n headerTooltipContent: refCol.description,\n id: col.id,\n isInitiallyVisible: initialVisibleColumnIds.includes(col.id),\n };\n if (refCol.col_type === CaseDbColType.GENETIC_DISTANCE) {\n caseTypeTableColumns.push({\n ...baseCaseTypeTableColumn,\n cellTitleGetter: (params) => {\n const value = treeAddresses[col.id]?.addresses[params.row.id] ? `${treeAddresses[col.id].algorithmCode} ${treeAddresses[col.id].addresses[params.row.id]}` : undefined;\n return value ?? undefined;\n },\n comparatorFactory: ({ direction }: GetTableCellRowComparatorProps<TableColumnText<CaseDbCase, CaseDbCompleteCaseType>, CaseDbCompleteCaseType>) => (a: CaseDbCase, b: CaseDbCase) => {\n const sortValue = StringUtil.advancedSortComperator(treeAddresses[col.id]?.addresses?.[a.id], treeAddresses[col.id]?.addresses?.[b.id]);\n return direction === 'asc' ? sortValue : -sortValue;\n },\n type: 'text',\n valueGetter: (params) => {\n const value = treeAddresses[col.id]?.addresses[params.row.id] ? `${treeAddresses[col.id].algorithmCode} ${treeAddresses[col.id].addresses[params.row.id]}` : undefined;\n return value ?? DATA_MISSING_CHARACTER;\n },\n widthPx: 200,\n } as TableColumn<CaseDbCase, CaseDbCompleteCaseType>);\n } else {\n let cellRenderer: (params: TableRowParams<CaseDbCase, CaseDbCompleteCaseType>) => ReactElement | string;\n if (refCol.col_type === CaseDbColType.ORGANIZATION) {\n cellRenderer = renderOrganizationCell;\n } else if (refCol.col_type === CaseDbColType.GENETIC_SEQUENCE) {\n cellRenderer = renderGeneticSequenceCell;\n } else {\n cellRenderer = renderCell;\n }\n\n caseTypeTableColumns.push({\n ...baseCaseTypeTableColumn,\n comparatorFactory: CaseDbTableUtil.createCaseTypeCellRowComperator,\n renderCell: cellRenderer,\n textAlign: ([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) ? 'right' : 'left',\n type: 'text',\n widthPx: getColumnWidth(col, col.label),\n } as TableColumn<CaseDbCase, CaseDbCompleteCaseType>);\n }\n });\n });\n\n return [\n ...frozenTableColumnsLeft,\n ...caseTypeTableColumns,\n ...frozenTableColumnsRight,\n ];\n }, [completeCaseType, frozenTableColumnsLeft, frozenTableColumnsRight, cellColorGetter, cellTitleGetter, treeAddresses, getColumnWidth, renderOrganizationCell, renderGeneticSequenceCell, renderCell]);\n\n const onRowMouseEnter = useCallback((row: CaseDbCase) => {\n dashboardContext.highlight({\n caseIds: [row.id],\n origin: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n });\n }, [dashboardContext]);\n\n\n const onRowMouseLeave = useCallback(() => {\n dashboardContext.highlight({\n caseIds: [],\n origin: DASHBOARD_COMPONENT_NAME.LINE_LIST,\n });\n }, [dashboardContext]);\n\n useEffect(() => {\n setTableColumns(tableColumns);\n }, [setTableColumns, tableColumns]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting?.origin === DASHBOARD_COMPONENT_NAME.LINE_LIST) {\n return;\n }\n if (highlighting.scrollIntoView) {\n const firstHighlightedCaseId = highlighting.caseIds[0];\n const index = sortedData.findIndex(row => row.id === firstHighlightedCaseId);\n if (index !== -1) {\n tableRef.current?.scrollToIndex(index, () => {\n rowHighlightingSubject.next(highlighting.caseIds);\n });\n }\n } else {\n rowHighlightingSubject.next(highlighting.caseIds);\n }\n });\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, rowHighlightingSubject, sortedData]);\n\n useEpiLineListWidgetEmitDownloadOptions();\n\n const updateVisibleIndexDebounced = useDebouncedCallback((index: number) => {\n updateWidgetData<LineListWidgetData>(DASHBOARD_COMPONENT_NAME.LINE_LIST, {\n visibleItemItemIndex: index,\n });\n }, 500);\n\n const onTableVisibleItemIndexChange = useCallback((index: number) => {\n updateVisibleIndexDebounced(index);\n }, [updateVisibleIndexDebounced]);\n\n const onRangeChangedDebounced = useDebouncedCallback(async (range: ListRange) => {\n await LineListCaseSetMembersService.getInstance().loadRange(sortedData.slice(range.startIndex, Math.min(range.endIndex + 1, sortedData.length)).map(row => row.id));\n await LineListIsOwnCaseService.getInstance().loadRange(sortedData.slice(range.startIndex, Math.min(range.endIndex + 1, sortedData.length)).map(row => row.id), completeCaseType.id);\n }, ConfigService.getInstance<CaseDbConfig>().config.lineList.CASE_SET_MEMBERS_FETCH_DEBOUNCE_DELAY_MS, {\n leading: false,\n trailing: true,\n });\n\n const onRangeChanged = useCallback((range: ListRange) => {\n dashboardContext.lineListRangeSubject.next(range);\n void onRangeChangedDebounced(range);\n }, [dashboardContext, onRangeChangedDebounced]);\n\n useEffect(() => {\n return () => {\n LineListCaseSetMembersService.getInstance().cleanStaleQueue();\n LineListIsOwnCaseService.getInstance().cleanStaleQueue();\n };\n }, []);\n\n const onVerticalScrollPositionChange = useCallback((position: number) => {\n if (isNaN(position)) {\n return;\n }\n dashboardContext.linkedScrollSubject.next({\n origin: containerRef.current,\n position,\n });\n }, [dashboardContext]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.linkedScrollSubject.subscribe((data) => {\n if (data.origin === containerRef.current) {\n return;\n }\n tableRef.current.setVerticalScrollPosition(data.position);\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext]);\n\n const getRowName = useCallback((row: CaseDbCase): string => {\n return row.id;\n }, []);\n\n return (\n <DashboardWidget\n isLoading={isDataLoading}\n primaryMenu={<LineListWidgetPrimaryMenu caseSet={caseSet} />}\n secondaryMenu={<LineListWidgetSecondaryMenu />}\n title={<LineListWidgetTitle />}\n widgetName={DASHBOARD_COMPONENT_NAME.LINE_LIST}\n >\n <Box\n ref={containerRef}\n sx={{\n height: '100%',\n width: '100%',\n }}\n >\n <Table\n font={theme['gen-epix-ui-client-casedb'].lineList.font}\n forceHorizontalOverflow\n getRowName={getRowName}\n initialVisibleItemIndex={dashboardStore.getState().getWidgetData<LineListWidgetData>(DASHBOARD_COMPONENT_NAME.LINE_LIST)?.visibleItemItemIndex}\n onRangeChanged={onRangeChanged}\n onReadableIndexClick={onIndexCellClick}\n onRowMouseEnter={onRowMouseEnter}\n onRowMouseLeave={onRowMouseLeave}\n onVerticalScrollPositionChange={onVerticalScrollPositionChange}\n onVisibleItemIndexChange={onTableVisibleItemIndexChange}\n ref={tableRef}\n rowHeight={3}\n rowHighlightingSubject={rowHighlightingSubject}\n />\n </Box>\n </DashboardWidget>\n );\n};\n"],"mappings":"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"}