synapse-react-client 4.0.17 → 4.0.19

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 (297) hide show
  1. package/README.md +5 -3
  2. package/dist/SWC.index.d.ts +2 -0
  3. package/dist/SWC.index.d.ts.map +1 -1
  4. package/dist/SWC.index.js +3 -1
  5. package/dist/SWC.index.js.map +1 -1
  6. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  7. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  8. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  9. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  10. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  11. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  12. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  13. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  14. package/dist/components/AccessTokenPage/CreateAccessTokenModal.d.ts.map +1 -1
  15. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +56 -54
  16. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  17. package/dist/components/Authentication/PasswordField.d.ts +1 -1
  18. package/dist/components/Authentication/PasswordField.d.ts.map +1 -1
  19. package/dist/components/Authentication/PasswordField.js.map +1 -1
  20. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  21. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +1 -2
  22. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  23. package/dist/components/Authentication/UsernamePasswordForm.d.ts.map +1 -1
  24. package/dist/components/Authentication/UsernamePasswordForm.js +32 -29
  25. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  26. package/dist/components/CardContainer/CardLink.d.ts +2 -2
  27. package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
  28. package/dist/components/CardDeck/CardDeckCardProps.d.ts.map +1 -1
  29. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  30. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
  31. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +106 -103
  32. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  33. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.d.ts.map +1 -1
  34. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  35. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.d.ts.map +1 -1
  36. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  37. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts.map +1 -1
  38. package/dist/components/CreateProjectModal/CreateProjectModal.js +4 -4
  39. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  40. package/dist/components/CreateTableViewWizard/TableNameForm.js +6 -6
  41. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  42. package/dist/components/CrispChat/CrispChat.js +4 -4
  43. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  44. package/dist/components/DataExplorer/DataExplorer.css +1 -0
  45. package/dist/components/DataExplorer/DataExplorer.d.ts +13 -0
  46. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -0
  47. package/dist/components/DataExplorer/DataExplorer.js +119 -0
  48. package/dist/components/DataExplorer/DataExplorer.js.map +1 -0
  49. package/dist/components/DataExplorer/DataExplorer.module.js +22 -0
  50. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -0
  51. package/dist/components/DataExplorer/DataExplorer.module.scss +156 -0
  52. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  53. package/dist/components/DataGrid/columns/AutocompleteColumn.js +106 -102
  54. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  55. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  56. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +97 -89
  57. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  58. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +19 -8
  59. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -1
  60. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +64 -43
  61. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  62. package/dist/components/DataGrid/components/UploadCsvToGridDialog.d.ts.map +1 -1
  63. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +9 -9
  64. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  65. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.d.ts.map +1 -1
  66. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js +8 -1
  67. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  68. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  69. package/dist/components/DownloadCart/RequestDownloadCard.js +14 -14
  70. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  71. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  72. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  73. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
  74. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  75. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  76. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  77. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  78. package/dist/components/EntityFinder/EntityIdTextField.d.ts +17 -0
  79. package/dist/components/EntityFinder/EntityIdTextField.d.ts.map +1 -0
  80. package/dist/components/EntityFinder/EntityIdTextField.js +35 -0
  81. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -0
  82. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.d.ts.map +1 -1
  83. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js +22 -16
  84. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  85. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  86. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  87. package/dist/components/FullWidthAlert/FullWidthAlert.d.ts.map +1 -1
  88. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  89. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.d.ts.map +1 -1
  90. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  91. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  92. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  93. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  94. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  95. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  96. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts +1 -1
  97. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts.map +1 -1
  98. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js +1 -1
  99. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  100. package/dist/components/PortalList/CreatePortalModal.d.ts.map +1 -1
  101. package/dist/components/PortalList/CreatePortalModal.js +34 -33
  102. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  103. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts.map +1 -1
  104. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +67 -65
  105. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  106. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -1
  107. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  108. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +1 -0
  109. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  110. package/dist/components/QueryWrapperPlotNav/RowSetView.d.ts.map +1 -1
  111. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  112. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  113. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  114. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts +1 -1
  115. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts.map +1 -1
  116. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js +1 -0
  117. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  118. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.d.ts.map +1 -1
  119. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  120. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.d.ts.map +1 -1
  121. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  122. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  123. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  124. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.d.ts +1 -1
  125. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.d.ts.map +1 -1
  126. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  127. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  128. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.d.ts.map +1 -1
  129. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
  130. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  131. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  132. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  133. package/dist/components/SynapseTable/SynapseTableUtils.d.ts.map +1 -1
  134. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  135. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  136. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +9 -9
  137. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  138. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js +4 -4
  139. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.d.ts.map +1 -1
  140. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +25 -25
  141. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  142. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  143. package/dist/components/TextField/TextField.css +1 -1
  144. package/dist/components/TextField/TextField.d.ts +14 -3
  145. package/dist/components/TextField/TextField.d.ts.map +1 -1
  146. package/dist/components/TextField/TextField.js +41 -43
  147. package/dist/components/TextField/TextField.js.map +1 -1
  148. package/dist/components/TextField/TextField.module.js +3 -4
  149. package/dist/components/TextField/TextField.module.js.map +1 -1
  150. package/dist/components/TextField/TextField.module.scss +18 -10
  151. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.d.ts.map +1 -1
  152. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +20 -16
  153. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  154. package/dist/components/UserCardList/UserCardList.d.ts.map +1 -1
  155. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  156. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  157. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  158. package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -1
  159. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  160. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  161. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  162. package/dist/components/doi/CreateOrUpdateDoiModal.js +13 -13
  163. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  164. package/dist/components/entity/page/title_bar/TitleBarProperties.js +23 -23
  165. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  166. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  167. package/dist/components/index.js +17 -17
  168. package/dist/components/styled/StyledFormControl.d.ts +15 -0
  169. package/dist/components/styled/StyledFormControl.d.ts.map +1 -1
  170. package/dist/components/styled/StyledFormControl.js +1 -0
  171. package/dist/components/styled/StyledFormControl.js.map +1 -1
  172. package/dist/components/styled/index.js +3 -3
  173. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.d.ts +18 -0
  174. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.d.ts.map +1 -0
  175. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +116 -0
  176. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -0
  177. package/dist/components/table/CsvPreview/CsvPreviewDialog.d.ts +5 -5
  178. package/dist/components/table/CsvPreview/CsvPreviewDialog.d.ts.map +1 -1
  179. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +27 -76
  180. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  181. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.d.ts +19 -0
  182. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.d.ts.map +1 -0
  183. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +41 -0
  184. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -0
  185. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.d.ts +12 -0
  186. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.d.ts.map +1 -0
  187. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js +25 -0
  188. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -0
  189. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.d.ts +18 -0
  190. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.d.ts.map +1 -0
  191. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js +55 -0
  192. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -0
  193. package/dist/components/table/CsvPreview/useCreateTableFromCsv.d.ts +19 -0
  194. package/dist/components/table/CsvPreview/useCreateTableFromCsv.d.ts.map +1 -0
  195. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js +35 -0
  196. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -0
  197. package/dist/components/table/CsvPreview/useCsvUploadPreview.d.ts +22 -0
  198. package/dist/components/table/CsvPreview/useCsvUploadPreview.d.ts.map +1 -0
  199. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +32 -0
  200. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -0
  201. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.d.ts +14 -0
  202. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.d.ts.map +1 -0
  203. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js +23 -0
  204. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -0
  205. package/dist/components/utils/ConditionalWrapper.d.ts.map +1 -1
  206. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  207. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  208. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  209. package/dist/components/widgets/facet-nav/FacetNavPanel.js +69 -62
  210. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  211. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +1 -0
  212. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  213. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +27 -26
  214. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  215. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.d.ts +1 -0
  216. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.d.ts.map +1 -1
  217. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js +2 -1
  218. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  219. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
  220. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
  221. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +44 -43
  222. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  223. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +13 -0
  224. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -0
  225. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +398 -0
  226. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -0
  227. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  228. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +49 -19
  229. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  230. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  231. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +49 -25
  232. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  233. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts +0 -1
  234. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts.map +1 -1
  235. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js +20 -22
  236. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  237. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -1
  238. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +25 -27
  239. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  240. package/dist/features/entity/metadata-task/utils/constants.d.ts +29 -0
  241. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  242. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  243. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  244. package/dist/index.js +17 -17
  245. package/dist/mockServiceWorker.js +6 -8
  246. package/dist/mocks/curation/mockCurationTask.d.ts +2 -2
  247. package/dist/mocks/curation/mockCurationTask.d.ts.map +1 -1
  248. package/dist/mocks/curation/mockCurationTask.js +9 -5
  249. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  250. package/dist/mocks/msw/handlers/featureFlagHandlers.d.ts +1 -1
  251. package/dist/mocks/msw/handlers/featureFlagHandlers.d.ts.map +1 -1
  252. package/dist/mocks/msw/handlers/featureFlagHandlers.js +1 -1
  253. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  254. package/dist/style/components/_cards.scss +0 -3
  255. package/dist/style/components/_data-grid-extra.scss +2 -2
  256. package/dist/style/components/_login.scss +6 -2
  257. package/dist/style/main.css +1 -1
  258. package/dist/synapse-client/SynapseClient.d.ts +2 -1
  259. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  260. package/dist/synapse-client/SynapseClient.js.map +1 -1
  261. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  262. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  263. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  264. package/dist/synapse-queries/curation/task/useCurationTask.js +16 -6
  265. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  266. package/dist/synapse-queries/dataaccess/useAccessRequirements.d.ts.map +1 -1
  267. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  268. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  269. package/dist/synapse-queries/featureflags/useGetFeatureFlag.d.ts +1 -1
  270. package/dist/synapse-queries/featureflags/useGetFeatureFlag.d.ts.map +1 -1
  271. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  272. package/dist/synapse-queries/file/useFiles.d.ts.map +1 -1
  273. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  274. package/dist/synapse-queries/termsOfService/useTermsOfService.d.ts.map +1 -1
  275. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  276. package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
  277. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  278. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  279. package/dist/theme/palette/Palettes.d.ts +2 -2
  280. package/dist/theme/palette/Palettes.d.ts.map +1 -1
  281. package/dist/theme/palette/Palettes.js +2 -2
  282. package/dist/theme/palette/Palettes.js.map +1 -1
  283. package/dist/tsconfig.build.tsbuildinfo +1 -1
  284. package/dist/types/ThemeTypes.d.ts +5 -6
  285. package/dist/utils/AppUtils/session/SynapseSessionManager.d.ts.map +1 -1
  286. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  287. package/dist/utils/featureflag/FeatureFlags.d.ts +13 -0
  288. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -0
  289. package/dist/utils/featureflag/FeatureFlags.js +8 -0
  290. package/dist/utils/featureflag/FeatureFlags.js.map +1 -0
  291. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  292. package/dist/utils/functions/queryUtils.js.map +1 -1
  293. package/dist/utils/hooks/useGetInfoFromIds.d.ts.map +1 -1
  294. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  295. package/dist/utils/slots/SlotUtils.d.ts.map +1 -1
  296. package/dist/utils/slots/SlotUtils.js.map +1 -1
  297. package/package.json +5 -6
