synapse-react-client 4.0.9 → 4.0.10

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 (543) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  6. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  7. package/dist/assets/icons/TasksIcon.d.ts.map +1 -1
  8. package/dist/assets/icons/TasksIcon.js +6 -10
  9. package/dist/assets/icons/TasksIcon.js.map +1 -1
  10. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  11. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js +69 -63
  12. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  13. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  14. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  15. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  17. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  18. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  19. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  20. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  21. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  22. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  23. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  24. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  25. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  26. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
  27. package/dist/components/Authentication/AuthenticationMethodSelection.js +38 -37
  28. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  29. package/dist/components/Authentication/Constants.d.ts +1 -0
  30. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  31. package/dist/components/Authentication/Constants.js +2 -2
  32. package/dist/components/Authentication/Constants.js.map +1 -1
  33. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  34. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  35. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  36. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  37. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  38. package/dist/components/Authentication/StandaloneLoginForm.js +1 -1
  39. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  40. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  41. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +2 -1
  42. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  43. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  44. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  45. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  46. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  47. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  48. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  49. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  50. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  51. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  52. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  53. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  54. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  55. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  56. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  57. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  58. package/dist/components/ChangePassword/useChangePasswordFormState.js +1 -1
  59. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  60. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  61. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  62. package/dist/components/ComponentCollapse.js.map +1 -1
  63. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  64. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  65. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  66. package/dist/components/DataGrid/DataGrid.d.ts +0 -1
  67. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  68. package/dist/components/DataGrid/DataGrid.js +72 -72
  69. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  70. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  71. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  72. package/dist/components/DataGrid/DataGridWebSocket.js +9 -8
  73. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  74. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  75. package/dist/components/DataGrid/SynapseGrid.js +326 -268
  76. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  77. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +2 -0
  78. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  79. package/dist/components/DataGrid/columns/AutocompleteColumn.js +113 -67
  80. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  81. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts +2 -1
  82. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  83. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +126 -122
  84. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  85. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +58 -0
  86. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -0
  87. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +52 -0
  88. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -0
  89. package/dist/components/DataGrid/components/ValidationAlert.d.ts +5 -2
  90. package/dist/components/DataGrid/components/ValidationAlert.d.ts.map +1 -1
  91. package/dist/components/DataGrid/components/ValidationAlert.js +429 -24
  92. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  93. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  94. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  95. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  96. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  97. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  98. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +7 -0
  99. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  100. package/dist/components/DataGrid/useDataGridWebsocket.js +16 -2
  101. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  102. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  103. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  104. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  105. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  106. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  107. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  108. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  109. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  110. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  111. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  112. package/dist/components/DataGrid/utils/getCellClassName.js +8 -8
  113. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  114. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  115. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  116. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  117. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  118. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  119. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  120. package/dist/components/DirectDownloadButton.js.map +1 -1
  121. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  122. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  123. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  124. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  125. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  126. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  127. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  128. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  129. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  130. package/dist/components/EntityAclEditor/EntityAclEditor.js +103 -103
  131. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  132. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  133. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  134. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  135. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  136. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.d.ts.map +1 -1
  137. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +36 -30
  138. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  139. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  140. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  141. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  142. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  143. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  144. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  145. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  146. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  147. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  148. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  149. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  150. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  151. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  152. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  153. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  154. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  155. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  156. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  157. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  158. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  159. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  160. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  161. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  162. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  163. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  164. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  165. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  166. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  167. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  168. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  169. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  170. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  171. package/dist/components/Forum/ForumTable.js.map +1 -1
  172. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  173. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  174. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  175. package/dist/components/GenericCard/GenericCard.js +12 -7
  176. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  177. package/dist/components/GenericCard/Linkify.js.map +1 -1
  178. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  179. package/dist/components/GenericCard/TableRowGenericCard.js +105 -105
  180. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  181. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  182. package/dist/components/Goals/Goals.js.map +1 -1
  183. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  184. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  185. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  186. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  187. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  188. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  189. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  190. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  191. package/dist/components/HeaderCard.d.ts +6 -1
  192. package/dist/components/HeaderCard.d.ts.map +1 -1
  193. package/dist/components/HeaderCard.js +107 -76
  194. package/dist/components/HeaderCard.js.map +1 -1
  195. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  196. package/dist/components/IconList.js.map +1 -1
  197. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  198. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  199. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  200. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  201. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  202. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  203. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  204. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  205. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  206. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  207. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  208. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  209. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  210. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  211. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  212. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  213. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  214. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js +45 -39
  215. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  216. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  217. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  218. package/dist/components/Plot/DotPlot.js.map +1 -1
  219. package/dist/components/Plot/Plot.js.map +1 -1
  220. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  221. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  222. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  223. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  224. package/dist/components/PortalAclEditor/PortalAclEditor.js +43 -41
  225. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  226. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  227. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  228. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  229. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  230. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  231. package/dist/components/Programs/Programs.js.map +1 -1
  232. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  233. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  234. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  235. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  236. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  237. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  238. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  239. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  240. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  241. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  242. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  243. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  244. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  245. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  246. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  247. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  248. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  249. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  250. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  251. package/dist/components/Resources/Resources.js.map +1 -1
  252. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  253. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  254. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  255. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  256. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  257. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  258. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  259. package/dist/components/SourceAppImage.js.map +1 -1
  260. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  261. package/dist/components/StatisticsPlot.js.map +1 -1
  262. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  263. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  264. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  265. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  266. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  267. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  268. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  269. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  270. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  271. package/dist/components/SynapseForm/SynapseForm.js +4 -2
  272. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  273. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  274. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  275. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  276. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  277. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  278. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  279. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  280. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  281. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts +8 -7
  282. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  283. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +173 -164
  284. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  285. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  286. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  287. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  288. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  289. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  290. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  291. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  292. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  293. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  294. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  295. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  296. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  297. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  298. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  299. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  300. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  301. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +1 -1
  302. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  303. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  304. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  305. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  306. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  307. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  308. package/dist/components/TanStackTable/ColumnHeader.d.ts +1 -0
  309. package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
  310. package/dist/components/TanStackTable/ColumnHeader.js +8 -8
  311. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  312. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  313. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  314. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  315. package/dist/components/TextField/TextField.js.map +1 -1
  316. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  317. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  318. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  319. package/dist/components/UserCard/Avatar.js.map +1 -1
  320. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  321. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  322. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  323. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  324. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  325. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  326. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  327. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  328. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  329. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  330. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  331. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  332. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  333. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  334. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  335. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  336. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  337. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  338. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  339. package/dist/components/error/ErrorPage.js.map +1 -1
  340. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  341. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  342. package/dist/components/layout/SWCHeader.d.ts +9 -0
  343. package/dist/components/layout/SWCHeader.d.ts.map +1 -0
  344. package/dist/components/layout/SWCHeader.js +19 -0
  345. package/dist/components/layout/SWCHeader.js.map +1 -0
  346. package/dist/components/layout/SWCPageLayout.d.ts +9 -0
  347. package/dist/components/layout/SWCPageLayout.d.ts.map +1 -0
  348. package/dist/components/layout/SWCPageLayout.js +14 -0
  349. package/dist/components/layout/SWCPageLayout.js.map +1 -0
  350. package/dist/components/menu/ComplexMenu.js.map +1 -1
  351. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  352. package/dist/components/styled/StyledPopover.js.map +1 -1
  353. package/dist/components/table/CsvPreview/CsvPreview.js +2 -1
  354. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  355. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  356. package/dist/components/trash/TrashCanList.js.map +1 -1
  357. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  358. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  359. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  360. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  361. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  362. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  363. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  364. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  365. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  366. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  367. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  368. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  369. package/dist/features/curator/GridPage/components/GridPageTitle.d.ts.map +1 -1
  370. package/dist/features/curator/GridPage/components/GridPageTitle.js +23 -30
  371. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  372. package/dist/features/curator/dashboard/CuratorDashboard.d.ts +2 -0
  373. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -0
  374. package/dist/features/curator/dashboard/CuratorDashboard.js +45 -0
  375. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -0
  376. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -0
  377. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +9 -0
  378. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -0
  379. package/dist/features/curator/dashboard/components/CurationTaskCard.js +106 -0
  380. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -0
  381. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +12 -0
  382. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -0
  383. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +52 -0
  384. package/dist/features/curator/dashboard/components/NextStepButton.css +1 -0
  385. package/dist/features/curator/dashboard/components/NextStepButton.d.ts +14 -0
  386. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -0
  387. package/dist/features/curator/dashboard/components/NextStepButton.js +35 -0
  388. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -0
  389. package/dist/features/curator/dashboard/components/NextStepButton.module.js +11 -0
  390. package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -0
  391. package/dist/features/curator/dashboard/components/NextStepButton.module.scss +57 -0
  392. package/dist/features/curator/dashboard/components/UserOrTeamChip.css +1 -1
  393. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js +1 -1
  394. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js.map +1 -1
  395. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.scss +5 -5
  396. package/dist/features/curator/dashboard/components/shared.css +1 -0
  397. package/dist/features/curator/dashboard/components/shared.module.js +5 -0
  398. package/dist/features/curator/dashboard/components/shared.module.js.map +1 -0
  399. package/dist/features/curator/dashboard/components/shared.module.scss +8 -0
  400. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -2
  401. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  402. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +16 -34
  403. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  404. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  405. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  406. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  407. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  408. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  409. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  410. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts +10 -0
  411. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -0
  412. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +37 -0
  413. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -0
  414. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  415. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -0
  416. package/dist/features/entity/metadata-task/utils/constants.js +6 -0
  417. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -0
  418. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  419. package/dist/mocks/entity/mockDataset.js.map +1 -1
  420. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  421. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  422. package/dist/mocks/entity/mockFileView.js.map +1 -1
  423. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  424. package/dist/mocks/entity/mockProject.js.map +1 -1
  425. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  426. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  427. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  428. package/dist/mocks/mockWiki.js.map +1 -1
  429. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  430. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  431. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  432. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  433. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  434. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  435. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  436. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  437. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  438. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  439. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  440. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  441. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  442. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  443. package/dist/ror-client/index.js.map +1 -1
  444. package/dist/style/components/_cards.scss +4 -0
  445. package/dist/style/components/_data-grid-extra.css +1 -1
  446. package/dist/style/components/_data-grid-extra.scss +2 -0
  447. package/dist/style/main.css +1 -1
  448. package/dist/synapse-client/HttpClient.js.map +1 -1
  449. package/dist/synapse-client/SynapseClient.js.map +1 -1
  450. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  451. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  452. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -1
  453. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  454. package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
  455. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  456. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  457. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  458. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  459. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  460. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  461. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  462. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  463. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  464. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  465. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  466. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  467. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  468. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  469. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  470. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  471. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  472. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  473. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  474. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  475. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  476. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  477. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  478. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  479. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  480. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  481. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  482. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  483. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  484. package/dist/theme/ThemeProvider.js.map +1 -1
  485. package/dist/tsconfig.build.tsbuildinfo +1 -1
  486. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  487. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  488. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  489. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  490. package/dist/utils/context/SynapseContext.js.map +1 -1
  491. package/dist/utils/functions/AccessControlListUtils.d.ts +4 -0
  492. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  493. package/dist/utils/functions/AccessControlListUtils.js +12 -1
  494. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  495. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  496. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  497. package/dist/utils/functions/RealmUtils.d.ts +4 -0
  498. package/dist/utils/functions/RealmUtils.d.ts.map +1 -1
  499. package/dist/utils/functions/RealmUtils.js +9 -3
  500. package/dist/utils/functions/RealmUtils.js.map +1 -1
  501. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  502. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  503. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  504. package/dist/utils/functions/StringUtils.js.map +1 -1
  505. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  506. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  507. package/dist/utils/functions/getEndpoint.js.map +1 -1
  508. package/dist/utils/functions/getUserData.js.map +1 -1
  509. package/dist/utils/functions/queryUtils.js.map +1 -1
  510. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  511. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  512. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  513. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  514. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  515. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  516. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  517. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  518. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  519. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  520. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  521. package/dist/utils/hooks/useIsBot.js.map +1 -1
  522. package/dist/utils/hooks/useListState.js.map +1 -1
  523. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  524. package/dist/utils/hooks/useLogin.js +53 -52
  525. package/dist/utils/hooks/useLogin.js.map +1 -1
  526. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  527. package/dist/utils/hooks/useOverlay.js.map +1 -1
  528. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  529. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  530. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  531. package/dist/utils/hooks/useSet.js.map +1 -1
  532. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  533. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  534. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  535. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  536. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  537. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  538. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  539. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  540. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  541. package/dist/utils/html/TargetEnum.js.map +1 -1
  542. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  543. package/package.json +4 -4
@@ -12,32 +12,32 @@ import re from "./GenericCardActionButton.js";
12
12
  import ie from "./CroissantButton/CroissantButton.js";
13
13
  import { GenericCardIcon as ae } from "./GenericCardIcon.js";
14
14
  import oe from "./PortalDOI/PortalDOI.js";
15
- import { getCandidateDoiId as se, useShowDoiCardLabel as ce } from "./PortalDOI/PortalDOIUtils.js";
16
- import { mapRowToRecord as le } from "../SynapseTable/SynapseTableUtils.js";
17
- import ue from "../CitationPopover/index.js";
18
- import { EntityDownloadConfirmation as de } from "../EntityDownloadConfirmation/EntityDownloadConfirmation.js";
15
+ import { getCandidateDoiId as l, useShowDoiCardLabel as se } from "./PortalDOI/PortalDOIUtils.js";
16
+ import { mapRowToRecord as ce } from "../SynapseTable/SynapseTableUtils.js";
17
+ import le from "../CitationPopover/index.js";
18
+ import { EntityDownloadConfirmation as ue } from "../EntityDownloadConfirmation/EntityDownloadConfirmation.js";
19
19
  import "../EntityDownloadConfirmation/index.js";
20
- import { useQueryContext as fe } from "../QueryContext/QueryContext.js";
21
- import l from "../IconList.js";
22
- import { useQueryVisualizationContext as pe } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
20
+ import { useQueryContext as de } from "../QueryContext/QueryContext.js";
21
+ import fe from "../IconList.js";
22
+ import { useQueryVisualizationContext as u } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
23
23
  import "../QueryVisualizationWrapper/index.js";
24
- import me from "../ShareThisPage/ShareThisPage.js";
25
- import { GenericCard as he } from "./GenericCard.js";
26
- import { SynapseCardLabel as u } from "./SynapseCardLabel.js";
27
- import { useResolvedSynapseEntity as ge } from "./useResolvedSynapseEntity.js";
28
- import { useCallback as _e, useMemo as d, useState as f } from "react";
29
- import { Box as ve, Collapse as ye, Link as be, Stack as p, Typography as xe } from "@mui/material";
30
- import { Fragment as Se, jsx as m, jsxs as h } from "react/jsx-runtime";
31
- import { ColumnTypeEnum as Ce } from "@sage-bionetworks/synapse-types";
32
- import { GetAppTwoTone as we } from "@mui/icons-material";
33
- import { useInView as Te } from "react-intersection-observer";
24
+ import pe from "../ShareThisPage/ShareThisPage.js";
25
+ import { GenericCard as me } from "./GenericCard.js";
26
+ import { SynapseCardLabel as d } from "./SynapseCardLabel.js";
27
+ import { useResolvedSynapseEntity as he } from "./useResolvedSynapseEntity.js";
28
+ import { useCallback as ge, useMemo as f, useState as p } from "react";
29
+ import { Box as _e, Collapse as ve, Link as ye, Stack as m, Typography as be } from "@mui/material";
30
+ import { Fragment as xe, jsx as h, jsxs as g } from "react/jsx-runtime";
31
+ import { ColumnTypeEnum as Se } from "@sage-bionetworks/synapse-types";
32
+ import { GetAppTwoTone as Ce } from "@mui/icons-material";
33
+ import { useInView as we } from "react-intersection-observer";
34
34
  //#region src/components/GenericCard/TableRowGenericCard.tsx
