synapse-react-client 4.0.19 → 4.0.20

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 (1553) hide show
  1. package/dist/SWC.index.d.ts +1 -1
  2. package/dist/SWC.index.js +1 -1
  3. package/dist/SWC.index.js.map +1 -1
  4. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  5. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  6. package/dist/assets/DefaultColorfulPortalCardBackground.js.map +1 -1
  7. package/dist/assets/GoogleIcon.js.map +1 -1
  8. package/dist/assets/GoogleIcon24.js.map +1 -1
  9. package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
  10. package/dist/assets/homepage/BlinkingLiveIcon.js.map +1 -1
  11. package/dist/assets/homepage/aacr.js.map +1 -1
  12. package/dist/assets/homepage/cri.js.map +1 -1
  13. package/dist/assets/homepage/ctf.js.map +1 -1
  14. package/dist/assets/homepage/egress.js.map +1 -1
  15. package/dist/assets/homepage/facebook.js.map +1 -1
  16. package/dist/assets/homepage/fisma.js.map +1 -1
  17. package/dist/assets/homepage/gff.js.map +1 -1
  18. package/dist/assets/homepage/github.js.map +1 -1
  19. package/dist/assets/homepage/gray.js.map +1 -1
  20. package/dist/assets/homepage/hipaa-compliant.js.map +1 -1
  21. package/dist/assets/homepage/instagram.js.map +1 -1
  22. package/dist/assets/homepage/linkedin.js.map +1 -1
  23. package/dist/assets/homepage/ml-commons.js.map +1 -1
  24. package/dist/assets/homepage/nih-aging.js.map +1 -1
  25. package/dist/assets/homepage/nih-heart.js.map +1 -1
  26. package/dist/assets/homepage/nih-nci.js.map +1 -1
  27. package/dist/assets/homepage/nih-nimh.js.map +1 -1
  28. package/dist/assets/homepage/ntap.js.map +1 -1
  29. package/dist/assets/homepage/plan-item.js.map +1 -1
  30. package/dist/assets/homepage/powered-by-synapse-feature.js.map +1 -1
  31. package/dist/assets/homepage/precision-governance-feature.js.map +1 -1
  32. package/dist/assets/homepage/python.js.map +1 -1
  33. package/dist/assets/homepage/r.js.map +1 -1
  34. package/dist/assets/homepage/research-credit-feature.js.map +1 -1
  35. package/dist/assets/homepage/seamless-integration-feature.js.map +1 -1
  36. package/dist/assets/homepage/sloan.js.map +1 -1
  37. package/dist/assets/homepage/twitter.js.map +1 -1
  38. package/dist/assets/homepage/users.js.map +1 -1
  39. package/dist/assets/homepage/youtube.js.map +1 -1
  40. package/dist/assets/icons/AccessDataAnywhere.js.map +1 -1
  41. package/dist/assets/icons/AccessPending.js.map +1 -1
  42. package/dist/assets/icons/AccessPendingCloud.js.map +1 -1
  43. package/dist/assets/icons/AddAd.js.map +1 -1
  44. package/dist/assets/icons/AddToList.js.map +1 -1
  45. package/dist/assets/icons/Alert.js.map +1 -1
  46. package/dist/assets/icons/Arrow.js.map +1 -1
  47. package/dist/assets/icons/AwardScroll.js.map +1 -1
  48. package/dist/assets/icons/Baseline.js.map +1 -1
  49. package/dist/assets/icons/Cavatica.js.map +1 -1
  50. package/dist/assets/icons/CertifiedUser.js.map +1 -1
  51. package/dist/assets/icons/Challenge.js.map +1 -1
  52. package/dist/assets/icons/Checkbox/Checked.js.map +1 -1
  53. package/dist/assets/icons/Checkbox/Checked2.js.map +1 -1
  54. package/dist/assets/icons/Checkbox/Indeterminate.js.map +1 -1
  55. package/dist/assets/icons/Checkbox/Indeterminate2.js.map +1 -1
  56. package/dist/assets/icons/Checkbox/Unchecked.js.map +1 -1
  57. package/dist/assets/icons/Checkbox/Unchecked2.js.map +1 -1
  58. package/dist/assets/icons/ClappingHands.js.map +1 -1
  59. package/dist/assets/icons/CloudWarning.js.map +1 -1
  60. package/dist/assets/icons/CommunicateFindings.js.map +1 -1
  61. package/dist/assets/icons/CreateVersion.js.map +1 -1
  62. package/dist/assets/icons/DNA_Two.js.map +1 -1
  63. package/dist/assets/icons/Data2.js.map +1 -1
  64. package/dist/assets/icons/DoubleQuotes.js.map +1 -1
  65. package/dist/assets/icons/EmailAddressAdornment.js.map +1 -1
  66. package/dist/assets/icons/FileWithShield.js.map +1 -1
  67. package/dist/assets/icons/FileWithShield2.js.map +1 -1
  68. package/dist/assets/icons/FrontHand.js.map +1 -1
  69. package/dist/assets/icons/HandWithMoney.js.map +1 -1
  70. package/dist/assets/icons/IconCopy.js.map +1 -1
  71. package/dist/assets/icons/IconMinus.js.map +1 -1
  72. package/dist/assets/icons/IconPlus.js.map +1 -1
  73. package/dist/assets/icons/Java.js.map +1 -1
  74. package/dist/assets/icons/MintDoi.js.map +1 -1
  75. package/dist/assets/icons/MultiFile.js.map +1 -1
  76. package/dist/assets/icons/MultiFile2.js.map +1 -1
  77. package/dist/assets/icons/NoData.js.map +1 -1
  78. package/dist/assets/icons/NoSearchResults.js.map +1 -1
  79. package/dist/assets/icons/ORCIDIcon.js.map +1 -1
  80. package/dist/assets/icons/OpenBook.js.map +1 -1
  81. package/dist/assets/icons/Podium.js.map +1 -1
  82. package/dist/assets/icons/Python.js.map +1 -1
  83. package/dist/assets/icons/QueryStructuredData.js.map +1 -1
  84. package/dist/assets/icons/RLogo.js.map +1 -1
  85. package/dist/assets/icons/RecordProvenance.js.map +1 -1
  86. package/dist/assets/icons/RosetteRibbon.js.map +1 -1
  87. package/dist/assets/icons/SageFullLogo.js.map +1 -1
  88. package/dist/assets/icons/SearchImage.js.map +1 -1
  89. package/dist/assets/icons/ShareYourResearch.js.map +1 -1
  90. package/dist/assets/icons/Sort.js.map +1 -1
  91. package/dist/assets/icons/StarTrophy.js.map +1 -1
  92. package/dist/assets/icons/SynapseFullLogo.js.map +1 -1
  93. package/dist/assets/icons/SynapseIconWhite.js.map +1 -1
  94. package/dist/assets/icons/SynapseLogoName.js.map +1 -1
  95. package/dist/assets/icons/TasksIcon.js.map +1 -1
  96. package/dist/assets/icons/Terminal.js.map +1 -1
  97. package/dist/assets/icons/ThreeStars.js.map +1 -1
  98. package/dist/assets/icons/UnpackagableFile.js.map +1 -1
  99. package/dist/assets/icons/UnpackagableFile2.js.map +1 -1
  100. package/dist/assets/icons/ValidatedProfile.js.map +1 -1
  101. package/dist/assets/icons/account-certified.js.map +1 -1
  102. package/dist/assets/icons/account-enabled-mfa.js.map +1 -1
  103. package/dist/assets/icons/account-validated.js.map +1 -1
  104. package/dist/assets/icons/bioChemicalPhysical.js.map +1 -1
  105. package/dist/assets/icons/chart2.js.map +1 -1
  106. package/dist/assets/icons/columns.js.map +1 -1
  107. package/dist/assets/icons/columnsDarkTheme.js.map +1 -1
  108. package/dist/assets/icons/computationalTool.js.map +1 -1
  109. package/dist/assets/icons/dataReuse.js.map +1 -1
  110. package/dist/assets/icons/emailAddressAdornment2.js.map +1 -1
  111. package/dist/assets/icons/emailWithNotification.js.map +1 -1
  112. package/dist/assets/icons/error_page/maintenance.js.map +1 -1
  113. package/dist/assets/icons/error_page/no-access.js.map +1 -1
  114. package/dist/assets/icons/error_page/unavailable.js.map +1 -1
  115. package/dist/assets/icons/file.js.map +1 -1
  116. package/dist/assets/icons/inSilicoModel.js.map +1 -1
  117. package/dist/assets/icons/institution.js.map +1 -1
  118. package/dist/assets/icons/json-form-tool-no-submissions.js.map +1 -1
  119. package/dist/assets/icons/modelSystem.js.map +1 -1
  120. package/dist/assets/icons/mouse.js.map +1 -1
  121. package/dist/assets/icons/organizations.js.map +1 -1
  122. package/dist/assets/icons/person.js.map +1 -1
  123. package/dist/assets/icons/spatialProfiling.js.map +1 -1
  124. package/dist/assets/icons/standardDataModel.js.map +1 -1
  125. package/dist/assets/icons/study-active.js.map +1 -1
  126. package/dist/assets/icons/study-complete.js.map +1 -1
  127. package/dist/assets/icons/subscribe_plus.js.map +1 -1
  128. package/dist/assets/icons/synapse-logo.js.map +1 -1
  129. package/dist/assets/icons/terms/CheckIcon.js.map +1 -1
  130. package/dist/assets/icons/translational.js.map +1 -1
  131. package/dist/assets/icons/tree_horizontal.js.map +1 -1
  132. package/dist/assets/illustrations/acknowledgement_statements_illustration.js.map +1 -1
  133. package/dist/assets/illustrations/challenges_illustration.js.map +1 -1
  134. package/dist/assets/illustrations/cohort_builder_illustration.js.map +1 -1
  135. package/dist/assets/illustrations/data_access_management_illustration.js.map +1 -1
  136. package/dist/assets/illustrations/datasets_illustration.js.map +1 -1
  137. package/dist/assets/illustrations/diagonalLinePattern.js.map +1 -1
  138. package/dist/assets/illustrations/discussions_illustration.js.map +1 -1
  139. package/dist/assets/illustrations/docker_illustration.js.map +1 -1
  140. package/dist/assets/illustrations/donation_illustration.js.map +1 -1
  141. package/dist/assets/illustrations/favorites_illustration.js.map +1 -1
  142. package/dist/assets/illustrations/files_illustration.js.map +1 -1
  143. package/dist/assets/illustrations/following_illustration.js.map +1 -1
  144. package/dist/assets/illustrations/index.js.map +1 -1
  145. package/dist/assets/illustrations/left_dot_blob_dark_illustration.js.map +1 -1
  146. package/dist/assets/illustrations/left_dot_blob_illustration.js.map +1 -1
  147. package/dist/assets/illustrations/projects_illustration.js.map +1 -1
  148. package/dist/assets/illustrations/right_dot_blob_dark_illustration.js.map +1 -1
  149. package/dist/assets/illustrations/right_dot_blob_illustration.js.map +1 -1
  150. package/dist/assets/illustrations/tables_illustration.js.map +1 -1
  151. package/dist/assets/illustrations/teams_illustration.js.map +1 -1
  152. package/dist/assets/illustrations/trash_can_illustration.js.map +1 -1
  153. package/dist/assets/illustrations/underconstruction_illustration.js.map +1 -1
  154. package/dist/assets/illustrations/wikis_illustration.js.map +1 -1
  155. package/dist/assets/logos/other/ad-workbench-logo.js.map +1 -1
  156. package/dist/assets/logos/other/cavatica-logo.js.map +1 -1
  157. package/dist/assets/logos/other/pluto-logo.js.map +1 -1
  158. package/dist/assets/logos/other/terra-logo.js.map +1 -1
  159. package/dist/assets/mui_components/AccessManagement.js.map +1 -1
  160. package/dist/assets/mui_components/AccountCertified.js.map +1 -1
  161. package/dist/assets/mui_components/AccountRegistered.js.map +1 -1
  162. package/dist/assets/mui_components/AccountValidated.js.map +1 -1
  163. package/dist/assets/mui_components/ActionKey.js.map +1 -1
  164. package/dist/assets/mui_components/BioChemicalPhysical.js.map +1 -1
  165. package/dist/assets/mui_components/Chromatin.js.map +1 -1
  166. package/dist/assets/mui_components/Clinical.js.map +1 -1
  167. package/dist/assets/mui_components/ComputationalTool.js.map +1 -1
  168. package/dist/assets/mui_components/Data.js.map +1 -1
  169. package/dist/assets/mui_components/DataLocked.js.map +1 -1
  170. package/dist/assets/mui_components/DataReuse.js.map +1 -1
  171. package/dist/assets/mui_components/Dataset.js.map +1 -1
  172. package/dist/assets/mui_components/DatasetCollection.js.map +1 -1
  173. package/dist/assets/mui_components/Docker.js.map +1 -1
  174. package/dist/assets/mui_components/GeneExpression.js.map +1 -1
  175. package/dist/assets/mui_components/GeneVariants.js.map +1 -1
  176. package/dist/assets/mui_components/HelpChatBubble.js.map +1 -1
  177. package/dist/assets/mui_components/Imaging.js.map +1 -1
  178. package/dist/assets/mui_components/InSilicoModel.js.map +1 -1
  179. package/dist/assets/mui_components/Kinomics.js.map +1 -1
  180. package/dist/assets/mui_components/LineGraph.js.map +1 -1
  181. package/dist/assets/mui_components/ModelSystem.js.map +1 -1
  182. package/dist/assets/mui_components/Other.js.map +1 -1
  183. package/dist/assets/mui_components/PackagableFile.js.map +1 -1
  184. package/dist/assets/mui_components/PackagableFile2.js.map +1 -1
  185. package/dist/assets/mui_components/Proteomics.js.map +1 -1
  186. package/dist/assets/mui_components/Rat.js.map +1 -1
  187. package/dist/assets/mui_components/SpatialProfiling.js.map +1 -1
  188. package/dist/assets/sustainability/darkDialPosition1.js.map +1 -1
  189. package/dist/assets/sustainability/darkDialPosition2.js.map +1 -1
  190. package/dist/assets/sustainability/darkDialPosition3.js.map +1 -1
  191. package/dist/assets/sustainability/darkDialPosition4.js.map +1 -1
  192. package/dist/assets/sustainability/dialPosition1.js.map +1 -1
  193. package/dist/assets/sustainability/dialPosition2.js.map +1 -1
  194. package/dist/assets/sustainability/dialPosition3.js.map +1 -1
  195. package/dist/assets/sustainability/dialPosition4.js.map +1 -1
  196. package/dist/assets/themed_icons/Active.js.map +1 -1
  197. package/dist/assets/themed_icons/Chart.js.map +1 -1
  198. package/dist/assets/themed_icons/Close.js.map +1 -1
  199. package/dist/assets/themed_icons/Collapse.js.map +1 -1
  200. package/dist/assets/themed_icons/Columns.js.map +1 -1
  201. package/dist/assets/themed_icons/ColumnsDark.js.map +1 -1
  202. package/dist/assets/themed_icons/Database.js.map +1 -1
  203. package/dist/assets/themed_icons/Download.js.map +1 -1
  204. package/dist/assets/themed_icons/Expand.js.map +1 -1
  205. package/dist/assets/themed_icons/Explore.js.map +1 -1
  206. package/dist/assets/themed_icons/ExternalLink.js.map +1 -1
  207. package/dist/assets/themed_icons/Filter.js.map +1 -1
  208. package/dist/assets/themed_icons/Program.js.map +1 -1
  209. package/dist/assets/themed_icons/Project.js.map +1 -1
  210. package/dist/assets/themed_icons/Publication.js.map +1 -1
  211. package/dist/assets/themed_icons/Search.js.map +1 -1
  212. package/dist/assets/themed_icons/Settings.js.map +1 -1
  213. package/dist/assets/themed_icons/SortDown.js.map +1 -1
  214. package/dist/assets/themed_icons/SortUp.js.map +1 -1
  215. package/dist/assets/themed_icons/SqlEditorIcon.js.map +1 -1
  216. package/dist/assets/themed_icons/Study.js.map +1 -1
  217. package/dist/assets/themed_icons/ToolClinical.js.map +1 -1
  218. package/dist/assets/themed_icons/ToolComputational.js.map +1 -1
  219. package/dist/assets/themed_icons/ToolExperimental.js.map +1 -1
  220. package/dist/assets/themed_icons/VerticalDots.js.map +1 -1
  221. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +1 -1
  222. package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
  223. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  224. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  225. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +10 -11
  226. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  227. package/dist/components/AccessRequirementList/AccessRequirementList.js +73 -76
  228. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  229. package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
  230. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  231. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  232. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  233. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  234. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
  235. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  236. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +1 -1
  237. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  238. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  239. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  240. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  241. package/dist/components/AccessRequirementList/RequirementItem/AuthenticatedRequirement.js.map +1 -1
  242. package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
  243. package/dist/components/AccessRequirementList/RequirementItem/LockAccessRequirementItem.js.map +1 -1
  244. package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js.map +1 -1
  245. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  246. package/dist/components/AccessRequirementList/RequirementItem/TwoFactorAuthEnabledRequirement.js.map +1 -1
  247. package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
  248. package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
  249. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  250. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  251. package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
  252. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  253. package/dist/components/AccountLevelBadge/AccountLevelBadge.js.map +1 -1
  254. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  255. package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js.map +1 -1
  256. package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js.map +1 -1
  257. package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
  258. package/dist/components/AcknowledgementsPage/StudyAcknowledgement.js.map +1 -1
  259. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  260. package/dist/components/AclEditor/AclEditor.js.map +1 -1
  261. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  262. package/dist/components/AclEditor/AclEditorSkeleton.js.map +1 -1
  263. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  264. package/dist/components/AclEditor/ReadOnlyPermissionLevel.js.map +1 -1
  265. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js +2 -4
  266. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  267. package/dist/components/AclEditor/ResourceAccessItem.js.map +1 -1
  268. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  269. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  270. package/dist/components/AdaptiveTwoColumnLayout/AdaptiveTwoColumnLayout.js.map +1 -1
  271. package/dist/components/AddToDownloadListV2.js.map +1 -1
  272. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  273. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  274. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  275. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  276. package/dist/components/Authentication/LoginFlowBackButton.js.map +1 -1
  277. package/dist/components/Authentication/LoginForm.js.map +1 -1
  278. package/dist/components/Authentication/LoginMethod.js.map +1 -1
  279. package/dist/components/Authentication/LoginMethodButton.js.map +1 -1
  280. package/dist/components/Authentication/Logout.js.map +1 -1
  281. package/dist/components/Authentication/OneTimePasswordForm.js.map +1 -1
  282. package/dist/components/Authentication/PasswordField.js.map +1 -1
  283. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  284. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  285. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  286. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  287. package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
  288. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  289. package/dist/components/Authentication/TwoFactorAuthSettingsPanel.js.map +1 -1
  290. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  291. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  292. package/dist/components/Authentication/TwoFactorSecretDialog.js.map +1 -1
  293. package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
  294. package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
  295. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  296. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  297. package/dist/components/CTASectionWrapper/CTASectionWrapper.js.map +1 -1
  298. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  299. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  300. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  301. package/dist/components/CardDeck/CardDeck.Desktop.js.map +1 -1
  302. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  303. package/dist/components/CardDeck/CardDeck.js.map +1 -1
  304. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  305. package/dist/components/CardGridWithLinks/CardGridWithLinks.js.map +1 -1
  306. package/dist/components/CertificationQuiz/CertificationAnswer.js.map +1 -1
  307. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  308. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  309. package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js.map +1 -1
  310. package/dist/components/ChallengeRegisterButton/ChallengeRegisterButton.js.map +1 -1
  311. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  312. package/dist/components/ChallengeSubmission/AddExternalRepo.js.map +1 -1
  313. package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
  314. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  315. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +62 -64
  316. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  317. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  318. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  319. package/dist/components/ChallengeSubmission/SubmissionCommitList.js.map +1 -1
  320. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  321. package/dist/components/ChallengeTeamWizard/ChallengeTeamSearch.js.map +1 -1
  322. package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
  323. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +96 -102
  324. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  325. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  326. package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
  327. package/dist/components/ChallengeTeamWizard/OpenMembershipInvitation.js.map +1 -1
  328. package/dist/components/ChallengeTeamWizard/RegistrationSuccessful.js.map +1 -1
  329. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  330. package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
  331. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  332. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  333. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  334. package/dist/components/CitationPopover/CitationPopover.js.map +1 -1
  335. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  336. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  337. package/dist/components/CitationPopover/useCitation.js.map +1 -1
  338. package/dist/components/ColorGradient/ColorGradient.js.map +1 -1
  339. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -1
  340. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  341. package/dist/components/ComponentCollapse.js.map +1 -1
  342. package/dist/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
  343. package/dist/components/CookiesNotification/CookiePreferencesDialog.js.map +1 -1
  344. package/dist/components/CookiesNotification/CookiesNotification.d.ts.map +1 -1
  345. package/dist/components/CookiesNotification/CookiesNotification.js +9 -9
  346. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  347. package/dist/components/CopyToClipboardIcon.js.map +1 -1
  348. package/dist/components/CopyToClipboardInput/CopyToClipboardInput.js.map +1 -1
  349. package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
  350. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  351. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizardUtils.js.map +1 -1
  352. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  353. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -1
  354. package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
  355. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  356. package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
  357. package/dist/components/CreateTableViewWizard/TableTypeSelection.js.map +1 -1
  358. package/dist/components/CreateTableViewWizard/ViewTypeSelection.js.map +1 -1
  359. package/dist/components/CrispChat/CrispChat.js.map +1 -1
  360. package/dist/components/DataExplorer/DataExplorer.js +28 -31
  361. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  362. package/dist/components/DataGrid/DataGrid.js +72 -72
  363. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  364. package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
  365. package/dist/components/DataGrid/DataGridWebSocket.d.ts +2 -0
  366. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  367. package/dist/components/DataGrid/DataGridWebSocket.js +9 -10
  368. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  369. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  370. package/dist/components/DataGrid/StartGridSession.js.map +1 -1
  371. package/dist/components/DataGrid/SynapseGrid.d.ts +3 -1
  372. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  373. package/dist/components/DataGrid/SynapseGrid.js +219 -211
  374. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  375. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  376. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  377. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  378. package/dist/components/DataGrid/columns/GridAutocompleteChip.js.map +1 -1
  379. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  380. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  381. package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
  382. package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
  383. package/dist/components/DataGrid/components/GridSessionSelectionField.js.map +1 -1
  384. package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
  385. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  386. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  387. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  388. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +2 -0
  389. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  390. package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
  391. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  392. package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -1
  393. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  394. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -1
  395. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  396. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  397. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +2 -0
  398. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  399. package/dist/components/DataGrid/useDataGridWebsocket.js +12 -2
  400. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  401. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  402. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  403. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  404. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  405. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  406. package/dist/components/DataGrid/utils/MessageCounter.js.map +1 -1
  407. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  408. package/dist/components/DataGrid/utils/calculateColumnWidth.js.map +1 -1
  409. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  410. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  411. package/dist/components/DataGrid/utils/convertActionToModelChange.js.map +1 -1
  412. package/dist/components/DataGrid/utils/createTestModel.js.map +1 -1
  413. package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -1
  414. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  415. package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -1
  416. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  417. package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -1
  418. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -1
  419. package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -1
  420. package/dist/components/DataGrid/utils/isValidationUpToDateForRow.js.map +1 -1
  421. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  422. package/dist/components/DataGrid/utils/json-rx/JsonRxMessage.js.map +1 -1
  423. package/dist/components/DataGrid/utils/json-rx/JsonRxNotification.js.map +1 -1
  424. package/dist/components/DataGrid/utils/json-rx/JsonRxRequest.js.map +1 -1
  425. package/dist/components/DataGrid/utils/json-rx/JsonRxRequestComplete.js.map +1 -1
  426. package/dist/components/DataGrid/utils/json-rx/JsonRxResponse.js.map +1 -1
  427. package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
  428. package/dist/components/DataGrid/utils/logicalTimestampToString.js.map +1 -1
  429. package/dist/components/DataGrid/utils/mapOperationsToModelChanges.js.map +1 -1
  430. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  431. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  432. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  433. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -1
  434. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -1
  435. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  436. package/dist/components/DatasetJsonLdScript.js.map +1 -1
  437. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  438. package/dist/components/Dialog/ConfirmCloseWithoutSavingDialog.js.map +1 -1
  439. package/dist/components/DialogBase.js.map +1 -1
  440. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  441. package/dist/components/DirectDownload/FileEntityDirectDownload.js.map +1 -1
  442. package/dist/components/DirectDownloadButton.js.map +1 -1
  443. package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js.map +1 -1
  444. package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
  445. package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
  446. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  447. package/dist/components/DownloadCart/DirectProgrammaticDownload.js.map +1 -1
  448. package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
  449. package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
  450. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  451. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  452. package/dist/components/DownloadCart/DownloadListStats.js.map +1 -1
  453. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  454. package/dist/components/DownloadCart/EnableTwoFaRequirementCard.js.map +1 -1
  455. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  456. package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
  457. package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
  458. package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
  459. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  460. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  461. package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
  462. package/dist/components/DynamicForm/DynamicForm.js.map +1 -1
  463. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  464. package/dist/components/Ecosystem/EcosystemCard.js.map +1 -1
  465. package/dist/components/Ecosystem/EcosystemLayout.js.map +1 -1
  466. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  467. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  468. package/dist/components/EntityAclEditor/CreateOrDeleteLocalSharingSettingsButton.js.map +1 -1
  469. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  470. package/dist/components/EntityAclEditor/EntityAclEditorModal.js.map +1 -1
  471. package/dist/components/EntityAclEditor/InheritanceMessage.js.map +1 -1
  472. package/dist/components/EntityAclEditor/OpenData.js.map +1 -1
  473. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  474. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +68 -70
  475. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  476. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  477. package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
  478. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +32 -35
  479. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  480. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  481. package/dist/components/EntityFinder/Breadcrumbs.js.map +1 -1
  482. package/dist/components/EntityFinder/EntityFinder.js +134 -136
  483. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  484. package/dist/components/EntityFinder/EntityFinderModal.js.map +1 -1
  485. package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
  486. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  487. package/dist/components/EntityFinder/details/EntityDetailsList.js +20 -20
  488. package/dist/components/EntityFinder/details/EntityDetailsList.js.map +1 -1
  489. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  490. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  491. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  492. package/dist/components/EntityFinder/details/configurations/ReferenceDetails.js.map +1 -1
  493. package/dist/components/EntityFinder/details/configurations/SearchDetails.js.map +1 -1
  494. package/dist/components/EntityFinder/details/view/DetailsView.js +67 -67
  495. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  496. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js +1 -1
  497. package/dist/components/EntityFinder/details/view/VersionColumnHeader.js.map +1 -1
  498. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  499. package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js.map +1 -1
  500. package/dist/components/EntityFinder/details/view/table/DateCell.js.map +1 -1
  501. package/dist/components/EntityFinder/details/view/table/EntityBadgeIconsCell.js.map +1 -1
  502. package/dist/components/EntityFinder/details/view/table/EntityFinderCheckboxCell.js.map +1 -1
  503. package/dist/components/EntityFinder/details/view/table/EntityFinderVersionCell.js.map +1 -1
  504. package/dist/components/EntityFinder/details/view/table/EntityNameCell.js.map +1 -1
  505. package/dist/components/EntityFinder/details/view/table/EntityTypeCell.js.map +1 -1
  506. package/dist/components/EntityFinder/details/view/table/FileEntityDirectDownloadCell.js.map +1 -1
  507. package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js.map +1 -1
  508. package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js.map +1 -1
  509. package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js.map +1 -1
  510. package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js.map +1 -1
  511. package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js.map +1 -1
  512. package/dist/components/EntityFinder/details/view/table/UserBadgeCell.js.map +1 -1
  513. package/dist/components/EntityFinder/tree/EntityTree.js +80 -80
  514. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  515. package/dist/components/EntityFinder/tree/VirtualizedTree.js +31 -31
  516. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  517. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  518. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  519. package/dist/components/EntityHeaderTable/DebouncedInput.js.map +1 -1
  520. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  521. package/dist/components/EntityHeaderTable/EntityHeaderTableCellRenderers.js.map +1 -1
  522. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  523. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  524. package/dist/components/EntityIcon.js.map +1 -1
  525. package/dist/components/EntityLink.js.map +1 -1
  526. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  527. package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
  528. package/dist/components/EntityTreeTable/components/AutoLoadMore.js.map +1 -1
  529. package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
  530. package/dist/components/EntityTreeTable/components/EntityBadgeIconsCell.js.map +1 -1
  531. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  532. package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
  533. package/dist/components/EntityTreeTable/components/EntityTreeTableRow.js.map +1 -1
  534. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
  535. package/dist/components/EntityTreeTable/components/IdCell.js.map +1 -1
  536. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  537. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  538. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  539. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  540. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  541. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  542. package/dist/components/EntityUpload/EntityUploadModal.js +29 -31
  543. package/dist/components/EntityUpload/EntityUploadModal.js.map +1 -1
  544. package/dist/components/EntityUpload/EntityUploadPromptDialog.js.map +1 -1
  545. package/dist/components/EntityUpload/ExternalObjectStoreCredentialsForm.js.map +1 -1
  546. package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
  547. package/dist/components/EntityUpload/LinkToURL.js.map +1 -1
  548. package/dist/components/EntityUpload/ProjectStorageLimitAlert.js.map +1 -1
  549. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  550. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditor.js.map +1 -1
  551. package/dist/components/EntityViewScopeEditor/EntityViewScopeEditorModal.js.map +1 -1
  552. package/dist/components/Evaluation/CreatedOnByUserDiv.js.map +1 -1
  553. package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -1
  554. package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
  555. package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
  556. package/dist/components/Evaluation/EvaluationEditorPage.js.map +1 -1
  557. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  558. package/dist/components/Evaluation/EvaluationRoundEditorDropdown.js.map +1 -1
  559. package/dist/components/Evaluation/EvaluationRoundEditorList.js.map +1 -1
  560. package/dist/components/Evaluation/input_models/models.js.map +1 -1
  561. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
  562. package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
  563. package/dist/components/EvaluationFinder/EvaluationFinder.js.map +1 -1
  564. package/dist/components/ExperimentalMode/ExperimentalMode.d.ts.map +1 -1
  565. package/dist/components/ExperimentalMode/ExperimentalMode.js +24 -30
  566. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  567. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  568. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  569. package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
  570. package/dist/components/FeaturedDataTabs/FeaturedDataPlots.js.map +1 -1
  571. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  572. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  573. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  574. package/dist/components/FeaturedResearch/FeaturedResearch.js +16 -18
  575. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  576. package/dist/components/FeaturedToolsList/FeaturedToolCard.js.map +1 -1
  577. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  578. package/dist/components/FilePreview/EntityPreview.js.map +1 -1
  579. package/dist/components/FilePreview/FileEntityPreview.js.map +1 -1
  580. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  581. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  582. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  583. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  584. package/dist/components/FilePreview/PreviewUtils.js.map +1 -1
  585. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  586. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  587. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  588. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  589. package/dist/components/Forum/ForumPage.js.map +1 -1
  590. package/dist/components/Forum/ForumTable.js.map +1 -1
  591. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  592. package/dist/components/Forum/SubscribersModal.js.map +1 -1
  593. package/dist/components/ForumSearch/ForumSearch.js.map +1 -1
  594. package/dist/components/FullTextSearch/FullTextSearch.js.map +1 -1
  595. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  596. package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
  597. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  598. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  599. package/dist/components/GenericCard/CollapsibleDescription.js.map +1 -1
  600. package/dist/components/GenericCard/CroissantButton/CroissantButton.js.map +1 -1
  601. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  602. package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
  603. package/dist/components/GenericCard/GenericCardIcon.js.map +1 -1
  604. package/dist/components/GenericCard/GenericCardTitle.js.map +1 -1
  605. package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -1
  606. package/dist/components/GenericCard/Linkify.js.map +1 -1
  607. package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
  608. package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
  609. package/dist/components/GenericCard/SynapseCardLabel.js +1 -1
  610. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  611. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  612. package/dist/components/GenericCard/useResolvedSynapseEntity.js.map +1 -1
  613. package/dist/components/Goals/Goals.Desktop.js.map +1 -1
  614. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  615. package/dist/components/Goals/Goals.js +25 -27
  616. package/dist/components/Goals/Goals.js.map +1 -1
  617. package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
  618. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  619. package/dist/components/GoalsV2/GoalsV2.js +14 -16
  620. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  621. package/dist/components/GoalsV3/GoalsV3.Desktop.js.map +1 -1
  622. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  623. package/dist/components/GoalsV3/GoalsV3.js +14 -16
  624. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  625. package/dist/components/GoogleAnalytics/GoogleAnalytics.js.map +1 -1
  626. package/dist/components/GoogleMap/GoogleMap.js.map +1 -1
  627. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  628. package/dist/components/HasAccess/AccessIcon.js +10 -10
  629. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  630. package/dist/components/HasAccess/HasAccessV2.js.map +1 -1
  631. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  632. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  633. package/dist/components/HeaderCard.js.map +1 -1
  634. package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
  635. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  636. package/dist/components/IDUReport/IDUReport.js.map +1 -1
  637. package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
  638. package/dist/components/Icon/Icon.js.map +1 -1
  639. package/dist/components/IconList.js.map +1 -1
  640. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  641. package/dist/components/IconSvgButton.js.map +1 -1
  642. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js +7 -9
  643. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  644. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  645. package/dist/components/InteractiveCopyIdsIcon.js.map +1 -1
  646. package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
  647. package/dist/components/JSONArrayEditor/JSONArrayEditorModal.js.map +1 -1
  648. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  649. package/dist/components/JsonLdScript.js.map +1 -1
  650. package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
  651. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  652. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemButtonTemplate.js.map +1 -1
  653. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  654. package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
  655. package/dist/components/JsonSchemaForm/templates/ArrayFieldTitleTemplate.js.map +1 -1
  656. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  657. package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
  658. package/dist/components/JsonSchemaForm/templates/DescriptionFieldTemplate.js.map +1 -1
  659. package/dist/components/JsonSchemaForm/templates/ErrorListTemplate.js.map +1 -1
  660. package/dist/components/JsonSchemaForm/templates/FieldDescriptionTable.js.map +1 -1
  661. package/dist/components/JsonSchemaForm/templates/FieldErrorTemplate.js.map +1 -1
  662. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  663. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  664. package/dist/components/JsonSchemaForm/widgets/BooleanWidget.js.map +1 -1
  665. package/dist/components/JsonSchemaForm/widgets/DateTimeWidget.js.map +1 -1
  666. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  667. package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
  668. package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
  669. package/dist/components/Markdown/GovernanceMarkdownGithub.js.map +1 -1
  670. package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
  671. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  672. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  673. package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
  674. package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
  675. package/dist/components/Markdown/MarkdownSynapse.js +75 -106
  676. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  677. package/dist/components/Markdown/MarkdownUtils.d.ts +14 -4
  678. package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
  679. package/dist/components/Markdown/MarkdownUtils.js +38 -37
  680. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  681. package/dist/components/Markdown/MarkdownWidget.js.map +1 -1
  682. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  683. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  684. package/dist/components/Markdown/widget/Bookmarks.js.map +1 -1
  685. package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
  686. package/dist/components/Markdown/widget/MarkdownEntityPreview.js.map +1 -1
  687. package/dist/components/Markdown/widget/MarkdownIDUReport.js.map +1 -1
  688. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  689. package/dist/components/Markdown/widget/MarkdownSynapseImage.js.map +1 -1
  690. package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
  691. package/dist/components/Markdown/widget/MarkdownSynapseTable.js.map +1 -1
  692. package/dist/components/Markdown/widget/MarkdownTableOfContents.js.map +1 -1
  693. package/dist/components/Markdown/widget/MarkdownUserOrTeamBadge.js.map +1 -1
  694. package/dist/components/Markdown/widget/MarkdownVideo.js.map +1 -1
  695. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  696. package/dist/components/ModalDownload/ModalDownload.FormSchema.js.map +1 -1
  697. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  698. package/dist/components/MuiContainer.js.map +1 -1
  699. package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js.map +1 -1
  700. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  701. package/dist/components/OAuthClientManagement/CreateOAuthClient.js.map +1 -1
  702. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  703. package/dist/components/OrientationBanner/OrientationBanner.js.map +1 -1
  704. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  705. package/dist/components/Plot/BarPlot.js.map +1 -1
  706. package/dist/components/Plot/DotPlot.js.map +1 -1
  707. package/dist/components/Plot/Plot.d.ts +12 -1
  708. package/dist/components/Plot/Plot.d.ts.map +1 -1
  709. package/dist/components/Plot/Plot.js +5 -1
  710. package/dist/components/Plot/Plot.js.map +1 -1
  711. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  712. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  713. package/dist/components/Plot/SynapseSankeyPlot.d.ts +12 -0
  714. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -0
  715. package/dist/components/Plot/SynapseSankeyPlot.js +54 -0
  716. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -0
  717. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  718. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  719. package/dist/components/Plot/index.d.ts +3 -1
  720. package/dist/components/Plot/index.d.ts.map +1 -1
  721. package/dist/components/Plot/index.js +2 -1
  722. package/dist/components/Plot/safe-react-plotly-factory.js.map +1 -1
  723. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  724. package/dist/components/PortalAclEditor/PortalAclEditorModal.js.map +1 -1
  725. package/dist/components/PortalFeatureHighlights/PortalFeatureHighlights.js.map +1 -1
  726. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js +4 -6
  727. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  728. package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
  729. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  730. package/dist/components/PortalList/PortalCard.js.map +1 -1
  731. package/dist/components/PortalList/PortalList.js.map +1 -1
  732. package/dist/components/PortalSectionHeader/PortalSectionHeader.js.map +1 -1
  733. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js +69 -69
  734. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  735. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  736. package/dist/components/Programs/Programs.Desktop.js.map +1 -1
  737. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  738. package/dist/components/Programs/Programs.js.map +1 -1
  739. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  740. package/dist/components/ProvenanceGraph/ActivityNodeLabel.js.map +1 -1
  741. package/dist/components/ProvenanceGraph/EntityNodeLabel.js.map +1 -1
  742. package/dist/components/ProvenanceGraph/EntityPlaceholderNodeLabel.js.map +1 -1
  743. package/dist/components/ProvenanceGraph/ExpandGraphNodeLabel.js.map +1 -1
  744. package/dist/components/ProvenanceGraph/ExternalGraphNodeLabel.js.map +1 -1
  745. package/dist/components/ProvenanceGraph/ProvenanceEntityIcon.js.map +1 -1
  746. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  747. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  748. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  749. package/dist/components/ProvenanceGraph/ProvenanceUtils.js +13 -13
  750. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  751. package/dist/components/ProvenanceGraph/UndefinedNodeLabel.js.map +1 -1
  752. package/dist/components/QueryContext/QueryContext.js.map +1 -1
  753. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  754. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  755. package/dist/components/QuerySortSelector.js.map +1 -1
  756. package/dist/components/QueryVisualizationWrapper/NoContentPlaceholder.js.map +1 -1
  757. package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
  758. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  759. package/dist/components/QueryWrapper/QueryWrapper.js +27 -27
  760. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  761. package/dist/components/QueryWrapper/QueryWrapperLoadingScreen.js.map +1 -1
  762. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  763. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  764. package/dist/components/QueryWrapper/ViewMoreQueryResultsButton.js.map +1 -1
  765. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  766. package/dist/components/QueryWrapper/useComputeRowSelectionPrimaryKey.js.map +1 -1
  767. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  768. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  769. package/dist/components/QueryWrapper/useHasFacetedSelectColumn.js.map +1 -1
  770. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  771. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  772. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
  773. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  774. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  775. package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
  776. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  777. package/dist/components/RORInstitutionField/RORInstitutionField.js.map +1 -1
  778. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js +6 -8
  779. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  780. package/dist/components/RegisterPageLogoutPrompt/RegisterPageLogoutPrompt.js.map +1 -1
  781. package/dist/components/ReleaseCard/ReleaseCard.js.map +1 -1
  782. package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
  783. package/dist/components/ReleaseCard/ReleaseCardMedium.js.map +1 -1
  784. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  785. package/dist/components/RenderIfInView/RenderIfInView.js.map +1 -1
  786. package/dist/components/ResizableContainer/ResizableContainer.js.map +1 -1
  787. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  788. package/dist/components/Resources/Resources.Desktop.js.map +1 -1
  789. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  790. package/dist/components/Resources/Resources.js +8 -11
  791. package/dist/components/Resources/Resources.js.map +1 -1
  792. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  793. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  794. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  795. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  796. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  797. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
  798. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  799. package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
  800. package/dist/components/SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js.map +1 -1
  801. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  802. package/dist/components/SchemaDrivenAnnotationEditor/template/SynapseAnnotationsWrapIfAdditionalTemplate.js.map +1 -1
  803. package/dist/components/SchemaDrivenAnnotationEditor/widget/TextWidget.js.map +1 -1
  804. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  805. package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
  806. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  807. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  808. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementTextInstructions.js.map +1 -1
  809. package/dist/components/SetBasicAccessRequirementFields/AccessRequirementWikiInstructions.js.map +1 -1
  810. package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
  811. package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
  812. package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
  813. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  814. package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
  815. package/dist/components/ShowMore/ShowMore.js.map +1 -1
  816. package/dist/components/SignInButton.js.map +1 -1
  817. package/dist/components/SignInRequiredModal/SignInRequiredModal.js.map +1 -1
  818. package/dist/components/Skeleton/SkeletonButton.js.map +1 -1
  819. package/dist/components/Skeleton/SkeletonInlineBlock.js.map +1 -1
  820. package/dist/components/Skeleton/SkeletonParagraph.js.map +1 -1
  821. package/dist/components/Skeleton/SkeletonTable.js.map +1 -1
  822. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  823. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  824. package/dist/components/SmartLink/useSmartLink.js.map +1 -1
  825. package/dist/components/SourceAppImage.js.map +1 -1
  826. package/dist/components/SpinnerButton/SpinnerButton.js.map +1 -1
  827. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditor.js.map +1 -1
  828. package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditorModal.js.map +1 -1
  829. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  830. package/dist/components/StatisticsPlot.js.map +1 -1
  831. package/dist/components/StepperDialog/StepperDialog.js.map +1 -1
  832. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  833. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditor.js.map +1 -1
  834. package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditorModal.js.map +1 -1
  835. package/dist/components/SubscriptionPage/ForumTopic.js.map +1 -1
  836. package/dist/components/SubscriptionPage/SubscriptionItem.js.map +1 -1
  837. package/dist/components/SubscriptionPage/SubscriptionPage.js.map +1 -1
  838. package/dist/components/SubscriptionPage/ThreadTopic.js.map +1 -1
  839. package/dist/components/SubscriptionPage/Topic.js.map +1 -1
  840. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  841. package/dist/components/SustainabilityScorecard/Dial.js.map +1 -1
  842. package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
  843. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  844. package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js.map +1 -1
  845. package/dist/components/SustainabilityScorecard/SustainabilityScorecardUtils.js.map +1 -1
  846. package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
  847. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  848. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  849. package/dist/components/SynapseChat/SynapseChatDialog.js.map +1 -1
  850. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  851. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  852. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  853. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  854. package/dist/components/SynapseChat/useChatState.js.map +1 -1
  855. package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
  856. package/dist/components/SynapseFooter/SynapseLinksColumn.js.map +1 -1
  857. package/dist/components/SynapseForm/DataDebug.js.map +1 -1
  858. package/dist/components/SynapseForm/Header.js.map +1 -1
  859. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  860. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  861. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  862. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  863. package/dist/components/SynapseForm/SynapseFormCheckboxWidget.js.map +1 -1
  864. package/dist/components/SynapseForm/SynapseFormCheckboxesWidget.js.map +1 -1
  865. package/dist/components/SynapseForm/SynapseFormRadioWidget.js.map +1 -1
  866. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  867. package/dist/components/SynapseForm/SynapseFormUtils.js.map +1 -1
  868. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  869. package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
  870. package/dist/components/SynapseForm/types.js.map +1 -1
  871. package/dist/components/SynapseForm/useGetFormPropsFromSearchParams.js.map +1 -1
  872. package/dist/components/SynapseHomepageV2/FloatingBlobsBackground.js.map +1 -1
  873. package/dist/components/SynapseHomepageV2/HomepageStyles.js.map +1 -1
  874. package/dist/components/SynapseHomepageV2/SynapseByTheNumbers.js.map +1 -1
  875. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  876. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  877. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
  878. package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasets.js.map +1 -1
  879. package/dist/components/SynapseHomepageV2/SynapseFeatures.js.map +1 -1
  880. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +18 -21
  881. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  882. package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
  883. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  884. package/dist/components/SynapseHomepageV2/SynapseHomepageV2.js.map +1 -1
  885. package/dist/components/SynapseHomepageV2/SynapseHotdrops.js.map +1 -1
  886. package/dist/components/SynapseHomepageV2/SynapseHotdropsItem.js.map +1 -1
  887. package/dist/components/SynapseHomepageV2/SynapseInAction.js.map +1 -1
  888. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  889. package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
  890. package/dist/components/SynapseHomepageV2/SynapsePlan.js.map +1 -1
  891. package/dist/components/SynapseHomepageV2/SynapsePlanContent.js.map +1 -1
  892. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  893. package/dist/components/SynapseHomepageV2/SynapsePlansPage.js.map +1 -1
  894. package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
  895. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  896. package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
  897. package/dist/components/SynapseHomepageV2/WordPressNews.js.map +1 -1
  898. package/dist/components/SynapseHomepageV2/WordPressNewsItem.js.map +1 -1
  899. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +78 -78
  900. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  901. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  902. package/dist/components/SynapseSearchPageResults/HasAccessChip.js.map +1 -1
  903. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  904. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  905. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  906. package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
  907. package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
  908. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  909. package/dist/components/SynapseSearchPageResults/SynapseSearchPageRouter.js.map +1 -1
  910. package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
  911. package/dist/components/SynapseSearchPageResults/chipStyles.js.map +1 -1
  912. package/dist/components/SynapseTable/CustomControls/CustomControlButton.js.map +1 -1
  913. package/dist/components/SynapseTable/CustomControls/CustomControlPanel.js.map +1 -1
  914. package/dist/components/SynapseTable/CustomControls/CustomControls.js.map +1 -1
  915. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  916. package/dist/components/SynapseTable/ExpandCollapseButton.js.map +1 -1
  917. package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
  918. package/dist/components/SynapseTable/NoContentAvailable.js.map +1 -1
  919. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  920. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
  921. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  922. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  923. package/dist/components/SynapseTable/SearchResultsNotFound.js.map +1 -1
  924. package/dist/components/SynapseTable/SearchV2.js.map +1 -1
  925. package/dist/components/SynapseTable/SqlEditor.js.map +1 -1
  926. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  927. package/dist/components/SynapseTable/SynapseTableCell/EntityIdList.js.map +1 -1
  928. package/dist/components/SynapseTable/SynapseTableCell/EvaluationIdRenderer.js.map +1 -1
  929. package/dist/components/SynapseTable/SynapseTableCell/JSON/ComplexJSONRenderer.js.map +1 -1
  930. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONArrayRenderer.js.map +1 -1
  931. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONObjectRenderer.js.map +1 -1
  932. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONPrimitiveRenderer.js.map +1 -1
  933. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONRendererUtils.js.map +1 -1
  934. package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONTableCellRenderer.js.map +1 -1
  935. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  936. package/dist/components/SynapseTable/SynapseTableCell/UserIdList.js.map +1 -1
  937. package/dist/components/SynapseTable/SynapseTableConstants.js.map +1 -1
  938. package/dist/components/SynapseTable/SynapseTableContext.js.map +1 -1
  939. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  940. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  941. package/dist/components/SynapseTable/TableIsEmpty.js.map +1 -1
  942. package/dist/components/SynapseTable/TablePagination.js.map +1 -1
  943. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  944. package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
  945. package/dist/components/SynapseTable/datasets/DatasetEditorCheckboxCell.js.map +1 -1
  946. package/dist/components/SynapseTable/datasets/DatasetEditorUtils.js.map +1 -1
  947. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  948. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +131 -133
  949. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  950. package/dist/components/SynapseTable/datasets/EntityFetchErrorCell.js.map +1 -1
  951. package/dist/components/SynapseTable/export/ADDiscoveryPortalInstructions.js.map +1 -1
  952. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +48 -51
  953. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js.map +1 -1
  954. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformInstructions.js.map +1 -1
  955. package/dist/components/SynapseTable/export/ExternalAnalysisPlatformsConstants.js.map +1 -1
  956. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  957. package/dist/components/SynapseTable/export/ExternalPlatformDisclaimer.js.map +1 -1
  958. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  959. package/dist/components/SynapseTable/table-top/DownloadLoginModal.js.map +1 -1
  960. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  961. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  962. package/dist/components/SynapseTable/useTableSort.js.map +1 -1
  963. package/dist/components/SystemUseNotification/SystemUseNotification.js.map +1 -1
  964. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +4 -4
  965. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  966. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  967. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/FieldWithRecommendedMinimum.js.map +1 -1
  968. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js.map +1 -1
  969. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  970. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js.map +1 -1
  971. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  972. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  973. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
  974. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  975. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
  976. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  977. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.js.map +1 -1
  978. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  979. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  980. package/dist/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.js.map +1 -1
  981. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  982. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.js.map +1 -1
  983. package/dist/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.js.map +1 -1
  984. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  985. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.js.map +1 -1
  986. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  987. package/dist/components/TableFeedCards/TableFeedCards.js.map +1 -1
  988. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  989. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  990. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  991. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
  992. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  993. package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
  994. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  995. package/dist/components/TeamBadge.js.map +1 -1
  996. package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
  997. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  998. package/dist/components/TemplateComponent.js.map +1 -1
  999. package/dist/components/TemporaryBanner/TemporaryBanner.js.map +1 -1
  1000. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  1001. package/dist/components/TermsAndConditions/TermsAndConditionsItem.js.map +1 -1
  1002. package/dist/components/TextField/TextField.js.map +1 -1
  1003. package/dist/components/TextField/TextFieldWithWordLimit.js.map +1 -1
  1004. package/dist/components/TextToComponentCollapse.js.map +1 -1
  1005. package/dist/components/ThemeGallery/ThemeGallery.js.map +1 -1
  1006. package/dist/components/TimelinePlot/TimelineLegendItem.js.map +1 -1
  1007. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  1008. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  1009. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  1010. package/dist/components/TimelinePlot/phasesQueryResponseData.js.map +1 -1
  1011. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  1012. package/dist/components/TotalQueryResults.js.map +1 -1
  1013. package/dist/components/UserCard/Avatar.js.map +1 -1
  1014. package/dist/components/UserCard/UserBadge.js.map +1 -1
  1015. package/dist/components/UserCard/UserCard.js.map +1 -1
  1016. package/dist/components/UserCard/UserCardContextMenu.js.map +1 -1
  1017. package/dist/components/UserCard/UserCardLarge.js.map +1 -1
  1018. package/dist/components/UserCard/UserCardMedium.js.map +1 -1
  1019. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  1020. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
  1021. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  1022. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.js.map +1 -1
  1023. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  1024. package/dist/components/UserOrTeamBadge/UserOrTeamBadge.js.map +1 -1
  1025. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  1026. package/dist/components/UserProfileLinks/UserChallenges.js.map +1 -1
  1027. package/dist/components/UserProfileLinks/UserProfileLinks.js.map +1 -1
  1028. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  1029. package/dist/components/UserProfileLinks/UserTeams.js.map +1 -1
  1030. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  1031. package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
  1032. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  1033. package/dist/components/Webhook/WebhookVerificationDialog.js.map +1 -1
  1034. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  1035. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  1036. package/dist/components/WizardChoiceButton/WizardChoiceButton.js.map +1 -1
  1037. package/dist/components/WizardChoiceButton/WizardChoiceButtonDescription.js.map +1 -1
  1038. package/dist/components/WizardChoiceButton/WizardChoiceButtonGroup.js.map +1 -1
  1039. package/dist/components/WordPress/WordPressLatestPostChip.js.map +1 -1
  1040. package/dist/components/WordPress/useWordPressCategories.js.map +1 -1
  1041. package/dist/components/WordPress/useWordPressPosts.js.map +1 -1
  1042. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  1043. package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
  1044. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  1045. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  1046. package/dist/components/dataaccess/AccessRequirementSearchBox/AccessRequirementSearchBox.js.map +1 -1
  1047. package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
  1048. package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
  1049. package/dist/components/dataaccess/RejectDataAccessRequestModal.js.map +1 -1
  1050. package/dist/components/dataaccess/RejectProfileValidationRequestModal.js.map +1 -1
  1051. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  1052. package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js.map +1 -1
  1053. package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js.map +1 -1
  1054. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  1055. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  1056. package/dist/components/dataaccess/UserAccessRequestHistory/SubmissionSortStateTranslator.js.map +1 -1
  1057. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  1058. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
  1059. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  1060. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  1061. package/dist/components/doi/DoiFormSchemas.js.map +1 -1
  1062. package/dist/components/doi/PrivateEntityDoiWarning.js.map +1 -1
  1063. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  1064. package/dist/components/download_list/DownloadConfirmationUI.js +30 -32
  1065. package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
  1066. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  1067. package/dist/components/download_list/DownloadDetails.js.map +1 -1
  1068. package/dist/components/download_list/index.js.map +1 -1
  1069. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  1070. package/dist/components/entity/metadata/EntityAnnotationKey.js.map +1 -1
  1071. package/dist/components/entity/metadata/EntityModal.js.map +1 -1
  1072. package/dist/components/entity/metadata/MetadataTable.js.map +1 -1
  1073. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  1074. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  1075. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  1076. package/dist/components/entity/page/title_bar/CitationsDialog.js.map +1 -1
  1077. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  1078. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
  1079. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
  1080. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  1081. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  1082. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  1083. package/dist/components/error/ErrorBanner.js.map +1 -1
  1084. package/dist/components/error/ErrorChip.js.map +1 -1
  1085. package/dist/components/error/ErrorPage.js +24 -24
  1086. package/dist/components/error/ErrorPage.js.map +1 -1
  1087. package/dist/components/error/RouteErrorBoundary.js.map +1 -1
  1088. package/dist/components/error/SendMessageToEntityOwnerDialog.js.map +1 -1
  1089. package/dist/components/error/SynapseObjectDOIInfo.js.map +1 -1
  1090. package/dist/components/favorites/FavoriteButton.js.map +1 -1
  1091. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  1092. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  1093. package/dist/components/file/upload/MultiFileUploadProgress.js.map +1 -1
  1094. package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
  1095. package/dist/components/form/RadioGroupWithOtherString.js.map +1 -1
  1096. package/dist/components/home_page/ExpandableContent.js.map +1 -1
  1097. package/dist/components/index.js +48 -47
  1098. package/dist/components/layout/InfiniteTableLayout.js.map +1 -1
  1099. package/dist/components/layout/SWCHeader.js.map +1 -1
  1100. package/dist/components/layout/SWCPageLayout.js.map +1 -1
  1101. package/dist/components/menu/ComplexMenu.js.map +1 -1
  1102. package/dist/components/menu/DropdownMenu.js.map +1 -1
  1103. package/dist/components/row_renderers/Dataset.js.map +1 -1
  1104. package/dist/components/row_renderers/Funder.js.map +1 -1
  1105. package/dist/components/row_renderers/ObservationCard.js.map +1 -1
  1106. package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
  1107. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  1108. package/dist/components/styled/HoverPopover.js.map +1 -1
  1109. package/dist/components/styled/InlineBadge.js.map +1 -1
  1110. package/dist/components/styled/InputSizedButton.js.map +1 -1
  1111. package/dist/components/styled/LargeButton.js.map +1 -1
  1112. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  1113. package/dist/components/styled/LightTooltip.js.map +1 -1
  1114. package/dist/components/styled/StyledFormControl.js.map +1 -1
  1115. package/dist/components/styled/StyledPopover.js.map +1 -1
  1116. package/dist/components/styled/StyledTableContainer.js.map +1 -1
  1117. package/dist/components/styled/WideButton.js.map +1 -1
  1118. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +39 -42
  1119. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -1
  1120. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  1121. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  1122. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
  1123. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -1
  1124. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -1
  1125. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -1
  1126. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +11 -11
  1127. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -1
  1128. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -1
  1129. package/dist/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm.js.map +1 -1
  1130. package/dist/components/trash/TrashCanList.js.map +1 -1
  1131. package/dist/components/utils/Blocker.js.map +1 -1
  1132. package/dist/components/utils/ConditionalWrapper.js.map +1 -1
  1133. package/dist/components/utils/VisibilityObserver.js.map +1 -1
  1134. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  1135. package/dist/components/widgets/EntityColumnImage.js.map +1 -1
  1136. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  1137. package/dist/components/widgets/ImageFileHandle.js.map +1 -1
  1138. package/dist/components/widgets/LoginAwareButton.js.map +1 -1
  1139. package/dist/components/widgets/Range.js.map +1 -1
  1140. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  1141. package/dist/components/widgets/SynapseImage.js.map +1 -1
  1142. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  1143. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  1144. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  1145. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  1146. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  1147. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  1148. package/dist/components/widgets/facet-nav/PlotsContainerSkeleton.js.map +1 -1
  1149. package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
  1150. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  1151. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  1152. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  1153. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  1154. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
  1155. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  1156. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterSkeleton.js.map +1 -1
  1157. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  1158. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  1159. package/dist/components/widgets/query-filter/FacetChip.js.map +1 -1
  1160. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  1161. package/dist/components/widgets/query-filter/FacetFilterHeader.js.map +1 -1
  1162. package/dist/components/widgets/query-filter/FacetFilterSkeleton.js.map +1 -1
  1163. package/dist/components/widgets/query-filter/FacetFilterUtils.js.map +1 -1
  1164. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  1165. package/dist/components/widgets/query-filter/RangeFacetFilter.js +3 -3
  1166. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  1167. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +41 -41
  1168. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  1169. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  1170. package/dist/features/curator/GridPage/components/GridPageRouter.js.map +1 -1
  1171. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  1172. package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
  1173. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
  1174. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
  1175. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
  1176. package/dist/features/curator/dashboard/components/UserOrTeamChip.js.map +1 -1
  1177. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +5 -0
  1178. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  1179. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +227 -181
  1180. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  1181. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  1182. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +3 -0
  1183. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  1184. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  1185. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  1186. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  1187. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  1188. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  1189. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  1190. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  1191. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  1192. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
  1193. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  1194. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  1195. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  1196. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  1197. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  1198. package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
  1199. package/dist/features/entity/metadata-task/utils/getLatestGridSessionForSource.js.map +1 -1
  1200. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -1
  1201. package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
  1202. package/dist/index.js +54 -53
  1203. package/dist/index.js.map +1 -1
  1204. package/dist/mocks/MockAccessApprovals.js.map +1 -1
  1205. package/dist/mocks/MockSynapseContext.js.map +1 -1
  1206. package/dist/mocks/accessRequirement/mockAccessRequirementAcls.js.map +1 -1
  1207. package/dist/mocks/accessRequirement/mockAccessRequirements.js.map +1 -1
  1208. package/dist/mocks/applicationSessionContext/MockApplicationSessionContext.js.map +1 -1
  1209. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  1210. package/dist/mocks/chat/mockChat.js.map +1 -1
  1211. package/dist/mocks/curation/mockCurationTask.js.map +1 -1
  1212. package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
  1213. package/dist/mocks/dataaccess/MockResearchProject.js.map +1 -1
  1214. package/dist/mocks/dataaccess/MockSubmission.js.map +1 -1
  1215. package/dist/mocks/dataaccess/mockAccessRequest.js.map +1 -1
  1216. package/dist/mocks/discussion/mock_discussion.js.map +1 -1
  1217. package/dist/mocks/doi/MockDoi.js.map +1 -1
  1218. package/dist/mocks/entity/index.js.map +1 -1
  1219. package/dist/mocks/entity/mockDataset.js.map +1 -1
  1220. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  1221. package/dist/mocks/entity/mockEntity.js.map +1 -1
  1222. package/dist/mocks/entity/mockEvaluationQueue.js.map +1 -1
  1223. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  1224. package/dist/mocks/entity/mockFileEntityACLVariants.js.map +1 -1
  1225. package/dist/mocks/entity/mockFileView.js.map +1 -1
  1226. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  1227. package/dist/mocks/entity/mockProject.js.map +1 -1
  1228. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  1229. package/dist/mocks/entity/mockReleaseCardsTable.js.map +1 -1
  1230. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  1231. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  1232. package/dist/mocks/faker/fakerUtils.js.map +1 -1
  1233. package/dist/mocks/faker/generateDiscussion.js.map +1 -1
  1234. package/dist/mocks/faker/generateEvaluation.js.map +1 -1
  1235. package/dist/mocks/faker/generateFakeEntity.js.map +1 -1
  1236. package/dist/mocks/faker/generateSubscription.js.map +1 -1
  1237. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  1238. package/dist/mocks/mockCertificationQuiz.js.map +1 -1
  1239. package/dist/mocks/mockDataCatalogQuery.js.map +1 -1
  1240. package/dist/mocks/mockFileViewQuery.js.map +1 -1
  1241. package/dist/mocks/mockOAuthClientAcls.js.map +1 -1
  1242. package/dist/mocks/mockQueryResponseData.js.map +1 -1
  1243. package/dist/mocks/mockQueryResponseDataWithManyEnumFacets.js.map +1 -1
  1244. package/dist/mocks/mockSchema.js.map +1 -1
  1245. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  1246. package/dist/mocks/mockShortIo.js.map +1 -1
  1247. package/dist/mocks/mockSourceAppConfigQuery.js.map +1 -1
  1248. package/dist/mocks/mockSubscription.js.map +1 -1
  1249. package/dist/mocks/mockWiki.js.map +1 -1
  1250. package/dist/mocks/mockWikiPageKey.js.map +1 -1
  1251. package/dist/mocks/mock_drug_tool_data.js.map +1 -1
  1252. package/dist/mocks/mock_file_handle.js.map +1 -1
  1253. package/dist/mocks/mock_file_statistics.js.map +1 -1
  1254. package/dist/mocks/mock_has_access_data.js.map +1 -1
  1255. package/dist/mocks/mock_upload_destination.js.map +1 -1
  1256. package/dist/mocks/msw/handlers/accessRequirementAclHandlers.js.map +1 -1
  1257. package/dist/mocks/msw/handlers/accessRequirementHandlers.js.map +1 -1
  1258. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  1259. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  1260. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  1261. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  1262. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  1263. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  1264. package/dist/mocks/msw/handlers/dataciteHandlers.js.map +1 -1
  1265. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  1266. package/dist/mocks/msw/handlers/doiHandlers.js.map +1 -1
  1267. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  1268. package/dist/mocks/msw/handlers/evaluationHandlers.js.map +1 -1
  1269. package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
  1270. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  1271. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  1272. package/dist/mocks/msw/handlers/messageHandlers.js.map +1 -1
  1273. package/dist/mocks/msw/handlers/oauthClientAclHandlers.js.map +1 -1
  1274. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  1275. package/dist/mocks/msw/handlers/projectStorageHandlers.js.map +1 -1
  1276. package/dist/mocks/msw/handlers/realmHandlers.js.map +1 -1
  1277. package/dist/mocks/msw/handlers/researchProjectHandlers.js.map +1 -1
  1278. package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
  1279. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  1280. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  1281. package/dist/mocks/msw/handlers/shortIoHandlers.js.map +1 -1
  1282. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  1283. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  1284. package/dist/mocks/msw/handlers/tableQueryService.js.map +1 -1
  1285. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  1286. package/dist/mocks/msw/handlers/termsOfServiceHandlers.js.map +1 -1
  1287. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  1288. package/dist/mocks/msw/handlers/webhookHandlers.js.map +1 -1
  1289. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  1290. package/dist/mocks/msw/handlers.js.map +1 -1
  1291. package/dist/mocks/msw/server.d.ts +1 -1
  1292. package/dist/mocks/msw/server.d.ts.map +1 -1
  1293. package/dist/mocks/msw/server.js.map +1 -1
  1294. package/dist/mocks/msw/util/BasicMockedCrudService.js.map +1 -1
  1295. package/dist/mocks/oauth/MockClient.js.map +1 -1
  1296. package/dist/mocks/personalAccessToken/mockPersonalAccessToken.js.map +1 -1
  1297. package/dist/mocks/projectStorage/mockProjectStorageLimits.js.map +1 -1
  1298. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  1299. package/dist/mocks/query/defaultFileViewColumnModels.js.map +1 -1
  1300. package/dist/mocks/query/mockFeaturedDataTabsQueryData.js.map +1 -1
  1301. package/dist/mocks/query/mockHomepageQueryResultData.js.map +1 -1
  1302. package/dist/mocks/query/mockProjectViewQueryResults.js.map +1 -1
  1303. package/dist/mocks/query/mockRejectionReasonsTableQueryResultBundle.js.map +1 -1
  1304. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  1305. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  1306. package/dist/mocks/query/mock_query_data.js.map +1 -1
  1307. package/dist/mocks/query/syn16787123.js.map +1 -1
  1308. package/dist/mocks/query/syn17328596.js.map +1 -1
  1309. package/dist/mocks/query/syn51735464.js.map +1 -1
  1310. package/dist/mocks/query/syn51735464GroupBySpecies.js.map +1 -1
  1311. package/dist/mocks/realm/mockRealmPrincipal.js.map +1 -1
  1312. package/dist/mocks/team/mockTeam.js.map +1 -1
  1313. package/dist/mocks/termsOfService/mockTermsOfService.js.map +1 -1
  1314. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  1315. package/dist/mocks/usergroup/mockUserGroup.js.map +1 -1
  1316. package/dist/ror-client/index.js.map +1 -1
  1317. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  1318. package/dist/stories/ToastDemo.js.map +1 -1
  1319. package/dist/stories/stubs/Alert/MuiAlert.js.map +1 -1
  1320. package/dist/stories/stubs/Button/MuiButton.js.map +1 -1
  1321. package/dist/stories/stubs/Dialog/MuiDialog.js.map +1 -1
  1322. package/dist/stories/stubs/TextField/MuiTextField.js.map +1 -1
  1323. package/dist/stories/stubs/Tooltip/MuiTooltip.js.map +1 -1
  1324. package/dist/synapse-client/HttpClient.js.map +1 -1
  1325. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  1326. package/dist/synapse-client/SynapseClient.js +61 -69
  1327. package/dist/synapse-client/SynapseClient.js.map +1 -1
  1328. package/dist/synapse-client/SynapseClientUtils.js.map +1 -1
  1329. package/dist/synapse-queries/InfiniteQueryUtils.js.map +1 -1
  1330. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  1331. package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
  1332. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  1333. package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
  1334. package/dist/synapse-queries/auth/useChangePassword.js.map +1 -1
  1335. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  1336. package/dist/synapse-queries/auth/useResetPassword.js.map +1 -1
  1337. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  1338. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  1339. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  1340. package/dist/synapse-queries/croissant/useGetCroissantUrl.js.map +1 -1
  1341. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
  1342. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  1343. package/dist/synapse-queries/curation/task/useCurationTask.js +12 -2
  1344. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  1345. package/dist/synapse-queries/dataaccess/useAccessApprovals.js.map +1 -1
  1346. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  1347. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  1348. package/dist/synapse-queries/dataaccess/useGetApprovedSubmissionInfo.js.map +1 -1
  1349. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  1350. package/dist/synapse-queries/docker/useGetDockerTag.js.map +1 -1
  1351. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  1352. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  1353. package/dist/synapse-queries/entity/useActionsRequiredForTableQuery.js.map +1 -1
  1354. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  1355. package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +1 -1
  1356. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  1357. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  1358. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  1359. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  1360. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  1361. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  1362. package/dist/synapse-queries/entity/useGetEntityActionsRequired.js.map +1 -1
  1363. package/dist/synapse-queries/entity/useGetEntityChallenge.js.map +1 -1
  1364. package/dist/synapse-queries/entity/useGetEntityChildren.js.map +1 -1
  1365. package/dist/synapse-queries/entity/useGetEntityForum.js.map +1 -1
  1366. package/dist/synapse-queries/entity/useGetEntityHeaders.js.map +1 -1
  1367. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  1368. package/dist/synapse-queries/entity/useProjectStorage.js.map +1 -1
  1369. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  1370. package/dist/synapse-queries/evaluation/useEvaluation.js.map +1 -1
  1371. package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
  1372. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  1373. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  1374. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  1375. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  1376. package/dist/synapse-queries/file/useSynapseMultipartUpload.js.map +1 -1
  1377. package/dist/synapse-queries/file/useUploadDestination.js.map +1 -1
  1378. package/dist/synapse-queries/forum/useForum.js.map +1 -1
  1379. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  1380. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  1381. package/dist/synapse-queries/github/useGithub.js.map +1 -1
  1382. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  1383. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  1384. package/dist/synapse-queries/grid/useGridPresignedUrl.js.map +1 -1
  1385. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  1386. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  1387. package/dist/synapse-queries/message/useMessage.js.map +1 -1
  1388. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  1389. package/dist/synapse-queries/portal/useListPortals.js.map +1 -1
  1390. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  1391. package/dist/synapse-queries/provenance/useGetActivityForEntity.js.map +1 -1
  1392. package/dist/synapse-queries/realm/useRealmPrincipals.js.map +1 -1
  1393. package/dist/synapse-queries/ror/index.js.map +1 -1
  1394. package/dist/synapse-queries/search/useSearch.js.map +1 -1
  1395. package/dist/synapse-queries/search/useSuggestion.js.map +1 -1
  1396. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  1397. package/dist/synapse-queries/table/useColumnModel.js.map +1 -1
  1398. package/dist/synapse-queries/table/useDefiningSql.js.map +1 -1
  1399. package/dist/synapse-queries/table/useDownloadTable.js.map +1 -1
  1400. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  1401. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  1402. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  1403. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  1404. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  1405. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  1406. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  1407. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  1408. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  1409. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  1410. package/dist/synapse-queries/user/useGetUserProjects.js.map +1 -1
  1411. package/dist/synapse-queries/user/useGetUserTeams.js.map +1 -1
  1412. package/dist/synapse-queries/user/usePersonalAccessToken.js.map +1 -1
  1413. package/dist/synapse-queries/user/useProjects.js.map +1 -1
  1414. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  1415. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  1416. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  1417. package/dist/synapse-queries/verificationSubmission/useVerificationSubmission.js.map +1 -1
  1418. package/dist/synapse-queries/webhook/useWebhook.js.map +1 -1
  1419. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  1420. package/dist/testutils/ComponentToBePassedPropsCustomMatcher.js.map +1 -1
  1421. package/dist/testutils/IsEditingStoreTestUtils.js +17 -0
  1422. package/dist/testutils/IsEditingStoreTestUtils.js.map +1 -0
  1423. package/dist/testutils/LocationTracker.js.map +1 -1
  1424. package/dist/testutils/MarkdownSynapseUtils.js.map +1 -1
  1425. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  1426. package/dist/testutils/TestingLibraryUtils.js +18 -16
  1427. package/dist/testutils/TestingLibraryUtils.js.map +1 -1
  1428. package/dist/testutils/muiDatePickerMock.js.map +1 -1
  1429. package/dist/testutils/vitest.setup.js.map +1 -1
  1430. package/dist/theme/DefaultTheme.js.map +1 -1
  1431. package/dist/theme/ThemeProvider.js.map +1 -1
  1432. package/dist/theme/mergeTheme.js.map +1 -1
  1433. package/dist/theme/palette/Palettes.js.map +1 -1
  1434. package/dist/theme/spreadSx.js.map +1 -1
  1435. package/dist/theme/typography/Link.js.map +1 -1
  1436. package/dist/theme/typography/Typography.js.map +1 -1
  1437. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1438. package/dist/utils/APIConstants.js.map +1 -1
  1439. package/dist/utils/AppUtils/AppUtils.d.ts.map +1 -1
  1440. package/dist/utils/AppUtils/AppUtils.js +11 -11
  1441. package/dist/utils/AppUtils/AppUtils.js.map +1 -1
  1442. package/dist/utils/AppUtils/session/ApplicationSessionContext.js.map +1 -1
  1443. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  1444. package/dist/utils/AppUtils/session/AuthenticationGuard.js.map +1 -1
  1445. package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
  1446. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  1447. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  1448. package/dist/utils/ContentTypeUtils.js.map +1 -1
  1449. package/dist/utils/OrientationBannerConstants.js.map +1 -1
  1450. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  1451. package/dist/utils/SynapseConstants.js.map +1 -1
  1452. package/dist/utils/analytics/sendAnalyticsEvent.js.map +1 -1
  1453. package/dist/utils/analytics/sendSearchEvent.js.map +1 -1
  1454. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  1455. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  1456. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  1457. package/dist/utils/context/AridhiaContext.js.map +1 -1
  1458. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  1459. package/dist/utils/context/FullContextProvider.js.map +1 -1
  1460. package/dist/utils/context/GlobalIsEditingContext.js.map +1 -1
  1461. package/dist/utils/context/SynapseContext.js.map +1 -1
  1462. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  1463. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  1464. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  1465. package/dist/utils/functions/DateFormatter.js.map +1 -1
  1466. package/dist/utils/functions/DateTimeUtils.js.map +1 -1
  1467. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  1468. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  1469. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  1470. package/dist/utils/functions/IsEqualTreatUndefinedAsMissing.js.map +1 -1
  1471. package/dist/utils/functions/IsExternalLink.js.map +1 -1
  1472. package/dist/utils/functions/ObjectUtils.js.map +1 -1
  1473. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  1474. package/dist/utils/functions/RealmUtils.js.map +1 -1
  1475. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  1476. package/dist/utils/functions/ResolveLinkEntity.js.map +1 -1
  1477. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  1478. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  1479. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  1480. package/dist/utils/functions/StringUtils.js.map +1 -1
  1481. package/dist/utils/functions/TableColumnSchemaUtils.js.map +1 -1
  1482. package/dist/utils/functions/calculateFriendlyFileSize.js.map +1 -1
  1483. package/dist/utils/functions/colorPalette.js.map +1 -1
  1484. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  1485. package/dist/utils/functions/dispatchDownloadListChangeEvent.js.map +1 -1
  1486. package/dist/utils/functions/generateCsrfToken.js.map +1 -1
  1487. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  1488. package/dist/utils/functions/getEndpoint.js +3 -3
  1489. package/dist/utils/functions/getEndpoint.js.map +1 -1
  1490. package/dist/utils/functions/getPrincipalDisplayName.js.map +1 -1
  1491. package/dist/utils/functions/getSynapseEntityUrl.js.map +1 -1
  1492. package/dist/utils/functions/getSynapseWebClientLink.js.map +1 -1
  1493. package/dist/utils/functions/getUserData.js.map +1 -1
  1494. package/dist/utils/functions/queryUtils.js.map +1 -1
  1495. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  1496. package/dist/utils/functions/unCamelCase.js.map +1 -1
  1497. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  1498. package/dist/utils/hooks/useCookiePreferences.d.ts.map +1 -1
  1499. package/dist/utils/hooks/useCookiePreferences.js +24 -23
  1500. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  1501. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  1502. package/dist/utils/hooks/useDebouncedEffect.js.map +1 -1
  1503. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  1504. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  1505. package/dist/utils/hooks/useGetEntityMetadata.js.map +1 -1
  1506. package/dist/utils/hooks/useGetGoalData.js +2 -4
  1507. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  1508. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  1509. package/dist/utils/hooks/useGetIsAllSelectedInfiniteList.js.map +1 -1
  1510. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  1511. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  1512. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  1513. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  1514. package/dist/utils/hooks/useIsBot.js.map +1 -1
  1515. package/dist/utils/hooks/useJsonLdScriptElement.js.map +1 -1
  1516. package/dist/utils/hooks/useListState.js.map +1 -1
  1517. package/dist/utils/hooks/useLogin.js.map +1 -1
  1518. package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -1
  1519. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  1520. package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
  1521. package/dist/utils/hooks/useOneSageURL.js.map +1 -1
  1522. package/dist/utils/hooks/useOverlay.js.map +1 -1
  1523. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  1524. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  1525. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  1526. package/dist/utils/hooks/useSet.js.map +1 -1
  1527. package/dist/utils/hooks/useShowDesktop.js.map +1 -1
  1528. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  1529. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  1530. package/dist/utils/hooks/useTraceUpdate.js.map +1 -1
  1531. package/dist/utils/hooks/useTrackTransientListItems.js.map +1 -1
  1532. package/dist/utils/hooks/useUploadFileEntity/getActiveUploadCount.js.map +1 -1
  1533. package/dist/utils/hooks/useUploadFileEntity/getFileEntityIdWithSameName.js.map +1 -1
  1534. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  1535. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  1536. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  1537. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  1538. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  1539. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  1540. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  1541. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  1542. package/dist/utils/html/TargetEnum.js.map +1 -1
  1543. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  1544. package/dist/utils/jsonschema/getEnumeratedValues.js.map +1 -1
  1545. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  1546. package/dist/utils/jsonschema/getRequiredAttributes.js.map +1 -1
  1547. package/dist/utils/jsonschema/getSchemaForProperty.js.map +1 -1
  1548. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  1549. package/dist/utils/jsonschema/getType.js.map +1 -1
  1550. package/dist/utils/searchDefaults.js.map +1 -1
  1551. package/dist/utils/slots/SlotUtils.js.map +1 -1
  1552. package/dist/utils/types/IsType.js.map +1 -1
  1553. package/package.json +67 -66
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedTree.js","names":[],"sources":["../../../../src/components/EntityFinder/tree/VirtualizedTree.tsx"],"sourcesContent":["import React from 'react'\nimport { getEntityChildren } from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n getEntityTypeFromHeader,\n isContainerType,\n} from '@/utils/functions/EntityTypeUtils'\nimport { Writable } from '@/utils/types/Writable'\nimport { ChevronRight, ExpandMore } from '@mui/icons-material'\nimport { Skeleton, Tooltip, Typography } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { EntityChildrenRequest } from '@sage-bionetworks/synapse-types'\nimport { useQueryClient } from '@tanstack/react-query'\nimport dayjs from 'dayjs'\nimport { cloneDeep } from 'lodash-es'\nimport { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport AutoSizer from 'react-virtualized-auto-sizer'\nimport {\n TreeWalker,\n TreeWalkerValue,\n VariableSizeNodeData,\n VariableSizeNodePublicState,\n VariableSizeTree,\n} from 'react-vtree'\nimport { NodeComponentProps } from 'react-vtree/dist/es/Tree'\nimport { EntityBadgeIcons } from '../../EntityBadgeIcons'\nimport { EntityTypeIcon } from '../../EntityIcon'\nimport { SynapseSpinner } from '../../LoadingScreen/LoadingScreen'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport { EntityFinderHeader } from '../EntityFinderHeader'\nimport { EntitySelectionMapType } from '../useEntitySelection'\n\nexport enum EntityTreeNodeType {\n /** The tree component's appearance and interactions will facilitate selection. Nodes will be larger and styles will indicate primary selection */\n SINGLE_PANE,\n /** The tree component's appearance and interactions will facilitate browsing. Nodes will be smaller and styles will indicate secondary selection */\n DUAL_PANE,\n}\n\ntype NodeChildren = Readonly<{\n /** The node's children. If undefined, then children have not been fetched. */\n children?: EntityHeaderNode[]\n /** The token used to fetch the next page of children for this entity. If this property is nullish and children is defined, then all children have been fetched. */\n childrenNextPageToken?: string | null\n}>\n\nexport type EntityHeaderNode = (\n | EntityFinderHeader\n // Only will have a subset of fields if the node is fetched via the entity path:\n | Pick<EntityFinderHeader, 'id' | 'name' | 'type'>\n) &\n NodeChildren\ntype PaginationNode = { __paginationNode: true }\n\ntype TreeNode = EntityHeaderNode | RootNodeConfiguration | PaginationNode\n\nfunction getTreeNodeType(\n node: TreeNode,\n): 'entityHeader' | 'rootNodeConfiguration' | 'pagination' {\n if ('__paginationNode' in node) {\n return 'pagination'\n }\n return 'id' in node ? 'entityHeader' : 'rootNodeConfiguration'\n}\n\nfunction isPaginationNode(node: TreeNode): node is PaginationNode {\n return getTreeNodeType(node) === 'pagination'\n}\n\nfunction isEntityHeaderNode(node: TreeNode): node is EntityHeaderNode {\n return getTreeNodeType(node) === 'entityHeader'\n}\n\nfunction isRootNodeConfiguration(\n node: TreeNode,\n): node is RootNodeConfiguration {\n return getTreeNodeType(node) === 'rootNodeConfiguration'\n}\n\nfunction hasMoreChildren(node: TreeNode) {\n if (isPaginationNode(node)) {\n return false\n } else if (isRootNodeConfiguration(node)) {\n return node.hasNextPage\n }\n\n return node.children == null || node.childrenNextPageToken != null\n}\n\nfunction isLeafNode(node: TreeNode) {\n if (isPaginationNode(node)) {\n return true\n } else if (isRootNodeConfiguration(node)) {\n return false\n } else {\n return (\n // Entity is not a container\n !isContainerType(getEntityTypeFromHeader(node)) ||\n // OR Children have been fetched (nonnull) and there are 0 children\n (node.children != null && node.children.length === 0)\n )\n }\n}\n\nfunction maybeHasChildren(\n node: TreeNode,\n): node is RootNodeConfiguration | EntityHeaderNode {\n if (isPaginationNode(node)) {\n return false\n } else if (isRootNodeConfiguration(node)) {\n return node.children.length > 0 || node.hasNextPage\n } else {\n return !isLeafNode(node)\n }\n}\n\nexport type TreeData = VariableSizeNodeData &\n Readonly<{\n node: TreeNode\n getNextPageOfChildren: () => Promise<void>\n isLeaf: boolean\n nestingLevel: number\n setSelectedId: (entityId: string) => void\n treeNodeType: EntityTreeNodeType\n isSelected: boolean\n isDisabled: boolean\n }>\n\ntype NodeMeta = Readonly<{\n nestingLevel: number\n node: TreeNode\n}>\n\nexport type RootNodeConfiguration = {\n show: boolean\n nodeText: string\n children: EntityHeaderNode[]\n /** If undefined, no more entities to fetch */\n fetchNextPage: () => Promise<void>\n hasNextPage: boolean\n}\n\n/**\n * Converts a TreeNode and related data into a TreeWalkerValue that react-vtree can use to render the tree.\n * Exported for testing purposes only.\n * @param config\n * @returns\n */\nexport const getNodeData = (config: {\n node: TreeNode\n nestingLevel: number\n getNextPageOfChildren: () => Promise<void>\n setSelectedId: (entityId: string) => void\n treeNodeType: EntityTreeNodeType\n selected: EntitySelectionMapType\n selectableTypes: EntityType[]\n autoExpand: (entityId: string) => boolean\n defaultHeight: number\n currentContainer?: string | 'root' | null\n}): TreeWalkerValue<TreeData, NodeMeta> => {\n const {\n node,\n nestingLevel,\n getNextPageOfChildren,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n defaultHeight,\n currentContainer,\n } = config\n\n if (isPaginationNode(node)) {\n throw new Error('Cannot create data for a pagination node')\n }\n\n const id = isRootNodeConfiguration(node) ? 'root' : node.id\n\n const isSelected =\n treeNodeType === EntityTreeNodeType.SINGLE_PANE\n ? selected.has(id)\n : currentContainer === id\n const isDisabled =\n !isRootNodeConfiguration(node) &&\n !selectableTypes.includes(getEntityTypeFromHeader(node))\n\n const isOpenByDefault = autoExpand(id)\n /*\n * If the node is open by default and we haven't fetched its children,\n * fetch the first page (otherwise we won't fetch unless re-toggled)\n */\n if (isOpenByDefault && node.children == null && hasMoreChildren(node)) {\n getNextPageOfChildren()\n }\n\n return {\n data: {\n node,\n getNextPageOfChildren,\n id: id,\n isLeaf: isLeafNode(node),\n isOpenByDefault: isOpenByDefault,\n nestingLevel,\n setSelectedId,\n treeNodeType,\n isSelected,\n isDisabled,\n defaultHeight,\n },\n nestingLevel,\n node,\n }\n}\n\n/**\n * Node component for the react-vtree virtualized tree. Exported only for testing purposes\n */\nexport function Node(\n props: NodeComponentProps<TreeData, VariableSizeNodePublicState<TreeData>>,\n) {\n const {\n data: {\n node,\n getNextPageOfChildren,\n isLeaf,\n id,\n nestingLevel,\n setSelectedId,\n treeNodeType,\n isSelected,\n isDisabled,\n },\n isOpen,\n style,\n setOpen,\n } = props\n\n const [isLoading, setLoading] = useState(false)\n\n const nodeText = isEntityHeaderNode(node) ? (\n <span>{node.name}</span>\n ) : isRootNodeConfiguration(node) ? (\n <span>{node.nodeText}</span>\n ) : (\n // Pagination node\n <Skeleton width={100} />\n )\n\n // We only use this for pagination nodes. If the pagination node comes into view, then immediately call `getNextPageOfChildren`\n const { ref, inView } = useInView()\n\n useEffect(() => {\n if (isPaginationNode(node) && inView) {\n getNextPageOfChildren()\n }\n }, [node, inView, getNextPageOfChildren])\n\n const toggleExpand = useCallback(async () => {\n if (hasMoreChildren(node)) {\n setLoading(true)\n await getNextPageOfChildren()\n await setOpen(!isOpen)\n setLoading(false)\n } else {\n await setOpen(!isOpen)\n }\n }, [getNextPageOfChildren, node, isOpen, setOpen])\n\n /**\n * If in the dual-pane view, expand a node when it becomes selected\n */\n useEffect(() => {\n if (\n treeNodeType === EntityTreeNodeType.DUAL_PANE &&\n isSelected &&\n !isOpen\n ) {\n toggleExpand()\n }\n // Intentionally only toggle the expanded state when isSelected changes, otherwise the node cannot be un-expanded\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSelected])\n\n /**\n * If the height is 0, the node is purposefully hidden. Just render a fragment.\n */\n if ('height' in style && style.height === 0) {\n return <></>\n }\n\n let tooltipContent: ReactNode = ''\n if (isEntityHeaderNode(node)) {\n tooltipContent = (\n <div style={{ textAlign: 'center' }}>\n <Typography\n component=\"span\"\n variant=\"smallText1\"\n sx={{\n display: 'inline',\n }}\n >\n {node.name}\n <br />\n <b>ID: </b>\n {node.id}\n {'modifiedBy' in node && (\n <>\n <br />\n <b>Modified By: </b>\n <UserBadge\n userId={node.modifiedBy.toString()}\n showFullName\n disableLink\n showCardOnHover={false}\n />\n </>\n )}\n {'modifiedOn' in node && (\n <>\n <br />\n <b>Modified On: </b>\n {formatDate(dayjs(node.modifiedOn))}\n </>\n )}\n </Typography>\n </div>\n )\n }\n\n const ExpandIcon = isOpen ? ExpandMore : ChevronRight\n\n return (\n <div\n className={`Node ${\n treeNodeType === EntityTreeNodeType.SINGLE_PANE\n ? 'SelectNode'\n : 'BrowseNode'\n }`}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n onClick={event => {\n event.stopPropagation()\n if (!isDisabled) {\n setSelectedId(id)\n }\n }}\n style={{\n ...style,\n paddingLeft: `${nestingLevel * 20}px`,\n }}\n >\n {!isLeaf && (\n <>\n {isLoading ? (\n <SynapseSpinner size={10} />\n ) : (\n <button\n aria-label={isOpen ? 'Collapse' : 'Expand'}\n onClick={event => {\n event.stopPropagation()\n toggleExpand()\n }}\n >\n <ExpandIcon className=\"ExpandButton\" />\n </button>\n )}\n </>\n )}\n {treeNodeType === EntityTreeNodeType.SINGLE_PANE && ( // SWC-5592\n <div className=\"EntityIcon\">\n {isEntityHeaderNode(node) && (\n <EntityTypeIcon type={getEntityTypeFromHeader(node)} />\n )}\n </div>\n )}\n\n <Tooltip title={tooltipContent} placement=\"right\">\n <div className=\"EntityName\" ref={ref}>\n {nodeText}\n </div>\n </Tooltip>\n\n {treeNodeType === EntityTreeNodeType.SINGLE_PANE && (\n <EntityBadgeIcons\n entityId={id}\n showHasDiscussionThread={false}\n showHasWiki={false}\n showUnlink={false}\n canOpenModal={false}\n />\n )}\n </div>\n )\n}\n\n/**\n * Extracted from the React component for testing purposes\n * @returns a generator function compatible with react-vtree\n */\nexport function getTreeWalkerFunction(\n rootNode: RootNodeConfiguration,\n setSelectedId: VirtualizedTreeProps['setSelectedId'],\n treeNodeType: VirtualizedTreeProps['treeNodeType'],\n selected: VirtualizedTreeProps['selected'],\n selectableTypes: VirtualizedTreeProps['selectableTypes'],\n autoExpand: VirtualizedTreeProps['autoExpand'],\n itemSize: (index?: number) => number,\n currentContainer: VirtualizedTreeProps['currentContainer'],\n fetchNextPageOfChildren: (node: Writable<EntityHeaderNode>) => Promise<void>,\n): TreeWalker<TreeData, NodeMeta> {\n return function* treeWalker() {\n // Step [1]: Define the root node of our tree.\n yield getNodeData({\n node: rootNode,\n nestingLevel: 0,\n getNextPageOfChildren: rootNode.fetchNextPage,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n defaultHeight: itemSize(),\n currentContainer,\n })\n\n while (true) {\n // Step [2]: Get the parent node and nesting level, which will be passed into the Generator.next function by react-vtree.\n // Yielding `undefined` indicates to react-vtree that we've finished iterating children from the last time we were in the loop.\n const parentMeta = yield\n\n if (maybeHasChildren(parentMeta.node)) {\n // Step [3]: Yielding all the known children of the parent\n if (parentMeta.node.children) {\n for (let i = 0; i < parentMeta.node.children.length; i++) {\n const childNode = parentMeta.node.children[i]\n\n yield getNodeData({\n node: childNode,\n nestingLevel: parentMeta.nestingLevel + 1,\n getNextPageOfChildren: () => fetchNextPageOfChildren(childNode),\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n defaultHeight: itemSize(),\n currentContainer,\n })\n }\n }\n\n // Step [4] - If the parent node has more children, render a \"pagination node\" that will fetch more children when it comes into view (via intersection observer)\n if (hasMoreChildren(parentMeta.node)) {\n const paginationNode: PaginationNode = {\n __paginationNode: true,\n }\n const paginationTreeWalkerValue: TreeWalkerValue<TreeData, NodeMeta> =\n {\n data: {\n id: parentMeta.data.id + '-pagination',\n node: paginationNode,\n isOpenByDefault: false,\n getNextPageOfChildren: parentMeta.data.getNextPageOfChildren,\n isLeaf: true,\n isSelected: false,\n defaultHeight: itemSize(),\n isDisabled: true,\n nestingLevel: parentMeta.nestingLevel + 1,\n setSelectedId: () => {},\n treeNodeType,\n },\n nestingLevel: parentMeta.nestingLevel + 1,\n node: {\n __paginationNode: true,\n },\n }\n yield paginationTreeWalkerValue\n }\n }\n }\n }\n}\n\nexport type VirtualizedTreeProps = Readonly<{\n treeNodeType: EntityTreeNodeType\n rootNodeConfiguration: RootNodeConfiguration\n setSelectedId: (entityId: string) => void\n selected: EntitySelectionMapType\n /* currentContainer is the container whose contents are shown on in the right pane in dual-pane configuration, and may only be defined when treeNodeType is DUAL_PANE */\n currentContainer?: string | 'root' | null\n autoExpand: (entityId: string) => boolean\n selectableTypes: EntityType[]\n visibleTypes: EntityType[]\n}>\n\n/**\n * Component that utilizes react-vtree to efficiently display a tree of entities. react-vtree utilizes react-window\n * to only render visible nodes, which eliminates performance issues as seen in SWC-5978.\n */\nexport const VirtualizedTree = (\n props: VirtualizedTreeProps,\n): React.ReactNode => {\n const {\n rootNodeConfiguration,\n setSelectedId,\n treeNodeType,\n selected,\n currentContainer,\n selectableTypes,\n visibleTypes,\n autoExpand,\n } = props\n\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n\n const [rootNode, setRootNode] = useState<RootNodeConfiguration>(\n rootNodeConfiguration,\n )\n\n const treeInstance = useRef<VariableSizeTree<TreeData>>(null)\n\n useEffect(() => {\n setRootNode(rootNodeConfiguration)\n }, [rootNodeConfiguration, rootNodeConfiguration.children])\n\n // This function is used by VariableSizeTree to identify the size of each node in the tree.\n const itemSize = useCallback(\n (index?: number) => {\n /**\n * We must have a root node, but we don't always want to show it.\n * In those cases, set the height of the root node to 0.\n */\n if (index === 0 && !rootNodeConfiguration.show) {\n return 0\n }\n /**\n * The height of all other nodes in the tree varies depending on the tree node type.\n */\n return treeNodeType === EntityTreeNodeType.DUAL_PANE ? 30 : 60\n },\n [treeNodeType, rootNodeConfiguration.show],\n )\n\n /**\n * Fetches the next page of children for a given node. After fetching the children, this method will make a deep clone of the\n * full tree, including the new data, and updates the state of the component\n */\n const fetchNextPageOfChildren = useCallback(\n // Because we update the root node with a copy at the end of this function, we can write to the node under update.\n async (node: Writable<EntityHeaderNode>) => {\n // Fetch the children of the node\n const entityChildrenRequest: EntityChildrenRequest = {\n parentId: node.id,\n nextPageToken: node.childrenNextPageToken,\n includeTypes: visibleTypes,\n }\n const children = await queryClient.fetchQuery({\n queryKey: keyFactory.getEntityChildrenQueryKey(\n entityChildrenRequest,\n false,\n ),\n queryFn: () => getEntityChildren(entityChildrenRequest, accessToken),\n })\n // Update the node data -- add the children and store the nextPageToken\n if (node.children) {\n for (const newChild of children.page) {\n // SWC-6751 - Prevent adding duplicate entries in case this function is called twice\n if (!node.children.find(child => child.id == newChild.id)) {\n node.children.push(newChild)\n }\n }\n } else {\n node.children = children.page\n }\n node.childrenNextPageToken = children.nextPageToken\n\n // Ensure the node for which we fetched children is expanded/open\n if (treeInstance.current) {\n await treeInstance.current.recomputeTree({\n [node.id]: {\n open: true,\n },\n })\n }\n\n // cloneDeep is required to re-render the tree with the new children\n setRootNode(cloneDeep(rootNode))\n },\n [visibleTypes, queryClient, keyFactory, rootNode, accessToken],\n )\n\n /**\n * treeWalker is a generator function used by react-vtree to generate the tree structure. The tree is re-built when the function is updated,\n * so the dependencies specified in useCallback are important.\n */\n const memoizedTreeWalker = useCallback(\n getTreeWalkerFunction(\n rootNode,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n itemSize,\n currentContainer,\n fetchNextPageOfChildren,\n ),\n [\n rootNode,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n currentContainer,\n fetchNextPageOfChildren,\n itemSize,\n ],\n )\n\n return (\n <AutoSizer disableWidth>\n {({ height }: { height: number }) => (\n <VariableSizeTree\n ref={treeInstance}\n treeWalker={memoizedTreeWalker}\n itemSize={itemSize}\n height={height}\n async={true}\n width=\"100%\"\n >\n {Node}\n </VariableSizeTree>\n )}\n </AutoSizer>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VirtualizedTree.js","names":[],"sources":["../../../../src/components/EntityFinder/tree/VirtualizedTree.tsx"],"sourcesContent":["import React from 'react'\nimport { getEntityChildren } from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport {\n getEntityTypeFromHeader,\n isContainerType,\n} from '@/utils/functions/EntityTypeUtils'\nimport { Writable } from '@/utils/types/Writable'\nimport { ChevronRight, ExpandMore } from '@mui/icons-material'\nimport { Skeleton, Tooltip, Typography } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { EntityChildrenRequest } from '@sage-bionetworks/synapse-types'\nimport { useQueryClient } from '@tanstack/react-query'\nimport dayjs from 'dayjs'\nimport { cloneDeep } from 'lodash-es'\nimport { ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport AutoSizer from 'react-virtualized-auto-sizer'\nimport {\n TreeWalker,\n TreeWalkerValue,\n VariableSizeNodeData,\n VariableSizeNodePublicState,\n VariableSizeTree,\n} from 'react-vtree'\nimport { NodeComponentProps } from 'react-vtree/dist/es/Tree'\nimport { EntityBadgeIcons } from '../../EntityBadgeIcons'\nimport { EntityTypeIcon } from '../../EntityIcon'\nimport { SynapseSpinner } from '../../LoadingScreen/LoadingScreen'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport { EntityFinderHeader } from '../EntityFinderHeader'\nimport { EntitySelectionMapType } from '../useEntitySelection'\n\nexport enum EntityTreeNodeType {\n /** The tree component's appearance and interactions will facilitate selection. Nodes will be larger and styles will indicate primary selection */\n SINGLE_PANE,\n /** The tree component's appearance and interactions will facilitate browsing. Nodes will be smaller and styles will indicate secondary selection */\n DUAL_PANE,\n}\n\ntype NodeChildren = Readonly<{\n /** The node's children. If undefined, then children have not been fetched. */\n children?: EntityHeaderNode[]\n /** The token used to fetch the next page of children for this entity. If this property is nullish and children is defined, then all children have been fetched. */\n childrenNextPageToken?: string | null\n}>\n\nexport type EntityHeaderNode = (\n | EntityFinderHeader\n // Only will have a subset of fields if the node is fetched via the entity path:\n | Pick<EntityFinderHeader, 'id' | 'name' | 'type'>\n) &\n NodeChildren\ntype PaginationNode = { __paginationNode: true }\n\ntype TreeNode = EntityHeaderNode | RootNodeConfiguration | PaginationNode\n\nfunction getTreeNodeType(\n node: TreeNode,\n): 'entityHeader' | 'rootNodeConfiguration' | 'pagination' {\n if ('__paginationNode' in node) {\n return 'pagination'\n }\n return 'id' in node ? 'entityHeader' : 'rootNodeConfiguration'\n}\n\nfunction isPaginationNode(node: TreeNode): node is PaginationNode {\n return getTreeNodeType(node) === 'pagination'\n}\n\nfunction isEntityHeaderNode(node: TreeNode): node is EntityHeaderNode {\n return getTreeNodeType(node) === 'entityHeader'\n}\n\nfunction isRootNodeConfiguration(\n node: TreeNode,\n): node is RootNodeConfiguration {\n return getTreeNodeType(node) === 'rootNodeConfiguration'\n}\n\nfunction hasMoreChildren(node: TreeNode) {\n if (isPaginationNode(node)) {\n return false\n } else if (isRootNodeConfiguration(node)) {\n return node.hasNextPage\n }\n\n return node.children == null || node.childrenNextPageToken != null\n}\n\nfunction isLeafNode(node: TreeNode) {\n if (isPaginationNode(node)) {\n return true\n } else if (isRootNodeConfiguration(node)) {\n return false\n } else {\n return (\n // Entity is not a container\n !isContainerType(getEntityTypeFromHeader(node)) ||\n // OR Children have been fetched (nonnull) and there are 0 children\n (node.children != null && node.children.length === 0)\n )\n }\n}\n\nfunction maybeHasChildren(\n node: TreeNode,\n): node is RootNodeConfiguration | EntityHeaderNode {\n if (isPaginationNode(node)) {\n return false\n } else if (isRootNodeConfiguration(node)) {\n return node.children.length > 0 || node.hasNextPage\n } else {\n return !isLeafNode(node)\n }\n}\n\nexport type TreeData = VariableSizeNodeData &\n Readonly<{\n node: TreeNode\n getNextPageOfChildren: () => Promise<void>\n isLeaf: boolean\n nestingLevel: number\n setSelectedId: (entityId: string) => void\n treeNodeType: EntityTreeNodeType\n isSelected: boolean\n isDisabled: boolean\n }>\n\ntype NodeMeta = Readonly<{\n nestingLevel: number\n node: TreeNode\n}>\n\nexport type RootNodeConfiguration = {\n show: boolean\n nodeText: string\n children: EntityHeaderNode[]\n /** If undefined, no more entities to fetch */\n fetchNextPage: () => Promise<void>\n hasNextPage: boolean\n}\n\n/**\n * Converts a TreeNode and related data into a TreeWalkerValue that react-vtree can use to render the tree.\n * Exported for testing purposes only.\n * @param config\n * @returns\n */\nexport const getNodeData = (config: {\n node: TreeNode\n nestingLevel: number\n getNextPageOfChildren: () => Promise<void>\n setSelectedId: (entityId: string) => void\n treeNodeType: EntityTreeNodeType\n selected: EntitySelectionMapType\n selectableTypes: EntityType[]\n autoExpand: (entityId: string) => boolean\n defaultHeight: number\n currentContainer?: string | 'root' | null\n}): TreeWalkerValue<TreeData, NodeMeta> => {\n const {\n node,\n nestingLevel,\n getNextPageOfChildren,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n defaultHeight,\n currentContainer,\n } = config\n\n if (isPaginationNode(node)) {\n throw new Error('Cannot create data for a pagination node')\n }\n\n const id = isRootNodeConfiguration(node) ? 'root' : node.id\n\n const isSelected =\n treeNodeType === EntityTreeNodeType.SINGLE_PANE\n ? selected.has(id)\n : currentContainer === id\n const isDisabled =\n !isRootNodeConfiguration(node) &&\n !selectableTypes.includes(getEntityTypeFromHeader(node))\n\n const isOpenByDefault = autoExpand(id)\n /*\n * If the node is open by default and we haven't fetched its children,\n * fetch the first page (otherwise we won't fetch unless re-toggled)\n */\n if (isOpenByDefault && node.children == null && hasMoreChildren(node)) {\n getNextPageOfChildren()\n }\n\n return {\n data: {\n node,\n getNextPageOfChildren,\n id: id,\n isLeaf: isLeafNode(node),\n isOpenByDefault: isOpenByDefault,\n nestingLevel,\n setSelectedId,\n treeNodeType,\n isSelected,\n isDisabled,\n defaultHeight,\n },\n nestingLevel,\n node,\n }\n}\n\n/**\n * Node component for the react-vtree virtualized tree. Exported only for testing purposes\n */\nexport function Node(\n props: NodeComponentProps<TreeData, VariableSizeNodePublicState<TreeData>>,\n) {\n const {\n data: {\n node,\n getNextPageOfChildren,\n isLeaf,\n id,\n nestingLevel,\n setSelectedId,\n treeNodeType,\n isSelected,\n isDisabled,\n },\n isOpen,\n style,\n setOpen,\n } = props\n\n const [isLoading, setLoading] = useState(false)\n\n const nodeText = isEntityHeaderNode(node) ? (\n <span>{node.name}</span>\n ) : isRootNodeConfiguration(node) ? (\n <span>{node.nodeText}</span>\n ) : (\n // Pagination node\n <Skeleton width={100} />\n )\n\n // We only use this for pagination nodes. If the pagination node comes into view, then immediately call `getNextPageOfChildren`\n const { ref, inView } = useInView()\n\n useEffect(() => {\n if (isPaginationNode(node) && inView) {\n getNextPageOfChildren()\n }\n }, [node, inView, getNextPageOfChildren])\n\n const toggleExpand = useCallback(async () => {\n if (hasMoreChildren(node)) {\n setLoading(true)\n await getNextPageOfChildren()\n await setOpen(!isOpen)\n setLoading(false)\n } else {\n await setOpen(!isOpen)\n }\n }, [getNextPageOfChildren, node, isOpen, setOpen])\n\n /**\n * If in the dual-pane view, expand a node when it becomes selected\n */\n useEffect(() => {\n if (\n treeNodeType === EntityTreeNodeType.DUAL_PANE &&\n isSelected &&\n !isOpen\n ) {\n toggleExpand()\n }\n // Intentionally only toggle the expanded state when isSelected changes, otherwise the node cannot be un-expanded\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isSelected])\n\n /**\n * If the height is 0, the node is purposefully hidden. Just render a fragment.\n */\n if ('height' in style && style.height === 0) {\n return <></>\n }\n\n let tooltipContent: ReactNode = ''\n if (isEntityHeaderNode(node)) {\n tooltipContent = (\n <div style={{ textAlign: 'center' }}>\n <Typography\n component=\"span\"\n variant=\"smallText1\"\n sx={{\n display: 'inline',\n }}\n >\n {node.name}\n <br />\n <b>ID: </b>\n {node.id}\n {'modifiedBy' in node && (\n <>\n <br />\n <b>Modified By: </b>\n <UserBadge\n userId={node.modifiedBy.toString()}\n showFullName\n disableLink\n showCardOnHover={false}\n />\n </>\n )}\n {'modifiedOn' in node && (\n <>\n <br />\n <b>Modified On: </b>\n {formatDate(dayjs(node.modifiedOn))}\n </>\n )}\n </Typography>\n </div>\n )\n }\n\n const ExpandIcon = isOpen ? ExpandMore : ChevronRight\n\n return (\n <div\n className={`Node ${\n treeNodeType === EntityTreeNodeType.SINGLE_PANE\n ? 'SelectNode'\n : 'BrowseNode'\n }`}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n onClick={event => {\n event.stopPropagation()\n if (!isDisabled) {\n setSelectedId(id)\n }\n }}\n style={{\n ...style,\n paddingLeft: `${nestingLevel * 20}px`,\n }}\n >\n {!isLeaf && (\n <>\n {isLoading ? (\n <SynapseSpinner size={10} />\n ) : (\n <button\n aria-label={isOpen ? 'Collapse' : 'Expand'}\n onClick={event => {\n event.stopPropagation()\n toggleExpand()\n }}\n >\n <ExpandIcon className=\"ExpandButton\" />\n </button>\n )}\n </>\n )}\n {treeNodeType === EntityTreeNodeType.SINGLE_PANE && ( // SWC-5592\n <div className=\"EntityIcon\">\n {isEntityHeaderNode(node) && (\n <EntityTypeIcon type={getEntityTypeFromHeader(node)} />\n )}\n </div>\n )}\n\n <Tooltip title={tooltipContent} placement=\"right\">\n <div className=\"EntityName\" ref={ref}>\n {nodeText}\n </div>\n </Tooltip>\n\n {treeNodeType === EntityTreeNodeType.SINGLE_PANE && (\n <EntityBadgeIcons\n entityId={id}\n showHasDiscussionThread={false}\n showHasWiki={false}\n showUnlink={false}\n canOpenModal={false}\n />\n )}\n </div>\n )\n}\n\n/**\n * Extracted from the React component for testing purposes\n * @returns a generator function compatible with react-vtree\n */\nexport function getTreeWalkerFunction(\n rootNode: RootNodeConfiguration,\n setSelectedId: VirtualizedTreeProps['setSelectedId'],\n treeNodeType: VirtualizedTreeProps['treeNodeType'],\n selected: VirtualizedTreeProps['selected'],\n selectableTypes: VirtualizedTreeProps['selectableTypes'],\n autoExpand: VirtualizedTreeProps['autoExpand'],\n itemSize: (index?: number) => number,\n currentContainer: VirtualizedTreeProps['currentContainer'],\n fetchNextPageOfChildren: (node: Writable<EntityHeaderNode>) => Promise<void>,\n): TreeWalker<TreeData, NodeMeta> {\n return function* treeWalker() {\n // Step [1]: Define the root node of our tree.\n yield getNodeData({\n node: rootNode,\n nestingLevel: 0,\n getNextPageOfChildren: rootNode.fetchNextPage,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n defaultHeight: itemSize(),\n currentContainer,\n })\n\n while (true) {\n // Step [2]: Get the parent node and nesting level, which will be passed into the Generator.next function by react-vtree.\n // Yielding `undefined` indicates to react-vtree that we've finished iterating children from the last time we were in the loop.\n const parentMeta = yield\n\n if (maybeHasChildren(parentMeta.node)) {\n // Step [3]: Yielding all the known children of the parent\n if (parentMeta.node.children) {\n for (let i = 0; i < parentMeta.node.children.length; i++) {\n const childNode = parentMeta.node.children[i]\n\n yield getNodeData({\n node: childNode,\n nestingLevel: parentMeta.nestingLevel + 1,\n getNextPageOfChildren: () => fetchNextPageOfChildren(childNode),\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n defaultHeight: itemSize(),\n currentContainer,\n })\n }\n }\n\n // Step [4] - If the parent node has more children, render a \"pagination node\" that will fetch more children when it comes into view (via intersection observer)\n if (hasMoreChildren(parentMeta.node)) {\n const paginationNode: PaginationNode = {\n __paginationNode: true,\n }\n const paginationTreeWalkerValue: TreeWalkerValue<TreeData, NodeMeta> =\n {\n data: {\n id: parentMeta.data.id + '-pagination',\n node: paginationNode,\n isOpenByDefault: false,\n getNextPageOfChildren: parentMeta.data.getNextPageOfChildren,\n isLeaf: true,\n isSelected: false,\n defaultHeight: itemSize(),\n isDisabled: true,\n nestingLevel: parentMeta.nestingLevel + 1,\n setSelectedId: () => {},\n treeNodeType,\n },\n nestingLevel: parentMeta.nestingLevel + 1,\n node: {\n __paginationNode: true,\n },\n }\n yield paginationTreeWalkerValue\n }\n }\n }\n }\n}\n\nexport type VirtualizedTreeProps = Readonly<{\n treeNodeType: EntityTreeNodeType\n rootNodeConfiguration: RootNodeConfiguration\n setSelectedId: (entityId: string) => void\n selected: EntitySelectionMapType\n /* currentContainer is the container whose contents are shown on in the right pane in dual-pane configuration, and may only be defined when treeNodeType is DUAL_PANE */\n currentContainer?: string | 'root' | null\n autoExpand: (entityId: string) => boolean\n selectableTypes: EntityType[]\n visibleTypes: EntityType[]\n}>\n\n/**\n * Component that utilizes react-vtree to efficiently display a tree of entities. react-vtree utilizes react-window\n * to only render visible nodes, which eliminates performance issues as seen in SWC-5978.\n */\nexport const VirtualizedTree = (\n props: VirtualizedTreeProps,\n): React.ReactNode => {\n const {\n rootNodeConfiguration,\n setSelectedId,\n treeNodeType,\n selected,\n currentContainer,\n selectableTypes,\n visibleTypes,\n autoExpand,\n } = props\n\n const { accessToken, keyFactory } = useSynapseContext()\n const queryClient = useQueryClient()\n\n const [rootNode, setRootNode] = useState<RootNodeConfiguration>(\n rootNodeConfiguration,\n )\n\n const treeInstance = useRef<VariableSizeTree<TreeData>>(null)\n\n useEffect(() => {\n setRootNode(rootNodeConfiguration)\n }, [rootNodeConfiguration, rootNodeConfiguration.children])\n\n // This function is used by VariableSizeTree to identify the size of each node in the tree.\n const itemSize = useCallback(\n (index?: number) => {\n /**\n * We must have a root node, but we don't always want to show it.\n * In those cases, set the height of the root node to 0.\n */\n if (index === 0 && !rootNodeConfiguration.show) {\n return 0\n }\n /**\n * The height of all other nodes in the tree varies depending on the tree node type.\n */\n return treeNodeType === EntityTreeNodeType.DUAL_PANE ? 30 : 60\n },\n [treeNodeType, rootNodeConfiguration.show],\n )\n\n /**\n * Fetches the next page of children for a given node. After fetching the children, this method will make a deep clone of the\n * full tree, including the new data, and updates the state of the component\n */\n const fetchNextPageOfChildren = useCallback(\n // Because we update the root node with a copy at the end of this function, we can write to the node under update.\n async (node: Writable<EntityHeaderNode>) => {\n // Fetch the children of the node\n const entityChildrenRequest: EntityChildrenRequest = {\n parentId: node.id,\n nextPageToken: node.childrenNextPageToken,\n includeTypes: visibleTypes,\n }\n const children = await queryClient.fetchQuery({\n queryKey: keyFactory.getEntityChildrenQueryKey(\n entityChildrenRequest,\n false,\n ),\n queryFn: () => getEntityChildren(entityChildrenRequest, accessToken),\n })\n // Update the node data -- add the children and store the nextPageToken\n if (node.children) {\n for (const newChild of children.page) {\n // SWC-6751 - Prevent adding duplicate entries in case this function is called twice\n if (!node.children.find(child => child.id == newChild.id)) {\n node.children.push(newChild)\n }\n }\n } else {\n node.children = children.page\n }\n node.childrenNextPageToken = children.nextPageToken\n\n // Ensure the node for which we fetched children is expanded/open\n if (treeInstance.current) {\n await treeInstance.current.recomputeTree({\n [node.id]: {\n open: true,\n },\n })\n }\n\n // cloneDeep is required to re-render the tree with the new children\n setRootNode(cloneDeep(rootNode))\n },\n [visibleTypes, queryClient, keyFactory, rootNode, accessToken],\n )\n\n /**\n * treeWalker is a generator function used by react-vtree to generate the tree structure. The tree is re-built when the function is updated,\n * so the dependencies specified in useCallback are important.\n */\n const memoizedTreeWalker = useCallback(\n getTreeWalkerFunction(\n rootNode,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n itemSize,\n currentContainer,\n fetchNextPageOfChildren,\n ),\n [\n rootNode,\n setSelectedId,\n treeNodeType,\n selected,\n selectableTypes,\n autoExpand,\n currentContainer,\n fetchNextPageOfChildren,\n itemSize,\n ],\n )\n\n return (\n <AutoSizer disableWidth>\n {({ height }: { height: number }) => (\n <VariableSizeTree\n ref={treeInstance}\n treeWalker={memoizedTreeWalker}\n itemSize={itemSize}\n height={height}\n async={true}\n width=\"100%\"\n >\n {Node}\n </VariableSizeTree>\n )}\n </AutoSizer>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntitySelection.js","names":[],"sources":["../../../src/components/EntityFinder/useEntitySelection.ts"],"sourcesContent":["import { Reference } from '@sage-bionetworks/synapse-types'\nimport { Map } from 'immutable'\nimport { isEqual } from 'lodash-es'\nimport { useCallback, useReducer } from 'react'\n\n// Represents the selection type. The key is the entity ID. Only one version of an entity can be chosen at a time.\nexport type EntitySelectionMapType = Map<string, Reference>\n\nexport function useEntitySelection(\n selectMultiple: boolean,\n initialSelection: EntitySelectionMapType = Map<string, Reference>(),\n) {\n /**\n *\n * @param entity The entity to check selected status\n * @param selected the list of selected entities\n * @returns a boolean array of length equal to entities.length denoting selection status\n */\n const isSelected = useCallback(\n (entity: Reference, selected: EntitySelectionMapType): boolean => {\n const match = selected.get(entity.targetId)\n if (match == null) {\n return false\n }\n return isEqual(entity, match)\n },\n [],\n )\n\n type ReducerAction =\n | {\n type: 'toggleSelection'\n toggledReferences: Reference | Reference[]\n }\n | {\n type: 'setSelection'\n selection: EntitySelectionMapType\n }\n | {\n type: 'setInitialVersion'\n entityId: string\n version: number\n }\n\n /**\n * Given the existing selections and a list of toggled references, return the new list of selections\n * @param currentState\n * @param action\n * @returns\n */\n const entitySelectionReducer = useCallback(\n (\n currentState: EntitySelectionMapType,\n action: ReducerAction,\n ): EntitySelectionMapType => {\n if (action.type === 'setSelection') {\n return action.selection\n }\n if (action.type === 'setInitialVersion') {\n // Safe to call from effects multiple times — only acts the first time\n const existing = currentState.get(action.entityId)\n if (existing != null && existing.targetVersionNumber == null) {\n return currentState.set(action.entityId, {\n targetId: action.entityId,\n targetVersionNumber: action.version,\n })\n }\n // Entity not selected, or already has a version - no-op\n return currentState\n }\n if (action.type === 'toggleSelection') {\n let toggledReferences = action.toggledReferences\n return currentState.withMutations(map => {\n // Note: we currently don't allow selecting two versions of the same entity, so we replace previous selected version with new selected version\n if (!Array.isArray(toggledReferences)) {\n toggledReferences = [toggledReferences]\n }\n toggledReferences.forEach(toggledReference => {\n if (isSelected(toggledReference, currentState)) {\n // remove from selection\n map.delete(toggledReference.targetId)\n } else {\n // add to selection\n if (!selectMultiple) {\n map.clear()\n }\n map.set(toggledReference.targetId, toggledReference)\n }\n })\n })\n }\n return currentState\n },\n [isSelected, selectMultiple],\n )\n\n const [selectedEntities, dispatch] = useReducer(\n entitySelectionReducer,\n initialSelection,\n )\n\n const toggleSelection = useCallback(\n (toggledReferences: Reference | Reference[]) =>\n dispatch({ type: 'toggleSelection', toggledReferences }),\n [],\n )\n\n const setSelection = useCallback(\n (selection: EntitySelectionMapType) =>\n dispatch({ type: 'setSelection', selection }),\n [],\n )\n\n const setInitialVersion = useCallback(\n (entityId: string, version: number) =>\n dispatch({ type: 'setInitialVersion', entityId, version }),\n [],\n )\n\n return {\n selectedEntities,\n toggleSelection,\n setSelection,\n setInitialVersion,\n }\n}\n"],"mappings":";;;;AAQA,SAAgB,EACd,GACA,IAA2C,GAAwB,EACnE;CAOA,IAAM,IAAa,GAChB,GAAmB,MAA8C;EAChE,IAAM,IAAQ,EAAS,IAAI,EAAO,SAAS;AAI3C,SAHI,KAAS,OACJ,KAEF,EAAQ,GAAQ,EAAM;IAE/B,EAAE,CACH,EAqEK,CAAC,GAAkB,KAAY,EA9CN,GAE3B,GACA,MAC2B;AAC3B,MAAI,EAAO,SAAS,eAClB,QAAO,EAAO;AAEhB,MAAI,EAAO,SAAS,qBAAqB;GAEvC,IAAM,IAAW,EAAa,IAAI,EAAO,SAAS;AAQlD,UAPI,KAAY,QAAQ,EAAS,uBAAuB,OAC/C,EAAa,IAAI,EAAO,UAAU;IACvC,UAAU,EAAO;IACjB,qBAAqB,EAAO;IAC7B,CAAC,GAGG;;AAET,MAAI,EAAO,SAAS,mBAAmB;GACrC,IAAI,IAAoB,EAAO;AAC/B,UAAO,EAAa,eAAc,MAAO;AAKvC,IAHK,MAAM,QAAQ,EAAkB,KACnC,IAAoB,CAAC,EAAkB,GAEzC,EAAkB,SAAQ,MAAoB;AAC5C,KAAI,EAAW,GAAkB,EAAa,GAE5C,EAAI,OAAO,EAAiB,SAAS,IAGhC,KACH,EAAI,OAAO,EAEb,EAAI,IAAI,EAAiB,UAAU,EAAiB;MAEtD;KACF;;AAEJ,SAAO;IAET,CAAC,GAAY,EAAe,CAI5B,EACA,EACD;AAoBD,QAAO;EACL;EACA,iBApBsB,GACrB,MACC,EAAS;GAAE,MAAM;GAAmB;GAAmB,CAAC,EAC1D,EAAE,CAiBF;EACA,cAfmB,GAClB,MACC,EAAS;GAAE,MAAM;GAAgB;GAAW,CAAC,EAC/C,EAAE,CAYF;EACA,mBAVwB,GACvB,GAAkB,MACjB,EAAS;GAAE,MAAM;GAAqB;GAAU;GAAS,CAAC,EAC5D,EAAE,CAOF;EACD"}
1
+ {"version":3,"file":"useEntitySelection.js","names":[],"sources":["../../../src/components/EntityFinder/useEntitySelection.ts"],"sourcesContent":["import { Reference } from '@sage-bionetworks/synapse-types'\nimport { Map } from 'immutable'\nimport { isEqual } from 'lodash-es'\nimport { useCallback, useReducer } from 'react'\n\n// Represents the selection type. The key is the entity ID. Only one version of an entity can be chosen at a time.\nexport type EntitySelectionMapType = Map<string, Reference>\n\nexport function useEntitySelection(\n selectMultiple: boolean,\n initialSelection: EntitySelectionMapType = Map<string, Reference>(),\n) {\n /**\n *\n * @param entity The entity to check selected status\n * @param selected the list of selected entities\n * @returns a boolean array of length equal to entities.length denoting selection status\n */\n const isSelected = useCallback(\n (entity: Reference, selected: EntitySelectionMapType): boolean => {\n const match = selected.get(entity.targetId)\n if (match == null) {\n return false\n }\n return isEqual(entity, match)\n },\n [],\n )\n\n type ReducerAction =\n | {\n type: 'toggleSelection'\n toggledReferences: Reference | Reference[]\n }\n | {\n type: 'setSelection'\n selection: EntitySelectionMapType\n }\n | {\n type: 'setInitialVersion'\n entityId: string\n version: number\n }\n\n /**\n * Given the existing selections and a list of toggled references, return the new list of selections\n * @param currentState\n * @param action\n * @returns\n */\n const entitySelectionReducer = useCallback(\n (\n currentState: EntitySelectionMapType,\n action: ReducerAction,\n ): EntitySelectionMapType => {\n if (action.type === 'setSelection') {\n return action.selection\n }\n if (action.type === 'setInitialVersion') {\n // Safe to call from effects multiple times — only acts the first time\n const existing = currentState.get(action.entityId)\n if (existing != null && existing.targetVersionNumber == null) {\n return currentState.set(action.entityId, {\n targetId: action.entityId,\n targetVersionNumber: action.version,\n })\n }\n // Entity not selected, or already has a version - no-op\n return currentState\n }\n if (action.type === 'toggleSelection') {\n let toggledReferences = action.toggledReferences\n return currentState.withMutations(map => {\n // Note: we currently don't allow selecting two versions of the same entity, so we replace previous selected version with new selected version\n if (!Array.isArray(toggledReferences)) {\n toggledReferences = [toggledReferences]\n }\n toggledReferences.forEach(toggledReference => {\n if (isSelected(toggledReference, currentState)) {\n // remove from selection\n map.delete(toggledReference.targetId)\n } else {\n // add to selection\n if (!selectMultiple) {\n map.clear()\n }\n map.set(toggledReference.targetId, toggledReference)\n }\n })\n })\n }\n return currentState\n },\n [isSelected, selectMultiple],\n )\n\n const [selectedEntities, dispatch] = useReducer(\n entitySelectionReducer,\n initialSelection,\n )\n\n const toggleSelection = useCallback(\n (toggledReferences: Reference | Reference[]) =>\n dispatch({ type: 'toggleSelection', toggledReferences }),\n [],\n )\n\n const setSelection = useCallback(\n (selection: EntitySelectionMapType) =>\n dispatch({ type: 'setSelection', selection }),\n [],\n )\n\n const setInitialVersion = useCallback(\n (entityId: string, version: number) =>\n dispatch({ type: 'setInitialVersion', entityId, version }),\n [],\n )\n\n return {\n selectedEntities,\n toggleSelection,\n setSelection,\n setInitialVersion,\n }\n}\n"],"mappings":";;;;AAQA,SAAgB,EACd,GACA,IAA2C,EAAuB,GAClE;CAOA,IAAM,IAAa,GAChB,GAAmB,MAA8C;EAChE,IAAM,IAAQ,EAAS,IAAI,EAAO,QAAQ;EAI1C,OAHI,KAAS,OACJ,KAEF,EAAQ,GAAQ,CAAK;CAC9B,GACA,CAAC,CACH,GAqEM,CAAC,GAAkB,KAAY,EA9CN,GAE3B,GACA,MAC2B;EAC3B,IAAI,EAAO,SAAS,gBAClB,OAAO,EAAO;EAEhB,IAAI,EAAO,SAAS,qBAAqB;GAEvC,IAAM,IAAW,EAAa,IAAI,EAAO,QAAQ;GAQjD,OAPI,KAAY,QAAQ,EAAS,uBAAuB,OAC/C,EAAa,IAAI,EAAO,UAAU;IACvC,UAAU,EAAO;IACjB,qBAAqB,EAAO;GAC9B,CAAC,IAGI;EACT;EACA,IAAI,EAAO,SAAS,mBAAmB;GACrC,IAAI,IAAoB,EAAO;GAC/B,OAAO,EAAa,eAAc,MAAO;IAKvC,AAHK,MAAM,QAAQ,CAAiB,MAClC,IAAoB,CAAC,CAAiB,IAExC,EAAkB,SAAQ,MAAoB;KAC5C,AAAI,EAAW,GAAkB,CAAY,IAE3C,EAAI,OAAO,EAAiB,QAAQ,KAG/B,KACH,EAAI,MAAM,GAEZ,EAAI,IAAI,EAAiB,UAAU,CAAgB;IAEvD,CAAC;GACH,CAAC;EACH;EACA,OAAO;CACT,GACA,CAAC,GAAY,CAAc,CAI3B,GACA,CACF;CAoBA,OAAO;EACL;EACA,iBApBsB,GACrB,MACC,EAAS;GAAE,MAAM;GAAmB;EAAkB,CAAC,GACzD,CAAC,CAiBD;EACA,cAfmB,GAClB,MACC,EAAS;GAAE,MAAM;GAAgB;EAAU,CAAC,GAC9C,CAAC,CAYD;EACA,mBAVwB,GACvB,GAAkB,MACjB,EAAS;GAAE,MAAM;GAAqB;GAAU;EAAQ,CAAC,GAC3D,CAAC,CAOD;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityForm.js","names":[],"sources":["../../../src/components/EntityForm/EntityForm.tsx"],"sourcesContent":["// EntityForm:\nimport SynapseClient from '@/synapse-client'\nimport { getFileHandleContent } from '@/synapse-client/SynapseClient'\nimport { SynapseContext } from '@/utils/context/SynapseContext'\n// Will generate a Form (based on your schema files).\n// Gathers user input (including files)\n// Will give you the Synapse ID of the FileEntity that contains the user form data.\nimport Form from '@rjsf/core'\nimport validator from '@rjsf/validator-ajv8'\nimport {\n EntityId,\n EntityLookupRequest,\n FileEntity,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { Component, ContextType, createRef } from 'react'\n\nexport type EntityFormProps = {\n // Provide the parent container (folder/project), that should contain a folder (named <user_id>) that this user can write to.\n parentContainerId: string\n formSchemaEntityId: string // Synapse file that contains the form schema.\n formUiSchemaEntityId: string // Synapse file that contains the form ui schema.\n initFormData: boolean // If true, it indicates that you’d like to download and pre-fill the form with the user's previous response.\n synIdCallback: (synId: string) => void // callback. Once the form output has been saved to a FileEntity, will send synID back\n}\ntype EntityFormState = {\n error?: any\n isLoading?: boolean\n successfullyUploaded: boolean\n containerId?: string\n userprofile?: UserProfile\n currentFileEntity?: FileEntity // file holding user form data\n formData?: any // form data that prepopulates the form\n formSchema?: any // schema that drives the form\n formUiSchema?: any // ui schema that directs how to render the form elements\n}\n\nexport class EntityForm extends Component<EntityFormProps, EntityFormState> {\n static contextType = SynapseContext\n declare context: NonNullable<ContextType<typeof SynapseContext>>\n\n formRef: any\n\n constructor(props: EntityFormProps) {\n super(props)\n this.formRef = createRef()\n this.state = {\n isLoading: true,\n successfullyUploaded: false,\n }\n }\n\n componentDidMount() {\n this.refresh()\n }\n\n submitForm = () => {\n this.formRef.current.submit()\n }\n\n refresh = () => {\n if (this.context.isAuthenticated && this.context.accessToken) {\n const promises = [\n SynapseClient.getUserProfile(this.context.accessToken),\n SynapseClient.getEntity(\n this.context.accessToken,\n this.props.formSchemaEntityId,\n ),\n SynapseClient.getEntity(\n this.context.accessToken,\n this.props.formUiSchemaEntityId,\n ),\n ] as Promise<any>[]\n Promise.all(promises)\n .then(values => {\n const userprofile: UserProfile = values[0]\n this.getTargetContainer(userprofile, this.context.accessToken!).then(\n // @ts-ignore\n (targetContainerId: string) => {\n const formSchemaFileEntity: FileEntity = values[1]\n const formUiSchemaFileEntity: FileEntity = values[2]\n this.getSchemaFileContent(\n targetContainerId,\n formSchemaFileEntity,\n formUiSchemaFileEntity,\n )\n },\n )\n })\n .catch(error => {\n this.onError(error)\n })\n }\n }\n\n getSchemaFileContent = (\n targetFolderId: string,\n formSchemaFileEntity: FileEntity,\n formUiSchemaFileEntity: FileEntity,\n ) => {\n const promises = [\n SynapseClient.getFileResult(\n formSchemaFileEntity,\n this.context.accessToken,\n true,\n true,\n ),\n SynapseClient.getFileResult(\n formUiSchemaFileEntity,\n this.context.accessToken,\n true,\n true,\n ),\n ]\n\n Promise.all(promises)\n .then(values => {\n try {\n const fileContent = values.map(el => {\n return getFileHandleContent(el.fileHandle!, el.preSignedURL!)\n })\n Promise.all(fileContent)\n .then(el => {\n const formSchemaContent = JSON.parse(el[0])\n const formUiSchemaContent = JSON.parse(el[1])\n this.getExistingFileData(\n targetFolderId,\n formSchemaContent,\n formUiSchemaContent,\n )\n })\n .catch(e => {\n console.log('getSchemaFileContent: Error getting form content', e)\n })\n } catch (e) {\n console.log('getSchemaFileContent: Error getting schema content', e)\n }\n })\n .catch(error => {\n this.onError(error)\n })\n }\n\n getExistingFileData = (\n targetFolderId: string,\n formSchemaContent: any,\n formUiSchemaContent: any,\n ) => {\n // if data already exists, save a reference to the existing entity and prefill the form\n const fileName = `${formSchemaContent.title}.json`\n const entityLookupRequest = {\n entityName: fileName,\n parentId: targetFolderId,\n }\n let formData: any\n let currentFileEntity: FileEntity\n SynapseClient.lookupChildEntity(\n entityLookupRequest,\n this.context.accessToken,\n )\n .then((entityId: EntityId) => {\n // ok, found the existing file\n return SynapseClient.getEntity<FileEntity>(\n this.context.accessToken,\n entityId.id,\n ).then(entity => {\n currentFileEntity = entity\n if (this.props.initFormData) {\n return SynapseClient.getFileResult(\n currentFileEntity,\n this.context.accessToken,\n true,\n true,\n ).then(async existingFileData => {\n try {\n const fileContent = await getFileHandleContent(\n existingFileData.fileHandle!,\n existingFileData.preSignedURL!,\n )\n formData = JSON.parse(fileContent)\n } catch (e) {\n console.log('getExistingFileData: Error setting form data', e)\n }\n })\n }\n // else we're done\n return Promise.resolve()\n })\n })\n .finally(() => {\n this.setState({\n formData,\n currentFileEntity,\n formSchema: formSchemaContent,\n formUiSchema: formUiSchemaContent,\n })\n })\n }\n\n getTargetContainer = async (userprofile: UserProfile, token: string) => {\n const entityLookupRequest: EntityLookupRequest = {\n entityName: userprofile.ownerId,\n parentId: this.props.parentContainerId,\n }\n try {\n const entityId = await SynapseClient.lookupChildEntity(\n entityLookupRequest,\n token,\n )\n // ok, found an entity of the same name.\n console.log(\n `EntityForm uploading to https://www.synapse.org/Synapse:${entityId.id}`,\n )\n this.setState({\n userprofile,\n containerId: entityId.id,\n isLoading: false,\n })\n return entityId.id\n } catch (error) {\n if (error.status === 404) {\n return this.onError(\n new Error(\n 'Your folder has not yet been set up, please retry in a few minutes.',\n ),\n )\n }\n // else\n return this.onError(error)\n }\n }\n\n finishedProcessing = () => {\n this.setState({\n isLoading: false,\n successfullyUploaded: true,\n })\n }\n\n onError = (error: any) => {\n this.setState({\n error,\n isLoading: false,\n successfullyUploaded: false,\n })\n }\n\n onSubmit = ({ formData }: any) => {\n this.setState({\n isLoading: true,\n successfullyUploaded: false,\n })\n\n const submissionFileAndForm: Blob = new Blob([JSON.stringify(formData)], {\n type: 'text/json',\n })\n this.createEntityFile(submissionFileAndForm)\n }\n\n createEntityFile = (fileContentsBlob: Blob) => {\n const fileName = `${this.state.formSchema.title}.json`\n SynapseClient.uploadFile(\n this.context.accessToken,\n fileName,\n fileContentsBlob,\n )\n .then(fileUploadComplete => {\n // do we need to create a new file entity, or update an existing file entity?\n const newFileHandleId = fileUploadComplete.fileHandleId\n if (this.state.currentFileEntity) {\n const updatedFileEntity = {\n ...this.state.currentFileEntity,\n dataFileHandleId: newFileHandleId,\n }\n this.setState({\n currentFileEntity: updatedFileEntity,\n })\n return SynapseClient.updateEntity(\n updatedFileEntity,\n this.context.accessToken,\n )\n }\n // else, it's a new file entity\n const newFileEntity: FileEntity = {\n parentId: this.state.containerId!,\n name: fileName,\n concreteType: 'org.sagebionetworks.repo.model.FileEntity',\n dataFileHandleId: newFileHandleId,\n }\n return SynapseClient.createEntity(\n newFileEntity,\n this.context.accessToken,\n )\n })\n .then(fileEntity => {\n // by this point we've either found and updated the existing file entity, or created a new one.\n this.finishedProcessing()\n if (this.props.synIdCallback) {\n this.props.synIdCallback(fileEntity.id!)\n }\n })\n .catch((error: any) => {\n this.onError(error)\n })\n }\n\n render() {\n return (\n <div>\n {this.state.error && (\n <div className=\"panel panel-danger errors\">\n <div className=\"panel-heading\">\n <h3 className=\"panel-title\">Error</h3>\n </div>\n <ul className=\"list-group\">\n <li className=\"list-group-item text-danger\">\n {this.state.error.name} {this.state.error.reason}\n {this.state.error.message}\n </li>\n </ul>\n </div>\n )}\n {this.context.accessToken &&\n !this.state.isLoading &&\n !this.state.successfullyUploaded &&\n this.state.formSchema &&\n this.state.formUiSchema &&\n !this.state.error && (\n <Form\n validator={validator}\n formData={this.state.formData}\n schema={this.state.formSchema}\n uiSchema={this.state.formUiSchema}\n onSubmit={this.onSubmit}\n ref={this.formRef}\n >\n <div style={{ display: 'none' }}>\n <button type=\"submit\" className=\"btn btn-info\">\n Submit\n </button>\n </div>\n </Form>\n )}\n {!this.state.error &&\n this.context.accessToken &&\n this.state.isLoading && (\n <>\n <span>Saving&hellip;</span>\n <span style={{ marginLeft: '2px' }} className={'spinner'} />\n </>\n )}\n </div>\n )\n }\n}\n\nexport default EntityForm\n"],"mappings":"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"}
1
+ {"version":3,"file":"EntityForm.js","names":[],"sources":["../../../src/components/EntityForm/EntityForm.tsx"],"sourcesContent":["// EntityForm:\nimport SynapseClient from '@/synapse-client'\nimport { getFileHandleContent } from '@/synapse-client/SynapseClient'\nimport { SynapseContext } from '@/utils/context/SynapseContext'\n// Will generate a Form (based on your schema files).\n// Gathers user input (including files)\n// Will give you the Synapse ID of the FileEntity that contains the user form data.\nimport Form from '@rjsf/core'\nimport validator from '@rjsf/validator-ajv8'\nimport {\n EntityId,\n EntityLookupRequest,\n FileEntity,\n UserProfile,\n} from '@sage-bionetworks/synapse-types'\nimport { Component, ContextType, createRef } from 'react'\n\nexport type EntityFormProps = {\n // Provide the parent container (folder/project), that should contain a folder (named <user_id>) that this user can write to.\n parentContainerId: string\n formSchemaEntityId: string // Synapse file that contains the form schema.\n formUiSchemaEntityId: string // Synapse file that contains the form ui schema.\n initFormData: boolean // If true, it indicates that you’d like to download and pre-fill the form with the user's previous response.\n synIdCallback: (synId: string) => void // callback. Once the form output has been saved to a FileEntity, will send synID back\n}\ntype EntityFormState = {\n error?: any\n isLoading?: boolean\n successfullyUploaded: boolean\n containerId?: string\n userprofile?: UserProfile\n currentFileEntity?: FileEntity // file holding user form data\n formData?: any // form data that prepopulates the form\n formSchema?: any // schema that drives the form\n formUiSchema?: any // ui schema that directs how to render the form elements\n}\n\nexport class EntityForm extends Component<EntityFormProps, EntityFormState> {\n static contextType = SynapseContext\n declare context: NonNullable<ContextType<typeof SynapseContext>>\n\n formRef: any\n\n constructor(props: EntityFormProps) {\n super(props)\n this.formRef = createRef()\n this.state = {\n isLoading: true,\n successfullyUploaded: false,\n }\n }\n\n componentDidMount() {\n this.refresh()\n }\n\n submitForm = () => {\n this.formRef.current.submit()\n }\n\n refresh = () => {\n if (this.context.isAuthenticated && this.context.accessToken) {\n const promises = [\n SynapseClient.getUserProfile(this.context.accessToken),\n SynapseClient.getEntity(\n this.context.accessToken,\n this.props.formSchemaEntityId,\n ),\n SynapseClient.getEntity(\n this.context.accessToken,\n this.props.formUiSchemaEntityId,\n ),\n ] as Promise<any>[]\n Promise.all(promises)\n .then(values => {\n const userprofile: UserProfile = values[0]\n this.getTargetContainer(userprofile, this.context.accessToken!).then(\n // @ts-ignore\n (targetContainerId: string) => {\n const formSchemaFileEntity: FileEntity = values[1]\n const formUiSchemaFileEntity: FileEntity = values[2]\n this.getSchemaFileContent(\n targetContainerId,\n formSchemaFileEntity,\n formUiSchemaFileEntity,\n )\n },\n )\n })\n .catch(error => {\n this.onError(error)\n })\n }\n }\n\n getSchemaFileContent = (\n targetFolderId: string,\n formSchemaFileEntity: FileEntity,\n formUiSchemaFileEntity: FileEntity,\n ) => {\n const promises = [\n SynapseClient.getFileResult(\n formSchemaFileEntity,\n this.context.accessToken,\n true,\n true,\n ),\n SynapseClient.getFileResult(\n formUiSchemaFileEntity,\n this.context.accessToken,\n true,\n true,\n ),\n ]\n\n Promise.all(promises)\n .then(values => {\n try {\n const fileContent = values.map(el => {\n return getFileHandleContent(el.fileHandle!, el.preSignedURL!)\n })\n Promise.all(fileContent)\n .then(el => {\n const formSchemaContent = JSON.parse(el[0])\n const formUiSchemaContent = JSON.parse(el[1])\n this.getExistingFileData(\n targetFolderId,\n formSchemaContent,\n formUiSchemaContent,\n )\n })\n .catch(e => {\n console.log('getSchemaFileContent: Error getting form content', e)\n })\n } catch (e) {\n console.log('getSchemaFileContent: Error getting schema content', e)\n }\n })\n .catch(error => {\n this.onError(error)\n })\n }\n\n getExistingFileData = (\n targetFolderId: string,\n formSchemaContent: any,\n formUiSchemaContent: any,\n ) => {\n // if data already exists, save a reference to the existing entity and prefill the form\n const fileName = `${formSchemaContent.title}.json`\n const entityLookupRequest = {\n entityName: fileName,\n parentId: targetFolderId,\n }\n let formData: any\n let currentFileEntity: FileEntity\n SynapseClient.lookupChildEntity(\n entityLookupRequest,\n this.context.accessToken,\n )\n .then((entityId: EntityId) => {\n // ok, found the existing file\n return SynapseClient.getEntity<FileEntity>(\n this.context.accessToken,\n entityId.id,\n ).then(entity => {\n currentFileEntity = entity\n if (this.props.initFormData) {\n return SynapseClient.getFileResult(\n currentFileEntity,\n this.context.accessToken,\n true,\n true,\n ).then(async existingFileData => {\n try {\n const fileContent = await getFileHandleContent(\n existingFileData.fileHandle!,\n existingFileData.preSignedURL!,\n )\n formData = JSON.parse(fileContent)\n } catch (e) {\n console.log('getExistingFileData: Error setting form data', e)\n }\n })\n }\n // else we're done\n return Promise.resolve()\n })\n })\n .finally(() => {\n this.setState({\n formData,\n currentFileEntity,\n formSchema: formSchemaContent,\n formUiSchema: formUiSchemaContent,\n })\n })\n }\n\n getTargetContainer = async (userprofile: UserProfile, token: string) => {\n const entityLookupRequest: EntityLookupRequest = {\n entityName: userprofile.ownerId,\n parentId: this.props.parentContainerId,\n }\n try {\n const entityId = await SynapseClient.lookupChildEntity(\n entityLookupRequest,\n token,\n )\n // ok, found an entity of the same name.\n console.log(\n `EntityForm uploading to https://www.synapse.org/Synapse:${entityId.id}`,\n )\n this.setState({\n userprofile,\n containerId: entityId.id,\n isLoading: false,\n })\n return entityId.id\n } catch (error) {\n if (error.status === 404) {\n return this.onError(\n new Error(\n 'Your folder has not yet been set up, please retry in a few minutes.',\n ),\n )\n }\n // else\n return this.onError(error)\n }\n }\n\n finishedProcessing = () => {\n this.setState({\n isLoading: false,\n successfullyUploaded: true,\n })\n }\n\n onError = (error: any) => {\n this.setState({\n error,\n isLoading: false,\n successfullyUploaded: false,\n })\n }\n\n onSubmit = ({ formData }: any) => {\n this.setState({\n isLoading: true,\n successfullyUploaded: false,\n })\n\n const submissionFileAndForm: Blob = new Blob([JSON.stringify(formData)], {\n type: 'text/json',\n })\n this.createEntityFile(submissionFileAndForm)\n }\n\n createEntityFile = (fileContentsBlob: Blob) => {\n const fileName = `${this.state.formSchema.title}.json`\n SynapseClient.uploadFile(\n this.context.accessToken,\n fileName,\n fileContentsBlob,\n )\n .then(fileUploadComplete => {\n // do we need to create a new file entity, or update an existing file entity?\n const newFileHandleId = fileUploadComplete.fileHandleId\n if (this.state.currentFileEntity) {\n const updatedFileEntity = {\n ...this.state.currentFileEntity,\n dataFileHandleId: newFileHandleId,\n }\n this.setState({\n currentFileEntity: updatedFileEntity,\n })\n return SynapseClient.updateEntity(\n updatedFileEntity,\n this.context.accessToken,\n )\n }\n // else, it's a new file entity\n const newFileEntity: FileEntity = {\n parentId: this.state.containerId!,\n name: fileName,\n concreteType: 'org.sagebionetworks.repo.model.FileEntity',\n dataFileHandleId: newFileHandleId,\n }\n return SynapseClient.createEntity(\n newFileEntity,\n this.context.accessToken,\n )\n })\n .then(fileEntity => {\n // by this point we've either found and updated the existing file entity, or created a new one.\n this.finishedProcessing()\n if (this.props.synIdCallback) {\n this.props.synIdCallback(fileEntity.id!)\n }\n })\n .catch((error: any) => {\n this.onError(error)\n })\n }\n\n render() {\n return (\n <div>\n {this.state.error && (\n <div className=\"panel panel-danger errors\">\n <div className=\"panel-heading\">\n <h3 className=\"panel-title\">Error</h3>\n </div>\n <ul className=\"list-group\">\n <li className=\"list-group-item text-danger\">\n {this.state.error.name} {this.state.error.reason}\n {this.state.error.message}\n </li>\n </ul>\n </div>\n )}\n {this.context.accessToken &&\n !this.state.isLoading &&\n !this.state.successfullyUploaded &&\n this.state.formSchema &&\n this.state.formUiSchema &&\n !this.state.error && (\n <Form\n validator={validator}\n formData={this.state.formData}\n schema={this.state.formSchema}\n uiSchema={this.state.formUiSchema}\n onSubmit={this.onSubmit}\n ref={this.formRef}\n >\n <div style={{ display: 'none' }}>\n <button type=\"submit\" className=\"btn btn-info\">\n Submit\n </button>\n </div>\n </Form>\n )}\n {!this.state.error &&\n this.context.accessToken &&\n this.state.isLoading && (\n <>\n <span>Saving&hellip;</span>\n <span style={{ marginLeft: '2px' }} className={'spinner'} />\n </>\n )}\n </div>\n )\n }\n}\n\nexport default EntityForm\n"],"mappings":";;;;;;;;AAqCA,IAAa,IAAb,cAAgC,EAA4C;CAC1E,OAAO,cAAc;CAGrB;CAEA,YAAY,GAAwB;EAGlC,AAFA,MAAM,CAAK,GACX,KAAK,UAAU,EAAU,GACzB,KAAK,QAAQ;GACX,WAAW;GACX,sBAAsB;EACxB;CACF;CAEA,oBAAoB;EAClB,KAAK,QAAQ;CACf;CAEA,mBAAmB;EACjB,KAAK,QAAQ,QAAQ,OAAO;CAC9B;CAEA,gBAAgB;EACd,IAAI,KAAK,QAAQ,mBAAmB,KAAK,QAAQ,aAAa;GAC5D,IAAM,IAAW;IACf,EAAc,eAAe,KAAK,QAAQ,WAAW;IACrD,EAAc,UACZ,KAAK,QAAQ,aACb,KAAK,MAAM,kBACb;IACA,EAAc,UACZ,KAAK,QAAQ,aACb,KAAK,MAAM,oBACb;GACF;GACA,QAAQ,IAAI,CAAQ,EACjB,MAAK,MAAU;IACd,IAAM,IAA2B,EAAO;IACxC,KAAK,mBAAmB,GAAa,KAAK,QAAQ,WAAY,EAAE,MAE7D,MAA8B;KAC7B,IAAM,IAAmC,EAAO,IAC1C,IAAqC,EAAO;KAClD,KAAK,qBACH,GACA,GACA,CACF;IACF,CACF;GACF,CAAC,EACA,OAAM,MAAS;IACd,KAAK,QAAQ,CAAK;GACpB,CAAC;EACL;CACF;CAEA,wBACE,GACA,GACA,MACG;EACH,IAAM,IAAW,CACf,EAAc,cACZ,GACA,KAAK,QAAQ,aACb,IACA,EACF,GACA,EAAc,cACZ,GACA,KAAK,QAAQ,aACb,IACA,EACF,CACF;EAEA,QAAQ,IAAI,CAAQ,EACjB,MAAK,MAAU;GACd,IAAI;IACF,IAAM,IAAc,EAAO,KAAI,MACtB,EAAqB,EAAG,YAAa,EAAG,YAAa,CAC7D;IACD,QAAQ,IAAI,CAAW,EACpB,MAAK,MAAM;KACV,IAAM,IAAoB,KAAK,MAAM,EAAG,EAAE,GACpC,IAAsB,KAAK,MAAM,EAAG,EAAE;KAC5C,KAAK,oBACH,GACA,GACA,CACF;IACF,CAAC,EACA,OAAM,MAAK;KACV,QAAQ,IAAI,oDAAoD,CAAC;IACnE,CAAC;GACL,SAAS,GAAG;IACV,QAAQ,IAAI,sDAAsD,CAAC;GACrE;EACF,CAAC,EACA,OAAM,MAAS;GACd,KAAK,QAAQ,CAAK;EACpB,CAAC;CACL;CAEA,uBACE,GACA,GACA,MACG;EAGH,IAAM,IAAsB;GAC1B,YAAY,GAFM,EAAkB,MAAM;GAG1C,UAAU;EACZ,GACI,GACA;EACJ,EAAc,kBACZ,GACA,KAAK,QAAQ,WACf,EACG,MAAM,MAEE,EAAc,UACnB,KAAK,QAAQ,aACb,EAAS,EACX,EAAE,MAAK,OACL,IAAoB,GAChB,KAAK,MAAM,eACN,EAAc,cACnB,GACA,KAAK,QAAQ,aACb,IACA,EACF,EAAE,KAAK,OAAM,MAAoB;GAC/B,IAAI;IACF,IAAM,IAAc,MAAM,EACxB,EAAiB,YACjB,EAAiB,YACnB;IACA,IAAW,KAAK,MAAM,CAAW;GACnC,SAAS,GAAG;IACV,QAAQ,IAAI,gDAAgD,CAAC;GAC/D;EACF,CAAC,IAGI,QAAQ,QAAQ,EACxB,CACF,EACA,cAAc;GACb,KAAK,SAAS;IACZ;IACA;IACA,YAAY;IACZ,cAAc;GAChB,CAAC;EACH,CAAC;CACL;CAEA,qBAAqB,OAAO,GAA0B,MAAkB;EACtE,IAAM,IAA2C;GAC/C,YAAY,EAAY;GACxB,UAAU,KAAK,MAAM;EACvB;EACA,IAAI;GACF,IAAM,IAAW,MAAM,EAAc,kBACnC,GACA,CACF;GAUA,OARA,QAAQ,IACN,2DAA2D,EAAS,IACtE,GACA,KAAK,SAAS;IACZ;IACA,aAAa,EAAS;IACtB,WAAW;GACb,CAAC,GACM,EAAS;EAClB,SAAS,GAAO;GASd,OARI,EAAM,WAAW,MACZ,KAAK,QACV,gBAAI,MACF,qEACF,CACF,IAGK,KAAK,QAAQ,CAAK;EAC3B;CACF;CAEA,2BAA2B;EACzB,KAAK,SAAS;GACZ,WAAW;GACX,sBAAsB;EACxB,CAAC;CACH;CAEA,WAAW,MAAe;EACxB,KAAK,SAAS;GACZ;GACA,WAAW;GACX,sBAAsB;EACxB,CAAC;CACH;CAEA,YAAY,EAAE,kBAAoB;EAChC,KAAK,SAAS;GACZ,WAAW;GACX,sBAAsB;EACxB,CAAC;EAED,IAAM,IAA8B,IAAI,KAAK,CAAC,KAAK,UAAU,CAAQ,CAAC,GAAG,EACvE,MAAM,YACR,CAAC;EACD,KAAK,iBAAiB,CAAqB;CAC7C;CAEA,oBAAoB,MAA2B;EAC7C,IAAM,IAAW,GAAG,KAAK,MAAM,WAAW,MAAM;EAChD,EAAc,WACZ,KAAK,QAAQ,aACb,GACA,CACF,EACG,MAAK,MAAsB;GAE1B,IAAM,IAAkB,EAAmB;GAC3C,IAAI,KAAK,MAAM,mBAAmB;IAChC,IAAM,IAAoB;KACxB,GAAG,KAAK,MAAM;KACd,kBAAkB;IACpB;IAIA,OAHA,KAAK,SAAS,EACZ,mBAAmB,EACrB,CAAC,GACM,EAAc,aACnB,GACA,KAAK,QAAQ,WACf;GACF;GAEA,IAAM,IAA4B;IAChC,UAAU,KAAK,MAAM;IACrB,MAAM;IACN,cAAc;IACd,kBAAkB;GACpB;GACA,OAAO,EAAc,aACnB,GACA,KAAK,QAAQ,WACf;EACF,CAAC,EACA,MAAK,MAAc;GAGlB,AADA,KAAK,mBAAmB,GACpB,KAAK,MAAM,iBACb,KAAK,MAAM,cAAc,EAAW,EAAG;EAE3C,CAAC,EACA,OAAO,MAAe;GACrB,KAAK,QAAQ,CAAK;EACpB,CAAC;CACL;CAEA,SAAS;EACP,OACE,kBAAC,OAAD,EAAA,UAAA;GACG,KAAK,MAAM,SACV,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,MAAD;MAAI,WAAU;gBAAc;KAAS,CAAA;IAClC,CAAA,GACL,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,MAAD;MAAI,WAAU;gBAAd;OACG,KAAK,MAAM,MAAM;OAAK;OAAE,KAAK,MAAM,MAAM;OACzC,KAAK,MAAM,MAAM;MAChB;;IACF,CAAA,CACD;;GAEN,KAAK,QAAQ,eACZ,CAAC,KAAK,MAAM,aACZ,CAAC,KAAK,MAAM,wBACZ,KAAK,MAAM,cACX,KAAK,MAAM,gBACX,CAAC,KAAK,MAAM,SACV,kBAAC,GAAD;IACa;IACX,UAAU,KAAK,MAAM;IACrB,QAAQ,KAAK,MAAM;IACnB,UAAU,KAAK,MAAM;IACrB,UAAU,KAAK;IACf,KAAK,KAAK;cAEV,kBAAC,OAAD;KAAK,OAAO,EAAE,SAAS,OAAO;eAC5B,kBAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;gBAAe;KAEvC,CAAA;IACL,CAAA;GACD,CAAA;GAET,CAAC,KAAK,MAAM,SACX,KAAK,QAAQ,eACb,KAAK,MAAM,aACT,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,QAAD,EAAA,UAAM,UAAoB,CAAA,GAC1B,kBAAC,QAAD;IAAM,OAAO,EAAE,YAAY,MAAM;IAAG,WAAW;GAAY,CAAA,CAC3D,EAAA,CAAA;EAEH,EAAA,CAAA;CAET;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"DebouncedInput.js","names":[],"sources":["../../../src/components/EntityHeaderTable/DebouncedInput.tsx"],"sourcesContent":["import { useDebouncedEffect } from '@/utils/hooks'\nimport { Autocomplete, TextField, TextFieldProps } from '@mui/material'\nimport { useState } from 'react'\n\n// A debounced input react component\n\nexport function DebouncedInput({\n initialValue,\n onChange,\n options,\n delay = 250,\n ...textFieldProps\n}: {\n initialValue: string\n onChange: (value: string) => void\n options: string[]\n delay?: number\n} & Pick<\n TextFieldProps,\n 'type' | 'value' | 'placeholder' | 'className' | 'label'\n>) {\n const [value, setValue] = useState(initialValue)\n useDebouncedEffect(\n () => {\n onChange(value)\n },\n [onChange, value],\n delay,\n )\n\n return (\n <Autocomplete\n freeSolo\n disablePortal\n isOptionEqualToValue={(option, value) =>\n value.length == 0 || option === value\n }\n options={options}\n value={value}\n onChange={(event, newValue) => {\n setValue(newValue ?? '')\n }}\n sx={{ marginRight: '10px' }}\n renderInput={params => (\n <TextField\n {...params}\n {...textFieldProps}\n value={value}\n onChange={e => setValue(e.target.value)}\n />\n )}\n />\n )\n}\n"],"mappings":";;;;;;AAMA,SAAgB,EAAe,EAC7B,iBACA,aACA,YACA,WAAQ,KACR,GAAG,KASF;CACD,IAAM,CAAC,GAAO,KAAY,EAAS,EAAa;AAShD,QARA,QACQ;AACJ,IAAS,EAAM;IAEjB,CAAC,GAAU,EAAM,EACjB,EACD,EAGC,kBAAC,GAAD;EACE,UAAA;EACA,eAAA;EACA,uBAAuB,GAAQ,MAC7B,EAAM,UAAU,KAAK,MAAW;EAEzB;EACF;EACP,WAAW,GAAO,MAAa;AAC7B,KAAS,KAAY,GAAG;;EAE1B,IAAI,EAAE,aAAa,QAAQ;EAC3B,cAAa,MACX,kBAAC,GAAD;GACE,GAAI;GACJ,GAAI;GACG;GACP,WAAU,MAAK,EAAS,EAAE,OAAO,MAAM;GACvC,CAAA;EAEJ,CAAA"}
1
+ {"version":3,"file":"DebouncedInput.js","names":[],"sources":["../../../src/components/EntityHeaderTable/DebouncedInput.tsx"],"sourcesContent":["import { useDebouncedEffect } from '@/utils/hooks'\nimport { Autocomplete, TextField, TextFieldProps } from '@mui/material'\nimport { useState } from 'react'\n\n// A debounced input react component\n\nexport function DebouncedInput({\n initialValue,\n onChange,\n options,\n delay = 250,\n ...textFieldProps\n}: {\n initialValue: string\n onChange: (value: string) => void\n options: string[]\n delay?: number\n} & Pick<\n TextFieldProps,\n 'type' | 'value' | 'placeholder' | 'className' | 'label'\n>) {\n const [value, setValue] = useState(initialValue)\n useDebouncedEffect(\n () => {\n onChange(value)\n },\n [onChange, value],\n delay,\n )\n\n return (\n <Autocomplete\n freeSolo\n disablePortal\n isOptionEqualToValue={(option, value) =>\n value.length == 0 || option === value\n }\n options={options}\n value={value}\n onChange={(event, newValue) => {\n setValue(newValue ?? '')\n }}\n sx={{ marginRight: '10px' }}\n renderInput={params => (\n <TextField\n {...params}\n {...textFieldProps}\n value={value}\n onChange={e => setValue(e.target.value)}\n />\n )}\n />\n )\n}\n"],"mappings":";;;;;;AAMA,SAAgB,EAAe,EAC7B,iBACA,aACA,YACA,WAAQ,KACR,GAAG,KASF;CACD,IAAM,CAAC,GAAO,KAAY,EAAS,CAAY;CAS/C,OARA,QACQ;EACJ,EAAS,CAAK;CAChB,GACA,CAAC,GAAU,CAAK,GAChB,CACF,GAGE,kBAAC,GAAD;EACE,UAAA;EACA,eAAA;EACA,uBAAuB,GAAQ,MAC7B,EAAM,UAAU,KAAK,MAAW;EAEzB;EACF;EACP,WAAW,GAAO,MAAa;GAC7B,EAAS,KAAY,EAAE;EACzB;EACA,IAAI,EAAE,aAAa,OAAO;EAC1B,cAAa,MACX,kBAAC,GAAD;GACE,GAAI;GACJ,GAAI;GACG;GACP,WAAU,MAAK,EAAS,EAAE,OAAO,KAAK;EACvC,CAAA;CAEJ,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityHeaderTable.js","names":[],"sources":["../../../src/components/EntityHeaderTable/EntityHeaderTable.tsx"],"sourcesContent":["import React from 'react'\nimport AddAd from '@/assets/icons/AddAd'\nimport { StyledTableContainer } from '@/components/styled/StyledTableContainer'\nimport { useGetEntityHeaders } from '@/synapse-queries/entity/useGetEntityHeaders'\nimport {\n entityTypeToFriendlyName,\n getEntityTypeFromHeader,\n normalizeSynPrefix,\n} from '@/utils/functions/EntityTypeUtils'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n IconButton,\n InputLabel,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { EntityHeader, ReferenceList } from '@sage-bionetworks/synapse-types'\nimport {\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { noop, upperFirst } from 'lodash-es'\nimport papaparseLib from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse } = papaparseLib\nimport pluralize from 'pluralize'\nimport { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n EntityFinderModal,\n EntityFinderModalProps,\n} from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '../EntityFinder/VersionSelectionType'\nimport IconSvg from '../IconSvg'\nimport { SkeletonTable } from '../Skeleton'\nimport {\n CheckBoxCell,\n CheckBoxHeader,\n EntityHeaderIDCell,\n EntityHeaderNameCell,\n EntityHeaderTypeCell,\n} from './EntityHeaderTableCellRenderers'\nimport { Filter } from './Filter'\nimport { useEntityHeaderTableState } from './useEntityHeaderTableState'\n\nconst DEFAULT_FINDER_CONFIG: EntityFinderModalProps['configuration'] = {\n selectMultiple: true,\n versionSelection: VersionSelectionType.DISALLOWED,\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n}\n\nexport type EntityHeaderTableProps = {\n references: ReferenceList\n isEditable: boolean\n disabled?: boolean\n onUpdate?: (updatedRefs: ReferenceList) => void // when the references are updated, EntityHeaderTable will call this function with the updated list\n removeSelectedRowsButtonText?: string\n onUpdateEntityIDsTextbox?: (value: string) => void // when the entity IDs text box is updated, this is called\n /* The word used to describe the items in the table. Default 'entity' */\n objectNameCopy?: string\n // If true, the text field where IDs are pasted is hidden, and confirming the entity finder will immediately call `onUpdate`\n hideTextFieldToPasteValue?: boolean\n entityFinderConfiguration?: EntityFinderModalProps['configuration']\n}\n\nconst UNMANAGEABLE_SUBJECT_COUNT = 10\n\n// extend EntityHeader to create dummy EntityHeader rows for those that the current user cannot view\nexport type EntityHeaderOrDummy = EntityHeader & { isDummy?: boolean }\n\n/**\n * Renders a sortable/filterable table for a set of entity references. If editable, onUpdate will be called back\n * on any entity added/removed.\n */\nexport const EntityHeaderTable = (\n props: EntityHeaderTableProps,\n): React.ReactNode => {\n const {\n references,\n isEditable,\n disabled,\n onUpdate = noop,\n removeSelectedRowsButtonText = 'Remove Selected Rows',\n onUpdateEntityIDsTextbox,\n objectNameCopy = 'entity',\n hideTextFieldToPasteValue = false,\n entityFinderConfiguration = DEFAULT_FINDER_CONFIG,\n } = props\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [showEntityFinder, setShowEntityFinder] = useState<boolean>(false)\n\n const {\n rowSelection,\n setRowSelection,\n refsInState,\n setRefsInState,\n newEntityIDs,\n setNewEntityIDs,\n parseErrors,\n setParseErrors,\n } = useEntityHeaderTableState(references, onUpdateEntityIDsTextbox, onUpdate)\n\n const setInvalidEntityIDError = useCallback(\n (invalidEntityIDs: string[]) => {\n setParseErrors([`Invalid Synapse ID(s): ${invalidEntityIDs.join(',')}`])\n },\n [setParseErrors],\n )\n\n const addRefsFromEntityIDs = useCallback(\n (entityIDs: string[]) => {\n const newReferences: ReferenceList = entityIDs.map(id => {\n return {\n targetId: id.trim(),\n }\n })\n setRefsInState([...refsInState, ...newReferences])\n },\n [refsInState, setRefsInState],\n )\n\n const addPastedValuesToArray = useCallback(() => {\n if (newEntityIDs) {\n if (newEntityIDs.includes(',')) {\n parse<string[]>(newEntityIDs, {\n complete: result => {\n if (result.errors.length > 0) {\n const newParseErrors = result.errors.map(\n parseError => parseError.message,\n )\n setParseErrors(newParseErrors)\n } else {\n const newParsedEntityIDs = result.data[0]\n const invalidEntityIDs = newParsedEntityIDs.filter(\n id => !id.trim().match(SYNAPSE_ENTITY_ID_REGEX),\n )\n if (invalidEntityIDs.length > 0) {\n setInvalidEntityIDError(invalidEntityIDs)\n } else {\n addRefsFromEntityIDs(newParsedEntityIDs)\n }\n }\n },\n })\n } else {\n // single item\n if (!newEntityIDs.trim().match(SYNAPSE_ENTITY_ID_REGEX)) {\n setInvalidEntityIDError([newEntityIDs])\n } else {\n addRefsFromEntityIDs([newEntityIDs])\n }\n }\n } else {\n setParseErrors([])\n setNewEntityIDs('')\n }\n }, [\n addRefsFromEntityIDs,\n newEntityIDs,\n setInvalidEntityIDError,\n setNewEntityIDs,\n setParseErrors,\n ])\n\n const pluralObjectName = upperFirst(pluralize(objectNameCopy))\n\n const selectColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n id: 'select',\n header: CheckBoxHeader,\n cell: CheckBoxCell,\n },\n ],\n [],\n )\n\n const entityHeaderColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.name,\n id: 'name',\n cell: EntityHeaderNameCell,\n header: 'Name',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.id,\n id: 'id',\n cell: EntityHeaderIDCell,\n header: 'SynID',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) =>\n row.isDummy\n ? '-'\n : entityTypeToFriendlyName(getEntityTypeFromHeader(row)),\n id: 'type',\n header: 'Type',\n cell: EntityHeaderTypeCell,\n filterFn: 'includesString',\n },\n ],\n [],\n )\n\n const columns = useMemo<ColumnDef<EntityHeaderOrDummy, any>[]>(\n () =>\n isEditable\n ? selectColumns.concat(entityHeaderColumns)\n : entityHeaderColumns,\n [entityHeaderColumns, isEditable, selectColumns],\n )\n const selectionCount = Object.keys(rowSelection).length\n const {\n data: results,\n isSuccess,\n isLoading,\n } = useGetEntityHeaders(refsInState, {\n throwOnError: true,\n })\n\n const data = useMemo(() => {\n //create dummy entries for values that were not returned by the getEntityHeaders call!\n const newData = results ? results?.results : []\n const newDataEntityIds = new Set()\n newData.forEach(entityHeader =>\n newDataEntityIds.add(normalizeSynPrefix(entityHeader.id)),\n )\n const missingRefs = refsInState.filter(\n ref => !newDataEntityIds.has(normalizeSynPrefix(ref.targetId)),\n )\n const dummyEntityHeaders: EntityHeaderOrDummy[] = missingRefs.map(ref => {\n return {\n id: ref.targetId,\n name: ref.targetId,\n benefactorId: -1,\n type: 'org.sagebionetworks.repo.model.Project',\n createdOn: '',\n modifiedOn: '',\n createdBy: '',\n modifiedBy: '',\n isLatestVersion: true,\n isDummy: true,\n }\n })\n return newData.concat(dummyEntityHeaders)\n }, [refsInState, results])\n const table = useReactTable({\n data,\n columns,\n state: {\n rowSelection,\n columnFilters,\n },\n enableRowSelection: isEditable,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n // debugTable: true,\n // debugHeaders: true,\n // debugColumns: false,\n columnResizeMode: 'onChange',\n })\n\n const onRemove = useCallback(() => {\n // rowSelection looks like {3: true. 5: true} where the key is the row index.\n // Create a new ReferenceList based on the entityHeaders in the current table.\n const updatedData = data.filter(\n (_value, index) => !(rowSelection[index] === true),\n )\n const newRowRefs: ReferenceList = updatedData.map(entityHeader => {\n return {\n targetId: entityHeader.id,\n }\n })\n setRefsInState(newRowRefs)\n }, [data, rowSelection, setRefsInState])\n\n const isSelection = selectionCount > 0\n const totalRowCount = data.length\n const filteredRowCount = table.getPrePaginationRowModel().rows.length\n const showFilterControls = totalRowCount > UNMANAGEABLE_SUBJECT_COUNT\n\n /**\n * Reset the column filters when the filter controls are hidden.\n * This handles the following edge case:\n * 1. List contains 100 items of type \"A\" and 1 of type \"B\"\n * 2. User filters to show just \"A\" items\n * 3. User removes all \"A\" items\n * 4. Only the single \"B\" item remains, but the filter is still present on type \"A\".\n * The filter controls are hidden, so the user cannot see the \"B\" item.\n *\n * This effect will clear the filters when the filter controls are hidden, preventing this scenario.\n */\n useEffect(\n function resetFiltersWhenFilterControlsAreHidden() {\n if (!showFilterControls) {\n table.setColumnFilters([])\n }\n },\n [table, showFilterControls],\n )\n\n if (isLoading) {\n return (\n <SkeletonTable numCols={3} numRows={Math.min(10, refsInState.length)} />\n )\n } else if (!isSuccess) {\n return <></>\n }\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n p: '12px 10px 10px 5px',\n }}\n >\n {showFilterControls && (\n <Typography variant=\"body1\" sx={{ marginBottom: '10px' }}>\n {totalRowCount} {pluralObjectName}{' '}\n {filteredRowCount < totalRowCount\n ? `(${filteredRowCount} visible)`\n : ''}\n {isSelection && <span>{` (${selectionCount} selected)`}</span>}\n </Typography>\n )}\n {isEditable && refsInState.length > 0 && (\n <Button\n variant=\"contained\"\n disabled={!isSelection || disabled}\n onClick={onRemove}\n >\n {removeSelectedRowsButtonText}\n </Button>\n )}\n </Box>\n <Box\n sx={{\n display: 'flex',\n pb: 2,\n }}\n >\n {table.getHeaderGroups().map(headerGroup =>\n headerGroup.headers.map(header => {\n return header.isPlaceholder ? null : (\n <Fragment key={header.column.id}>\n {header.column.getCanFilter() && showFilterControls ? (\n <Box sx={{ flexGrow: 1 }}>\n <Filter column={header.column} table={table} />\n </Box>\n ) : null}\n </Fragment>\n )\n }),\n )}\n </Box>\n {totalRowCount > 0 && (\n <StyledTableContainer\n sx={{\n th: {\n zIndex: 100,\n maxHeight: '250px',\n },\n }}\n >\n <table style={{ borderCollapse: 'collapse', width: '100%' }}>\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(header => {\n let columnSize: string = '5%'\n switch (header.id) {\n case 'name':\n columnSize = '50%'\n break\n case 'id':\n columnSize = '22%'\n break\n case 'type':\n columnSize = '22%'\n break\n default:\n break\n }\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n style={{\n width: columnSize,\n position: 'sticky',\n top: '0px',\n }}\n >\n {header.isPlaceholder ? null : (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n <Box\n sx={{\n mx: 'auto',\n }}\n />\n {header.column.getCanSort() && (\n <IconButton\n onClick={header.column.getToggleSortingHandler()}\n size={'small'}\n sx={{\n marginLeft: 'auto',\n marginRight: '16px',\n }}\n >\n <IconSvg\n icon={\n header.column.getIsSorted() === 'asc'\n ? 'sortUp'\n : 'sortDown'\n }\n wrap={false}\n fontSize={'inherit'}\n sx={{\n color: header.column.getIsSorted()\n ? 'primary.main'\n : 'grey.700',\n backgroundColor: 'none',\n }}\n />\n </IconButton>\n )}\n </Box>\n )}\n {header.column.getCanResize() && (\n <div\n className={`resizer ${\n header.column.getIsResizing() ? 'isResizing' : ''\n }`}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id} style={{ height: '30px' }}>\n {row.getVisibleCells().map(cell => {\n return (\n <td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </StyledTableContainer>\n )}\n <EntityFinderModal\n configuration={entityFinderConfiguration}\n promptCopy={`Select ${pluralObjectName} to add to the Synapse ID list`}\n show={showEntityFinder}\n title={`Select ${pluralObjectName}`}\n confirmButtonCopy={`Add ${pluralObjectName}`}\n onConfirm={items => {\n if (hideTextFieldToPasteValue) {\n const newRefs = [...refsInState, ...items]\n setRefsInState(newRefs)\n onUpdate(newRefs)\n } else {\n const newEntityIDsArray = items.map(ref => ref.targetId)\n const newEntityIDsString =\n newEntityIDs.trim().length > 0\n ? newEntityIDs.concat(',')\n : newEntityIDs\n const newValue = newEntityIDsString.concat(\n newEntityIDsArray.join(','),\n )\n setNewEntityIDs(newValue)\n }\n setShowEntityFinder(false)\n }}\n onCancel={() => setShowEntityFinder(false)}\n />\n {isEditable && (\n <Box sx={{ marginTop: '10px' }}>\n {hideTextFieldToPasteValue && (\n <Button\n variant=\"outlined\"\n onClick={() => {\n setShowEntityFinder(true)\n }}\n startIcon={<AddAd />}\n disabled={disabled}\n >\n Add {pluralObjectName}\n </Button>\n )}\n {!hideTextFieldToPasteValue && (\n <>\n <InputLabel htmlFor=\"synIDs\">Add Synapse IDs</InputLabel>\n <Box\n sx={{ display: 'grid', gridTemplateColumns: 'auto 50px 150px' }}\n >\n <TextField\n id=\"synIDs\"\n name=\"synIDs\"\n fullWidth\n onChange={e => {\n setNewEntityIDs(e.target.value)\n }}\n value={newEntityIDs}\n placeholder=\"Enter a list of Synapse IDs (i.e. 'syn123, syn456')\"\n disabled={disabled}\n />\n <Box sx={{ padding: '5px 0px 0px 5px' }}>\n {/* Entity finder button. On select, append the selected entity ID to the newSynIDs list */}\n <Tooltip title=\"Add a Synapse ID to the list via the Entity Finder\">\n <IconButton\n disabled={disabled}\n onClick={() => {\n setShowEntityFinder(true)\n }}\n >\n <AddAd />\n </IconButton>\n </Tooltip>\n </Box>\n <Button\n variant=\"outlined\"\n onClick={addPastedValuesToArray}\n disabled={\n isLoading || newEntityIDs.trim().length == 0 || disabled\n }\n startIcon={<AddCircleTwoTone />}\n >\n Add {pluralObjectName}\n </Button>\n </Box>\n </>\n )}\n {parseErrors && parseErrors.length > 0 && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n <AlertTitle>Parsing errors encountered:</AlertTitle>\n <ul>\n {parseErrors.map((error, index) => {\n return (\n <Typography\n component={parseErrors.length > 1 ? 'li' : 'span'}\n key={index}\n variant={'smallText1'}\n sx={{\n lineHeight: 1.5,\n }}\n >\n {error}\n </Typography>\n )\n })}\n </ul>\n </Alert>\n )}\n </Box>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsCA,IAAM,EAAE,aAAU,GAqBZ,IAAiE;CACrE,gBAAgB;CAChB,kBAAkB,EAAqB;CACvC,cAAc,EAAY;CAC1B,kBAAkB;CACnB,EAgBK,IAA6B,IAStB,KACX,MACoB;CACpB,IAAM,EACJ,eACA,eACA,aACA,cAAW,IACX,kCAA+B,wBAC/B,8BACA,qBAAiB,UACjB,+BAA4B,IAC5B,gCAA4B,MAC1B,GACE,CAAC,IAAe,MAAoB,EAA6B,EAAE,CAAC,EACpE,CAAC,IAAkB,KAAuB,EAAkB,GAAM,EAElE,EACJ,iBACA,qBACA,gBACA,mBACA,iBACA,oBACA,gBACA,sBACE,EAA0B,GAAY,IAA0B,EAAS,EAEvE,IAA0B,GAC7B,MAA+B;AAC9B,IAAe,CAAC,0BAA0B,EAAiB,KAAK,IAAI,GAAG,CAAC;IAE1E,CAAC,EAAe,CACjB,EAEK,IAAuB,GAC1B,MAAwB;EACvB,IAAM,IAA+B,EAAU,KAAI,OAC1C,EACL,UAAU,EAAG,MAAM,EACpB,EACD;AACF,IAAe,CAAC,GAAG,GAAa,GAAG,EAAc,CAAC;IAEpD,CAAC,GAAa,EAAe,CAC9B,EAEK,KAAyB,QAAkB;AAC/C,EAAI,IACE,EAAa,SAAS,IAAI,GAC5B,EAAgB,GAAc,EAC5B,WAAU,MAAU;AAClB,OAAI,EAAO,OAAO,SAAS,EAIzB,GAHuB,EAAO,OAAO,KACnC,MAAc,EAAW,QAEZ,CAAe;QACzB;IACL,IAAM,IAAqB,EAAO,KAAK,IACjC,IAAmB,EAAmB,QAC1C,MAAM,CAAC,EAAG,MAAM,CAAC,MAAM,EAAwB,CAChD;AACD,IAAI,EAAiB,SAAS,IAC5B,EAAwB,EAAiB,GAEzC,EAAqB,EAAmB;;KAI/C,CAAC,GAGG,EAAa,MAAM,CAAC,MAAM,EAAwB,GAGrD,EAAqB,CAAC,EAAa,CAAC,GAFpC,EAAwB,CAAC,EAAa,CAAC,IAM3C,EAAe,EAAE,CAAC,EAClB,EAAgB,GAAG;IAEpB;EACD;EACA;EACA;EACA;EACA;EACD,CAAC,EAEI,IAAmB,GAAW,GAAU,GAAe,CAAC,EAExD,IAAuD,QACrD,CACJ;EACE,IAAI;EACJ,QAAQ;EACR,MAAM;EACP,CACF,EACD,EAAE,CACH,EAEK,IAA6D,QAC3D;EACJ;GACE,aAAa,MAA6B,EAAI;GAC9C,IAAI;GACJ,MAAM;GACN,QAAQ;GACT;EACD;GACE,aAAa,MAA6B,EAAI;GAC9C,IAAI;GACJ,MAAM;GACN,QAAQ;GACT;EACD;GACE,aAAa,MACX,EAAI,UACA,MACA,EAAyB,EAAwB,EAAI,CAAC;GAC5D,IAAI;GACJ,QAAQ;GACR,MAAM;GACN,UAAU;GACX;EACF,EACD,EAAE,CACH,EAEK,KAAU,QAEZ,IACI,EAAc,OAAO,EAAoB,GACzC,GACN;EAAC;EAAqB;EAAY;EAAc,CACjD,EACK,IAAiB,OAAO,KAAK,EAAa,CAAC,QAC3C,EACJ,MAAM,GACN,eACA,iBACE,GAAoB,GAAa,EACnC,cAAc,IACf,CAAC,EAEI,IAAO,QAAc;EAEzB,IAAM,IAAU,IAAU,GAAS,UAAU,EAAE,EACzC,oBAAmB,IAAI,KAAK;AAClC,IAAQ,SAAQ,MACd,EAAiB,IAAI,EAAmB,EAAa,GAAG,CAAC,CAC1D;EAID,IAAM,IAHc,EAAY,QAC9B,MAAO,CAAC,EAAiB,IAAI,EAAmB,EAAI,SAAS,CAAC,CAEd,CAAY,KAAI,OACzD;GACL,IAAI,EAAI;GACR,MAAM,EAAI;GACV,cAAc;GACd,MAAM;GACN,WAAW;GACX,YAAY;GACZ,WAAW;GACX,YAAY;GACZ,iBAAiB;GACjB,SAAS;GACV,EACD;AACF,SAAO,EAAQ,OAAO,EAAmB;IACxC,CAAC,GAAa,EAAQ,CAAC,EACpB,IAAQ,EAAc;EAC1B;EACA;EACA,OAAO;GACL;GACA;GACD;EACD,oBAAoB;EACpB,sBAAsB;EACtB,uBAAuB;EACvB,iBAAiB,IAAiB;EAClC,qBAAqB,IAAqB;EAC1C,mBAAmB,GAAmB;EACtC,oBAAoB,IAAoB;EACxC,wBAAwB,IAAwB;EAChD,wBAAwB,IAAwB;EAIhD,kBAAkB;EACnB,CAAC,EAEI,KAAW,QAAkB;AAWjC,IARoB,EAAK,QACtB,GAAQ,MAAY,EAAa,OAAW,GAEb,CAAY,KAAI,OACzC,EACL,UAAU,EAAa,IACxB,EAEY,CAAW;IACzB;EAAC;EAAM;EAAc;EAAe,CAAC,EAElC,IAAc,IAAiB,GAC/B,IAAgB,EAAK,QACrB,IAAmB,EAAM,0BAA0B,CAAC,KAAK,QACzD,IAAqB,IAAgB;AA6B3C,QAhBA,EACE,WAAmD;AACjD,EAAK,KACH,EAAM,iBAAiB,EAAE,CAAC;IAG9B,CAAC,GAAO,EAAmB,CAC5B,EAEG,IAEA,kBAAC,IAAD;EAAe,SAAS;EAAG,SAAS,KAAK,IAAI,IAAI,EAAY,OAAO;EAAI,CAAA,GAEhE,KAIV,kBAAC,OAAD,EAAA,UAAA;EACE,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,gBAAgB;IAChB,GAAG;IACJ;aALH,CAOG,KACC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,IAAI,EAAE,cAAc,QAAQ;cAAxD;KACG;KAAc;KAAE;KAAkB;KAClC,IAAmB,IAChB,IAAI,EAAiB,aACrB;KACH,KAAe,kBAAC,QAAD,EAAA,UAAO,KAAK,EAAe,aAAmB,CAAA;KACnD;OAEd,KAAc,EAAY,SAAS,KAClC,kBAAC,GAAD;IACE,SAAQ;IACR,UAAU,CAAC,KAAe;IAC1B,SAAS;cAER;IACM,CAAA,CAEP;;EACN,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,IAAI;IACL;aAEA,EAAM,iBAAiB,CAAC,KAAI,MAC3B,EAAY,QAAQ,KAAI,MACf,EAAO,gBAAgB,OAC5B,kBAAC,GAAD,EAAA,UACG,EAAO,OAAO,cAAc,IAAI,IAC/B,kBAAC,GAAD;IAAK,IAAI,EAAE,UAAU,GAAG;cACtB,kBAAC,IAAD;KAAQ,QAAQ,EAAO;KAAe;KAAS,CAAA;IAC3C,CAAA,GACJ,MACK,EANI,EAAO,OAAO,GAMlB,CAEb,CACH;GACG,CAAA;EACL,IAAgB,KACf,kBAAC,GAAD;GACE,IAAI,EACF,IAAI;IACF,QAAQ;IACR,WAAW;IACZ,EACF;aAED,kBAAC,SAAD;IAAO,OAAO;KAAE,gBAAgB;KAAY,OAAO;KAAQ;cAA3D,CACE,kBAAC,SAAD,EAAA,UACG,EAAM,iBAAiB,CAAC,KAAI,MAC3B,kBAAC,MAAD,EAAA,UACG,EAAY,QAAQ,KAAI,MAAU;KACjC,IAAI,IAAqB;AACzB,aAAQ,EAAO,IAAf;MACE,KAAK;AACH,WAAa;AACb;MACF,KAAK;AACH,WAAa;AACb;MACF,KAAK;AACH,WAAa;AACb;MACF,QACE;;AAEJ,YACE,kBAAC,MAAD;MAEE,SAAS,EAAO;MAChB,OAAO;OACL,OAAO;OACP,UAAU;OACV,KAAK;OACN;gBAPH,CASG,EAAO,gBAAgB,OACtB,kBAAC,GAAD;OACE,IAAI;QACF,SAAS;QACT,YAAY;QACb;iBAJH;QAMG,EACC,EAAO,OAAO,UAAU,QACxB,EAAO,YAAY,CACpB;QACD,kBAAC,GAAD,EACE,IAAI,EACF,IAAI,QACL,EACD,CAAA;QACD,EAAO,OAAO,YAAY,IACzB,kBAAC,GAAD;SACE,SAAS,EAAO,OAAO,yBAAyB;SAChD,MAAM;SACN,IAAI;UACF,YAAY;UACZ,aAAa;UACd;mBAED,kBAAC,IAAD;UACE,MACE,EAAO,OAAO,aAAa,KAAK,QAC5B,WACA;UAEN,MAAM;UACN,UAAU;UACV,IAAI;WACF,OAAO,EAAO,OAAO,aAAa,GAC9B,iBACA;WACJ,iBAAiB;WAClB;UACD,CAAA;SACS,CAAA;QAEX;UAEP,EAAO,OAAO,cAAc,IAC3B,kBAAC,OAAD;OACE,WAAW,WACT,EAAO,OAAO,eAAe,GAAG,eAAe;OAEjD,aAAa,EAAO,kBAAkB;OACtC,cAAc,EAAO,kBAAkB;OACvC,CAAA,CAED;QA7DE,EAAO,GA6DT;MAEP,EACC,EAlFI,EAAY,GAkFhB,CACL,EACI,CAAA,EACR,kBAAC,SAAD,EAAA,UACG,EAAM,aAAa,CAAC,KAAK,KAAI,MAE1B,kBAAC,MAAD;KAAiB,OAAO,EAAE,QAAQ,QAAQ;eACvC,EAAI,iBAAiB,CAAC,KAAI,MAEvB,kBAAC,MAAD;MAEE,OAAO,EACL,OAAO,EAAK,OAAO,SAAS,EAC7B;gBAEA,EACC,EAAK,OAAO,UAAU,MACtB,EAAK,YAAY,CAClB;MACE,EATE,EAAK,GASP,CAEP;KACC,EAhBI,EAAI,GAgBR,CAEP,EACI,CAAA,CACF;;GACa,CAAA;EAEzB,kBAAC,IAAD;GACE,eAAe;GACf,YAAY,UAAU,EAAiB;GACvC,MAAM;GACN,OAAO,UAAU;GACjB,mBAAmB,OAAO;GAC1B,YAAW,MAAS;AAClB,QAAI,GAA2B;KAC7B,IAAM,IAAU,CAAC,GAAG,GAAa,GAAG,EAAM;AAE1C,KADA,EAAe,EAAQ,EACvB,EAAS,EAAQ;WACZ;KACL,IAAM,IAAoB,EAAM,KAAI,MAAO,EAAI,SAAS;AAQxD,QANE,EAAa,MAAM,CAAC,SAAS,IACzB,EAAa,OAAO,IAAI,GACxB,GAC8B,OAClC,EAAkB,KAAK,IAAI,CAEb,CAAS;;AAE3B,MAAoB,GAAM;;GAE5B,gBAAgB,EAAoB,GAAM;GAC1C,CAAA;EACD,KACC,kBAAC,GAAD;GAAK,IAAI,EAAE,WAAW,QAAQ;aAA9B;IACG,KACC,kBAAC,GAAD;KACE,SAAQ;KACR,eAAe;AACb,QAAoB,GAAK;;KAE3B,WAAW,kBAAC,GAAD,EAAS,CAAA;KACV;eANZ,CAOC,QACM,EACE;;IAEV,CAAC,KACA,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,IAAD;KAAY,SAAQ;eAAS;KAA4B,CAAA,EACzD,kBAAC,GAAD;KACE,IAAI;MAAE,SAAS;MAAQ,qBAAqB;MAAmB;eADjE;MAGE,kBAAC,IAAD;OACE,IAAG;OACH,MAAK;OACL,WAAA;OACA,WAAU,MAAK;AACb,UAAgB,EAAE,OAAO,MAAM;;OAEjC,OAAO;OACP,aAAY;OACF;OACV,CAAA;MACF,kBAAC,GAAD;OAAK,IAAI,EAAE,SAAS,mBAAmB;iBAErC,kBAAC,IAAD;QAAS,OAAM;kBACb,kBAAC,GAAD;SACY;SACV,eAAe;AACb,YAAoB,GAAK;;mBAG3B,kBAAC,GAAD,EAAS,CAAA;SACE,CAAA;QACL,CAAA;OACN,CAAA;MACN,kBAAC,GAAD;OACE,SAAQ;OACR,SAAS;OACT,UACE,KAAa,EAAa,MAAM,CAAC,UAAU,KAAK;OAElD,WAAW,kBAAC,IAAD,EAAoB,CAAA;iBANjC,CAOC,QACM,EACE;;MACL;OACL,EAAA,CAAA;IAEJ,KAAe,EAAY,SAAS,KACnC,kBAAC,IAAD;KAAO,UAAU;KAAS,IAAI,EAAE,IAAI,GAAG;eAAvC,CACE,kBAAC,IAAD,EAAA,UAAY,+BAAwC,CAAA,EACpD,kBAAC,MAAD,EAAA,UACG,EAAY,KAAK,GAAO,MAErB,kBAAC,GAAD;MACE,WAAW,EAAY,SAAS,IAAI,OAAO;MAE3C,SAAS;MACT,IAAI,EACF,YAAY,KACb;gBAEA;MACU,EAPN,EAOM,CAEf,EACC,CAAA,CACC;;IAEN;;EAEJ,EAAA,CAAA,GAvRC,kBAAA,GAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"EntityHeaderTable.js","names":[],"sources":["../../../src/components/EntityHeaderTable/EntityHeaderTable.tsx"],"sourcesContent":["import React from 'react'\nimport AddAd from '@/assets/icons/AddAd'\nimport { StyledTableContainer } from '@/components/styled/StyledTableContainer'\nimport { useGetEntityHeaders } from '@/synapse-queries/entity/useGetEntityHeaders'\nimport {\n entityTypeToFriendlyName,\n getEntityTypeFromHeader,\n normalizeSynPrefix,\n} from '@/utils/functions/EntityTypeUtils'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n IconButton,\n InputLabel,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { EntityHeader, ReferenceList } from '@sage-bionetworks/synapse-types'\nimport {\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { noop, upperFirst } from 'lodash-es'\nimport papaparseLib from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse } = papaparseLib\nimport pluralize from 'pluralize'\nimport { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n EntityFinderModal,\n EntityFinderModalProps,\n} from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '../EntityFinder/VersionSelectionType'\nimport IconSvg from '../IconSvg'\nimport { SkeletonTable } from '../Skeleton'\nimport {\n CheckBoxCell,\n CheckBoxHeader,\n EntityHeaderIDCell,\n EntityHeaderNameCell,\n EntityHeaderTypeCell,\n} from './EntityHeaderTableCellRenderers'\nimport { Filter } from './Filter'\nimport { useEntityHeaderTableState } from './useEntityHeaderTableState'\n\nconst DEFAULT_FINDER_CONFIG: EntityFinderModalProps['configuration'] = {\n selectMultiple: true,\n versionSelection: VersionSelectionType.DISALLOWED,\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n}\n\nexport type EntityHeaderTableProps = {\n references: ReferenceList\n isEditable: boolean\n disabled?: boolean\n onUpdate?: (updatedRefs: ReferenceList) => void // when the references are updated, EntityHeaderTable will call this function with the updated list\n removeSelectedRowsButtonText?: string\n onUpdateEntityIDsTextbox?: (value: string) => void // when the entity IDs text box is updated, this is called\n /* The word used to describe the items in the table. Default 'entity' */\n objectNameCopy?: string\n // If true, the text field where IDs are pasted is hidden, and confirming the entity finder will immediately call `onUpdate`\n hideTextFieldToPasteValue?: boolean\n entityFinderConfiguration?: EntityFinderModalProps['configuration']\n}\n\nconst UNMANAGEABLE_SUBJECT_COUNT = 10\n\n// extend EntityHeader to create dummy EntityHeader rows for those that the current user cannot view\nexport type EntityHeaderOrDummy = EntityHeader & { isDummy?: boolean }\n\n/**\n * Renders a sortable/filterable table for a set of entity references. If editable, onUpdate will be called back\n * on any entity added/removed.\n */\nexport const EntityHeaderTable = (\n props: EntityHeaderTableProps,\n): React.ReactNode => {\n const {\n references,\n isEditable,\n disabled,\n onUpdate = noop,\n removeSelectedRowsButtonText = 'Remove Selected Rows',\n onUpdateEntityIDsTextbox,\n objectNameCopy = 'entity',\n hideTextFieldToPasteValue = false,\n entityFinderConfiguration = DEFAULT_FINDER_CONFIG,\n } = props\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [showEntityFinder, setShowEntityFinder] = useState<boolean>(false)\n\n const {\n rowSelection,\n setRowSelection,\n refsInState,\n setRefsInState,\n newEntityIDs,\n setNewEntityIDs,\n parseErrors,\n setParseErrors,\n } = useEntityHeaderTableState(references, onUpdateEntityIDsTextbox, onUpdate)\n\n const setInvalidEntityIDError = useCallback(\n (invalidEntityIDs: string[]) => {\n setParseErrors([`Invalid Synapse ID(s): ${invalidEntityIDs.join(',')}`])\n },\n [setParseErrors],\n )\n\n const addRefsFromEntityIDs = useCallback(\n (entityIDs: string[]) => {\n const newReferences: ReferenceList = entityIDs.map(id => {\n return {\n targetId: id.trim(),\n }\n })\n setRefsInState([...refsInState, ...newReferences])\n },\n [refsInState, setRefsInState],\n )\n\n const addPastedValuesToArray = useCallback(() => {\n if (newEntityIDs) {\n if (newEntityIDs.includes(',')) {\n parse<string[]>(newEntityIDs, {\n complete: result => {\n if (result.errors.length > 0) {\n const newParseErrors = result.errors.map(\n parseError => parseError.message,\n )\n setParseErrors(newParseErrors)\n } else {\n const newParsedEntityIDs = result.data[0]\n const invalidEntityIDs = newParsedEntityIDs.filter(\n id => !id.trim().match(SYNAPSE_ENTITY_ID_REGEX),\n )\n if (invalidEntityIDs.length > 0) {\n setInvalidEntityIDError(invalidEntityIDs)\n } else {\n addRefsFromEntityIDs(newParsedEntityIDs)\n }\n }\n },\n })\n } else {\n // single item\n if (!newEntityIDs.trim().match(SYNAPSE_ENTITY_ID_REGEX)) {\n setInvalidEntityIDError([newEntityIDs])\n } else {\n addRefsFromEntityIDs([newEntityIDs])\n }\n }\n } else {\n setParseErrors([])\n setNewEntityIDs('')\n }\n }, [\n addRefsFromEntityIDs,\n newEntityIDs,\n setInvalidEntityIDError,\n setNewEntityIDs,\n setParseErrors,\n ])\n\n const pluralObjectName = upperFirst(pluralize(objectNameCopy))\n\n const selectColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n id: 'select',\n header: CheckBoxHeader,\n cell: CheckBoxCell,\n },\n ],\n [],\n )\n\n const entityHeaderColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.name,\n id: 'name',\n cell: EntityHeaderNameCell,\n header: 'Name',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.id,\n id: 'id',\n cell: EntityHeaderIDCell,\n header: 'SynID',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) =>\n row.isDummy\n ? '-'\n : entityTypeToFriendlyName(getEntityTypeFromHeader(row)),\n id: 'type',\n header: 'Type',\n cell: EntityHeaderTypeCell,\n filterFn: 'includesString',\n },\n ],\n [],\n )\n\n const columns = useMemo<ColumnDef<EntityHeaderOrDummy, any>[]>(\n () =>\n isEditable\n ? selectColumns.concat(entityHeaderColumns)\n : entityHeaderColumns,\n [entityHeaderColumns, isEditable, selectColumns],\n )\n const selectionCount = Object.keys(rowSelection).length\n const {\n data: results,\n isSuccess,\n isLoading,\n } = useGetEntityHeaders(refsInState, {\n throwOnError: true,\n })\n\n const data = useMemo(() => {\n //create dummy entries for values that were not returned by the getEntityHeaders call!\n const newData = results ? results?.results : []\n const newDataEntityIds = new Set()\n newData.forEach(entityHeader =>\n newDataEntityIds.add(normalizeSynPrefix(entityHeader.id)),\n )\n const missingRefs = refsInState.filter(\n ref => !newDataEntityIds.has(normalizeSynPrefix(ref.targetId)),\n )\n const dummyEntityHeaders: EntityHeaderOrDummy[] = missingRefs.map(ref => {\n return {\n id: ref.targetId,\n name: ref.targetId,\n benefactorId: -1,\n type: 'org.sagebionetworks.repo.model.Project',\n createdOn: '',\n modifiedOn: '',\n createdBy: '',\n modifiedBy: '',\n isLatestVersion: true,\n isDummy: true,\n }\n })\n return newData.concat(dummyEntityHeaders)\n }, [refsInState, results])\n const table = useReactTable({\n data,\n columns,\n state: {\n rowSelection,\n columnFilters,\n },\n enableRowSelection: isEditable,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n // debugTable: true,\n // debugHeaders: true,\n // debugColumns: false,\n columnResizeMode: 'onChange',\n })\n\n const onRemove = useCallback(() => {\n // rowSelection looks like {3: true. 5: true} where the key is the row index.\n // Create a new ReferenceList based on the entityHeaders in the current table.\n const updatedData = data.filter(\n (_value, index) => !(rowSelection[index] === true),\n )\n const newRowRefs: ReferenceList = updatedData.map(entityHeader => {\n return {\n targetId: entityHeader.id,\n }\n })\n setRefsInState(newRowRefs)\n }, [data, rowSelection, setRefsInState])\n\n const isSelection = selectionCount > 0\n const totalRowCount = data.length\n const filteredRowCount = table.getPrePaginationRowModel().rows.length\n const showFilterControls = totalRowCount > UNMANAGEABLE_SUBJECT_COUNT\n\n /**\n * Reset the column filters when the filter controls are hidden.\n * This handles the following edge case:\n * 1. List contains 100 items of type \"A\" and 1 of type \"B\"\n * 2. User filters to show just \"A\" items\n * 3. User removes all \"A\" items\n * 4. Only the single \"B\" item remains, but the filter is still present on type \"A\".\n * The filter controls are hidden, so the user cannot see the \"B\" item.\n *\n * This effect will clear the filters when the filter controls are hidden, preventing this scenario.\n */\n useEffect(\n function resetFiltersWhenFilterControlsAreHidden() {\n if (!showFilterControls) {\n table.setColumnFilters([])\n }\n },\n [table, showFilterControls],\n )\n\n if (isLoading) {\n return (\n <SkeletonTable numCols={3} numRows={Math.min(10, refsInState.length)} />\n )\n } else if (!isSuccess) {\n return <></>\n }\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n p: '12px 10px 10px 5px',\n }}\n >\n {showFilterControls && (\n <Typography variant=\"body1\" sx={{ marginBottom: '10px' }}>\n {totalRowCount} {pluralObjectName}{' '}\n {filteredRowCount < totalRowCount\n ? `(${filteredRowCount} visible)`\n : ''}\n {isSelection && <span>{` (${selectionCount} selected)`}</span>}\n </Typography>\n )}\n {isEditable && refsInState.length > 0 && (\n <Button\n variant=\"contained\"\n disabled={!isSelection || disabled}\n onClick={onRemove}\n >\n {removeSelectedRowsButtonText}\n </Button>\n )}\n </Box>\n <Box\n sx={{\n display: 'flex',\n pb: 2,\n }}\n >\n {table.getHeaderGroups().map(headerGroup =>\n headerGroup.headers.map(header => {\n return header.isPlaceholder ? null : (\n <Fragment key={header.column.id}>\n {header.column.getCanFilter() && showFilterControls ? (\n <Box sx={{ flexGrow: 1 }}>\n <Filter column={header.column} table={table} />\n </Box>\n ) : null}\n </Fragment>\n )\n }),\n )}\n </Box>\n {totalRowCount > 0 && (\n <StyledTableContainer\n sx={{\n th: {\n zIndex: 100,\n maxHeight: '250px',\n },\n }}\n >\n <table style={{ borderCollapse: 'collapse', width: '100%' }}>\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(header => {\n let columnSize: string = '5%'\n switch (header.id) {\n case 'name':\n columnSize = '50%'\n break\n case 'id':\n columnSize = '22%'\n break\n case 'type':\n columnSize = '22%'\n break\n default:\n break\n }\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n style={{\n width: columnSize,\n position: 'sticky',\n top: '0px',\n }}\n >\n {header.isPlaceholder ? null : (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n <Box\n sx={{\n mx: 'auto',\n }}\n />\n {header.column.getCanSort() && (\n <IconButton\n onClick={header.column.getToggleSortingHandler()}\n size={'small'}\n sx={{\n marginLeft: 'auto',\n marginRight: '16px',\n }}\n >\n <IconSvg\n icon={\n header.column.getIsSorted() === 'asc'\n ? 'sortUp'\n : 'sortDown'\n }\n wrap={false}\n fontSize={'inherit'}\n sx={{\n color: header.column.getIsSorted()\n ? 'primary.main'\n : 'grey.700',\n backgroundColor: 'none',\n }}\n />\n </IconButton>\n )}\n </Box>\n )}\n {header.column.getCanResize() && (\n <div\n className={`resizer ${\n header.column.getIsResizing() ? 'isResizing' : ''\n }`}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id} style={{ height: '30px' }}>\n {row.getVisibleCells().map(cell => {\n return (\n <td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </StyledTableContainer>\n )}\n <EntityFinderModal\n configuration={entityFinderConfiguration}\n promptCopy={`Select ${pluralObjectName} to add to the Synapse ID list`}\n show={showEntityFinder}\n title={`Select ${pluralObjectName}`}\n confirmButtonCopy={`Add ${pluralObjectName}`}\n onConfirm={items => {\n if (hideTextFieldToPasteValue) {\n const newRefs = [...refsInState, ...items]\n setRefsInState(newRefs)\n onUpdate(newRefs)\n } else {\n const newEntityIDsArray = items.map(ref => ref.targetId)\n const newEntityIDsString =\n newEntityIDs.trim().length > 0\n ? newEntityIDs.concat(',')\n : newEntityIDs\n const newValue = newEntityIDsString.concat(\n newEntityIDsArray.join(','),\n )\n setNewEntityIDs(newValue)\n }\n setShowEntityFinder(false)\n }}\n onCancel={() => setShowEntityFinder(false)}\n />\n {isEditable && (\n <Box sx={{ marginTop: '10px' }}>\n {hideTextFieldToPasteValue && (\n <Button\n variant=\"outlined\"\n onClick={() => {\n setShowEntityFinder(true)\n }}\n startIcon={<AddAd />}\n disabled={disabled}\n >\n Add {pluralObjectName}\n </Button>\n )}\n {!hideTextFieldToPasteValue && (\n <>\n <InputLabel htmlFor=\"synIDs\">Add Synapse IDs</InputLabel>\n <Box\n sx={{ display: 'grid', gridTemplateColumns: 'auto 50px 150px' }}\n >\n <TextField\n id=\"synIDs\"\n name=\"synIDs\"\n fullWidth\n onChange={e => {\n setNewEntityIDs(e.target.value)\n }}\n value={newEntityIDs}\n placeholder=\"Enter a list of Synapse IDs (i.e. 'syn123, syn456')\"\n disabled={disabled}\n />\n <Box sx={{ padding: '5px 0px 0px 5px' }}>\n {/* Entity finder button. On select, append the selected entity ID to the newSynIDs list */}\n <Tooltip title=\"Add a Synapse ID to the list via the Entity Finder\">\n <IconButton\n disabled={disabled}\n onClick={() => {\n setShowEntityFinder(true)\n }}\n >\n <AddAd />\n </IconButton>\n </Tooltip>\n </Box>\n <Button\n variant=\"outlined\"\n onClick={addPastedValuesToArray}\n disabled={\n isLoading || newEntityIDs.trim().length == 0 || disabled\n }\n startIcon={<AddCircleTwoTone />}\n >\n Add {pluralObjectName}\n </Button>\n </Box>\n </>\n )}\n {parseErrors && parseErrors.length > 0 && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n <AlertTitle>Parsing errors encountered:</AlertTitle>\n <ul>\n {parseErrors.map((error, index) => {\n return (\n <Typography\n component={parseErrors.length > 1 ? 'li' : 'span'}\n key={index}\n variant={'smallText1'}\n sx={{\n lineHeight: 1.5,\n }}\n >\n {error}\n </Typography>\n )\n })}\n </ul>\n </Alert>\n )}\n </Box>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityHeaderTableCellRenderers.js","names":[],"sources":["../../../src/components/EntityHeaderTable/EntityHeaderTableCellRenderers.tsx"],"sourcesContent":["import { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { Checkbox, Link, Typography } from '@mui/material'\nimport { CellContext, HeaderContext } from '@tanstack/react-table'\nimport { EntityLink } from '../EntityLink'\nimport { EntityHeaderOrDummy } from './EntityHeaderTable'\n\nexport function EntityHeaderNameCell(\n props: CellContext<EntityHeaderOrDummy, string | null>,\n) {\n const { cell } = props\n const { row } = cell\n const { original } = row\n const { id, isDummy } = original\n return isDummy ? (\n <Link href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${id}`}>{id}</Link>\n ) : (\n <EntityLink entity={original} />\n )\n}\nexport function EntityHeaderIDCell(\n props: CellContext<EntityHeaderOrDummy, string | null>,\n) {\n const { cell } = props\n return <Typography variant=\"body1\">{cell.getContext().getValue()}</Typography>\n}\nexport function EntityHeaderTypeCell(\n props: CellContext<EntityHeaderOrDummy, string | null>,\n) {\n const { cell } = props\n return (\n <Typography variant=\"body1\" sx={{ textTransform: 'capitalize' }}>\n {cell.getContext().getValue()}\n </Typography>\n )\n}\nexport function CheckBoxHeader<TData = never, TValue = never>(\n props: HeaderContext<TData, TValue>,\n) {\n const { table } = props\n return (\n <Checkbox\n inputProps={{\n 'aria-label': 'Select All',\n }}\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onClick={table.getToggleAllRowsSelectedHandler()}\n />\n )\n}\nexport function CheckBoxCell<TData = never, TValue = never>(\n props: CellContext<TData, TValue>,\n) {\n const { row } = props\n return (\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n indeterminate={row.getIsSomeSelected()}\n onClick={row.getToggleSelectedHandler()}\n />\n )\n}\n"],"mappings":";;;;;AAMA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,YAAS,GACX,EAAE,WAAQ,GACV,EAAE,gBAAa,GACf,EAAE,OAAI,eAAY;AACxB,QAAO,IACL,kBAAC,GAAD;EAAM,MAAM,GAAG,EAA2B,OAAO,UAAU;YAAO;EAAU,CAAA,GAE5E,kBAAC,GAAD,EAAY,QAAQ,GAAY,CAAA;;AAGpC,SAAgB,EACd,GACA;CACA,IAAM,EAAE,YAAS;AACjB,QAAO,kBAAC,GAAD;EAAY,SAAQ;YAAS,EAAK,YAAY,CAAC,UAAU;EAAc,CAAA;;AAEhF,SAAgB,EACd,GACA;CACA,IAAM,EAAE,YAAS;AACjB,QACE,kBAAC,GAAD;EAAY,SAAQ;EAAQ,IAAI,EAAE,eAAe,cAAc;YAC5D,EAAK,YAAY,CAAC,UAAU;EAClB,CAAA;;AAGjB,SAAgB,EACd,GACA;CACA,IAAM,EAAE,aAAU;AAClB,QACE,kBAAC,GAAD;EACE,YAAY,EACV,cAAc,cACf;EACD,SAAS,EAAM,sBAAsB;EACrC,eAAe,EAAM,uBAAuB;EAC5C,SAAS,EAAM,iCAAiC;EAChD,CAAA;;AAGN,SAAgB,EACd,GACA;CACA,IAAM,EAAE,WAAQ;AAChB,QACE,kBAAC,GAAD;EACE,SAAS,EAAI,eAAe;EAC5B,UAAU,CAAC,EAAI,cAAc;EAC7B,eAAe,EAAI,mBAAmB;EACtC,SAAS,EAAI,0BAA0B;EACvC,CAAA"}
1
+ {"version":3,"file":"EntityHeaderTableCellRenderers.js","names":[],"sources":["../../../src/components/EntityHeaderTable/EntityHeaderTableCellRenderers.tsx"],"sourcesContent":["import { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport { Checkbox, Link, Typography } from '@mui/material'\nimport { CellContext, HeaderContext } from '@tanstack/react-table'\nimport { EntityLink } from '../EntityLink'\nimport { EntityHeaderOrDummy } from './EntityHeaderTable'\n\nexport function EntityHeaderNameCell(\n props: CellContext<EntityHeaderOrDummy, string | null>,\n) {\n const { cell } = props\n const { row } = cell\n const { original } = row\n const { id, isDummy } = original\n return isDummy ? (\n <Link href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Synapse:${id}`}>{id}</Link>\n ) : (\n <EntityLink entity={original} />\n )\n}\nexport function EntityHeaderIDCell(\n props: CellContext<EntityHeaderOrDummy, string | null>,\n) {\n const { cell } = props\n return <Typography variant=\"body1\">{cell.getContext().getValue()}</Typography>\n}\nexport function EntityHeaderTypeCell(\n props: CellContext<EntityHeaderOrDummy, string | null>,\n) {\n const { cell } = props\n return (\n <Typography variant=\"body1\" sx={{ textTransform: 'capitalize' }}>\n {cell.getContext().getValue()}\n </Typography>\n )\n}\nexport function CheckBoxHeader<TData = never, TValue = never>(\n props: HeaderContext<TData, TValue>,\n) {\n const { table } = props\n return (\n <Checkbox\n inputProps={{\n 'aria-label': 'Select All',\n }}\n checked={table.getIsAllRowsSelected()}\n indeterminate={table.getIsSomeRowsSelected()}\n onClick={table.getToggleAllRowsSelectedHandler()}\n />\n )\n}\nexport function CheckBoxCell<TData = never, TValue = never>(\n props: CellContext<TData, TValue>,\n) {\n const { row } = props\n return (\n <Checkbox\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n indeterminate={row.getIsSomeSelected()}\n onClick={row.getToggleSelectedHandler()}\n />\n )\n}\n"],"mappings":";;;;;AAMA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,YAAS,GACX,EAAE,WAAQ,GACV,EAAE,gBAAa,GACf,EAAE,OAAI,eAAY;CACxB,OAAO,IACL,kBAAC,GAAD;EAAM,MAAM,GAAG,EAA2B,OAAO,UAAU;YAAO;CAAS,CAAA,IAE3E,kBAAC,GAAD,EAAY,QAAQ,EAAW,CAAA;AAEnC;AACA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,YAAS;CACjB,OAAO,kBAAC,GAAD;EAAY,SAAQ;YAAS,EAAK,WAAW,EAAE,SAAS;CAAc,CAAA;AAC/E;AACA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,YAAS;CACjB,OACE,kBAAC,GAAD;EAAY,SAAQ;EAAQ,IAAI,EAAE,eAAe,aAAa;YAC3D,EAAK,WAAW,EAAE,SAAS;CAClB,CAAA;AAEhB;AACA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,aAAU;CAClB,OACE,kBAAC,GAAD;EACE,YAAY,EACV,cAAc,aAChB;EACA,SAAS,EAAM,qBAAqB;EACpC,eAAe,EAAM,sBAAsB;EAC3C,SAAS,EAAM,gCAAgC;CAChD,CAAA;AAEL;AACA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,WAAQ;CAChB,OACE,kBAAC,GAAD;EACE,SAAS,EAAI,cAAc;EAC3B,UAAU,CAAC,EAAI,aAAa;EAC5B,eAAe,EAAI,kBAAkB;EACrC,SAAS,EAAI,yBAAyB;CACvC,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"Filter.js","names":[],"sources":["../../../src/components/EntityHeaderTable/Filter.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { Column, Table } from '@tanstack/react-table'\nimport { DebouncedInput } from './DebouncedInput'\n\nexport function Filter({\n column,\n table,\n}: {\n column: Column<any, unknown>\n table: Table<any>\n}) {\n const firstValue = table\n .getPreFilteredRowModel()\n .flatRows[0]?.getValue(column.id)\n\n const columnFilterValue = (column.getFilterValue() as string) ?? ''\n\n const sortedUniqueValues: string[] = useMemo(\n () =>\n typeof firstValue === 'number'\n ? []\n : Array.from(column.getFacetedUniqueValues().keys()).sort(),\n [column.getFacetedUniqueValues()],\n )\n return (\n <DebouncedInput\n type=\"text\"\n options={sortedUniqueValues}\n initialValue={columnFilterValue}\n onChange={value => column.setFilterValue(value)}\n label={`Filter by ${column.columnDef.header} (${\n column.getFacetedUniqueValues().size\n })`}\n />\n )\n}\n"],"mappings":";;;;AAIA,SAAgB,EAAO,EACrB,WACA,YAIC;CACD,IAAM,IAAa,EAChB,wBAAwB,CACxB,SAAS,IAAI,SAAS,EAAO,GAAG,EAE7B,IAAqB,EAAO,gBAAgB,IAAe;AASjE,QACE,kBAAC,GAAD;EACE,MAAK;EACL,SAViC,QAEjC,OAAO,KAAe,WAClB,EAAE,GACF,MAAM,KAAK,EAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC,MAAM,EAC/D,CAAC,EAAO,wBAAwB,CAAC,CAKtB;EACT,cAAc;EACd,WAAU,MAAS,EAAO,eAAe,EAAM;EAC/C,OAAO,aAAa,EAAO,UAAU,OAAO,IAC1C,EAAO,wBAAwB,CAAC,KACjC;EACD,CAAA"}
1
+ {"version":3,"file":"Filter.js","names":[],"sources":["../../../src/components/EntityHeaderTable/Filter.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { Column, Table } from '@tanstack/react-table'\nimport { DebouncedInput } from './DebouncedInput'\n\nexport function Filter({\n column,\n table,\n}: {\n column: Column<any, unknown>\n table: Table<any>\n}) {\n const firstValue = table\n .getPreFilteredRowModel()\n .flatRows[0]?.getValue(column.id)\n\n const columnFilterValue = (column.getFilterValue() as string) ?? ''\n\n const sortedUniqueValues: string[] = useMemo(\n () =>\n typeof firstValue === 'number'\n ? []\n : Array.from(column.getFacetedUniqueValues().keys()).sort(),\n [column.getFacetedUniqueValues()],\n )\n return (\n <DebouncedInput\n type=\"text\"\n options={sortedUniqueValues}\n initialValue={columnFilterValue}\n onChange={value => column.setFilterValue(value)}\n label={`Filter by ${column.columnDef.header} (${\n column.getFacetedUniqueValues().size\n })`}\n />\n )\n}\n"],"mappings":";;;;AAIA,SAAgB,EAAO,EACrB,WACA,YAIC;CACD,IAAM,IAAa,EAChB,uBAAuB,EACvB,SAAS,IAAI,SAAS,EAAO,EAAE,GAE5B,IAAqB,EAAO,eAAe,KAAgB;CASjE,OACE,kBAAC,GAAD;EACE,MAAK;EACL,SAViC,QAEjC,OAAO,KAAe,WAClB,CAAC,IACD,MAAM,KAAK,EAAO,uBAAuB,EAAE,KAAK,CAAC,EAAE,KAAK,GAC9D,CAAC,EAAO,uBAAuB,CAAC,CAKrB;EACT,cAAc;EACd,WAAU,MAAS,EAAO,eAAe,CAAK;EAC9C,OAAO,aAAa,EAAO,UAAU,OAAO,IAC1C,EAAO,uBAAuB,EAAE,KACjC;CACF,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"useEntityHeaderTableState.js","names":[],"sources":["../../../src/components/EntityHeaderTable/useEntityHeaderTableState.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react'\nimport { RowSelectionState } from '@tanstack/react-table'\nimport { cloneDeep } from 'lodash-es'\nimport { ReferenceList } from '@sage-bionetworks/synapse-types'\n\nexport function useEntityHeaderTableState(\n references: ReferenceList,\n onUpdateEntityIDsTextbox?: (value: string) => void,\n onUpdate?: (updatedRefs: ReferenceList) => void,\n) {\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n const [refsInState, _setRefsInState] = useState<ReferenceList>(\n cloneDeep(references),\n )\n const [newEntityIDs, _setNewEntityIDs] = useState<string>('')\n const [parseErrors, setParseErrors] = useState<string[]>([])\n\n /* Reset state if the `references` argument changes */\n useEffect(() => {\n _setRefsInState(cloneDeep(references))\n }, [references])\n\n const setNewEntityIDs = useCallback(\n (newValue: string) => {\n _setNewEntityIDs(newValue)\n if (onUpdateEntityIDsTextbox) {\n onUpdateEntityIDsTextbox(newValue)\n }\n },\n [onUpdateEntityIDsTextbox],\n )\n\n const setRefsInState = useCallback(\n (refs: ReferenceList) => {\n setRowSelection({})\n _setRefsInState(refs)\n if (onUpdate) {\n onUpdate(refs)\n }\n setParseErrors([])\n setNewEntityIDs('')\n },\n [onUpdate, setNewEntityIDs],\n )\n\n return {\n rowSelection,\n setRowSelection,\n refsInState,\n setRefsInState,\n newEntityIDs,\n setNewEntityIDs,\n parseErrors,\n setParseErrors,\n }\n}\n"],"mappings":";;;AAKA,SAAgB,EACd,GACA,GACA,GACA;CACA,IAAM,CAAC,GAAc,KAAmB,EAA4B,EAAE,CAAC,EACjE,CAAC,GAAa,KAAmB,EACrC,EAAU,EAAW,CACtB,EACK,CAAC,GAAc,KAAoB,EAAiB,GAAG,EACvD,CAAC,GAAa,KAAkB,EAAmB,EAAE,CAAC;AAG5D,SAAgB;AACd,IAAgB,EAAU,EAAW,CAAC;IACrC,CAAC,EAAW,CAAC;CAEhB,IAAM,IAAkB,GACrB,MAAqB;AAEpB,EADA,EAAiB,EAAS,EACtB,KACF,EAAyB,EAAS;IAGtC,CAAC,EAAyB,CAC3B;AAeD,QAAO;EACL;EACA;EACA;EACA,gBAjBqB,GACpB,MAAwB;AAOvB,GANA,EAAgB,EAAE,CAAC,EACnB,EAAgB,EAAK,EACjB,KACF,EAAS,EAAK,EAEhB,EAAe,EAAE,CAAC,EAClB,EAAgB,GAAG;KAErB,CAAC,GAAU,EAAgB,CAO3B;EACA;EACA;EACA;EACA;EACD"}
1
+ {"version":3,"file":"useEntityHeaderTableState.js","names":[],"sources":["../../../src/components/EntityHeaderTable/useEntityHeaderTableState.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react'\nimport { RowSelectionState } from '@tanstack/react-table'\nimport { cloneDeep } from 'lodash-es'\nimport { ReferenceList } from '@sage-bionetworks/synapse-types'\n\nexport function useEntityHeaderTableState(\n references: ReferenceList,\n onUpdateEntityIDsTextbox?: (value: string) => void,\n onUpdate?: (updatedRefs: ReferenceList) => void,\n) {\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n const [refsInState, _setRefsInState] = useState<ReferenceList>(\n cloneDeep(references),\n )\n const [newEntityIDs, _setNewEntityIDs] = useState<string>('')\n const [parseErrors, setParseErrors] = useState<string[]>([])\n\n /* Reset state if the `references` argument changes */\n useEffect(() => {\n _setRefsInState(cloneDeep(references))\n }, [references])\n\n const setNewEntityIDs = useCallback(\n (newValue: string) => {\n _setNewEntityIDs(newValue)\n if (onUpdateEntityIDsTextbox) {\n onUpdateEntityIDsTextbox(newValue)\n }\n },\n [onUpdateEntityIDsTextbox],\n )\n\n const setRefsInState = useCallback(\n (refs: ReferenceList) => {\n setRowSelection({})\n _setRefsInState(refs)\n if (onUpdate) {\n onUpdate(refs)\n }\n setParseErrors([])\n setNewEntityIDs('')\n },\n [onUpdate, setNewEntityIDs],\n )\n\n return {\n rowSelection,\n setRowSelection,\n refsInState,\n setRefsInState,\n newEntityIDs,\n setNewEntityIDs,\n parseErrors,\n setParseErrors,\n }\n}\n"],"mappings":";;;AAKA,SAAgB,EACd,GACA,GACA,GACA;CACA,IAAM,CAAC,GAAc,KAAmB,EAA4B,CAAC,CAAC,GAChE,CAAC,GAAa,KAAmB,EACrC,EAAU,CAAU,CACtB,GACM,CAAC,GAAc,KAAoB,EAAiB,EAAE,GACtD,CAAC,GAAa,KAAkB,EAAmB,CAAC,CAAC;CAG3D,QAAgB;EACd,EAAgB,EAAU,CAAU,CAAC;CACvC,GAAG,CAAC,CAAU,CAAC;CAEf,IAAM,IAAkB,GACrB,MAAqB;EAEpB,AADA,EAAiB,CAAQ,GACrB,KACF,EAAyB,CAAQ;CAErC,GACA,CAAC,CAAwB,CAC3B;CAeA,OAAO;EACL;EACA;EACA;EACA,gBAjBqB,GACpB,MAAwB;GAOvB,AANA,EAAgB,CAAC,CAAC,GAClB,EAAgB,CAAI,GAChB,KACF,EAAS,CAAI,GAEf,EAAe,CAAC,CAAC,GACjB,EAAgB,EAAE;EACpB,GACA,CAAC,GAAU,CAAe,CAO1B;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityIcon.js","names":[],"sources":["../../src/components/EntityIcon.tsx"],"sourcesContent":["import { entityTypeToFriendlyName } from '@/utils/functions/EntityTypeUtils'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { CSSProperties, Fragment } from 'react'\nimport IconSvg, {\n IconName,\n IconSvgProps,\n type2SvgIconName,\n} from './IconSvg/IconSvg'\n\nconst getIconTypeForEntity = (type: EntityType): IconName | '' => {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n case EntityType.file:\n case EntityType.table:\n case EntityType.link:\n case EntityType.entityview:\n case EntityType.dockerrepo:\n case EntityType.submissionview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n case EntityType.materializedview:\n case EntityType.virtualtable:\n case EntityType.recordset:\n case EntityType.searchindex:\n return type2SvgIconName[type]\n default:\n return ''\n }\n}\n\ntype EntityTypeIconProps = {\n type: EntityType\n style?: CSSProperties\n className?: string\n includeTooltip?: boolean\n wrap?: boolean\n}\n\nexport function EntityTypeIcon(\n props: Omit<IconSvgProps, 'icon'> & EntityTypeIconProps,\n) {\n const {\n type,\n style,\n className,\n includeTooltip = true,\n wrap = true,\n ...rest\n } = props\n if (!type) {\n return <></>\n }\n const iconType = getIconTypeForEntity(type)\n if (iconType === '') {\n console.warn('Could not retrieve icon for Entity with type: ', type)\n return <Fragment />\n }\n\n const label = includeTooltip ? entityTypeToFriendlyName(type) : undefined\n\n if (wrap) {\n return (\n <span style={style} className={className}>\n <IconSvg icon={iconType} label={label} wrap={wrap} {...rest} />\n </span>\n )\n }\n return <IconSvg icon={iconType} label={label} wrap={wrap} {...rest} />\n}\n\nexport default EntityTypeIcon\n"],"mappings":";;;;;;AASA,IAAM,KAAwB,MAAoC;AAChE,SAAQ,GAAR;EACE,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW,YACd,QAAO,EAAiB;EAC1B,QACE,QAAO;;;AAYb,SAAgB,EACd,GACA;CACA,IAAM,EACJ,SACA,UACA,cACA,oBAAiB,IACjB,UAAO,IACP,GAAG,MACD;AACJ,KAAI,CAAC,EACH,QAAO,kBAAA,GAAA,EAAK,CAAA;CAEd,IAAM,IAAW,EAAqB,EAAK;AAC3C,KAAI,MAAa,GAEf,QADA,QAAQ,KAAK,kDAAkD,EAAK,EAC7D,kBAAC,GAAD,EAAY,CAAA;CAGrB,IAAM,IAAQ,IAAiB,EAAyB,EAAK,GAAG,KAAA;AAShE,QAPI,IAEA,kBAAC,QAAD;EAAa;EAAkB;YAC7B,kBAAC,GAAD;GAAS,MAAM;GAAiB;GAAa;GAAM,GAAI;GAAQ,CAAA;EAC1D,CAAA,GAGJ,kBAAC,GAAD;EAAS,MAAM;EAAiB;EAAa;EAAM,GAAI;EAAQ,CAAA"}
1
+ {"version":3,"file":"EntityIcon.js","names":[],"sources":["../../src/components/EntityIcon.tsx"],"sourcesContent":["import { entityTypeToFriendlyName } from '@/utils/functions/EntityTypeUtils'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { CSSProperties, Fragment } from 'react'\nimport IconSvg, {\n IconName,\n IconSvgProps,\n type2SvgIconName,\n} from './IconSvg/IconSvg'\n\nconst getIconTypeForEntity = (type: EntityType): IconName | '' => {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n case EntityType.file:\n case EntityType.table:\n case EntityType.link:\n case EntityType.entityview:\n case EntityType.dockerrepo:\n case EntityType.submissionview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n case EntityType.materializedview:\n case EntityType.virtualtable:\n case EntityType.recordset:\n case EntityType.searchindex:\n return type2SvgIconName[type]\n default:\n return ''\n }\n}\n\ntype EntityTypeIconProps = {\n type: EntityType\n style?: CSSProperties\n className?: string\n includeTooltip?: boolean\n wrap?: boolean\n}\n\nexport function EntityTypeIcon(\n props: Omit<IconSvgProps, 'icon'> & EntityTypeIconProps,\n) {\n const {\n type,\n style,\n className,\n includeTooltip = true,\n wrap = true,\n ...rest\n } = props\n if (!type) {\n return <></>\n }\n const iconType = getIconTypeForEntity(type)\n if (iconType === '') {\n console.warn('Could not retrieve icon for Entity with type: ', type)\n return <Fragment />\n }\n\n const label = includeTooltip ? entityTypeToFriendlyName(type) : undefined\n\n if (wrap) {\n return (\n <span style={style} className={className}>\n <IconSvg icon={iconType} label={label} wrap={wrap} {...rest} />\n </span>\n )\n }\n return <IconSvg icon={iconType} label={label} wrap={wrap} {...rest} />\n}\n\nexport default EntityTypeIcon\n"],"mappings":";;;;;;AASA,IAAM,KAAwB,MAAoC;CAChE,QAAQ,GAAR;EACE,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW;EAChB,KAAK,EAAW,aACd,OAAO,EAAiB;EAC1B,SACE,OAAO;CACX;AACF;AAUA,SAAgB,EACd,GACA;CACA,IAAM,EACJ,SACA,UACA,cACA,oBAAiB,IACjB,UAAO,IACP,GAAG,MACD;CACJ,IAAI,CAAC,GACH,OAAO,kBAAA,GAAA,CAAI,CAAA;CAEb,IAAM,IAAW,EAAqB,CAAI;CAC1C,IAAI,MAAa,IAEf,OADA,QAAQ,KAAK,kDAAkD,CAAI,GAC5D,kBAAC,GAAD,CAAW,CAAA;CAGpB,IAAM,IAAQ,IAAiB,EAAyB,CAAI,IAAI,KAAA;CAShE,OAPI,IAEA,kBAAC,QAAD;EAAa;EAAkB;YAC7B,kBAAC,GAAD;GAAS,MAAM;GAAiB;GAAa;GAAM,GAAI;EAAO,CAAA;CAC1D,CAAA,IAGH,kBAAC,GAAD;EAAS,MAAM;EAAiB;EAAa;EAAM,GAAI;CAAO,CAAA;AACvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityLink.js","names":[],"sources":["../../src/components/EntityLink.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetEntity, useGetEntityHeader } from '@/synapse-queries'\nimport {\n convertToEntityType,\n getEntityTypeFromHeader,\n} from '@/utils/functions/EntityTypeUtils'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { Link, Skeleton } from '@mui/material'\nimport { Entity, EntityHeader } from '@sage-bionetworks/synapse-types'\nimport { EntityTypeIcon } from './EntityIcon'\nimport { ErrorBanner } from './error/ErrorBanner'\nimport ErrorChip from './error/ErrorChip'\n\nexport type EntityLinkProps = {\n entity: string | EntityHeader | Entity\n versionNumber?: number\n /** Whether the component should link to the entity page in Synapse. Link can be overriden by passing a string. Default true */\n link?: boolean | string\n className?: string\n /** Whether to display an icon identifying the entity type. Default true */\n showIcon?: boolean\n /** The field of the entity to display. Default is 'name' */\n displayTextField?: keyof Entity | keyof EntityHeader\n onEntityIdClicked?: (entityId: string) => void\n}\n\nexport const EntityLink = (props: EntityLinkProps): React.ReactNode => {\n const {\n entity: entityOrId,\n className,\n versionNumber,\n displayTextField = 'name',\n link = true,\n showIcon = true,\n onEntityIdClicked,\n } = props\n\n let entityId = ''\n if (typeof entityOrId === 'string') {\n entityId = entityOrId\n }\n\n const fetchHeader = !!entityId && typeof entityOrId === 'string'\n\n const { data: fetchedEntity, isLoading } = useGetEntityHeader(\n entityId,\n versionNumber,\n {\n enabled: fetchHeader,\n },\n )\n\n // We don't get 4XX errors from useGetEntityHeader, so fetch the entity object to get an error response\n // See PLFM-7989\n const fetchFullEntity =\n fetchHeader && fetchedEntity == undefined && !isLoading\n const { error } = useGetEntity(entityId, versionNumber, {\n enabled: fetchFullEntity,\n })\n\n if (fetchedEntity || typeof entityOrId !== 'string') {\n const entity = fetchedEntity ?? (entityOrId as Entity | EntityHeader)\n let type\n if ('concreteType' in entity) {\n type = convertToEntityType(entity.concreteType)\n } else {\n type = getEntityTypeFromHeader(entity)\n }\n const href =\n typeof link === 'string'\n ? link\n : `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${entity.id!}${versionNumber ? `.${versionNumber}` : ''}`\n if (link) {\n return (\n <Link\n className={className}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={\n onEntityIdClicked\n ? e => {\n e.preventDefault()\n onEntityIdClicked(entity.id!)\n }\n : undefined\n }\n href={href}\n >\n {showIcon && (\n <EntityTypeIcon type={type} style={{ marginRight: '6px' }} />\n )}\n {entity[displayTextField as keyof typeof entity]}\n </Link>\n )\n } else {\n return (\n <p className={className}>\n {showIcon && (\n <EntityTypeIcon type={type} style={{ marginRight: '6px' }} />\n )}\n {entity[displayTextField as keyof typeof entity]}\n </p>\n )\n }\n } else if (error) {\n if (entityId) {\n return <ErrorChip chipText={entityId} error={error} />\n }\n return <ErrorBanner error={error} />\n } else {\n return <Skeleton variant=\"rectangular\" width=\"100\" />\n }\n}\n"],"mappings":";;;;;;;;;;;;AA6BA,IAAa,KAAc,MAA4C;CACrE,IAAM,EACJ,QAAQ,GACR,cACA,kBACA,sBAAmB,QACnB,UAAO,IACP,cAAW,IACX,yBACE,GAEA,IAAW;AACf,CAAI,OAAO,KAAe,aACxB,IAAW;CAGb,IAAM,IAAc,CAAC,CAAC,KAAY,OAAO,KAAe,UAElD,EAAE,MAAM,GAAe,iBAAc,EACzC,GACA,GACA,EACE,SAAS,GACV,CACF,EAMK,EAAE,aAAU,EAAa,GAAU,GAAe,EACtD,SAFA,KAAe,KAAiB,QAAa,CAAC,GAG/C,CAAC;AAEF,KAAI,KAAiB,OAAO,KAAe,UAAU;EACnD,IAAM,IAAS,KAAkB,GAC7B;AACJ,EAGE,IAHE,kBAAkB,IACb,EAAoB,EAAO,aAAa,GAExC,EAAwB,EAAO;EAExC,IAAM,IACJ,OAAO,KAAS,WACZ,IACA,GAAG,EACD,EAAuB,gBACxB,CAAC,UAAU,EAAO,KAAM,IAAgB,IAAI,MAAkB;AAwBnE,SAvBE,IAEA,kBAAC,GAAD;GACa;GACX,QAAO;GACP,KAAI;GACJ,SACE,KACI,MAAK;AAEH,IADA,EAAE,gBAAgB,EAClB,EAAkB,EAAO,GAAI;OAE/B,KAAA;GAEA;aAZR,CAcG,KACC,kBAAC,GAAD;IAAsB;IAAM,OAAO,EAAE,aAAa,OAAO;IAAI,CAAA,EAE9D,EAAO,GACH;OAIP,kBAAC,KAAD;GAAc;aAAd,CACG,KACC,kBAAC,GAAD;IAAsB;IAAM,OAAO,EAAE,aAAa,OAAO;IAAI,CAAA,EAE9D,EAAO,GACN;;YAGC,EAIT,QAHI,IACK,kBAAC,GAAD;EAAW,UAAU;EAAiB;EAAS,CAAA,GAEjD,kBAAC,GAAD,EAAoB,UAAS,CAAA;KAEpC,QAAO,kBAAC,GAAD;EAAU,SAAQ;EAAc,OAAM;EAAQ,CAAA"}
1
+ {"version":3,"file":"EntityLink.js","names":[],"sources":["../../src/components/EntityLink.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetEntity, useGetEntityHeader } from '@/synapse-queries'\nimport {\n convertToEntityType,\n getEntityTypeFromHeader,\n} from '@/utils/functions/EntityTypeUtils'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { Link, Skeleton } from '@mui/material'\nimport { Entity, EntityHeader } from '@sage-bionetworks/synapse-types'\nimport { EntityTypeIcon } from './EntityIcon'\nimport { ErrorBanner } from './error/ErrorBanner'\nimport ErrorChip from './error/ErrorChip'\n\nexport type EntityLinkProps = {\n entity: string | EntityHeader | Entity\n versionNumber?: number\n /** Whether the component should link to the entity page in Synapse. Link can be overriden by passing a string. Default true */\n link?: boolean | string\n className?: string\n /** Whether to display an icon identifying the entity type. Default true */\n showIcon?: boolean\n /** The field of the entity to display. Default is 'name' */\n displayTextField?: keyof Entity | keyof EntityHeader\n onEntityIdClicked?: (entityId: string) => void\n}\n\nexport const EntityLink = (props: EntityLinkProps): React.ReactNode => {\n const {\n entity: entityOrId,\n className,\n versionNumber,\n displayTextField = 'name',\n link = true,\n showIcon = true,\n onEntityIdClicked,\n } = props\n\n let entityId = ''\n if (typeof entityOrId === 'string') {\n entityId = entityOrId\n }\n\n const fetchHeader = !!entityId && typeof entityOrId === 'string'\n\n const { data: fetchedEntity, isLoading } = useGetEntityHeader(\n entityId,\n versionNumber,\n {\n enabled: fetchHeader,\n },\n )\n\n // We don't get 4XX errors from useGetEntityHeader, so fetch the entity object to get an error response\n // See PLFM-7989\n const fetchFullEntity =\n fetchHeader && fetchedEntity == undefined && !isLoading\n const { error } = useGetEntity(entityId, versionNumber, {\n enabled: fetchFullEntity,\n })\n\n if (fetchedEntity || typeof entityOrId !== 'string') {\n const entity = fetchedEntity ?? (entityOrId as Entity | EntityHeader)\n let type\n if ('concreteType' in entity) {\n type = convertToEntityType(entity.concreteType)\n } else {\n type = getEntityTypeFromHeader(entity)\n }\n const href =\n typeof link === 'string'\n ? link\n : `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${entity.id!}${versionNumber ? `.${versionNumber}` : ''}`\n if (link) {\n return (\n <Link\n className={className}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={\n onEntityIdClicked\n ? e => {\n e.preventDefault()\n onEntityIdClicked(entity.id!)\n }\n : undefined\n }\n href={href}\n >\n {showIcon && (\n <EntityTypeIcon type={type} style={{ marginRight: '6px' }} />\n )}\n {entity[displayTextField as keyof typeof entity]}\n </Link>\n )\n } else {\n return (\n <p className={className}>\n {showIcon && (\n <EntityTypeIcon type={type} style={{ marginRight: '6px' }} />\n )}\n {entity[displayTextField as keyof typeof entity]}\n </p>\n )\n }\n } else if (error) {\n if (entityId) {\n return <ErrorChip chipText={entityId} error={error} />\n }\n return <ErrorBanner error={error} />\n } else {\n return <Skeleton variant=\"rectangular\" width=\"100\" />\n }\n}\n"],"mappings":";;;;;;;;;;;;AA6BA,IAAa,KAAc,MAA4C;CACrE,IAAM,EACJ,QAAQ,GACR,cACA,kBACA,sBAAmB,QACnB,UAAO,IACP,cAAW,IACX,yBACE,GAEA,IAAW;CACf,AAAI,OAAO,KAAe,aACxB,IAAW;CAGb,IAAM,IAAc,CAAC,CAAC,KAAY,OAAO,KAAe,UAElD,EAAE,MAAM,GAAe,iBAAc,EACzC,GACA,GACA,EACE,SAAS,EACX,CACF,GAMM,EAAE,aAAU,EAAa,GAAU,GAAe,EACtD,SAFA,KAAe,KAAiB,QAAa,CAAC,EAGhD,CAAC;CAED,IAAI,KAAiB,OAAO,KAAe,UAAU;EACnD,IAAM,IAAS,KAAkB,GAC7B;EACJ,AAGE,IAHE,kBAAkB,IACb,EAAoB,EAAO,YAAY,IAEvC,EAAwB,CAAM;EAEvC,IAAM,IACJ,OAAO,KAAS,WACZ,IACA,GAAG,EACD,EAAuB,eACzB,EAAE,UAAU,EAAO,KAAM,IAAgB,IAAI,MAAkB;EAwBnE,OAvBE,IAEA,kBAAC,GAAD;GACa;GACX,QAAO;GACP,KAAI;GACJ,SACE,KACI,MAAK;IAEH,AADA,EAAE,eAAe,GACjB,EAAkB,EAAO,EAAG;GAC9B,IACA,KAAA;GAEA;aAZR,CAcG,KACC,kBAAC,GAAD;IAAsB;IAAM,OAAO,EAAE,aAAa,MAAM;GAAI,CAAA,GAE7D,EAAO,EACJ;OAIN,kBAAC,KAAD;GAAc;aAAd,CACG,KACC,kBAAC,GAAD;IAAsB;IAAM,OAAO,EAAE,aAAa,MAAM;GAAI,CAAA,GAE7D,EAAO,EACP;;CAGT,OAAO,IAAI,GAIT,OAHI,IACK,kBAAC,GAAD;EAAW,UAAU;EAAiB;CAAQ,CAAA,IAEhD,kBAAC,GAAD,EAAoB,SAAQ,CAAA;MAEnC,OAAO,kBAAC,GAAD;EAAU,SAAQ;EAAc,OAAM;CAAO,CAAA;AAExD"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySubjectsSelector.js","names":[],"sources":["../../../src/components/EntitySubjectsSelector/EntitySubjectsSelector.tsx"],"sourcesContent":["import { Box, Typography } from '@mui/material'\nimport {\n Reference,\n ReferenceList,\n RestrictableObjectDescriptor,\n RestrictableObjectType,\n} from '@sage-bionetworks/synapse-types'\nimport { isEqual, uniqWith } from 'lodash-es'\nimport { useMemo } from 'react'\nimport EntityHeaderTable, { EntityHeaderTableProps } from '../EntityHeaderTable'\n\nexport const REMOVE_BUTTON_TEXT = 'Mark for Removal from AR'\nexport const NO_ENTITIES_SELECTED = 'No entities selected.'\n\nexport type EntitySubjectsSelectorProps = {\n // will be filtered to only entity subjects\n subjects: RestrictableObjectDescriptor[]\n onUpdate?: (subjects: RestrictableObjectDescriptor[]) => void\n onUpdateEntityIDsTextbox: EntityHeaderTableProps['onUpdateEntityIDsTextbox']\n}\n\nfunction EntitySubjectsSelector(props: EntitySubjectsSelectorProps) {\n const { subjects, onUpdate, onUpdateEntityIDsTextbox } = props\n\n const references = useMemo(() => {\n return subjects\n .filter(subject => {\n return subject.type === RestrictableObjectType.ENTITY\n })\n .map(subject => {\n const ref: Reference = {\n targetId: subject.id,\n }\n return ref\n })\n }, [subjects])\n\n const handleChange = (updatedReferences: ReferenceList) => {\n if (onUpdate) {\n const dedupedReferences = uniqWith(updatedReferences, isEqual)\n const updatedSubjects = dedupedReferences.map(reference => {\n const subject: RestrictableObjectDescriptor = {\n id: reference.targetId,\n type: RestrictableObjectType.ENTITY,\n }\n return subject\n })\n onUpdate(updatedSubjects)\n }\n }\n\n return (\n <Box\n sx={{\n mb: 2,\n }}\n >\n {references.length === 0 && (\n <Typography\n variant=\"body1Italic\"\n sx={{\n mb: -4,\n }}\n >\n {NO_ENTITIES_SELECTED}\n </Typography>\n )}\n <EntityHeaderTable\n references={references}\n isEditable={Boolean(onUpdate)}\n onUpdate={newReferences => {\n handleChange(newReferences)\n }}\n removeSelectedRowsButtonText={REMOVE_BUTTON_TEXT}\n onUpdateEntityIDsTextbox={onUpdateEntityIDsTextbox}\n />\n </Box>\n )\n}\n\nexport default EntitySubjectsSelector\n"],"mappings":";;;;;;;AAWA,IAAa,IAAqB,4BACrB,IAAuB;AASpC,SAAS,EAAuB,GAAoC;CAClE,IAAM,EAAE,aAAU,aAAU,gCAA6B,GAEnD,IAAa,QACV,EACJ,QAAO,MACC,EAAQ,SAAS,EAAuB,OAC/C,CACD,KAAI,OAII,EAFL,UAAU,EAAQ,IAEb,EACP,EACH,CAAC,EAAS,CAAC,EAER,KAAgB,MAAqC;AACzD,EAAI,KASF,EAR0B,EAAS,GAAmB,EAC9B,CAAkB,KAAI,OAKrC;GAHL,IAAI,EAAU;GACd,MAAM,EAAuB;GAExB,EAEA,CAAgB;;AAI7B,QACE,kBAAC,GAAD;EACE,IAAI,EACF,IAAI,GACL;YAHH,CAKG,EAAW,WAAW,KACrB,kBAAC,GAAD;GACE,SAAQ;GACR,IAAI,EACF,IAAI,IACL;;GAGU,CAAA,EAEf,kBAAC,GAAD;GACc;GACZ,YAAY,EAAQ;GACpB,WAAU,MAAiB;AACzB,MAAa,EAAc;;GAE7B,8BAA8B;GACJ;GAC1B,CAAA,CACE"}
1
+ {"version":3,"file":"EntitySubjectsSelector.js","names":[],"sources":["../../../src/components/EntitySubjectsSelector/EntitySubjectsSelector.tsx"],"sourcesContent":["import { Box, Typography } from '@mui/material'\nimport {\n Reference,\n ReferenceList,\n RestrictableObjectDescriptor,\n RestrictableObjectType,\n} from '@sage-bionetworks/synapse-types'\nimport { isEqual, uniqWith } from 'lodash-es'\nimport { useMemo } from 'react'\nimport EntityHeaderTable, { EntityHeaderTableProps } from '../EntityHeaderTable'\n\nexport const REMOVE_BUTTON_TEXT = 'Mark for Removal from AR'\nexport const NO_ENTITIES_SELECTED = 'No entities selected.'\n\nexport type EntitySubjectsSelectorProps = {\n // will be filtered to only entity subjects\n subjects: RestrictableObjectDescriptor[]\n onUpdate?: (subjects: RestrictableObjectDescriptor[]) => void\n onUpdateEntityIDsTextbox: EntityHeaderTableProps['onUpdateEntityIDsTextbox']\n}\n\nfunction EntitySubjectsSelector(props: EntitySubjectsSelectorProps) {\n const { subjects, onUpdate, onUpdateEntityIDsTextbox } = props\n\n const references = useMemo(() => {\n return subjects\n .filter(subject => {\n return subject.type === RestrictableObjectType.ENTITY\n })\n .map(subject => {\n const ref: Reference = {\n targetId: subject.id,\n }\n return ref\n })\n }, [subjects])\n\n const handleChange = (updatedReferences: ReferenceList) => {\n if (onUpdate) {\n const dedupedReferences = uniqWith(updatedReferences, isEqual)\n const updatedSubjects = dedupedReferences.map(reference => {\n const subject: RestrictableObjectDescriptor = {\n id: reference.targetId,\n type: RestrictableObjectType.ENTITY,\n }\n return subject\n })\n onUpdate(updatedSubjects)\n }\n }\n\n return (\n <Box\n sx={{\n mb: 2,\n }}\n >\n {references.length === 0 && (\n <Typography\n variant=\"body1Italic\"\n sx={{\n mb: -4,\n }}\n >\n {NO_ENTITIES_SELECTED}\n </Typography>\n )}\n <EntityHeaderTable\n references={references}\n isEditable={Boolean(onUpdate)}\n onUpdate={newReferences => {\n handleChange(newReferences)\n }}\n removeSelectedRowsButtonText={REMOVE_BUTTON_TEXT}\n onUpdateEntityIDsTextbox={onUpdateEntityIDsTextbox}\n />\n </Box>\n )\n}\n\nexport default EntitySubjectsSelector\n"],"mappings":";;;;;;;AAWA,IAAa,IAAqB,4BACrB,IAAuB;AASpC,SAAS,EAAuB,GAAoC;CAClE,IAAM,EAAE,aAAU,aAAU,gCAA6B,GAEnD,IAAa,QACV,EACJ,QAAO,MACC,EAAQ,SAAS,EAAuB,MAChD,EACA,KAAI,OAII,EAFL,UAAU,EAAQ,GAEb,EACR,GACF,CAAC,CAAQ,CAAC,GAEP,KAAgB,MAAqC;EACzD,AAAI,KASF,EAR0B,EAAS,GAAmB,CAC9B,EAAkB,KAAI,OAKrC;GAHL,IAAI,EAAU;GACd,MAAM,EAAuB;EAExB,EAEA,CAAe;CAE5B;CAEA,OACE,kBAAC,GAAD;EACE,IAAI,EACF,IAAI,EACN;YAHF,CAKG,EAAW,WAAW,KACrB,kBAAC,GAAD;GACE,SAAQ;GACR,IAAI,EACF,IAAI,GACN;;EAGU,CAAA,GAEd,kBAAC,GAAD;GACc;GACZ,YAAY,EAAQ;GACpB,WAAU,MAAiB;IACzB,EAAa,CAAa;GAC5B;GACA,8BAA8B;GACJ;EAC3B,CAAA,CACE;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityTreeTable.js","names":[],"sources":["../../../src/components/EntityTreeTable/EntityTreeTable.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport styles from './EntityTreeTable.module.scss'\nimport { useReactTable, getCoreRowModel } from '@tanstack/react-table'\nimport { EntityHeader } from '@sage-bionetworks/synapse-types'\nimport { Box } from '@mui/material'\nimport { useEntityTreeState } from './hooks/useEntityTreeState'\nimport { useTreeOperationsWithDirectFetch } from './hooks/useTreeOperationsWithDirectFetch'\nimport { useTableColumns } from './hooks/useTableColumns'\nimport { useTableData } from './hooks/useTableData'\nexport { type TreeNode } from './hooks/useEntityTreeState'\nimport { EntityTreeTableView } from './components/EntityTreeTableView'\nimport { EntityTreeTableContext } from './components/EntityTreeTableContext'\nimport NoContentAvailable from '../SynapseTable/NoContentAvailable'\n\ntype EntityTreeTableProps = {\n /** The Synapse ID of the root entity to display */\n rootId: string\n /** Whether to expand the root node by default. Defaults to true */\n expandRootByDefault?: boolean\n /** Whether to show the root node in the tree. Defaults to true */\n showRootNode?: boolean\n /** Whether to enable column sorting. Defaults to true */\n enableSorting?: boolean\n /** Callback when an entity is clicked. If not provided, defaults to opening Synapse.org page. */\n onEntityIdClicked?: (entityId: string) => void\n}\n\nexport type EntityBundleRow = {\n entityId: string\n entityHeader: EntityHeader\n depth: number\n isLeaf: boolean\n parentId?: string\n versionNumber?: number\n isLoadMore?: boolean\n pageToken?: string\n}\n\nexport const EntityTreeTable: React.FC<EntityTreeTableProps> = ({\n rootId,\n expandRootByDefault = true,\n showRootNode = true,\n enableSorting = true,\n onEntityIdClicked,\n}) => {\n // Use hook for state management and data initialization\n const {\n expanded,\n setExpanded,\n tree,\n setTree,\n loadingIds,\n setLoadingIds,\n loadedChildren,\n setLoadedChildren,\n nextPageTokens,\n setNextPageTokens,\n loadingPageTokens,\n setLoadingPageTokens,\n sorting,\n setSorting,\n sortBy,\n sortDirection,\n } = useEntityTreeState(rootId, expandRootByDefault, showRootNode)\n\n // Use tree operations hook with direct fetch\n const { handleToggleExpanded, loadMoreChildren, flattenTree } =\n useTreeOperationsWithDirectFetch(\n expanded,\n setExpanded,\n tree,\n setTree,\n loadedChildren,\n setLoadedChildren,\n loadingIds,\n setLoadingIds,\n setNextPageTokens,\n setLoadingPageTokens,\n loadingPageTokens,\n nextPageTokens,\n sortBy,\n sortDirection,\n )\n\n // Get table columns\n const columns = useTableColumns(enableSorting)\n\n // Get table data\n const rows = useTableData(\n tree,\n rootId,\n showRootNode,\n expanded,\n nextPageTokens,\n flattenTree,\n )\n\n const isTreeEmpty = useMemo(() => {\n const rootNode = tree[rootId]\n if (!rootNode) return false\n\n // If we're showing the root node, we always have content (at least the root)\n if (showRootNode) return false\n\n // If we're not showing root node, check if root has children loaded and they're empty\n if (loadedChildren.has(rootId)) {\n return !rootNode.children || rootNode.children.length === 0\n }\n\n // If children haven't been loaded yet, don't show no content\n return false\n }, [tree, rootId, showRootNode, loadedChildren])\n\n const table = useReactTable({\n data: rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n state: { expanded, sorting },\n // Make row ids robust: include parent/depth for normal rows so that the\n // same entity appearing in different places (or synthetic rows) won't\n // collide. For load-more rows, use parentId and depth to create unique identifier.\n getRowId: row =>\n row.isLoadMore\n ? `loadmore::${row.parentId}::${row.depth}::${\n row.pageToken || 'no-token'\n }`\n : `${row.entityId || row.entityHeader.id}::${row.parentId ?? 'root'}::${\n row.depth\n }`,\n manualExpanding: true,\n manualSorting: true,\n enableSorting,\n onSortingChange: setSorting,\n enableColumnFilters: false,\n })\n\n return (\n <Box>\n <EntityTreeTableContext.Provider\n value={{\n expanded,\n loadingIds,\n handleToggleExpanded: (entityId: string) => {\n void handleToggleExpanded(entityId)\n },\n loadMoreChildren: (entityId: string, pageToken?: string) => {\n void loadMoreChildren(entityId, pageToken)\n },\n nextPageTokens,\n onEntityIdClicked,\n }}\n >\n {isTreeEmpty ? (\n <NoContentAvailable />\n ) : (\n <EntityTreeTableView\n table={table}\n className={styles.entityTreeTable}\n />\n )}\n </EntityTreeTableContext.Provider>\n </Box>\n )\n}\n\nexport default EntityTreeTable\n"],"mappings":";;;;;;;;;;;;;AAsCA,IAAa,KAAmD,EAC9D,WACA,yBAAsB,IACtB,kBAAe,IACf,mBAAgB,IAChB,2BACI;CAEJ,IAAM,EACJ,aACA,gBACA,SACA,YACA,eACA,kBACA,mBACA,sBACA,mBACA,sBACA,sBACA,yBACA,YACA,eACA,WACA,qBACE,EAAmB,GAAQ,GAAqB,EAAa,EAG3D,EAAE,yBAAsB,qBAAkB,mBAC9C,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EAGG,IAAU,EAAgB,EAAc,EAGxC,IAAO,EACX,GACA,GACA,GACA,GACA,GACA,EACD,EAEK,IAAc,QAAc;EAChC,IAAM,IAAW,EAAK;AAYtB,SAXI,CAAC,KAGD,IAAqB,KAGrB,EAAe,IAAI,EAAO,GACrB,CAAC,EAAS,YAAY,EAAS,SAAS,WAAW,IAIrD;IACN;EAAC;EAAM;EAAQ;EAAc;EAAe,CAAC,EAE1C,IAAQ,EAAc;EAC1B,MAAM;EACN;EACA,iBAAiB,GAAiB;EAClC,kBAAkB;EAClB,OAAO;GAAE;GAAU;GAAS;EAI5B,WAAU,MACR,EAAI,aACA,aAAa,EAAI,SAAS,IAAI,EAAI,MAAM,IACtC,EAAI,aAAa,eAEnB,GAAG,EAAI,YAAY,EAAI,aAAa,GAAG,IAAI,EAAI,YAAY,OAAO,IAChE,EAAI;EAEZ,iBAAiB;EACjB,eAAe;EACf;EACA,iBAAiB;EACjB,qBAAqB;EACtB,CAAC;AAEF,QACE,kBAAC,GAAD,EAAA,UACE,kBAAC,EAAuB,UAAxB;EACE,OAAO;GACL;GACA;GACA,uBAAuB,MAAqB;AACrC,MAAqB,EAAS;;GAErC,mBAAmB,GAAkB,MAAuB;AACrD,MAAiB,GAAU,EAAU;;GAE5C;GACA;GACD;YAEA,IACC,kBAAC,GAAD,EAAsB,CAAA,GAEtB,kBAAC,GAAD;GACS;GACP,WAAW,EAAO;GAClB,CAAA;EAE4B,CAAA,EAC9B,CAAA"}
1
+ {"version":3,"file":"EntityTreeTable.js","names":[],"sources":["../../../src/components/EntityTreeTable/EntityTreeTable.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport styles from './EntityTreeTable.module.scss'\nimport { useReactTable, getCoreRowModel } from '@tanstack/react-table'\nimport { EntityHeader } from '@sage-bionetworks/synapse-types'\nimport { Box } from '@mui/material'\nimport { useEntityTreeState } from './hooks/useEntityTreeState'\nimport { useTreeOperationsWithDirectFetch } from './hooks/useTreeOperationsWithDirectFetch'\nimport { useTableColumns } from './hooks/useTableColumns'\nimport { useTableData } from './hooks/useTableData'\nexport { type TreeNode } from './hooks/useEntityTreeState'\nimport { EntityTreeTableView } from './components/EntityTreeTableView'\nimport { EntityTreeTableContext } from './components/EntityTreeTableContext'\nimport NoContentAvailable from '../SynapseTable/NoContentAvailable'\n\ntype EntityTreeTableProps = {\n /** The Synapse ID of the root entity to display */\n rootId: string\n /** Whether to expand the root node by default. Defaults to true */\n expandRootByDefault?: boolean\n /** Whether to show the root node in the tree. Defaults to true */\n showRootNode?: boolean\n /** Whether to enable column sorting. Defaults to true */\n enableSorting?: boolean\n /** Callback when an entity is clicked. If not provided, defaults to opening Synapse.org page. */\n onEntityIdClicked?: (entityId: string) => void\n}\n\nexport type EntityBundleRow = {\n entityId: string\n entityHeader: EntityHeader\n depth: number\n isLeaf: boolean\n parentId?: string\n versionNumber?: number\n isLoadMore?: boolean\n pageToken?: string\n}\n\nexport const EntityTreeTable: React.FC<EntityTreeTableProps> = ({\n rootId,\n expandRootByDefault = true,\n showRootNode = true,\n enableSorting = true,\n onEntityIdClicked,\n}) => {\n // Use hook for state management and data initialization\n const {\n expanded,\n setExpanded,\n tree,\n setTree,\n loadingIds,\n setLoadingIds,\n loadedChildren,\n setLoadedChildren,\n nextPageTokens,\n setNextPageTokens,\n loadingPageTokens,\n setLoadingPageTokens,\n sorting,\n setSorting,\n sortBy,\n sortDirection,\n } = useEntityTreeState(rootId, expandRootByDefault, showRootNode)\n\n // Use tree operations hook with direct fetch\n const { handleToggleExpanded, loadMoreChildren, flattenTree } =\n useTreeOperationsWithDirectFetch(\n expanded,\n setExpanded,\n tree,\n setTree,\n loadedChildren,\n setLoadedChildren,\n loadingIds,\n setLoadingIds,\n setNextPageTokens,\n setLoadingPageTokens,\n loadingPageTokens,\n nextPageTokens,\n sortBy,\n sortDirection,\n )\n\n // Get table columns\n const columns = useTableColumns(enableSorting)\n\n // Get table data\n const rows = useTableData(\n tree,\n rootId,\n showRootNode,\n expanded,\n nextPageTokens,\n flattenTree,\n )\n\n const isTreeEmpty = useMemo(() => {\n const rootNode = tree[rootId]\n if (!rootNode) return false\n\n // If we're showing the root node, we always have content (at least the root)\n if (showRootNode) return false\n\n // If we're not showing root node, check if root has children loaded and they're empty\n if (loadedChildren.has(rootId)) {\n return !rootNode.children || rootNode.children.length === 0\n }\n\n // If children haven't been loaded yet, don't show no content\n return false\n }, [tree, rootId, showRootNode, loadedChildren])\n\n const table = useReactTable({\n data: rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n state: { expanded, sorting },\n // Make row ids robust: include parent/depth for normal rows so that the\n // same entity appearing in different places (or synthetic rows) won't\n // collide. For load-more rows, use parentId and depth to create unique identifier.\n getRowId: row =>\n row.isLoadMore\n ? `loadmore::${row.parentId}::${row.depth}::${\n row.pageToken || 'no-token'\n }`\n : `${row.entityId || row.entityHeader.id}::${row.parentId ?? 'root'}::${\n row.depth\n }`,\n manualExpanding: true,\n manualSorting: true,\n enableSorting,\n onSortingChange: setSorting,\n enableColumnFilters: false,\n })\n\n return (\n <Box>\n <EntityTreeTableContext.Provider\n value={{\n expanded,\n loadingIds,\n handleToggleExpanded: (entityId: string) => {\n void handleToggleExpanded(entityId)\n },\n loadMoreChildren: (entityId: string, pageToken?: string) => {\n void loadMoreChildren(entityId, pageToken)\n },\n nextPageTokens,\n onEntityIdClicked,\n }}\n >\n {isTreeEmpty ? (\n <NoContentAvailable />\n ) : (\n <EntityTreeTableView\n table={table}\n className={styles.entityTreeTable}\n />\n )}\n </EntityTreeTableContext.Provider>\n </Box>\n )\n}\n\nexport default EntityTreeTable\n"],"mappings":";;;;;;;;;;;;;AAsCA,IAAa,KAAmD,EAC9D,WACA,yBAAsB,IACtB,kBAAe,IACf,mBAAgB,IAChB,2BACI;CAEJ,IAAM,EACJ,aACA,gBACA,SACA,YACA,eACA,kBACA,mBACA,sBACA,mBACA,sBACA,sBACA,yBACA,YACA,eACA,WACA,qBACE,EAAmB,GAAQ,GAAqB,CAAY,GAG1D,EAAE,yBAAsB,qBAAkB,mBAC9C,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,CACF,GAGI,IAAU,EAAgB,CAAa,GAGvC,IAAO,EACX,GACA,GACA,GACA,GACA,GACA,CACF,GAEM,IAAc,QAAc;EAChC,IAAM,IAAW,EAAK;EAYtB,OAXI,CAAC,KAGD,IAAqB,KAGrB,EAAe,IAAI,CAAM,IACpB,CAAC,EAAS,YAAY,EAAS,SAAS,WAAW,IAIrD;CACT,GAAG;EAAC;EAAM;EAAQ;EAAc;CAAc,CAAC,GAEzC,IAAQ,EAAc;EAC1B,MAAM;EACN;EACA,iBAAiB,EAAgB;EACjC,kBAAkB;EAClB,OAAO;GAAE;GAAU;EAAQ;EAI3B,WAAU,MACR,EAAI,aACA,aAAa,EAAI,SAAS,IAAI,EAAI,MAAM,IACtC,EAAI,aAAa,eAEnB,GAAG,EAAI,YAAY,EAAI,aAAa,GAAG,IAAI,EAAI,YAAY,OAAO,IAChE,EAAI;EAEZ,iBAAiB;EACjB,eAAe;EACf;EACA,iBAAiB;EACjB,qBAAqB;CACvB,CAAC;CAED,OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,EAAuB,UAAxB;EACE,OAAO;GACL;GACA;GACA,uBAAuB,MAAqB;IAC1C,EAA0B,CAAQ;GACpC;GACA,mBAAmB,GAAkB,MAAuB;IAC1D,EAAsB,GAAU,CAAS;GAC3C;GACA;GACA;EACF;YAEC,IACC,kBAAC,GAAD,CAAqB,CAAA,IAErB,kBAAC,GAAD;GACS;GACP,WAAW,EAAO;EACnB,CAAA;CAE4B,CAAA,EAC9B,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"AutoLoadMore.js","names":[],"sources":["../../../../src/components/EntityTreeTable/components/AutoLoadMore.tsx"],"sourcesContent":["import { SynapseSpinner } from '@/components/LoadingScreen/LoadingScreen'\nimport { useEffect, useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { depthPaddingMultiplierPx } from './EntityNameCell'\n\nexport const AutoLoadMore: React.FC<{\n depth: number\n isLoading: boolean\n onLoadMore: () => void\n pageToken?: string\n}> = ({ depth, isLoading, onLoadMore }) => {\n const hasTriggered = useRef(false)\n const { ref, inView } = useInView({\n threshold: 0.1,\n rootMargin: '50px',\n triggerOnce: true,\n })\n\n useEffect(() => {\n // Only trigger if we're in view, not loading, and haven't triggered yet\n // Each component instance is now unique per page token due to unique row IDs\n if (inView && !isLoading && !hasTriggered.current) {\n hasTriggered.current = true\n onLoadMore()\n }\n }, [inView, isLoading, onLoadMore])\n\n return (\n <div\n ref={ref}\n style={{\n paddingLeft: depth * depthPaddingMultiplierPx + 45,\n minHeight: '40px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <>\n <SynapseSpinner size={16} margin={'0px'} />\n <span>Loading...</span>\n </>\n </div>\n )\n}\n"],"mappings":";;;;;;AAKA,IAAa,KAKP,EAAE,UAAO,cAAW,oBAAiB;CACzC,IAAM,IAAe,EAAO,GAAM,EAC5B,EAAE,QAAK,cAAW,EAAU;EAChC,WAAW;EACX,YAAY;EACZ,aAAa;EACd,CAAC;AAWF,QATA,QAAgB;AAGd,EAAI,KAAU,CAAC,KAAa,CAAC,EAAa,YACxC,EAAa,UAAU,IACvB,GAAY;IAEb;EAAC;EAAQ;EAAW;EAAW,CAAC,EAGjC,kBAAC,OAAD;EACO;EACL,OAAO;GACL,aAAa,IAAA,KAAmC;GAChD,WAAW;GACX,SAAS;GACT,YAAY;GACZ,KAAK;GACN;YAED,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GAAgB,MAAM;GAAI,QAAQ;GAAS,CAAA,EAC3C,kBAAC,QAAD,EAAA,UAAM,cAAiB,CAAA,CACtB,EAAA,CAAA;EACC,CAAA"}
1
+ {"version":3,"file":"AutoLoadMore.js","names":[],"sources":["../../../../src/components/EntityTreeTable/components/AutoLoadMore.tsx"],"sourcesContent":["import { SynapseSpinner } from '@/components/LoadingScreen/LoadingScreen'\nimport { useEffect, useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { depthPaddingMultiplierPx } from './EntityNameCell'\n\nexport const AutoLoadMore: React.FC<{\n depth: number\n isLoading: boolean\n onLoadMore: () => void\n pageToken?: string\n}> = ({ depth, isLoading, onLoadMore }) => {\n const hasTriggered = useRef(false)\n const { ref, inView } = useInView({\n threshold: 0.1,\n rootMargin: '50px',\n triggerOnce: true,\n })\n\n useEffect(() => {\n // Only trigger if we're in view, not loading, and haven't triggered yet\n // Each component instance is now unique per page token due to unique row IDs\n if (inView && !isLoading && !hasTriggered.current) {\n hasTriggered.current = true\n onLoadMore()\n }\n }, [inView, isLoading, onLoadMore])\n\n return (\n <div\n ref={ref}\n style={{\n paddingLeft: depth * depthPaddingMultiplierPx + 45,\n minHeight: '40px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <>\n <SynapseSpinner size={16} margin={'0px'} />\n <span>Loading...</span>\n </>\n </div>\n )\n}\n"],"mappings":";;;;;;AAKA,IAAa,KAKP,EAAE,UAAO,cAAW,oBAAiB;CACzC,IAAM,IAAe,EAAO,EAAK,GAC3B,EAAE,QAAK,cAAW,EAAU;EAChC,WAAW;EACX,YAAY;EACZ,aAAa;CACf,CAAC;CAWD,OATA,QAAgB;EAGd,AAAI,KAAU,CAAC,KAAa,CAAC,EAAa,YACxC,EAAa,UAAU,IACvB,EAAW;CAEf,GAAG;EAAC;EAAQ;EAAW;CAAU,CAAC,GAGhC,kBAAC,OAAD;EACO;EACL,OAAO;GACL,aAAa,IAAA,KAAmC;GAChD,WAAW;GACX,SAAS;GACT,YAAY;GACZ,KAAK;EACP;YAEA,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GAAgB,MAAM;GAAI,QAAQ;EAAQ,CAAA,GAC1C,kBAAC,QAAD,EAAA,UAAM,aAAgB,CAAA,CACtB,EAAA,CAAA;CACC,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnHeaders.js","names":[],"sources":["../../../../src/components/EntityTreeTable/components/ColumnHeaders.tsx"],"sourcesContent":["import React from 'react'\nimport { HeaderContext } from '@tanstack/react-table'\nimport { EntityBundleRow } from '../EntityTreeTable'\nimport ColumnHeader from '../../TanStackTable/ColumnHeader'\n\nexport const NameColumnHeader: React.FC<\n HeaderContext<EntityBundleRow, unknown>\n> = props => <ColumnHeader {...props} title={'Name'} />\n\nexport const CreatedOnColumnHeader: React.FC<\n HeaderContext<EntityBundleRow, unknown>\n> = props => <ColumnHeader {...props} title={'Created On'} />\n\nexport const ModifiedOnColumnHeader: React.FC<\n HeaderContext<EntityBundleRow, unknown>\n> = props => <ColumnHeader {...props} title={'Modified On'} />\n"],"mappings":";;;;AAKA,IAAa,KAET,MAAS,kBAAC,GAAD;CAAc,GAAI;CAAO,OAAO;CAAU,CAAA,EAE1C,KAET,MAAS,kBAAC,GAAD;CAAc,GAAI;CAAO,OAAO;CAAgB,CAAA,EAEhD,KAET,MAAS,kBAAC,GAAD;CAAc,GAAI;CAAO,OAAO;CAAiB,CAAA"}
1
+ {"version":3,"file":"ColumnHeaders.js","names":[],"sources":["../../../../src/components/EntityTreeTable/components/ColumnHeaders.tsx"],"sourcesContent":["import React from 'react'\nimport { HeaderContext } from '@tanstack/react-table'\nimport { EntityBundleRow } from '../EntityTreeTable'\nimport ColumnHeader from '../../TanStackTable/ColumnHeader'\n\nexport const NameColumnHeader: React.FC<\n HeaderContext<EntityBundleRow, unknown>\n> = props => <ColumnHeader {...props} title={'Name'} />\n\nexport const CreatedOnColumnHeader: React.FC<\n HeaderContext<EntityBundleRow, unknown>\n> = props => <ColumnHeader {...props} title={'Created On'} />\n\nexport const ModifiedOnColumnHeader: React.FC<\n HeaderContext<EntityBundleRow, unknown>\n> = props => <ColumnHeader {...props} title={'Modified On'} />\n"],"mappings":";;;;AAKA,IAAa,KAET,MAAS,kBAAC,GAAD;CAAc,GAAI;CAAO,OAAO;AAAS,CAAA,GAEzC,KAET,MAAS,kBAAC,GAAD;CAAc,GAAI;CAAO,OAAO;AAAe,CAAA,GAE/C,KAET,MAAS,kBAAC,GAAD;CAAc,GAAI;CAAO,OAAO;AAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityBadgeIconsCell.js","names":[],"sources":["../../../../src/components/EntityTreeTable/components/EntityBadgeIconsCell.tsx"],"sourcesContent":["import EntityBadgeIcons from '@/components/EntityBadgeIcons'\nimport { EntityIdAndVersionNumber } from '@/components/EntityFinder/details/view/table/TableCellTypes'\nimport { CellContext } from '@tanstack/react-table'\n\n/**\n * Renders Entity Badges using the entity bundle.\n * @param props\n * @returns\n */\nexport function EntityBadgeIconsCell<T extends EntityIdAndVersionNumber>(\n props: CellContext<T, any>,\n) {\n const { row } = props\n\n return (\n <EntityBadgeIcons\n entityId={row.original.entityId}\n versionNumber={row.original.versionNumber}\n showHasDiscussionThread={false}\n showHasWiki={true}\n showUnlink={true}\n canOpenModal={false}\n />\n )\n}\n"],"mappings":";;;AASA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,WAAQ;AAEhB,QACE,kBAAC,GAAD;EACE,UAAU,EAAI,SAAS;EACvB,eAAe,EAAI,SAAS;EAC5B,yBAAyB;EACzB,aAAa;EACb,YAAY;EACZ,cAAc;EACd,CAAA"}
1
+ {"version":3,"file":"EntityBadgeIconsCell.js","names":[],"sources":["../../../../src/components/EntityTreeTable/components/EntityBadgeIconsCell.tsx"],"sourcesContent":["import EntityBadgeIcons from '@/components/EntityBadgeIcons'\nimport { EntityIdAndVersionNumber } from '@/components/EntityFinder/details/view/table/TableCellTypes'\nimport { CellContext } from '@tanstack/react-table'\n\n/**\n * Renders Entity Badges using the entity bundle.\n * @param props\n * @returns\n */\nexport function EntityBadgeIconsCell<T extends EntityIdAndVersionNumber>(\n props: CellContext<T, any>,\n) {\n const { row } = props\n\n return (\n <EntityBadgeIcons\n entityId={row.original.entityId}\n versionNumber={row.original.versionNumber}\n showHasDiscussionThread={false}\n showHasWiki={true}\n showUnlink={true}\n canOpenModal={false}\n />\n )\n}\n"],"mappings":";;;AASA,SAAgB,EACd,GACA;CACA,IAAM,EAAE,WAAQ;CAEhB,OACE,kBAAC,GAAD;EACE,UAAU,EAAI,SAAS;EACvB,eAAe,EAAI,SAAS;EAC5B,yBAAyB;EACzB,aAAa;EACb,YAAY;EACZ,cAAc;CACf,CAAA;AAEL"}