@@ -1,94 +1,45 @@
1
1
  import { ErrorBanner as e } from "../../error/ErrorBanner.js";
2
2
  import { DialogBase as t } from "../../DialogBase.js";
3
3
  import "../../index.js";
4
- import { BasicFileHandleUpload as n } from "../../file/upload/BasicFileHandleUpload.js";
5
- import r from "./CsvPreview.js";
6
- import i from "../CsvTableDescriptorForm/CsvTableDescriptorForm.js";
7
- import { useCallback as a, useRef as o, useState as s } from "react";
8
- import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
9
- import { RefreshTwoTone as d } from "@mui/icons-material";
10
- import f from "@mui/material/Typography";
11
- import p from "@mui/material/Stack";
12
- import m from "@mui/material/Button";
13
- import h from "@mui/icons-material/ExpandMore";
14
- import g from "@mui/material/Accordion";
15
- import _ from "@mui/material/AccordionDetails";
16
- import v from "@mui/material/AccordionSummary";
4
+ import n, { CsvUploadPreviewStep as r } from "./useCsvUploadPreview.js";
5
+ import i from "./CsvUploadPreviewContent.js";
6
+ import { useCallback as a } from "react";
7
+ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
8
+ import l from "@mui/material/Button";
17
9
  //#region src/components/table/CsvPreview/CsvPreviewDialog.tsx
18
- var y = /* @__PURE__ */ function(e) {
19
- return e[e.UPLOAD_CSV = 0] = "UPLOAD_CSV", e[e.COLUMN_PREVIEW = 1] = "COLUMN_PREVIEW", e;
20
- }(y || {});
21
- function b(b) {
22
- let { open: x, onClose: S, onConfirm: C, confirmIsPending: w, errorMessage: T } = b, [E, D] = s(y.UPLOAD_CSV), [O, k] = s({
23
- separator: ",",
24
- quoteCharacter: "\"",
25
- escapeCharacter: "\\",
26
- lineEnd: "\n",
27
- isFirstLineHeader: !0
28
- }), [A, j] = s(null), [M, N] = s(!1), [P, F] = s(null), I = a((e) => {
29
- F(e), D(y.COLUMN_PREVIEW);
30
- }, []), L = o(null), R = o(null), z = /* @__PURE__ */ l(n, {
31
- ref: L,
32
- allowMultipleUpload: !1,
33
- onFileUploadComplete: (e) => {
34
- I(e);
35
- },
36
- disableDragAndDrop: !0
37
- }), B = /* @__PURE__ */ u(p, {
38
- spacing: 2,
39
- children: [P && /* @__PURE__ */ l(r, {
40
- fileHandleId: P,
41
- csvTableDescriptor: O,
42
- onCsvPreviewDataChange: j,
43
- onIsLoadingChange: N
44
- }), /* @__PURE__ */ u(g, { children: [/* @__PURE__ */ l(v, {
45
- expandIcon: /* @__PURE__ */ l(h, {}),
46
- children: /* @__PURE__ */ l(f, {
47
- variant: "headline3",
48
- children: "Show Options"
49
- })
50
- }), /* @__PURE__ */ u(_, { children: [/* @__PURE__ */ l(i, {
51
- defaultValue: O,
52
- ref: R
53
- }), /* @__PURE__ */ l(m, {
54
- variant: "outlined",
55
- startIcon: /* @__PURE__ */ l(d, {}),
56
- sx: { mt: 2 },
57
- onClick: () => {
58
- R.current && k(R.current.getFormData());
59
- },
60
- children: "Refresh Preview"
61
- })] })] })]
62
- });
63
- return /* @__PURE__ */ l(t, {
10
+ function u(u) {
11
+ let { open: d, onClose: f, onConfirm: p, confirmIsPending: m, errorMessage: h } = u, g = n(), _ = a(() => {
12
+ let e = g.csvPreviewData?.suggestedColumns;
13
+ e && g.uploadedFileHandleId != null && p(g.uploadedFileHandleId, e, g.csvTableDescriptor);
14
+ }, [
15
+ g.csvPreviewData,
16
+ g.uploadedFileHandleId,
17
+ g.csvTableDescriptor,
18
+ p
19
+ ]);
20
+ return /* @__PURE__ */ s(t, {
64
21
  maxWidth: "lg",
65
22
  title: "Upload CSV",
66
- onCancel: S,
67
- open: x,
68
- content: /* @__PURE__ */ u(c, { children: [
69
- E === y.UPLOAD_CSV && z,
70
- E === y.COLUMN_PREVIEW && B,
71
- T && /* @__PURE__ */ l(e, { error: T })
72
- ] }),
73
- actions: /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l(m, {
23
+ onCancel: f,
24
+ open: d,
25
+ content: /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(i, { workflow: g }), h && /* @__PURE__ */ s(e, { error: h })] }),
26
+ actions: /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s(l, {
74
27
  variant: "outlined",
75
- disabled: M,
28
+ disabled: g.isLoadingPreview,
76
29
  onClick: () => {
77
- S();
30
+ f();
78
31
  },
79
32
  children: "Cancel"
80
- }), E === y.COLUMN_PREVIEW && /* @__PURE__ */ l(m, {
81
- disabled: M,
33
+ }), g.step === r.COLUMN_PREVIEW && /* @__PURE__ */ s(l, {
34
+ disabled: g.isLoadingPreview,
82
35
  variant: "contained",
83
- onClick: () => {
84
- C(P, A.suggestedColumns, O);
85
- },
86
- loading: w,
36
+ onClick: _,
37
+ loading: m,
87
38
  children: "Confirm"
88
39
  })] })
89
40
  });
90
41
  }
91
42
  //#endregion
92
- export { b as default };
43
+ export { u as default };
93
44
 
94
45
  //# sourceMappingURL=CsvPreviewDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CsvPreviewDialog.js","names":[],"sources":["../../../../src/components/table/CsvPreview/CsvPreviewDialog.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport {\n BasicFileHandleUpload,\n FileUploadHandle,\n} from '@/components/file/upload/BasicFileHandleUpload'\nimport { ErrorBanner } from '@/components/index'\nimport CsvPreview from '@/components/table/CsvPreview/CsvPreview'\nimport CsvTableDescriptorForm, {\n CsvTableDescriptorFormHandle,\n} from '@/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm'\nimport { RefreshTwoTone } from '@mui/icons-material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport Accordion from '@mui/material/Accordion'\nimport AccordionDetails from '@mui/material/AccordionDetails'\nimport AccordionSummary from '@mui/material/AccordionSummary'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport Typography from '@mui/material/Typography'\nimport {\n ColumnModel,\n CsvTableDescriptor,\n UploadToTablePreviewResult,\n} from '@sage-bionetworks/synapse-client'\nimport { useCallback, useRef, useState } from 'react'\n\nenum CsvPreviewDialogStep {\n UPLOAD_CSV = 0,\n COLUMN_PREVIEW = 1,\n}\n\nexport type CsvPreviewDialogProps = {\n /** Whether the dialog is open */\n open: boolean\n /** Callback when the dialog is closed */\n onClose: () => void\n /** Callback when the user confirms the column models\n * @param dataFileHandleId - The file handle ID of the uploaded CSV\n * @param columnModels - The confirmed column models\n * */\n onConfirm: (\n dataFileHandleId: string,\n columnModels: ColumnModel[],\n csvTableDescriptor: CsvTableDescriptor,\n ) => void\n /** Whether the confirm action is pending */\n confirmIsPending?: boolean\n /** An optional error message to display */\n errorMessage?: string\n}\n\nexport default function CsvPreviewDialog(props: CsvPreviewDialogProps) {\n const { open, onClose, onConfirm, confirmIsPending, errorMessage } = props\n const [step, setStep] = useState(CsvPreviewDialogStep.UPLOAD_CSV)\n const [csvTableDescriptor, setCsvTableDescriptor] =\n useState<CsvTableDescriptor>({\n separator: ',',\n quoteCharacter: '\"',\n escapeCharacter: '\\\\',\n lineEnd: '\\n',\n isFirstLineHeader: true,\n })\n const [csvPreviewData, setCsvPreviewData] =\n useState<UploadToTablePreviewResult | null>(null)\n const [isLoadingPreview, setIsLoadingPreview] = useState(false)\n\n const [uploadedFileHandleId, setUploadedFileHandleId] = useState<\n string | null\n >(null)\n\n const onFileUploaded = useCallback((fileHandleId: string) => {\n setUploadedFileHandleId(fileHandleId)\n setStep(CsvPreviewDialogStep.COLUMN_PREVIEW)\n }, [])\n\n const uploadRef = useRef<FileUploadHandle | null>(null)\n const csvDescriptorFormRef = useRef<CsvTableDescriptorFormHandle | null>(null)\n\n const uploadStepContent = (\n <BasicFileHandleUpload\n ref={uploadRef}\n allowMultipleUpload={false}\n onFileUploadComplete={fileHandleId => {\n onFileUploaded(fileHandleId)\n }}\n disableDragAndDrop={true}\n />\n )\n\n const previewStepContent = (\n <Stack spacing={2}>\n {uploadedFileHandleId && (\n <CsvPreview\n fileHandleId={uploadedFileHandleId}\n csvTableDescriptor={csvTableDescriptor}\n onCsvPreviewDataChange={setCsvPreviewData}\n onIsLoadingChange={setIsLoadingPreview}\n />\n )}\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant={'headline3'}>Show Options</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <CsvTableDescriptorForm\n defaultValue={csvTableDescriptor}\n ref={csvDescriptorFormRef}\n />\n <Button\n variant={'outlined'}\n startIcon={<RefreshTwoTone />}\n sx={{ mt: 2 }}\n onClick={() => {\n // Get the state from the form and update local state, which will re-render the preview\n if (csvDescriptorFormRef.current) {\n setCsvTableDescriptor(\n csvDescriptorFormRef.current.getFormData(),\n )\n }\n }}\n >\n Refresh Preview\n </Button>\n </AccordionDetails>\n </Accordion>\n </Stack>\n )\n\n return (\n <DialogBase\n maxWidth={'lg'}\n title={'Upload CSV'}\n onCancel={onClose}\n open={open}\n content={\n <>\n {step === CsvPreviewDialogStep.UPLOAD_CSV && uploadStepContent}\n {step === CsvPreviewDialogStep.COLUMN_PREVIEW && previewStepContent}\n {errorMessage && <ErrorBanner error={errorMessage} />}\n </>\n }\n actions={\n <>\n <Button\n variant={'outlined'}\n disabled={isLoadingPreview}\n onClick={() => {\n onClose()\n }}\n >\n Cancel\n </Button>\n {step === CsvPreviewDialogStep.COLUMN_PREVIEW && (\n <Button\n disabled={isLoadingPreview}\n variant={'contained'}\n onClick={() => {\n onConfirm(\n uploadedFileHandleId!,\n csvPreviewData!.suggestedColumns!,\n csvTableDescriptor,\n )\n }}\n loading={confirmIsPending}\n >\n Confirm\n </Button>\n )}\n </>\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,IAAK,IAAL,yBAAA,GAAA;QACE,EAAA,EAAA,aAAa,KAAA,cACb,EAAA,EAAA,iBAAiB,KAAA;EAFd,KAAA,EAAA,CAGJ;AAsBD,SAAwB,EAAiB,GAA8B;CACrE,IAAM,EAAE,SAAM,YAAS,cAAW,qBAAkB,oBAAiB,GAC/D,CAAC,GAAM,KAAW,EAAS,EAAqB,WAAW,EAC3D,CAAC,GAAoB,KACzB,EAA6B;EAC3B,WAAW;EACX,gBAAgB;EAChB,iBAAiB;EACjB,SAAS;EACT,mBAAmB;EACpB,CAAC,EACE,CAAC,GAAgB,KACrB,EAA4C,KAAK,EAC7C,CAAC,GAAkB,KAAuB,EAAS,GAAM,EAEzD,CAAC,GAAsB,KAA2B,EAEtD,KAAK,EAED,IAAiB,GAAa,MAAyB;AAE3D,EADA,EAAwB,EAAa,EACrC,EAAQ,EAAqB,eAAe;IAC3C,EAAE,CAAC,EAEA,IAAY,EAAgC,KAAK,EACjD,IAAuB,EAA4C,KAAK,EAExE,IACJ,kBAAC,GAAD;EACE,KAAK;EACL,qBAAqB;EACrB,uBAAsB,MAAgB;AACpC,KAAe,EAAa;;EAE9B,oBAAoB;EACpB,CAAA,EAGE,IACJ,kBAAC,GAAD;EAAO,SAAS;YAAhB,CACG,KACC,kBAAC,GAAD;GACE,cAAc;GACM;GACpB,wBAAwB;GACxB,mBAAmB;GACnB,CAAA,EAEJ,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;GAAkB,YAAY,kBAAC,GAAD,EAAkB,CAAA;aAC9C,kBAAC,GAAD;IAAY,SAAS;cAAa;IAAyB,CAAA;GAC1C,CAAA,EACnB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;GACE,cAAc;GACd,KAAK;GACL,CAAA,EACF,kBAAC,GAAD;GACE,SAAS;GACT,WAAW,kBAAC,GAAD,EAAkB,CAAA;GAC7B,IAAI,EAAE,IAAI,GAAG;GACb,eAAe;AAEb,IAAI,EAAqB,WACvB,EACE,EAAqB,QAAQ,aAAa,CAC3C;;aAGN;GAEQ,CAAA,CACQ,EAAA,CAAA,CACT,EAAA,CAAA,CACN;;AAGV,QACE,kBAAC,GAAD;EACE,UAAU;EACV,OAAO;EACP,UAAU;EACJ;EACN,SACE,kBAAA,GAAA,EAAA,UAAA;GACG,MAAS,EAAqB,cAAc;GAC5C,MAAS,EAAqB,kBAAkB;GAChD,KAAgB,kBAAC,GAAD,EAAa,OAAO,GAAgB,CAAA;GACpD,EAAA,CAAA;EAEL,SACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GACE,SAAS;GACT,UAAU;GACV,eAAe;AACb,OAAS;;aAEZ;GAEQ,CAAA,EACR,MAAS,EAAqB,kBAC7B,kBAAC,GAAD;GACE,UAAU;GACV,SAAS;GACT,eAAe;AACb,MACE,GACA,EAAgB,kBAChB,EACD;;GAEH,SAAS;aACV;GAEQ,CAAA,CAEV,EAAA,CAAA;EAEL,CAAA"}
