@gen-epix/ui 1.15.1 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/dist/environment.d.ts +54 -0
  2. package/dist/index.d.ts +16090 -0
  3. package/dist/index.js +125 -106
  4. package/dist/index.js.map +1 -0
  5. package/package.json +14 -16
  6. package/src/@types/environment.d.ts +0 -54
  7. package/src/api/api.ts +0 -43576
  8. package/src/api/base.ts +0 -111
  9. package/src/api/common.ts +0 -168
  10. package/src/api/configuration.ts +0 -118
  11. package/src/api/index.ts +0 -20
  12. package/src/assets/icons/CollectionIcon.svg +0 -1
  13. package/src/assets/icons/DnaIcon.svg +0 -1
  14. package/src/assets/icons/VirusIcon.svg +0 -1
  15. package/src/assets/logo/logo-rijksoverheid.svg +0 -42
  16. package/src/assets/logo/logo-rivm.svg +0 -6
  17. package/src/classes/Subject/Subject.ts +0 -26
  18. package/src/classes/Subject/index.ts +0 -1
  19. package/src/classes/TableEventBus/TableEventBus.ts +0 -14
  20. package/src/classes/TableEventBus/index.ts +0 -1
  21. package/src/classes/abstracts/EventBusAbstract/EventBusAbstract.ts +0 -37
  22. package/src/classes/abstracts/EventBusAbstract/index.ts +0 -1
  23. package/src/classes/abstracts/FilterAbstract/FilterAbstract.ts +0 -54
  24. package/src/classes/abstracts/FilterAbstract/index.ts +0 -1
  25. package/src/classes/abstracts/SubscribableAbstract/SubscribableAbstract.ts +0 -20
  26. package/src/classes/abstracts/SubscribableAbstract/index.ts +0 -1
  27. package/src/classes/errors/UploadError.ts +0 -11
  28. package/src/classes/errors/index.ts +0 -1
  29. package/src/classes/filters/BooleanFilter.ts +0 -31
  30. package/src/classes/filters/DateFilter.ts +0 -133
  31. package/src/classes/filters/GeoFilter.ts +0 -60
  32. package/src/classes/filters/MultiSelectFilter.ts +0 -70
  33. package/src/classes/filters/NumberRangeFilter.ts +0 -82
  34. package/src/classes/filters/SelectionFilter.ts +0 -25
  35. package/src/classes/filters/TextFilter.ts +0 -36
  36. package/src/classes/filters/TreeFilter.ts +0 -22
  37. package/src/classes/managers/AuthenticationManager/AuthenticationManager.ts +0 -94
  38. package/src/classes/managers/AuthenticationManager/index.ts +0 -1
  39. package/src/classes/managers/AuthorizationManager/AuthorizationManager.ts +0 -70
  40. package/src/classes/managers/AuthorizationManager/index.ts +0 -1
  41. package/src/classes/managers/BackendVersionManager/BackendVersionManager.ts +0 -23
  42. package/src/classes/managers/BackendVersionManager/index.ts +0 -1
  43. package/src/classes/managers/BreadcrumbManager/BreadcrumbManager.ts +0 -30
  44. package/src/classes/managers/BreadcrumbManager/index.ts +0 -1
  45. package/src/classes/managers/ConfigManager/ConfigManager.ts +0 -31
  46. package/src/classes/managers/ConfigManager/index.ts +0 -1
  47. package/src/classes/managers/DevicePixelRatioManager/DevicePixelRatioManager.ts +0 -27
  48. package/src/classes/managers/DevicePixelRatioManager/index.ts +0 -1
  49. package/src/classes/managers/EmotionCacheManager/EmotionCacheManager.ts +0 -27
  50. package/src/classes/managers/EmotionCacheManager/index.ts +0 -1
  51. package/src/classes/managers/EpiDataManager/EpiDataManager.ts +0 -196
  52. package/src/classes/managers/EpiDataManager/index.ts +0 -1
  53. package/src/classes/managers/EpiEventBusManager/EpiEventBusManager.ts +0 -61
  54. package/src/classes/managers/EpiEventBusManager/index.ts +0 -1
  55. package/src/classes/managers/EpiHighlightingManager/EpiHighlightingManager.ts +0 -32
  56. package/src/classes/managers/EpiHighlightingManager/index.ts +0 -1
  57. package/src/classes/managers/EpiLineListCaseSetMembersManager/EpiListsCaseSetMembersManager.ts +0 -118
  58. package/src/classes/managers/EpiLineListCaseSetMembersManager/index.ts +0 -1
  59. package/src/classes/managers/FeatureFlagsManager/FeatureFlagsManager.ts +0 -30
  60. package/src/classes/managers/FeatureFlagsManager/index.ts +0 -1
  61. package/src/classes/managers/I18nManager/I18nManager.ts +0 -105
  62. package/src/classes/managers/I18nManager/index.ts +0 -1
  63. package/src/classes/managers/InactivityManager/InactivityManager.ts +0 -119
  64. package/src/classes/managers/InactivityManager/index.ts +0 -1
  65. package/src/classes/managers/KeyboardShortcutManager/KeyboardShortcutManager.ts +0 -78
  66. package/src/classes/managers/KeyboardShortcutManager/index.ts +0 -1
  67. package/src/classes/managers/LogManager/LogManager.ts +0 -151
  68. package/src/classes/managers/LogManager/index.ts +0 -1
  69. package/src/classes/managers/NavigationHistoryManager/NavigationHistoryManager.ts +0 -16
  70. package/src/classes/managers/NavigationHistoryManager/index.ts +0 -1
  71. package/src/classes/managers/NotificationManager/NotificationManager.ts +0 -104
  72. package/src/classes/managers/NotificationManager/index.ts +0 -1
  73. package/src/classes/managers/PageEventBusManager/PageEventBusManager.ts +0 -116
  74. package/src/classes/managers/PageEventBusManager/index.ts +0 -1
  75. package/src/classes/managers/QueryClientManager/QueryClientManager.ts +0 -51
  76. package/src/classes/managers/QueryClientManager/index.ts +0 -1
  77. package/src/classes/managers/RouterManager/RouterManager.ts +0 -25
  78. package/src/classes/managers/RouterManager/index.ts +0 -1
  79. package/src/classes/managers/UserSettingsManager/UserSettingsManager.ts +0 -16
  80. package/src/classes/managers/UserSettingsManager/index.ts +0 -1
  81. package/src/classes/managers/WindowManager/WindowManager.test.ts +0 -23
  82. package/src/classes/managers/WindowManager/WindowManager.ts +0 -26
  83. package/src/classes/managers/WindowManager/index.ts +0 -1
  84. package/src/components/app/App/App.tsx +0 -58
  85. package/src/components/app/App/index.ts +0 -1
  86. package/src/components/app/ApplicationBootstrap/ApplicationBootstrap.tsx +0 -223
  87. package/src/components/app/ApplicationBootstrap/index.ts +0 -1
  88. package/src/components/app/RouterRoot/RouterRoot.tsx +0 -187
  89. package/src/components/app/RouterRoot/index.ts +0 -1
  90. package/src/components/epi/EpiAddCasesToEventDialog/EpiAddCasesToEventDialog.tsx +0 -347
  91. package/src/components/epi/EpiAddCasesToEventDialog/EpiAddCasesToEventDialogSuccessNotificationMessage.tsx +0 -38
  92. package/src/components/epi/EpiAddCasesToEventDialog/index.ts +0 -1
  93. package/src/components/epi/EpiBulkEditCaseDialog/EpiBulkEditCaseDialog.tsx +0 -61
  94. package/src/components/epi/EpiBulkEditCaseDialog/index.ts +0 -1
  95. package/src/components/epi/EpiCaseInfoDialog/EpiCaseCaseSetInfo.tsx +0 -137
  96. package/src/components/epi/EpiCaseInfoDialog/EpiCaseContent.tsx +0 -127
  97. package/src/components/epi/EpiCaseInfoDialog/EpiCaseForm.tsx +0 -111
  98. package/src/components/epi/EpiCaseInfoDialog/EpiCaseInfoDialog.tsx +0 -377
  99. package/src/components/epi/EpiCaseInfoDialog/EpiCaseSharingForm.tsx +0 -140
  100. package/src/components/epi/EpiCaseInfoDialog/EpiCaseSharingInfo.tsx +0 -23
  101. package/src/components/epi/EpiCaseInfoDialog/EpiReadOnlyCaseContent.tsx +0 -89
  102. package/src/components/epi/EpiCaseInfoDialog/index.ts +0 -1
  103. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetContent.tsx +0 -108
  104. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetDescription.tsx +0 -34
  105. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetForm.tsx +0 -151
  106. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetInfoDialog.tsx +0 -389
  107. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetSharingForm.tsx +0 -155
  108. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetSharingInfo.tsx +0 -23
  109. package/src/components/epi/EpiCaseSetInfoDialog/index.ts +0 -1
  110. package/src/components/epi/EpiCaseSummary/EpiCaseSummary.tsx +0 -141
  111. package/src/components/epi/EpiCaseSummary/index.ts +0 -1
  112. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoAccessRights.tsx +0 -91
  113. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoColAccessRights.tsx +0 -118
  114. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoData.tsx +0 -38
  115. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoDialog.tsx +0 -39
  116. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoDialogContent.tsx +0 -169
  117. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoDialogWithLoader.tsx +0 -42
  118. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoRegions.tsx +0 -87
  119. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoTrees.tsx +0 -73
  120. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoValues.tsx +0 -61
  121. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoVariableDetails.tsx +0 -151
  122. package/src/components/epi/EpiCaseTypeInfoDialog/index.ts +0 -10
  123. package/src/components/epi/EpiCasesAlreadyInCaseSetWarning/EpiCasesAlreadyInCaseSetWarning.tsx +0 -190
  124. package/src/components/epi/EpiCasesAlreadyInCaseSetWarning/EpiCasesAlreadyInCaseSetWarningCaseSetLink.tsx +0 -62
  125. package/src/components/epi/EpiCasesAlreadyInCaseSetWarning/index.ts +0 -1
  126. package/src/components/epi/EpiCompletCaseTypeLoader/EpiCompletCaseTypeLoader.tsx +0 -87
  127. package/src/components/epi/EpiCompletCaseTypeLoader/index.ts +0 -1
  128. package/src/components/epi/EpiContactDetailsDialog/EpiContactDetailsDialog.tsx +0 -151
  129. package/src/components/epi/EpiContactDetailsDialog/index.ts +0 -1
  130. package/src/components/epi/EpiContextMenu/EpiContextMenu.tsx +0 -155
  131. package/src/components/epi/EpiContextMenu/index.ts +0 -1
  132. package/src/components/epi/EpiCreateEventDialog/EpiCreateEventDialog.tsx +0 -386
  133. package/src/components/epi/EpiCreateEventDialog/EpiCreateEventDialogSuccessNotificationMessage.tsx +0 -30
  134. package/src/components/epi/EpiCreateEventDialog/index.ts +0 -1
  135. package/src/components/epi/EpiCurve/EpiCurve.tsx +0 -525
  136. package/src/components/epi/EpiCurve/index.ts +0 -1
  137. package/src/components/epi/EpiCustomTabPanel/EpiCustomTabPanel.tsx +0 -27
  138. package/src/components/epi/EpiCustomTabPanel/index.ts +0 -1
  139. package/src/components/epi/EpiDashboard/EpiDashboard.tsx +0 -390
  140. package/src/components/epi/EpiDashboard/EpiDashboardDownloadSidebarItem.tsx +0 -154
  141. package/src/components/epi/EpiDashboard/EpiDashboardGeneralSettingsForm.tsx +0 -89
  142. package/src/components/epi/EpiDashboard/EpiDashboardLayoutRenderer.tsx +0 -248
  143. package/src/components/epi/EpiDashboard/EpiDashboardLayoutSettingsForm.tsx +0 -160
  144. package/src/components/epi/EpiDashboard/EpiDashboardSettingsSidebarItem.tsx +0 -93
  145. package/src/components/epi/EpiDashboard/EpiDashboardTreeSettingsForm.tsx +0 -90
  146. package/src/components/epi/EpiDashboard/index.ts +0 -1
  147. package/src/components/epi/EpiDashboardStoreLoader/EpiDashboardStoreLoader.tsx +0 -34
  148. package/src/components/epi/EpiDashboardStoreLoader/EpiDashboardStoreLoaderContent.tsx +0 -73
  149. package/src/components/epi/EpiDashboardStoreLoader/index.ts +0 -2
  150. package/src/components/epi/EpiDashboardStoreLoader/withEpiDashboardStore.tsx +0 -19
  151. package/src/components/epi/EpiDataCollectionAccessInfo/EpiDataCollectionAccessInfo.tsx +0 -88
  152. package/src/components/epi/EpiDataCollectionAccessInfo/index.ts +0 -1
  153. package/src/components/epi/EpiFindSimilarCasesDialog/EpiFindSimilarCasesDialog.tsx +0 -302
  154. package/src/components/epi/EpiFindSimilarCasesDialog/index.ts +0 -1
  155. package/src/components/epi/EpiLegendaItem/EpiLegendaItem.tsx +0 -106
  156. package/src/components/epi/EpiLegendaItem/index.ts +0 -1
  157. package/src/components/epi/EpiLineList/EpiLineList.tsx +0 -492
  158. package/src/components/epi/EpiLineList/EpiLineListPrimaryMenu.tsx +0 -189
  159. package/src/components/epi/EpiLineList/EpiLineListSecondaryMenu.tsx +0 -56
  160. package/src/components/epi/EpiLineList/EpiLineListTitle.tsx +0 -28
  161. package/src/components/epi/EpiLineList/index.ts +0 -1
  162. package/src/components/epi/EpiLineList/useEpiLineListEmitDownloadOptions.tsx +0 -102
  163. package/src/components/epi/EpiMap/EpiMap.tsx +0 -547
  164. package/src/components/epi/EpiMap/index.ts +0 -1
  165. package/src/components/epi/EpiRemoveCasesFromEventDialog/EpiRemoveCasesFromEventDialog.tsx +0 -169
  166. package/src/components/epi/EpiRemoveCasesFromEventDialog/index.ts +0 -1
  167. package/src/components/epi/EpiRemoveFindSimilarCasesResultDialog/EpiRemoveFindSimilarCasesResultDialog.tsx +0 -216
  168. package/src/components/epi/EpiSequenceDownloadDialog/EpiSequenceDownloadDialog.tsx +0 -151
  169. package/src/components/epi/EpiSequenceDownloadDialog/index.ts +0 -1
  170. package/src/components/epi/EpiStratification/EpiStratification.tsx +0 -241
  171. package/src/components/epi/EpiStratification/index.ts +0 -1
  172. package/src/components/epi/EpiTree/EpiTree.tsx +0 -906
  173. package/src/components/epi/EpiTree/index.ts +0 -1
  174. package/src/components/epi/EpiTreeDescription/EpiTreeDescription.tsx +0 -71
  175. package/src/components/epi/EpiTreeDescription/index.ts +0 -1
  176. package/src/components/epi/EpiUpload/EpiUpload.tsx +0 -107
  177. package/src/components/epi/EpiUpload/EpiUploadCaseResultTable.tsx +0 -383
  178. package/src/components/epi/EpiUpload/EpiUploadCreateCases.tsx +0 -266
  179. package/src/components/epi/EpiUpload/EpiUploadMapColumns.tsx +0 -261
  180. package/src/components/epi/EpiUpload/EpiUploadMapSequences.tsx +0 -332
  181. package/src/components/epi/EpiUpload/EpiUploadNavigation.tsx +0 -52
  182. package/src/components/epi/EpiUpload/EpiUploadSelectFile.tsx +0 -285
  183. package/src/components/epi/EpiUpload/EpiUploadSelectSequenceFiles.tsx +0 -375
  184. package/src/components/epi/EpiUpload/EpiUploadValidate.tsx +0 -199
  185. package/src/components/epi/EpiUpload/EpiUploadValidateNavigation.tsx +0 -34
  186. package/src/components/epi/EpiUpload/index.ts +0 -1
  187. package/src/components/epi/EpiUserRightsDialog/EpiUserRightsDialog.tsx +0 -101
  188. package/src/components/epi/EpiUserRightsDialog/EpiUserRightsDialogCaseAccessPolicy.tsx +0 -160
  189. package/src/components/epi/EpiUserRightsDialog/index.ts +0 -1
  190. package/src/components/epi/EpiWarning/EpiWarning.tsx +0 -39
  191. package/src/components/epi/EpiWarning/index.ts +0 -1
  192. package/src/components/epi/EpiWidget/EpiWidget.tsx +0 -255
  193. package/src/components/epi/EpiWidget/index.ts +0 -1
  194. package/src/components/epi/EpiWidgetHeaderIconButton/EpiWidgetHeaderIconButton.tsx +0 -40
  195. package/src/components/epi/EpiWidgetHeaderIconButton/index.ts +0 -1
  196. package/src/components/epi/EpiWidgetMenu/EpiWidgetMenu.tsx +0 -56
  197. package/src/components/epi/EpiWidgetMenu/index.ts +0 -1
  198. package/src/components/epi/EpiWidgetUnavailable/EpiWidgetUnavailable.tsx +0 -51
  199. package/src/components/epi/EpiWidgetUnavailable/index.ts +0 -1
  200. package/src/components/filters/BooleanFilterField/BooleanFilterField.tsx +0 -26
  201. package/src/components/filters/BooleanFilterField/index.ts +0 -1
  202. package/src/components/filters/DateFilterField/DateFilterField.tsx +0 -23
  203. package/src/components/filters/DateFilterField/index.ts +0 -1
  204. package/src/components/filters/GeoFilterField/GeoFilterField.tsx +0 -32
  205. package/src/components/filters/GeoFilterField/index.ts +0 -1
  206. package/src/components/filters/MultiSelectFilterField/MultiSelectFilterField.tsx +0 -31
  207. package/src/components/filters/MultiSelectFilterField/index.ts +0 -1
  208. package/src/components/filters/NumberRangeFilterField/NumberRangeFilterField.tsx +0 -20
  209. package/src/components/filters/NumberRangeFilterField/index.ts +0 -1
  210. package/src/components/filters/TextFilterField/TextFilterField.tsx +0 -18
  211. package/src/components/filters/TextFilterField/index.ts +0 -1
  212. package/src/components/form/fields/Autocomplete/Autocomplete.tsx +0 -270
  213. package/src/components/form/fields/Autocomplete/index.ts +0 -1
  214. package/src/components/form/fields/CheckboxGroup/CheckboxGroup.tsx +0 -192
  215. package/src/components/form/fields/CheckboxGroup/index.ts +0 -1
  216. package/src/components/form/fields/DatePicker/DatePicker.tsx +0 -167
  217. package/src/components/form/fields/DatePicker/index.ts +0 -1
  218. package/src/components/form/fields/DateRangePicker/DateRangePicker.tsx +0 -359
  219. package/src/components/form/fields/DateRangePicker/index.ts +0 -1
  220. package/src/components/form/fields/NumberField/NumberField.tsx +0 -277
  221. package/src/components/form/fields/NumberField/index.ts +0 -1
  222. package/src/components/form/fields/NumberRangeInput/NumberRangeInput.tsx +0 -297
  223. package/src/components/form/fields/NumberRangeInput/index.ts +0 -1
  224. package/src/components/form/fields/RadioGroup/RadioGroup.tsx +0 -130
  225. package/src/components/form/fields/RadioGroup/index.ts +0 -1
  226. package/src/components/form/fields/RichTextEditor/RichTextEditor.tsx +0 -321
  227. package/src/components/form/fields/RichTextEditor/RichTextEditorContent.tsx +0 -34
  228. package/src/components/form/fields/RichTextEditor/index.ts +0 -2
  229. package/src/components/form/fields/RichTextEditor/useRichTextEditorExtensions.ts +0 -174
  230. package/src/components/form/fields/Select/Select.tsx +0 -219
  231. package/src/components/form/fields/Select/index.ts +0 -1
  232. package/src/components/form/fields/Switch/Switch.tsx +0 -116
  233. package/src/components/form/fields/Switch/index.ts +0 -1
  234. package/src/components/form/fields/TextField/TextField.tsx +0 -170
  235. package/src/components/form/fields/TextField/index.ts +0 -1
  236. package/src/components/form/fields/ToggleButtonGroup/ToggleButtonGroup.tsx +0 -118
  237. package/src/components/form/fields/ToggleButtonGroup/index.ts +0 -1
  238. package/src/components/form/fields/TransferList/TransferList.tsx +0 -360
  239. package/src/components/form/fields/TransferList/index.ts +0 -1
  240. package/src/components/form/fields/UploadButton/UploadButton.tsx +0 -157
  241. package/src/components/form/helpers/FormFieldHelperText/FormFieldHelperText.tsx +0 -68
  242. package/src/components/form/helpers/FormFieldHelperText/index.ts +0 -1
  243. package/src/components/form/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.tsx +0 -22
  244. package/src/components/form/helpers/FormFieldLoadingIndicator/index.ts +0 -1
  245. package/src/components/form/helpers/GenericForm/GenericForm.tsx +0 -187
  246. package/src/components/form/helpers/GenericForm/index.ts +0 -1
  247. package/src/components/ui/ApplicationBar/ApplicationBar.tsx +0 -74
  248. package/src/components/ui/ApplicationBar/ApplicationBarActions.tsx +0 -124
  249. package/src/components/ui/ApplicationBar/ApplicationBarActionsFeedbackItem.tsx +0 -102
  250. package/src/components/ui/ApplicationBar/ApplicationBarActionsInfotem.tsx +0 -60
  251. package/src/components/ui/ApplicationBar/ApplicationBarActionsNotificationsItem.tsx +0 -82
  252. package/src/components/ui/ApplicationBar/ApplicationBarActionsOrganizationSwitcherItem.tsx +0 -58
  253. package/src/components/ui/ApplicationBar/ApplicationBarActionsOutagesItem.tsx +0 -75
  254. package/src/components/ui/ApplicationBar/ApplicationBarActionsUserItem.tsx +0 -60
  255. package/src/components/ui/ApplicationBar/ApplicationBarNavigationMenu.tsx +0 -159
  256. package/src/components/ui/ApplicationBar/InfoMenu.tsx +0 -120
  257. package/src/components/ui/ApplicationBar/UserMenu.tsx +0 -208
  258. package/src/components/ui/ApplicationBar/UserOrganizationAdminMenuItem.tsx +0 -69
  259. package/src/components/ui/ApplicationBar/UserOwnOrganizationMenuItem.tsx +0 -54
  260. package/src/components/ui/ApplicationBar/index.ts +0 -1
  261. package/src/components/ui/ApplicationFooter/ApplicationFooter.tsx +0 -121
  262. package/src/components/ui/ApplicationFooter/ApplicationFooterLink.tsx +0 -48
  263. package/src/components/ui/ApplicationFooter/ApplicationFooterLinkSection.tsx +0 -56
  264. package/src/components/ui/ApplicationFooter/index.ts +0 -1
  265. package/src/components/ui/AuthenticationWrapper/AuthenticationWrapper.tsx +0 -208
  266. package/src/components/ui/AuthenticationWrapper/index.ts +0 -1
  267. package/src/components/ui/AuthorizationWrapper/AuthorizationWrapper.tsx +0 -75
  268. package/src/components/ui/AuthorizationWrapper/index.ts +0 -1
  269. package/src/components/ui/Breadcrumbs/Breadcrumbs.tsx +0 -92
  270. package/src/components/ui/Breadcrumbs/index.ts +0 -1
  271. package/src/components/ui/Confirmation/Confirmation.tsx +0 -10
  272. package/src/components/ui/Confirmation/ConfirmationRender.tsx +0 -81
  273. package/src/components/ui/Confirmation/index.ts +0 -2
  274. package/src/components/ui/ConsentDialog/ConsentDialog.tsx +0 -57
  275. package/src/components/ui/ConsentDialog/index.ts +0 -1
  276. package/src/components/ui/CopyToClipboardButton/CopyToClipboardButton.tsx +0 -94
  277. package/src/components/ui/CopyToClipboardButton/index.ts +0 -1
  278. package/src/components/ui/Dialog/Dialog.tsx +0 -196
  279. package/src/components/ui/Dialog/index.ts +0 -1
  280. package/src/components/ui/FileSelector/FileSelector.tsx +0 -358
  281. package/src/components/ui/FileSelector/index.ts +0 -1
  282. package/src/components/ui/GenericErrorMessage/GenericErrorMessage.tsx +0 -168
  283. package/src/components/ui/GenericErrorMessage/index.ts +0 -1
  284. package/src/components/ui/HomePageTrends/HomePageTrendCard.tsx +0 -132
  285. package/src/components/ui/HomePageTrends/HomePageTrends.tsx +0 -312
  286. package/src/components/ui/HomePageTrends/index.ts +0 -1
  287. package/src/components/ui/LicensesDialog/LicensesDialog.tsx +0 -231
  288. package/src/components/ui/LicensesDialog/index.ts +0 -1
  289. package/src/components/ui/LinearProgressWithLabel/LinearProgressWithLabel.tsx +0 -31
  290. package/src/components/ui/LinearProgressWithLabel/index.ts +0 -1
  291. package/src/components/ui/LoadingIndicator/LoadingIndicator.tsx +0 -11
  292. package/src/components/ui/LoadingIndicator/index.ts +0 -1
  293. package/src/components/ui/MyPermissionsDialog/MyPermissionsDialog.tsx +0 -95
  294. package/src/components/ui/MyPermissionsDialog/index.ts +0 -1
  295. package/src/components/ui/NavLink/NavLink.tsx +0 -47
  296. package/src/components/ui/NavLink/index.ts +0 -1
  297. package/src/components/ui/NestedMenu/IconMenuItem.tsx +0 -64
  298. package/src/components/ui/NestedMenu/NestedDropdown.tsx +0 -133
  299. package/src/components/ui/NestedMenu/NestedMenuItem.tsx +0 -250
  300. package/src/components/ui/NestedMenu/index.ts +0 -4
  301. package/src/components/ui/NestedMenu/nestedMenuItemsFromObject.tsx +0 -98
  302. package/src/components/ui/Notifications/NotificationItem.tsx +0 -70
  303. package/src/components/ui/Notifications/NotificationsDrawer.tsx +0 -161
  304. package/src/components/ui/Notifications/NotificationsStack.tsx +0 -45
  305. package/src/components/ui/Notifications/index.ts +0 -2
  306. package/src/components/ui/OrganizationSwitcherDialog/OrganizationSwitcherDialog.tsx +0 -204
  307. package/src/components/ui/OrganizationSwitcherDialog/index.ts +0 -1
  308. package/src/components/ui/OutageList/OutageItem.tsx +0 -48
  309. package/src/components/ui/OutageList/OutageList.tsx +0 -54
  310. package/src/components/ui/OutageList/OutageSection.tsx +0 -39
  311. package/src/components/ui/OutageList/index.ts +0 -1
  312. package/src/components/ui/OutagesDialog/OutagesDialog.tsx +0 -71
  313. package/src/components/ui/OutagesDialog/index.ts +0 -1
  314. package/src/components/ui/PageContainer/PageContainer.tsx +0 -207
  315. package/src/components/ui/PageContainer/index.ts +0 -1
  316. package/src/components/ui/PanelSeparator/PanelResizeHandle.tsx +0 -67
  317. package/src/components/ui/PanelSeparator/index.ts +0 -1
  318. package/src/components/ui/ResponseHandler/ResponseHandler.tsx +0 -79
  319. package/src/components/ui/ResponseHandler/index.ts +0 -1
  320. package/src/components/ui/Sidebar/SidebarItem.tsx +0 -138
  321. package/src/components/ui/Sidebar/SidebarMenu.tsx +0 -33
  322. package/src/components/ui/Sidebar/SidebarMenuItem.tsx +0 -61
  323. package/src/components/ui/Sidebar/index.ts +0 -3
  324. package/src/components/ui/SortableList/SortableList.tsx +0 -172
  325. package/src/components/ui/SortableList/SortableListItem.tsx +0 -73
  326. package/src/components/ui/SortableList/SortableListItemDragHandle.tsx +0 -53
  327. package/src/components/ui/SortableList/SortableOverlay.tsx +0 -35
  328. package/src/components/ui/SortableList/context/SortableListItemContext.tsx +0 -17
  329. package/src/components/ui/SortableList/context/SortableListItemContextProvider.tsx +0 -19
  330. package/src/components/ui/SortableList/context/useSortableListItemContext.tsx +0 -5
  331. package/src/components/ui/Spinner/Spinner.tsx +0 -84
  332. package/src/components/ui/Spinner/index.ts +0 -1
  333. package/src/components/ui/Stepper/Stepper.tsx +0 -194
  334. package/src/components/ui/Stepper/index.ts +0 -2
  335. package/src/components/ui/Stepper/stepperModel.ts +0 -4
  336. package/src/components/ui/Table/Table.tsx +0 -812
  337. package/src/components/ui/Table/TableActionsCell.tsx +0 -81
  338. package/src/components/ui/Table/TableCaption.tsx +0 -33
  339. package/src/components/ui/Table/TableCell.tsx +0 -162
  340. package/src/components/ui/Table/TableCellAsyncContent.tsx +0 -28
  341. package/src/components/ui/Table/TableCheckboxCell.tsx +0 -65
  342. package/src/components/ui/Table/TableCheckboxHeader.tsx +0 -72
  343. package/src/components/ui/Table/TableColumnsEditorDialog.tsx +0 -241
  344. package/src/components/ui/Table/TableFilter.tsx +0 -31
  345. package/src/components/ui/Table/TableFiltersSidebarItem.tsx +0 -398
  346. package/src/components/ui/Table/TableHeader.tsx +0 -40
  347. package/src/components/ui/Table/TableHeaderCell.tsx +0 -434
  348. package/src/components/ui/Table/TableHeaderFilter.tsx +0 -104
  349. package/src/components/ui/Table/TableMenu.tsx +0 -26
  350. package/src/components/ui/Table/TableReadableIndexCell.tsx +0 -65
  351. package/src/components/ui/Table/TableSidebarMenu.tsx +0 -59
  352. package/src/components/ui/Table/classNames.ts +0 -7
  353. package/src/components/ui/Table/index.ts +0 -12
  354. package/src/components/ui/UserFeedbackDialog/UserFeedbackDialog.tsx +0 -168
  355. package/src/components/ui/UserFeedbackDialog/index.ts +0 -1
  356. package/src/components/ui/UserInactivityConfirmation/UserInactivityConfirmation.tsx +0 -59
  357. package/src/components/ui/UserInactivityConfirmation/index.ts +0 -1
  358. package/src/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.tsx +0 -584
  359. package/src/components/ui/UsersEffectiveRightsDetailsDialog/index.ts +0 -1
  360. package/src/context/caseAbac/CaseAbacContext.tsx +0 -24
  361. package/src/context/caseAbac/CaseAbacContextProvider.tsx +0 -69
  362. package/src/context/caseAbac/index.ts +0 -3
  363. package/src/context/caseAbac/useCaseAbacContext.tsx +0 -6
  364. package/src/context/caseTypeAbac/CaseTypeAbacContext.tsx +0 -16
  365. package/src/context/caseTypeAbac/CaseTypeAbacContextProvider.tsx +0 -40
  366. package/src/context/caseTypeAbac/index.ts +0 -3
  367. package/src/context/caseTypeAbac/useCaseTypeAbacContext.tsx +0 -6
  368. package/src/data/date.ts +0 -8
  369. package/src/data/queryDependencies.ts +0 -166
  370. package/src/dataHooks/useAssemblyProtocolsQuery/index.ts +0 -1
  371. package/src/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.ts +0 -39
  372. package/src/dataHooks/useCaseRightsQuery/index.ts +0 -1
  373. package/src/dataHooks/useCaseRightsQuery/useCaseRightsQuery.ts +0 -21
  374. package/src/dataHooks/useCaseSetCategoriesQuery/index.ts +0 -1
  375. package/src/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.ts +0 -39
  376. package/src/dataHooks/useCaseSetRightsQuery/index.ts +0 -1
  377. package/src/dataHooks/useCaseSetRightsQuery/useCaseSetRightsQuery.ts +0 -17
  378. package/src/dataHooks/useCaseSetStatsQuery/index.ts +0 -1
  379. package/src/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.ts +0 -31
  380. package/src/dataHooks/useCaseSetStatusesQuery/index.ts +0 -1
  381. package/src/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.ts +0 -39
  382. package/src/dataHooks/useCaseSetsQuery/index.ts +0 -1
  383. package/src/dataHooks/useCaseSetsQuery/useCaseSetsQuery.ts +0 -41
  384. package/src/dataHooks/useCaseTypeSetCategoriesQuery/index.ts +0 -1
  385. package/src/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.ts +0 -41
  386. package/src/dataHooks/useCaseTypeSetMembersQuery/index.ts +0 -1
  387. package/src/dataHooks/useCaseTypeSetMembersQuery/useCaseTypeSetMembersQuery.ts +0 -17
  388. package/src/dataHooks/useCaseTypeSetsQuery/index.ts +0 -1
  389. package/src/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.ts +0 -58
  390. package/src/dataHooks/useCaseTypeStatsQuery/index.ts +0 -1
  391. package/src/dataHooks/useCaseTypeStatsQuery/useCaseTypeStatsQuery.ts +0 -20
  392. package/src/dataHooks/useCaseTypesQuery/index.ts +0 -1
  393. package/src/dataHooks/useCaseTypesQuery/useCaseTypesQuery.ts +0 -43
  394. package/src/dataHooks/useColSetMembersQuery/index.ts +0 -1
  395. package/src/dataHooks/useColSetMembersQuery/useColSetMembersQuery.ts +0 -17
  396. package/src/dataHooks/useColSetsQuery/index.ts +0 -1
  397. package/src/dataHooks/useColSetsQuery/useColSetsQuery.ts +0 -39
  398. package/src/dataHooks/useColTypesQuery/index.ts +0 -1
  399. package/src/dataHooks/useColTypesQuery/useColTypesQuery.ts +0 -51
  400. package/src/dataHooks/useColsQuery/index.ts +0 -1
  401. package/src/dataHooks/useColsQuery/useColsQuery.ts +0 -60
  402. package/src/dataHooks/useConceptQuery/index.ts +0 -1
  403. package/src/dataHooks/useConceptQuery/useConceptQuery.ts +0 -52
  404. package/src/dataHooks/useConceptRelationTypeQuery/index.ts +0 -1
  405. package/src/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.ts +0 -21
  406. package/src/dataHooks/useConceptSetTypeQuery/index.ts +0 -1
  407. package/src/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.ts +0 -27
  408. package/src/dataHooks/useConceptSetsQuery/index.ts +0 -1
  409. package/src/dataHooks/useConceptSetsQuery/useConceptSetsQuery.ts +0 -38
  410. package/src/dataHooks/useDataCollectionSetMembersQuery/index.ts +0 -1
  411. package/src/dataHooks/useDataCollectionSetMembersQuery/useDataCollectionSetMembersQuery.ts +0 -17
  412. package/src/dataHooks/useDataCollectionsQuery/index.ts +0 -1
  413. package/src/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.ts +0 -45
  414. package/src/dataHooks/useDimTypesQuery/index.ts +0 -1
  415. package/src/dataHooks/useDimTypesQuery/useDimTypesQuery.ts +0 -26
  416. package/src/dataHooks/useDimsQuery/index.ts +0 -1
  417. package/src/dataHooks/useDimsQuery/useDimsQuery.ts +0 -55
  418. package/src/dataHooks/useDiseasesQuery/index.ts +0 -1
  419. package/src/dataHooks/useDiseasesQuery/useDiseasesQuery.ts +0 -39
  420. package/src/dataHooks/useEtiologicalAgentsQuery/index.ts +0 -1
  421. package/src/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.ts +0 -39
  422. package/src/dataHooks/useGeneticDistanceProtocolsQuery/index.ts +0 -1
  423. package/src/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.ts +0 -29
  424. package/src/dataHooks/useIdentifierIssuerOwnOrganizationQuery/index.ts +0 -1
  425. package/src/dataHooks/useIdentifierIssuerOwnOrganizationQuery/useIdentifierIssuerOwnOrganizationQuery.ts +0 -34
  426. package/src/dataHooks/useIdentifierIssuerQuery/index.ts +0 -1
  427. package/src/dataHooks/useIdentifierIssuerQuery/useIdentifierIssuerQuery.ts +0 -42
  428. package/src/dataHooks/useInviteUserConstraintsQuery/index.ts +0 -1
  429. package/src/dataHooks/useInviteUserConstraintsQuery/useInviteUserConstraintsQuery.ts +0 -32
  430. package/src/dataHooks/useOrganizationAccessCasePoliciesQuery/index.ts +0 -1
  431. package/src/dataHooks/useOrganizationAccessCasePoliciesQuery/useOrganizationAccessCasePoliciesQuery.ts +0 -20
  432. package/src/dataHooks/useOrganizationAdminPoliciesQuery/index.ts +0 -1
  433. package/src/dataHooks/useOrganizationAdminPoliciesQuery/useOrganizationAdminPoliciesQuery.ts +0 -60
  434. package/src/dataHooks/useOrganizationIdentifierIssuerLinksQuery/index.ts +0 -1
  435. package/src/dataHooks/useOrganizationIdentifierIssuerLinksQuery/useOrganizationIdentifierIssuerLinksQuery.ts +0 -18
  436. package/src/dataHooks/useOrganizationShareCasePoliciesQuery/index.ts +0 -1
  437. package/src/dataHooks/useOrganizationShareCasePoliciesQuery/useOrganizationShareCasePoliciesQuery.ts +0 -18
  438. package/src/dataHooks/useOrganizationsQuery/index.ts +0 -1
  439. package/src/dataHooks/useOrganizationsQuery/useOrganizationsQuery.ts +0 -40
  440. package/src/dataHooks/useRefColsQuery/index.ts +0 -1
  441. package/src/dataHooks/useRefColsQuery/useRefColsQuery.ts +0 -39
  442. package/src/dataHooks/useRefColsValidationRulesQuery/index.ts +0 -1
  443. package/src/dataHooks/useRefColsValidationRulesQuery/useRefColsValidationRulesQuery.ts +0 -17
  444. package/src/dataHooks/useRefDimsQuery/index.ts +0 -1
  445. package/src/dataHooks/useRefDimsQuery/useRefDimsQuery.ts +0 -39
  446. package/src/dataHooks/useRegionQuery/index.ts +0 -1
  447. package/src/dataHooks/useRegionQuery/useRegionQuery.ts +0 -52
  448. package/src/dataHooks/useRegionRelationTypeQuery/index.ts +0 -1
  449. package/src/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.ts +0 -24
  450. package/src/dataHooks/useRegionSetsQuery/index.ts +0 -1
  451. package/src/dataHooks/useRegionSetsQuery/useRegionSetsQuery.ts +0 -39
  452. package/src/dataHooks/useSequencingProtocolsQuery/index.ts +0 -1
  453. package/src/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.ts +0 -39
  454. package/src/dataHooks/useTreeAlgorithmCodesQuery/index.ts +0 -1
  455. package/src/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.ts +0 -42
  456. package/src/dataHooks/useUserAccessCasePoliciesQuery/index.ts +0 -1
  457. package/src/dataHooks/useUserAccessCasePoliciesQuery/useUserAccessCasePoliciesQuery.ts +0 -18
  458. package/src/dataHooks/useUserEffectiveRightsQuery/index.ts +0 -1
  459. package/src/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.ts +0 -125
  460. package/src/dataHooks/useUserShareCasePoliciesQuery/index.ts +0 -1
  461. package/src/dataHooks/useUserShareCasePoliciesQuery/useUserShareCasePoliciesQuery.ts +0 -18
  462. package/src/dataHooks/useUsersQuery/index.ts +0 -1
  463. package/src/dataHooks/useUsersQuery/useUsersQuery.ts +0 -43
  464. package/src/hoc/withDialog/index.ts +0 -1
  465. package/src/hoc/withDialog/withDialog.tsx +0 -132
  466. package/src/hoc/withPermissions/index.ts +0 -1
  467. package/src/hoc/withPermissions/withPermissions.tsx +0 -34
  468. package/src/hooks/useArray/index.ts +0 -1
  469. package/src/hooks/useArray/useArray.ts +0 -5
  470. package/src/hooks/useColumnsMenu/index.ts +0 -1
  471. package/src/hooks/useColumnsMenu/useColumnsMenu.tsx +0 -152
  472. package/src/hooks/useCreateMutation/index.ts +0 -1
  473. package/src/hooks/useCreateMutation/useCreateMutation.ts +0 -103
  474. package/src/hooks/useDeleteMutation/index.ts +0 -1
  475. package/src/hooks/useDeleteMutation/useDeleteMutation.ts +0 -92
  476. package/src/hooks/useDimensions/index.ts +0 -1
  477. package/src/hooks/useDimensions/useDimensions.ts +0 -82
  478. package/src/hooks/useEditMutation/index.ts +0 -1
  479. package/src/hooks/useEditMutation/useEditMutation.ts +0 -112
  480. package/src/hooks/useInitializeTableStore/index.ts +0 -1
  481. package/src/hooks/useInitializeTableStore/useInitializeTableStore.ts +0 -41
  482. package/src/hooks/useIsFormFieldRequiredFromSchema/index.ts +0 -1
  483. package/src/hooks/useIsFormFieldRequiredFromSchema/useIsFormFieldRequiredFromSchema.ts +0 -32
  484. package/src/hooks/useItemQuery/index.ts +0 -1
  485. package/src/hooks/useItemQuery/useItemQuery.ts +0 -82
  486. package/src/hooks/useOrganizationCasePolicyNameFactory/index.ts +0 -1
  487. package/src/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.ts +0 -31
  488. package/src/hooks/useQueryMemo/index.ts +0 -1
  489. package/src/hooks/useQueryMemo/useQueryMemo.ts +0 -24
  490. package/src/hooks/useScrollbarSize/index.ts +0 -1
  491. package/src/hooks/useScrollbarSize/useScrollbarSize.ts +0 -23
  492. package/src/hooks/useSubscribable/index.ts +0 -1
  493. package/src/hooks/useSubscribable/useSubscribable.ts +0 -30
  494. package/src/hooks/useUpdateBreadcrumb/index.ts +0 -1
  495. package/src/hooks/useUpdateBreadcrumb/useUpdateBreadcrumb.ts +0 -21
  496. package/src/hooks/useUpdateDocumentTitle/index.ts +0 -1
  497. package/src/hooks/useUpdateDocumentTitle/useUpdateDocumentTitle.ts +0 -10
  498. package/src/hooks/useUserCasePolicyNameFactory/index.ts +0 -1
  499. package/src/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.ts +0 -37
  500. package/src/index.ts +0 -301
  501. package/src/models/admin.ts +0 -7
  502. package/src/models/auth.ts +0 -14
  503. package/src/models/caseAccess.ts +0 -21
  504. package/src/models/config.ts +0 -153
  505. package/src/models/data.ts +0 -11
  506. package/src/models/dataHooks.ts +0 -18
  507. package/src/models/environment.ts +0 -10
  508. package/src/models/epi.ts +0 -188
  509. package/src/models/filter.ts +0 -39
  510. package/src/models/form.ts +0 -74
  511. package/src/models/generic.ts +0 -4
  512. package/src/models/nestedMenu.ts +0 -21
  513. package/src/models/notification.ts +0 -12
  514. package/src/models/outage.ts +0 -7
  515. package/src/models/query.ts +0 -75
  516. package/src/models/reactRouter.ts +0 -36
  517. package/src/models/table.ts +0 -191
  518. package/src/models/testId.ts +0 -1
  519. package/src/models/tree.ts +0 -32
  520. package/src/pages/AcceptInvitationPage/AcceptInvitationPage.tsx +0 -96
  521. package/src/pages/AcceptInvitationPage/index.ts +0 -1
  522. package/src/pages/AdminPage/AdminPage.tsx +0 -164
  523. package/src/pages/AdminPage/index.ts +0 -1
  524. package/src/pages/CaseSetStatusAdminPage/CaseSetStatusAdminPage.tsx +0 -98
  525. package/src/pages/CaseSetStatusAdminPage/index.ts +0 -1
  526. package/src/pages/CaseTypeSetCategoriesAdminPage/CaseTypeSetCategoriesAdminPage.tsx +0 -108
  527. package/src/pages/CaseTypeSetCategoriesAdminPage/index.ts +0 -1
  528. package/src/pages/CaseTypeSetsAdminPage/CaseTypeSetsAdminPage.tsx +0 -200
  529. package/src/pages/CaseTypeSetsAdminPage/index.ts +0 -1
  530. package/src/pages/CaseTypesAdminPage/CaseTypesAdminPage.tsx +0 -204
  531. package/src/pages/CaseTypesAdminPage/index.ts +0 -1
  532. package/src/pages/CasesDetailPage/CasesDetailPage.tsx +0 -57
  533. package/src/pages/CasesDetailPage/index.ts +0 -1
  534. package/src/pages/CasesPage/CasesPage.tsx +0 -338
  535. package/src/pages/CasesPage/index.ts +0 -1
  536. package/src/pages/ChooseIdentityProviderPage/ChooseIdentityProviderPage.tsx +0 -166
  537. package/src/pages/ChooseIdentityProviderPage/index.ts +0 -1
  538. package/src/pages/ColSetsAdminPage/ColSetsAdminPage.tsx +0 -175
  539. package/src/pages/ColSetsAdminPage/index.ts +0 -1
  540. package/src/pages/ColsAdminPage/ColsAdminPage.tsx +0 -400
  541. package/src/pages/ColsAdminPage/index.ts +0 -1
  542. package/src/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.tsx +0 -134
  543. package/src/pages/ConceptRelationsAdminPage/index.ts +0 -1
  544. package/src/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.tsx +0 -167
  545. package/src/pages/ConceptSetsAdminPage/index.ts +0 -1
  546. package/src/pages/ConceptsAdminPage/ConceptsAdminPage.tsx +0 -138
  547. package/src/pages/ConceptsAdminPage/index.ts +0 -1
  548. package/src/pages/CrudPage/CrudPage.tsx +0 -646
  549. package/src/pages/CrudPage/CrudPageDeleteDialog.tsx +0 -85
  550. package/src/pages/CrudPage/CrudPageEditDialog.tsx +0 -165
  551. package/src/pages/CrudPage/index.ts +0 -1
  552. package/src/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.tsx +0 -156
  553. package/src/pages/DataCollectionSetsAdminPage/index.ts +0 -1
  554. package/src/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.tsx +0 -238
  555. package/src/pages/DataCollectionVisualizationPage/index.ts +0 -1
  556. package/src/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.tsx +0 -96
  557. package/src/pages/DataCollectionsAdminPage/index.ts +0 -1
  558. package/src/pages/DimsAdminPage/DimsAdminPage.tsx +0 -208
  559. package/src/pages/DimsAdminPage/index.ts +0 -1
  560. package/src/pages/DiseasesAdminPage/DiseasesAdminPage.tsx +0 -97
  561. package/src/pages/DiseasesAdminPage/index.ts +0 -1
  562. package/src/pages/ErrorPage/ErrorPage.tsx +0 -25
  563. package/src/pages/ErrorPage/index.ts +0 -1
  564. package/src/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.tsx +0 -96
  565. package/src/pages/EtiologicalAgentsAdminPage/index.ts +0 -1
  566. package/src/pages/EtiologiesAdminPage/EtiologiesAdminPage.tsx +0 -110
  567. package/src/pages/EtiologiesAdminPage/index.ts +0 -1
  568. package/src/pages/EventsDetailPage/EventsDetailPage.tsx +0 -67
  569. package/src/pages/EventsDetailPage/index.ts +0 -1
  570. package/src/pages/EventsPage/EventsPage.tsx +0 -262
  571. package/src/pages/EventsPage/index.ts +0 -1
  572. package/src/pages/HomePage/HomePage.tsx +0 -47
  573. package/src/pages/HomePage/index.ts +0 -1
  574. package/src/pages/IdentifierIssuersAdminPage/IdentifierIssuersAdminPage.tsx +0 -106
  575. package/src/pages/IdentifierIssuersAdminPage/index.ts +0 -1
  576. package/src/pages/OrganizationAccessCasePoliciesAdminPage/OrganizationAccessCasePoliciesAdminPage.tsx +0 -217
  577. package/src/pages/OrganizationAccessCasePoliciesAdminPage/index.ts +0 -1
  578. package/src/pages/OrganizationAdminPoliciesAdminPage/OrganizationAdminPoliciesAdminPage.tsx +0 -119
  579. package/src/pages/OrganizationAdminPoliciesAdminPage/index.ts +0 -1
  580. package/src/pages/OrganizationContactsAdminPage/OrganizationContactsAdminPage.tsx +0 -127
  581. package/src/pages/OrganizationContactsAdminPage/index.ts +0 -1
  582. package/src/pages/OrganizationShareCasePoliciesAdminPage/OrganizationShareCasePoliciesAdminPage.tsx +0 -183
  583. package/src/pages/OrganizationShareCasePoliciesAdminPage/index.ts +0 -1
  584. package/src/pages/OrganizationSitesAdminPage/OrganizationSitesAdminPage.tsx +0 -132
  585. package/src/pages/OrganizationSitesAdminPage/index.ts +0 -1
  586. package/src/pages/OrganizationsAdminPage/OrganizationsAdminPage.tsx +0 -188
  587. package/src/pages/OrganizationsAdminPage/index.ts +0 -1
  588. package/src/pages/OutagesAdminPage/OutagesAdminPage.tsx +0 -158
  589. package/src/pages/OutagesAdminPage/index.ts +0 -1
  590. package/src/pages/PostLoginPage/PostLoginPage.tsx +0 -39
  591. package/src/pages/PostLoginPage/index.ts +0 -1
  592. package/src/pages/PostLogoutPage/PostLogoutPage.tsx +0 -44
  593. package/src/pages/PostLogoutPage/index.ts +0 -1
  594. package/src/pages/RefColsAdminPage/RefColsAdminPage.tsx +0 -286
  595. package/src/pages/RefColsAdminPage/index.ts +0 -1
  596. package/src/pages/RefDimsAdminPage/RefDimsAdminPage.tsx +0 -152
  597. package/src/pages/RefDimsAdminPage/index.ts +0 -1
  598. package/src/pages/RegionRelationsAdminPage/RegionRelationsAdminPage.tsx +0 -132
  599. package/src/pages/RegionRelationsAdminPage/index.ts +0 -1
  600. package/src/pages/RegionSetShapesAdminPage/RegionSetShapesAdminPage.tsx +0 -132
  601. package/src/pages/RegionSetShapesAdminPage/index.ts +0 -1
  602. package/src/pages/RegionSetsAdminPage/RegionSetsAdminPage.tsx +0 -147
  603. package/src/pages/RegionSetsAdminPage/index.ts +0 -1
  604. package/src/pages/RegionsAdminPage/RegionsAdminPage.tsx +0 -150
  605. package/src/pages/RegionsAdminPage/index.ts +0 -1
  606. package/src/pages/RouterErrorPage/RouterErrorPage.tsx +0 -23
  607. package/src/pages/RouterErrorPage/index.ts +0 -1
  608. package/src/pages/TrendsPage/TrendsPage.tsx +0 -17
  609. package/src/pages/TrendsPage/index.ts +0 -1
  610. package/src/pages/UploadPage/UploadPage.tsx +0 -40
  611. package/src/pages/UploadPage/index.ts +0 -1
  612. package/src/pages/UserAccessCasePoliciesAdminPage/UserAccessCasePoliciesAdminPage.tsx +0 -209
  613. package/src/pages/UserAccessCasePoliciesAdminPage/index.ts +0 -1
  614. package/src/pages/UserEffectiveRightsAdminPage/UserEffectiveRightsAdminPage.tsx +0 -331
  615. package/src/pages/UserEffectiveRightsAdminPage/index.ts +0 -1
  616. package/src/pages/UserEffectiveRightsTesterAdminPage/UserEffectiveRightsTesterAdminPage.tsx +0 -283
  617. package/src/pages/UserEffectiveRightsTesterAdminPage/index.ts +0 -1
  618. package/src/pages/UserInvitationsAdminPage/UserInvitationConsumeDialog.tsx +0 -143
  619. package/src/pages/UserInvitationsAdminPage/UserInvitationShareDialog.tsx +0 -100
  620. package/src/pages/UserInvitationsAdminPage/UserInvitationsAdminPage.tsx +0 -218
  621. package/src/pages/UserInvitationsAdminPage/index.ts +0 -1
  622. package/src/pages/UserShareCasePoliciesAdminPage/UserShareCasePoliciesAdminPage.tsx +0 -183
  623. package/src/pages/UserShareCasePoliciesAdminPage/index.ts +0 -1
  624. package/src/pages/UsersAdminPage/UsersAdminPage.tsx +0 -240
  625. package/src/pages/UsersAdminPage/index.ts +0 -1
  626. package/src/routes/adminRoutes.tsx +0 -801
  627. package/src/routes/index.ts +0 -2
  628. package/src/routes/routes.tsx +0 -235
  629. package/src/setup/index.ts +0 -1
  630. package/src/setup/setup.ts +0 -5
  631. package/src/setup/yup.ts +0 -203
  632. package/src/stores/epiDashboardStore/epiDashboardStore.ts +0 -750
  633. package/src/stores/epiDashboardStore/epiDashboardStoreContext.tsx +0 -6
  634. package/src/stores/epiDashboardStore/index.ts +0 -2
  635. package/src/stores/epiUploadStore/epiUploadStore.ts +0 -351
  636. package/src/stores/epiUploadStore/epiUploadStoreContext.tsx +0 -6
  637. package/src/stores/epiUploadStore/index.ts +0 -2
  638. package/src/stores/oidcStore/index.ts +0 -1
  639. package/src/stores/oidcStore/oidcStore.ts +0 -43
  640. package/src/stores/outagesStore/index.ts +0 -1
  641. package/src/stores/outagesStore/outagesStore.ts +0 -31
  642. package/src/stores/tableStore/TableStoreContext.tsx +0 -6
  643. package/src/stores/tableStore/TableStoreContextProvider.tsx +0 -20
  644. package/src/stores/tableStore/index.ts +0 -4
  645. package/src/stores/tableStore/tableStore.ts +0 -547
  646. package/src/stores/tableStore/useTableStoreContext.tsx +0 -7
  647. package/src/stores/userProfileStore/index.ts +0 -1
  648. package/src/stores/userProfileStore/userProfileStore.ts +0 -112
  649. package/src/test/integration/lib/render.tsx +0 -33
  650. package/src/test/integration/tests/integration-example/HelloWorld.test.tsx +0 -14
  651. package/src/test/integration/tests/integration-example/HelloWorld.tsx +0 -9
  652. package/src/test/setup-browser.ts +0 -3
  653. package/src/test/setup-jsdom.ts +0 -6
  654. package/src/test/setup.ts +0 -9
  655. package/src/utils/AbacUtil/AbacUtil.ts +0 -21
  656. package/src/utils/AbacUtil/index.ts +0 -1
  657. package/src/utils/AxiosUtil/AxiosUtil.test.ts +0 -66
  658. package/src/utils/AxiosUtil/AxiosUtil.ts +0 -47
  659. package/src/utils/AxiosUtil/index.ts +0 -1
  660. package/src/utils/CaseSelectionUtil/CaseSelectionUtil.ts +0 -32
  661. package/src/utils/CaseSelectionUtil/index.ts +0 -1
  662. package/src/utils/CaseSetUtil/CaseSetUtil.ts +0 -13
  663. package/src/utils/CaseSetUtil/index.ts +0 -1
  664. package/src/utils/CaseTypeUtil/CaseTypeUtil.ts +0 -178
  665. package/src/utils/CaseTypeUtil/index.ts +0 -1
  666. package/src/utils/CaseUtil/CaseUtil.ts +0 -401
  667. package/src/utils/CaseUtil/index.ts +0 -1
  668. package/src/utils/DashboardUtil/DashboardUtil.ts +0 -46
  669. package/src/utils/DashboardUtil/index.ts +0 -1
  670. package/src/utils/DataHookUtil/DataHookUtil.ts +0 -137
  671. package/src/utils/DataHookUtil/index.ts +0 -1
  672. package/src/utils/DataSetUtil/DataSetUtil.ts +0 -70
  673. package/src/utils/DataSetUtil/index.ts +0 -1
  674. package/src/utils/DataUtil/DataUtil.ts +0 -84
  675. package/src/utils/DataUtil/index.ts +0 -1
  676. package/src/utils/DownloadUtil/DownloadUtil.ts +0 -237
  677. package/src/utils/DownloadUtil/index.ts +0 -1
  678. package/src/utils/EffectiveRightsUtil/EffectiveRightsUtil.ts +0 -142
  679. package/src/utils/EffectiveRightsUtil/index.ts +0 -1
  680. package/src/utils/EpiCurveUtil/EpiCurveUtil.ts +0 -180
  681. package/src/utils/EpiCurveUtil/index.ts +0 -1
  682. package/src/utils/EpiFilterUtil/EpiFilterUtil.ts +0 -232
  683. package/src/utils/EpiFilterUtil/index.ts +0 -1
  684. package/src/utils/EpiLineListUtil/EpiLineListUtil.ts +0 -15
  685. package/src/utils/EpiLineListUtil/index.ts +0 -1
  686. package/src/utils/EpiMapUtil/EpiMapUtil.test.ts +0 -54
  687. package/src/utils/EpiMapUtil/EpiMapUtil.ts +0 -80
  688. package/src/utils/EpiMapUtil/index.ts +0 -1
  689. package/src/utils/EpiTreeUtil/EpiTreeUtil.test.ts +0 -2467
  690. package/src/utils/EpiTreeUtil/EpiTreeUtil.ts +0 -1055
  691. package/src/utils/EpiTreeUtil/index.ts +0 -1
  692. package/src/utils/EpiUploadUtil/EpiUploadUtil.ts +0 -857
  693. package/src/utils/EpiUploadUtil/index.ts +0 -1
  694. package/src/utils/FileUtil/FileUtil.ts +0 -22
  695. package/src/utils/FileUtil/index.ts +0 -1
  696. package/src/utils/FormUtil/FormUtil.test.ts +0 -36
  697. package/src/utils/FormUtil/FormUtil.ts +0 -63
  698. package/src/utils/FormUtil/index.ts +0 -1
  699. package/src/utils/MenuDataUtil/MenuDataUtil.ts +0 -54
  700. package/src/utils/MenuDataUtil/index.ts +0 -1
  701. package/src/utils/NewickUtil/NewickUtil.test.ts +0 -187
  702. package/src/utils/NewickUtil/NewickUtil.ts +0 -69
  703. package/src/utils/NewickUtil/index.ts +0 -1
  704. package/src/utils/NotificationUtil/NotificationUtil.ts +0 -28
  705. package/src/utils/NotificationUtil/index.ts +0 -1
  706. package/src/utils/NumberUtil/NumberUtil.test.ts +0 -113
  707. package/src/utils/NumberUtil/NumberUtil.ts +0 -67
  708. package/src/utils/NumberUtil/index.ts +0 -1
  709. package/src/utils/ObjectUtil/ObjectUtil.test.ts +0 -43
  710. package/src/utils/ObjectUtil/ObjectUtil.ts +0 -28
  711. package/src/utils/ObjectUtil/index.ts +0 -1
  712. package/src/utils/OutageUtil/OutageUtil.test.ts +0 -108
  713. package/src/utils/OutageUtil/OutageUtil.ts +0 -81
  714. package/src/utils/OutageUtil/index.ts +0 -1
  715. package/src/utils/QueryUtil/QueryUtil.test.ts +0 -42
  716. package/src/utils/QueryUtil/QueryUtil.ts +0 -105
  717. package/src/utils/QueryUtil/index.ts +0 -1
  718. package/src/utils/StringUtil/StringUtil.test.ts +0 -61
  719. package/src/utils/StringUtil/StringUtil.ts +0 -91
  720. package/src/utils/StringUtil/index.ts +0 -1
  721. package/src/utils/TableUtil/TableUtil.ts +0 -665
  722. package/src/utils/TableUtil/index.ts +0 -1
  723. package/src/utils/TestIdUtil/TestIdUtil.test.ts +0 -12
  724. package/src/utils/TestIdUtil/TestIdUtil.ts +0 -13
  725. package/src/utils/TestIdUtil/index.ts +0 -1
  726. package/src/utils/TimeUtil/TimeUtil.ts +0 -38
  727. package/src/utils/TimeUtil/index.ts +0 -1
  728. package/src/utils/UserManagerUtil/UserManagerUtil.test.ts +0 -41
  729. package/src/utils/UserManagerUtil/UserManagerUtil.ts +0 -39
  730. package/src/utils/UserManagerUtil/index.ts +0 -1
  731. package/src/utils/ValidationUtil/ValidationUtil.test.ts +0 -61
  732. package/src/utils/ValidationUtil/ValidationUtil.ts +0 -56
  733. package/src/utils/ValidationUtil/index.ts +0 -1
  734. /package/{src → dist}/locale/en.json +0 -0
  735. /package/{src → dist}/locale/nl.json +0 -0
  736. /package/{src/@types → dist}/mui.d.ts +0 -0
  737. /package/{src/@types → dist}/ui.d.ts +0 -0
  738. /package/{src/@types → dist}/vite-env.d.ts +0 -0
  739. /package/{src/@types → dist}/yup.d.ts +0 -0
