@gen-epix/ui 1.15.1 → 1.15.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 (738) hide show
  1. package/dist/environment.d.ts +54 -0
  2. package/dist/index.d.ts +16078 -0
  3. package/dist/index.js.map +1 -0
  4. package/package.json +3 -6
  5. package/src/@types/environment.d.ts +0 -54
  6. package/src/api/api.ts +0 -43576
  7. package/src/api/base.ts +0 -111
  8. package/src/api/common.ts +0 -168
  9. package/src/api/configuration.ts +0 -118
  10. package/src/api/index.ts +0 -20
  11. package/src/assets/icons/CollectionIcon.svg +0 -1
  12. package/src/assets/icons/DnaIcon.svg +0 -1
  13. package/src/assets/icons/VirusIcon.svg +0 -1
  14. package/src/assets/logo/logo-rijksoverheid.svg +0 -42
  15. package/src/assets/logo/logo-rivm.svg +0 -6
  16. package/src/classes/Subject/Subject.ts +0 -26
  17. package/src/classes/Subject/index.ts +0 -1
  18. package/src/classes/TableEventBus/TableEventBus.ts +0 -14
  19. package/src/classes/TableEventBus/index.ts +0 -1
  20. package/src/classes/abstracts/EventBusAbstract/EventBusAbstract.ts +0 -37
  21. package/src/classes/abstracts/EventBusAbstract/index.ts +0 -1
  22. package/src/classes/abstracts/FilterAbstract/FilterAbstract.ts +0 -54
  23. package/src/classes/abstracts/FilterAbstract/index.ts +0 -1
  24. package/src/classes/abstracts/SubscribableAbstract/SubscribableAbstract.ts +0 -20
  25. package/src/classes/abstracts/SubscribableAbstract/index.ts +0 -1
  26. package/src/classes/errors/UploadError.ts +0 -11
  27. package/src/classes/errors/index.ts +0 -1
  28. package/src/classes/filters/BooleanFilter.ts +0 -31
  29. package/src/classes/filters/DateFilter.ts +0 -133
  30. package/src/classes/filters/GeoFilter.ts +0 -60
  31. package/src/classes/filters/MultiSelectFilter.ts +0 -70
  32. package/src/classes/filters/NumberRangeFilter.ts +0 -82
  33. package/src/classes/filters/SelectionFilter.ts +0 -25
  34. package/src/classes/filters/TextFilter.ts +0 -36
  35. package/src/classes/filters/TreeFilter.ts +0 -22
  36. package/src/classes/managers/AuthenticationManager/AuthenticationManager.ts +0 -94
  37. package/src/classes/managers/AuthenticationManager/index.ts +0 -1
  38. package/src/classes/managers/AuthorizationManager/AuthorizationManager.ts +0 -70
  39. package/src/classes/managers/AuthorizationManager/index.ts +0 -1
  40. package/src/classes/managers/BackendVersionManager/BackendVersionManager.ts +0 -23
  41. package/src/classes/managers/BackendVersionManager/index.ts +0 -1
  42. package/src/classes/managers/BreadcrumbManager/BreadcrumbManager.ts +0 -30
  43. package/src/classes/managers/BreadcrumbManager/index.ts +0 -1
  44. package/src/classes/managers/ConfigManager/ConfigManager.ts +0 -31
  45. package/src/classes/managers/ConfigManager/index.ts +0 -1
  46. package/src/classes/managers/DevicePixelRatioManager/DevicePixelRatioManager.ts +0 -27
  47. package/src/classes/managers/DevicePixelRatioManager/index.ts +0 -1
  48. package/src/classes/managers/EmotionCacheManager/EmotionCacheManager.ts +0 -27
  49. package/src/classes/managers/EmotionCacheManager/index.ts +0 -1
  50. package/src/classes/managers/EpiDataManager/EpiDataManager.ts +0 -196
  51. package/src/classes/managers/EpiDataManager/index.ts +0 -1
  52. package/src/classes/managers/EpiEventBusManager/EpiEventBusManager.ts +0 -61
  53. package/src/classes/managers/EpiEventBusManager/index.ts +0 -1
  54. package/src/classes/managers/EpiHighlightingManager/EpiHighlightingManager.ts +0 -32
  55. package/src/classes/managers/EpiHighlightingManager/index.ts +0 -1
  56. package/src/classes/managers/EpiLineListCaseSetMembersManager/EpiListsCaseSetMembersManager.ts +0 -118
  57. package/src/classes/managers/EpiLineListCaseSetMembersManager/index.ts +0 -1
  58. package/src/classes/managers/FeatureFlagsManager/FeatureFlagsManager.ts +0 -30
  59. package/src/classes/managers/FeatureFlagsManager/index.ts +0 -1
  60. package/src/classes/managers/I18nManager/I18nManager.ts +0 -105
  61. package/src/classes/managers/I18nManager/index.ts +0 -1
  62. package/src/classes/managers/InactivityManager/InactivityManager.ts +0 -119
  63. package/src/classes/managers/InactivityManager/index.ts +0 -1
  64. package/src/classes/managers/KeyboardShortcutManager/KeyboardShortcutManager.ts +0 -78
  65. package/src/classes/managers/KeyboardShortcutManager/index.ts +0 -1
  66. package/src/classes/managers/LogManager/LogManager.ts +0 -151
  67. package/src/classes/managers/LogManager/index.ts +0 -1
  68. package/src/classes/managers/NavigationHistoryManager/NavigationHistoryManager.ts +0 -16
  69. package/src/classes/managers/NavigationHistoryManager/index.ts +0 -1
  70. package/src/classes/managers/NotificationManager/NotificationManager.ts +0 -104
  71. package/src/classes/managers/NotificationManager/index.ts +0 -1
  72. package/src/classes/managers/PageEventBusManager/PageEventBusManager.ts +0 -116
  73. package/src/classes/managers/PageEventBusManager/index.ts +0 -1
  74. package/src/classes/managers/QueryClientManager/QueryClientManager.ts +0 -51
  75. package/src/classes/managers/QueryClientManager/index.ts +0 -1
  76. package/src/classes/managers/RouterManager/RouterManager.ts +0 -25
  77. package/src/classes/managers/RouterManager/index.ts +0 -1
  78. package/src/classes/managers/UserSettingsManager/UserSettingsManager.ts +0 -16
  79. package/src/classes/managers/UserSettingsManager/index.ts +0 -1
  80. package/src/classes/managers/WindowManager/WindowManager.test.ts +0 -23
  81. package/src/classes/managers/WindowManager/WindowManager.ts +0 -26
  82. package/src/classes/managers/WindowManager/index.ts +0 -1
  83. package/src/components/app/App/App.tsx +0 -58
  84. package/src/components/app/App/index.ts +0 -1
  85. package/src/components/app/ApplicationBootstrap/ApplicationBootstrap.tsx +0 -223
  86. package/src/components/app/ApplicationBootstrap/index.ts +0 -1
  87. package/src/components/app/RouterRoot/RouterRoot.tsx +0 -187
  88. package/src/components/app/RouterRoot/index.ts +0 -1
  89. package/src/components/epi/EpiAddCasesToEventDialog/EpiAddCasesToEventDialog.tsx +0 -347
  90. package/src/components/epi/EpiAddCasesToEventDialog/EpiAddCasesToEventDialogSuccessNotificationMessage.tsx +0 -38
  91. package/src/components/epi/EpiAddCasesToEventDialog/index.ts +0 -1
  92. package/src/components/epi/EpiBulkEditCaseDialog/EpiBulkEditCaseDialog.tsx +0 -61
  93. package/src/components/epi/EpiBulkEditCaseDialog/index.ts +0 -1
  94. package/src/components/epi/EpiCaseInfoDialog/EpiCaseCaseSetInfo.tsx +0 -137
  95. package/src/components/epi/EpiCaseInfoDialog/EpiCaseContent.tsx +0 -127
  96. package/src/components/epi/EpiCaseInfoDialog/EpiCaseForm.tsx +0 -111
  97. package/src/components/epi/EpiCaseInfoDialog/EpiCaseInfoDialog.tsx +0 -377
  98. package/src/components/epi/EpiCaseInfoDialog/EpiCaseSharingForm.tsx +0 -140
  99. package/src/components/epi/EpiCaseInfoDialog/EpiCaseSharingInfo.tsx +0 -23
  100. package/src/components/epi/EpiCaseInfoDialog/EpiReadOnlyCaseContent.tsx +0 -89
  101. package/src/components/epi/EpiCaseInfoDialog/index.ts +0 -1
  102. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetContent.tsx +0 -108
  103. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetDescription.tsx +0 -34
  104. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetForm.tsx +0 -151
  105. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetInfoDialog.tsx +0 -389
  106. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetSharingForm.tsx +0 -155
  107. package/src/components/epi/EpiCaseSetInfoDialog/EpiCaseSetSharingInfo.tsx +0 -23
  108. package/src/components/epi/EpiCaseSetInfoDialog/index.ts +0 -1
  109. package/src/components/epi/EpiCaseSummary/EpiCaseSummary.tsx +0 -141
  110. package/src/components/epi/EpiCaseSummary/index.ts +0 -1
  111. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoAccessRights.tsx +0 -91
  112. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoColAccessRights.tsx +0 -118
  113. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoData.tsx +0 -38
  114. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoDialog.tsx +0 -39
  115. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoDialogContent.tsx +0 -169
  116. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoDialogWithLoader.tsx +0 -42
  117. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoRegions.tsx +0 -87
  118. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoTrees.tsx +0 -73
  119. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoValues.tsx +0 -61
  120. package/src/components/epi/EpiCaseTypeInfoDialog/EpiCaseTypeInfoVariableDetails.tsx +0 -151
  121. package/src/components/epi/EpiCaseTypeInfoDialog/index.ts +0 -10
  122. package/src/components/epi/EpiCasesAlreadyInCaseSetWarning/EpiCasesAlreadyInCaseSetWarning.tsx +0 -190
  123. package/src/components/epi/EpiCasesAlreadyInCaseSetWarning/EpiCasesAlreadyInCaseSetWarningCaseSetLink.tsx +0 -62
  124. package/src/components/epi/EpiCasesAlreadyInCaseSetWarning/index.ts +0 -1
  125. package/src/components/epi/EpiCompletCaseTypeLoader/EpiCompletCaseTypeLoader.tsx +0 -87
  126. package/src/components/epi/EpiCompletCaseTypeLoader/index.ts +0 -1
  127. package/src/components/epi/EpiContactDetailsDialog/EpiContactDetailsDialog.tsx +0 -151
  128. package/src/components/epi/EpiContactDetailsDialog/index.ts +0 -1
  129. package/src/components/epi/EpiContextMenu/EpiContextMenu.tsx +0 -155
  130. package/src/components/epi/EpiContextMenu/index.ts +0 -1
  131. package/src/components/epi/EpiCreateEventDialog/EpiCreateEventDialog.tsx +0 -386
  132. package/src/components/epi/EpiCreateEventDialog/EpiCreateEventDialogSuccessNotificationMessage.tsx +0 -30
  133. package/src/components/epi/EpiCreateEventDialog/index.ts +0 -1
  134. package/src/components/epi/EpiCurve/EpiCurve.tsx +0 -525
  135. package/src/components/epi/EpiCurve/index.ts +0 -1
  136. package/src/components/epi/EpiCustomTabPanel/EpiCustomTabPanel.tsx +0 -27
  137. package/src/components/epi/EpiCustomTabPanel/index.ts +0 -1
  138. package/src/components/epi/EpiDashboard/EpiDashboard.tsx +0 -390
  139. package/src/components/epi/EpiDashboard/EpiDashboardDownloadSidebarItem.tsx +0 -154
  140. package/src/components/epi/EpiDashboard/EpiDashboardGeneralSettingsForm.tsx +0 -89
  141. package/src/components/epi/EpiDashboard/EpiDashboardLayoutRenderer.tsx +0 -248
  142. package/src/components/epi/EpiDashboard/EpiDashboardLayoutSettingsForm.tsx +0 -160
  143. package/src/components/epi/EpiDashboard/EpiDashboardSettingsSidebarItem.tsx +0 -93
  144. package/src/components/epi/EpiDashboard/EpiDashboardTreeSettingsForm.tsx +0 -90
  145. package/src/components/epi/EpiDashboard/index.ts +0 -1
  146. package/src/components/epi/EpiDashboardStoreLoader/EpiDashboardStoreLoader.tsx +0 -34
  147. package/src/components/epi/EpiDashboardStoreLoader/EpiDashboardStoreLoaderContent.tsx +0 -73
  148. package/src/components/epi/EpiDashboardStoreLoader/index.ts +0 -2
  149. package/src/components/epi/EpiDashboardStoreLoader/withEpiDashboardStore.tsx +0 -19
  150. package/src/components/epi/EpiDataCollectionAccessInfo/EpiDataCollectionAccessInfo.tsx +0 -88
  151. package/src/components/epi/EpiDataCollectionAccessInfo/index.ts +0 -1
  152. package/src/components/epi/EpiFindSimilarCasesDialog/EpiFindSimilarCasesDialog.tsx +0 -302
  153. package/src/components/epi/EpiFindSimilarCasesDialog/index.ts +0 -1
  154. package/src/components/epi/EpiLegendaItem/EpiLegendaItem.tsx +0 -106
  155. package/src/components/epi/EpiLegendaItem/index.ts +0 -1
  156. package/src/components/epi/EpiLineList/EpiLineList.tsx +0 -492
  157. package/src/components/epi/EpiLineList/EpiLineListPrimaryMenu.tsx +0 -189
  158. package/src/components/epi/EpiLineList/EpiLineListSecondaryMenu.tsx +0 -56
  159. package/src/components/epi/EpiLineList/EpiLineListTitle.tsx +0 -28
  160. package/src/components/epi/EpiLineList/index.ts +0 -1
  161. package/src/components/epi/EpiLineList/useEpiLineListEmitDownloadOptions.tsx +0 -102
  162. package/src/components/epi/EpiMap/EpiMap.tsx +0 -547
  163. package/src/components/epi/EpiMap/index.ts +0 -1
  164. package/src/components/epi/EpiRemoveCasesFromEventDialog/EpiRemoveCasesFromEventDialog.tsx +0 -169
  165. package/src/components/epi/EpiRemoveCasesFromEventDialog/index.ts +0 -1
  166. package/src/components/epi/EpiRemoveFindSimilarCasesResultDialog/EpiRemoveFindSimilarCasesResultDialog.tsx +0 -216
  167. package/src/components/epi/EpiSequenceDownloadDialog/EpiSequenceDownloadDialog.tsx +0 -151
  168. package/src/components/epi/EpiSequenceDownloadDialog/index.ts +0 -1
  169. package/src/components/epi/EpiStratification/EpiStratification.tsx +0 -241
  170. package/src/components/epi/EpiStratification/index.ts +0 -1
  171. package/src/components/epi/EpiTree/EpiTree.tsx +0 -906
  172. package/src/components/epi/EpiTree/index.ts +0 -1
  173. package/src/components/epi/EpiTreeDescription/EpiTreeDescription.tsx +0 -71
  174. package/src/components/epi/EpiTreeDescription/index.ts +0 -1
  175. package/src/components/epi/EpiUpload/EpiUpload.tsx +0 -107
  176. package/src/components/epi/EpiUpload/EpiUploadCaseResultTable.tsx +0 -383
  177. package/src/components/epi/EpiUpload/EpiUploadCreateCases.tsx +0 -266
  178. package/src/components/epi/EpiUpload/EpiUploadMapColumns.tsx +0 -261
  179. package/src/components/epi/EpiUpload/EpiUploadMapSequences.tsx +0 -332
  180. package/src/components/epi/EpiUpload/EpiUploadNavigation.tsx +0 -52
  181. package/src/components/epi/EpiUpload/EpiUploadSelectFile.tsx +0 -285
  182. package/src/components/epi/EpiUpload/EpiUploadSelectSequenceFiles.tsx +0 -375
  183. package/src/components/epi/EpiUpload/EpiUploadValidate.tsx +0 -199
  184. package/src/components/epi/EpiUpload/EpiUploadValidateNavigation.tsx +0 -34
  185. package/src/components/epi/EpiUpload/index.ts +0 -1
  186. package/src/components/epi/EpiUserRightsDialog/EpiUserRightsDialog.tsx +0 -101
  187. package/src/components/epi/EpiUserRightsDialog/EpiUserRightsDialogCaseAccessPolicy.tsx +0 -160
  188. package/src/components/epi/EpiUserRightsDialog/index.ts +0 -1
  189. package/src/components/epi/EpiWarning/EpiWarning.tsx +0 -39
  190. package/src/components/epi/EpiWarning/index.ts +0 -1
  191. package/src/components/epi/EpiWidget/EpiWidget.tsx +0 -255
  192. package/src/components/epi/EpiWidget/index.ts +0 -1
  193. package/src/components/epi/EpiWidgetHeaderIconButton/EpiWidgetHeaderIconButton.tsx +0 -40
  194. package/src/components/epi/EpiWidgetHeaderIconButton/index.ts +0 -1
  195. package/src/components/epi/EpiWidgetMenu/EpiWidgetMenu.tsx +0 -56
  196. package/src/components/epi/EpiWidgetMenu/index.ts +0 -1
  197. package/src/components/epi/EpiWidgetUnavailable/EpiWidgetUnavailable.tsx +0 -51
  198. package/src/components/epi/EpiWidgetUnavailable/index.ts +0 -1
  199. package/src/components/filters/BooleanFilterField/BooleanFilterField.tsx +0 -26
  200. package/src/components/filters/BooleanFilterField/index.ts +0 -1
  201. package/src/components/filters/DateFilterField/DateFilterField.tsx +0 -23
  202. package/src/components/filters/DateFilterField/index.ts +0 -1
  203. package/src/components/filters/GeoFilterField/GeoFilterField.tsx +0 -32
  204. package/src/components/filters/GeoFilterField/index.ts +0 -1
  205. package/src/components/filters/MultiSelectFilterField/MultiSelectFilterField.tsx +0 -31
  206. package/src/components/filters/MultiSelectFilterField/index.ts +0 -1
  207. package/src/components/filters/NumberRangeFilterField/NumberRangeFilterField.tsx +0 -20
  208. package/src/components/filters/NumberRangeFilterField/index.ts +0 -1
  209. package/src/components/filters/TextFilterField/TextFilterField.tsx +0 -18
  210. package/src/components/filters/TextFilterField/index.ts +0 -1
  211. package/src/components/form/fields/Autocomplete/Autocomplete.tsx +0 -270
  212. package/src/components/form/fields/Autocomplete/index.ts +0 -1
  213. package/src/components/form/fields/CheckboxGroup/CheckboxGroup.tsx +0 -192
  214. package/src/components/form/fields/CheckboxGroup/index.ts +0 -1
  215. package/src/components/form/fields/DatePicker/DatePicker.tsx +0 -167
  216. package/src/components/form/fields/DatePicker/index.ts +0 -1
  217. package/src/components/form/fields/DateRangePicker/DateRangePicker.tsx +0 -359
  218. package/src/components/form/fields/DateRangePicker/index.ts +0 -1
  219. package/src/components/form/fields/NumberField/NumberField.tsx +0 -277
  220. package/src/components/form/fields/NumberField/index.ts +0 -1
  221. package/src/components/form/fields/NumberRangeInput/NumberRangeInput.tsx +0 -297
  222. package/src/components/form/fields/NumberRangeInput/index.ts +0 -1
  223. package/src/components/form/fields/RadioGroup/RadioGroup.tsx +0 -130
  224. package/src/components/form/fields/RadioGroup/index.ts +0 -1
  225. package/src/components/form/fields/RichTextEditor/RichTextEditor.tsx +0 -321
  226. package/src/components/form/fields/RichTextEditor/RichTextEditorContent.tsx +0 -34
  227. package/src/components/form/fields/RichTextEditor/index.ts +0 -2
  228. package/src/components/form/fields/RichTextEditor/useRichTextEditorExtensions.ts +0 -174
  229. package/src/components/form/fields/Select/Select.tsx +0 -219
  230. package/src/components/form/fields/Select/index.ts +0 -1
  231. package/src/components/form/fields/Switch/Switch.tsx +0 -116
  232. package/src/components/form/fields/Switch/index.ts +0 -1
  233. package/src/components/form/fields/TextField/TextField.tsx +0 -170
  234. package/src/components/form/fields/TextField/index.ts +0 -1
  235. package/src/components/form/fields/ToggleButtonGroup/ToggleButtonGroup.tsx +0 -118
  236. package/src/components/form/fields/ToggleButtonGroup/index.ts +0 -1
  237. package/src/components/form/fields/TransferList/TransferList.tsx +0 -360
  238. package/src/components/form/fields/TransferList/index.ts +0 -1
  239. package/src/components/form/fields/UploadButton/UploadButton.tsx +0 -157
  240. package/src/components/form/helpers/FormFieldHelperText/FormFieldHelperText.tsx +0 -68
  241. package/src/components/form/helpers/FormFieldHelperText/index.ts +0 -1
  242. package/src/components/form/helpers/FormFieldLoadingIndicator/FormFieldLoadingIndicator.tsx +0 -22
  243. package/src/components/form/helpers/FormFieldLoadingIndicator/index.ts +0 -1
  244. package/src/components/form/helpers/GenericForm/GenericForm.tsx +0 -187
  245. package/src/components/form/helpers/GenericForm/index.ts +0 -1
  246. package/src/components/ui/ApplicationBar/ApplicationBar.tsx +0 -74
  247. package/src/components/ui/ApplicationBar/ApplicationBarActions.tsx +0 -124
  248. package/src/components/ui/ApplicationBar/ApplicationBarActionsFeedbackItem.tsx +0 -102
  249. package/src/components/ui/ApplicationBar/ApplicationBarActionsInfotem.tsx +0 -60
  250. package/src/components/ui/ApplicationBar/ApplicationBarActionsNotificationsItem.tsx +0 -82
  251. package/src/components/ui/ApplicationBar/ApplicationBarActionsOrganizationSwitcherItem.tsx +0 -58
  252. package/src/components/ui/ApplicationBar/ApplicationBarActionsOutagesItem.tsx +0 -75
  253. package/src/components/ui/ApplicationBar/ApplicationBarActionsUserItem.tsx +0 -60
  254. package/src/components/ui/ApplicationBar/ApplicationBarNavigationMenu.tsx +0 -159
  255. package/src/components/ui/ApplicationBar/InfoMenu.tsx +0 -120
  256. package/src/components/ui/ApplicationBar/UserMenu.tsx +0 -208
  257. package/src/components/ui/ApplicationBar/UserOrganizationAdminMenuItem.tsx +0 -69
  258. package/src/components/ui/ApplicationBar/UserOwnOrganizationMenuItem.tsx +0 -54
  259. package/src/components/ui/ApplicationBar/index.ts +0 -1
  260. package/src/components/ui/ApplicationFooter/ApplicationFooter.tsx +0 -121
  261. package/src/components/ui/ApplicationFooter/ApplicationFooterLink.tsx +0 -48
  262. package/src/components/ui/ApplicationFooter/ApplicationFooterLinkSection.tsx +0 -56
  263. package/src/components/ui/ApplicationFooter/index.ts +0 -1
  264. package/src/components/ui/AuthenticationWrapper/AuthenticationWrapper.tsx +0 -208
  265. package/src/components/ui/AuthenticationWrapper/index.ts +0 -1
  266. package/src/components/ui/AuthorizationWrapper/AuthorizationWrapper.tsx +0 -75
  267. package/src/components/ui/AuthorizationWrapper/index.ts +0 -1
  268. package/src/components/ui/Breadcrumbs/Breadcrumbs.tsx +0 -92
  269. package/src/components/ui/Breadcrumbs/index.ts +0 -1
  270. package/src/components/ui/Confirmation/Confirmation.tsx +0 -10
  271. package/src/components/ui/Confirmation/ConfirmationRender.tsx +0 -81
  272. package/src/components/ui/Confirmation/index.ts +0 -2
  273. package/src/components/ui/ConsentDialog/ConsentDialog.tsx +0 -57
  274. package/src/components/ui/ConsentDialog/index.ts +0 -1
  275. package/src/components/ui/CopyToClipboardButton/CopyToClipboardButton.tsx +0 -94
  276. package/src/components/ui/CopyToClipboardButton/index.ts +0 -1
  277. package/src/components/ui/Dialog/Dialog.tsx +0 -196
  278. package/src/components/ui/Dialog/index.ts +0 -1
  279. package/src/components/ui/FileSelector/FileSelector.tsx +0 -358
  280. package/src/components/ui/FileSelector/index.ts +0 -1
  281. package/src/components/ui/GenericErrorMessage/GenericErrorMessage.tsx +0 -168
  282. package/src/components/ui/GenericErrorMessage/index.ts +0 -1
  283. package/src/components/ui/HomePageTrends/HomePageTrendCard.tsx +0 -132
  284. package/src/components/ui/HomePageTrends/HomePageTrends.tsx +0 -312
  285. package/src/components/ui/HomePageTrends/index.ts +0 -1
  286. package/src/components/ui/LicensesDialog/LicensesDialog.tsx +0 -231
  287. package/src/components/ui/LicensesDialog/index.ts +0 -1
  288. package/src/components/ui/LinearProgressWithLabel/LinearProgressWithLabel.tsx +0 -31
  289. package/src/components/ui/LinearProgressWithLabel/index.ts +0 -1
  290. package/src/components/ui/LoadingIndicator/LoadingIndicator.tsx +0 -11
  291. package/src/components/ui/LoadingIndicator/index.ts +0 -1
  292. package/src/components/ui/MyPermissionsDialog/MyPermissionsDialog.tsx +0 -95
  293. package/src/components/ui/MyPermissionsDialog/index.ts +0 -1
  294. package/src/components/ui/NavLink/NavLink.tsx +0 -47
  295. package/src/components/ui/NavLink/index.ts +0 -1
  296. package/src/components/ui/NestedMenu/IconMenuItem.tsx +0 -64
  297. package/src/components/ui/NestedMenu/NestedDropdown.tsx +0 -133
  298. package/src/components/ui/NestedMenu/NestedMenuItem.tsx +0 -250
  299. package/src/components/ui/NestedMenu/index.ts +0 -4
  300. package/src/components/ui/NestedMenu/nestedMenuItemsFromObject.tsx +0 -98
  301. package/src/components/ui/Notifications/NotificationItem.tsx +0 -70
  302. package/src/components/ui/Notifications/NotificationsDrawer.tsx +0 -161
  303. package/src/components/ui/Notifications/NotificationsStack.tsx +0 -45
  304. package/src/components/ui/Notifications/index.ts +0 -2
  305. package/src/components/ui/OrganizationSwitcherDialog/OrganizationSwitcherDialog.tsx +0 -204
  306. package/src/components/ui/OrganizationSwitcherDialog/index.ts +0 -1
  307. package/src/components/ui/OutageList/OutageItem.tsx +0 -48
  308. package/src/components/ui/OutageList/OutageList.tsx +0 -54
  309. package/src/components/ui/OutageList/OutageSection.tsx +0 -39
  310. package/src/components/ui/OutageList/index.ts +0 -1
  311. package/src/components/ui/OutagesDialog/OutagesDialog.tsx +0 -71
  312. package/src/components/ui/OutagesDialog/index.ts +0 -1
  313. package/src/components/ui/PageContainer/PageContainer.tsx +0 -207
  314. package/src/components/ui/PageContainer/index.ts +0 -1
  315. package/src/components/ui/PanelSeparator/PanelResizeHandle.tsx +0 -67
  316. package/src/components/ui/PanelSeparator/index.ts +0 -1
  317. package/src/components/ui/ResponseHandler/ResponseHandler.tsx +0 -79
  318. package/src/components/ui/ResponseHandler/index.ts +0 -1
  319. package/src/components/ui/Sidebar/SidebarItem.tsx +0 -138
  320. package/src/components/ui/Sidebar/SidebarMenu.tsx +0 -33
  321. package/src/components/ui/Sidebar/SidebarMenuItem.tsx +0 -61
  322. package/src/components/ui/Sidebar/index.ts +0 -3
  323. package/src/components/ui/SortableList/SortableList.tsx +0 -172
  324. package/src/components/ui/SortableList/SortableListItem.tsx +0 -73
  325. package/src/components/ui/SortableList/SortableListItemDragHandle.tsx +0 -53
  326. package/src/components/ui/SortableList/SortableOverlay.tsx +0 -35
  327. package/src/components/ui/SortableList/context/SortableListItemContext.tsx +0 -17
  328. package/src/components/ui/SortableList/context/SortableListItemContextProvider.tsx +0 -19
  329. package/src/components/ui/SortableList/context/useSortableListItemContext.tsx +0 -5
  330. package/src/components/ui/Spinner/Spinner.tsx +0 -84
  331. package/src/components/ui/Spinner/index.ts +0 -1
  332. package/src/components/ui/Stepper/Stepper.tsx +0 -194
  333. package/src/components/ui/Stepper/index.ts +0 -2
  334. package/src/components/ui/Stepper/stepperModel.ts +0 -4
  335. package/src/components/ui/Table/Table.tsx +0 -812
  336. package/src/components/ui/Table/TableActionsCell.tsx +0 -81
  337. package/src/components/ui/Table/TableCaption.tsx +0 -33
  338. package/src/components/ui/Table/TableCell.tsx +0 -162
  339. package/src/components/ui/Table/TableCellAsyncContent.tsx +0 -28
  340. package/src/components/ui/Table/TableCheckboxCell.tsx +0 -65
  341. package/src/components/ui/Table/TableCheckboxHeader.tsx +0 -72
  342. package/src/components/ui/Table/TableColumnsEditorDialog.tsx +0 -241
  343. package/src/components/ui/Table/TableFilter.tsx +0 -31
  344. package/src/components/ui/Table/TableFiltersSidebarItem.tsx +0 -398
  345. package/src/components/ui/Table/TableHeader.tsx +0 -40
  346. package/src/components/ui/Table/TableHeaderCell.tsx +0 -434
  347. package/src/components/ui/Table/TableHeaderFilter.tsx +0 -104
  348. package/src/components/ui/Table/TableMenu.tsx +0 -26
  349. package/src/components/ui/Table/TableReadableIndexCell.tsx +0 -65
  350. package/src/components/ui/Table/TableSidebarMenu.tsx +0 -59
  351. package/src/components/ui/Table/classNames.ts +0 -7
  352. package/src/components/ui/Table/index.ts +0 -12
  353. package/src/components/ui/UserFeedbackDialog/UserFeedbackDialog.tsx +0 -168
  354. package/src/components/ui/UserFeedbackDialog/index.ts +0 -1
  355. package/src/components/ui/UserInactivityConfirmation/UserInactivityConfirmation.tsx +0 -59
  356. package/src/components/ui/UserInactivityConfirmation/index.ts +0 -1
  357. package/src/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.tsx +0 -584
  358. package/src/components/ui/UsersEffectiveRightsDetailsDialog/index.ts +0 -1
  359. package/src/context/caseAbac/CaseAbacContext.tsx +0 -24
  360. package/src/context/caseAbac/CaseAbacContextProvider.tsx +0 -69
  361. package/src/context/caseAbac/index.ts +0 -3
  362. package/src/context/caseAbac/useCaseAbacContext.tsx +0 -6
  363. package/src/context/caseTypeAbac/CaseTypeAbacContext.tsx +0 -16
  364. package/src/context/caseTypeAbac/CaseTypeAbacContextProvider.tsx +0 -40
  365. package/src/context/caseTypeAbac/index.ts +0 -3
  366. package/src/context/caseTypeAbac/useCaseTypeAbacContext.tsx +0 -6
  367. package/src/data/date.ts +0 -8
  368. package/src/data/queryDependencies.ts +0 -166
  369. package/src/dataHooks/useAssemblyProtocolsQuery/index.ts +0 -1
  370. package/src/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.ts +0 -39
  371. package/src/dataHooks/useCaseRightsQuery/index.ts +0 -1
  372. package/src/dataHooks/useCaseRightsQuery/useCaseRightsQuery.ts +0 -21
  373. package/src/dataHooks/useCaseSetCategoriesQuery/index.ts +0 -1
  374. package/src/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.ts +0 -39
  375. package/src/dataHooks/useCaseSetRightsQuery/index.ts +0 -1
  376. package/src/dataHooks/useCaseSetRightsQuery/useCaseSetRightsQuery.ts +0 -17
  377. package/src/dataHooks/useCaseSetStatsQuery/index.ts +0 -1
  378. package/src/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.ts +0 -31
  379. package/src/dataHooks/useCaseSetStatusesQuery/index.ts +0 -1
  380. package/src/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.ts +0 -39
  381. package/src/dataHooks/useCaseSetsQuery/index.ts +0 -1
  382. package/src/dataHooks/useCaseSetsQuery/useCaseSetsQuery.ts +0 -41
  383. package/src/dataHooks/useCaseTypeSetCategoriesQuery/index.ts +0 -1
  384. package/src/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.ts +0 -41
  385. package/src/dataHooks/useCaseTypeSetMembersQuery/index.ts +0 -1
  386. package/src/dataHooks/useCaseTypeSetMembersQuery/useCaseTypeSetMembersQuery.ts +0 -17
  387. package/src/dataHooks/useCaseTypeSetsQuery/index.ts +0 -1
  388. package/src/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.ts +0 -58
  389. package/src/dataHooks/useCaseTypeStatsQuery/index.ts +0 -1
  390. package/src/dataHooks/useCaseTypeStatsQuery/useCaseTypeStatsQuery.ts +0 -20
  391. package/src/dataHooks/useCaseTypesQuery/index.ts +0 -1
  392. package/src/dataHooks/useCaseTypesQuery/useCaseTypesQuery.ts +0 -43
  393. package/src/dataHooks/useColSetMembersQuery/index.ts +0 -1
  394. package/src/dataHooks/useColSetMembersQuery/useColSetMembersQuery.ts +0 -17
  395. package/src/dataHooks/useColSetsQuery/index.ts +0 -1
  396. package/src/dataHooks/useColSetsQuery/useColSetsQuery.ts +0 -39
  397. package/src/dataHooks/useColTypesQuery/index.ts +0 -1
  398. package/src/dataHooks/useColTypesQuery/useColTypesQuery.ts +0 -51
  399. package/src/dataHooks/useColsQuery/index.ts +0 -1
  400. package/src/dataHooks/useColsQuery/useColsQuery.ts +0 -60
  401. package/src/dataHooks/useConceptQuery/index.ts +0 -1
  402. package/src/dataHooks/useConceptQuery/useConceptQuery.ts +0 -52
  403. package/src/dataHooks/useConceptRelationTypeQuery/index.ts +0 -1
  404. package/src/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.ts +0 -21
  405. package/src/dataHooks/useConceptSetTypeQuery/index.ts +0 -1
  406. package/src/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.ts +0 -27
  407. package/src/dataHooks/useConceptSetsQuery/index.ts +0 -1
  408. package/src/dataHooks/useConceptSetsQuery/useConceptSetsQuery.ts +0 -38
  409. package/src/dataHooks/useDataCollectionSetMembersQuery/index.ts +0 -1
  410. package/src/dataHooks/useDataCollectionSetMembersQuery/useDataCollectionSetMembersQuery.ts +0 -17
  411. package/src/dataHooks/useDataCollectionsQuery/index.ts +0 -1
  412. package/src/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.ts +0 -45
  413. package/src/dataHooks/useDimTypesQuery/index.ts +0 -1
  414. package/src/dataHooks/useDimTypesQuery/useDimTypesQuery.ts +0 -26
  415. package/src/dataHooks/useDimsQuery/index.ts +0 -1
  416. package/src/dataHooks/useDimsQuery/useDimsQuery.ts +0 -55
  417. package/src/dataHooks/useDiseasesQuery/index.ts +0 -1
  418. package/src/dataHooks/useDiseasesQuery/useDiseasesQuery.ts +0 -39
  419. package/src/dataHooks/useEtiologicalAgentsQuery/index.ts +0 -1
  420. package/src/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.ts +0 -39
  421. package/src/dataHooks/useGeneticDistanceProtocolsQuery/index.ts +0 -1
  422. package/src/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.ts +0 -29
  423. package/src/dataHooks/useIdentifierIssuerOwnOrganizationQuery/index.ts +0 -1
  424. package/src/dataHooks/useIdentifierIssuerOwnOrganizationQuery/useIdentifierIssuerOwnOrganizationQuery.ts +0 -34
  425. package/src/dataHooks/useIdentifierIssuerQuery/index.ts +0 -1
  426. package/src/dataHooks/useIdentifierIssuerQuery/useIdentifierIssuerQuery.ts +0 -42
  427. package/src/dataHooks/useInviteUserConstraintsQuery/index.ts +0 -1
  428. package/src/dataHooks/useInviteUserConstraintsQuery/useInviteUserConstraintsQuery.ts +0 -32
  429. package/src/dataHooks/useOrganizationAccessCasePoliciesQuery/index.ts +0 -1
  430. package/src/dataHooks/useOrganizationAccessCasePoliciesQuery/useOrganizationAccessCasePoliciesQuery.ts +0 -20
  431. package/src/dataHooks/useOrganizationAdminPoliciesQuery/index.ts +0 -1
  432. package/src/dataHooks/useOrganizationAdminPoliciesQuery/useOrganizationAdminPoliciesQuery.ts +0 -60
  433. package/src/dataHooks/useOrganizationIdentifierIssuerLinksQuery/index.ts +0 -1
  434. package/src/dataHooks/useOrganizationIdentifierIssuerLinksQuery/useOrganizationIdentifierIssuerLinksQuery.ts +0 -18
  435. package/src/dataHooks/useOrganizationShareCasePoliciesQuery/index.ts +0 -1
  436. package/src/dataHooks/useOrganizationShareCasePoliciesQuery/useOrganizationShareCasePoliciesQuery.ts +0 -18
  437. package/src/dataHooks/useOrganizationsQuery/index.ts +0 -1
  438. package/src/dataHooks/useOrganizationsQuery/useOrganizationsQuery.ts +0 -40
  439. package/src/dataHooks/useRefColsQuery/index.ts +0 -1
  440. package/src/dataHooks/useRefColsQuery/useRefColsQuery.ts +0 -39
  441. package/src/dataHooks/useRefColsValidationRulesQuery/index.ts +0 -1
  442. package/src/dataHooks/useRefColsValidationRulesQuery/useRefColsValidationRulesQuery.ts +0 -17
  443. package/src/dataHooks/useRefDimsQuery/index.ts +0 -1
  444. package/src/dataHooks/useRefDimsQuery/useRefDimsQuery.ts +0 -39
  445. package/src/dataHooks/useRegionQuery/index.ts +0 -1
  446. package/src/dataHooks/useRegionQuery/useRegionQuery.ts +0 -52
  447. package/src/dataHooks/useRegionRelationTypeQuery/index.ts +0 -1
  448. package/src/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.ts +0 -24
  449. package/src/dataHooks/useRegionSetsQuery/index.ts +0 -1
  450. package/src/dataHooks/useRegionSetsQuery/useRegionSetsQuery.ts +0 -39
  451. package/src/dataHooks/useSequencingProtocolsQuery/index.ts +0 -1
  452. package/src/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.ts +0 -39
  453. package/src/dataHooks/useTreeAlgorithmCodesQuery/index.ts +0 -1
  454. package/src/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.ts +0 -42
  455. package/src/dataHooks/useUserAccessCasePoliciesQuery/index.ts +0 -1
  456. package/src/dataHooks/useUserAccessCasePoliciesQuery/useUserAccessCasePoliciesQuery.ts +0 -18
  457. package/src/dataHooks/useUserEffectiveRightsQuery/index.ts +0 -1
  458. package/src/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.ts +0 -125
  459. package/src/dataHooks/useUserShareCasePoliciesQuery/index.ts +0 -1
  460. package/src/dataHooks/useUserShareCasePoliciesQuery/useUserShareCasePoliciesQuery.ts +0 -18
  461. package/src/dataHooks/useUsersQuery/index.ts +0 -1
  462. package/src/dataHooks/useUsersQuery/useUsersQuery.ts +0 -43
  463. package/src/hoc/withDialog/index.ts +0 -1
  464. package/src/hoc/withDialog/withDialog.tsx +0 -132
  465. package/src/hoc/withPermissions/index.ts +0 -1
  466. package/src/hoc/withPermissions/withPermissions.tsx +0 -34
  467. package/src/hooks/useArray/index.ts +0 -1
  468. package/src/hooks/useArray/useArray.ts +0 -5
  469. package/src/hooks/useColumnsMenu/index.ts +0 -1
  470. package/src/hooks/useColumnsMenu/useColumnsMenu.tsx +0 -152
  471. package/src/hooks/useCreateMutation/index.ts +0 -1
  472. package/src/hooks/useCreateMutation/useCreateMutation.ts +0 -103
  473. package/src/hooks/useDeleteMutation/index.ts +0 -1
  474. package/src/hooks/useDeleteMutation/useDeleteMutation.ts +0 -92
  475. package/src/hooks/useDimensions/index.ts +0 -1
  476. package/src/hooks/useDimensions/useDimensions.ts +0 -82
  477. package/src/hooks/useEditMutation/index.ts +0 -1
  478. package/src/hooks/useEditMutation/useEditMutation.ts +0 -112
  479. package/src/hooks/useInitializeTableStore/index.ts +0 -1
  480. package/src/hooks/useInitializeTableStore/useInitializeTableStore.ts +0 -41
  481. package/src/hooks/useIsFormFieldRequiredFromSchema/index.ts +0 -1
  482. package/src/hooks/useIsFormFieldRequiredFromSchema/useIsFormFieldRequiredFromSchema.ts +0 -32
  483. package/src/hooks/useItemQuery/index.ts +0 -1
  484. package/src/hooks/useItemQuery/useItemQuery.ts +0 -82
  485. package/src/hooks/useOrganizationCasePolicyNameFactory/index.ts +0 -1
  486. package/src/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.ts +0 -31
  487. package/src/hooks/useQueryMemo/index.ts +0 -1
  488. package/src/hooks/useQueryMemo/useQueryMemo.ts +0 -24
  489. package/src/hooks/useScrollbarSize/index.ts +0 -1
  490. package/src/hooks/useScrollbarSize/useScrollbarSize.ts +0 -23
  491. package/src/hooks/useSubscribable/index.ts +0 -1
  492. package/src/hooks/useSubscribable/useSubscribable.ts +0 -30
  493. package/src/hooks/useUpdateBreadcrumb/index.ts +0 -1
  494. package/src/hooks/useUpdateBreadcrumb/useUpdateBreadcrumb.ts +0 -21
  495. package/src/hooks/useUpdateDocumentTitle/index.ts +0 -1
  496. package/src/hooks/useUpdateDocumentTitle/useUpdateDocumentTitle.ts +0 -10
  497. package/src/hooks/useUserCasePolicyNameFactory/index.ts +0 -1
  498. package/src/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.ts +0 -37
  499. package/src/index.ts +0 -301
  500. package/src/models/admin.ts +0 -7
  501. package/src/models/auth.ts +0 -14
  502. package/src/models/caseAccess.ts +0 -21
  503. package/src/models/config.ts +0 -153
  504. package/src/models/data.ts +0 -11
  505. package/src/models/dataHooks.ts +0 -18
  506. package/src/models/environment.ts +0 -10
  507. package/src/models/epi.ts +0 -188
  508. package/src/models/filter.ts +0 -39
  509. package/src/models/form.ts +0 -74
  510. package/src/models/generic.ts +0 -4
  511. package/src/models/nestedMenu.ts +0 -21
  512. package/src/models/notification.ts +0 -12
  513. package/src/models/outage.ts +0 -7
  514. package/src/models/query.ts +0 -75
  515. package/src/models/reactRouter.ts +0 -36
  516. package/src/models/table.ts +0 -191
  517. package/src/models/testId.ts +0 -1
  518. package/src/models/tree.ts +0 -32
  519. package/src/pages/AcceptInvitationPage/AcceptInvitationPage.tsx +0 -96
  520. package/src/pages/AcceptInvitationPage/index.ts +0 -1
  521. package/src/pages/AdminPage/AdminPage.tsx +0 -164
  522. package/src/pages/AdminPage/index.ts +0 -1
  523. package/src/pages/CaseSetStatusAdminPage/CaseSetStatusAdminPage.tsx +0 -98
  524. package/src/pages/CaseSetStatusAdminPage/index.ts +0 -1
  525. package/src/pages/CaseTypeSetCategoriesAdminPage/CaseTypeSetCategoriesAdminPage.tsx +0 -108
  526. package/src/pages/CaseTypeSetCategoriesAdminPage/index.ts +0 -1
  527. package/src/pages/CaseTypeSetsAdminPage/CaseTypeSetsAdminPage.tsx +0 -200
  528. package/src/pages/CaseTypeSetsAdminPage/index.ts +0 -1
  529. package/src/pages/CaseTypesAdminPage/CaseTypesAdminPage.tsx +0 -204
  530. package/src/pages/CaseTypesAdminPage/index.ts +0 -1
  531. package/src/pages/CasesDetailPage/CasesDetailPage.tsx +0 -57
  532. package/src/pages/CasesDetailPage/index.ts +0 -1
  533. package/src/pages/CasesPage/CasesPage.tsx +0 -338
  534. package/src/pages/CasesPage/index.ts +0 -1
  535. package/src/pages/ChooseIdentityProviderPage/ChooseIdentityProviderPage.tsx +0 -166
  536. package/src/pages/ChooseIdentityProviderPage/index.ts +0 -1
  537. package/src/pages/ColSetsAdminPage/ColSetsAdminPage.tsx +0 -175
  538. package/src/pages/ColSetsAdminPage/index.ts +0 -1
  539. package/src/pages/ColsAdminPage/ColsAdminPage.tsx +0 -400
  540. package/src/pages/ColsAdminPage/index.ts +0 -1
  541. package/src/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.tsx +0 -134
  542. package/src/pages/ConceptRelationsAdminPage/index.ts +0 -1
  543. package/src/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.tsx +0 -167
  544. package/src/pages/ConceptSetsAdminPage/index.ts +0 -1
  545. package/src/pages/ConceptsAdminPage/ConceptsAdminPage.tsx +0 -138
  546. package/src/pages/ConceptsAdminPage/index.ts +0 -1
  547. package/src/pages/CrudPage/CrudPage.tsx +0 -646
  548. package/src/pages/CrudPage/CrudPageDeleteDialog.tsx +0 -85
  549. package/src/pages/CrudPage/CrudPageEditDialog.tsx +0 -165
  550. package/src/pages/CrudPage/index.ts +0 -1
  551. package/src/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.tsx +0 -156
  552. package/src/pages/DataCollectionSetsAdminPage/index.ts +0 -1
  553. package/src/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.tsx +0 -238
  554. package/src/pages/DataCollectionVisualizationPage/index.ts +0 -1
  555. package/src/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.tsx +0 -96
  556. package/src/pages/DataCollectionsAdminPage/index.ts +0 -1
  557. package/src/pages/DimsAdminPage/DimsAdminPage.tsx +0 -208
  558. package/src/pages/DimsAdminPage/index.ts +0 -1
  559. package/src/pages/DiseasesAdminPage/DiseasesAdminPage.tsx +0 -97
  560. package/src/pages/DiseasesAdminPage/index.ts +0 -1
  561. package/src/pages/ErrorPage/ErrorPage.tsx +0 -25
  562. package/src/pages/ErrorPage/index.ts +0 -1
  563. package/src/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.tsx +0 -96
  564. package/src/pages/EtiologicalAgentsAdminPage/index.ts +0 -1
  565. package/src/pages/EtiologiesAdminPage/EtiologiesAdminPage.tsx +0 -110
  566. package/src/pages/EtiologiesAdminPage/index.ts +0 -1
  567. package/src/pages/EventsDetailPage/EventsDetailPage.tsx +0 -67
  568. package/src/pages/EventsDetailPage/index.ts +0 -1
  569. package/src/pages/EventsPage/EventsPage.tsx +0 -262
  570. package/src/pages/EventsPage/index.ts +0 -1
  571. package/src/pages/HomePage/HomePage.tsx +0 -47
  572. package/src/pages/HomePage/index.ts +0 -1
  573. package/src/pages/IdentifierIssuersAdminPage/IdentifierIssuersAdminPage.tsx +0 -106
  574. package/src/pages/IdentifierIssuersAdminPage/index.ts +0 -1
  575. package/src/pages/OrganizationAccessCasePoliciesAdminPage/OrganizationAccessCasePoliciesAdminPage.tsx +0 -217
  576. package/src/pages/OrganizationAccessCasePoliciesAdminPage/index.ts +0 -1
  577. package/src/pages/OrganizationAdminPoliciesAdminPage/OrganizationAdminPoliciesAdminPage.tsx +0 -119
  578. package/src/pages/OrganizationAdminPoliciesAdminPage/index.ts +0 -1
  579. package/src/pages/OrganizationContactsAdminPage/OrganizationContactsAdminPage.tsx +0 -127
  580. package/src/pages/OrganizationContactsAdminPage/index.ts +0 -1
  581. package/src/pages/OrganizationShareCasePoliciesAdminPage/OrganizationShareCasePoliciesAdminPage.tsx +0 -183
  582. package/src/pages/OrganizationShareCasePoliciesAdminPage/index.ts +0 -1
  583. package/src/pages/OrganizationSitesAdminPage/OrganizationSitesAdminPage.tsx +0 -132
  584. package/src/pages/OrganizationSitesAdminPage/index.ts +0 -1
  585. package/src/pages/OrganizationsAdminPage/OrganizationsAdminPage.tsx +0 -188
  586. package/src/pages/OrganizationsAdminPage/index.ts +0 -1
  587. package/src/pages/OutagesAdminPage/OutagesAdminPage.tsx +0 -158
  588. package/src/pages/OutagesAdminPage/index.ts +0 -1
  589. package/src/pages/PostLoginPage/PostLoginPage.tsx +0 -39
  590. package/src/pages/PostLoginPage/index.ts +0 -1
  591. package/src/pages/PostLogoutPage/PostLogoutPage.tsx +0 -44
  592. package/src/pages/PostLogoutPage/index.ts +0 -1
  593. package/src/pages/RefColsAdminPage/RefColsAdminPage.tsx +0 -286
  594. package/src/pages/RefColsAdminPage/index.ts +0 -1
  595. package/src/pages/RefDimsAdminPage/RefDimsAdminPage.tsx +0 -152
  596. package/src/pages/RefDimsAdminPage/index.ts +0 -1
  597. package/src/pages/RegionRelationsAdminPage/RegionRelationsAdminPage.tsx +0 -132
  598. package/src/pages/RegionRelationsAdminPage/index.ts +0 -1
  599. package/src/pages/RegionSetShapesAdminPage/RegionSetShapesAdminPage.tsx +0 -132
  600. package/src/pages/RegionSetShapesAdminPage/index.ts +0 -1
  601. package/src/pages/RegionSetsAdminPage/RegionSetsAdminPage.tsx +0 -147
  602. package/src/pages/RegionSetsAdminPage/index.ts +0 -1
  603. package/src/pages/RegionsAdminPage/RegionsAdminPage.tsx +0 -150
  604. package/src/pages/RegionsAdminPage/index.ts +0 -1
  605. package/src/pages/RouterErrorPage/RouterErrorPage.tsx +0 -23
  606. package/src/pages/RouterErrorPage/index.ts +0 -1
  607. package/src/pages/TrendsPage/TrendsPage.tsx +0 -17
  608. package/src/pages/TrendsPage/index.ts +0 -1
  609. package/src/pages/UploadPage/UploadPage.tsx +0 -40
  610. package/src/pages/UploadPage/index.ts +0 -1
  611. package/src/pages/UserAccessCasePoliciesAdminPage/UserAccessCasePoliciesAdminPage.tsx +0 -209
  612. package/src/pages/UserAccessCasePoliciesAdminPage/index.ts +0 -1
  613. package/src/pages/UserEffectiveRightsAdminPage/UserEffectiveRightsAdminPage.tsx +0 -331
  614. package/src/pages/UserEffectiveRightsAdminPage/index.ts +0 -1
  615. package/src/pages/UserEffectiveRightsTesterAdminPage/UserEffectiveRightsTesterAdminPage.tsx +0 -283
  616. package/src/pages/UserEffectiveRightsTesterAdminPage/index.ts +0 -1
  617. package/src/pages/UserInvitationsAdminPage/UserInvitationConsumeDialog.tsx +0 -143
  618. package/src/pages/UserInvitationsAdminPage/UserInvitationShareDialog.tsx +0 -100
  619. package/src/pages/UserInvitationsAdminPage/UserInvitationsAdminPage.tsx +0 -218
  620. package/src/pages/UserInvitationsAdminPage/index.ts +0 -1
  621. package/src/pages/UserShareCasePoliciesAdminPage/UserShareCasePoliciesAdminPage.tsx +0 -183
  622. package/src/pages/UserShareCasePoliciesAdminPage/index.ts +0 -1
  623. package/src/pages/UsersAdminPage/UsersAdminPage.tsx +0 -240
  624. package/src/pages/UsersAdminPage/index.ts +0 -1
  625. package/src/routes/adminRoutes.tsx +0 -801
  626. package/src/routes/index.ts +0 -2
  627. package/src/routes/routes.tsx +0 -235
  628. package/src/setup/index.ts +0 -1
  629. package/src/setup/setup.ts +0 -5
  630. package/src/setup/yup.ts +0 -203
  631. package/src/stores/epiDashboardStore/epiDashboardStore.ts +0 -750
  632. package/src/stores/epiDashboardStore/epiDashboardStoreContext.tsx +0 -6
  633. package/src/stores/epiDashboardStore/index.ts +0 -2
  634. package/src/stores/epiUploadStore/epiUploadStore.ts +0 -351
  635. package/src/stores/epiUploadStore/epiUploadStoreContext.tsx +0 -6
  636. package/src/stores/epiUploadStore/index.ts +0 -2
  637. package/src/stores/oidcStore/index.ts +0 -1
  638. package/src/stores/oidcStore/oidcStore.ts +0 -43
  639. package/src/stores/outagesStore/index.ts +0 -1
  640. package/src/stores/outagesStore/outagesStore.ts +0 -31
  641. package/src/stores/tableStore/TableStoreContext.tsx +0 -6
  642. package/src/stores/tableStore/TableStoreContextProvider.tsx +0 -20
  643. package/src/stores/tableStore/index.ts +0 -4
  644. package/src/stores/tableStore/tableStore.ts +0 -547
  645. package/src/stores/tableStore/useTableStoreContext.tsx +0 -7
  646. package/src/stores/userProfileStore/index.ts +0 -1
  647. package/src/stores/userProfileStore/userProfileStore.ts +0 -112
  648. package/src/test/integration/lib/render.tsx +0 -33
  649. package/src/test/integration/tests/integration-example/HelloWorld.test.tsx +0 -14
  650. package/src/test/integration/tests/integration-example/HelloWorld.tsx +0 -9
  651. package/src/test/setup-browser.ts +0 -3
  652. package/src/test/setup-jsdom.ts +0 -6
  653. package/src/test/setup.ts +0 -9
  654. package/src/utils/AbacUtil/AbacUtil.ts +0 -21
  655. package/src/utils/AbacUtil/index.ts +0 -1
  656. package/src/utils/AxiosUtil/AxiosUtil.test.ts +0 -66
  657. package/src/utils/AxiosUtil/AxiosUtil.ts +0 -47
  658. package/src/utils/AxiosUtil/index.ts +0 -1
  659. package/src/utils/CaseSelectionUtil/CaseSelectionUtil.ts +0 -32
  660. package/src/utils/CaseSelectionUtil/index.ts +0 -1
  661. package/src/utils/CaseSetUtil/CaseSetUtil.ts +0 -13
  662. package/src/utils/CaseSetUtil/index.ts +0 -1
  663. package/src/utils/CaseTypeUtil/CaseTypeUtil.ts +0 -178
  664. package/src/utils/CaseTypeUtil/index.ts +0 -1
  665. package/src/utils/CaseUtil/CaseUtil.ts +0 -401
  666. package/src/utils/CaseUtil/index.ts +0 -1
  667. package/src/utils/DashboardUtil/DashboardUtil.ts +0 -46
  668. package/src/utils/DashboardUtil/index.ts +0 -1
  669. package/src/utils/DataHookUtil/DataHookUtil.ts +0 -137
  670. package/src/utils/DataHookUtil/index.ts +0 -1
  671. package/src/utils/DataSetUtil/DataSetUtil.ts +0 -70
  672. package/src/utils/DataSetUtil/index.ts +0 -1
  673. package/src/utils/DataUtil/DataUtil.ts +0 -84
  674. package/src/utils/DataUtil/index.ts +0 -1
  675. package/src/utils/DownloadUtil/DownloadUtil.ts +0 -237
  676. package/src/utils/DownloadUtil/index.ts +0 -1
  677. package/src/utils/EffectiveRightsUtil/EffectiveRightsUtil.ts +0 -142
  678. package/src/utils/EffectiveRightsUtil/index.ts +0 -1
  679. package/src/utils/EpiCurveUtil/EpiCurveUtil.ts +0 -180
  680. package/src/utils/EpiCurveUtil/index.ts +0 -1
  681. package/src/utils/EpiFilterUtil/EpiFilterUtil.ts +0 -232
  682. package/src/utils/EpiFilterUtil/index.ts +0 -1
  683. package/src/utils/EpiLineListUtil/EpiLineListUtil.ts +0 -15
  684. package/src/utils/EpiLineListUtil/index.ts +0 -1
  685. package/src/utils/EpiMapUtil/EpiMapUtil.test.ts +0 -54
  686. package/src/utils/EpiMapUtil/EpiMapUtil.ts +0 -80
  687. package/src/utils/EpiMapUtil/index.ts +0 -1
  688. package/src/utils/EpiTreeUtil/EpiTreeUtil.test.ts +0 -2467
  689. package/src/utils/EpiTreeUtil/EpiTreeUtil.ts +0 -1055
  690. package/src/utils/EpiTreeUtil/index.ts +0 -1
  691. package/src/utils/EpiUploadUtil/EpiUploadUtil.ts +0 -857
  692. package/src/utils/EpiUploadUtil/index.ts +0 -1
  693. package/src/utils/FileUtil/FileUtil.ts +0 -22
  694. package/src/utils/FileUtil/index.ts +0 -1
  695. package/src/utils/FormUtil/FormUtil.test.ts +0 -36
  696. package/src/utils/FormUtil/FormUtil.ts +0 -63
  697. package/src/utils/FormUtil/index.ts +0 -1
  698. package/src/utils/MenuDataUtil/MenuDataUtil.ts +0 -54
  699. package/src/utils/MenuDataUtil/index.ts +0 -1
  700. package/src/utils/NewickUtil/NewickUtil.test.ts +0 -187
  701. package/src/utils/NewickUtil/NewickUtil.ts +0 -69
  702. package/src/utils/NewickUtil/index.ts +0 -1
  703. package/src/utils/NotificationUtil/NotificationUtil.ts +0 -28
  704. package/src/utils/NotificationUtil/index.ts +0 -1
  705. package/src/utils/NumberUtil/NumberUtil.test.ts +0 -113
  706. package/src/utils/NumberUtil/NumberUtil.ts +0 -67
  707. package/src/utils/NumberUtil/index.ts +0 -1
  708. package/src/utils/ObjectUtil/ObjectUtil.test.ts +0 -43
  709. package/src/utils/ObjectUtil/ObjectUtil.ts +0 -28
  710. package/src/utils/ObjectUtil/index.ts +0 -1
  711. package/src/utils/OutageUtil/OutageUtil.test.ts +0 -108
  712. package/src/utils/OutageUtil/OutageUtil.ts +0 -81
  713. package/src/utils/OutageUtil/index.ts +0 -1
  714. package/src/utils/QueryUtil/QueryUtil.test.ts +0 -42
  715. package/src/utils/QueryUtil/QueryUtil.ts +0 -105
  716. package/src/utils/QueryUtil/index.ts +0 -1
  717. package/src/utils/StringUtil/StringUtil.test.ts +0 -61
  718. package/src/utils/StringUtil/StringUtil.ts +0 -91
  719. package/src/utils/StringUtil/index.ts +0 -1
  720. package/src/utils/TableUtil/TableUtil.ts +0 -665
  721. package/src/utils/TableUtil/index.ts +0 -1
  722. package/src/utils/TestIdUtil/TestIdUtil.test.ts +0 -12
  723. package/src/utils/TestIdUtil/TestIdUtil.ts +0 -13
  724. package/src/utils/TestIdUtil/index.ts +0 -1
  725. package/src/utils/TimeUtil/TimeUtil.ts +0 -38
  726. package/src/utils/TimeUtil/index.ts +0 -1
  727. package/src/utils/UserManagerUtil/UserManagerUtil.test.ts +0 -41
  728. package/src/utils/UserManagerUtil/UserManagerUtil.ts +0 -39
  729. package/src/utils/UserManagerUtil/index.ts +0 -1
  730. package/src/utils/ValidationUtil/ValidationUtil.test.ts +0 -61
  731. package/src/utils/ValidationUtil/ValidationUtil.ts +0 -56
  732. package/src/utils/ValidationUtil/index.ts +0 -1
  733. /package/{src → dist}/locale/en.json +0 -0
  734. /package/{src → dist}/locale/nl.json +0 -0
  735. /package/{src/@types → dist}/mui.d.ts +0 -0
  736. /package/{src/@types → dist}/ui.d.ts +0 -0
  737. /package/{src/@types → dist}/vite-env.d.ts +0 -0
  738. /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
- };