35
- function Ee(e) {
35
+ function Te(e) {
36
36
  let { synapseId: n, version: r } = e;
37
- return /* @__PURE__ */ h("span", { children: [
37
+ return /* @__PURE__ */ g("span", { children: [
38
38
  r,
39
39
  "\xA0\xA0",
40
- /* @__PURE__ */ m("a", {
40
+ /* @__PURE__ */ h("a", {
41
41
  target: s.NEW_WINDOW,
42
42
  rel: "noopener noreferrer",
43
43
  href: `${t.PORTAL}Synapse:${n}.${r}`,
@@ -45,92 +45,92 @@ function Ee(e) {
45
45
  })
46
46
  ] });
47
47
  }
48
- function g(t) {
49
- let [s, g] = f(!1), [De, Oe] = f(!1), { entityId: ke, versionNumber: Ae } = fe(), { getColumnDisplayName: _ } = pe(), { ref: je, inView: Me } = Te(), { data: v } = ee(ke, Ae), { schema: y, data: b, rowId: x, versionNumber: Ne, genericCardSchema: S, secondaryLabelLimit: Pe, sharePageLinkButtonProps: Fe, selectColumns: C, columnModels: w, iconOptions: Ie, useTypeColumnForIcon: T = !1, isHeader: E = !1, sustainabilityScorecard: Le, headerCardVariant: D, titleLinkConfig: O, ctaLinkConfig: k, labelLinkConfig: Re, descriptionConfig: ze, columnIconOptions: A, CardTypeAdornment: j, charCountCutoff: Be } = t, { link: Ve = "", type: M, includeCitation: He, includeShareButton: Ue, defaultCitationFormat: We, citationBoilerplateText: Ge, downloadCartSynId: N, portalDoiConfiguration: P } = S, F = b[y[S.title]], I = S.subTitle && b[y[S.subTitle]];
50
- I = S.subTitle && ne({
48
+ function _(t) {
49
+ let [s, _] = p(!1), [Ee, De] = p(!1), { entityId: Oe, versionNumber: ke } = de(), { getColumnDisplayName: v } = u(), { ref: Ae, inView: je } = we(), { data: y } = ee(Oe, ke), { schema: b, data: x, rowId: S, versionNumber: Me, genericCardSchema: C, secondaryLabelLimit: Ne, sharePageLinkButtonProps: Pe, selectColumns: w, columnModels: T, iconOptions: Fe, useTypeColumnForIcon: E = !1, isHeader: D = !1, sustainabilityScorecard: Ie, headerCardVariant: Le, titleLinkConfig: O, ctaLinkConfig: k, labelLinkConfig: Re, descriptionConfig: ze, columnIconOptions: A, CardTypeAdornment: j, charCountCutoff: Be } = t, { link: Ve = "", type: M, includeCitation: He, includeShareButton: Ue, defaultCitationFormat: We, citationBoilerplateText: Ge, downloadCartSynId: N, portalDoiConfiguration: P } = C, F = x[b[C.title]], I = C.subTitle && x[b[C.subTitle]];
50
+ I = C.subTitle && ne({
51
51
  value: I,
52
- columnName: S.subTitle,
53
- selectColumns: C,
54
- columnModels: w
52
+ columnName: C.subTitle,
53
+ selectColumns: w,
54
+ columnModels: T
55
55
  }).str;
56
- let Ke = b[y[S.description || ""]], qe = b[y[S.icon || ""]], L = b[y[S.dataTypeIconNames || ""]], R = b[y[S.imageFileHandleColumnName || ""]], Je = w?.find((e) => S.link === e.name)?.columnType, z = b[y[Ve]] || "", { href: Ye, target: Xe } = c(z, O, b, y, x), Ze = S.synapseEntityConfig, B = _e((e) => {
56
+ let Ke = x[b[C.description || ""]], qe = x[b[C.icon || ""]], L = x[b[C.dataTypeIconNames || ""]], R = x[b[C.imageFileHandleColumnName || ""]], Je = T?.find((e) => C.link === e.name)?.columnType, z = x[b[Ve]] || "", { href: Ye, target: Xe } = c(z, O, x, b, S), Ze = C.synapseEntityConfig, B = ge((e) => {
57
57
  if (!e) return;
58
- let t = y[e];
59
- if (t !== void 0) return b[t];
60
- }, [y, b]), Qe = d(() => {
61
- let { titleAreaDetails: e } = S;
58
+ let t = b[e];
59
+ if (t !== void 0) return x[t];
60
+ }, [b, x]), Qe = f(() => {
61
+ let { titleAreaDetails: e } = C;
62
62
  if (!e) return;
63
- let t = typeof e == "function" ? e(y, b) : e;
63
+ let t = typeof e == "function" ? e(b, x) : e;
64
64
  if (t.length === 0) return;
65
65
  let n = t.map((e) => {
66
- let t = b[y[e]];
66
+ let t = x[b[e]];
67
67
  return t ? {
68
- name: _(e),
68
+ name: v(e),
69
69
  rawValue: t,
70
70
  columnName: e
71
71
  } : null;
72
72
  }).filter(Boolean);
73
- if (n.length !== 0) return /* @__PURE__ */ m(p, {
73
+ if (n.length !== 0) return /* @__PURE__ */ h(m, {
74
74
  direction: "column",
75
75
  gap: "4px",
76
- children: n.map(({ name: e, rawValue: t, columnName: n }) => /* @__PURE__ */ h(p, {
76
+ children: n.map(({ name: e, rawValue: t, columnName: n }) => /* @__PURE__ */ g(m, {
77
77
  direction: "row",
78
78
  gap: "4px",
79
79
  alignItems: "center",
80
- children: [/* @__PURE__ */ h(xe, {
80
+ children: [/* @__PURE__ */ g(be, {
81
81
  component: "span",
82
82
  variant: "body1",
83
83
  children: [e, ":"]
84
- }), /* @__PURE__ */ m(u, {
84
+ }), /* @__PURE__ */ h(d, {
85
85
  value: t,
86
86
  columnName: n,
87
87
  labelLink: void 0,
88
- isHeader: E,
89
- selectColumns: C,
90
- columnModels: w,
91
- rowData: b,
88
+ isHeader: D,
89
+ selectColumns: w,
90
+ columnModels: T,
91
+ rowData: x,
92
92
  columnIconOptions: A
93
93
  })]
94
94
  }, n))
95
95
  });
96
96
  }, [
97
- S,
98
- b,
99
- y,
100
- _,
101
- E,
102
97
  C,
98
+ x,
99
+ b,
100
+ v,
101
+ D,
103
102
  w,
103
+ T,
104
104
  A
105
- ]), { entityId: V, entityVersionNumber: H } = ge({
105
+ ]), { entityId: V, entityVersionNumber: H } = he({
106
106
  synapseEntityConfig: Ze,
107
107
  getColumnValue: B,
108
- rowId: x,
109
- rowVersionNumber: Ne
108
+ rowId: S,
109
+ rowVersionNumber: Me
110
110
  }), U = V, W = H;
111
111
  if (N) {
112
112
  let e = a(B(N) ?? "");
113
113
  U = e?.targetId, W = e?.targetVersionNumber;
114
114
  }
115
- let G = se({
116
- data: d(() => le(b, y), [b, y]),
115
+ let G = l({
116
+ data: f(() => ce(x, b), [x, b]),
117
117
  portalDoiConfiguration: P
118
- }), $e = ce({
118
+ }), $e = se({
119
119
  portalId: P?.portalId,
120
120
  resourceId: G
121
- }), K = [], { secondaryLabels: q = [] } = S, J = S.customSecondaryLabelConfig;
122
- if ($e && P && G && Me && K.push({
121
+ }), K = [], { secondaryLabels: q = [] } = C, J = C.customSecondaryLabelConfig;
122
+ if ($e && P && G && je && K.push({
123
123
  columnDisplayName: "DOI",
124
- value: /* @__PURE__ */ m(oe, {
124
+ value: /* @__PURE__ */ h(oe, {
125
125
  portalId: P.portalId,
126
126
  resourceId: G
127
127
  })
128
- }), J?.isVisible(y, b)) {
128
+ }), J?.isVisible(b, x)) {
129
129
  let { key: e, value: t } = J;
130
130
  U ? K.push({
131
131
  columnDisplayName: "HOW TO DOWNLOAD",
132
- value: /* @__PURE__ */ m(be, {
133
- onClick: () => g((e) => !e),
132
+ value: /* @__PURE__ */ h(ye, {
133
+ onClick: () => _((e) => !e),
134
134
  children: "Click here to add to Synapse download list"
135
135
  })
136
136
  }) : K.push({
@@ -138,29 +138,29 @@ function g(t) {
138
138
  value: t
139
139
  });
140
140
  }
141
- let et = v && !i(v);
141
+ let et = y && !i(y);
142
142
  for (let e = 0; e < q.length; e += 1) {
143
- let t = q[e], i = b[y[t]], a = i, o;
144
- if (a) {
145
- if (r(v) && t === "datasetSizeInBytes") o = "Size", a = n(parseInt(i));
143
+ let t = q[e], i = x[b[t]], a = i, o;
144
+ if (a && i !== "[]" && i !== "[\"\"]") {
145
+ if (r(y) && t === "datasetSizeInBytes") o = "Size", a = n(parseInt(i));
146
146
  else if (et && t === "currentVersion") {
147
- let e = b[y.id];
148
- a = /* @__PURE__ */ m(Ee, {
147
+ let e = x[b.id];
148
+ a = /* @__PURE__ */ h(Te, {
149
149
  synapseId: e,
150
150
  version: i
151
151
  }), o = "Version";
152
152
  } else {
153
153
  let e = Re?.find((e) => e.matchColumnName === t);
154
- a = /* @__PURE__ */ m(u, {
154
+ a = /* @__PURE__ */ h(d, {
155
155
  value: i,
156
156
  columnName: t,
157
157
  labelLink: e,
158
- isHeader: E,
159
- selectColumns: C,
160
- columnModels: w,
161
- rowData: b,
158
+ isHeader: D,
159
+ selectColumns: w,
160
+ columnModels: T,
161
+ rowData: x,
162
162
  columnIconOptions: A
163
- }), o = _(t);
163
+ }), o = v(t);
164
164
  }
165
165
  K.push({
166
166
  columnDisplayName: o,
@@ -169,38 +169,38 @@ function g(t) {
169
169
  });
170
170
  }
171
171
  }
172
- let Y = te(v, R || z, b[y.id]), tt = _(S.description || ""), X = o("doi", C, w), Z = X === void 0 ? void 0 : b[X], Q = (k ? Array.isArray(k) ? k : [k] : []).map((e) => {
173
- let t = b[y[e.link]] || "";
172
+ let Y = te(y, R || z, x[b.id]), tt = v(C.description || ""), X = o("doi", w, T), Z = X === void 0 ? void 0 : x[X], Q = (k ? Array.isArray(k) ? k : [k] : []).map((e) => {
173
+ let t = x[b[e.link]] || "";
174
174
  if (!t) return null;
175
- let { href: n, target: r } = c(t, void 0, b, y, x);
175
+ let { href: n, target: r } = c(t, void 0, x, b, S);
176
176
  return {
177
177
  text: e.text,
178
178
  href: n,
179
179
  target: r
180
180
  };
181
- }).filter(Boolean), $ = /* @__PURE__ */ m(Se, {});
182
- V != null && H != null && ($ = /* @__PURE__ */ m(ie, {
181
+ }).filter(Boolean), $ = /* @__PURE__ */ h(xe, {});
182
+ V != null && H != null && ($ = /* @__PURE__ */ h(ie, {
183
183
  datasetId: V,
184
184
  datasetVersionNumber: H
185
185
  }));
186
- let nt = j ? /* @__PURE__ */ m(j, {
187
- schema: y,
188
- data: b
186
+ let nt = j ? /* @__PURE__ */ h(j, {
187
+ schema: b,
188
+ data: x
189
189
  }) : null;
190
- return /* @__PURE__ */ m(he, {
191
- ref: je,
192
- icon: /* @__PURE__ */ m(ae, {
193
- type: T ? b[y.type] : S.type,
194
- useTypeForIcon: T,
195
- thumbnailRequiresPadding: S.thumbnailRequiresPadding,
190
+ return /* @__PURE__ */ h(me, {
191
+ ref: Ae,
192
+ icon: /* @__PURE__ */ h(ae, {
193
+ type: E ? x[b.type] : C.type,
194
+ useTypeForIcon: E,
195
+ thumbnailRequiresPadding: C.thumbnailRequiresPadding,
196
196
  imageFileHandleId: R,
197
197
  fileHandleAssociation: Y,
198
- iconOptions: Ie,
198
+ iconOptions: Fe,
199
199
  iconValue: qe
200
200
  }),
201
- isHeader: E,
202
- sustainabilityScorecard: Le,
203
- headerCardVariant: D,
201
+ isHeader: D,
202
+ sustainabilityScorecard: Ie,
203
+ headerCardVariant: Le,
204
204
  type: M,
205
205
  title: F,
206
206
  subtitle: I,
@@ -209,7 +209,7 @@ function g(t) {
209
209
  href: Ye
210
210
  },
211
211
  cardTypeAdornment: nt,
212
- titleAsFileHandleLinkConfiguration: !O && Je === Ce.FILEHANDLEID && Y ? {
212
+ titleAsFileHandleLinkConfiguration: !O && Je === Se.FILEHANDLEID && Y ? {
213
213
  fileHandleAssociation: Y,
214
214
  showDownloadIcon: M !== e
215
215
  } : void 0,
@@ -220,22 +220,22 @@ function g(t) {
220
220
  descriptionConfig: ze,
221
221
  charCountCutoff: Be,
222
222
  labels: K,
223
- secondaryLabelLimit: Pe,
223
+ secondaryLabelLimit: Ne,
224
224
  useStylesForDisplayedImage: !!R,
225
- cardTopContent: U && /* @__PURE__ */ m(ye, {
225
+ cardTopContent: U && /* @__PURE__ */ h(ve, {
226
226
  in: s,
227
- children: /* @__PURE__ */ m(de, {
227
+ children: /* @__PURE__ */ h(ue, {
228
228
  entityId: U,
229
229
  versionNumber: W,
230
- handleClose: () => g(!1),
230
+ handleClose: () => _(!1),
231
231
  onIsLoadingChange: (e) => {
232
- Oe(e);
232
+ De(e);
233
233
  }
234
234
  })
235
235
  }),
236
- renderedIconList: A?.columns?.dataType && L?.length && /* @__PURE__ */ m("div", {
236
+ renderedIconList: A?.columns?.dataType && L?.length && /* @__PURE__ */ h("div", {
237
237
  style: { marginTop: "20px" },
238
- children: /* @__PURE__ */ m(l, {
238
+ children: /* @__PURE__ */ h(fe, {
239
239
  iconConfigs: A.columns.dataType,
240
240
  iconNames: JSON.parse(L),
241
241
  commonIconProps: { sx: { fontSize: "40px" } },
@@ -243,32 +243,32 @@ function g(t) {
243
243
  useTheme: !0
244
244
  })
245
245
  }),
246
- cardTopButtons: /* @__PURE__ */ h(ve, {
246
+ cardTopButtons: /* @__PURE__ */ g(_e, {
247
247
  sx: {
248
248
  display: "flex",
249
249
  gap: 1
250
250
  },
251
251
  children: [
252
252
  $,
253
- U && /* @__PURE__ */ m(re, {
254
- onClick: () => g((e) => !e),
253
+ U && /* @__PURE__ */ h(re, {
254
+ onClick: () => _((e) => !e),
255
255
  variant: "outlined",
256
- startIcon: /* @__PURE__ */ m(we, { sx: { height: "12px" } }),
257
- loading: De,
256
+ startIcon: /* @__PURE__ */ h(Ce, { sx: { height: "12px" } }),
257
+ loading: Ee,
258
258
  children: "Download"
259
259
  }),
260
- He && Z && /* @__PURE__ */ m(ue, {
260
+ He && Z && /* @__PURE__ */ h(le, {
261
261
  title: F,
262
262
  doi: Z,
263
263
  boilerplateText: Ge,
264
264
  defaultCitationFormat: We
265
265
  }),
266
- Ue && E && /* @__PURE__ */ m(me, { ...Fe })
266
+ Ue && D && /* @__PURE__ */ h(pe, { ...Pe })
267
267
  ]
268
268
  })
269
269
  });
270
270
  }
271
271
  //#endregion
272
- export { g as TableRowGenericCard, g as default };
272
+ export { _ as TableRowGenericCard, _ as default };
273
273
 
274
274
  //# sourceMappingURL=TableRowGenericCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRowGenericCard.js","names":[],"sources":["../../../src/components/GenericCard/TableRowGenericCard.tsx"],"sourcesContent":["import { CommonCardProps } from '@/components/CardContainer/CardConfiguration'\nimport {\n getFileHandleAssociation,\n getLinkParams,\n getValueOrMultiValue,\n} from '@/components/GenericCard/CardUtils'\nimport CroissantButton from '@/components/GenericCard/CroissantButton/CroissantButton'\nimport { GenericCardIcon } from '@/components/GenericCard/GenericCardIcon'\nimport PortalDOI from '@/components/GenericCard/PortalDOI/PortalDOI'\nimport {\n getCandidateDoiId,\n useShowDoiCardLabel,\n} from '@/components/GenericCard/PortalDOI/PortalDOIUtils'\nimport { mapRowToRecord } from '@/components/SynapseTable/SynapseTableUtils'\nimport { useGetEntity } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport {\n isDatasetCollection,\n isTableEntity,\n} from '@/utils/functions/EntityTypeUtils'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport { getColumnIndex } from '@/utils/functions/SqlFunctions'\nimport { TargetEnum } from '@/utils/html/TargetEnum'\nimport * as SynapseConstants from '@/utils/SynapseConstants'\nimport { GetAppTwoTone } from '@mui/icons-material'\nimport { Box, Collapse, Link, Stack, Typography } from '@mui/material'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n Entity,\n SelectColumn,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport CitationPopover from '../CitationPopover'\nimport { EntityDownloadConfirmation } from '../EntityDownloadConfirmation'\nimport { HeaderCardVariant } from '../HeaderCard'\nimport IconList from '../IconList'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport ShareThisPage, {\n ShareThisPageProps,\n} from '../ShareThisPage/ShareThisPage'\nimport { SustainabilityScorecardProps } from '../SustainabilityScorecard/SustainabilityScorecard'\nimport GenericCard from './GenericCard'\nimport GenericCardActionButton from './GenericCardActionButton'\nimport { PortalDOIConfiguration } from './PortalDOI/PortalDOIConfiguration'\nimport { SynapseCardLabel } from './SynapseCardLabel'\nimport { useResolvedSynapseEntity } from './useResolvedSynapseEntity'\n\ntype RowSynapseEntityConfig = {\n /** Use the table rowId to resolve the Synapse entity ID. */\n id: {\n source: 'rowId'\n }\n /** Use the table rowVersionNumber to resolve the Synapse entity version (if available). */\n version?: {\n source: 'rowVersionNumber'\n }\n}\n\ntype ColumnSynapseEntityConfig = {\n /** Use a column value to resolve the Synapse entity ID. */\n id: {\n source: 'column'\n columnName: string\n }\n /** Use a column value to resolve the Synapse entity version. */\n version?: {\n source: 'column'\n columnName: string\n }\n}\n\nexport type SynapseEntityConfig =\n | RowSynapseEntityConfig\n | ColumnSynapseEntityConfig\n\n/**\n * Maps a table query result to a GenericCard.\n */\nexport type TableToGenericCardMapping = {\n /** The 'type' of resource a card refers to. Renders a label on the card with this string value.\n * Can be hidden by setting it to '' (empty string)\n */\n type: string\n /** The column name whose data contains the title of the card */\n title: string\n /** The column name whose data contains the subtitle of the card */\n subTitle?: string\n /** The column name whose data contains the description of the card */\n description?: string\n /** If true, a 'Cite As' button will be displayed for those cards with a DOI in the 'doi' column */\n includeCitation?: boolean\n /** If true, a 'Share this page' button will be displayed */\n includeShareButton?: boolean\n /**\n * Configuration for displaying the SustainabilityScorecard component\n */\n sustainabilityScorecard?: SustainabilityScorecardProps\n /** The initial citation format to use in the 'Cite As' UI */\n defaultCitationFormat?: 'bibtex' | 'apa' | 'ieee' | 'nature' | 'science'\n /** Static text displayed in the 'Cite As' UI */\n citationBoilerplateText?: string\n /** The column name whose data contains the value used to map to the icon */\n icon?: string\n /** The column name whose data contains an image file handle to be displayed on the card */\n imageFileHandleColumnName?: string\n /** Static boolean value used if the image displayed using `imageFileHandleColumnName` requires extra padding */\n thumbnailRequiresPadding?: boolean\n /** Array of column names to be used for labels in the Card Footer */\n secondaryLabels?: string[]\n /** Can be used to add a custom secondary label */\n customSecondaryLabelConfig?: {\n /** The displayed label key */\n key: string\n /** The value to display */\n value: React.ReactNode\n /** Callback to determine visibility of the label\n * @param schema the mapping of columnName to data index\n * @param data the row data\n */\n isVisible: (schema: Record<string, number>, data: string[]) => boolean\n }\n /** Column name of the link value if the title should be linked */\n link?: string\n /** Column name of the STRING_LIST column that includes icon names that represent icons that should be displayed on the card */\n dataTypeIconNames?: string\n /**\n * Ordered list of column names to display to the right of the title area.\n * Each renders as \"Display Name: Value\" on its own line. Rows with empty values are skipped.\n * The display name is derived from getColumnDisplayName (respects column aliases and unCamelCase).\n *\n * Can also be a function that receives the schema and row data and returns the list of column\n * names to display, allowing the displayed details to vary based on the row's actual values.\n */\n titleAreaDetails?:\n | string[]\n | ((schema: Record<string, number>, data: string[]) => string[])\n /** Configuration for resolving the Synapse entity ID/version represented by each card row.\n * The ID and version sources must both reference either row-based values or column-based values.\n */\n synapseEntityConfig?: SynapseEntityConfig\n /** The column name whose data contains a synId that can be used to show a button to add the corresponding entity to the download cart. */\n downloadCartSynId?: string\n /** Configuration to display a DOI, as well as the ability to create one for users with such permission */\n portalDoiConfiguration?: PortalDOIConfiguration\n}\n\nexport type TableRowGenericCardProps = {\n /** The schema that maps a table result to the GenericCard UI */\n genericCardSchema: TableToGenericCardMapping\n /** The table's SelectColumns */\n selectColumns?: SelectColumn[]\n /** The table's ColumnModels */\n columnModels?: ColumnModel[]\n /** If true, the 'type' column will be used as the icon string to choose the icon */\n useTypeColumnForIcon?: boolean\n /** If true, render the card as a HeaderCard */\n isHeader?: boolean\n /** If isHeader is true, use this variant of HeaderCard */\n headerCardVariant?: HeaderCardVariant\n isAlignToLeftNav?: boolean\n /** Mapping of column name to row data index */\n schema: Record<string, number>\n /** The row data */\n data: string[]\n /** The ID of the table row */\n rowId?: number\n /** The versionNumber of the table row */\n versionNumber?: number\n /** Optional props for the ShareThisPage component */\n sharePageLinkButtonProps?: ShareThisPageProps\n /** Optional function that receives schema and data and returns a ReactNode to be rendered next to the card type */\n CardTypeAdornment?: React.ComponentType<{\n schema: Record<string, number>\n data: string[]\n }>\n} & CommonCardProps\n\n// SWC-6115: special rendering of the version column (for Views)\nfunction VersionLabel(props: { synapseId: string; version: string }) {\n const { synapseId, version } = props\n return (\n <span>\n {version}&nbsp;&nbsp;\n <a\n target={TargetEnum.NEW_WINDOW}\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${synapseId}.${version}`}\n >\n (Show Version History on Synapse)\n </a>\n </span>\n )\n}\n\n/**\n * Maps a table row to a GenericCard.\n */\nexport function TableRowGenericCard(props: TableRowGenericCardProps) {\n const [showDownloadConfirmation, setShowDownloadConfirmation] =\n useState(false)\n const [downloadButtonLoading, setDownloadButtonLoading] = useState(false)\n\n const { entityId, versionNumber } = useQueryContext()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n const { ref, inView: cardIsInView } = useInView()\n\n const { data: table } = useGetEntity<Table>(entityId, versionNumber)\n\n const {\n schema,\n data,\n rowId,\n versionNumber: rowVersionNumber,\n genericCardSchema,\n secondaryLabelLimit,\n sharePageLinkButtonProps,\n selectColumns,\n columnModels,\n iconOptions,\n useTypeColumnForIcon = false,\n isHeader = false,\n sustainabilityScorecard,\n headerCardVariant,\n titleLinkConfig,\n ctaLinkConfig,\n labelLinkConfig,\n descriptionConfig,\n columnIconOptions,\n CardTypeAdornment,\n charCountCutoff,\n } = props\n\n const {\n link = '',\n type,\n includeCitation,\n includeShareButton,\n defaultCitationFormat,\n citationBoilerplateText,\n downloadCartSynId,\n portalDoiConfiguration,\n } = genericCardSchema\n const title = data[schema[genericCardSchema.title]]\n let subTitle =\n genericCardSchema.subTitle && data[schema[genericCardSchema.subTitle]]\n subTitle =\n genericCardSchema.subTitle &&\n getValueOrMultiValue({\n value: subTitle,\n columnName: genericCardSchema.subTitle,\n selectColumns,\n columnModels,\n }).str\n const description = data[schema[genericCardSchema.description || '']]\n const iconValue = data[schema[genericCardSchema.icon || '']]\n const dataTypeIconNames =\n data[schema[genericCardSchema.dataTypeIconNames || '']]\n const imageFileHandleIdValue =\n data[schema[genericCardSchema.imageFileHandleColumnName || '']]\n const titleColumnModel = columnModels?.find(\n el => genericCardSchema.link === el.name,\n )\n const titleColumnType = titleColumnModel?.columnType\n // wrap link in parens because undefined would throw an error\n const linkValue: string = data[schema[link]] || ''\n const { href, target } = getLinkParams(\n linkValue,\n titleLinkConfig,\n data,\n schema,\n rowId,\n )\n\n const synapseEntityConfig = genericCardSchema.synapseEntityConfig\n\n const getColumnValue = useCallback(\n (columnName?: string) => {\n if (!columnName) {\n return undefined\n }\n const columnIndex = schema[columnName]\n if (columnIndex === undefined) {\n return undefined\n }\n return data[columnIndex]\n },\n [schema, data],\n )\n\n const resolvedTitleAreaRightContent = useMemo(() => {\n const { titleAreaDetails } = genericCardSchema\n if (!titleAreaDetails) return undefined\n const columns =\n typeof titleAreaDetails === 'function'\n ? titleAreaDetails(schema, data)\n : titleAreaDetails\n if (columns.length === 0) return undefined\n const rows = columns\n .map(columnName => {\n const rawValue: string | undefined = data[schema[columnName]]\n if (!rawValue) return null\n return { name: getColumnDisplayName(columnName), rawValue, columnName }\n })\n .filter(Boolean) as {\n name: string\n rawValue: string\n columnName: string\n }[]\n if (rows.length === 0) return undefined\n return (\n <Stack direction=\"column\" gap=\"4px\">\n {rows.map(({ name, rawValue, columnName }) => (\n <Stack key={columnName} direction=\"row\" gap=\"4px\" alignItems=\"center\">\n <Typography component=\"span\" variant=\"body1\">\n {name}:\n </Typography>\n <SynapseCardLabel\n value={rawValue}\n columnName={columnName}\n labelLink={undefined}\n isHeader={isHeader}\n selectColumns={selectColumns}\n columnModels={columnModels}\n rowData={data}\n columnIconOptions={columnIconOptions}\n />\n </Stack>\n ))}\n </Stack>\n )\n }, [\n genericCardSchema,\n data,\n schema,\n getColumnDisplayName,\n isHeader,\n selectColumns,\n columnModels,\n columnIconOptions,\n ])\n\n const {\n entityId: resolvedSynapseEntityId,\n entityVersionNumber: resolvedSynapseEntityVersionNumber,\n } = useResolvedSynapseEntity({\n synapseEntityConfig,\n getColumnValue,\n rowId,\n rowVersionNumber,\n })\n\n let resolvedDownloadCartSynIdValue = resolvedSynapseEntityId\n let resolvedDownloadCartVersionNumber = resolvedSynapseEntityVersionNumber\n\n if (downloadCartSynId) {\n const reference = parseSynId(getColumnValue(downloadCartSynId) ?? '')\n resolvedDownloadCartSynIdValue = reference?.targetId\n resolvedDownloadCartVersionNumber = reference?.targetVersionNumber\n }\n\n // Transform the row to a record of (columnName, value) pairs for compatibility with getCandidateDoiId\n const dataAsRecord: Record<string, string | null> = useMemo(\n () => mapRowToRecord(data, schema),\n [data, schema],\n )\n\n const candidateDoiId = getCandidateDoiId({\n data: dataAsRecord,\n portalDoiConfiguration,\n })\n\n const showDoiCardLabel = useShowDoiCardLabel({\n portalId: portalDoiConfiguration?.portalId,\n resourceId: candidateDoiId,\n })\n\n const values: {\n columnDisplayName: string\n value: React.ReactNode\n columnName?: string\n }[] = []\n const { secondaryLabels = [] } = genericCardSchema\n const customLabelConfig = genericCardSchema.customSecondaryLabelConfig\n\n // PORTALS-3549 - if a DOI exists or can be created by the current user, show it\n if (\n showDoiCardLabel &&\n portalDoiConfiguration &&\n candidateDoiId &&\n cardIsInView\n ) {\n values.push({\n columnDisplayName: 'DOI',\n value: (\n <PortalDOI\n portalId={portalDoiConfiguration.portalId}\n resourceId={candidateDoiId}\n />\n ),\n })\n }\n\n // Overwrite the 'HOW TO DOWNLOAD' link if a synapse ID is available\n if (customLabelConfig?.isVisible(schema, data)) {\n const { key, value } = customLabelConfig\n if (resolvedDownloadCartSynIdValue) {\n values.push({\n columnDisplayName: 'HOW TO DOWNLOAD',\n value: (\n <Link onClick={() => setShowDownloadConfirmation(val => !val)}>\n Click here to add to Synapse download list\n </Link>\n ),\n })\n } else {\n values.push({ columnDisplayName: key, value })\n }\n }\n\n const isView = table && !isTableEntity(table)\n for (let i = 0; i < secondaryLabels.length; i += 1) {\n const columnName = secondaryLabels[i]\n const rawValue: string | undefined = data[schema[columnName]]\n let renderedValue: React.ReactNode = rawValue\n let columnDisplayName\n if (renderedValue) {\n // PORTALS-2750: special rendering of the datasetSizeInBytes (for Dataset Collections)\n if (\n isDatasetCollection(table as Entity) &&\n columnName === 'datasetSizeInBytes'\n ) {\n columnDisplayName = 'Size'\n renderedValue = calculateFriendlyFileSize(parseInt(rawValue))\n } // SWC-6115: special rendering of the version column (for Views)\n else if (isView && columnName === 'currentVersion') {\n const synapseId = data[schema.id]\n renderedValue = (\n <VersionLabel synapseId={synapseId} version={rawValue} />\n )\n columnDisplayName = 'Version'\n } else {\n const labelLink = labelLinkConfig?.find(\n el => el.matchColumnName === columnName,\n )\n renderedValue = (\n <SynapseCardLabel\n value={rawValue}\n columnName={columnName}\n labelLink={labelLink}\n isHeader={isHeader}\n selectColumns={selectColumns}\n columnModels={columnModels}\n rowData={data}\n columnIconOptions={columnIconOptions}\n />\n )\n columnDisplayName = getColumnDisplayName(columnName)\n }\n values.push({ columnDisplayName, value: renderedValue, columnName })\n }\n }\n\n const fileHandleId = imageFileHandleIdValue || linkValue\n\n /**\n * To show a direct download link to a file, we need to determine the association that gives permission to download the file.\n */\n const fileHandleAssociation = getFileHandleAssociation(\n table,\n fileHandleId,\n data[schema.id],\n )\n\n const descriptionSubTitle = getColumnDisplayName(\n genericCardSchema.description || '',\n )\n\n const doiColumnIndex = getColumnIndex('doi', selectColumns, columnModels)\n const doiValue =\n doiColumnIndex !== undefined ? data[doiColumnIndex] : undefined\n\n // Normalize ctaLinkConfig to array and resolve each config\n const ctaLinkConfigs = ctaLinkConfig\n ? Array.isArray(ctaLinkConfig)\n ? ctaLinkConfig\n : [ctaLinkConfig]\n : []\n const resolvedCtaLinkConfigs = ctaLinkConfigs\n .map(config => {\n const ctaLinkValue: string = data[schema[config.link]] || ''\n if (!ctaLinkValue) return null\n const { href, target } = getLinkParams(\n ctaLinkValue,\n undefined, //card link config\n data,\n schema,\n rowId,\n )\n return {\n text: config.text,\n href,\n target,\n }\n })\n .filter(Boolean) as { text: string; href: string; target?: string }[]\n\n let croissantButton = <></>\n if (\n resolvedSynapseEntityId != null &&\n resolvedSynapseEntityVersionNumber != null\n ) {\n croissantButton = (\n <CroissantButton\n datasetId={resolvedSynapseEntityId}\n datasetVersionNumber={resolvedSynapseEntityVersionNumber}\n />\n )\n }\n\n const resolvedCardTypeAdornment = CardTypeAdornment ? (\n <CardTypeAdornment schema={schema} data={data} />\n ) : null\n\n return (\n <GenericCard\n ref={ref}\n icon={\n <GenericCardIcon\n type={\n useTypeColumnForIcon ? data[schema['type']] : genericCardSchema.type\n }\n useTypeForIcon={useTypeColumnForIcon}\n thumbnailRequiresPadding={genericCardSchema.thumbnailRequiresPadding}\n imageFileHandleId={imageFileHandleIdValue}\n fileHandleAssociation={fileHandleAssociation}\n iconOptions={iconOptions}\n iconValue={iconValue}\n />\n }\n isHeader={isHeader}\n sustainabilityScorecard={sustainabilityScorecard}\n headerCardVariant={headerCardVariant}\n type={type}\n title={title}\n subtitle={subTitle}\n titleLinkConfiguration={{ target, href }}\n cardTypeAdornment={resolvedCardTypeAdornment}\n titleAsFileHandleLinkConfiguration={\n !titleLinkConfig &&\n titleColumnType === ColumnTypeEnum.FILEHANDLEID &&\n fileHandleAssociation\n ? {\n fileHandleAssociation: fileHandleAssociation,\n showDownloadIcon: type !== SynapseConstants.EXPERIMENTAL,\n }\n : undefined\n }\n ctaLinkConfig={\n resolvedCtaLinkConfigs.length > 0 ? resolvedCtaLinkConfigs : undefined\n }\n titleAreaRightContent={resolvedTitleAreaRightContent}\n description={description}\n descriptionSubTitle={descriptionSubTitle}\n descriptionConfig={descriptionConfig}\n charCountCutoff={charCountCutoff}\n labels={values}\n secondaryLabelLimit={secondaryLabelLimit}\n useStylesForDisplayedImage={Boolean(imageFileHandleIdValue)}\n cardTopContent={\n resolvedDownloadCartSynIdValue && (\n <Collapse in={showDownloadConfirmation}>\n <EntityDownloadConfirmation\n entityId={resolvedDownloadCartSynIdValue}\n versionNumber={resolvedDownloadCartVersionNumber}\n handleClose={() => setShowDownloadConfirmation(false)}\n onIsLoadingChange={isLoading => {\n setDownloadButtonLoading(isLoading)\n }}\n />\n </Collapse>\n )\n }\n renderedIconList={\n // If the portal configs has columnIconOptions.columns.dataType option\n // and the column value is not null, display the card data type icons\n columnIconOptions?.columns?.dataType &&\n dataTypeIconNames?.length && (\n <div style={{ marginTop: '20px' }}>\n <IconList\n iconConfigs={columnIconOptions.columns.dataType}\n iconNames={JSON.parse(dataTypeIconNames) as string[]}\n commonIconProps={{\n sx: { fontSize: '40px' },\n }}\n useBackground={true}\n useTheme={true}\n />\n </div>\n )\n }\n cardTopButtons={\n <Box sx={{ display: 'flex', gap: 1 }}>\n {croissantButton}\n {/* PORTALS-3386 Use synapseLink in schema to add entity to download cart */}\n {resolvedDownloadCartSynIdValue && (\n <GenericCardActionButton\n onClick={() => setShowDownloadConfirmation(val => !val)}\n variant=\"outlined\"\n startIcon={<GetAppTwoTone sx={{ height: '12px' }} />}\n loading={downloadButtonLoading}\n >\n Download\n </GenericCardActionButton>\n )}\n {includeCitation && doiValue && (\n <CitationPopover\n title={title}\n doi={doiValue}\n boilerplateText={citationBoilerplateText}\n defaultCitationFormat={defaultCitationFormat}\n />\n )}\n {includeShareButton && isHeader && (\n <ShareThisPage {...sharePageLinkButtonProps} />\n )}\n </Box>\n }\n />\n )\n}\n\nexport default TableRowGenericCard\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableRowGenericCard.js","names":[],"sources":["../../../src/components/GenericCard/TableRowGenericCard.tsx"],"sourcesContent":["import { CommonCardProps } from '@/components/CardContainer/CardConfiguration'\nimport {\n getFileHandleAssociation,\n getLinkParams,\n getValueOrMultiValue,\n} from '@/components/GenericCard/CardUtils'\nimport CroissantButton from '@/components/GenericCard/CroissantButton/CroissantButton'\nimport { GenericCardIcon } from '@/components/GenericCard/GenericCardIcon'\nimport PortalDOI from '@/components/GenericCard/PortalDOI/PortalDOI'\nimport {\n getCandidateDoiId,\n useShowDoiCardLabel,\n} from '@/components/GenericCard/PortalDOI/PortalDOIUtils'\nimport { mapRowToRecord } from '@/components/SynapseTable/SynapseTableUtils'\nimport { useGetEntity } from '@/synapse-queries'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport {\n isDatasetCollection,\n isTableEntity,\n} from '@/utils/functions/EntityTypeUtils'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport { getColumnIndex } from '@/utils/functions/SqlFunctions'\nimport { TargetEnum } from '@/utils/html/TargetEnum'\nimport * as SynapseConstants from '@/utils/SynapseConstants'\nimport { GetAppTwoTone } from '@mui/icons-material'\nimport { Box, Collapse, Link, Stack, Typography } from '@mui/material'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n Entity,\n SelectColumn,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport React, { useCallback, useMemo, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport CitationPopover from '../CitationPopover'\nimport { EntityDownloadConfirmation } from '../EntityDownloadConfirmation'\nimport { HeaderCardVariant } from '../HeaderCard'\nimport IconList from '../IconList'\nimport { useQueryContext } from '../QueryContext/QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport ShareThisPage, {\n ShareThisPageProps,\n} from '../ShareThisPage/ShareThisPage'\nimport { SustainabilityScorecardProps } from '../SustainabilityScorecard/SustainabilityScorecard'\nimport GenericCard from './GenericCard'\nimport GenericCardActionButton from './GenericCardActionButton'\nimport { PortalDOIConfiguration } from './PortalDOI/PortalDOIConfiguration'\nimport { SynapseCardLabel } from './SynapseCardLabel'\nimport { useResolvedSynapseEntity } from './useResolvedSynapseEntity'\n\ntype RowSynapseEntityConfig = {\n /** Use the table rowId to resolve the Synapse entity ID. */\n id: {\n source: 'rowId'\n }\n /** Use the table rowVersionNumber to resolve the Synapse entity version (if available). */\n version?: {\n source: 'rowVersionNumber'\n }\n}\n\ntype ColumnSynapseEntityConfig = {\n /** Use a column value to resolve the Synapse entity ID. */\n id: {\n source: 'column'\n columnName: string\n }\n /** Use a column value to resolve the Synapse entity version. */\n version?: {\n source: 'column'\n columnName: string\n }\n}\n\nexport type SynapseEntityConfig =\n | RowSynapseEntityConfig\n | ColumnSynapseEntityConfig\n\n/**\n * Maps a table query result to a GenericCard.\n */\nexport type TableToGenericCardMapping = {\n /** The 'type' of resource a card refers to. Renders a label on the card with this string value.\n * Can be hidden by setting it to '' (empty string)\n */\n type: string\n /** The column name whose data contains the title of the card */\n title: string\n /** The column name whose data contains the subtitle of the card */\n subTitle?: string\n /** The column name whose data contains the description of the card */\n description?: string\n /** If true, a 'Cite As' button will be displayed for those cards with a DOI in the 'doi' column */\n includeCitation?: boolean\n /** If true, a 'Share this page' button will be displayed */\n includeShareButton?: boolean\n /**\n * Configuration for displaying the SustainabilityScorecard component\n */\n sustainabilityScorecard?: SustainabilityScorecardProps\n /** The initial citation format to use in the 'Cite As' UI */\n defaultCitationFormat?: 'bibtex' | 'apa' | 'ieee' | 'nature' | 'science'\n /** Static text displayed in the 'Cite As' UI */\n citationBoilerplateText?: string\n /** The column name whose data contains the value used to map to the icon */\n icon?: string\n /** The column name whose data contains an image file handle to be displayed on the card */\n imageFileHandleColumnName?: string\n /** Static boolean value used if the image displayed using `imageFileHandleColumnName` requires extra padding */\n thumbnailRequiresPadding?: boolean\n /** Array of column names to be used for labels in the Card Footer */\n secondaryLabels?: string[]\n /** Can be used to add a custom secondary label */\n customSecondaryLabelConfig?: {\n /** The displayed label key */\n key: string\n /** The value to display */\n value: React.ReactNode\n /** Callback to determine visibility of the label\n * @param schema the mapping of columnName to data index\n * @param data the row data\n */\n isVisible: (schema: Record<string, number>, data: string[]) => boolean\n }\n /** Column name of the link value if the title should be linked */\n link?: string\n /** Column name of the STRING_LIST column that includes icon names that represent icons that should be displayed on the card */\n dataTypeIconNames?: string\n /**\n * Ordered list of column names to display to the right of the title area.\n * Each renders as \"Display Name: Value\" on its own line. Rows with empty values are skipped.\n * The display name is derived from getColumnDisplayName (respects column aliases and unCamelCase).\n *\n * Can also be a function that receives the schema and row data and returns the list of column\n * names to display, allowing the displayed details to vary based on the row's actual values.\n */\n titleAreaDetails?:\n | string[]\n | ((schema: Record<string, number>, data: string[]) => string[])\n /** Configuration for resolving the Synapse entity ID/version represented by each card row.\n * The ID and version sources must both reference either row-based values or column-based values.\n */\n synapseEntityConfig?: SynapseEntityConfig\n /** The column name whose data contains a synId that can be used to show a button to add the corresponding entity to the download cart. */\n downloadCartSynId?: string\n /** Configuration to display a DOI, as well as the ability to create one for users with such permission */\n portalDoiConfiguration?: PortalDOIConfiguration\n}\n\nexport type TableRowGenericCardProps = {\n /** The schema that maps a table result to the GenericCard UI */\n genericCardSchema: TableToGenericCardMapping\n /** The table's SelectColumns */\n selectColumns?: SelectColumn[]\n /** The table's ColumnModels */\n columnModels?: ColumnModel[]\n /** If true, the 'type' column will be used as the icon string to choose the icon */\n useTypeColumnForIcon?: boolean\n /** If true, render the card as a HeaderCard */\n isHeader?: boolean\n /** If isHeader is true, use this variant of HeaderCard */\n headerCardVariant?: HeaderCardVariant\n isAlignToLeftNav?: boolean\n /** Mapping of column name to row data index */\n schema: Record<string, number>\n /** The row data */\n data: string[]\n /** The ID of the table row */\n rowId?: number\n /** The versionNumber of the table row */\n versionNumber?: number\n /** Optional props for the ShareThisPage component */\n sharePageLinkButtonProps?: ShareThisPageProps\n /** Optional function that receives schema and data and returns a ReactNode to be rendered next to the card type */\n CardTypeAdornment?: React.ComponentType<{\n schema: Record<string, number>\n data: string[]\n }>\n} & CommonCardProps\n\n// SWC-6115: special rendering of the version column (for Views)\nfunction VersionLabel(props: { synapseId: string; version: string }) {\n const { synapseId, version } = props\n return (\n <span>\n {version}&nbsp;&nbsp;\n <a\n target={TargetEnum.NEW_WINDOW}\n rel=\"noopener noreferrer\"\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${synapseId}.${version}`}\n >\n (Show Version History on Synapse)\n </a>\n </span>\n )\n}\n\n/**\n * Maps a table row to a GenericCard.\n */\nexport function TableRowGenericCard(props: TableRowGenericCardProps) {\n const [showDownloadConfirmation, setShowDownloadConfirmation] =\n useState(false)\n const [downloadButtonLoading, setDownloadButtonLoading] = useState(false)\n\n const { entityId, versionNumber } = useQueryContext()\n const { getColumnDisplayName } = useQueryVisualizationContext()\n\n const { ref, inView: cardIsInView } = useInView()\n\n const { data: table } = useGetEntity<Table>(entityId, versionNumber)\n\n const {\n schema,\n data,\n rowId,\n versionNumber: rowVersionNumber,\n genericCardSchema,\n secondaryLabelLimit,\n sharePageLinkButtonProps,\n selectColumns,\n columnModels,\n iconOptions,\n useTypeColumnForIcon = false,\n isHeader = false,\n sustainabilityScorecard,\n headerCardVariant,\n titleLinkConfig,\n ctaLinkConfig,\n labelLinkConfig,\n descriptionConfig,\n columnIconOptions,\n CardTypeAdornment,\n charCountCutoff,\n } = props\n\n const {\n link = '',\n type,\n includeCitation,\n includeShareButton,\n defaultCitationFormat,\n citationBoilerplateText,\n downloadCartSynId,\n portalDoiConfiguration,\n } = genericCardSchema\n const title = data[schema[genericCardSchema.title]]\n let subTitle =\n genericCardSchema.subTitle && data[schema[genericCardSchema.subTitle]]\n subTitle =\n genericCardSchema.subTitle &&\n getValueOrMultiValue({\n value: subTitle,\n columnName: genericCardSchema.subTitle,\n selectColumns,\n columnModels,\n }).str\n const description = data[schema[genericCardSchema.description || '']]\n const iconValue = data[schema[genericCardSchema.icon || '']]\n const dataTypeIconNames =\n data[schema[genericCardSchema.dataTypeIconNames || '']]\n const imageFileHandleIdValue =\n data[schema[genericCardSchema.imageFileHandleColumnName || '']]\n const titleColumnModel = columnModels?.find(\n el => genericCardSchema.link === el.name,\n )\n const titleColumnType = titleColumnModel?.columnType\n // wrap link in parens because undefined would throw an error\n const linkValue: string = data[schema[link]] || ''\n const { href, target } = getLinkParams(\n linkValue,\n titleLinkConfig,\n data,\n schema,\n rowId,\n )\n\n const synapseEntityConfig = genericCardSchema.synapseEntityConfig\n\n const getColumnValue = useCallback(\n (columnName?: string) => {\n if (!columnName) {\n return undefined\n }\n const columnIndex = schema[columnName]\n if (columnIndex === undefined) {\n return undefined\n }\n return data[columnIndex]\n },\n [schema, data],\n )\n\n const resolvedTitleAreaRightContent = useMemo(() => {\n const { titleAreaDetails } = genericCardSchema\n if (!titleAreaDetails) return undefined\n const columns =\n typeof titleAreaDetails === 'function'\n ? titleAreaDetails(schema, data)\n : titleAreaDetails\n if (columns.length === 0) return undefined\n const rows = columns\n .map(columnName => {\n const rawValue: string | undefined = data[schema[columnName]]\n if (!rawValue) return null\n return { name: getColumnDisplayName(columnName), rawValue, columnName }\n })\n .filter(Boolean) as {\n name: string\n rawValue: string\n columnName: string\n }[]\n if (rows.length === 0) return undefined\n return (\n <Stack direction=\"column\" gap=\"4px\">\n {rows.map(({ name, rawValue, columnName }) => (\n <Stack key={columnName} direction=\"row\" gap=\"4px\" alignItems=\"center\">\n <Typography component=\"span\" variant=\"body1\">\n {name}:\n </Typography>\n <SynapseCardLabel\n value={rawValue}\n columnName={columnName}\n labelLink={undefined}\n isHeader={isHeader}\n selectColumns={selectColumns}\n columnModels={columnModels}\n rowData={data}\n columnIconOptions={columnIconOptions}\n />\n </Stack>\n ))}\n </Stack>\n )\n }, [\n genericCardSchema,\n data,\n schema,\n getColumnDisplayName,\n isHeader,\n selectColumns,\n columnModels,\n columnIconOptions,\n ])\n\n const {\n entityId: resolvedSynapseEntityId,\n entityVersionNumber: resolvedSynapseEntityVersionNumber,\n } = useResolvedSynapseEntity({\n synapseEntityConfig,\n getColumnValue,\n rowId,\n rowVersionNumber,\n })\n\n let resolvedDownloadCartSynIdValue = resolvedSynapseEntityId\n let resolvedDownloadCartVersionNumber = resolvedSynapseEntityVersionNumber\n\n if (downloadCartSynId) {\n const reference = parseSynId(getColumnValue(downloadCartSynId) ?? '')\n resolvedDownloadCartSynIdValue = reference?.targetId\n resolvedDownloadCartVersionNumber = reference?.targetVersionNumber\n }\n\n // Transform the row to a record of (columnName, value) pairs for compatibility with getCandidateDoiId\n const dataAsRecord: Record<string, string | null> = useMemo(\n () => mapRowToRecord(data, schema),\n [data, schema],\n )\n\n const candidateDoiId = getCandidateDoiId({\n data: dataAsRecord,\n portalDoiConfiguration,\n })\n\n const showDoiCardLabel = useShowDoiCardLabel({\n portalId: portalDoiConfiguration?.portalId,\n resourceId: candidateDoiId,\n })\n\n const values: {\n columnDisplayName: string\n value: React.ReactNode\n columnName?: string\n }[] = []\n const { secondaryLabels = [] } = genericCardSchema\n const customLabelConfig = genericCardSchema.customSecondaryLabelConfig\n\n // PORTALS-3549 - if a DOI exists or can be created by the current user, show it\n if (\n showDoiCardLabel &&\n portalDoiConfiguration &&\n candidateDoiId &&\n cardIsInView\n ) {\n values.push({\n columnDisplayName: 'DOI',\n value: (\n <PortalDOI\n portalId={portalDoiConfiguration.portalId}\n resourceId={candidateDoiId}\n />\n ),\n })\n }\n\n // Overwrite the 'HOW TO DOWNLOAD' link if a synapse ID is available\n if (customLabelConfig?.isVisible(schema, data)) {\n const { key, value } = customLabelConfig\n if (resolvedDownloadCartSynIdValue) {\n values.push({\n columnDisplayName: 'HOW TO DOWNLOAD',\n value: (\n <Link onClick={() => setShowDownloadConfirmation(val => !val)}>\n Click here to add to Synapse download list\n </Link>\n ),\n })\n } else {\n values.push({ columnDisplayName: key, value })\n }\n }\n\n const isView = table && !isTableEntity(table)\n for (let i = 0; i < secondaryLabels.length; i += 1) {\n const columnName = secondaryLabels[i]\n const rawValue: string | undefined = data[schema[columnName]]\n let renderedValue: React.ReactNode = rawValue\n let columnDisplayName\n if (renderedValue && rawValue !== '[]' && rawValue !== '[\"\"]') {\n // PORTALS-2750: special rendering of the datasetSizeInBytes (for Dataset Collections)\n if (\n isDatasetCollection(table as Entity) &&\n columnName === 'datasetSizeInBytes'\n ) {\n columnDisplayName = 'Size'\n renderedValue = calculateFriendlyFileSize(parseInt(rawValue))\n } // SWC-6115: special rendering of the version column (for Views)\n else if (isView && columnName === 'currentVersion') {\n const synapseId = data[schema.id]\n renderedValue = (\n <VersionLabel synapseId={synapseId} version={rawValue} />\n )\n columnDisplayName = 'Version'\n } else {\n const labelLink = labelLinkConfig?.find(\n el => el.matchColumnName === columnName,\n )\n renderedValue = (\n <SynapseCardLabel\n value={rawValue}\n columnName={columnName}\n labelLink={labelLink}\n isHeader={isHeader}\n selectColumns={selectColumns}\n columnModels={columnModels}\n rowData={data}\n columnIconOptions={columnIconOptions}\n />\n )\n columnDisplayName = getColumnDisplayName(columnName)\n }\n values.push({ columnDisplayName, value: renderedValue, columnName })\n }\n }\n\n const fileHandleId = imageFileHandleIdValue || linkValue\n\n /**\n * To show a direct download link to a file, we need to determine the association that gives permission to download the file.\n */\n const fileHandleAssociation = getFileHandleAssociation(\n table,\n fileHandleId,\n data[schema.id],\n )\n\n const descriptionSubTitle = getColumnDisplayName(\n genericCardSchema.description || '',\n )\n\n const doiColumnIndex = getColumnIndex('doi', selectColumns, columnModels)\n const doiValue =\n doiColumnIndex !== undefined ? data[doiColumnIndex] : undefined\n\n // Normalize ctaLinkConfig to array and resolve each config\n const ctaLinkConfigs = ctaLinkConfig\n ? Array.isArray(ctaLinkConfig)\n ? ctaLinkConfig\n : [ctaLinkConfig]\n : []\n const resolvedCtaLinkConfigs = ctaLinkConfigs\n .map(config => {\n const ctaLinkValue: string = data[schema[config.link]] || ''\n if (!ctaLinkValue) return null\n const { href, target } = getLinkParams(\n ctaLinkValue,\n undefined, //card link config\n data,\n schema,\n rowId,\n )\n return {\n text: config.text,\n href,\n target,\n }\n })\n .filter(Boolean) as { text: string; href: string; target?: string }[]\n\n let croissantButton = <></>\n if (\n resolvedSynapseEntityId != null &&\n resolvedSynapseEntityVersionNumber != null\n ) {\n croissantButton = (\n <CroissantButton\n datasetId={resolvedSynapseEntityId}\n datasetVersionNumber={resolvedSynapseEntityVersionNumber}\n />\n )\n }\n\n const resolvedCardTypeAdornment = CardTypeAdornment ? (\n <CardTypeAdornment schema={schema} data={data} />\n ) : null\n\n return (\n <GenericCard\n ref={ref}\n icon={\n <GenericCardIcon\n type={\n useTypeColumnForIcon ? data[schema['type']] : genericCardSchema.type\n }\n useTypeForIcon={useTypeColumnForIcon}\n thumbnailRequiresPadding={genericCardSchema.thumbnailRequiresPadding}\n imageFileHandleId={imageFileHandleIdValue}\n fileHandleAssociation={fileHandleAssociation}\n iconOptions={iconOptions}\n iconValue={iconValue}\n />\n }\n isHeader={isHeader}\n sustainabilityScorecard={sustainabilityScorecard}\n headerCardVariant={headerCardVariant}\n type={type}\n title={title}\n subtitle={subTitle}\n titleLinkConfiguration={{ target, href }}\n cardTypeAdornment={resolvedCardTypeAdornment}\n titleAsFileHandleLinkConfiguration={\n !titleLinkConfig &&\n titleColumnType === ColumnTypeEnum.FILEHANDLEID &&\n fileHandleAssociation\n ? {\n fileHandleAssociation: fileHandleAssociation,\n showDownloadIcon: type !== SynapseConstants.EXPERIMENTAL,\n }\n : undefined\n }\n ctaLinkConfig={\n resolvedCtaLinkConfigs.length > 0 ? resolvedCtaLinkConfigs : undefined\n }\n titleAreaRightContent={resolvedTitleAreaRightContent}\n description={description}\n descriptionSubTitle={descriptionSubTitle}\n descriptionConfig={descriptionConfig}\n charCountCutoff={charCountCutoff}\n labels={values}\n secondaryLabelLimit={secondaryLabelLimit}\n useStylesForDisplayedImage={Boolean(imageFileHandleIdValue)}\n cardTopContent={\n resolvedDownloadCartSynIdValue && (\n <Collapse in={showDownloadConfirmation}>\n <EntityDownloadConfirmation\n entityId={resolvedDownloadCartSynIdValue}\n versionNumber={resolvedDownloadCartVersionNumber}\n handleClose={() => setShowDownloadConfirmation(false)}\n onIsLoadingChange={isLoading => {\n setDownloadButtonLoading(isLoading)\n }}\n />\n </Collapse>\n )\n }\n renderedIconList={\n // If the portal configs has columnIconOptions.columns.dataType option\n // and the column value is not null, display the card data type icons\n columnIconOptions?.columns?.dataType &&\n dataTypeIconNames?.length && (\n <div style={{ marginTop: '20px' }}>\n <IconList\n iconConfigs={columnIconOptions.columns.dataType}\n iconNames={JSON.parse(dataTypeIconNames) as string[]}\n commonIconProps={{\n sx: { fontSize: '40px' },\n }}\n useBackground={true}\n useTheme={true}\n />\n </div>\n )\n }\n cardTopButtons={\n <Box sx={{ display: 'flex', gap: 1 }}>\n {croissantButton}\n {/* PORTALS-3386 Use synapseLink in schema to add entity to download cart */}\n {resolvedDownloadCartSynIdValue && (\n <GenericCardActionButton\n onClick={() => setShowDownloadConfirmation(val => !val)}\n variant=\"outlined\"\n startIcon={<GetAppTwoTone sx={{ height: '12px' }} />}\n loading={downloadButtonLoading}\n >\n Download\n </GenericCardActionButton>\n )}\n {includeCitation && doiValue && (\n <CitationPopover\n title={title}\n doi={doiValue}\n boilerplateText={citationBoilerplateText}\n defaultCitationFormat={defaultCitationFormat}\n />\n )}\n {includeShareButton && isHeader && (\n <ShareThisPage {...sharePageLinkButtonProps} />\n )}\n </Box>\n }\n />\n )\n}\n\nexport default TableRowGenericCard\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuLA,SAAS,GAAa,GAA+C;CACnE,IAAM,EAAE,cAAW,eAAY;AAC/B,QACE,kBAAC,QAAD,EAAA,UAAA;EACG;EAAQ;EACT,kBAAC,KAAD;GACE,QAAQ,EAAW;GACnB,KAAI;GACJ,MAAM,GAAG,EAA2B,OAAO,UAAU,EAAU,GAAG;aACnE;GAEG,CAAA;EACC,EAAA,CAAA;;AAOX,SAAgB,EAAoB,GAAiC;CACnE,IAAM,CAAC,GAA0B,KAC/B,EAAS,GAAM,EACX,CAAC,IAAuB,MAA4B,EAAS,GAAM,EAEnE,EAAE,cAAU,sBAAkB,IAAiB,EAC/C,EAAE,4BAAyB,GAA8B,EAEzD,EAAE,SAAK,QAAQ,OAAiB,IAAW,EAE3C,EAAE,MAAM,MAAU,GAAoB,IAAU,GAAc,EAE9D,EACJ,WACA,SACA,UACA,eAAe,IACf,sBACA,yBACA,8BACA,kBACA,iBACA,iBACA,0BAAuB,IACvB,cAAW,IACX,6BACA,uBACA,oBACA,kBACA,qBACA,uBACA,sBACA,sBACA,wBACE,GAEE,EACJ,WAAO,IACP,SACA,qBACA,wBACA,2BACA,6BACA,sBACA,8BACE,GACE,IAAQ,EAAK,EAAO,EAAkB,SACxC,IACF,EAAkB,YAAY,EAAK,EAAO,EAAkB;AAC9D,KACE,EAAkB,YAClB,GAAqB;EACnB,OAAO;EACP,YAAY,EAAkB;EAC9B;EACA;EACD,CAAC,CAAC;CACL,IAAM,KAAc,EAAK,EAAO,EAAkB,eAAe,MAC3D,KAAY,EAAK,EAAO,EAAkB,QAAQ,MAClD,IACJ,EAAK,EAAO,EAAkB,qBAAqB,MAC/C,IACJ,EAAK,EAAO,EAAkB,6BAA6B,MAIvD,KAHmB,GAAc,MACrC,MAAM,EAAkB,SAAS,EAAG,KACrC,EACyC,YAEpC,IAAoB,EAAK,EAAO,QAAU,IAC1C,EAAE,UAAM,eAAW,EACvB,GACA,GACA,GACA,GACA,EACD,EAEK,KAAsB,EAAkB,qBAExC,IAAiB,IACpB,MAAwB;AACvB,MAAI,CAAC,EACH;EAEF,IAAM,IAAc,EAAO;AACvB,YAAgB,KAAA,EAGpB,QAAO,EAAK;IAEd,CAAC,GAAQ,EAAK,CACf,EAEK,KAAgC,QAAc;EAClD,IAAM,EAAE,wBAAqB;AAC7B,MAAI,CAAC,EAAkB;EACvB,IAAM,IACJ,OAAO,KAAqB,aACxB,EAAiB,GAAQ,EAAK,GAC9B;AACN,MAAI,EAAQ,WAAW,EAAG;EAC1B,IAAM,IAAO,EACV,KAAI,MAAc;GACjB,IAAM,IAA+B,EAAK,EAAO;AAEjD,UADK,IACE;IAAE,MAAM,EAAqB,EAAW;IAAE;IAAU;IAAY,GADjD;IAEtB,CACD,OAAO,QAAQ;AAKd,QAAK,WAAW,EACpB,QACE,kBAAC,GAAD;GAAO,WAAU;GAAS,KAAI;aAC3B,EAAK,KAAK,EAAE,SAAM,aAAU,oBAC3B,kBAAC,GAAD;IAAwB,WAAU;IAAM,KAAI;IAAM,YAAW;cAA7D,CACE,kBAAC,IAAD;KAAY,WAAU;KAAO,SAAQ;eAArC,CACG,GAAK,IACK;QACb,kBAAC,GAAD;KACE,OAAO;KACK;KACZ,WAAW,KAAA;KACD;KACK;KACD;KACd,SAAS;KACU;KACnB,CAAA,CACI;MAdI,EAcJ,CACR;GACI,CAAA;IAET;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EAEI,EACJ,UAAU,GACV,qBAAqB,MACnB,GAAyB;EAC3B;EACA;EACA;EACA;EACD,CAAC,EAEE,IAAiC,GACjC,IAAoC;AAExC,KAAI,GAAmB;EACrB,IAAM,IAAY,EAAW,EAAe,EAAkB,IAAI,GAAG;AAErE,EADA,IAAiC,GAAW,UAC5C,IAAoC,GAAW;;CASjD,IAAM,IAAiB,EAAkB;EACvC,MANkD,QAC5C,GAAe,GAAM,EAAO,EAClC,CAAC,GAAM,EAAO,CAIR;EACN;EACD,CAAC,EAEI,KAAmB,GAAoB;EAC3C,UAAU,GAAwB;EAClC,YAAY;EACb,CAAC,EAEI,IAIA,EAAE,EACF,EAAE,qBAAkB,EAAE,KAAK,GAC3B,IAAoB,EAAkB;AAqB5C,KAjBE,MACA,KACA,KACA,MAEA,EAAO,KAAK;EACV,mBAAmB;EACnB,OACE,kBAAC,IAAD;GACE,UAAU,EAAuB;GACjC,YAAY;GACZ,CAAA;EAEL,CAAC,EAIA,GAAmB,UAAU,GAAQ,EAAK,EAAE;EAC9C,IAAM,EAAE,QAAK,aAAU;AACvB,EAAI,IACF,EAAO,KAAK;GACV,mBAAmB;GACnB,OACE,kBAAC,IAAD;IAAM,eAAe,GAA4B,MAAO,CAAC,EAAI;cAAE;IAExD,CAAA;GAEV,CAAC,GAEF,EAAO,KAAK;GAAE,mBAAmB;GAAK;GAAO,CAAC;;CAIlD,IAAM,KAAS,KAAS,CAAC,EAAc,EAAM;AAC7C,MAAK,IAAI,IAAI,GAAG,IAAI,EAAgB,QAAQ,KAAK,GAAG;EAClD,IAAM,IAAa,EAAgB,IAC7B,IAA+B,EAAK,EAAO,KAC7C,IAAiC,GACjC;AACJ,MAAI,KAAiB,MAAa,QAAQ,MAAa,UAAQ;AAE7D,OACE,EAAoB,EAAgB,IACpC,MAAe,qBAGf,CADA,IAAoB,QACpB,IAAgB,EAA0B,SAAS,EAAS,CAAC;YAEtD,MAAU,MAAe,kBAAkB;IAClD,IAAM,IAAY,EAAK,EAAO;AAI9B,IAHA,IACE,kBAAC,IAAD;KAAyB;KAAW,SAAS;KAAY,CAAA,EAE3D,IAAoB;UACf;IACL,IAAM,IAAY,IAAiB,MACjC,MAAM,EAAG,oBAAoB,EAC9B;AAaD,IAZA,IACE,kBAAC,GAAD;KACE,OAAO;KACK;KACD;KACD;KACK;KACD;KACd,SAAS;KACU;KACnB,CAAA,EAEJ,IAAoB,EAAqB,EAAW;;AAEtD,KAAO,KAAK;IAAE;IAAmB,OAAO;IAAe;IAAY,CAAC;;;CASxE,IAAM,IAAwB,GAC5B,GANmB,KAA0B,GAQ7C,EAAK,EAAO,IACb,EAEK,KAAsB,EAC1B,EAAkB,eAAe,GAClC,EAEK,IAAiB,EAAe,OAAO,GAAe,EAAa,EACnE,IACJ,MAAmB,KAAA,IAAmC,KAAA,IAAvB,EAAK,IAQhC,KALiB,IACnB,MAAM,QAAQ,EAAc,GAC1B,IACA,CAAC,EAAc,GACjB,EAAE,EAEH,KAAI,MAAU;EACb,IAAM,IAAuB,EAAK,EAAO,EAAO,UAAU;AAC1D,MAAI,CAAC,EAAc,QAAO;EAC1B,IAAM,EAAE,SAAM,cAAW,EACvB,GACA,KAAA,GACA,GACA,GACA,EACD;AACD,SAAO;GACL,MAAM,EAAO;GACb;GACA;GACD;GACD,CACD,OAAO,QAAQ,EAEd,IAAkB,kBAAA,IAAA,EAAK,CAAA;AAC3B,CACE,KAA2B,QAC3B,KAAsC,SAEtC,IACE,kBAAC,IAAD;EACE,WAAW;EACX,sBAAsB;EACtB,CAAA;CAIN,IAAM,KAA4B,IAChC,kBAAC,GAAD;EAA2B;EAAc;EAAQ,CAAA,GAC/C;AAEJ,QACE,kBAAC,IAAD;EACO;EACL,MACE,kBAAC,IAAD;GACE,MACE,IAAuB,EAAK,EAAO,QAAW,EAAkB;GAElE,gBAAgB;GAChB,0BAA0B,EAAkB;GAC5C,mBAAmB;GACI;GACV;GACF;GACX,CAAA;EAEM;EACe;EACN;EACb;EACC;EACP,UAAU;EACV,wBAAwB;GAAE;GAAQ;GAAM;EACxC,mBAAmB;EACnB,oCACE,CAAC,KACD,OAAoB,GAAe,gBACnC,IACI;GACyB;GACvB,kBAAkB,MAAS;GAC5B,GACD,KAAA;EAEN,eACE,EAAuB,SAAS,IAAI,IAAyB,KAAA;EAE/D,uBAAuB;EACV;EACQ;EACF;EACF;EACjB,QAAQ;EACa;EACrB,4BAA4B,EAAQ;EACpC,gBACE,KACE,kBAAC,IAAD;GAAU,IAAI;aACZ,kBAAC,IAAD;IACE,UAAU;IACV,eAAe;IACf,mBAAmB,EAA4B,GAAM;IACrD,oBAAmB,MAAa;AAC9B,QAAyB,EAAU;;IAErC,CAAA;GACO,CAAA;EAGf,kBAGE,GAAmB,SAAS,YAC5B,GAAmB,UACjB,kBAAC,OAAD;GAAK,OAAO,EAAE,WAAW,QAAQ;aAC/B,kBAAC,IAAD;IACE,aAAa,EAAkB,QAAQ;IACvC,WAAW,KAAK,MAAM,EAAkB;IACxC,iBAAiB,EACf,IAAI,EAAE,UAAU,QAAQ,EACzB;IACD,eAAe;IACf,UAAU;IACV,CAAA;GACE,CAAA;EAGV,gBACE,kBAAC,IAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,KAAK;IAAG;aAApC;IACG;IAEA,KACC,kBAAC,IAAD;KACE,eAAe,GAA4B,MAAO,CAAC,EAAI;KACvD,SAAQ;KACR,WAAW,kBAAC,IAAD,EAAe,IAAI,EAAE,QAAQ,QAAQ,EAAI,CAAA;KACpD,SAAS;eACV;KAEyB,CAAA;IAE3B,MAAmB,KAClB,kBAAC,IAAD;KACS;KACP,KAAK;KACL,iBAAiB;KACM;KACvB,CAAA;IAEH,MAAsB,KACrB,kBAAC,IAAD,EAAe,GAAI,IAA4B,CAAA;IAE7C;;EAER,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Goals.Mobile.js","names":[],"sources":["../../../src/components/Goals/Goals.Mobile.tsx"],"sourcesContent":["import { GoalsDataProps } from './Goals'\nimport ExpandableContent from '../home_page/ExpandableContent'\nimport QueryCount from '../QueryCount/QueryCount'\nimport { Button } from '@mui/material'\n\nexport default function GoalsMobile({\n link,\n summary,\n countSql,\n title,\n linkText = 'Explore',\n}: GoalsDataProps) {\n const titleElement = (\n <div className=\"Goals__Mobile__Header\">\n {countSql && (\n <span className=\"Goals__Mobile__Header__Count\">\n <QueryCount parens={false} query={{ sql: countSql }} />\n </span>\n )}\n <span className=\"Goals__Mobile__Header__Title\"> {title} </span>\n </div>\n )\n const content = (\n <div className=\"Goals__Mobile__Content\">\n <p>{summary}</p>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n className=\"Goals__Mobile__Content__Link\"\n href={link}\n >\n {linkText}\n </Button>\n </div>\n )\n return <ExpandableContent title={titleElement} content={content} />\n}\n"],"mappings":";;;;;AAKA,SAAwB,EAAY,EAClC,SACA,YACA,aACA,UACA,cAAW,aACM;AAwBjB,QAAO,kBAAC,GAAD;EAAmB,OAtBxB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,KACC,kBAAC,QAAD;IAAM,WAAU;cACd,kBAAC,GAAD;KAAY,QAAQ;KAAO,OAAO,EAAE,KAAK,GAAU;KAAI,CAAA;IAClD,CAAA,EAET,kBAAC,QAAD;IAAM,WAAU;cAAhB;KAA+C;KAAE;KAAM;KAAQ;MAC3D;;EAegD,SAZtD,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD,EAAA,UAAI,GAAY,CAAA,EAChB,kBAAC,GAAD;IACE,SAAQ;IACR,OAAM;IACN,WAAU;IACV,MAAM;cAEL;IACM,CAAA,CACL;;EAE2D,CAAA"}
1
+ {"version":3,"file":"Goals.Mobile.js","names":[],"sources":["../../../src/components/Goals/Goals.Mobile.tsx"],"sourcesContent":["import { GoalsDataProps } from './Goals'\nimport ExpandableContent from '../home_page/ExpandableContent'\nimport QueryCount from '../QueryCount/QueryCount'\nimport { Button } from '@mui/material'\n\nexport default function GoalsMobile({\n link,\n summary,\n countSql,\n title,\n linkText = 'Explore',\n}: GoalsDataProps) {\n const titleElement = (\n <div className=\"Goals__Mobile__Header\">\n {countSql && (\n <span className=\"Goals__Mobile__Header__Count\">\n <QueryCount parens={false} query={{ sql: countSql }} />\n </span>\n )}\n <span className=\"Goals__Mobile__Header__Title\"> {title} </span>\n </div>\n )\n const content = (\n <div className=\"Goals__Mobile__Content\">\n <p>{summary}</p>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n className=\"Goals__Mobile__Content__Link\"\n href={link}\n >\n {linkText}\n </Button>\n </div>\n )\n return <ExpandableContent title={titleElement} content={content} />\n}\n"],"mappings":";;;;;AAKA,SAAwB,EAAY,EAClC,SACA,YACA,aACA,UACA,cAAW,aACM;AAwBjB,QAAO,kBAAC,GAAD;EAAmB,OAtBxB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,KACC,kBAAC,QAAD;IAAM,WAAU;cACd,kBAAC,GAAD;KAAY,QAAQ;KAAO,OAAO,EAAE,KAAK,GAAU;KAAI,CAAA;IAClD,CAAA,EAET,kBAAC,QAAD;IAAM,WAAU;cAAhB;KAA+C;KAAE;KAAM;KAAQ;MAC3D;IAeyB;EAAuB,SAZtD,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD,EAAA,UAAI,GAAY,CAAA,EAChB,kBAAC,GAAD;IACE,SAAQ;IACR,OAAM;IACN,WAAU;IACV,MAAM;cAEL;IACM,CAAA,CACL;IAEgD;EAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Goals.js","names":[],"sources":["../../../src/components/Goals/Goals.tsx"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { SynapseConstants } from '@/utils'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport useGetGoalData from '@/utils/hooks/useGetGoalData'\nimport useShowDesktop from '@/utils/hooks/useShowDesktop'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useMemo } from 'react'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport GoalsDesktop from './Goals.Desktop'\nimport GoalsMobile from './Goals.Mobile'\nimport { Box } from '@mui/material'\n\nexport type GoalsProps = {\n entityId: string\n isAssetIcon?: boolean // If true, the asset will be used as an icon instead of a background image.\n linkText?: string\n}\n\nexport type GoalsDataProps = {\n countSql?: string\n title: string\n summary: string\n link: string\n asset: string\n isAssetIcon: boolean\n linkText?: string\n}\n\nenum ExpectedColumns {\n TABLEID = 'TableId', // Both TableId or CountSql are used to indicate what Table rows to count.\n COUNT_SQL = 'CountSql', // Code uses CountSql over TableId if defined (if the CountSql column is in the schema and filled in).\n TITLE = 'Title',\n SUMMARY = 'Summary',\n LINK = 'Link',\n ASSET = 'Asset',\n}\n\n// PORTALS-2367\nconst GOALS_DESKTOP_MIN_BREAKPOINT = 1200\n\nexport function Goals(props: GoalsProps) {\n const { entityId, isAssetIcon = false, linkText } = props\n const showDesktop = useShowDesktop(GOALS_DESKTOP_MIN_BREAKPOINT)\n const queryBundleRequest: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n query: {\n sql: `select *\n from ${entityId}\n order by ItemOrder`,\n },\n }\n const { data: queryResultBundle } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const { assets: goalAssets, error: goalError } = useGetGoalData(\n entityId,\n queryResultBundle,\n )\n\n const tableIdColumnIndex = getFieldIndex(\n ExpectedColumns.TABLEID,\n queryResultBundle,\n )\n const countSqlColumnIndex = getFieldIndex(\n ExpectedColumns.COUNT_SQL,\n queryResultBundle,\n )\n\n const titleColumnIndex = getFieldIndex(\n ExpectedColumns.TITLE,\n queryResultBundle,\n )\n const summaryColumnIndex = getFieldIndex(\n ExpectedColumns.SUMMARY,\n queryResultBundle,\n )\n const linkColumnIndex = getFieldIndex(ExpectedColumns.LINK, queryResultBundle)\n\n const goalsDataProps = useMemo(() => {\n return queryResultBundle?.queryResult!.queryResults.rows.map(\n (el, index): GoalsDataProps => {\n const values = el.values as string[]\n if (values.some(value => value === null)) {\n // We cast values above assuming there are no null values, emit a warning just in case.\n console.warn('Row has null value(s) when no nulls expected')\n }\n const tableId =\n tableIdColumnIndex > -1 ? values[tableIdColumnIndex] : undefined\n let countSql\n if (countSqlColumnIndex > -1 && values[countSqlColumnIndex]) {\n countSql = values[countSqlColumnIndex]\n } else if (tableId) {\n countSql = `SELECT * FROM ${tableId}`\n }\n const title = values[titleColumnIndex]\n const summary = values[summaryColumnIndex]\n const link = values[linkColumnIndex]\n // assume that we recieve assets in order of rows and there is an asset for each item\n // can revisit if this isn't the case.\n const asset = goalAssets?.[index] ?? ''\n return {\n countSql,\n title,\n summary,\n link,\n asset,\n isAssetIcon,\n }\n },\n )\n }, [\n countSqlColumnIndex,\n goalAssets,\n linkColumnIndex,\n queryResultBundle?.queryResult,\n summaryColumnIndex,\n tableIdColumnIndex,\n titleColumnIndex,\n ])\n\n if (goalError) {\n return <ErrorBanner error={goalError} />\n }\n\n if (!goalsDataProps) {\n return <></>\n }\n\n if (showDesktop) {\n return (\n <Box\n className={`Goals`}\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '7px',\n alignItems: 'stretch',\n justifyContent: 'center',\n }}\n >\n {goalsDataProps.map((props, index) => (\n <GoalsDesktop key={index} {...props} linkText={linkText} />\n ))}\n </Box>\n )\n } else {\n return (\n <div className={`Goals`}>\n {goalsDataProps.map((props, index) => (\n <GoalsMobile key={index} {...props} linkText={linkText} />\n ))}\n </div>\n )\n }\n}\nexport default Goals\n"],"mappings":";;;;;;;;;;;;;AA4BA,IAAK,IAAL,yBAAA,GAAA;QACE,EAAA,UAAA,WACA,EAAA,YAAA,YACA,EAAA,QAAA,SACA,EAAA,UAAA,WACA,EAAA,OAAA,QACA,EAAA,QAAA;EANG,KAAA,EAAA,CAOJ,EAGK,IAA+B;AAErC,SAAgB,EAAM,GAAmB;CACvC,IAAM,EAAE,aAAU,iBAAc,IAAO,gBAAa,GAC9C,IAAc,EAAe,EAA6B,EAa1D,EAAE,MAAM,MACZ,EAb6C;EAC7C,cAAc;EACd;EACA,UACE;EAEF,OAAO,EACL,KAAK;mBACQ,EAAS;iCAEvB;EACF,CAE4C,EAEvC,EAAE,QAAQ,GAAY,OAAO,MAAc,EAC/C,GACA,EACD,EAEK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAsB,EAC1B,EAAgB,WAChB,EACD,EAEK,IAAmB,EACvB,EAAgB,OAChB,EACD,EACK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAkB,EAAc,EAAgB,MAAM,EAAkB,EAExE,IAAiB,QACd,GAAmB,YAAa,aAAa,KAAK,KACtD,GAAI,MAA0B;EAC7B,IAAM,IAAS,EAAG;AAClB,EAAI,EAAO,MAAK,MAAS,MAAU,KAAK,IAEtC,QAAQ,KAAK,+CAA+C;EAE9D,IAAM,IACJ,IAAqB,KAAK,EAAO,KAAsB,KAAA,GACrD;AACJ,EAAI,IAAsB,MAAM,EAAO,KACrC,IAAW,EAAO,KACT,MACT,IAAW,iBAAiB;EAE9B,IAAM,IAAQ,EAAO,IACf,IAAU,EAAO,IACjB,IAAO,EAAO,IAGd,IAAQ,IAAa,MAAU;AACrC,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACD;GAEJ,EACA;EACD;EACA;EACA;EACA,GAAmB;EACnB;EACA;EACA;EACD,CAAC;AA4BA,QA1BE,IACK,kBAAC,GAAD,EAAa,OAAO,GAAa,CAAA,GAGrC,IAID,IAEA,kBAAC,GAAD;EACE,WAAW;EACX,IAAI;GACF,SAAS;GACT,UAAU;GACV,KAAK;GACL,YAAY;GACZ,gBAAgB;GACjB;YAEA,EAAe,KAAK,GAAO,MAC1B,kBAAC,GAAD;GAA0B,GAAI;GAAiB;GAAY,EAAxC,EAAwC,CAC3D;EACE,CAAA,GAIN,kBAAC,OAAD;EAAK,WAAW;YACb,EAAe,KAAK,GAAO,MAC1B,kBAAC,GAAD;GAAyB,GAAI;GAAiB;GAAY,EAAxC,EAAwC,CAC1D;EACE,CAAA,GA1BD,kBAAA,GAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"Goals.js","names":[],"sources":["../../../src/components/Goals/Goals.tsx"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { SynapseConstants } from '@/utils'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport useGetGoalData from '@/utils/hooks/useGetGoalData'\nimport useShowDesktop from '@/utils/hooks/useShowDesktop'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useMemo } from 'react'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport GoalsDesktop from './Goals.Desktop'\nimport GoalsMobile from './Goals.Mobile'\nimport { Box } from '@mui/material'\n\nexport type GoalsProps = {\n entityId: string\n isAssetIcon?: boolean // If true, the asset will be used as an icon instead of a background image.\n linkText?: string\n}\n\nexport type GoalsDataProps = {\n countSql?: string\n title: string\n summary: string\n link: string\n asset: string\n isAssetIcon: boolean\n linkText?: string\n}\n\nenum ExpectedColumns {\n TABLEID = 'TableId', // Both TableId or CountSql are used to indicate what Table rows to count.\n COUNT_SQL = 'CountSql', // Code uses CountSql over TableId if defined (if the CountSql column is in the schema and filled in).\n TITLE = 'Title',\n SUMMARY = 'Summary',\n LINK = 'Link',\n ASSET = 'Asset',\n}\n\n// PORTALS-2367\nconst GOALS_DESKTOP_MIN_BREAKPOINT = 1200\n\nexport function Goals(props: GoalsProps) {\n const { entityId, isAssetIcon = false, linkText } = props\n const showDesktop = useShowDesktop(GOALS_DESKTOP_MIN_BREAKPOINT)\n const queryBundleRequest: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n query: {\n sql: `select *\n from ${entityId}\n order by ItemOrder`,\n },\n }\n const { data: queryResultBundle } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const { assets: goalAssets, error: goalError } = useGetGoalData(\n entityId,\n queryResultBundle,\n )\n\n const tableIdColumnIndex = getFieldIndex(\n ExpectedColumns.TABLEID,\n queryResultBundle,\n )\n const countSqlColumnIndex = getFieldIndex(\n ExpectedColumns.COUNT_SQL,\n queryResultBundle,\n )\n\n const titleColumnIndex = getFieldIndex(\n ExpectedColumns.TITLE,\n queryResultBundle,\n )\n const summaryColumnIndex = getFieldIndex(\n ExpectedColumns.SUMMARY,\n queryResultBundle,\n )\n const linkColumnIndex = getFieldIndex(ExpectedColumns.LINK, queryResultBundle)\n\n const goalsDataProps = useMemo(() => {\n return queryResultBundle?.queryResult!.queryResults.rows.map(\n (el, index): GoalsDataProps => {\n const values = el.values as string[]\n if (values.some(value => value === null)) {\n // We cast values above assuming there are no null values, emit a warning just in case.\n console.warn('Row has null value(s) when no nulls expected')\n }\n const tableId =\n tableIdColumnIndex > -1 ? values[tableIdColumnIndex] : undefined\n let countSql\n if (countSqlColumnIndex > -1 && values[countSqlColumnIndex]) {\n countSql = values[countSqlColumnIndex]\n } else if (tableId) {\n countSql = `SELECT * FROM ${tableId}`\n }\n const title = values[titleColumnIndex]\n const summary = values[summaryColumnIndex]\n const link = values[linkColumnIndex]\n // assume that we recieve assets in order of rows and there is an asset for each item\n // can revisit if this isn't the case.\n const asset = goalAssets?.[index] ?? ''\n return {\n countSql,\n title,\n summary,\n link,\n asset,\n isAssetIcon,\n }\n },\n )\n }, [\n countSqlColumnIndex,\n goalAssets,\n linkColumnIndex,\n queryResultBundle?.queryResult,\n summaryColumnIndex,\n tableIdColumnIndex,\n titleColumnIndex,\n ])\n\n if (goalError) {\n return <ErrorBanner error={goalError} />\n }\n\n if (!goalsDataProps) {\n return <></>\n }\n\n if (showDesktop) {\n return (\n <Box\n className={`Goals`}\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '7px',\n alignItems: 'stretch',\n justifyContent: 'center',\n }}\n >\n {goalsDataProps.map((props, index) => (\n <GoalsDesktop key={index} {...props} linkText={linkText} />\n ))}\n </Box>\n )\n } else {\n return (\n <div className={`Goals`}>\n {goalsDataProps.map((props, index) => (\n <GoalsMobile key={index} {...props} linkText={linkText} />\n ))}\n </div>\n )\n }\n}\nexport default Goals\n"],"mappings":";;;;;;;;;;;;;AA4BA,IAAK,IAAL,yBAAA,GAAA;QACE,EAAA,UAAU,WACV,EAAA,YAAY,YACZ,EAAA,QAAQ,SACR,EAAA,UAAU,WACV,EAAA,OAAO,QACP,EAAA,QAAQ;EANL,KAAA,EAAA,CAOJ,EAGK,IAA+B;AAErC,SAAgB,EAAM,GAAmB;CACvC,IAAM,EAAE,aAAU,iBAAc,IAAO,gBAAa,GAC9C,IAAc,EAAe,EAA6B,EAa1D,EAAE,MAAM,MACZ,EAAwB;EAZxB,cAAc;EACd;EACA,UACE;EAEF,OAAO,EACL,KAAK;mBACQ,EAAS;iCAEvB;EAGuB,CAAmB,EAEvC,EAAE,QAAQ,GAAY,OAAO,MAAc,EAC/C,GACA,EACD,EAEK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAsB,EAC1B,EAAgB,WAChB,EACD,EAEK,IAAmB,EACvB,EAAgB,OAChB,EACD,EACK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAkB,EAAc,EAAgB,MAAM,EAAkB,EAExE,IAAiB,QACd,GAAmB,YAAa,aAAa,KAAK,KACtD,GAAI,MAA0B;EAC7B,IAAM,IAAS,EAAG;AAClB,EAAI,EAAO,MAAK,MAAS,MAAU,KAAK,IAEtC,QAAQ,KAAK,+CAA+C;EAE9D,IAAM,IACJ,IAAqB,KAAK,EAAO,KAAsB,KAAA,GACrD;AACJ,EAAI,IAAsB,MAAM,EAAO,KACrC,IAAW,EAAO,KACT,MACT,IAAW,iBAAiB;EAE9B,IAAM,IAAQ,EAAO,IACf,IAAU,EAAO,IACjB,IAAO,EAAO,IAGd,IAAQ,IAAa,MAAU;AACrC,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACD;GAEJ,EACA;EACD;EACA;EACA;EACA,GAAmB;EACnB;EACA;EACA;EACD,CAAC;AA4BA,QA1BE,IACK,kBAAC,GAAD,EAAa,OAAO,GAAa,CAAA,GAGrC,IAID,IAEA,kBAAC,GAAD;EACE,WAAW;EACX,IAAI;GACF,SAAS;GACT,UAAU;GACV,KAAK;GACL,YAAY;GACZ,gBAAgB;GACjB;YAEA,EAAe,KAAK,GAAO,MAC1B,kBAAC,GAAD;GAA0B,GAAI;GAAiB;GAAY,EAAxC,EAAwC,CAC3D;EACE,CAAA,GAIN,kBAAC,OAAD;EAAK,WAAW;YACb,EAAe,KAAK,GAAO,MAC1B,kBAAC,GAAD;GAAyB,GAAI;GAAiB;GAAY,EAAxC,EAAwC,CAC1D;EACE,CAAA,GA1BD,kBAAA,GAAA,EAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"GoalsV2.Mobile.js","names":[],"sources":["../../../src/components/GoalsV2/GoalsV2.Mobile.tsx"],"sourcesContent":["import { GoalsV2DataProps } from './GoalsV2'\nimport ExpandableContent from '../home_page/ExpandableContent'\nimport QueryCount from '../QueryCount/QueryCount'\nimport { Button } from '@mui/material'\n\nexport default function GoalsV2Mobile({\n link,\n summary,\n countSql,\n title,\n}: GoalsV2DataProps) {\n const titleElement = (\n <div>\n {countSql && (\n <span>\n <QueryCount parens={false} query={{ sql: countSql }} />\n </span>\n )}\n <span> {title} </span>\n </div>\n )\n const content = (\n <div>\n <p>{summary}</p>\n <Button variant=\"contained\" color=\"secondary\" href={link}>\n Explore\n </Button>\n </div>\n )\n return <ExpandableContent title={titleElement} content={content} />\n}\n"],"mappings":";;;;;AAKA,SAAwB,EAAc,EACpC,SACA,YACA,aACA,YACmB;AAmBnB,QAAO,kBAAC,GAAD;EAAmB,OAjBxB,kBAAC,OAAD,EAAA,UAAA,CACG,KACC,kBAAC,QAAD,EAAA,UACE,kBAAC,GAAD;GAAY,QAAQ;GAAO,OAAO,EAAE,KAAK,GAAU;GAAI,CAAA,EAClD,CAAA,EAET,kBAAC,QAAD,EAAA,UAAA;GAAM;GAAE;GAAM;GAAQ,EAAA,CAAA,CAClB,EAAA,CAAA;EAUgD,SAPtD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD,EAAA,UAAI,GAAY,CAAA,EAChB,kBAAC,GAAD;GAAQ,SAAQ;GAAY,OAAM;GAAY,MAAM;aAAM;GAEjD,CAAA,CACL,EAAA,CAAA;EAE2D,CAAA"}
1
+ {"version":3,"file":"GoalsV2.Mobile.js","names":[],"sources":["../../../src/components/GoalsV2/GoalsV2.Mobile.tsx"],"sourcesContent":["import { GoalsV2DataProps } from './GoalsV2'\nimport ExpandableContent from '../home_page/ExpandableContent'\nimport QueryCount from '../QueryCount/QueryCount'\nimport { Button } from '@mui/material'\n\nexport default function GoalsV2Mobile({\n link,\n summary,\n countSql,\n title,\n}: GoalsV2DataProps) {\n const titleElement = (\n <div>\n {countSql && (\n <span>\n <QueryCount parens={false} query={{ sql: countSql }} />\n </span>\n )}\n <span> {title} </span>\n </div>\n )\n const content = (\n <div>\n <p>{summary}</p>\n <Button variant=\"contained\" color=\"secondary\" href={link}>\n Explore\n </Button>\n </div>\n )\n return <ExpandableContent title={titleElement} content={content} />\n}\n"],"mappings":";;;;;AAKA,SAAwB,EAAc,EACpC,SACA,YACA,aACA,YACmB;AAmBnB,QAAO,kBAAC,GAAD;EAAmB,OAjBxB,kBAAC,OAAD,EAAA,UAAA,CACG,KACC,kBAAC,QAAD,EAAA,UACE,kBAAC,GAAD;GAAY,QAAQ;GAAO,OAAO,EAAE,KAAK,GAAU;GAAI,CAAA,EAClD,CAAA,EAET,kBAAC,QAAD,EAAA,UAAA;GAAM;GAAE;GAAM;GAAQ,EAAA,CAAA,CAClB,EAAA,CAUyB;EAAuB,SAPtD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD,EAAA,UAAI,GAAY,CAAA,EAChB,kBAAC,GAAD;GAAQ,SAAQ;GAAY,OAAM;GAAY,MAAM;aAAM;GAEjD,CAAA,CACL,EAAA,CAEgD;EAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"GoalsV2.js","names":[],"sources":["../../../src/components/GoalsV2/GoalsV2.tsx"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { SynapseConstants } from '@/utils'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport useGetGoalData from '@/utils/hooks/useGetGoalData'\nimport useShowDesktop from '@/utils/hooks/useShowDesktop'\nimport { alpha, Box } from '@mui/material'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport PortalSectionHeader from '../PortalSectionHeader'\nimport GoalsV2Desktop from './GoalsV2.Desktop'\nimport GoalsV2Mobile from './GoalsV2.Mobile'\n\nexport type GoalsV2Props = {\n entityId: string\n dataLink: string\n}\n\nexport type GoalsV2DataProps = {\n countSql?: string\n title: string\n summary: string\n link: string\n asset: string\n}\n\nenum ExpectedColumns {\n TABLEID = 'TableId', // Both TableId or CountSql are used to indicate what Table rows to count.\n COUNT_SQL = 'CountSql', // Code uses CountSql over TableId if defined (if the CountSql column is in the schema and filled in).\n TITLE = 'Title',\n SUMMARY = 'Summary',\n LINK = 'Link',\n ASSET = 'Asset',\n}\n\n// PORTALS-2367\nconst GOALSV2_DESKTOP_MIN_BREAKPOINT = 1200\n\nexport const GoalsV2: React.FC<GoalsV2Props> = (props: GoalsV2Props) => {\n const { entityId, dataLink } = props\n const showDesktop = useShowDesktop(GOALSV2_DESKTOP_MIN_BREAKPOINT)\n const queryBundleRequest: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n query: {\n sql: `select * from ${entityId} order by ItemOrder`,\n },\n }\n const { data: queryResultBundle } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const { assets: goalAssets, error: goalError } = useGetGoalData(\n entityId,\n queryResultBundle,\n )\n const tableIdColumnIndex = getFieldIndex(\n ExpectedColumns.TABLEID,\n queryResultBundle,\n )\n const countSqlColumnIndex = getFieldIndex(\n ExpectedColumns.COUNT_SQL,\n queryResultBundle,\n )\n\n const titleColumnIndex = getFieldIndex(\n ExpectedColumns.TITLE,\n queryResultBundle,\n )\n const summaryColumnIndex = getFieldIndex(\n ExpectedColumns.SUMMARY,\n queryResultBundle,\n )\n const linkColumnIndex = getFieldIndex(ExpectedColumns.LINK, queryResultBundle)\n\n const goalsDataArray: GoalsV2DataProps[] =\n queryResultBundle?.queryResult!.queryResults.rows.map((el, index) => {\n const values = el.values as string[]\n if (values.some(value => value === null)) {\n console.warn('Row has null value(s) when no nulls expected')\n }\n const tableId =\n tableIdColumnIndex > -1 ? values[tableIdColumnIndex] : undefined\n let countSql\n if (countSqlColumnIndex > -1 && values[countSqlColumnIndex]) {\n countSql = values[countSqlColumnIndex]\n } else if (tableId) {\n countSql = `SELECT * FROM ${tableId}`\n }\n const title = values[titleColumnIndex]\n const summary = values[summaryColumnIndex]\n const link = values[linkColumnIndex]\n const asset = goalAssets?.[index] ?? ''\n return {\n countSql,\n title,\n summary,\n link,\n asset,\n }\n }) ?? []\n\n const ContentComponent = showDesktop ? GoalsV2Desktop : GoalsV2Mobile\n\n return (\n <Box\n sx={{\n minHeight: '560px',\n padding: { xs: '40px', lg: '80px' },\n }}\n >\n <PortalSectionHeader\n centered\n title=\"What's in the Portal?\"\n buttonText=\"Start Exploring Data\"\n link={dataLink}\n sx={theme => ({\n h2: { borderColor: alpha(theme.palette.primary.main, 0.2) },\n a: { marginTop: '24px', marginBottom: '30px' },\n })}\n />\n {goalError && <ErrorBanner error={goalError} />}\n <div className={`Goals`}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n flexDirection: showDesktop ? 'row' : 'column',\n }}\n >\n {goalsDataArray.map((row, index) => (\n <ContentComponent key={index} {...row} />\n ))}\n </Box>\n </div>\n </Box>\n )\n}\n\nexport default GoalsV2\n"],"mappings":";;;;;;;;;;;;;AAyBA,IAAK,IAAL,yBAAA,GAAA;QACE,EAAA,UAAA,WACA,EAAA,YAAA,YACA,EAAA,QAAA,SACA,EAAA,UAAA,WACA,EAAA,OAAA,QACA,EAAA,QAAA;EANG,KAAA,EAAA,CAOJ,EAGK,IAAiC,MAE1B,KAAmC,MAAwB;CACtE,IAAM,EAAE,aAAU,gBAAa,GACzB,IAAc,EAAe,EAA+B,EAW5D,EAAE,MAAM,MACZ,EAX6C;EAC7C,cAAc;EACd;EACA,UACE;EAEF,OAAO,EACL,KAAK,iBAAiB,EAAS,sBAChC;EACF,CAE4C,EAEvC,EAAE,QAAQ,GAAY,OAAO,MAAc,EAC/C,GACA,EACD,EACK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAsB,EAC1B,EAAgB,WAChB,EACD,EAEK,IAAmB,EACvB,EAAgB,OAChB,EACD,EACK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAkB,EAAc,EAAgB,MAAM,EAAkB,EAExE,IACJ,GAAmB,YAAa,aAAa,KAAK,KAAK,GAAI,MAAU;EACnE,IAAM,IAAS,EAAG;AAClB,EAAI,EAAO,MAAK,MAAS,MAAU,KAAK,IACtC,QAAQ,KAAK,+CAA+C;EAE9D,IAAM,IACJ,IAAqB,KAAK,EAAO,KAAsB,KAAA,GACrD;AACJ,EAAI,IAAsB,MAAM,EAAO,KACrC,IAAW,EAAO,KACT,MACT,IAAW,iBAAiB;EAE9B,IAAM,IAAQ,EAAO,IACf,IAAU,EAAO,IACjB,IAAO,EAAO,IACd,IAAQ,IAAa,MAAU;AACrC,SAAO;GACL;GACA;GACA;GACA;GACA;GACD;GACD,IAAI,EAAE,EAEJ,IAAmB,IAAc,IAAiB;AAExD,QACE,kBAAC,GAAD;EACE,IAAI;GACF,WAAW;GACX,SAAS;IAAE,IAAI;IAAQ,IAAI;IAAQ;GACpC;YAJH;GAME,kBAAC,GAAD;IACE,UAAA;IACA,OAAM;IACN,YAAW;IACX,MAAM;IACN,KAAI,OAAU;KACZ,IAAI,EAAE,aAAa,EAAM,EAAM,QAAQ,QAAQ,MAAM,GAAI,EAAE;KAC3D,GAAG;MAAE,WAAW;MAAQ,cAAc;MAAQ;KAC/C;IACD,CAAA;GACD,KAAa,kBAAC,GAAD,EAAa,OAAO,GAAa,CAAA;GAC/C,kBAAC,OAAD;IAAK,WAAW;cACd,kBAAC,GAAD;KACE,IAAI;MACF,SAAS;MACT,gBAAgB;MAChB,eAAe,IAAc,QAAQ;MACtC;eAEA,EAAe,KAAK,GAAK,MACxB,kBAAC,GAAD,EAA8B,GAAI,GAAO,EAAlB,EAAkB,CACzC;KACE,CAAA;IACF,CAAA;GACF"}
1
+ {"version":3,"file":"GoalsV2.js","names":[],"sources":["../../../src/components/GoalsV2/GoalsV2.tsx"],"sourcesContent":["import useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { SynapseConstants } from '@/utils'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport useGetGoalData from '@/utils/hooks/useGetGoalData'\nimport useShowDesktop from '@/utils/hooks/useShowDesktop'\nimport { alpha, Box } from '@mui/material'\nimport { QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport PortalSectionHeader from '../PortalSectionHeader'\nimport GoalsV2Desktop from './GoalsV2.Desktop'\nimport GoalsV2Mobile from './GoalsV2.Mobile'\n\nexport type GoalsV2Props = {\n entityId: string\n dataLink: string\n}\n\nexport type GoalsV2DataProps = {\n countSql?: string\n title: string\n summary: string\n link: string\n asset: string\n}\n\nenum ExpectedColumns {\n TABLEID = 'TableId', // Both TableId or CountSql are used to indicate what Table rows to count.\n COUNT_SQL = 'CountSql', // Code uses CountSql over TableId if defined (if the CountSql column is in the schema and filled in).\n TITLE = 'Title',\n SUMMARY = 'Summary',\n LINK = 'Link',\n ASSET = 'Asset',\n}\n\n// PORTALS-2367\nconst GOALSV2_DESKTOP_MIN_BREAKPOINT = 1200\n\nexport const GoalsV2: React.FC<GoalsV2Props> = (props: GoalsV2Props) => {\n const { entityId, dataLink } = props\n const showDesktop = useShowDesktop(GOALSV2_DESKTOP_MIN_BREAKPOINT)\n const queryBundleRequest: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n query: {\n sql: `select * from ${entityId} order by ItemOrder`,\n },\n }\n const { data: queryResultBundle } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const { assets: goalAssets, error: goalError } = useGetGoalData(\n entityId,\n queryResultBundle,\n )\n const tableIdColumnIndex = getFieldIndex(\n ExpectedColumns.TABLEID,\n queryResultBundle,\n )\n const countSqlColumnIndex = getFieldIndex(\n ExpectedColumns.COUNT_SQL,\n queryResultBundle,\n )\n\n const titleColumnIndex = getFieldIndex(\n ExpectedColumns.TITLE,\n queryResultBundle,\n )\n const summaryColumnIndex = getFieldIndex(\n ExpectedColumns.SUMMARY,\n queryResultBundle,\n )\n const linkColumnIndex = getFieldIndex(ExpectedColumns.LINK, queryResultBundle)\n\n const goalsDataArray: GoalsV2DataProps[] =\n queryResultBundle?.queryResult!.queryResults.rows.map((el, index) => {\n const values = el.values as string[]\n if (values.some(value => value === null)) {\n console.warn('Row has null value(s) when no nulls expected')\n }\n const tableId =\n tableIdColumnIndex > -1 ? values[tableIdColumnIndex] : undefined\n let countSql\n if (countSqlColumnIndex > -1 && values[countSqlColumnIndex]) {\n countSql = values[countSqlColumnIndex]\n } else if (tableId) {\n countSql = `SELECT * FROM ${tableId}`\n }\n const title = values[titleColumnIndex]\n const summary = values[summaryColumnIndex]\n const link = values[linkColumnIndex]\n const asset = goalAssets?.[index] ?? ''\n return {\n countSql,\n title,\n summary,\n link,\n asset,\n }\n }) ?? []\n\n const ContentComponent = showDesktop ? GoalsV2Desktop : GoalsV2Mobile\n\n return (\n <Box\n sx={{\n minHeight: '560px',\n padding: { xs: '40px', lg: '80px' },\n }}\n >\n <PortalSectionHeader\n centered\n title=\"What's in the Portal?\"\n buttonText=\"Start Exploring Data\"\n link={dataLink}\n sx={theme => ({\n h2: { borderColor: alpha(theme.palette.primary.main, 0.2) },\n a: { marginTop: '24px', marginBottom: '30px' },\n })}\n />\n {goalError && <ErrorBanner error={goalError} />}\n <div className={`Goals`}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n flexDirection: showDesktop ? 'row' : 'column',\n }}\n >\n {goalsDataArray.map((row, index) => (\n <ContentComponent key={index} {...row} />\n ))}\n </Box>\n </div>\n </Box>\n )\n}\n\nexport default GoalsV2\n"],"mappings":";;;;;;;;;;;;;AAyBA,IAAK,IAAL,yBAAA,GAAA;QACE,EAAA,UAAU,WACV,EAAA,YAAY,YACZ,EAAA,QAAQ,SACR,EAAA,UAAU,WACV,EAAA,OAAO,QACP,EAAA,QAAQ;EANL,KAAA,EAAA,CAOJ,EAGK,IAAiC,MAE1B,KAAmC,MAAwB;CACtE,IAAM,EAAE,aAAU,gBAAa,GACzB,IAAc,EAAe,EAA+B,EAW5D,EAAE,MAAM,MACZ,EAAwB;EAVxB,cAAc;EACd;EACA,UACE;EAEF,OAAO,EACL,KAAK,iBAAiB,EAAS,sBAChC;EAGuB,CAAmB,EAEvC,EAAE,QAAQ,GAAY,OAAO,MAAc,EAC/C,GACA,EACD,EACK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAsB,EAC1B,EAAgB,WAChB,EACD,EAEK,IAAmB,EACvB,EAAgB,OAChB,EACD,EACK,IAAqB,EACzB,EAAgB,SAChB,EACD,EACK,IAAkB,EAAc,EAAgB,MAAM,EAAkB,EAExE,IACJ,GAAmB,YAAa,aAAa,KAAK,KAAK,GAAI,MAAU;EACnE,IAAM,IAAS,EAAG;AAClB,EAAI,EAAO,MAAK,MAAS,MAAU,KAAK,IACtC,QAAQ,KAAK,+CAA+C;EAE9D,IAAM,IACJ,IAAqB,KAAK,EAAO,KAAsB,KAAA,GACrD;AACJ,EAAI,IAAsB,MAAM,EAAO,KACrC,IAAW,EAAO,KACT,MACT,IAAW,iBAAiB;EAE9B,IAAM,IAAQ,EAAO,IACf,IAAU,EAAO,IACjB,IAAO,EAAO,IACd,IAAQ,IAAa,MAAU;AACrC,SAAO;GACL;GACA;GACA;GACA;GACA;GACD;GACD,IAAI,EAAE,EAEJ,IAAmB,IAAc,IAAiB;AAExD,QACE,kBAAC,GAAD;EACE,IAAI;GACF,WAAW;GACX,SAAS;IAAE,IAAI;IAAQ,IAAI;IAAQ;GACpC;YAJH;GAME,kBAAC,GAAD;IACE,UAAA;IACA,OAAM;IACN,YAAW;IACX,MAAM;IACN,KAAI,OAAU;KACZ,IAAI,EAAE,aAAa,EAAM,EAAM,QAAQ,QAAQ,MAAM,GAAI,EAAE;KAC3D,GAAG;MAAE,WAAW;MAAQ,cAAc;MAAQ;KAC/C;IACD,CAAA;GACD,KAAa,kBAAC,GAAD,EAAa,OAAO,GAAa,CAAA;GAC/C,kBAAC,OAAD;IAAK,WAAW;cACd,kBAAC,GAAD;KACE,IAAI;MACF,SAAS;MACT,gBAAgB;MAChB,eAAe,IAAc,QAAQ;MACtC;eAEA,EAAe,KAAK,GAAK,MACxB,kBAAC,GAAD,EAA8B,GAAI,GAAO,EAAlB,EAAkB,CACzC;KACE,CAAA;IACF,CAAA;GACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"GoalsV3.Mobile.js","names":[],"sources":["../../../src/components/GoalsV3/GoalsV3.Mobile.tsx"],"sourcesContent":["import { GoalsV3CardProps } from './GoalsV3'\nimport ExpandableContent from '../home_page/ExpandableContent'\nimport QueryCount from '../QueryCount/QueryCount'\nimport { Button } from '@mui/material'\n\nexport default function GoalsV3Mobile({\n link,\n summary,\n countSql,\n title,\n}: GoalsV3CardProps) {\n const titleElement = (\n <div className=\"Goals__Mobile__Header\">\n {countSql && (\n <span className=\"Goals__Mobile__Header__Count\">\n <QueryCount parens={false} query={{ sql: countSql }} />\n </span>\n )}\n <span className=\"Goals__Mobile__Header__Title\"> {title} </span>\n </div>\n )\n const content = (\n <div>\n <p>{summary}</p>\n <Button variant=\"contained\" color=\"secondary\" href={link}>\n Explore\n </Button>\n </div>\n )\n return <ExpandableContent title={titleElement} content={content} />\n}\n"],"mappings":";;;;;AAKA,SAAwB,EAAc,EACpC,SACA,YACA,aACA,YACmB;AAmBnB,QAAO,kBAAC,GAAD;EAAmB,OAjBxB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,KACC,kBAAC,QAAD;IAAM,WAAU;cACd,kBAAC,GAAD;KAAY,QAAQ;KAAO,OAAO,EAAE,KAAK,GAAU;KAAI,CAAA;IAClD,CAAA,EAET,kBAAC,QAAD;IAAM,WAAU;cAAhB;KAA+C;KAAE;KAAM;KAAQ;MAC3D;;EAUgD,SAPtD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD,EAAA,UAAI,GAAY,CAAA,EAChB,kBAAC,GAAD;GAAQ,SAAQ;GAAY,OAAM;GAAY,MAAM;aAAM;GAEjD,CAAA,CACL,EAAA,CAAA;EAE2D,CAAA"}
1
+ {"version":3,"file":"GoalsV3.Mobile.js","names":[],"sources":["../../../src/components/GoalsV3/GoalsV3.Mobile.tsx"],"sourcesContent":["import { GoalsV3CardProps } from './GoalsV3'\nimport ExpandableContent from '../home_page/ExpandableContent'\nimport QueryCount from '../QueryCount/QueryCount'\nimport { Button } from '@mui/material'\n\nexport default function GoalsV3Mobile({\n link,\n summary,\n countSql,\n title,\n}: GoalsV3CardProps) {\n const titleElement = (\n <div className=\"Goals__Mobile__Header\">\n {countSql && (\n <span className=\"Goals__Mobile__Header__Count\">\n <QueryCount parens={false} query={{ sql: countSql }} />\n </span>\n )}\n <span className=\"Goals__Mobile__Header__Title\"> {title} </span>\n </div>\n )\n const content = (\n <div>\n <p>{summary}</p>\n <Button variant=\"contained\" color=\"secondary\" href={link}>\n Explore\n </Button>\n </div>\n )\n return <ExpandableContent title={titleElement} content={content} />\n}\n"],"mappings":";;;;;AAKA,SAAwB,EAAc,EACpC,SACA,YACA,aACA,YACmB;AAmBnB,QAAO,kBAAC,GAAD;EAAmB,OAjBxB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,KACC,kBAAC,QAAD;IAAM,WAAU;cACd,kBAAC,GAAD;KAAY,QAAQ;KAAO,OAAO,EAAE,KAAK,GAAU;KAAI,CAAA;IAClD,CAAA,EAET,kBAAC,QAAD;IAAM,WAAU;cAAhB;KAA+C;KAAE;KAAM;KAAQ;MAC3D;IAUyB;EAAuB,SAPtD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD,EAAA,UAAI,GAAY,CAAA,EAChB,kBAAC,GAAD;GAAQ,SAAQ;GAAY,OAAM;GAAY,MAAM;aAAM;GAEjD,CAAA,CACL,EAAA,CAEgD;EAAW,CAAA"}