1
+ {"version":3,"file":"CsvPreviewDialog.js","names":[],"sources":["../../../../src/components/table/CsvPreview/CsvPreviewDialog.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport { ErrorBanner } from '@/components/index'\nimport CsvUploadPreviewContent from '@/components/table/CsvPreview/CsvUploadPreviewContent'\nimport useCsvUploadPreview, {\n CsvUploadPreviewStep,\n} from '@/components/table/CsvPreview/useCsvUploadPreview'\nimport Button from '@mui/material/Button'\nimport {\n ColumnModel,\n CsvTableDescriptor,\n} from '@sage-bionetworks/synapse-client'\nimport { useCallback } from 'react'\n\nexport type CsvPreviewDialogProps = {\n /** Whether the dialog is open */\n open: boolean\n /** Callback when the dialog is closed */\n onClose: () => void\n /** Whether the confirm action is pending */\n confirmIsPending?: boolean\n /** An optional error message to display */\n errorMessage?: string\n /** Callback when the user confirms the column models\n * @param dataFileHandleId - The file handle ID of the uploaded CSV\n * @param columnModels - The confirmed column models\n */\n onConfirm: (\n dataFileHandleId: string,\n columnModels: ColumnModel[],\n csvTableDescriptor: CsvTableDescriptor,\n ) => void\n}\n\nexport default function CsvPreviewDialog(props: CsvPreviewDialogProps) {\n const { open, onClose, onConfirm, confirmIsPending, errorMessage } = props\n\n const csvUploadPreviewWorkflow = useCsvUploadPreview()\n\n const handlePreviewConfirm = useCallback(() => {\n const suggestedColumns =\n csvUploadPreviewWorkflow.csvPreviewData?.suggestedColumns\n if (!suggestedColumns) {\n return\n }\n\n if (csvUploadPreviewWorkflow.uploadedFileHandleId != null) {\n onConfirm(\n csvUploadPreviewWorkflow.uploadedFileHandleId,\n suggestedColumns,\n csvUploadPreviewWorkflow.csvTableDescriptor,\n )\n }\n }, [\n csvUploadPreviewWorkflow.csvPreviewData,\n csvUploadPreviewWorkflow.uploadedFileHandleId,\n csvUploadPreviewWorkflow.csvTableDescriptor,\n onConfirm,\n ])\n\n return (\n <DialogBase\n maxWidth={'lg'}\n title={'Upload CSV'}\n onCancel={onClose}\n open={open}\n content={\n <>\n <CsvUploadPreviewContent workflow={csvUploadPreviewWorkflow} />\n {errorMessage && <ErrorBanner error={errorMessage} />}\n </>\n }\n actions={\n <>\n <Button\n variant={'outlined'}\n disabled={csvUploadPreviewWorkflow.isLoadingPreview}\n onClick={() => {\n onClose()\n }}\n >\n Cancel\n </Button>\n {csvUploadPreviewWorkflow.step ===\n CsvUploadPreviewStep.COLUMN_PREVIEW && (\n <Button\n disabled={csvUploadPreviewWorkflow.isLoadingPreview}\n variant={'contained'}\n onClick={handlePreviewConfirm}\n loading={confirmIsPending}\n >\n Confirm\n </Button>\n )}\n </>\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;AAiCA,SAAwB,EAAiB,GAA8B;CACrE,IAAM,EAAE,SAAM,YAAS,cAAW,qBAAkB,oBAAiB,GAE/D,IAA2B,GAAqB,EAEhD,IAAuB,QAAkB;EAC7C,IAAM,IACJ,EAAyB,gBAAgB;AACtC,OAID,EAAyB,wBAAwB,QACnD,EACE,EAAyB,sBACzB,GACA,EAAyB,mBAC1B;IAEF;EACD,EAAyB;EACzB,EAAyB;EACzB,EAAyB;EACzB;EACD,CAAC;AAEF,QACE,kBAAC,GAAD;EACE,UAAU;EACV,OAAO;EACP,UAAU;EACJ;EACN,SACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD,EAAyB,UAAU,GAA4B,CAAA,EAC9D,KAAgB,kBAAC,GAAD,EAAa,OAAO,GAAgB,CAAA,CACpD,EAAA,CAAA;EAEL,SACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GACE,SAAS;GACT,UAAU,EAAyB;GACnC,eAAe;AACb,OAAS;;aAEZ;GAEQ,CAAA,EACR,EAAyB,SACxB,EAAqB,kBACrB,kBAAC,GAAD;GACE,UAAU,EAAyB;GACnC,SAAS;GACT,SAAS;GACT,SAAS;aACV;GAEQ,CAAA,CAEV,EAAA,CAAA;EAEL,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { CsvTableDescriptor, UploadToTablePreviewResult } from '@sage-bionetworks/synapse-client';
2
+ export type CsvPreviewWithOptionsProps = {
3
+ /** File handle ID of the uploaded CSV, or null if not yet uploaded */
4
+ fileHandleId: string | null;
5
+ /** Current CSV parsing configuration */
6
+ csvTableDescriptor: CsvTableDescriptor;
7
+ /** Called when the user clicks "Refresh Preview" with the form's current values */
8
+ onCsvTableDescriptorChange: (descriptor: CsvTableDescriptor) => void;
9
+ /** Called when the CSV preview data is fetched */
10
+ onCsvPreviewDataChange?: (data: UploadToTablePreviewResult) => void;
11
+ /** Called when the preview load state changes */
12
+ onIsLoadingChange?: (isLoading: boolean) => void;
13
+ };
14
+ /**
15
+ * Displays a CSV preview table with expandable parsing options.
16
+ * For upload/preview flows, prefer useCsvUploadPreview with CsvUploadPreviewContent.
17
+ */
18
+ export default function CsvPreviewWithOptions({ fileHandleId, csvTableDescriptor, onCsvTableDescriptorChange, onCsvPreviewDataChange, onIsLoadingChange, }: CsvPreviewWithOptionsProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=CsvPreviewWithOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvPreviewWithOptions.d.ts","sourceRoot":"","sources":["../../../../src/components/table/CsvPreview/CsvPreviewWithOptions.tsx"],"names":[],"mappings":"AAUA,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAA;AAOzC,MAAM,MAAM,0BAA0B,GAAG;IACvC,sEAAsE;IACtE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,wCAAwC;IACxC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,mFAAmF;IACnF,0BAA0B,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACpE,kDAAkD;IAClD,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,CAAA;IACnE,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;CACjD,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAC5C,YAAY,EACZ,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,iBAAiB,GAClB,EAAE,0BAA0B,2CAwC5B"}
@@ -0,0 +1,41 @@
1
+ import e from "../CsvTableDescriptorForm/CsvTableDescriptorForm.js";
2
+ import t from "./CsvPreview.js";
3
+ import { useRef as n } from "react";
4
+ import { Accordion as r, AccordionDetails as i, AccordionSummary as a, Button as o, Stack as s, Typography as c } from "@mui/material";
5
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
+ import { RefreshTwoTone as d } from "@mui/icons-material";
7
+ import f from "@mui/icons-material/ExpandMore";
8
+ //#region src/components/table/CsvPreview/CsvPreviewWithOptions.tsx
9
+ function p({ fileHandleId: p, csvTableDescriptor: m, onCsvTableDescriptorChange: h, onCsvPreviewDataChange: g, onIsLoadingChange: _ }) {
10
+ let v = n(null);
11
+ return /* @__PURE__ */ u(s, {
12
+ spacing: 2,
13
+ children: [p && /* @__PURE__ */ l(t, {
14
+ fileHandleId: p,
15
+ csvTableDescriptor: m,
16
+ onCsvPreviewDataChange: g,
17
+ onIsLoadingChange: _
18
+ }), /* @__PURE__ */ u(r, { children: [/* @__PURE__ */ l(a, {
19
+ expandIcon: /* @__PURE__ */ l(f, {}),
20
+ children: /* @__PURE__ */ l(c, {
21
+ variant: "headline3",
22
+ children: "Show Options"
23
+ })
24
+ }), /* @__PURE__ */ u(i, { children: [/* @__PURE__ */ l(e, {
25
+ defaultValue: m,
26
+ ref: v
27
+ }), /* @__PURE__ */ l(o, {
28
+ variant: "outlined",
29
+ startIcon: /* @__PURE__ */ l(d, {}),
30
+ sx: { mt: 2 },
31
+ onClick: () => {
32
+ v.current && h(v.current.getFormData());
33
+ },
34
+ children: "Refresh Preview"
35
+ })] })] })]
36
+ });
37
+ }
38
+ //#endregion
39
+ export { p as default };
40
+
41
+ //# sourceMappingURL=CsvPreviewWithOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvPreviewWithOptions.js","names":[],"sources":["../../../../src/components/table/CsvPreview/CsvPreviewWithOptions.tsx"],"sourcesContent":["import { RefreshTwoTone } from '@mui/icons-material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Button,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n CsvTableDescriptor,\n UploadToTablePreviewResult,\n} from '@sage-bionetworks/synapse-client'\nimport CsvTableDescriptorForm, {\n CsvTableDescriptorFormHandle,\n} from '@/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm'\nimport { useRef } from 'react'\nimport CsvPreview from '@/components/table/CsvPreview/CsvPreview'\n\nexport type CsvPreviewWithOptionsProps = {\n /** File handle ID of the uploaded CSV, or null if not yet uploaded */\n fileHandleId: string | null\n /** Current CSV parsing configuration */\n csvTableDescriptor: CsvTableDescriptor\n /** Called when the user clicks \"Refresh Preview\" with the form's current values */\n onCsvTableDescriptorChange: (descriptor: CsvTableDescriptor) => void\n /** Called when the CSV preview data is fetched */\n onCsvPreviewDataChange?: (data: UploadToTablePreviewResult) => void\n /** Called when the preview load state changes */\n onIsLoadingChange?: (isLoading: boolean) => void\n}\n\n/**\n * Displays a CSV preview table with expandable parsing options.\n * For upload/preview flows, prefer useCsvUploadPreview with CsvUploadPreviewContent.\n */\nexport default function CsvPreviewWithOptions({\n fileHandleId,\n csvTableDescriptor,\n onCsvTableDescriptorChange,\n onCsvPreviewDataChange,\n onIsLoadingChange,\n}: CsvPreviewWithOptionsProps) {\n const csvDescriptorFormRef = useRef<CsvTableDescriptorFormHandle | null>(null)\n\n return (\n <Stack spacing={2}>\n {fileHandleId && (\n <CsvPreview\n fileHandleId={fileHandleId}\n csvTableDescriptor={csvTableDescriptor}\n onCsvPreviewDataChange={onCsvPreviewDataChange}\n onIsLoadingChange={onIsLoadingChange}\n />\n )}\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant={'headline3'}>Show Options</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <CsvTableDescriptorForm\n defaultValue={csvTableDescriptor}\n ref={csvDescriptorFormRef}\n />\n <Button\n variant={'outlined'}\n startIcon={<RefreshTwoTone />}\n sx={{ mt: 2 }}\n onClick={() => {\n if (csvDescriptorFormRef.current) {\n onCsvTableDescriptorChange(\n csvDescriptorFormRef.current.getFormData(),\n )\n }\n }}\n >\n Refresh Preview\n </Button>\n </AccordionDetails>\n </Accordion>\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;AAqCA,SAAwB,EAAsB,EAC5C,iBACA,uBACA,+BACA,2BACA,wBAC6B;CAC7B,IAAM,IAAuB,EAA4C,KAAK;AAE9E,QACE,kBAAC,GAAD;EAAO,SAAS;YAAhB,CACG,KACC,kBAAC,GAAD;GACgB;GACM;GACI;GACL;GACnB,CAAA,EAEJ,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;GAAkB,YAAY,kBAAC,GAAD,EAAkB,CAAA;aAC9C,kBAAC,GAAD;IAAY,SAAS;cAAa;IAAyB,CAAA;GAC1C,CAAA,EACnB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;GACE,cAAc;GACd,KAAK;GACL,CAAA,EACF,kBAAC,GAAD;GACE,SAAS;GACT,WAAW,kBAAC,GAAD,EAAkB,CAAA;GAC7B,IAAI,EAAE,IAAI,GAAG;GACb,eAAe;AACb,IAAI,EAAqB,WACvB,EACE,EAAqB,QAAQ,aAAa,CAC3C;;aAGN;GAEQ,CAAA,CACQ,EAAA,CAAA,CACT,EAAA,CAAA,CACN"}
@@ -0,0 +1,12 @@
1
+ import useCsvUploadPreview from './useCsvUploadPreview';
2
+ export type CsvUploadPreviewContentProps = {
3
+ /**
4
+ * Shared upload/preview workflow state and callbacks from useCsvUploadPreview.
5
+ */
6
+ workflow: ReturnType<typeof useCsvUploadPreview>;
7
+ };
8
+ /**
9
+ * Renders the active CSV upload workflow step: file upload first, then preview/options.
10
+ */
11
+ export default function CsvUploadPreviewContent({ workflow, }: CsvUploadPreviewContentProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=CsvUploadPreviewContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvUploadPreviewContent.d.ts","sourceRoot":"","sources":["../../../../src/components/table/CsvPreview/CsvUploadPreviewContent.tsx"],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AAQvD,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA;CACjD,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,EAC9C,QAAQ,GACT,EAAE,4BAA4B,2CAmC9B"}
@@ -0,0 +1,25 @@
1
+ import { BasicFileHandleUpload as e } from "../../file/upload/BasicFileHandleUpload.js";
2
+ import { CsvUploadPreviewStep as t } from "./useCsvUploadPreview.js";
3
+ import n from "./CsvPreviewWithOptions.js";
4
+ import { useRef as r } from "react";
5
+ import { jsx as i } from "react/jsx-runtime";
6
+ //#region src/components/table/CsvPreview/CsvUploadPreviewContent.tsx
7
+ function a({ workflow: a }) {
8
+ let { step: o, uploadedFileHandleId: s, onFileUploaded: c, csvTableDescriptor: l, setCsvTableDescriptor: u, setCsvPreviewData: d, setIsLoadingPreview: f } = a, p = r(null);
9
+ return o === t.UPLOAD_CSV ? /* @__PURE__ */ i(e, {
10
+ ref: p,
11
+ allowMultipleUpload: !1,
12
+ onFileUploadComplete: c,
13
+ disableDragAndDrop: !0
14
+ }) : /* @__PURE__ */ i(n, {
15
+ fileHandleId: s,
16
+ csvTableDescriptor: l,
17
+ onCsvTableDescriptorChange: u,
18
+ onCsvPreviewDataChange: d,
19
+ onIsLoadingChange: f
20
+ });
21
+ }
22
+ //#endregion
23
+ export { a as default };
24
+
25
+ //# sourceMappingURL=CsvUploadPreviewContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CsvUploadPreviewContent.js","names":[],"sources":["../../../../src/components/table/CsvPreview/CsvUploadPreviewContent.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport useCsvUploadPreview from './useCsvUploadPreview'\nimport {\n BasicFileHandleUpload,\n FileUploadHandle,\n} from '@/components/file/upload/BasicFileHandleUpload'\nimport { CsvUploadPreviewStep } from '@/components/table/CsvPreview/useCsvUploadPreview'\nimport CsvPreviewWithOptions from './CsvPreviewWithOptions'\n\nexport type CsvUploadPreviewContentProps = {\n /**\n * Shared upload/preview workflow state and callbacks from useCsvUploadPreview.\n */\n workflow: ReturnType<typeof useCsvUploadPreview>\n}\n\n/**\n * Renders the active CSV upload workflow step: file upload first, then preview/options.\n */\nexport default function CsvUploadPreviewContent({\n workflow,\n}: CsvUploadPreviewContentProps) {\n const {\n step,\n uploadedFileHandleId,\n onFileUploaded,\n csvTableDescriptor,\n setCsvTableDescriptor,\n setCsvPreviewData,\n setIsLoadingPreview,\n } = workflow\n\n const uploadRef = useRef<FileUploadHandle | null>(null)\n\n // Upload step\n if (step === CsvUploadPreviewStep.UPLOAD_CSV) {\n return (\n <BasicFileHandleUpload\n ref={uploadRef}\n allowMultipleUpload={false}\n onFileUploadComplete={onFileUploaded}\n disableDragAndDrop={true}\n />\n )\n }\n\n // Preview step\n return (\n <CsvPreviewWithOptions\n fileHandleId={uploadedFileHandleId}\n csvTableDescriptor={csvTableDescriptor}\n onCsvTableDescriptorChange={setCsvTableDescriptor}\n onCsvPreviewDataChange={setCsvPreviewData}\n onIsLoadingChange={setIsLoadingPreview}\n />\n )\n}\n"],"mappings":";;;;;;AAmBA,SAAwB,EAAwB,EAC9C,eAC+B;CAC/B,IAAM,EACJ,SACA,yBACA,mBACA,uBACA,0BACA,sBACA,2BACE,GAEE,IAAY,EAAgC,KAAK;AAevD,QAZI,MAAS,EAAqB,aAE9B,kBAAC,GAAD;EACE,KAAK;EACL,qBAAqB;EACrB,sBAAsB;EACtB,oBAAoB;EACpB,CAAA,GAMJ,kBAAC,GAAD;EACE,cAAc;EACM;EACpB,4BAA4B;EAC5B,wBAAwB;EACxB,mBAAmB;EACnB,CAAA"}
@@ -0,0 +1,18 @@
1
+ export type UpdateTableWithCsvDialogProps = {
2
+ /** Whether the dialog is open */
3
+ open: boolean;
4
+ /** Callback when the dialog is closed */
5
+ onClose: () => void;
6
+ /** If provided, upload csv rows to existing table */
7
+ tableId: string;
8
+ /** Invoked after all backend operations successfully complete */
9
+ onSuccess?: () => void;
10
+ };
11
+ /**
12
+ * A dialog used to upload CSV data to an existing Synapse Table entity.
13
+ * It handles a single-phase workflow:
14
+ * 1. CSV Upload & Preview: Displays data preview and applies the rows directly
15
+ * to the target table upon confirmation.
16
+ */
17
+ export default function UpdateTableWithCsvDialog(props: UpdateTableWithCsvDialogProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=UpdateTableWithCsvDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateTableWithCsvDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/table/CsvPreview/UpdateTableWithCsvDialog.tsx"],"names":[],"mappings":"AAUA,MAAM,MAAM,6BAA6B,GAAG;IAC1C,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,KAAK,EAAE,6BAA6B,2CA8DrC"}
@@ -0,0 +1,55 @@
1
+ import { displayToast as e } from "../../ToastMessage/ToastMessage.js";
2
+ import { DialogBase as t } from "../../DialogBase.js";
3
+ import n, { CsvUploadPreviewStep as r } from "./useCsvUploadPreview.js";
4
+ import i from "./CsvUploadPreviewContent.js";
5
+ import a from "./useUploadCsvToExistingTable.js";
6
+ import { useCallback as o } from "react";
7
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
8
+ import u from "@mui/material/Button";
9
+ //#region src/components/table/CsvPreview/UpdateTableWithCsvDialog.tsx
10
+ function d(d) {
11
+ let { open: f, onClose: p, tableId: m, onSuccess: h } = d, g = n(), { mutate: _, isPending: v } = a({
12
+ onSuccess() {
13
+ h?.();
14
+ },
15
+ onError(t) {
16
+ e(t.message, "danger");
17
+ }
18
+ }), y = o(() => {
19
+ _({
20
+ tableId: m,
21
+ csvTableDescriptor: g.csvTableDescriptor,
22
+ fileHandleId: g.uploadedFileHandleId
23
+ });
24
+ }, [
25
+ _,
26
+ m,
27
+ g.csvTableDescriptor,
28
+ g.uploadedFileHandleId
29
+ ]);
30
+ return /* @__PURE__ */ c(t, {
31
+ maxWidth: "lg",
32
+ title: "Upload CSV",
33
+ onCancel: p,
34
+ open: f,
35
+ content: /* @__PURE__ */ c(i, { workflow: g }),
36
+ actions: /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(u, {
37
+ variant: "outlined",
38
+ disabled: g.isLoadingPreview,
39
+ onClick: () => {
40
+ p();
41
+ },
42
+ children: "Cancel"
43
+ }), g.step === r.COLUMN_PREVIEW && /* @__PURE__ */ c(u, {
44
+ disabled: g.isLoadingPreview,
45
+ variant: "contained",
46
+ onClick: y,
47
+ loading: v,
48
+ children: "Confirm"
49
+ })] })
50
+ });
51
+ }
52
+ //#endregion
53
+ export { d as default };
54
+
55
+ //# sourceMappingURL=UpdateTableWithCsvDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateTableWithCsvDialog.js","names":[],"sources":["../../../../src/components/table/CsvPreview/UpdateTableWithCsvDialog.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport useCsvUploadPreview, {\n CsvUploadPreviewStep,\n} from '@/components/table/CsvPreview/useCsvUploadPreview'\nimport Button from '@mui/material/Button'\nimport { useCallback } from 'react'\nimport useUploadCsvToExistingTable from './useUploadCsvToExistingTable'\nimport CsvUploadPreviewContent from './CsvUploadPreviewContent'\n\nexport type UpdateTableWithCsvDialogProps = {\n /** Whether the dialog is open */\n open: boolean\n /** Callback when the dialog is closed */\n onClose: () => void\n /** If provided, upload csv rows to existing table */\n tableId: string\n /** Invoked after all backend operations successfully complete */\n onSuccess?: () => void\n}\n\n/**\n * A dialog used to upload CSV data to an existing Synapse Table entity.\n * It handles a single-phase workflow:\n * 1. CSV Upload & Preview: Displays data preview and applies the rows directly\n * to the target table upon confirmation.\n */\nexport default function UpdateTableWithCsvDialog(\n props: UpdateTableWithCsvDialogProps,\n) {\n const { open, onClose, tableId, onSuccess } = props\n const csvUploadPreviewWorkflow = useCsvUploadPreview()\n\n const { mutate: uploadCsvToExistingTable, isPending: isUploading } =\n useUploadCsvToExistingTable({\n onSuccess() {\n onSuccess?.()\n },\n onError(error) {\n displayToast(error.message, 'danger')\n },\n })\n\n const handleFinish = useCallback(() => {\n // table already exists; upload csv rows directly to table\n uploadCsvToExistingTable({\n tableId,\n csvTableDescriptor: csvUploadPreviewWorkflow.csvTableDescriptor,\n fileHandleId: csvUploadPreviewWorkflow.uploadedFileHandleId!,\n })\n }, [\n uploadCsvToExistingTable,\n tableId,\n csvUploadPreviewWorkflow.csvTableDescriptor,\n csvUploadPreviewWorkflow.uploadedFileHandleId,\n ])\n\n return (\n <DialogBase\n maxWidth={'lg'}\n title={'Upload CSV'}\n onCancel={onClose}\n open={open}\n content={<CsvUploadPreviewContent workflow={csvUploadPreviewWorkflow} />}\n actions={\n <>\n <Button\n variant={'outlined'}\n disabled={csvUploadPreviewWorkflow.isLoadingPreview}\n onClick={() => {\n onClose()\n }}\n >\n Cancel\n </Button>\n {csvUploadPreviewWorkflow.step ===\n CsvUploadPreviewStep.COLUMN_PREVIEW && (\n <Button\n disabled={csvUploadPreviewWorkflow.isLoadingPreview}\n variant={'contained'}\n onClick={handleFinish}\n loading={isUploading}\n >\n Confirm\n </Button>\n )}\n </>\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;AA2BA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,SAAM,YAAS,YAAS,iBAAc,GACxC,IAA2B,GAAqB,EAEhD,EAAE,QAAQ,GAA0B,WAAW,MACnD,EAA4B;EAC1B,YAAY;AACV,QAAa;;EAEf,QAAQ,GAAO;AACb,KAAa,EAAM,SAAS,SAAS;;EAExC,CAAC,EAEE,IAAe,QAAkB;AAErC,IAAyB;GACvB;GACA,oBAAoB,EAAyB;GAC7C,cAAc,EAAyB;GACxC,CAAC;IACD;EACD;EACA;EACA,EAAyB;EACzB,EAAyB;EAC1B,CAAC;AAEF,QACE,kBAAC,GAAD;EACE,UAAU;EACV,OAAO;EACP,UAAU;EACJ;EACN,SAAS,kBAAC,GAAD,EAAyB,UAAU,GAA4B,CAAA;EACxE,SACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GACE,SAAS;GACT,UAAU,EAAyB;GACnC,eAAe;AACb,OAAS;;aAEZ;GAEQ,CAAA,EACR,EAAyB,SACxB,EAAqB,kBACrB,kBAAC,GAAD;GACE,UAAU,EAAyB;GACnC,SAAS;GACT,SAAS;GACT,SAAS;aACV;GAEQ,CAAA,CAEV,EAAA,CAAA;EAEL,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { CsvTableDescriptor, TableUpdateTransactionResponse } from '@sage-bionetworks/synapse-client';
2
+ import { UseMutationOptions } from '@tanstack/react-query';
3
+ import { ColumnModel as SynapseTypesColumnModel } from '@sage-bionetworks/synapse-types';
4
+ import { SetOptional } from 'type-fest';
5
+ import { SynapseClientError } from '@/utils/index';
6
+ type CreateTableFromCsvProps = {
7
+ parentId: string;
8
+ tableName: string;
9
+ columnModels: SetOptional<SynapseTypesColumnModel, 'id'>[];
10
+ csvTableDescriptor: CsvTableDescriptor;
11
+ fileHandleId: string;
12
+ };
13
+ /**
14
+ * Mutation hook that creates a new Synapse Table from a CSV.
15
+ * Creates ColumnModels, creates the TableEntity, then uploads the CSV rows.
16
+ */
17
+ export default function useCreateTableFromCsv(options?: Omit<UseMutationOptions<TableUpdateTransactionResponse, SynapseClientError, CreateTableFromCsvProps>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<TableUpdateTransactionResponse, SynapseClientError, CreateTableFromCsvProps, unknown>;
18
+ export {};
19
+ //# sourceMappingURL=useCreateTableFromCsv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateTableFromCsv.d.ts","sourceRoot":"","sources":["../../../../src/components/table/CsvPreview/useCreateTableFromCsv.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAElB,8BAA8B,EAC/B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAe,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAEL,WAAW,IAAI,uBAAuB,EAEvC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAKlD,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,WAAW,CAAC,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAA;IAC1D,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAC3C,OAAO,CAAC,EAAE,IAAI,CACZ,kBAAkB,CAChB,8BAA8B,EAC9B,kBAAkB,EAClB,uBAAuB,CACxB,EACD,YAAY,CACb,2IAkDF"}
@@ -0,0 +1,35 @@
1
+ import { useCreateEntity as e } from "../../../synapse-queries/entity/useEntity.js";
2
+ import "../../../synapse-queries/index.js";
3
+ import { useCreateColumnModels as t } from "../../../synapse-queries/table/useColumnModel.js";
4
+ import { useTableUpdateTransaction as n } from "../../../synapse-queries/table/useTableUpdateTransaction.js";
5
+ import { useMutation as r } from "@tanstack/react-query";
6
+ //#region src/components/table/CsvPreview/useCreateTableFromCsv.ts
7
+ function i(i) {
8
+ let { mutateAsync: a } = t(), { mutateAsync: o } = e(), { mutateAsync: s } = n();
9
+ return r({
10
+ ...i,
11
+ mutationFn: async ({ parentId: e, tableName: t, columnModels: n, csvTableDescriptor: r, fileHandleId: i }) => {
12
+ let c = await a(n), l = {
13
+ name: t,
14
+ parentId: e,
15
+ concreteType: "org.sagebionetworks.repo.model.table.TableEntity"
16
+ };
17
+ l.columnIds = c.map((e) => e.id);
18
+ let u = await o(l);
19
+ return s({
20
+ concreteType: "org.sagebionetworks.repo.model.table.TableUpdateTransactionRequest",
21
+ entityId: u.id,
22
+ changes: [{
23
+ tableId: u.id,
24
+ uploadFileHandleId: i,
25
+ csvTableDescriptor: r,
26
+ concreteType: "org.sagebionetworks.repo.model.table.UploadToTableRequest"
27
+ }]
28
+ });
29
+ }
30
+ });
31
+ }
32
+ //#endregion
33
+ export { i as default };
34
+
35
+ //# sourceMappingURL=useCreateTableFromCsv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateTableFromCsv.js","names":[],"sources":["../../../../src/components/table/CsvPreview/useCreateTableFromCsv.ts"],"sourcesContent":["import {\n CsvTableDescriptor,\n TableUpdateTransactionRequest,\n TableUpdateTransactionResponse,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\nimport {\n Entity,\n ColumnModel as SynapseTypesColumnModel,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport { SetOptional } from 'type-fest'\nimport { SynapseClientError } from '@/utils/index'\nimport { useCreateEntity } from '@/synapse-queries'\nimport { useCreateColumnModels } from '@/synapse-queries/table/useColumnModel'\nimport { useTableUpdateTransaction } from '@/synapse-queries/table/useTableUpdateTransaction'\n\ntype CreateTableFromCsvProps = {\n parentId: string\n tableName: string\n columnModels: SetOptional<SynapseTypesColumnModel, 'id'>[]\n csvTableDescriptor: CsvTableDescriptor\n fileHandleId: string\n}\n\n/**\n * Mutation hook that creates a new Synapse Table from a CSV.\n * Creates ColumnModels, creates the TableEntity, then uploads the CSV rows.\n */\nexport default function useCreateTableFromCsv(\n options?: Omit<\n UseMutationOptions<\n TableUpdateTransactionResponse,\n SynapseClientError,\n CreateTableFromCsvProps\n >,\n 'mutationFn'\n >,\n) {\n const { mutateAsync: createColumnModels } = useCreateColumnModels()\n const { mutateAsync: createEntity } = useCreateEntity()\n const { mutateAsync: updateTableInTransaction } = useTableUpdateTransaction()\n\n return useMutation<\n TableUpdateTransactionResponse,\n SynapseClientError,\n CreateTableFromCsvProps\n >({\n ...options,\n mutationFn: async ({\n parentId,\n tableName,\n columnModels,\n csvTableDescriptor,\n fileHandleId,\n }) => {\n const createdColumnModelResults = await createColumnModels(columnModels)\n\n const entityToCreate: Entity = {\n name: tableName,\n parentId: parentId,\n concreteType: 'org.sagebionetworks.repo.model.table.TableEntity',\n }\n ;(entityToCreate as Table)['columnIds'] = createdColumnModelResults.map(\n cm => cm.id,\n )\n\n const newEntity = await createEntity(entityToCreate)\n\n const tableUpdateRequest: TableUpdateTransactionRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.TableUpdateTransactionRequest',\n entityId: newEntity.id!,\n changes: [\n {\n tableId: newEntity.id!,\n uploadFileHandleId: fileHandleId,\n csvTableDescriptor,\n concreteType:\n 'org.sagebionetworks.repo.model.table.UploadToTableRequest',\n },\n ],\n }\n\n return updateTableInTransaction(tableUpdateRequest)\n },\n })\n}\n"],"mappings":";;;;;;AA6BA,SAAwB,EACtB,GAQA;CACA,IAAM,EAAE,aAAa,MAAuB,GAAuB,EAC7D,EAAE,aAAa,MAAiB,GAAiB,EACjD,EAAE,aAAa,MAA6B,GAA2B;AAE7E,QAAO,EAIL;EACA,GAAG;EACH,YAAY,OAAO,EACjB,aACA,cACA,iBACA,uBACA,sBACI;GACJ,IAAM,IAA4B,MAAM,EAAmB,EAAa,EAElE,IAAyB;IAC7B,MAAM;IACI;IACV,cAAc;IACf;AACC,KAAyB,YAAe,EAA0B,KAClE,MAAM,EAAG,GACV;GAED,IAAM,IAAY,MAAM,EAAa,EAAe;AAiBpD,UAAO,EAAyB;IAd9B,cACE;IACF,UAAU,EAAU;IACpB,SAAS,CACP;KACE,SAAS,EAAU;KACnB,oBAAoB;KACpB;KACA,cACE;KACH,CACF;IAG6B,CAAmB;;EAEtD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { CsvTableDescriptor, UploadToTablePreviewResult } from '@sage-bionetworks/synapse-client';
2
+ export declare enum CsvUploadPreviewStep {
3
+ UPLOAD_CSV = 0,
4
+ COLUMN_PREVIEW = 1
5
+ }
6
+ /**
7
+ * Shared state and logic for CSV upload/preview dialogs.
8
+ * Manages the common state needed for uploading a CSV file and previewing its contents.
9
+ */
10
+ export default function useCsvUploadPreview(): {
11
+ step: CsvUploadPreviewStep;
12
+ setStep: import("react").Dispatch<import("react").SetStateAction<CsvUploadPreviewStep>>;
13
+ csvTableDescriptor: CsvTableDescriptor;
14
+ setCsvTableDescriptor: import("react").Dispatch<import("react").SetStateAction<CsvTableDescriptor>>;
15
+ uploadedFileHandleId: string | null;
16
+ csvPreviewData: UploadToTablePreviewResult | null;
17
+ setCsvPreviewData: import("react").Dispatch<import("react").SetStateAction<UploadToTablePreviewResult | null>>;
18
+ isLoadingPreview: boolean;
19
+ setIsLoadingPreview: import("react").Dispatch<import("react").SetStateAction<boolean>>;
20
+ onFileUploaded: (fileHandleId: string) => void;
21
+ };
22
+ //# sourceMappingURL=useCsvUploadPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCsvUploadPreview.d.ts","sourceRoot":"","sources":["../../../../src/components/table/CsvPreview/useCsvUploadPreview.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,kCAAkC,CAAA;AAUzC,oBAAY,oBAAoB;IAC9B,UAAU,IAAI;IACd,cAAc,IAAI;CACnB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB;;;;;;;;;;mCAWS,MAAM;EAiBzD"}
@@ -0,0 +1,32 @@
1
+ import { useCallback as e, useState as t } from "react";
2
+ //#region src/components/table/CsvPreview/useCsvUploadPreview.ts
3
+ var n = {
4
+ separator: ",",
5
+ quoteCharacter: "\"",
6
+ escapeCharacter: "\\",
7
+ lineEnd: "\n",
8
+ isFirstLineHeader: !0
9
+ }, r = /* @__PURE__ */ function(e) {
10
+ return e[e.UPLOAD_CSV = 0] = "UPLOAD_CSV", e[e.COLUMN_PREVIEW = 1] = "COLUMN_PREVIEW", e;
11
+ }({});
12
+ function i() {
13
+ let [i, a] = t(r.UPLOAD_CSV), [o, s] = t(n), [c, l] = t(null), [u, d] = t(null), [f, p] = t(!1);
14
+ return {
15
+ step: i,
16
+ setStep: a,
17
+ csvTableDescriptor: o,
18
+ setCsvTableDescriptor: s,
19
+ uploadedFileHandleId: c,
20
+ csvPreviewData: u,
21
+ setCsvPreviewData: d,
22
+ isLoadingPreview: f,
23
+ setIsLoadingPreview: p,
24
+ onFileUploaded: e((e) => {
25
+ l(e), a(r.COLUMN_PREVIEW);
26
+ }, [])
27
+ };
28
+ }
29
+ //#endregion
30
+ export { r as CsvUploadPreviewStep, i as default };
31
+
32
+ //# sourceMappingURL=useCsvUploadPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCsvUploadPreview.js","names":[],"sources":["../../../../src/components/table/CsvPreview/useCsvUploadPreview.ts"],"sourcesContent":["import { useCallback, useState } from 'react'\nimport {\n CsvTableDescriptor,\n UploadToTablePreviewResult,\n} from '@sage-bionetworks/synapse-client'\n\nconst DEFAULT_CSV_TABLE_DESCRIPTOR: CsvTableDescriptor = {\n separator: ',',\n quoteCharacter: '\"',\n escapeCharacter: '\\\\',\n lineEnd: '\\n',\n isFirstLineHeader: true,\n}\n\nexport enum CsvUploadPreviewStep {\n UPLOAD_CSV = 0,\n COLUMN_PREVIEW = 1,\n}\n\n/**\n * Shared state and logic for CSV upload/preview dialogs.\n * Manages the common state needed for uploading a CSV file and previewing its contents.\n */\nexport default function useCsvUploadPreview() {\n const [step, setStep] = useState(CsvUploadPreviewStep.UPLOAD_CSV)\n const [csvTableDescriptor, setCsvTableDescriptor] =\n useState<CsvTableDescriptor>(DEFAULT_CSV_TABLE_DESCRIPTOR)\n const [uploadedFileHandleId, setUploadedFileHandleId] = useState<\n string | null\n >(null)\n const [csvPreviewData, setCsvPreviewData] =\n useState<UploadToTablePreviewResult | null>(null)\n const [isLoadingPreview, setIsLoadingPreview] = useState(false)\n\n const onFileUploaded = useCallback((fileHandleId: string) => {\n setUploadedFileHandleId(fileHandleId)\n setStep(CsvUploadPreviewStep.COLUMN_PREVIEW)\n }, [])\n\n return {\n step,\n setStep,\n csvTableDescriptor,\n setCsvTableDescriptor,\n uploadedFileHandleId,\n csvPreviewData,\n setCsvPreviewData,\n isLoadingPreview,\n setIsLoadingPreview,\n onFileUploaded,\n }\n}\n"],"mappings":";;AAMA,IAAM,IAAmD;CACvD,WAAW;CACX,gBAAgB;CAChB,iBAAiB;CACjB,SAAS;CACT,mBAAmB;CACpB,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,EAAA,aAAa,KAAA,cACb,EAAA,EAAA,iBAAiB,KAAA;KAClB;AAMD,SAAwB,IAAsB;CAC5C,IAAM,CAAC,GAAM,KAAW,EAAS,EAAqB,WAAW,EAC3D,CAAC,GAAoB,KACzB,EAA6B,EAA6B,EACtD,CAAC,GAAsB,KAA2B,EAEtD,KAAK,EACD,CAAC,GAAgB,KACrB,EAA4C,KAAK,EAC7C,CAAC,GAAkB,KAAuB,EAAS,GAAM;AAO/D,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,gBAfqB,GAAa,MAAyB;AAE3D,GADA,EAAwB,EAAa,EACrC,EAAQ,EAAqB,eAAe;KAC3C,EAAE,CAYH;EACD"}
@@ -0,0 +1,14 @@
1
+ import { CsvTableDescriptor, TableUpdateTransactionResponse } from '@sage-bionetworks/synapse-client';
2
+ import { UseMutationOptions } from '@tanstack/react-query';
3
+ import { SynapseClientError } from '@/utils/index';
4
+ type UploadCsvToExistingTableProps = {
5
+ tableId: string;
6
+ csvTableDescriptor: CsvTableDescriptor;
7
+ fileHandleId: string;
8
+ };
9
+ /**
10
+ * Mutation hook that uploads CSV rows to an existing Synapse Table.
11
+ */
12
+ export default function useUploadCsvToExistingTable(options?: Omit<UseMutationOptions<TableUpdateTransactionResponse, SynapseClientError, UploadCsvToExistingTableProps>, 'mutationFn'>): import("@tanstack/react-query").UseMutationResult<TableUpdateTransactionResponse, SynapseClientError, UploadCsvToExistingTableProps, unknown>;
13
+ export {};
14
+ //# sourceMappingURL=useUploadCsvToExistingTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadCsvToExistingTable.d.ts","sourceRoot":"","sources":["../../../../src/components/table/CsvPreview/useUploadCsvToExistingTable.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAElB,8BAA8B,EAC/B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAe,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGlD,KAAK,6BAA6B,GAAG;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,2BAA2B,CACjD,OAAO,CAAC,EAAE,IAAI,CACZ,kBAAkB,CAChB,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,CAC9B,EACD,YAAY,CACb,iJA6BF"}
@@ -0,0 +1,23 @@
1
+ import { useTableUpdateTransaction as e } from "../../../synapse-queries/table/useTableUpdateTransaction.js";
2
+ import { useMutation as t } from "@tanstack/react-query";
3
+ //#region src/components/table/CsvPreview/useUploadCsvToExistingTable.ts
4
+ function n(n) {
5
+ let { mutateAsync: r } = e();
6
+ return t({
7
+ ...n,
8
+ mutationFn: async ({ tableId: e, csvTableDescriptor: t, fileHandleId: n }) => r({
9
+ concreteType: "org.sagebionetworks.repo.model.table.TableUpdateTransactionRequest",
10
+ entityId: e,
11
+ changes: [{
12
+ tableId: e,
13
+ uploadFileHandleId: n,
14
+ csvTableDescriptor: t,
15
+ concreteType: "org.sagebionetworks.repo.model.table.UploadToTableRequest"
16
+ }]
17
+ })
18
+ });
19
+ }
20
+ //#endregion
21
+ export { n as default };
22
+
23
+ //# sourceMappingURL=useUploadCsvToExistingTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploadCsvToExistingTable.js","names":[],"sources":["../../../../src/components/table/CsvPreview/useUploadCsvToExistingTable.ts"],"sourcesContent":["import {\n CsvTableDescriptor,\n TableUpdateTransactionRequest,\n TableUpdateTransactionResponse,\n} from '@sage-bionetworks/synapse-client'\nimport { useMutation, UseMutationOptions } from '@tanstack/react-query'\nimport { SynapseClientError } from '@/utils/index'\nimport { useTableUpdateTransaction } from '@/synapse-queries/table/useTableUpdateTransaction'\n\ntype UploadCsvToExistingTableProps = {\n tableId: string\n csvTableDescriptor: CsvTableDescriptor\n fileHandleId: string\n}\n\n/**\n * Mutation hook that uploads CSV rows to an existing Synapse Table.\n */\nexport default function useUploadCsvToExistingTable(\n options?: Omit<\n UseMutationOptions<\n TableUpdateTransactionResponse,\n SynapseClientError,\n UploadCsvToExistingTableProps\n >,\n 'mutationFn'\n >,\n) {\n const { mutateAsync: updateTableInTransaction } = useTableUpdateTransaction()\n\n return useMutation<\n TableUpdateTransactionResponse,\n SynapseClientError,\n UploadCsvToExistingTableProps\n >({\n ...options,\n mutationFn: async ({ tableId, csvTableDescriptor, fileHandleId }) => {\n const tableUpdateRequest: TableUpdateTransactionRequest = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.TableUpdateTransactionRequest',\n entityId: tableId,\n changes: [\n {\n tableId: tableId,\n uploadFileHandleId: fileHandleId,\n csvTableDescriptor,\n concreteType:\n 'org.sagebionetworks.repo.model.table.UploadToTableRequest',\n },\n ],\n }\n\n return updateTableInTransaction(tableUpdateRequest)\n },\n })\n}\n"],"mappings":";;;AAkBA,SAAwB,EACtB,GAQA;CACA,IAAM,EAAE,aAAa,MAA6B,GAA2B;AAE7E,QAAO,EAIL;EACA,GAAG;EACH,YAAY,OAAO,EAAE,YAAS,uBAAoB,sBAgBzC,EAAyB;GAd9B,cACE;GACF,UAAU;GACV,SAAS,CACP;IACW;IACT,oBAAoB;IACpB;IACA,cACE;IACH,CACF;GAG6B,CAAmB;EAEtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/utils/ConditionalWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,SAAS,EACV,MAAM,OAAO,CAAA;AAEd,KAAK,uBAAuB,CAC1B,QAAQ,SAAS,aAAa,CAAC,iBAAiB,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC,IAClF;IACF,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,QAAQ,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAA;IACzD,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAQxE"}
1
+ {"version":3,"file":"ConditionalWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/utils/ConditionalWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,SAAS,EACV,MAAM,OAAO,CAAA;AAEd,KAAK,uBAAuB,CAC1B,QAAQ,SAAS,aAAa,CAAC,iBAAiB,CAAC,GAC/C,aAAa,CAAC,iBAAiB,CAAC,IAChC;IACF,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,QAAQ,CAAA;IACjB,YAAY,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAA;IACzD,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAQxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalWrapper.js","names":[],"sources":["../../../src/components/utils/ConditionalWrapper.tsx"],"sourcesContent":["import {\n ComponentProps,\n ComponentType,\n PropsWithChildren,\n ReactNode,\n} from 'react'\n\ntype ConditionalWrapperProps<\n TWrapper extends ComponentType<PropsWithChildren> = ComponentType<PropsWithChildren>,\n> = {\n condition: boolean\n wrapper: TWrapper\n wrapperProps?: Omit<ComponentProps<TWrapper>, 'children'>\n children: ReactNode\n}\n\nexport default function ConditionalWrapper(props: ConditionalWrapperProps) {\n const { condition, wrapper: Wrapper, wrapperProps, children } = props\n\n return condition ? (\n <Wrapper {...wrapperProps}>{children}</Wrapper>\n ) : (\n <>{children}</>\n )\n}\n"],"mappings":";;AAgBA,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EAAE,cAAW,SAAS,GAAS,iBAAc,gBAAa;AAEhE,QAAO,IACL,kBAAC,GAAD;EAAS,GAAI;EAAe;EAAmB,CAAA,GAE/C,kBAAA,GAAA,EAAG,aAAY,CAAA"}
1
+ {"version":3,"file":"ConditionalWrapper.js","names":[],"sources":["../../../src/components/utils/ConditionalWrapper.tsx"],"sourcesContent":["import {\n ComponentProps,\n ComponentType,\n PropsWithChildren,\n ReactNode,\n} from 'react'\n\ntype ConditionalWrapperProps<\n TWrapper extends ComponentType<PropsWithChildren> =\n ComponentType<PropsWithChildren>,\n> = {\n condition: boolean\n wrapper: TWrapper\n wrapperProps?: Omit<ComponentProps<TWrapper>, 'children'>\n children: ReactNode\n}\n\nexport default function ConditionalWrapper(props: ConditionalWrapperProps) {\n const { condition, wrapper: Wrapper, wrapperProps, children } = props\n\n return condition ? (\n <Wrapper {...wrapperProps}>{children}</Wrapper>\n ) : (\n <>{children}</>\n )\n}\n"],"mappings":";;AAiBA,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EAAE,cAAW,SAAS,GAAS,iBAAc,gBAAa;AAEhE,QAAO,IACL,kBAAC,GAAD;EAAS,GAAI;EAAe;EAAmB,CAAA,GAE/C,kBAAA,GAAA,EAAG,aAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementWithTooltip.js","names":[],"sources":["../../../src/components/widgets/ElementWithTooltip.tsx"],"sourcesContent":["import React from 'react'\nimport { Menu, Tooltip } from '@mui/material'\nimport {\n ComponentElement,\n CSSProperties,\n MouseEvent,\n PropsWithChildren,\n ReactNode,\n useState,\n} from 'react'\nimport IconSvg, { IconSvgProps } from '../IconSvg/IconSvg'\nimport { Icon } from '../row_renderers/utils'\nimport { TOOLTIP_DELAY_SHOW } from '../SynapseTable/SynapseTableConstants'\n\ntype CustomImageProps = {\n svgImg: ComponentElement<any, any>\n altText: string\n}\n\nexport type TooltipVisualProps = {\n delayShow: number\n place: 'top' | 'right' | 'bottom' | 'left'\n type: 'dark' | 'success' | 'warning' | 'error' | 'info' | 'light'\n effect: 'float' | 'solid'\n border?: boolean\n}\n\nconst DEFAULT_TOOLTIP_VISUAL_PROPS: Partial<TooltipVisualProps> = {\n place: 'top',\n}\n\n/*****************************************\n * The control needs to either have a child element or needs to have an image supplied\n * If the child element is supplied the control renders the child applying additional properties\n * If the image is supplied the control renders a clickable image\n * If there are no children and callback Fn is not supplied it is assumed to be a a dropdown trigger\n */\n\ntype ElementWithTooltipProps = PropsWithChildren<{\n image?: IconSvgProps | CustomImageProps\n imageColor?: string\n tooltipText: string\n callbackFn?: () => void\n className?: string\n tooltipVisualProps?: Partial<TooltipVisualProps>\n darkTheme?: boolean\n size?: string\n icon?: ReactNode\n /** The items to show in the menu -- NOTE: this cannot be a Fragment!\n * @see https://stackoverflow.com/questions/75083605/mui-the-menu-component-doesnt-accept-a-fragment-as-a-child-consider-providing\n */\n menuItems?: React.ReactNode\n}>\n\nfunction getTooltipTriggerContents(\n image: IconSvgProps | CustomImageProps,\n imageColor: string | undefined,\n size: CSSProperties['width'] | undefined,\n) {\n if ('svgImg' in image) {\n return image.svgImg\n } else {\n return <IconSvg {...image} sx={{ color: imageColor, width: size }} />\n }\n}\n\nexport const ElementWithTooltip = ({\n image,\n callbackFn,\n tooltipText,\n className = '',\n imageColor,\n tooltipVisualProps = DEFAULT_TOOLTIP_VISUAL_PROPS,\n children,\n darkTheme,\n size,\n icon,\n menuItems,\n}: ElementWithTooltipProps): React.ReactNode => {\n const { place } = tooltipVisualProps\n const iconComponent = icon ? (\n typeof icon === 'string' ? (\n <Icon type={icon}></Icon>\n ) : (\n icon\n )\n ) : undefined\n const tooltipTriggerContents = iconComponent\n ? iconComponent\n : image\n ? getTooltipTriggerContents(image, imageColor, size)\n : children || <></>\n\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleClose = () => {\n setAnchorEl(null)\n }\n //if there is no callbackFn - assume it's a toggle\n\n let tooltipTrigger: ReactNode\n if (!children) {\n tooltipTrigger = (\n <button\n tabIndex={0}\n className={`ElementWithTooltip SRC-hand-cursor SRC-grey-background-hover ${className} ${\n darkTheme ? 'dark-theme' : ''\n } `}\n onClick={e => {\n if (callbackFn) {\n callbackFn()\n } else {\n // open dropdown menu\n handleClick(e)\n }\n }}\n aria-label={tooltipText}\n >\n {tooltipTriggerContents}\n </button>\n )\n } else {\n tooltipTrigger = <div className=\"SRC-hand-cursor\">{children}</div>\n }\n\n return (\n <>\n <Tooltip\n title={tooltipText}\n enterNextDelay={TOOLTIP_DELAY_SHOW}\n placement={place}\n data-testid=\"ElementTooltip\"\n >\n {tooltipTrigger}\n </Tooltip>\n {menuItems && (\n <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>\n {menuItems}\n </Menu>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;AA2BA,IAAM,IAA4D,EAChE,OAAO,OACR;AAyBD,SAAS,EACP,GACA,GACA,GACA;AAIE,QAHE,YAAY,IACP,EAAM,SAEN,kBAAC,GAAD;EAAS,GAAI;EAAO,IAAI;GAAE,OAAO;GAAY,OAAO;GAAM;EAAI,CAAA;;AAIzE,IAAa,KAAsB,EACjC,UACA,eACA,gBACA,eAAY,IACZ,eACA,wBAAqB,GACrB,aACA,cACA,SACA,SACA,mBAC8C;CAC9C,IAAM,EAAE,aAAU,GAQZ,KAPgB,IACpB,OAAO,KAAS,WACd,kBAAC,GAAD,EAAM,MAAM,GAAa,CAAA,GAEzB,IAEA,KAAA,OAGA,IACA,EAA0B,GAAO,GAAY,EAAK,GAClD,KAAY,kBAAA,GAAA,EAAK,CAAA,GAEf,CAAC,GAAU,KAAe,EAA6B,KAAK,EAC5D,IAAO,EAAQ,GACf,KAAe,MAAyC;AAC5D,IAAY,EAAM,cAAc;IAE5B,UAAoB;AACxB,IAAY,KAAK;IAIf;AAyBJ,QAxBA,AACE,IADG,IAqBc,kBAAC,OAAD;EAAK,WAAU;EAAmB;EAAe,CAAA,GAnBhE,kBAAC,UAAD;EACE,UAAU;EACV,WAAW,gEAAgE,EAAU,GACnF,IAAY,eAAe,GAC5B;EACD,UAAS,MAAK;AACZ,GAAI,IACF,GAAY,GAGZ,EAAY,EAAE;;EAGlB,cAAY;YAEX;EACM,CAAA,EAOX,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO;EACP,gBAAA;EACA,WAAW;EACX,eAAY;YAEX;EACO,CAAA,EACT,KACC,kBAAC,GAAD;EAAgB;EAAgB;EAAM,SAAS;YAC5C;EACI,CAAA,CAER,EAAA,CAAA"}
1
+ {"version":3,"file":"ElementWithTooltip.js","names":[],"sources":["../../../src/components/widgets/ElementWithTooltip.tsx"],"sourcesContent":["import React from 'react'\nimport { Menu, Tooltip } from '@mui/material'\nimport {\n ComponentElement,\n CSSProperties,\n MouseEvent,\n PropsWithChildren,\n ReactNode,\n useState,\n} from 'react'\nimport IconSvg, { IconSvgProps } from '../IconSvg/IconSvg'\nimport { Icon } from '../row_renderers/utils'\nimport { TOOLTIP_DELAY_SHOW } from '../SynapseTable/SynapseTableConstants'\n\ntype CustomImageProps = {\n svgImg: ComponentElement<any, any>\n altText: string\n}\n\nexport type TooltipVisualProps = {\n delayShow: number\n place: 'top' | 'right' | 'bottom' | 'left'\n type: 'dark' | 'success' | 'warning' | 'error' | 'info' | 'light'\n effect: 'float' | 'solid'\n border?: boolean\n}\n\nconst DEFAULT_TOOLTIP_VISUAL_PROPS: Partial<TooltipVisualProps> = {\n place: 'top',\n}\n\n/*****************************************\n * The control needs to either have a child element or needs to have an image supplied\n * If the child element is supplied the control renders the child applying additional properties\n * If the image is supplied the control renders a clickable image\n * If there are no children and callback Fn is not supplied it is assumed to be a a dropdown trigger\n */\n\ntype ElementWithTooltipProps = PropsWithChildren<{\n image?: IconSvgProps | CustomImageProps\n imageColor?: string\n tooltipText: string\n callbackFn?: () => void\n className?: string\n tooltipVisualProps?: Partial<TooltipVisualProps>\n darkTheme?: boolean\n size?: string\n icon?: ReactNode\n /** The items to show in the menu -- NOTE: this cannot be a Fragment!\n * @see https://stackoverflow.com/questions/75083605/mui-the-menu-component-doesnt-accept-a-fragment-as-a-child-consider-providing\n */\n menuItems?: React.ReactNode\n}>\n\nfunction getTooltipTriggerContents(\n image: IconSvgProps | CustomImageProps,\n imageColor: string | undefined,\n size: CSSProperties['width'] | undefined,\n) {\n if ('svgImg' in image) {\n return image.svgImg\n } else {\n return <IconSvg {...image} sx={{ color: imageColor, width: size }} />\n }\n}\n\nexport const ElementWithTooltip = ({\n image,\n callbackFn,\n tooltipText,\n className = '',\n imageColor,\n tooltipVisualProps = DEFAULT_TOOLTIP_VISUAL_PROPS,\n children,\n darkTheme,\n size,\n icon,\n menuItems,\n}: ElementWithTooltipProps): React.ReactNode => {\n const { place } = tooltipVisualProps\n const iconComponent = icon ? (\n typeof icon === 'string' ? (\n <Icon type={icon}></Icon>\n ) : (\n icon\n )\n ) : undefined\n const tooltipTriggerContents = iconComponent\n ? iconComponent\n : image\n ? getTooltipTriggerContents(image, imageColor, size)\n : children || <></>\n\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleClose = () => {\n setAnchorEl(null)\n }\n //if there is no callbackFn - assume it's a toggle\n\n let tooltipTrigger: ReactNode\n if (!children) {\n tooltipTrigger = (\n <button\n tabIndex={0}\n className={`ElementWithTooltip SRC-hand-cursor SRC-grey-background-hover ${className} ${\n darkTheme ? 'dark-theme' : ''\n } `}\n onClick={e => {\n if (callbackFn) {\n callbackFn()\n } else {\n // open dropdown menu\n handleClick(e)\n }\n }}\n aria-label={tooltipText}\n >\n {tooltipTriggerContents}\n </button>\n )\n } else {\n tooltipTrigger = <div className=\"SRC-hand-cursor\">{children}</div>\n }\n\n return (\n <>\n <Tooltip\n title={tooltipText}\n enterNextDelay={TOOLTIP_DELAY_SHOW}\n placement={place}\n data-testid=\"ElementTooltip\"\n >\n {tooltipTrigger}\n </Tooltip>\n {menuItems && (\n <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>\n {menuItems}\n </Menu>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;AA2BA,IAAM,IAA4D,EAChE,OAAO,OACR;AAyBD,SAAS,EACP,GACA,GACA,GACA;AAIE,QAHE,YAAY,IACP,EAAM,SAEN,kBAAC,GAAD;EAAS,GAAI;EAAO,IAAI;GAAE,OAAO;GAAY,OAAO;GAAM;EAAI,CAAA;;AAIzE,IAAa,KAAsB,EACjC,UACA,eACA,gBACA,eAAY,IACZ,eACA,wBAAqB,GACrB,aACA,cACA,SACA,SACA,mBAC8C;CAC9C,IAAM,EAAE,aAAU,GAQZ,KAPgB,IACpB,OAAO,KAAS,WACd,kBAAC,GAAD,EAAM,MAAM,GAAa,CAAA,GAEzB,IAEA,KAAA,OAGA,IACE,EAA0B,GAAO,GAAY,EAAK,GAClD,KAAY,kBAAA,GAAA,EAAK,CAAA,GAEjB,CAAC,GAAU,KAAe,EAA6B,KAAK,EAC5D,IAAO,EAAQ,GACf,KAAe,MAAyC;AAC5D,IAAY,EAAM,cAAc;IAE5B,UAAoB;AACxB,IAAY,KAAK;IAIf;AAyBJ,QAxBA,AACE,IADG,IAqBc,kBAAC,OAAD;EAAK,WAAU;EAAmB;EAAe,CAAA,GAnBhE,kBAAC,UAAD;EACE,UAAU;EACV,WAAW,gEAAgE,EAAU,GACnF,IAAY,eAAe,GAC5B;EACD,UAAS,MAAK;AACZ,GAAI,IACF,GAAY,GAGZ,EAAY,EAAE;;EAGlB,cAAY;YAEX;EACM,CAAA,EAOX,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,OAAO;EACP,gBAAA;EACA,WAAW;EACX,eAAY;YAEX;EACO,CAAA,EACT,KACC,kBAAC,GAAD;EAAgB;EAAgB;EAAM,SAAS;YAC5C;EACI,CAAA,CAER,EAAA,CAAA"}