@@ -1,906 +0,0 @@
1
- import {
2
- Alert,
3
- AlertTitle,
4
- Box,
5
- Button,
6
- ListItemIcon,
7
- ListItemText,
8
- MenuItem,
9
- useTheme,
10
- } from '@mui/material';
11
- import ClearIcon from '@mui/icons-material/Clear';
12
- import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';
13
- import FilterAltIcon from '@mui/icons-material/FilterAlt';
14
- import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
15
- import LinkIcon from '@mui/icons-material/Link';
16
- import type {
17
- ReactElement,
18
- Ref,
19
- } from 'react';
20
- import {
21
- useCallback,
22
- useContext,
23
- useEffect,
24
- useImperativeHandle,
25
- useMemo,
26
- useRef,
27
- useState,
28
- } from 'react';
29
- import { useTranslation } from 'react-i18next';
30
- import { useStore } from 'zustand';
31
- import { useDebouncedCallback } from 'use-debounce';
32
-
33
- import type { EpiContextMenuConfigWithPosition } from '../EpiContextMenu';
34
- import { EpiContextMenu } from '../EpiContextMenu';
35
- import { EpiWidgetUnavailable } from '../EpiWidgetUnavailable';
36
- import { EpiTreeDescription } from '../EpiTreeDescription';
37
- import type { RetrievePhylogeneticTreeRequestBody } from '../../../api';
38
- import { CaseApi } from '../../../api';
39
- import { TreeFilter } from '../../../classes/filters/TreeFilter';
40
- import { ConfigManager } from '../../../classes/managers/ConfigManager';
41
- import { DevicePixelRatioManager } from '../../../classes/managers/DevicePixelRatioManager';
42
- import { EpiEventBusManager } from '../../../classes/managers/EpiEventBusManager';
43
- import { EpiHighlightingManager } from '../../../classes/managers/EpiHighlightingManager';
44
- import { Subject } from '../../../classes/Subject';
45
- import { useDimensions } from '../../../hooks/useDimensions';
46
- import { useScrollbarSize } from '../../../hooks/useScrollbarSize';
47
- import { useSubscribable } from '../../../hooks/useSubscribable';
48
- import type {
49
- EpiLinkedScrollSubjectValue,
50
- TreeConfiguration,
51
- Highlighting,
52
- } from '../../../models/epi';
53
- import { EPI_ZONE } from '../../../models/epi';
54
- import type { MenuItemData } from '../../../models/nestedMenu';
55
- import type {
56
- TreeAssembly,
57
- TreePathProperties,
58
- } from '../../../models/tree';
59
- import { EpiDashboardStoreContext } from '../../../stores/epiDashboardStore';
60
- import { userProfileStore } from '../../../stores/userProfileStore';
61
- import { SELECTION_FILTER_GROUP } from '../../../utils/CaseTypeUtil';
62
- import { QueryUtil } from '../../../utils/QueryUtil';
63
- import { Spinner } from '../../ui/Spinner';
64
- import { EpiWidget } from '../EpiWidget';
65
- import { DownloadUtil } from '../../../utils/DownloadUtil';
66
- import { useQueryMemo } from '../../../hooks/useQueryMemo';
67
- import { EpiTreeUtil } from '../../../utils/EpiTreeUtil';
68
-
69
- type ZoomInMenuItemConfig = {
70
- caseIds?: string[];
71
- rootId?: string;
72
- };
73
-
74
- type EpiTreeProps = {
75
- readonly linkedScrollSubject: Subject<EpiLinkedScrollSubjectValue>;
76
- readonly ref: Ref<EpiTreeRef>;
77
- readonly itemHeight: number;
78
- };
79
-
80
- export interface EpiTreeRef {
81
- link: () => void;
82
- }
83
-
84
- export const EpiTree = ({ linkedScrollSubject, ref, itemHeight }: EpiTreeProps) => {
85
- const theme = useTheme();
86
- const { t } = useTranslation();
87
- const scrollbarSize = useScrollbarSize();
88
- const scrollContainerRef = useRef<HTMLDivElement>(null);
89
- const containerRef = useRef<HTMLDivElement>(null);
90
- const { dimensions: { width, height } } = useDimensions(containerRef);
91
- const [treeCanvas, setTreeCanvas] = useState<HTMLCanvasElement>();
92
- const [headerCanvas, setHeaderCanvas] = useState<HTMLCanvasElement>();
93
- const highlightingManager = useMemo(() => EpiHighlightingManager.instance, []);
94
- const canvasScrollSubject = useMemo<Subject<{ x: number; y: number }>>(() => new Subject({ x: 0, y: 0 }), []);
95
- const epiDashboardStore = useContext(EpiDashboardStoreContext);
96
- const setPhylogeneticTreeResponse = useStore(epiDashboardStore, (state) => state.setPhylogeneticTreeResponse);
97
- const baseData = useStore(epiDashboardStore, (state) => state.baseData);
98
- const filteredCases = useStore(epiDashboardStore, (state) => state.filteredData[SELECTION_FILTER_GROUP]);
99
- const setSorting = useStore(epiDashboardStore, (state) => state.setSorting);
100
- const tree = useStore(epiDashboardStore, (state) => state.tree);
101
- const sortByField = useStore(epiDashboardStore, (state) => state.sortByField);
102
- const stratification = useStore(epiDashboardStore, (state) => state.stratification);
103
- const completeCaseType = useStore(epiDashboardStore, (state) => state.completeCaseType);
104
- const hasActiveTreeFilter = useStore(epiDashboardStore, (state) => !state.filters.find(filter => filter instanceof TreeFilter).isInitialFilterValue());
105
- const addTreeFilter = useStore(epiDashboardStore, (state) => state.addTreeFilter);
106
- const treeFilterStepOut = useStore(epiDashboardStore, (state) => state.treeFilterStepOut);
107
- const updateEpiTreeWidgetData = useStore(epiDashboardStore, (state) => state.updateEpiTreeWidgetData);
108
- const removeTreeFilter = useStore(epiDashboardStore, (state) => state.removeTreeFilter);
109
- const isCaseDataLoading = useStore(epiDashboardStore, (state) => state.isDataLoading);
110
- const newick = useStore(epiDashboardStore, (state) => state.newick);
111
- const resetTreeAddresses = useStore(epiDashboardStore, (state) => state.resetTreeAddresses);
112
- const isShowDistancesEnabled = useStore(userProfileStore, (state) => state.epiDashboardTreeSettings.isShowDistancesEnabled);
113
- const [epiContextMenuConfig, setEpiContextMenuConfig] = useState<EpiContextMenuConfigWithPosition | null>(null);
114
- const [zoomInMenuItemConfig, setZoomInMenuItemConfig] = useState<ZoomInMenuItemConfig>(null);
115
- const [extraLeafInfoId, setExtraLeafInfoId] = useState<string>(null);
116
- const [treeConfiguration, setTreeConfiguration] = useState<TreeConfiguration>(epiDashboardStore.getState().epiTreeWidgetData.treeConfiguration);
117
- const [treeAssembly, setTreeAssembly] = useState<TreeAssembly>(null);
118
- const [verticalScrollPosition, setVerticalScrollPosition] = useState<number>(!isNaN(epiDashboardStore.getState().epiTreeWidgetData.verticalScrollPosition) ? epiDashboardStore.getState().epiTreeWidgetData.verticalScrollPosition : 0);
119
- const [horizontalScrollPosition, setHorizontalScrollPosition] = useState<number>(!isNaN(epiDashboardStore.getState().epiTreeWidgetData.horizontalScrollPosition) ? epiDashboardStore.getState().epiTreeWidgetData.horizontalScrollPosition : 0);
120
- const [zoomLevel, setZoomLevel] = useState<number>(!isNaN(epiDashboardStore.getState().epiTreeWidgetData.zoomLevel) ? epiDashboardStore.getState().epiTreeWidgetData.zoomLevel : 1);
121
- const [devicePixelRatio, setDevicePixelRatio] = useState<number>(DevicePixelRatioManager.instance.data);
122
- const [isLinked, setIsLinked] = useState(true);
123
- const internalHighlightingSubject = useMemo(() => new Subject<Highlighting>({
124
- caseIds: [],
125
- origin: null,
126
- }), []);
127
-
128
- const treeConfigurations = useMemo(() => EpiTreeUtil.getTreeConfigurations(completeCaseType), [completeCaseType]);
129
-
130
- const treeCanvasAriaLabel = useMemo(() => {
131
- if (!treeConfiguration) {
132
- return t('Phylogenetic tree visualization');
133
- }
134
-
135
- const label = treeConfiguration.col?.label || t('data');
136
- const geneticDistanceProtocol = treeConfiguration.geneticDistanceProtocol?.name || t('unknown protocol');
137
- const treeAlgorithm = treeConfiguration.treeAlgorithm?.name || t('unknown algorithm');
138
-
139
- return t('Figure of a phylogenetic tree belonging to {{label}}. Generated using {{geneticDistanceProtocol}} and {{treeAlgorithm}}.', {
140
- label,
141
- geneticDistanceProtocol,
142
- treeAlgorithm,
143
- });
144
- }, [treeConfiguration, t]);
145
-
146
- useEffect(() => {
147
- const unsubscribeHighlightingManager = highlightingManager.subscribe((highlighting) => {
148
- if (highlighting.origin === EPI_ZONE.TREE) {
149
- return;
150
- }
151
- internalHighlightingSubject.next(highlighting);
152
- });
153
- const unsubscribeInternalHighlightingSubject = internalHighlightingSubject.subscribe((highlighting) => {
154
- if (highlighting.origin !== EPI_ZONE.TREE) {
155
- return;
156
- }
157
- highlightingManager.highlight(highlighting);
158
- });
159
-
160
- return () => {
161
- unsubscribeHighlightingManager();
162
- unsubscribeInternalHighlightingSubject();
163
- };
164
- }, [highlightingManager, internalHighlightingSubject]);
165
-
166
- useEffect(() => {
167
- if (isLinked && zoomLevel !== 1) {
168
- setIsLinked(false);
169
- }
170
- }, [isLinked, zoomLevel]);
171
-
172
- const caseIds = useMemo(() => filteredCases.map(c => c.id).sort(), [filteredCases]);
173
-
174
- useEffect(() => {
175
- resetTreeAddresses();
176
- }, [caseIds, resetTreeAddresses]);
177
-
178
- const hasEnoughSequencesToShowTree = useMemo(() => caseIds.length >= 2 && caseIds.every(x => !!x), [caseIds]);
179
- const hasToManyResultsToShowTree = useMemo(() => caseIds.length > 0 && completeCaseType.read_max_tree_size > 0 && caseIds.length > completeCaseType.read_max_tree_size, [caseIds, completeCaseType.read_max_tree_size]);
180
-
181
- const retrievePhylogeneticTreeRequestBody = useMemo<RetrievePhylogeneticTreeRequestBody>(() => ({
182
- case_ids: caseIds,
183
- genetic_distance_col_id: treeConfiguration?.col.id,
184
- tree_algorithm_code: treeConfiguration?.treeAlgorithm.code,
185
- case_type_id: completeCaseType.id,
186
- }), [caseIds, completeCaseType.id, treeConfiguration?.col.id, treeConfiguration?.treeAlgorithm.code]);
187
-
188
- const { isLoading: isTreeLoading, error: treeError, data: treeData } = useQueryMemo({
189
- queryKey: QueryUtil.getRetrievePhylogeneticTreeKey(retrievePhylogeneticTreeRequestBody),
190
- queryFn: async ({ signal }) => {
191
- const response = await CaseApi.instance.retrievePhylogeneticTree(retrievePhylogeneticTreeRequestBody, { signal });
192
- return response.data;
193
- },
194
- enabled: hasEnoughSequencesToShowTree && !!treeConfiguration && !hasToManyResultsToShowTree,
195
- retry: false,
196
- staleTime: Infinity,
197
- });
198
-
199
- const isLoading = !!treeConfiguration && (isCaseDataLoading || (hasEnoughSequencesToShowTree && isTreeLoading));
200
- const isTreeUnavailable = hasToManyResultsToShowTree || !isCaseDataLoading && ((!isLoading && !!treeError) || !hasEnoughSequencesToShowTree || tree?.maxBranchLength?.toNumber() === 0 || tree?.size === 0 || !treeConfiguration || (!isLoading && tree === null));
201
- const shouldShowTree = !hasToManyResultsToShowTree && !!treeConfiguration && !isCaseDataLoading && !treeError && !isTreeLoading && width > 0 && tree?.size > 0 && hasEnoughSequencesToShowTree;
202
-
203
- const treeCanvasWidth = width;
204
- const treeCanvasHeight = height - ConfigManager.instance.config.epiTree.HEADER_HEIGHT;
205
-
206
- const treeWidthMinusPadding = treeCanvasWidth - (2 * ConfigManager.instance.config.epiTree.TREE_PADDING);
207
- const pixelToGeneticDistanceRatio = tree?.maxBranchLength ? treeWidthMinusPadding / tree.maxBranchLength.toNumber() : null;
208
- // Note: There is some magic here, because of the position: sticky for the table header
209
- const treeHeight = tree?.size ? (tree.size * itemHeight) + scrollbarSize : itemHeight;
210
-
211
- useEffect(() => {
212
- if (treeData) {
213
- setPhylogeneticTreeResponse(treeData);
214
- }
215
- }, [treeData, setPhylogeneticTreeResponse]);
216
-
217
- useEffect(() => {
218
- const unsubscribe = canvasScrollSubject.subscribe((data) => {
219
- if (!isNaN(data.x)) {
220
- setHorizontalScrollPosition(data.x);
221
- }
222
- if (!isNaN(data.y)) {
223
- setVerticalScrollPosition(data.y);
224
- }
225
- });
226
-
227
- return () => {
228
- unsubscribe();
229
- };
230
- }, [canvasScrollSubject]);
231
-
232
- useEffect(() => {
233
- if (!treeConfigurations?.length) {
234
- setTreeConfiguration(null);
235
- }
236
- const newConfig = epiDashboardStore.getState().epiTreeWidgetData.treeConfiguration || treeConfigurations[0];
237
-
238
- setTreeConfiguration(newConfig);
239
- updateEpiTreeWidgetData({
240
- treeConfiguration: newConfig,
241
- });
242
- }, [epiDashboardStore, treeConfigurations, updateEpiTreeWidgetData]);
243
-
244
- const updateLinkedScrollSubjectDebounced = useDebouncedCallback((position: number) => {
245
- linkedScrollSubject.next({
246
- position: position / devicePixelRatio,
247
- origin: scrollContainerRef.current,
248
- });
249
- }, ConfigManager.instance.config.epiTree.LINKED_SCROLL_DEBOUNCE_DELAY_MS, { leading: true, trailing: true });
250
-
251
- const updateScrollPosition = useCallback((positionX: number, positionY: number, internalZoomLevel: number) => {
252
- const { newPositionX, newPositionY } = EpiTreeUtil.getSanitizedScrollPosition({
253
- devicePixelRatio,
254
- internalZoomLevel,
255
- isLinked,
256
- positionX,
257
- positionY,
258
- treeCanvasHeight,
259
- treeCanvasWidth,
260
- treeHeight,
261
- });
262
-
263
- canvasScrollSubject.next({
264
- x: newPositionX,
265
- y: newPositionY,
266
- });
267
-
268
- if (isLinked && internalZoomLevel === 1) {
269
- updateLinkedScrollSubjectDebounced(newPositionY);
270
- }
271
- }, [devicePixelRatio, isLinked, treeCanvasWidth, canvasScrollSubject, treeHeight, treeCanvasHeight, updateLinkedScrollSubjectDebounced]);
272
-
273
- useEffect(() => {
274
- if (sortByField && isLinked) {
275
- setIsLinked(false);
276
- setZoomLevel(ConfigManager.instance.config.epiTree.INITIAL_UNLINKED_ZOOM_LEVEL);
277
- updateScrollPosition(0, 0, 0);
278
- }
279
- }, [isLinked, sortByField, updateScrollPosition]);
280
-
281
- const devicePixelRatioManagerCallback = useCallback((newDevicePixelRation: number, previousDevicePixelRatio: number) => {
282
- canvasScrollSubject.next({
283
- x: (canvasScrollSubject.data.x / previousDevicePixelRatio) * newDevicePixelRation,
284
- y: (canvasScrollSubject.data.y / previousDevicePixelRatio) * newDevicePixelRation,
285
- });
286
- setDevicePixelRatio(newDevicePixelRation);
287
- }, [canvasScrollSubject]);
288
-
289
- useSubscribable(DevicePixelRatioManager.instance, {
290
- callback: devicePixelRatioManagerCallback,
291
- });
292
-
293
- const updateEpiTreeWidgetDataDebounced = useDebouncedCallback(() => {
294
- updateEpiTreeWidgetData({
295
- zoomLevel,
296
- verticalScrollPosition,
297
- horizontalScrollPosition,
298
- });
299
- }, 500);
300
-
301
- useEffect(() => {
302
- updateEpiTreeWidgetDataDebounced();
303
- }, [updateEpiTreeWidgetData, zoomLevel, verticalScrollPosition, horizontalScrollPosition, updateEpiTreeWidgetDataDebounced]);
304
-
305
- const tickerMarkScale = useMemo(() => {
306
- return EpiTreeUtil.getTickMarkScale({
307
- treeWidthMinusPadding,
308
- geneticTreeWidth: tree?.maxBranchLength,
309
- minGeneticScaleUnit: Math.min(EpiTreeUtil.getMinGeneticScaleUnit(tree), treeConfiguration?.geneticDistanceProtocol?.min_scale_unit ?? Infinity),
310
- // minGeneticScaleUnit: treeConfiguration?.geneticDistanceProtocol?.min_scale_unit,
311
- zoomLevel,
312
- });
313
- }, [treeWidthMinusPadding, tree, treeConfiguration?.geneticDistanceProtocol?.min_scale_unit, zoomLevel]);
314
-
315
- const onEpiContextMenuClose = useCallback(() => {
316
- setEpiContextMenuConfig(null);
317
- setZoomInMenuItemConfig(null);
318
- }, []);
319
-
320
- const linkLineListToTree = useCallback(() => {
321
- const perform = async () => {
322
- const newScrollPosition = EpiTreeUtil.getScrollPositionFromTreeVisibility({
323
- treeHeight,
324
- treeSize: tree?.size,
325
- treeCanvasHeight,
326
- verticalScrollPosition,
327
- zoomLevel,
328
- itemHeight,
329
- });
330
-
331
- await setSorting(null, null);
332
- setZoomLevel(1);
333
- setIsLinked(true);
334
- updateScrollPosition(0, newScrollPosition, 1);
335
- linkedScrollSubject.next({
336
- position: newScrollPosition,
337
- origin: scrollContainerRef.current,
338
- });
339
- };
340
-
341
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
342
- perform();
343
-
344
- }, [linkedScrollSubject, setSorting, tree?.size, treeCanvasHeight, treeHeight, verticalScrollPosition, updateScrollPosition, zoomLevel, itemHeight]);
345
-
346
- const onLinkButtonClick = useCallback(() => {
347
- linkLineListToTree();
348
-
349
- }, [linkLineListToTree]);
350
-
351
- const onOpenFiltersButtonClick = useCallback(() => {
352
- EpiEventBusManager.instance.emit('openFiltersMenu');
353
- }, []);
354
-
355
- const resetZoomLevelAndScrollPosition = useCallback(() => {
356
- setZoomLevel(1);
357
- setIsLinked(true);
358
- updateScrollPosition(0, 0, 1);
359
- }, [updateScrollPosition]);
360
-
361
- const onAddTreeFilterMenuItemClick = useCallback(async (onMenuClose: () => void) => {
362
- await addTreeFilter(zoomInMenuItemConfig.rootId);
363
- resetZoomLevelAndScrollPosition();
364
- onMenuClose();
365
- }, [addTreeFilter, zoomInMenuItemConfig?.rootId, resetZoomLevelAndScrollPosition]);
366
-
367
- const onRemoveTreeFilterButtonClick = useCallback(async () => {
368
- await removeTreeFilter();
369
- resetZoomLevelAndScrollPosition();
370
- }, [removeTreeFilter, resetZoomLevelAndScrollPosition]);
371
-
372
- const onTreeFilterStepOutButtonClick = useCallback(async () => {
373
- await treeFilterStepOut();
374
- resetZoomLevelAndScrollPosition();
375
- }, [resetZoomLevelAndScrollPosition, treeFilterStepOut]);
376
-
377
- const getPathPropertiesFromCanvas = useCallback((canvas: HTMLCanvasElement, event: MouseEvent): TreePathProperties => {
378
- return EpiTreeUtil.getPathPropertiesFromCanvas({
379
- canvas,
380
- event,
381
- treeAssembly,
382
- devicePixelRatio,
383
- });
384
- }, [treeAssembly, devicePixelRatio]);
385
-
386
- useEffect(() => {
387
- const unsubscribe = linkedScrollSubject.subscribe((data) => {
388
- if (data.origin === scrollContainerRef.current) {
389
- return;
390
- }
391
- if (isLinked && zoomLevel === 1) {
392
- canvasScrollSubject.next({
393
- x: canvasScrollSubject.data.x * devicePixelRatio,
394
- y: data.position * devicePixelRatio,
395
- });
396
- }
397
- });
398
-
399
- return () => {
400
- unsubscribe();
401
- };
402
- }, [linkedScrollSubject, canvasScrollSubject, updateScrollPosition, devicePixelRatio, isLinked, zoomLevel]);
403
-
404
- // Setup canvas
405
- useEffect(() => {
406
- setTreeAssembly(EpiTreeUtil.assembleTree({ rootNode: tree, treeCanvasWidth, pixelToGeneticDistanceRatio, itemHeight }));
407
- }, [pixelToGeneticDistanceRatio, tree, treeCanvasWidth, itemHeight]);
408
-
409
- useEffect(() => {
410
- if (!treeCanvas || !treeAssembly || !tree) {
411
- return;
412
- }
413
-
414
- EpiTreeUtil.drawTreeCanvas({ canvas: treeCanvas, theme, geneticTreeWidth: tree?.maxBranchLength, treeAssembly, stratification, zoomLevel, isLinked, horizontalScrollPosition, verticalScrollPosition, treeCanvasWidth, treeCanvasHeight, pixelToGeneticDistanceRatio, tickerMarkScale, shouldShowDistances: isShowDistancesEnabled, devicePixelRatio });
415
- let animationFrameId: number;
416
- const unsubscribe = internalHighlightingSubject.subscribe((highlighting) => {
417
- cancelAnimationFrame(animationFrameId);
418
- animationFrameId = requestAnimationFrame(() => {
419
- EpiTreeUtil.drawTreeCanvas({ canvas: treeCanvas, theme, geneticTreeWidth: tree?.maxBranchLength, treeAssembly, stratification, zoomLevel, isLinked, horizontalScrollPosition, verticalScrollPosition, treeCanvasWidth, treeCanvasHeight, pixelToGeneticDistanceRatio, tickerMarkScale, highlightedNodeNames: highlighting.caseIds, shouldShowDistances: isShowDistancesEnabled, devicePixelRatio });
420
- });
421
- });
422
- return () => {
423
- unsubscribe();
424
- cancelAnimationFrame(animationFrameId);
425
- };
426
- }, [treeCanvasHeight, treeCanvas, internalHighlightingSubject, pixelToGeneticDistanceRatio, stratification, theme, tickerMarkScale, treeAssembly, treeCanvasWidth, horizontalScrollPosition, verticalScrollPosition, width, zoomLevel, isLinked, isShowDistancesEnabled, devicePixelRatio, tree?.maxBranchLength, tree]);
427
-
428
- // Setup canvas event listeners (note: must be in a separate useEffect to prevent render loop)
429
- useEffect(() => {
430
- if (!treeCanvas) {
431
- return;
432
- }
433
-
434
- let pos = {
435
- x: 0,
436
- y: 0,
437
- currentX: 0,
438
- currentY: 0,
439
- };
440
- let followMouse = false;
441
-
442
- const onMouseDown = (event: MouseEvent) => {
443
- // store the current mouse position (to be used on mouse move for scrolling)
444
- pos = {
445
- x: event.clientX,
446
- y: event.clientY,
447
- currentX: canvasScrollSubject.data.x,
448
- currentY: canvasScrollSubject.data.y,
449
- };
450
- followMouse = true;
451
- };
452
-
453
- const onMouseMove = (event: MouseEvent) => {
454
- if (followMouse) {
455
- treeCanvas.style.cursor = 'move';
456
-
457
- // update the scroll position based on how far the mouse has moved
458
- // how far the mouse has moved:
459
- const deltaX = event.clientX - pos.x;
460
- const deltaY = event.clientY - pos.y;
461
- // the new scroll position:
462
- const scrollPositionX = pos.currentX - deltaX;
463
- const scrollPositionY = pos.currentY - deltaY;
464
-
465
- let sanitizedScrollPositionX = scrollPositionX;
466
- if (zoomLevel === 1 && Math.abs(deltaX) < ConfigManager.instance.config.epiTree.PANNING_THRESHOLD && pos.currentX === 0) {
467
- sanitizedScrollPositionX = 0;
468
- }
469
-
470
- updateScrollPosition(sanitizedScrollPositionX, scrollPositionY, zoomLevel);
471
- return;
472
- }
473
-
474
- const pathProperties = getPathPropertiesFromCanvas(treeCanvas, event);
475
- if (pathProperties) {
476
- treeCanvas.style.cursor = 'pointer';
477
- internalHighlightingSubject.next({
478
- caseIds: pathProperties.subTreeLeaveNames,
479
- origin: EPI_ZONE.TREE,
480
- });
481
- } else {
482
- treeCanvas.style.cursor = 'default';
483
- // remove highlighting (only there is highlighting to prevent a render loop)
484
- if (internalHighlightingSubject.data?.caseIds?.length) {
485
- internalHighlightingSubject.next({
486
- caseIds: [],
487
- origin: EPI_ZONE.TREE,
488
- });
489
- }
490
- }
491
- };
492
-
493
- const onMouseUp = (event: MouseEvent) => {
494
- // stop following the mouse for scrolling
495
- followMouse = false;
496
-
497
- // Handle the click when the user clicked a path in the canvas
498
- const pathProperties = getPathPropertiesFromCanvas(treeCanvas, event);
499
- if (pathProperties?.treeNode) {
500
- const { treeNode } = pathProperties;
501
- setEpiContextMenuConfig({
502
- position: {
503
- left: event.clientX,
504
- top: event.clientY,
505
- },
506
- caseIds: treeNode.subTreeLeaveNames ? treeNode.subTreeLeaveNames : [treeNode.name],
507
- mouseEvent: event,
508
- });
509
- if (treeNode.subTreeNames.length && treeNode.name && treeNode.maxBranchLength.toNumber()) {
510
- setZoomInMenuItemConfig({
511
- caseIds: treeNode.subTreeLeaveNames,
512
- rootId: treeNode.name,
513
- });
514
- }
515
- if (treeNode.name && !treeNode.subTreeNames.length) {
516
- setExtraLeafInfoId(treeNode.name);
517
- }
518
- } else if (pathProperties?.subTreeLeaveNames?.length) {
519
- setEpiContextMenuConfig({
520
- position: {
521
- left: event.clientX,
522
- top: event.clientY,
523
- },
524
- caseIds: pathProperties.subTreeLeaveNames,
525
- mouseEvent: event,
526
- });
527
- }
528
- };
529
-
530
- const onMouseWheel = (event: WheelEvent) => {
531
- event.preventDefault();
532
-
533
- if (event.shiftKey) {
534
- updateScrollPosition(canvasScrollSubject.data.x + (event.deltaX || event.deltaY), canvasScrollSubject.data.y, zoomLevel);
535
- return;
536
- }
537
- if (event.metaKey || event.ctrlKey) {
538
- updateScrollPosition(canvasScrollSubject.data.x, canvasScrollSubject.data.y + (event.deltaX || event.deltaY), zoomLevel);
539
- return;
540
- }
541
-
542
- const { MAX_ZOOM_SPEED, MIN_ZOOM_SPEED, MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } = ConfigManager.instance.config.epiTree;
543
-
544
- const zoomSpeed = Math.min(MAX_ZOOM_SPEED, Math.max(MIN_ZOOM_SPEED, treeHeight / treeCanvasHeight * 0.2));
545
- const newZoomLevel = Math.min(MAX_ZOOM_LEVEL, Math.max(MIN_ZOOM_LEVEL, zoomLevel + (event.deltaY > 0 ? zoomSpeed : -zoomSpeed)));
546
-
547
- const newScrollPositionY = EpiTreeUtil.getNewScrollPositionForZoomLevel({
548
- eventOffset: event.offsetY,
549
- scrollPosition: canvasScrollSubject.data.y,
550
- dimensionSize: treeHeight,
551
- currentZoomLevel: zoomLevel,
552
- newZoomLevel,
553
- });
554
- const newScrollPositionX = EpiTreeUtil.getNewScrollPositionForZoomLevel({
555
- eventOffset: event.offsetX,
556
- scrollPosition: canvasScrollSubject.data.x,
557
- dimensionSize: treeCanvasWidth,
558
- currentZoomLevel: zoomLevel,
559
- newZoomLevel,
560
- });
561
-
562
- setZoomLevel(newZoomLevel);
563
- if (newZoomLevel !== 1) {
564
- updateScrollPosition(newScrollPositionX, newScrollPositionY, newZoomLevel);
565
- } else {
566
- updateScrollPosition(newScrollPositionX, linkedScrollSubject.data?.position ?? 0, 1);
567
- }
568
-
569
- if (newZoomLevel > MIN_ZOOM_LEVEL && newZoomLevel < MAX_ZOOM_LEVEL) {
570
- // Disconnect the event listener and allow a render cycle to complete
571
- // But only when zoomLevel is not at it's boundaries, otherwise the event listener will not be reconnected
572
- treeCanvas.removeEventListener('wheel', onMouseWheel);
573
- }
574
- };
575
-
576
- const onMouseOut = () => {
577
- followMouse = false;
578
-
579
- // reset highlighting (because mouse move event may not have triggered it correctly)
580
- internalHighlightingSubject.next({
581
- caseIds: [],
582
- origin: EPI_ZONE.TREE,
583
- });
584
- };
585
-
586
- treeCanvas.addEventListener('mousemove', onMouseMove);
587
- treeCanvas.addEventListener('mousedown', onMouseDown);
588
- treeCanvas.addEventListener('mouseup', onMouseUp);
589
- treeCanvas.addEventListener('mouseout', onMouseOut);
590
- treeCanvas.addEventListener('wheel', onMouseWheel);
591
-
592
- return () => {
593
- treeCanvas.removeEventListener('mousemove', onMouseMove);
594
- treeCanvas.removeEventListener('mousedown', onMouseDown);
595
- treeCanvas.removeEventListener('mouseup', onMouseUp);
596
- treeCanvas.removeEventListener('mouseout', onMouseOut);
597
- treeCanvas.removeEventListener('wheel', onMouseWheel);
598
- };
599
- // note: we don't want to re-run this effect when the treeSubject.data changes; it would disconnect the event handles and prevent the user from interacting with the tree
600
- // eslint-disable-next-line react-hooks/exhaustive-deps
601
- }, [treeCanvasHeight, treeCanvas, getPathPropertiesFromCanvas, internalHighlightingSubject, updateScrollPosition, scrollContainerRef, treeHeight, zoomLevel]);
602
-
603
- // Setup header canvas
604
- useEffect(() => {
605
- if (!headerCanvas || !tree) {
606
- return;
607
- }
608
- const canvas = headerCanvas;
609
- const ctx = canvas.getContext('2d');
610
- canvas.width = canvas.clientWidth * devicePixelRatio;
611
- canvas.height = canvas.clientHeight * devicePixelRatio;
612
-
613
- EpiTreeUtil.drawGuides({ canvas, geneticTreeWidth: tree?.maxBranchLength, tickerMarkScale, pixelToGeneticDistanceRatio, horizontalScrollPosition, paddingTop: ConfigManager.instance.config.epiTree.HEADER_HEIGHT * 0.7, paddingBottom: 0, zoomLevel, devicePixelRatio });
614
- EpiTreeUtil.drawGuides({ canvas, geneticTreeWidth: tree?.maxBranchLength, tickerMarkScale, pixelToGeneticDistanceRatio, horizontalScrollPosition, paddingTop: 0, paddingBottom: ConfigManager.instance.config.epiTree.HEADER_HEIGHT * 0.7, zoomLevel, devicePixelRatio });
615
- EpiTreeUtil.drawScale({ canvas, theme, tickerMarkScale, geneticTreeWidth: tree?.maxBranchLength, pixelToGeneticDistanceRatio, zoomLevel, devicePixelRatio, horizontalScrollPosition });
616
-
617
- // Draw horizontal top divider
618
- EpiTreeUtil.drawDivider({ canvas, y: 0, devicePixelRatio });
619
- // Draw horizontal bottom divider
620
- EpiTreeUtil.drawDivider({ canvas, y: ConfigManager.instance.config.epiTree.HEADER_HEIGHT - 1, devicePixelRatio });
621
-
622
- ctx.translate(-0.5, -0.5);
623
- }, [headerCanvas, pixelToGeneticDistanceRatio, theme, tickerMarkScale, zoomLevel, devicePixelRatio, horizontalScrollPosition, tree?.maxBranchLength, tree]);
624
-
625
- const onShowDetailsSelectionMenuItemClick = useCallback((onMenuClose: () => void) => {
626
- EpiEventBusManager.instance.emit('openCaseInfoDialog', {
627
- caseId: baseData.find(c => c.id === extraLeafInfoId).id,
628
- caseTypeId: completeCaseType.id,
629
- });
630
- onMenuClose();
631
- }, [extraLeafInfoId, baseData, completeCaseType.id]);
632
-
633
- const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {
634
- if (zoomInMenuItemConfig) {
635
- return (
636
- <MenuItem
637
- divider
638
- // eslint-disable-next-line react/jsx-no-bind
639
- onClick={async () => onAddTreeFilterMenuItemClick(onMenuClose)}
640
- >
641
- <ListItemIcon>
642
- <FilterAltIcon fontSize={'small'} />
643
- </ListItemIcon>
644
- <ListItemText>
645
- {t`Filter (show only this subtree)`}
646
- </ListItemText>
647
- </MenuItem>
648
- );
649
- }
650
- if (extraLeafInfoId) {
651
- return (
652
- <MenuItem
653
- divider
654
- // eslint-disable-next-line react/jsx-no-bind
655
- onClick={() => onShowDetailsSelectionMenuItemClick(onMenuClose)}
656
- >
657
- <ListItemIcon>
658
- <InfoOutlinedIcon fontSize={'small'} />
659
- </ListItemIcon>
660
- <ListItemText>
661
- {t`Show details`}
662
- </ListItemText>
663
- </MenuItem>
664
- );
665
- }
666
- }, [extraLeafInfoId, onShowDetailsSelectionMenuItemClick, onAddTreeFilterMenuItemClick, t, zoomInMenuItemConfig]);
667
-
668
- const titleMenu = useMemo<MenuItemData | string>(() => {
669
- if (!treeConfigurations?.length) {
670
- return t`Tree`;
671
- }
672
-
673
- const menu: MenuItemData = {
674
- label: treeConfiguration ? t('Tree: {{algorithm}}', { algorithm: EpiTreeUtil.getTreeConfigurationLabel(treeConfiguration) }) : t`Tree`,
675
- tooltip: treeConfiguration
676
- ? (
677
- <EpiTreeDescription
678
- treeConfiguration={treeConfiguration}
679
- />
680
- )
681
- : undefined,
682
- disabled: !treeConfiguration,
683
- items: treeConfigurations?.map<MenuItemData>(config => ({
684
- label: EpiTreeUtil.getTreeConfigurationLabel(config),
685
- callback: () => {
686
- const perform = async () => {
687
- await removeTreeFilter();
688
- updateEpiTreeWidgetData({
689
- treeConfiguration: config,
690
- });
691
- setTreeConfiguration(config);
692
- };
693
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
694
- perform();
695
- },
696
- active: !!treeConfiguration && treeConfiguration.computedId === config.computedId,
697
- tooltip: (
698
- <EpiTreeDescription
699
- treeConfiguration={config}
700
- />
701
- ),
702
- })) ?? [],
703
- };
704
-
705
- return menu;
706
- }, [treeConfigurations, treeConfiguration, t, removeTreeFilter, updateEpiTreeWidgetData]);
707
-
708
- const primaryMenu = useMemo<MenuItemData[]>(() => {
709
- return [
710
- {
711
- disabled: !hasActiveTreeFilter,
712
- label: t`Change tree filter to nearest ancestor`,
713
- leftIcon: <ArrowUpwardIcon />,
714
- callback: onTreeFilterStepOutButtonClick,
715
- },
716
- {
717
- disabled: !hasActiveTreeFilter,
718
- label: t`Remove tree filter`,
719
- leftIcon: <ClearIcon />,
720
- callback: onRemoveTreeFilterButtonClick,
721
- },
722
- {
723
- label: t`Link and snap the Line List to the Tree (resets tree zoom level and Line List sorting)`,
724
- leftIcon: (
725
- <LinkIcon
726
- sx={{
727
- color: isLinked ? undefined : theme.palette.error.main,
728
- }}
729
- />
730
- ),
731
- callback: onLinkButtonClick,
732
- },
733
- ];
734
- }, [hasActiveTreeFilter, t, onTreeFilterStepOutButtonClick, onRemoveTreeFilterButtonClick, isLinked, theme.palette.error.main, onLinkButtonClick]);
735
-
736
- useEffect(() => {
737
- const emitDownloadOptions = () => {
738
- const baseName = t('Phylogenetic Tree - {{geneticDistanceProtocol}} - {{treeAlgorithm}}',
739
- {
740
- treeAlgorithm: treeConfiguration?.treeAlgorithm.name ?? '',
741
- geneticDistanceProtocol: treeConfiguration?.geneticDistanceProtocol.name ?? '',
742
- });
743
-
744
- EpiEventBusManager.instance.emit('onDownloadOptionsChanged', {
745
- zone: EPI_ZONE.TREE,
746
- disabled: isTreeUnavailable,
747
- zoneLabel: t`Phylogenetic Tree`,
748
- items: [
749
- {
750
- label: t`Save as Newick`,
751
- callback: () => DownloadUtil.downloadNewick(baseName, newick, completeCaseType, t),
752
- },
753
- {
754
- label: t`Save as JPEG`,
755
- callback: () => DownloadUtil.downloadCanvasImage(baseName, treeCanvas, 'jpeg', completeCaseType, t),
756
- },
757
- {
758
- label: t`Save as PNG`,
759
- callback: () => DownloadUtil.downloadCanvasImage(baseName, treeCanvas, 'png', completeCaseType, t),
760
- },
761
- ],
762
- });
763
- };
764
-
765
-
766
- emitDownloadOptions();
767
- const remove = EpiEventBusManager.instance.addEventListener('onDownloadOptionsRequested', emitDownloadOptions);
768
-
769
- return () => {
770
- EpiEventBusManager.instance.emit('onDownloadOptionsChanged', {
771
- zone: EPI_ZONE.TREE,
772
- items: null,
773
- zoneLabel: t`Tree`,
774
- });
775
- remove();
776
- };
777
- }, [completeCaseType, isLinked, isTreeUnavailable, newick, t, treeCanvas, treeConfiguration?.geneticDistanceProtocol.name, treeConfiguration?.treeAlgorithm.name]);
778
-
779
-
780
- const link = useCallback(() => {
781
- // Link the tree to the current scroll position of the Line List
782
- setIsLinked(true);
783
- setZoomLevel(1);
784
- updateScrollPosition(0, linkedScrollSubject.data?.position ?? 0, 1);
785
- }, [linkedScrollSubject.data?.position, updateScrollPosition]);
786
-
787
- useImperativeHandle(ref, () => ({
788
- link,
789
- }));
790
-
791
- return (
792
- <EpiWidget
793
- expandDisabled={isTreeUnavailable}
794
- primaryMenu={primaryMenu}
795
- title={titleMenu}
796
- zone={EPI_ZONE.TREE}
797
- >
798
- <Box
799
- ref={containerRef}
800
- sx={{
801
- position: 'relative',
802
- height: '100%',
803
- width: '100%',
804
- overflow: 'clip',
805
- }}
806
- >
807
- {isTreeUnavailable && (
808
- <>
809
- {hasToManyResultsToShowTree && (
810
- <Box>
811
- <Alert severity={'warning'}>
812
- <AlertTitle>
813
- {t`Too many cases to display the phylogenetic tree`}
814
- </AlertTitle>
815
- <Box marginY={2}>
816
- {t('The phylogenetic tree cannot be displayed because the number of cases ({{caseCount}}) exceeds the maximum allowed number of cases ({{maxSize}}) to display a phylogenetic tree. Refine your filters to reduce the number of results.', {
817
- caseCount: caseIds.length,
818
- maxSize: completeCaseType.read_max_tree_size,
819
- })}
820
- </Box>
821
- <Button
822
- color={'inherit'}
823
- variant={'outlined'}
824
- onClick={onOpenFiltersButtonClick}
825
- >
826
- {t`Refine filters`}
827
- </Button>
828
- </Alert>
829
- </Box>
830
- )}
831
- {!hasToManyResultsToShowTree && (
832
- <Box
833
- sx={{
834
- position: 'absolute',
835
- zIndex: 1,
836
- }}
837
- >
838
- <EpiWidgetUnavailable
839
- epiZone={EPI_ZONE.TREE}
840
- widgetName={t`phylogenetic tree`}
841
- />
842
- </Box>
843
- )}
844
- </>
845
- )}
846
- {(isLoading && !isTreeUnavailable) && (
847
- <Spinner
848
- label={t`Loading`}
849
- takingLongerTimeoutMs={ConfigManager.instance.config.epiTree.TAKING_LONGER_TIMEOUT_MS}
850
- />
851
- )}
852
- {!isTreeUnavailable && shouldShowTree && (
853
- <Box
854
- sx={{
855
- height: ConfigManager.instance.config.epiTree.HEADER_HEIGHT,
856
- position: 'absolute',
857
- background: theme.palette.background.paper,
858
- width: treeCanvasWidth,
859
- top: 0,
860
- zIndex: 1,
861
- }}
862
- >
863
- <Box
864
- ref={setHeaderCanvas}
865
- aria-hidden
866
- component={'canvas'}
867
- role={'figure'}
868
- sx={{
869
- width: treeCanvasWidth,
870
- height: ConfigManager.instance.config.epiTree.HEADER_HEIGHT,
871
- }}
872
- />
873
- </Box>
874
- )}
875
- <Box
876
- ref={scrollContainerRef}
877
- sx={{
878
- paddingTop: `${ConfigManager.instance.config.epiTree.HEADER_HEIGHT}px`,
879
- position: 'absolute',
880
- height,
881
- width,
882
- overflowY: 'hidden',
883
- }}
884
- >
885
- {!isTreeUnavailable && shouldShowTree && (
886
- <Box
887
- ref={setTreeCanvas}
888
- aria-label={treeCanvasAriaLabel}
889
- component={'canvas'}
890
- role={'figure'}
891
- sx={{
892
- width: treeCanvasWidth,
893
- height: treeCanvasHeight,
894
- }}
895
- />
896
- )}
897
- </Box>
898
- </Box>
899
- <EpiContextMenu
900
- config={epiContextMenuConfig}
901
- getExtraItems={getEpiContextMenuExtraItems}
902
- onMenuClose={onEpiContextMenuClose}
903
- />
904
- </EpiWidget>
905
- );
906
- };