synapse-react-client 4.0.32 → 4.0.34

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 (331) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +5 -1
  3. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  4. package/dist/components/AccessRequirementList/AccessRequirementList.js +152 -85
  5. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  6. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js +1 -0
  7. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  8. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts +1 -0
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +62 -43
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts +6 -0
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +227 -147
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.d.ts.map +1 -1
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js +28 -24
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +21 -0
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -0
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +163 -0
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -0
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +22 -0
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -0
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +264 -0
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -0
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js +1 -0
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +166 -71
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.d.ts +13 -0
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.d.ts.map +1 -0
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +122 -0
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -0
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +17 -0
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -0
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +112 -0
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -0
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +22 -0
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -0
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +193 -0
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -0
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.d.ts +1 -0
  45. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.d.ts.map +1 -1
  46. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js +7 -7
  47. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  48. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/styles.d.ts +3 -0
  49. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/styles.d.ts.map +1 -0
  50. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/styles.js +9 -0
  51. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/styles.js.map +1 -0
  52. package/dist/components/CopyToClipboardIcon.d.ts +2 -1
  53. package/dist/components/CopyToClipboardIcon.d.ts.map +1 -1
  54. package/dist/components/CopyToClipboardIcon.js +6 -6
  55. package/dist/components/CopyToClipboardIcon.js.map +1 -1
  56. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  57. package/dist/components/DataGrid/SynapseGrid.js +230 -215
  58. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  59. package/dist/components/DataGrid/SyncGridWithSourceButton.js +3 -3
  60. package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
  61. package/dist/components/DataGrid/columns/DateTimeColumn.js +1 -1
  62. package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
  63. package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts +10 -0
  64. package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts.map +1 -0
  65. package/dist/components/DataGrid/components/ReorderColumnsButton.js +37 -0
  66. package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -0
  67. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts +12 -0
  68. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -0
  69. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +93 -0
  70. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -0
  71. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js +1 -1
  72. package/dist/components/DataGrid/utils/applyModelChange.d.ts +3 -0
  73. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  74. package/dist/components/DataGrid/utils/applyModelChange.js +5 -0
  75. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  76. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.d.ts +8 -0
  77. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.d.ts.map +1 -0
  78. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js +14 -0
  79. package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js.map +1 -0
  80. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +1 -1
  81. package/dist/components/EntityFinder/details/view/DetailsView.d.ts.map +1 -1
  82. package/dist/components/EntityFinder/details/view/DetailsView.js +119 -122
  83. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  84. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.d.ts +5 -1
  85. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.d.ts.map +1 -1
  86. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +7 -7
  87. package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
  88. package/dist/components/EntityLink.d.ts +2 -0
  89. package/dist/components/EntityLink.d.ts.map +1 -1
  90. package/dist/components/EntityLink.js +15 -11
  91. package/dist/components/EntityLink.js.map +1 -1
  92. package/dist/components/EntitySidebar/AccessAndPermissions.css +1 -0
  93. package/dist/components/EntitySidebar/AccessAndPermissions.d.ts +7 -0
  94. package/dist/components/EntitySidebar/AccessAndPermissions.d.ts.map +1 -0
  95. package/dist/components/EntitySidebar/AccessAndPermissions.js +75 -0
  96. package/dist/components/EntitySidebar/AccessAndPermissions.js.map +1 -0
  97. package/dist/components/EntitySidebar/AccessAndPermissions.module.js +15 -0
  98. package/dist/components/EntitySidebar/AccessAndPermissions.module.js.map +1 -0
  99. package/dist/components/EntitySidebar/AccessAndPermissions.module.scss +58 -0
  100. package/dist/components/EntitySidebar/EntitySidebar.css +1 -1
  101. package/dist/components/EntitySidebar/EntitySidebar.d.ts.map +1 -1
  102. package/dist/components/EntitySidebar/EntitySidebar.js +54 -42
  103. package/dist/components/EntitySidebar/EntitySidebar.js.map +1 -1
  104. package/dist/components/EntitySidebar/EntitySidebar.module.js +10 -11
  105. package/dist/components/EntitySidebar/EntitySidebar.module.js.map +1 -1
  106. package/dist/components/EntitySidebar/EntitySidebar.module.scss +6 -13
  107. package/dist/components/EntityTreeTable/EntityTreeTable.css +1 -1
  108. package/dist/components/EntityTreeTable/EntityTreeTable.module.js +1 -1
  109. package/dist/components/EntityTreeTable/EntityTreeTable.module.js.map +1 -1
  110. package/dist/components/EntityTreeTable/EntityTreeTable.module.scss +18 -0
  111. package/dist/components/EntityTreeTable/components/ColumnHeaders.d.ts.map +1 -1
  112. package/dist/components/EntityTreeTable/components/ColumnHeaders.js +20 -7
  113. package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
  114. package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
  115. package/dist/components/EntityTreeTable/components/EntityNameCell.js +3 -1
  116. package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
  117. package/dist/components/EntityTreeTable/components/EntityTreeTableView.d.ts.map +1 -1
  118. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js +4 -1
  119. package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
  120. package/dist/components/EntityTreeTable/components/IdColumnHeader.d.ts.map +1 -1
  121. package/dist/components/EntityTreeTable/components/IdColumnHeader.js +3 -1
  122. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  123. package/dist/components/EntityTreeTable/hooks/useTableColumns.d.ts.map +1 -1
  124. package/dist/components/EntityTreeTable/hooks/useTableColumns.js +24 -19
  125. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  126. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  127. package/dist/components/FilePreview/PdfPreview.js +23 -20
  128. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  129. package/dist/components/Forum/DiscussionEmpty.css +1 -1
  130. package/dist/components/Forum/DiscussionEmpty.module.js +4 -4
  131. package/dist/components/Forum/DiscussionEmpty.module.js.map +1 -1
  132. package/dist/components/Forum/DiscussionEmpty.module.scss +3 -6
  133. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  134. package/dist/components/GenericCard/SynapseCardLabel.js +100 -99
  135. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  136. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.css +1 -0
  137. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.d.ts +29 -0
  138. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.d.ts.map +1 -0
  139. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.js +229 -0
  140. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.js.map +1 -0
  141. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.module.js +9 -0
  142. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.module.js.map +1 -0
  143. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPicker.module.scss +19 -0
  144. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPickerModal.d.ts +23 -0
  145. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPickerModal.d.ts.map +1 -0
  146. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPickerModal.js +39 -0
  147. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaPickerModal.js.map +1 -0
  148. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaVersionSelectionContext.d.ts +14 -0
  149. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaVersionSelectionContext.d.ts.map +1 -0
  150. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaVersionSelectionContext.js +12 -0
  151. package/dist/components/JsonSchema/JsonSchemaPicker/JsonSchemaVersionSelectionContext.js.map +1 -0
  152. package/dist/components/JsonSchema/JsonSchemaPicker/VersionSelectionType.d.ts +17 -0
  153. package/dist/components/JsonSchema/JsonSchemaPicker/VersionSelectionType.d.ts.map +1 -0
  154. package/dist/components/JsonSchema/JsonSchemaPicker/VersionSelectionType.js +8 -0
  155. package/dist/components/JsonSchema/JsonSchemaPicker/VersionSelectionType.js.map +1 -0
  156. package/dist/components/JsonSchema/JsonSchemaPicker/index.d.ts +6 -0
  157. package/dist/components/JsonSchema/JsonSchemaPicker/index.d.ts.map +1 -0
  158. package/dist/components/JsonSchema/JsonSchemaPicker/index.js +4 -0
  159. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaOrganizations.d.ts +20 -0
  160. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaOrganizations.d.ts.map +1 -0
  161. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaOrganizations.js +25 -0
  162. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaOrganizations.js.map +1 -0
  163. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaSelection.d.ts +35 -0
  164. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaSelection.d.ts.map +1 -0
  165. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaSelection.js +60 -0
  166. package/dist/components/JsonSchema/JsonSchemaPicker/useJsonSchemaSelection.js.map +1 -0
  167. package/dist/components/ProjectInfo/ProjectInfo.css +1 -1
  168. package/dist/components/ProjectInfo/ProjectInfo.module.js +5 -5
  169. package/dist/components/ProjectInfo/ProjectInfo.module.js.map +1 -1
  170. package/dist/components/ProjectInfo/ProjectInfo.module.scss +2 -4
  171. package/dist/components/ProjectInfo/ProjectInfoPopover.d.ts.map +1 -1
  172. package/dist/components/ProjectInfo/ProjectInfoPopover.js +17 -16
  173. package/dist/components/ProjectInfo/ProjectInfoPopover.js.map +1 -1
  174. package/dist/components/ProjectStorage/ProjectDataAvailability.d.ts.map +1 -1
  175. package/dist/components/ProjectStorage/ProjectDataAvailability.js +16 -16
  176. package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
  177. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  178. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +95 -95
  179. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  180. package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js +2 -2
  181. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  182. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js +120 -92
  183. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  184. package/dist/components/StorybookComponentWrapper.d.ts.map +1 -1
  185. package/dist/components/StorybookComponentWrapper.js +1 -3
  186. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  187. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  188. package/dist/components/SynapseChat/SynapseChat.js +40 -40
  189. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  190. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +3 -2
  191. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  192. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  193. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.css +1 -1
  194. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.d.ts.map +1 -1
  195. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.js +0 -7
  196. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.js.map +1 -1
  197. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.module.js +2 -2
  198. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.module.js.map +1 -1
  199. package/dist/components/SynapseChat/components/AttachmentChip/AttachmentChip.module.scss +12 -2
  200. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.css +1 -1
  201. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.module.js +3 -3
  202. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.module.js.map +1 -1
  203. package/dist/components/SynapseChat/components/ChatAttachmentStrip/ChatAttachmentStrip.module.scss +5 -1
  204. package/dist/components/TanStackTable/ColumnHeader.d.ts +7 -0
  205. package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
  206. package/dist/components/TanStackTable/ColumnHeader.js +10 -9
  207. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  208. package/dist/components/TanStackTable/StyledVirtualTanStackTable.d.ts +8 -0
  209. package/dist/components/TanStackTable/StyledVirtualTanStackTable.d.ts.map +1 -1
  210. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js +31 -22
  211. package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
  212. package/dist/components/TanStackTable/useFetchNextPageOnScrollToBottom.d.ts +21 -0
  213. package/dist/components/TanStackTable/useFetchNextPageOnScrollToBottom.d.ts.map +1 -0
  214. package/dist/components/TanStackTable/useFetchNextPageOnScrollToBottom.js +22 -0
  215. package/dist/components/TanStackTable/useFetchNextPageOnScrollToBottom.js.map +1 -0
  216. package/dist/components/dataaccess/AccessRequirementDashboard.d.ts.map +1 -1
  217. package/dist/components/dataaccess/AccessRequirementDashboard.js +55 -55
  218. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  219. package/dist/components/dataaccess/EDucTemplateTable.d.ts +3 -0
  220. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -0
  221. package/dist/components/dataaccess/EDucTemplateTable.js +213 -0
  222. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -0
  223. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  224. package/dist/components/dataaccess/ReviewerDashboard.js +44 -34
  225. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  226. package/dist/components/entity/metadata/AnnotationsTable.js +2 -2
  227. package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
  228. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.d.ts.map +1 -1
  229. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js +8 -8
  230. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  231. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
  232. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  233. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +22 -22
  234. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  235. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  236. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +62 -68
  237. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  238. package/dist/components/styled/StyledTableContainer.d.ts +1 -0
  239. package/dist/components/styled/StyledTableContainer.d.ts.map +1 -1
  240. package/dist/components/styled/StyledTableContainer.js +3 -3
  241. package/dist/components/styled/StyledTableContainer.js.map +1 -1
  242. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +2 -0
  243. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  244. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -40
  245. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  246. package/dist/mocks/eDuc/mockEDucTemplates.d.ts +7 -0
  247. package/dist/mocks/eDuc/mockEDucTemplates.d.ts.map +1 -0
  248. package/dist/mocks/eDuc/mockEDucTemplates.js +18 -0
  249. package/dist/mocks/eDuc/mockEDucTemplates.js.map +1 -0
  250. package/dist/mocks/jsonschema/mockJsonSchemaListing.d.ts +31 -0
  251. package/dist/mocks/jsonschema/mockJsonSchemaListing.d.ts.map +1 -0
  252. package/dist/mocks/jsonschema/mockJsonSchemaListing.js +101 -0
  253. package/dist/mocks/jsonschema/mockJsonSchemaListing.js.map +1 -0
  254. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  255. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +48 -23
  256. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  257. package/dist/mocks/msw/handlers/eDucTemplateHandlers.d.ts +2 -0
  258. package/dist/mocks/msw/handlers/eDucTemplateHandlers.d.ts.map +1 -0
  259. package/dist/mocks/msw/handlers/eDucTemplateHandlers.js +14 -0
  260. package/dist/mocks/msw/handlers/eDucTemplateHandlers.js.map +1 -0
  261. package/dist/mocks/msw/handlers/jsonSchemaListingHandlers.d.ts +8 -0
  262. package/dist/mocks/msw/handlers/jsonSchemaListingHandlers.d.ts.map +1 -0
  263. package/dist/mocks/msw/handlers/jsonSchemaListingHandlers.js +30 -0
  264. package/dist/mocks/msw/handlers/jsonSchemaListingHandlers.js.map +1 -0
  265. package/dist/mocks/msw/handlers.d.ts.map +1 -1
  266. package/dist/mocks/msw/handlers.js +55 -51
  267. package/dist/mocks/msw/handlers.js.map +1 -1
  268. package/dist/style/abstracts/_cssVariables.scss +13 -0
  269. package/dist/style/components/entity_finder/_details-view.scss +0 -10
  270. package/dist/style/components/facet_nav/_facet-nav-panel.scss +0 -6
  271. package/dist/style/main.css +1 -1
  272. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  273. package/dist/synapse-client/SynapseClient.js +2 -6
  274. package/dist/synapse-client/SynapseClient.js.map +1 -1
  275. package/dist/synapse-queries/KeyFactory.d.ts +3 -0
  276. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  277. package/dist/synapse-queries/KeyFactory.js +9 -0
  278. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  279. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +3 -3
  280. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  281. package/dist/synapse-queries/dataaccess/useEDuc.js +40 -35
  282. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  283. package/dist/synapse-queries/entity/index.d.ts +0 -2
  284. package/dist/synapse-queries/entity/index.d.ts.map +1 -1
  285. package/dist/synapse-queries/entity/index.js +8 -10
  286. package/dist/synapse-queries/index.d.ts +1 -0
  287. package/dist/synapse-queries/index.d.ts.map +1 -1
  288. package/dist/synapse-queries/index.js +136 -128
  289. package/dist/synapse-queries/index.js.map +1 -1
  290. package/dist/synapse-queries/jsonschema/index.d.ts +6 -0
  291. package/dist/synapse-queries/jsonschema/index.d.ts.map +1 -0
  292. package/dist/synapse-queries/jsonschema/index.js +6 -0
  293. package/dist/synapse-queries/jsonschema/useEntityBoundSchema.d.ts.map +1 -0
  294. package/dist/synapse-queries/{entity → jsonschema}/useEntityBoundSchema.js +1 -1
  295. package/dist/synapse-queries/jsonschema/useEntityBoundSchema.js.map +1 -0
  296. package/dist/synapse-queries/jsonschema/useListJsonSchemaVersions.d.ts +26 -0
  297. package/dist/synapse-queries/jsonschema/useListJsonSchemaVersions.d.ts.map +1 -0
  298. package/dist/synapse-queries/jsonschema/useListJsonSchemaVersions.js +36 -0
  299. package/dist/synapse-queries/jsonschema/useListJsonSchemaVersions.js.map +1 -0
  300. package/dist/synapse-queries/jsonschema/useListJsonSchemasInfinite.d.ts +8 -0
  301. package/dist/synapse-queries/jsonschema/useListJsonSchemasInfinite.d.ts.map +1 -0
  302. package/dist/synapse-queries/jsonschema/useListJsonSchemasInfinite.js +21 -0
  303. package/dist/synapse-queries/jsonschema/useListJsonSchemasInfinite.js.map +1 -0
  304. package/dist/synapse-queries/jsonschema/useListOrganizations.d.ts +8 -0
  305. package/dist/synapse-queries/jsonschema/useListOrganizations.d.ts.map +1 -0
  306. package/dist/synapse-queries/jsonschema/useListOrganizations.js +22 -0
  307. package/dist/synapse-queries/jsonschema/useListOrganizations.js.map +1 -0
  308. package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -0
  309. package/dist/synapse-queries/{entity → jsonschema}/useSchema.js +1 -1
  310. package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -0
  311. package/dist/testutils/VirtualizedTableTestUtils.js +17 -0
  312. package/dist/testutils/VirtualizedTableTestUtils.js.map +1 -0
  313. package/dist/theme/palette/Palettes.d.ts.map +1 -1
  314. package/dist/theme/palette/Palettes.js +13 -0
  315. package/dist/theme/palette/Palettes.js.map +1 -1
  316. package/dist/tsconfig.build.tsbuildinfo +1 -1
  317. package/dist/utils/APIConstants.d.ts +6 -0
  318. package/dist/utils/APIConstants.d.ts.map +1 -1
  319. package/dist/utils/APIConstants.js +2 -2
  320. package/dist/utils/APIConstants.js.map +1 -1
  321. package/dist/utils/hooks/useFetchBlobUrl.d.ts +9 -0
  322. package/dist/utils/hooks/useFetchBlobUrl.d.ts.map +1 -0
  323. package/dist/utils/hooks/useFetchBlobUrl.js +19 -0
  324. package/dist/utils/hooks/useFetchBlobUrl.js.map +1 -0
  325. package/package.json +3 -3
  326. package/dist/synapse-queries/entity/useEntityBoundSchema.d.ts.map +0 -1
  327. package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +0 -1
  328. package/dist/synapse-queries/entity/useSchema.d.ts.map +0 -1
  329. package/dist/synapse-queries/entity/useSchema.js.map +0 -1
  330. /package/dist/synapse-queries/{entity → jsonschema}/useEntityBoundSchema.d.ts +0 -0
  331. /package/dist/synapse-queries/{entity → jsonschema}/useSchema.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnHeader.js","names":[],"sources":["../../../src/components/TanStackTable/ColumnHeader.tsx"],"sourcesContent":["import { HeaderContext } from '@tanstack/react-table'\nimport { Box, IconButton, Tooltip } from '@mui/material'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport IconSvg from '../IconSvg'\nimport { ReactNode, useCallback } from 'react'\nimport { ColumnHeaderEnumFilter } from './ColumnHeaderEnumFilter'\n\ntype ColumnHeaderProps = {\n title?: string\n helpText?: ReactNode\n additionalButtons?: ReactNode\n wrap?: boolean\n\n // TODO: Replace with props that can be passed to a reusable filter control\n filterControl?: ReactNode\n}\n\n/**\n * Styled table column header component for use with @tanstack/react-table, with extra optional props for additional\n * UI features\n */\nexport default function ColumnHeader<TData = unknown, TValue = unknown>(\n props: ColumnHeaderProps & HeaderContext<TData, TValue>,\n) {\n const {\n column,\n title = props.column.id,\n wrap = false,\n helpText,\n filterControl: filterControlFromProps,\n additionalButtons,\n } = props\n\n const getFilterControl = useCallback(() => {\n if (filterControlFromProps) {\n return filterControlFromProps\n }\n if (column.getCanFilter()) {\n if (column.columnDef.meta?.filterVariant === 'enumeration') {\n return <ColumnHeaderEnumFilter column={column} title={title} />\n }\n // As needed, extend ColumnMeta.filterVariant to support other types of filters\n console.warn(\n `column.getCanFilter() was true for column ID: ${column.id} but no filterControlFromProps was passed and component for filterVariant: ${column.columnDef.meta?.filterVariant} is not implemented`,\n )\n }\n return <></>\n }, [column, filterControlFromProps, title])\n\n const filterControl = getFilterControl()\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignContent: 'center',\n alignItems: 'center',\n justifyContent: 'space-between',\n overflow: 'hidden',\n minWidth: 0,\n }}\n >\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: wrap ? 'pre-wrap' : 'nowrap',\n minWidth: 0,\n }}\n title={title}\n >\n {title}\n </span>\n <Box\n role={'menubar'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n height: '22px',\n ml: 2,\n gap: 0.25,\n }}\n >\n {helpText && (\n <Tooltip title={helpText} placement={'top'}>\n <IconButton size={'small'}>\n <HelpTwoTone fontSize={'inherit'} />\n </IconButton>\n </Tooltip>\n )}\n {column.getCanFilter() && filterControl}\n {column.getCanSort() && (\n <Tooltip title={`Sort by ${title}`} placement={'top'}>\n <IconButton\n role=\"button\"\n size={'small'}\n aria-label={`Sort by ${title}`}\n tabIndex={0}\n onKeyPress={() => column.toggleSorting()}\n onClick={() => column.toggleSorting()}\n >\n <IconSvg\n icon={column.getIsSorted() === 'asc' ? 'sortUp' : 'sortDown'}\n wrap={false}\n sx={{\n color: column.getIsSorted() ? 'primary.main' : 'grey.700',\n backgroundColor: 'none',\n }}\n />\n </IconButton>\n </Tooltip>\n )}\n {additionalButtons}\n </Box>\n </Box>\n )\n}\n"],"mappings":";;;;;;;AAqBA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,WACA,WAAQ,EAAM,OAAO,IACrB,UAAO,IACP,aACA,eAAe,GACf,yBACE,GAkBE,IAhBmB,QAAkB;EACzC,IAAI,GACF,OAAO;EAET,IAAI,EAAO,aAAa,GAAG;GACzB,IAAI,EAAO,UAAU,MAAM,kBAAkB,eAC3C,OAAO,kBAAC,GAAD;IAAgC;IAAe;GAAQ,CAAA;GAGhE,QAAQ,KACN,iDAAiD,EAAO,GAAG,6EAA6E,EAAO,UAAU,MAAM,cAAc,oBAC/K;EACF;EACA,OAAO,kBAAA,GAAA,CAAI,CAAA;CACb,GAAG;EAAC;EAAQ;EAAwB;CAAK,CAEnB,EAAiB;CAEvC,OACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,cAAc;GACd,YAAY;GACZ,gBAAgB;GAChB,UAAU;GACV,UAAU;EACZ;YARF,CAUE,kBAAC,QAAD;GACE,OAAO;IACL,UAAU;IACV,cAAc;IACd,YAAY,IAAO,aAAa;IAChC,UAAU;GACZ;GACO;aAEN;EACG,CAAA,GACN,kBAAC,GAAD;GACE,MAAM;GACN,IAAI;IACF,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ,KAAK;GACP;aARF;IAUG,KACC,kBAAC,GAAD;KAAS,OAAO;KAAU,WAAW;eACnC,kBAAC,GAAD;MAAY,MAAM;gBAChB,kBAAC,GAAD,EAAa,UAAU,UAAY,CAAA;KACzB,CAAA;IACL,CAAA;IAEV,EAAO,aAAa,KAAK;IACzB,EAAO,WAAW,KACjB,kBAAC,GAAD;KAAS,OAAO,WAAW;KAAS,WAAW;eAC7C,kBAAC,GAAD;MACE,MAAK;MACL,MAAM;MACN,cAAY,WAAW;MACvB,UAAU;MACV,kBAAkB,EAAO,cAAc;MACvC,eAAe,EAAO,cAAc;gBAEpC,kBAAC,GAAD;OACE,MAAM,EAAO,YAAY,MAAM,QAAQ,WAAW;OAClD,MAAM;OACN,IAAI;QACF,OAAO,EAAO,YAAY,IAAI,iBAAiB;QAC/C,iBAAiB;OACnB;MACD,CAAA;KACS,CAAA;IACL,CAAA;IAEV;GACE;IACF;;AAET"}
1
+ {"version":3,"file":"ColumnHeader.js","names":[],"sources":["../../../src/components/TanStackTable/ColumnHeader.tsx"],"sourcesContent":["import { HeaderContext } from '@tanstack/react-table'\nimport { Box, IconButton, Tooltip } from '@mui/material'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport IconSvg from '../IconSvg'\nimport { ReactNode, useCallback } from 'react'\nimport { ColumnHeaderEnumFilter } from './ColumnHeaderEnumFilter'\n\ntype SortIconRendererParams = {\n isSorted: 'asc' | 'desc' | false\n}\n\ntype ColumnHeaderProps = {\n title?: string\n helpText?: ReactNode\n additionalButtons?: ReactNode\n wrap?: boolean\n sortIconRenderer?: (params: SortIconRendererParams) => ReactNode\n iconPlacement?: 'left' | 'right'\n iconColor?: string\n iconSize?: string | number\n\n // TODO: Replace with props that can be passed to a reusable filter control\n filterControl?: ReactNode\n}\n\n/**\n * Styled table column header component for use with @tanstack/react-table, with extra optional props for additional\n * UI features\n */\nexport default function ColumnHeader<TData = unknown, TValue = unknown>(\n props: ColumnHeaderProps & HeaderContext<TData, TValue>,\n) {\n const {\n column,\n title = props.column.id,\n wrap = false,\n helpText,\n filterControl: filterControlFromProps,\n additionalButtons,\n sortIconRenderer,\n iconPlacement = 'right',\n iconColor,\n iconSize,\n } = props\n\n const getFilterControl = useCallback(() => {\n if (filterControlFromProps) {\n return filterControlFromProps\n }\n if (column.getCanFilter()) {\n if (column.columnDef.meta?.filterVariant === 'enumeration') {\n return <ColumnHeaderEnumFilter column={column} title={title} />\n }\n // As needed, extend ColumnMeta.filterVariant to support other types of filters\n console.warn(\n `column.getCanFilter() was true for column ID: ${column.id} but no filterControlFromProps was passed and component for filterVariant: ${column.columnDef.meta?.filterVariant} is not implemented`,\n )\n }\n return <></>\n }, [column, filterControlFromProps, title])\n\n const filterControl = getFilterControl()\n const isSorted = column.getIsSorted()\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignContent: 'center',\n alignItems: 'center',\n ...(iconPlacement === 'right' && {\n justifyContent: 'space-between',\n }),\n overflow: 'hidden',\n minWidth: 0,\n }}\n >\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: wrap ? 'pre-wrap' : 'nowrap',\n minWidth: 0,\n }}\n title={title}\n >\n {title}\n </span>\n <Box\n role={'menubar'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n height: '22px',\n ml: iconPlacement === 'left' ? 1 : 2,\n gap: 0.25,\n }}\n >\n {helpText && (\n <Tooltip title={helpText} placement={'top'}>\n <IconButton size={'small'}>\n <HelpTwoTone fontSize={'inherit'} />\n </IconButton>\n </Tooltip>\n )}\n {column.getCanFilter() && filterControl}\n {column.getCanSort() && (\n <Tooltip title={`Sort by ${title}`} placement={'top'}>\n <IconButton\n role=\"button\"\n size={'small'}\n aria-label={`Sort by ${title}`}\n tabIndex={0}\n onKeyPress={() => column.toggleSorting()}\n onClick={() => column.toggleSorting()}\n >\n {sortIconRenderer ? (\n sortIconRenderer({ isSorted })\n ) : (\n <IconSvg\n icon={isSorted === 'asc' ? 'sortUp' : 'sortDown'}\n wrap={false}\n sx={{\n color:\n iconColor ?? (isSorted ? 'primary.main' : 'grey.700'),\n backgroundColor: 'none',\n ...(iconSize && { fontSize: iconSize }),\n }}\n />\n )}\n </IconButton>\n </Tooltip>\n )}\n {additionalButtons}\n </Box>\n </Box>\n )\n}\n"],"mappings":";;;;;;;AA6BA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,WACA,WAAQ,EAAM,OAAO,IACrB,UAAO,IACP,aACA,eAAe,GACf,sBACA,qBACA,mBAAgB,SAChB,cACA,gBACE,GAkBE,IAhBmB,QAAkB;EACzC,IAAI,GACF,OAAO;EAET,IAAI,EAAO,aAAa,GAAG;GACzB,IAAI,EAAO,UAAU,MAAM,kBAAkB,eAC3C,OAAO,kBAAC,GAAD;IAAgC;IAAe;GAAQ,CAAA;GAGhE,QAAQ,KACN,iDAAiD,EAAO,GAAG,6EAA6E,EAAO,UAAU,MAAM,cAAc,oBAC/K;EACF;EACA,OAAO,kBAAA,GAAA,CAAI,CAAA;CACb,GAAG;EAAC;EAAQ;EAAwB;CAAK,CAEnB,EAAiB,GACjC,IAAW,EAAO,YAAY;CAEpC,OACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,cAAc;GACd,YAAY;GACZ,GAAI,MAAkB,WAAW,EAC/B,gBAAgB,gBAClB;GACA,UAAU;GACV,UAAU;EACZ;YAVF,CAYE,kBAAC,QAAD;GACE,OAAO;IACL,UAAU;IACV,cAAc;IACd,YAAY,IAAO,aAAa;IAChC,UAAU;GACZ;GACO;aAEN;EACG,CAAA,GACN,kBAAC,GAAD;GACE,MAAM;GACN,IAAI;IACF,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,IAAI,MAAkB,SAAS,IAAI;IACnC,KAAK;GACP;aARF;IAUG,KACC,kBAAC,GAAD;KAAS,OAAO;KAAU,WAAW;eACnC,kBAAC,GAAD;MAAY,MAAM;gBAChB,kBAAC,GAAD,EAAa,UAAU,UAAY,CAAA;KACzB,CAAA;IACL,CAAA;IAEV,EAAO,aAAa,KAAK;IACzB,EAAO,WAAW,KACjB,kBAAC,GAAD;KAAS,OAAO,WAAW;KAAS,WAAW;eAC7C,kBAAC,GAAD;MACE,MAAK;MACL,MAAM;MACN,cAAY,WAAW;MACvB,UAAU;MACV,kBAAkB,EAAO,cAAc;MACvC,eAAe,EAAO,cAAc;gBAEnC,IACC,EAAiB,EAAE,YAAS,CAAC,IAE7B,kBAAC,GAAD;OACE,MAAM,MAAa,QAAQ,WAAW;OACtC,MAAM;OACN,IAAI;QACF,OACE,MAAc,IAAW,iBAAiB;QAC5C,iBAAiB;QACjB,GAAI,KAAY,EAAE,UAAU,EAAS;OACvC;MACD,CAAA;KAEO,CAAA;IACL,CAAA;IAEV;GACE;IACF;;AAET"}
@@ -4,6 +4,14 @@ import { TrProps } from './types';
4
4
  type StyledVirtualTanStackTableProps<T = unknown> = Omit<StyledTanStackTableProps<T, VirtualItem>, 'slots' | 'rows' | 'rowTransform'> & {
5
5
  rowVirtualizer: Virtualizer<any, any>;
6
6
  onTableContainerScroll?: (target: EventTarget) => void;
7
+ /**
8
+ * When true, alternating rows are given a striped background. Unlike {@link StyledTableContainerProps.noStripedRows},
9
+ * this does not rely on CSS `:nth-of-type`, since a virtualized row's position in the DOM is not
10
+ * guaranteed to match its data index as rows are mounted/unmounted while scrolling. Instead, this
11
+ * stripes rows based on the `data-index` attribute that {@link VirtualizedTr} sets on each `<tr>`.
12
+ * @default false
13
+ */
14
+ striped?: boolean;
7
15
  };
8
16
  /**
9
17
  * A table row component modified to be used with @tanstack/react-virtual.
@@ -1 +1 @@
1
- {"version":3,"file":"StyledVirtualTanStackTable.d.ts","sourceRoot":"","sources":["../../../src/components/TanStackTable/StyledVirtualTanStackTable.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGlE,OAA4B,EAC1B,wBAAwB,EACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,KAAK,+BAA+B,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CACtD,wBAAwB,CAAC,CAAC,EAAE,WAAW,CAAC,EACxC,OAAO,GAAG,MAAM,GAAG,cAAc,CAClC,GAAG;IACF,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CACvD,CAAA;AAOD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAG,OAAO,EAC3C,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,2CAmBnC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAAC,CAAC,GAAG,OAAO,EAC5D,KAAK,EAAE,+BAA+B,CAAC,CAAC,CAAC,2CAsE1C"}
1
+ {"version":3,"file":"StyledVirtualTanStackTable.d.ts","sourceRoot":"","sources":["../../../src/components/TanStackTable/StyledVirtualTanStackTable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAGlE,OAA4B,EAC1B,wBAAwB,EACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,KAAK,+BAA+B,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CACtD,wBAAwB,CAAC,CAAC,EAAE,WAAW,CAAC,EACxC,OAAO,GAAG,MAAM,GAAG,cAAc,CAClC,GAAG;IACF,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;IACtD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAqBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAG,OAAO,EAC3C,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,2CAmBnC;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAAC,CAAC,GAAG,OAAO,EAC5D,KAAK,EAAE,+BAA+B,CAAC,CAAC,CAAC,2CA4E1C"}
@@ -4,12 +4,18 @@ import n, { useContext as r } from "react";
4
4
  import { noop as i } from "lodash-es";
5
5
  import { jsx as a } from "react/jsx-runtime";
6
6
  //#region src/components/TanStackTable/StyledVirtualTanStackTable.tsx
7
- var o = n.createContext(void 0);
8
- function s(e) {
9
- let { row: t, tableRow: n, ...i } = e, s = r(o);
7
+ var o = { [[
8
+ 1,
9
+ 3,
10
+ 5,
11
+ 7,
12
+ 9
13
+ ].map((e) => `&[data-index$="${e}"]:not([aria-selected="true"])`).join(", ")]: { backgroundColor: "var(--synapse-background-color-gray)" } }, s = n.createContext(void 0);
14
+ function c(e) {
15
+ let { row: t, tableRow: n, ...i } = e, o = r(s);
10
16
  return /* @__PURE__ */ a("tr", {
11
17
  "data-index": t.index,
12
- ref: (e) => s?.measureElement(e),
18
+ ref: (e) => o?.measureElement(e),
13
19
  ...i,
14
20
  style: {
15
21
  ...i.style,
@@ -21,32 +27,35 @@ function s(e) {
21
27
  }
22
28
  });
23
29
  }
24
- function c(n) {
25
- let { table: r, styledTableContainerProps: c, fullWidth: l = !0, rowVirtualizer: u, slotProps: d = {}, onTableContainerScroll: f = i } = n, p = u.getVirtualItems();
26
- return /* @__PURE__ */ a(o.Provider, {
27
- value: u,
30
+ function l(n) {
31
+ let { table: r, styledTableContainerProps: l, fullWidth: u = !0, rowVirtualizer: d, slotProps: f = {}, onTableContainerScroll: p = i, striped: m = !1 } = n, h = d.getVirtualItems();
32
+ return /* @__PURE__ */ a(s.Provider, {
33
+ value: d,
28
34
  children: /* @__PURE__ */ a(t, {
29
35
  table: r,
30
- rows: p,
36
+ rows: h,
31
37
  rowTransform: (e) => r.getRowModel().rows[e.index],
32
- fullWidth: l,
38
+ fullWidth: u,
33
39
  styledTableContainerProps: {
34
40
  noStripedRows: !0,
35
- ...c,
41
+ ...l,
36
42
  style: {
37
43
  overflow: "auto",
38
44
  position: "relative",
39
- ...c?.style
45
+ ...l?.style
40
46
  },
41
- sx: { "thead > tr": {
42
- display: "flex",
43
- width: "100%"
44
- } },
45
- onScroll: (e) => f(e.target)
47
+ sx: [
48
+ { "thead > tr": {
49
+ display: "flex",
50
+ width: "100%"
51
+ } },
52
+ m && { "tbody > tr": o },
53
+ l?.sx
54
+ ].flat().filter(Boolean),
55
+ onScroll: (e) => p(e.target)
46
56
  },
47
- ...c,
48
- slots: { Tr: s },
49
- slotProps: e(d, {
57
+ slots: { Tr: c },
58
+ slotProps: e(f, {
50
59
  Table: { style: { display: "grid" } },
51
60
  Thead: { style: {
52
61
  display: "grid",
@@ -57,7 +66,7 @@ function c(n) {
57
66
  Th: { style: { display: "flex" } },
58
67
  Tbody: { style: {
59
68
  display: "grid",
60
- height: `${u.getTotalSize()}px`,
69
+ height: `${d.getTotalSize()}px`,
61
70
  position: "relative"
62
71
  } }
63
72
  })
@@ -65,6 +74,6 @@ function c(n) {
65
74
  });
66
75
  }
67
76
  //#endregion
68
- export { s as VirtualizedTr, c as default };
77
+ export { c as VirtualizedTr, l as default };
69
78
 
70
79
  //# sourceMappingURL=StyledVirtualTanStackTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StyledVirtualTanStackTable.js","names":[],"sources":["../../../src/components/TanStackTable/StyledVirtualTanStackTable.tsx"],"sourcesContent":["import { mergeSlotProps } from '@/utils/slots/SlotUtils'\nimport { VirtualItem, Virtualizer } from '@tanstack/react-virtual'\nimport { noop } from 'lodash-es'\nimport React, { useContext } from 'react'\nimport StyledTanStackTable, {\n StyledTanStackTableProps,\n} from './StyledTanStackTable'\n\nimport { TrProps } from './types'\n\ntype StyledVirtualTanStackTableProps<T = unknown> = Omit<\n StyledTanStackTableProps<T, VirtualItem>,\n 'slots' | 'rows' | 'rowTransform'\n> & {\n rowVirtualizer: Virtualizer<any, any>\n onTableContainerScroll?: (target: EventTarget) => void\n}\n\n// Context to pass the row virtualizer to the Tr component\nconst RowVirtualizerContext = React.createContext<\n Virtualizer<any, any> | undefined\n>(undefined)\n\n/**\n * A table row component modified to be used with @tanstack/react-virtual.\n */\nexport function VirtualizedTr<TData = unknown>(\n props: TrProps<TData, VirtualItem>,\n) {\n const { row: virtualItem, tableRow: _tableRow, ...rest } = props\n const rowVirtualizer = useContext(RowVirtualizerContext)\n return (\n <tr\n data-index={virtualItem.index} // needed for dynamic row height measurement\n ref={node => rowVirtualizer?.measureElement(node)} //measure dynamic row height\n {...rest}\n style={{\n ...rest.style,\n display: 'flex',\n position: 'absolute',\n transform: `translateY(${virtualItem.start}px)`, //this should always be a `style` as it changes on scroll\n width: '100%',\n alignItems: 'center',\n }}\n />\n )\n}\n\n/**\n * Stylized table component that is compatible with @tanstack/react-table and @tanstack/react-virtual to display a\n * virtualized table, i.e. a table that uses a virtualizer to only render the DOM nodes that contain data that is visible\n * within the viewport. For cases where the table rows do not need to be virtualized, use {@link StyledTanStackTable}.\n */\nexport default function StyledVirtualTanStackTable<T = unknown>(\n props: StyledVirtualTanStackTableProps<T>,\n) {\n const {\n table,\n styledTableContainerProps,\n fullWidth = true,\n rowVirtualizer,\n slotProps = {},\n onTableContainerScroll = noop,\n } = props\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n return (\n <RowVirtualizerContext.Provider value={rowVirtualizer}>\n <StyledTanStackTable<T, VirtualItem>\n table={table}\n rows={virtualRows}\n rowTransform={row => table.getRowModel().rows[row.index]}\n fullWidth={fullWidth}\n styledTableContainerProps={{\n noStripedRows: true,\n ...styledTableContainerProps,\n style: {\n overflow: 'auto', //our scrollable table container\n position: 'relative', //needed for sticky header\n ...styledTableContainerProps?.style,\n },\n sx: {\n 'thead > tr': {\n display: 'flex',\n width: '100%',\n },\n },\n onScroll: e => onTableContainerScroll(e.target),\n }}\n {...styledTableContainerProps}\n slots={{\n Tr: VirtualizedTr,\n }}\n slotProps={mergeSlotProps(slotProps, {\n Table: {\n style: {\n display: 'grid',\n },\n },\n Thead: {\n style: {\n display: 'grid',\n position: 'sticky',\n top: 0,\n zIndex: 1,\n },\n },\n Th: {\n style: {\n display: 'flex',\n },\n },\n Tbody: {\n style: {\n display: 'grid',\n height: `${rowVirtualizer.getTotalSize()}px`, //tells scrollbar how big the table is\n position: 'relative', //needed for absolute positioning of rows\n },\n },\n })}\n />\n </RowVirtualizerContext.Provider>\n )\n}\n"],"mappings":";;;;;;AAmBA,IAAM,IAAwB,EAAM,cAElC,KAAA,CAAS;AAKX,SAAgB,EACd,GACA;CACA,IAAM,EAAE,KAAK,GAAa,UAAU,GAAW,GAAG,MAAS,GACrD,IAAiB,EAAW,CAAqB;CACvD,OACE,kBAAC,MAAD;EACE,cAAY,EAAY;EACxB,MAAK,MAAQ,GAAgB,eAAe,CAAI;EAChD,GAAI;EACJ,OAAO;GACL,GAAG,EAAK;GACR,SAAS;GACT,UAAU;GACV,WAAW,cAAc,EAAY,MAAM;GAC3C,OAAO;GACP,YAAY;EACd;CACD,CAAA;AAEL;AAOA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,UACA,8BACA,eAAY,IACZ,mBACA,eAAY,CAAC,GACb,4BAAyB,MACvB,GAEE,IAAc,EAAe,gBAAgB;CAEnD,OACE,kBAAC,EAAsB,UAAvB;EAAgC,OAAO;YACrC,kBAAC,GAAD;GACS;GACP,MAAM;GACN,eAAc,MAAO,EAAM,YAAY,EAAE,KAAK,EAAI;GACvC;GACX,2BAA2B;IACzB,eAAe;IACf,GAAG;IACH,OAAO;KACL,UAAU;KACV,UAAU;KACV,GAAG,GAA2B;IAChC;IACA,IAAI,EACF,cAAc;KACZ,SAAS;KACT,OAAO;IACT,EACF;IACA,WAAU,MAAK,EAAuB,EAAE,MAAM;GAChD;GACA,GAAI;GACJ,OAAO,EACL,IAAI,EACN;GACA,WAAW,EAAe,GAAW;IACnC,OAAO,EACL,OAAO,EACL,SAAS,OACX,EACF;IACA,OAAO,EACL,OAAO;KACL,SAAS;KACT,UAAU;KACV,KAAK;KACL,QAAQ;IACV,EACF;IACA,IAAI,EACF,OAAO,EACL,SAAS,OACX,EACF;IACA,OAAO,EACL,OAAO;KACL,SAAS;KACT,QAAQ,GAAG,EAAe,aAAa,EAAE;KACzC,UAAU;IACZ,EACF;GACF,CAAC;EACF,CAAA;CAC6B,CAAA;AAEpC"}
1
+ {"version":3,"file":"StyledVirtualTanStackTable.js","names":[],"sources":["../../../src/components/TanStackTable/StyledVirtualTanStackTable.tsx"],"sourcesContent":["import { mergeSlotProps } from '@/utils/slots/SlotUtils'\nimport { SxProps, Theme } from '@mui/material'\nimport { VirtualItem, Virtualizer } from '@tanstack/react-virtual'\nimport { noop } from 'lodash-es'\nimport React, { useContext } from 'react'\nimport StyledTanStackTable, {\n StyledTanStackTableProps,\n} from './StyledTanStackTable'\n\nimport { TrProps } from './types'\n\ntype StyledVirtualTanStackTableProps<T = unknown> = Omit<\n StyledTanStackTableProps<T, VirtualItem>,\n 'slots' | 'rows' | 'rowTransform'\n> & {\n rowVirtualizer: Virtualizer<any, any>\n onTableContainerScroll?: (target: EventTarget) => void\n /**\n * When true, alternating rows are given a striped background. Unlike {@link StyledTableContainerProps.noStripedRows},\n * this does not rely on CSS `:nth-of-type`, since a virtualized row's position in the DOM is not\n * guaranteed to match its data index as rows are mounted/unmounted while scrolling. Instead, this\n * stripes rows based on the `data-index` attribute that {@link VirtualizedTr} sets on each `<tr>`.\n * @default false\n */\n striped?: boolean\n}\n\n// The last digit of a `data-index` that identifies an odd row, e.g. matches indices 1, 3, 11, 23.\nconst ODD_ROW_LAST_DIGITS = [1, 3, 5, 7, 9]\n\nconst stripedRowsSx = {\n // Exclude selected rows so this doesn't outrank a caller's own `[aria-selected=\"true\"]`\n // background rule (emotion's `sx` classes are more specific than a single class+attribute\n // selector, e.g. EntityFinder's `.EntityFinderDetailsViewRow[aria-selected='true']`).\n [ODD_ROW_LAST_DIGITS.map(\n digit => `&[data-index$=\"${digit}\"]:not([aria-selected=\"true\"])`,\n ).join(', ')]: {\n backgroundColor: 'var(--synapse-background-color-gray)',\n },\n}\n\n// Context to pass the row virtualizer to the Tr component\nconst RowVirtualizerContext = React.createContext<\n Virtualizer<any, any> | undefined\n>(undefined)\n\n/**\n * A table row component modified to be used with @tanstack/react-virtual.\n */\nexport function VirtualizedTr<TData = unknown>(\n props: TrProps<TData, VirtualItem>,\n) {\n const { row: virtualItem, tableRow: _tableRow, ...rest } = props\n const rowVirtualizer = useContext(RowVirtualizerContext)\n return (\n <tr\n data-index={virtualItem.index} // needed for dynamic row height measurement\n ref={node => rowVirtualizer?.measureElement(node)} //measure dynamic row height\n {...rest}\n style={{\n ...rest.style,\n display: 'flex',\n position: 'absolute',\n transform: `translateY(${virtualItem.start}px)`, //this should always be a `style` as it changes on scroll\n width: '100%',\n alignItems: 'center',\n }}\n />\n )\n}\n\n/**\n * Stylized table component that is compatible with @tanstack/react-table and @tanstack/react-virtual to display a\n * virtualized table, i.e. a table that uses a virtualizer to only render the DOM nodes that contain data that is visible\n * within the viewport. For cases where the table rows do not need to be virtualized, use {@link StyledTanStackTable}.\n */\nexport default function StyledVirtualTanStackTable<T = unknown>(\n props: StyledVirtualTanStackTableProps<T>,\n) {\n const {\n table,\n styledTableContainerProps,\n fullWidth = true,\n rowVirtualizer,\n slotProps = {},\n onTableContainerScroll = noop,\n striped = false,\n } = props\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n return (\n <RowVirtualizerContext.Provider value={rowVirtualizer}>\n <StyledTanStackTable<T, VirtualItem>\n table={table}\n rows={virtualRows}\n rowTransform={row => table.getRowModel().rows[row.index]}\n fullWidth={fullWidth}\n styledTableContainerProps={{\n noStripedRows: true,\n ...styledTableContainerProps,\n style: {\n overflow: 'auto', //our scrollable table container\n position: 'relative', //needed for sticky header\n ...styledTableContainerProps?.style,\n },\n sx: [\n {\n 'thead > tr': {\n display: 'flex',\n width: '100%',\n },\n },\n striped && { 'tbody > tr': stripedRowsSx },\n styledTableContainerProps?.sx,\n ]\n .flat()\n .filter(Boolean) as SxProps<Theme>,\n onScroll: e => onTableContainerScroll(e.target),\n }}\n slots={{\n Tr: VirtualizedTr,\n }}\n slotProps={mergeSlotProps(slotProps, {\n Table: {\n style: {\n display: 'grid',\n },\n },\n Thead: {\n style: {\n display: 'grid',\n position: 'sticky',\n top: 0,\n zIndex: 1,\n },\n },\n Th: {\n style: {\n display: 'flex',\n },\n },\n Tbody: {\n style: {\n display: 'grid',\n height: `${rowVirtualizer.getTotalSize()}px`, //tells scrollbar how big the table is\n position: 'relative', //needed for absolute positioning of rows\n },\n },\n })}\n />\n </RowVirtualizerContext.Provider>\n )\n}\n"],"mappings":";;;;;;AA8BA,IAAM,IAAgB,GAInB;CAN0B;CAAG;CAAG;CAAG;CAAG;AAMtC,EAAoB,KACnB,MAAS,kBAAkB,EAAM,+BACnC,EAAE,KAAK,IAAI,IAAI,EACb,iBAAiB,uCACnB,EACF,GAGM,IAAwB,EAAM,cAElC,KAAA,CAAS;AAKX,SAAgB,EACd,GACA;CACA,IAAM,EAAE,KAAK,GAAa,UAAU,GAAW,GAAG,MAAS,GACrD,IAAiB,EAAW,CAAqB;CACvD,OACE,kBAAC,MAAD;EACE,cAAY,EAAY;EACxB,MAAK,MAAQ,GAAgB,eAAe,CAAI;EAChD,GAAI;EACJ,OAAO;GACL,GAAG,EAAK;GACR,SAAS;GACT,UAAU;GACV,WAAW,cAAc,EAAY,MAAM;GAC3C,OAAO;GACP,YAAY;EACd;CACD,CAAA;AAEL;AAOA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,UACA,8BACA,eAAY,IACZ,mBACA,eAAY,CAAC,GACb,4BAAyB,GACzB,aAAU,OACR,GAEE,IAAc,EAAe,gBAAgB;CAEnD,OACE,kBAAC,EAAsB,UAAvB;EAAgC,OAAO;YACrC,kBAAC,GAAD;GACS;GACP,MAAM;GACN,eAAc,MAAO,EAAM,YAAY,EAAE,KAAK,EAAI;GACvC;GACX,2BAA2B;IACzB,eAAe;IACf,GAAG;IACH,OAAO;KACL,UAAU;KACV,UAAU;KACV,GAAG,GAA2B;IAChC;IACA,IAAI;KACF,EACE,cAAc;MACZ,SAAS;MACT,OAAO;KACT,EACF;KACA,KAAW,EAAE,cAAc,EAAc;KACzC,GAA2B;IAC7B,EACG,KAAK,EACL,OAAO,OAAO;IACjB,WAAU,MAAK,EAAuB,EAAE,MAAM;GAChD;GACA,OAAO,EACL,IAAI,EACN;GACA,WAAW,EAAe,GAAW;IACnC,OAAO,EACL,OAAO,EACL,SAAS,OACX,EACF;IACA,OAAO,EACL,OAAO;KACL,SAAS;KACT,UAAU;KACV,KAAK;KACL,QAAQ;IACV,EACF;IACA,IAAI,EACF,OAAO,EACL,SAAS,OACX,EACF;IACA,OAAO,EACL,OAAO;KACL,SAAS;KACT,QAAQ,GAAG,EAAe,aAAa,EAAE;KACzC,UAAU;IACZ,EACF;GACF,CAAC;EACF,CAAA;CAC6B,CAAA;AAEpC"}
@@ -0,0 +1,21 @@
1
+ /** Once the user has scrolled within this many pixels of the bottom, fetch the next page. */
2
+ export declare const SCROLL_FETCH_THRESHOLD_PX = 500;
3
+ export type UseFetchNextPageOnScrollToBottomParams = {
4
+ containerRef: React.RefObject<HTMLDivElement | null>;
5
+ hasNextPage?: boolean;
6
+ isFetchingNextPage?: boolean;
7
+ fetchNextPage?: () => Promise<unknown>;
8
+ /**
9
+ * Re-checks the scroll position whenever this changes, in case the container is already
10
+ * scrolled to the bottom -- e.g. on mount, or right after a fetch resolves with data that
11
+ * didn't fill the container.
12
+ */
13
+ data: unknown;
14
+ };
15
+ /**
16
+ * Returns a scroll-event callback that fetches the next page of a paginated/infinite query once
17
+ * `containerRef`'s element is within {@link SCROLL_FETCH_THRESHOLD_PX} of its bottom. Also
18
+ * re-runs that check whenever `data` changes.
19
+ */
20
+ export declare function useFetchNextPageOnScrollToBottom(params: UseFetchNextPageOnScrollToBottomParams): (containerRefElement?: HTMLDivElement | null) => void;
21
+ //# sourceMappingURL=useFetchNextPageOnScrollToBottom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFetchNextPageOnScrollToBottom.d.ts","sourceRoot":"","sources":["../../../src/components/TanStackTable/useFetchNextPageOnScrollToBottom.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAE5C,MAAM,MAAM,sCAAsC,GAAG;IACnD,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACpD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC;;;;OAIG;IACH,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,sCAAsC,0BAMrB,cAAc,GAAG,IAAI,UAsB/C"}
@@ -0,0 +1,22 @@
1
+ import { useCallback as e, useEffect as t } from "react";
2
+ //#region src/components/TanStackTable/useFetchNextPageOnScrollToBottom.ts
3
+ var n = 500;
4
+ function r(n) {
5
+ let { containerRef: r, hasNextPage: i, isFetchingNextPage: a, fetchNextPage: o, data: s } = n, c = e((e) => {
6
+ if (e) {
7
+ let { scrollHeight: t, scrollTop: n, clientHeight: r } = e;
8
+ t - n - r < 500 && !a && i && o && o();
9
+ }
10
+ }, [
11
+ o,
12
+ a,
13
+ i
14
+ ]);
15
+ return t(() => {
16
+ c(r.current);
17
+ }, [s, c]), c;
18
+ }
19
+ //#endregion
20
+ export { n as SCROLL_FETCH_THRESHOLD_PX, r as useFetchNextPageOnScrollToBottom };
21
+
22
+ //# sourceMappingURL=useFetchNextPageOnScrollToBottom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFetchNextPageOnScrollToBottom.js","names":[],"sources":["../../../src/components/TanStackTable/useFetchNextPageOnScrollToBottom.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react'\n\n/** Once the user has scrolled within this many pixels of the bottom, fetch the next page. */\nexport const SCROLL_FETCH_THRESHOLD_PX = 500\n\nexport type UseFetchNextPageOnScrollToBottomParams = {\n containerRef: React.RefObject<HTMLDivElement | null>\n hasNextPage?: boolean\n isFetchingNextPage?: boolean\n fetchNextPage?: () => Promise<unknown>\n /**\n * Re-checks the scroll position whenever this changes, in case the container is already\n * scrolled to the bottom -- e.g. on mount, or right after a fetch resolves with data that\n * didn't fill the container.\n */\n data: unknown\n}\n\n/**\n * Returns a scroll-event callback that fetches the next page of a paginated/infinite query once\n * `containerRef`'s element is within {@link SCROLL_FETCH_THRESHOLD_PX} of its bottom. Also\n * re-runs that check whenever `data` changes.\n */\nexport function useFetchNextPageOnScrollToBottom(\n params: UseFetchNextPageOnScrollToBottomParams,\n) {\n const { containerRef, hasNextPage, isFetchingNextPage, fetchNextPage, data } =\n params\n\n const fetchMoreOnBottomReached = useCallback(\n (containerRefElement?: HTMLDivElement | null) => {\n if (containerRefElement) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement\n if (\n scrollHeight - scrollTop - clientHeight < SCROLL_FETCH_THRESHOLD_PX &&\n !isFetchingNextPage &&\n hasNextPage &&\n fetchNextPage\n ) {\n void fetchNextPage()\n }\n }\n },\n [fetchNextPage, isFetchingNextPage, hasNextPage],\n )\n\n useEffect(() => {\n fetchMoreOnBottomReached(containerRef.current)\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [data, fetchMoreOnBottomReached])\n\n return fetchMoreOnBottomReached\n}\n"],"mappings":";;AAGA,IAAa,IAA4B;AAoBzC,SAAgB,EACd,GACA;CACA,IAAM,EAAE,iBAAc,gBAAa,uBAAoB,kBAAe,YACpE,GAEI,IAA2B,GAC9B,MAAgD;EAC/C,IAAI,GAAqB;GACvB,IAAM,EAAE,iBAAc,cAAW,oBAAiB;GAClD,AACE,IAAe,IAAY,IAAA,OAC3B,CAAC,KACD,KACA,KAEA,EAAmB;EAEvB;CACF,GACA;EAAC;EAAe;EAAoB;CAAW,CACjD;CAOA,OALA,QAAgB;EACd,EAAyB,EAAa,OAAO;CAE/C,GAAG,CAAC,GAAM,CAAwB,CAAC,GAE5B;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"AccessRequirementDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/AccessRequirementDashboard.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,aAAa,CAAA;AACxD,eAAO,MAAM,mCAAmC,qBAAqB,CAAA;AACrE,eAAO,MAAM,4BAA4B,eAAe,CAAA;AACxD,eAAO,MAAM,wBAAwB,SAAS,CAAA;AAE9C,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mCAAmC,CAAC,EAAE,MAAM,IAAI,CAAA;CACjD,CAAA;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,2CA0MvC;AAED,eAAe,0BAA0B,CAAA"}
1
+ {"version":3,"file":"AccessRequirementDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/AccessRequirementDashboard.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,aAAa,CAAA;AACxD,eAAO,MAAM,mCAAmC,qBAAqB,CAAA;AACrE,eAAO,MAAM,4BAA4B,eAAe,CAAA;AACxD,eAAO,MAAM,wBAAwB,SAAS,CAAA;AAE9C,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mCAAmC,CAAC,EAAE,MAAM,IAAI,CAAA;CACjD,CAAA;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,2CA8MvC;AAED,eAAe,0BAA0B,CAAA"}
@@ -7,86 +7,86 @@ import { AccessRequirementTable as a } from "./AccessRequirementTable.js";
7
7
  import { useCallback as o, useEffect as s, useMemo as c, useState as l } from "react";
8
8
  import { omitBy as u } from "lodash-es";
9
9
  import { Grid as d, InputAdornment as f, TextField as p, Typography as m } from "@mui/material";
10
- import { jsx as h, jsxs as g } from "react/jsx-runtime";
11
- import { EntityType as _ } from "@sage-bionetworks/synapse-client";
12
- import { SearchOutlined as v } from "@mui/icons-material";
13
- import { useLocation as y, useNavigate as b } from "react-router";
14
- import { useDebouncedState as x } from "@react-hookz/web";
10
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
11
+ import { EntityType as v } from "@sage-bionetworks/synapse-client";
12
+ import { SearchOutlined as y } from "@mui/icons-material";
13
+ import { useLocation as b, useNavigate as x } from "react-router";
14
+ import { useDebouncedState as S } from "@react-hookz/web";
15
15
  //#region src/components/dataaccess/AccessRequirementDashboard.tsx
16
- var S = "nameOrID", C = "relatedProjectId", w = "reviewerId", T = "type";
17
- function E(E) {
18
- let { onCreateNewAccessRequirementClicked: D } = E, O = y(), k = c(() => new URLSearchParams(O.search), [O.search]), A = b(), [j, M] = x(k.get("nameOrID") ?? "", 500), [N, P] = x(k.get("relatedProjectId") ?? void 0, 500), [F, I] = x(k.get("reviewerId") ?? void 0, 500), [L, R] = l(k.get("type") ?? void 0), z = c(() => !!(N && !e.exec(N)), [N]), [B, V] = l(!1);
16
+ var C = "nameOrID", w = "relatedProjectId", T = "reviewerId", E = "type";
17
+ function D(D) {
18
+ let { onCreateNewAccessRequirementClicked: O } = D, k = b(), A = c(() => new URLSearchParams(k.search), [k.search]), j = x(), [M, N] = S(A.get("nameOrID") ?? "", 500), [P, F] = S(A.get("relatedProjectId") ?? void 0, 500), [I, L] = S(A.get("reviewerId") ?? void 0, 500), [R, z] = l(A.get("type") ?? void 0), B = c(() => !!(P && !e.exec(P)), [P]), [V, H] = l(!1);
19
19
  s(() => {
20
20
  let e = u({
21
- [S]: j,
22
- [C]: N,
23
- [w]: F,
24
- [T]: L
21
+ [C]: M,
22
+ [w]: P,
23
+ [T]: I,
24
+ [E]: R
25
25
  }, (e) => e === void 0 || e === ""), t = new URLSearchParams(e);
26
- A({
27
- pathname: O.pathname,
26
+ j({
27
+ pathname: k.pathname,
28
28
  search: t.toString()
29
29
  }, { replace: !0 });
30
30
  }, [
31
+ M,
32
+ P,
33
+ I,
34
+ R,
31
35
  j,
32
- N,
33
- F,
34
- L,
35
- A,
36
- O.pathname
36
+ k.pathname
37
37
  ]);
38
- let H = o((e) => {
39
- I(e || void 0);
40
- }, [I]);
38
+ let U = o((e) => {
39
+ L(e || void 0);
40
+ }, [L]);
41
41
  return /* @__PURE__ */ g("div", {
42
42
  className: "AccessRequirementDashboard",
43
- children: [
44
- /* @__PURE__ */ h(i, {
43
+ children: /* @__PURE__ */ _(h, { children: [
44
+ /* @__PURE__ */ g(i, {
45
45
  configuration: {
46
46
  initialScope: n.ALL_PROJECTS,
47
47
  initialContainer: null,
48
48
  selectMultiple: !1,
49
- selectableTypes: [_.project],
49
+ selectableTypes: [v.project],
50
50
  treeOnly: !0
51
51
  },
52
- show: B,
52
+ show: V,
53
53
  onCancel: () => {
54
- V(!1);
54
+ H(!1);
55
55
  },
56
56
  title: "Select Project to Filter Access Requirements",
57
57
  promptCopy: "Select a project to find Access Requirements that are associated with that project. Access Requirements will be found if the Access Requirement is applied to the project, or if it is applied to any item inside the project.",
58
58
  onConfirm: (e) => {
59
- P(e[0].targetId), V(!1);
59
+ F(e[0].targetId), H(!1);
60
60
  },
61
61
  confirmButtonCopy: "Select"
62
62
  }),
63
- /* @__PURE__ */ g(d, {
63
+ /* @__PURE__ */ _(d, {
64
64
  component: "form",
65
65
  container: !0,
66
66
  spacing: 2,
67
67
  className: "InputPanel",
68
68
  children: [
69
- /* @__PURE__ */ h(d, {
69
+ /* @__PURE__ */ g(d, {
70
70
  size: {
71
71
  xs: 12,
72
72
  md: 4
73
73
  },
74
- children: /* @__PURE__ */ h(p, {
74
+ children: /* @__PURE__ */ g(p, {
75
75
  label: "Filter by Access Requirement Name or ID",
76
76
  id: "ar-name-filter",
77
77
  type: "text",
78
78
  fullWidth: !0,
79
79
  placeholder: "Search for an Access Requirement Name or ID",
80
80
  onChange: (e) => {
81
- M(e.target.value);
81
+ N(e.target.value);
82
82
  },
83
- slotProps: { input: { endAdornment: /* @__PURE__ */ h(f, {
83
+ slotProps: { input: { endAdornment: /* @__PURE__ */ g(f, {
84
84
  position: "end",
85
- children: /* @__PURE__ */ h(v, {})
85
+ children: /* @__PURE__ */ g(y, {})
86
86
  }) } }
87
87
  })
88
88
  }),
89
- /* @__PURE__ */ g(d, {
89
+ /* @__PURE__ */ _(d, {
90
90
  size: {
91
91
  xs: 12,
92
92
  md: 4
@@ -96,58 +96,58 @@ function E(E) {
96
96
  gap: "5px",
97
97
  alignItems: "stretch"
98
98
  },
99
- children: [/* @__PURE__ */ h(p, {
99
+ children: [/* @__PURE__ */ g(p, {
100
100
  label: "Filter by Project",
101
101
  id: "project-id-filter",
102
102
  type: "text",
103
103
  fullWidth: !0,
104
104
  placeholder: "Enter a project SynID",
105
- error: z,
106
- helperText: z ? "Value must be a Synapse ID, e.g. \"syn1234\"" : void 0,
105
+ error: B,
106
+ helperText: B ? "Value must be a Synapse ID, e.g. \"syn1234\"" : void 0,
107
107
  onChange: (e) => {
108
108
  let t = e.target.value;
109
- P(t === "" ? void 0 : t);
109
+ F(t === "" ? void 0 : t);
110
110
  }
111
- }), /* @__PURE__ */ h(r, {
111
+ }), /* @__PURE__ */ g(r, {
112
112
  variant: "outlined",
113
113
  color: "primary",
114
114
  onClick: () => {
115
- V(!0);
115
+ H(!0);
116
116
  },
117
117
  children: "Browse"
118
118
  })]
119
119
  }),
120
- /* @__PURE__ */ g(d, {
120
+ /* @__PURE__ */ _(d, {
121
121
  size: {
122
122
  xs: 12,
123
123
  md: 4
124
124
  },
125
- children: [/* @__PURE__ */ h(m, {
125
+ children: [/* @__PURE__ */ g(m, {
126
126
  component: "label",
127
127
  variant: "smallText2",
128
128
  htmlFor: "reviewer-filter",
129
129
  children: "Filter by Reviewer"
130
- }), /* @__PURE__ */ h(t, {
130
+ }), /* @__PURE__ */ g(t, {
131
131
  inputId: "reviewer-filter",
132
132
  placeholder: "Search for a username or team name",
133
- defaultValue: F,
134
- onChange: H
133
+ defaultValue: I,
134
+ onChange: U
135
135
  })]
136
136
  })
137
137
  ]
138
138
  }),
139
- /* @__PURE__ */ h(a, {
140
- nameOrID: j,
141
- relatedProjectId: N,
142
- reviewerId: F,
143
- onCreateNewAccessRequirementClicked: D,
144
- typeFilter: L,
145
- onTypeFilterChange: R
139
+ /* @__PURE__ */ g(a, {
140
+ nameOrID: M,
141
+ relatedProjectId: P,
142
+ reviewerId: I,
143
+ onCreateNewAccessRequirementClicked: O,
144
+ typeFilter: R,
145
+ onTypeFilterChange: z
146
146
  })
147
- ]
147
+ ] })
148
148
  });
149
149
  }
150
150
  //#endregion
151
- export { S as AR_NAME_OR_ID_SEARCH_PARAM_KEY, T as AR_TYPE_SEARCH_PARAM_KEY, E as AccessRequirementDashboard, E as default, C as RELATED_PROJECT_ID_SEARCH_PARAM_KEY, w as REVIEWER_ID_SEARCH_PARAM_KEY };
151
+ export { C as AR_NAME_OR_ID_SEARCH_PARAM_KEY, E as AR_TYPE_SEARCH_PARAM_KEY, D as AccessRequirementDashboard, D as default, w as RELATED_PROJECT_ID_SEARCH_PARAM_KEY, T as REVIEWER_ID_SEARCH_PARAM_KEY };
152
152
 
153
153
  //# sourceMappingURL=AccessRequirementDashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccessRequirementDashboard.js","names":[],"sources":["../../../src/components/dataaccess/AccessRequirementDashboard.tsx"],"sourcesContent":["import { InputSizedButton } from '@/components/styled/InputSizedButton'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { SearchOutlined } from '@mui/icons-material'\nimport { Grid, InputAdornment, TextField, Typography } from '@mui/material'\nimport { useDebouncedState } from '@react-hookz/web'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { omitBy } from 'lodash-es'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useLocation, useNavigate } from 'react-router'\nimport { EntityFinderModal } from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport UserSearchBox from '../UserSearchBox/UserSearchBox'\nimport { AccessRequirementTable } from './AccessRequirementTable'\n\nexport const AR_NAME_OR_ID_SEARCH_PARAM_KEY = 'nameOrID'\nexport const RELATED_PROJECT_ID_SEARCH_PARAM_KEY = 'relatedProjectId'\nexport const REVIEWER_ID_SEARCH_PARAM_KEY = 'reviewerId'\nexport const AR_TYPE_SEARCH_PARAM_KEY = 'type'\n\nexport type AccessRequirementDashboardProps = {\n onCreateNewAccessRequirementClicked?: () => void\n}\n\nexport function AccessRequirementDashboard(\n props: AccessRequirementDashboardProps,\n) {\n // Amount of time to wait after an input value changes before sending a new request\n const INPUT_CHANGE_DEBOUNCE_DELAY_MS = 500\n\n const { onCreateNewAccessRequirementClicked } = props\n\n const location = useLocation()\n const urlSearchParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n )\n const navigate = useNavigate()\n\n /**\n * When an input changes, update the props passed to the table and update the search params.\n *\n * Debounced to prevent firing many queries while the user is entering text.\n */\n const [nameOrID, setNameOrID] = useDebouncedState<string>(\n urlSearchParams.get(AR_NAME_OR_ID_SEARCH_PARAM_KEY) ?? '',\n INPUT_CHANGE_DEBOUNCE_DELAY_MS,\n )\n const [relatedProjectId, setRelatedProjectId] = useDebouncedState<\n string | undefined\n >(\n urlSearchParams.get(RELATED_PROJECT_ID_SEARCH_PARAM_KEY) ?? undefined,\n INPUT_CHANGE_DEBOUNCE_DELAY_MS,\n )\n const [reviewerId, setReviewerId] = useDebouncedState<string | undefined>(\n urlSearchParams.get(REVIEWER_ID_SEARCH_PARAM_KEY) ?? undefined,\n INPUT_CHANGE_DEBOUNCE_DELAY_MS,\n )\n const [typeFilter, setTypeFilter] = useState<string | undefined>(\n urlSearchParams.get(AR_TYPE_SEARCH_PARAM_KEY) ?? undefined,\n )\n\n const projectFilterFieldIsError: boolean = useMemo(\n () =>\n !!(relatedProjectId && !SYNAPSE_ENTITY_ID_REGEX.exec(relatedProjectId)),\n [relatedProjectId],\n )\n\n const [showEntityFinder, setShowEntityFinder] = useState(false)\n\n // Update the QueryParams when the filter state changes\n useEffect(() => {\n // Don't include undefined/empty parameters\n const params = omitBy(\n {\n // Sync the search params state with the debounced props\n [AR_NAME_OR_ID_SEARCH_PARAM_KEY]: nameOrID,\n [RELATED_PROJECT_ID_SEARCH_PARAM_KEY]: relatedProjectId,\n [REVIEWER_ID_SEARCH_PARAM_KEY]: reviewerId,\n [AR_TYPE_SEARCH_PARAM_KEY]: typeFilter, // typeFilter state is not debounced\n },\n item => item === undefined || item === '',\n ) as Record<string, string>\n\n // Add the new params to the URL\n // Replace history because intuitively, the user has not navigated to a new page\n const paramsObject = new URLSearchParams(params)\n navigate(\n {\n pathname: location.pathname,\n search: paramsObject.toString(),\n },\n { replace: true },\n )\n }, [\n nameOrID,\n relatedProjectId,\n reviewerId,\n typeFilter,\n navigate,\n location.pathname,\n ])\n\n const onReviewerChange = useCallback(\n (selected: string | null) => {\n if (selected) {\n setReviewerId(selected)\n } else {\n setReviewerId(undefined)\n }\n },\n [setReviewerId],\n )\n\n return (\n <div className=\"AccessRequirementDashboard\">\n <EntityFinderModal\n configuration={{\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: null,\n selectMultiple: false,\n selectableTypes: [EntityType.project],\n treeOnly: true,\n }}\n show={showEntityFinder}\n onCancel={() => {\n setShowEntityFinder(false)\n }}\n title={'Select Project to Filter Access Requirements'}\n promptCopy={\n 'Select a project to find Access Requirements that are associated with that project. Access Requirements will be found if the Access Requirement is applied to the project, or if it is applied to any item inside the project.'\n }\n onConfirm={selected => {\n setRelatedProjectId(selected[0].targetId)\n setShowEntityFinder(false)\n }}\n confirmButtonCopy={'Select'}\n />\n <Grid component={'form'} container spacing={2} className=\"InputPanel\">\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n label=\"Filter by Access Requirement Name or ID\"\n id=\"ar-name-filter\"\n type=\"text\"\n fullWidth\n placeholder=\"Search for an Access Requirement Name or ID\"\n onChange={e => {\n setNameOrID(e.target.value)\n }}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchOutlined />\n </InputAdornment>\n ),\n },\n }}\n />\n </Grid>\n <Grid\n size={{ xs: 12, md: 4 }}\n sx={{\n display: 'flex',\n gap: '5px',\n alignItems: 'stretch',\n }}\n >\n <TextField\n label=\"Filter by Project\"\n id=\"project-id-filter\"\n type=\"text\"\n fullWidth\n placeholder=\"Enter a project SynID\"\n error={projectFilterFieldIsError}\n helperText={\n projectFilterFieldIsError\n ? 'Value must be a Synapse ID, e.g. \"syn1234\"'\n : undefined\n }\n onChange={e => {\n const newValue = e.target.value\n if (newValue === '') {\n setRelatedProjectId(undefined)\n } else {\n setRelatedProjectId(newValue)\n }\n }}\n />\n <InputSizedButton\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => {\n setShowEntityFinder(true)\n }}\n >\n Browse\n </InputSizedButton>\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <Typography\n component=\"label\"\n variant=\"smallText2\"\n htmlFor=\"reviewer-filter\"\n >\n Filter by Reviewer\n </Typography>\n <UserSearchBox\n inputId=\"reviewer-filter\"\n placeholder=\"Search for a username or team name\"\n defaultValue={reviewerId}\n onChange={onReviewerChange}\n />\n </Grid>\n </Grid>\n <AccessRequirementTable\n nameOrID={nameOrID}\n relatedProjectId={relatedProjectId}\n reviewerId={reviewerId}\n onCreateNewAccessRequirementClicked={\n onCreateNewAccessRequirementClicked\n }\n typeFilter={typeFilter}\n onTypeFilterChange={setTypeFilter}\n />\n </div>\n )\n}\n\nexport default AccessRequirementDashboard\n"],"mappings":";;;;;;;;;;;;;;;AAcA,IAAa,IAAiC,YACjC,IAAsC,oBACtC,IAA+B,cAC/B,IAA2B;AAMxC,SAAgB,EACd,GACA;CAEA,IAEM,EAAE,2CAAwC,GAE1C,IAAW,EAAY,GACvB,IAAkB,QAChB,IAAI,gBAAgB,EAAS,MAAM,GACzC,CAAC,EAAS,MAAM,CAClB,GACM,IAAW,EAAY,GAOvB,CAAC,GAAU,KAAe,EAC9B,EAAgB,IAAA,UAAkC,KAAK,IACvD,GACF,GACM,CAAC,GAAkB,KAAuB,EAG9C,EAAgB,IAAA,kBAAuC,KAAK,KAAA,GAC5D,GACF,GACM,CAAC,GAAY,KAAiB,EAClC,EAAgB,IAAA,YAAgC,KAAK,KAAA,GACrD,GACF,GACM,CAAC,GAAY,KAAiB,EAClC,EAAgB,IAAA,MAA4B,KAAK,KAAA,CACnD,GAEM,IAAqC,QAEvC,CAAC,EAAE,KAAoB,CAAC,EAAwB,KAAK,CAAgB,IACvE,CAAC,CAAgB,CACnB,GAEM,CAAC,GAAkB,KAAuB,EAAS,EAAK;CAG9D,QAAgB;EAEd,IAAM,IAAS,EACb;IAEG,IAAiC;IACjC,IAAsC;IACtC,IAA+B;IAC/B,IAA2B;EAC9B,IACA,MAAQ,MAAS,KAAA,KAAa,MAAS,EACzC,GAIM,IAAe,IAAI,gBAAgB,CAAM;EAC/C,EACE;GACE,UAAU,EAAS;GACnB,QAAQ,EAAa,SAAS;EAChC,GACA,EAAE,SAAS,GAAK,CAClB;CACF,GAAG;EACD;EACA;EACA;EACA;EACA;EACA,EAAS;CACX,CAAC;CAED,IAAM,IAAmB,GACtB,MAA4B;EAC3B,AACE,EADE,KAGY,KAAA,CAAS;CAE3B,GACA,CAAC,CAAa,CAChB;CAEA,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD;IACE,eAAe;KACb,cAAc,EAAY;KAC1B,kBAAkB;KAClB,gBAAgB;KAChB,iBAAiB,CAAC,EAAW,OAAO;KACpC,UAAU;IACZ;IACA,MAAM;IACN,gBAAgB;KACd,EAAoB,EAAK;IAC3B;IACA,OAAO;IACP,YACE;IAEF,YAAW,MAAY;KAErB,AADA,EAAoB,EAAS,GAAG,QAAQ,GACxC,EAAoB,EAAK;IAC3B;IACA,mBAAmB;GACpB,CAAA;GACD,kBAAC,GAAD;IAAM,WAAW;IAAQ,WAAA;IAAU,SAAS;IAAG,WAAU;cAAzD;KACE,kBAAC,GAAD;MAAM,MAAM;OAAE,IAAI;OAAI,IAAI;MAAE;gBAC1B,kBAAC,GAAD;OACE,OAAM;OACN,IAAG;OACH,MAAK;OACL,WAAA;OACA,aAAY;OACZ,WAAU,MAAK;QACb,EAAY,EAAE,OAAO,KAAK;OAC5B;OACA,WAAW,EACT,OAAO,EACL,cACE,kBAAC,GAAD;QAAgB,UAAS;kBACvB,kBAAC,GAAD,CAAiB,CAAA;OACH,CAAA,EAEpB,EACF;MACD,CAAA;KACG,CAAA;KACN,kBAAC,GAAD;MACE,MAAM;OAAE,IAAI;OAAI,IAAI;MAAE;MACtB,IAAI;OACF,SAAS;OACT,KAAK;OACL,YAAY;MACd;gBANF,CAQE,kBAAC,GAAD;OACE,OAAM;OACN,IAAG;OACH,MAAK;OACL,WAAA;OACA,aAAY;OACZ,OAAO;OACP,YACE,IACI,iDACA,KAAA;OAEN,WAAU,MAAK;QACb,IAAM,IAAW,EAAE,OAAO;QAC1B,AACE,EADE,MAAa,KACK,KAAA,IAEA,CAAQ;OAEhC;MACD,CAAA,GACD,kBAAC,GAAD;OACE,SAAQ;OACR,OAAM;OACN,eAAe;QACb,EAAoB,EAAI;OAC1B;iBACD;MAEiB,CAAA,CACd;;KACN,kBAAC,GAAD;MAAM,MAAM;OAAE,IAAI;OAAI,IAAI;MAAE;gBAA5B,CACE,kBAAC,GAAD;OACE,WAAU;OACV,SAAQ;OACR,SAAQ;iBACT;MAEW,CAAA,GACZ,kBAAC,GAAD;OACE,SAAQ;OACR,aAAY;OACZ,cAAc;OACd,UAAU;MACX,CAAA,CACG;;IACF;;GACN,kBAAC,GAAD;IACY;IACQ;IACN;IAEV;IAEU;IACZ,oBAAoB;GACrB,CAAA;EACE;;AAET"}
1
+ {"version":3,"file":"AccessRequirementDashboard.js","names":[],"sources":["../../../src/components/dataaccess/AccessRequirementDashboard.tsx"],"sourcesContent":["import { InputSizedButton } from '@/components/styled/InputSizedButton'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { SearchOutlined } from '@mui/icons-material'\nimport { Grid, InputAdornment, TextField, Typography } from '@mui/material'\nimport { useDebouncedState } from '@react-hookz/web'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { omitBy } from 'lodash-es'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useLocation, useNavigate } from 'react-router'\nimport { EntityFinderModal } from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport UserSearchBox from '../UserSearchBox/UserSearchBox'\nimport { AccessRequirementTable } from './AccessRequirementTable'\n\nexport const AR_NAME_OR_ID_SEARCH_PARAM_KEY = 'nameOrID'\nexport const RELATED_PROJECT_ID_SEARCH_PARAM_KEY = 'relatedProjectId'\nexport const REVIEWER_ID_SEARCH_PARAM_KEY = 'reviewerId'\nexport const AR_TYPE_SEARCH_PARAM_KEY = 'type'\n\nexport type AccessRequirementDashboardProps = {\n onCreateNewAccessRequirementClicked?: () => void\n}\n\nexport function AccessRequirementDashboard(\n props: AccessRequirementDashboardProps,\n) {\n // Amount of time to wait after an input value changes before sending a new request\n const INPUT_CHANGE_DEBOUNCE_DELAY_MS = 500\n\n const { onCreateNewAccessRequirementClicked } = props\n\n const location = useLocation()\n const urlSearchParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n )\n const navigate = useNavigate()\n\n /**\n * When an input changes, update the props passed to the table and update the search params.\n *\n * Debounced to prevent firing many queries while the user is entering text.\n */\n const [nameOrID, setNameOrID] = useDebouncedState<string>(\n urlSearchParams.get(AR_NAME_OR_ID_SEARCH_PARAM_KEY) ?? '',\n INPUT_CHANGE_DEBOUNCE_DELAY_MS,\n )\n const [relatedProjectId, setRelatedProjectId] = useDebouncedState<\n string | undefined\n >(\n urlSearchParams.get(RELATED_PROJECT_ID_SEARCH_PARAM_KEY) ?? undefined,\n INPUT_CHANGE_DEBOUNCE_DELAY_MS,\n )\n const [reviewerId, setReviewerId] = useDebouncedState<string | undefined>(\n urlSearchParams.get(REVIEWER_ID_SEARCH_PARAM_KEY) ?? undefined,\n INPUT_CHANGE_DEBOUNCE_DELAY_MS,\n )\n const [typeFilter, setTypeFilter] = useState<string | undefined>(\n urlSearchParams.get(AR_TYPE_SEARCH_PARAM_KEY) ?? undefined,\n )\n\n const projectFilterFieldIsError: boolean = useMemo(\n () =>\n !!(relatedProjectId && !SYNAPSE_ENTITY_ID_REGEX.exec(relatedProjectId)),\n [relatedProjectId],\n )\n\n const [showEntityFinder, setShowEntityFinder] = useState(false)\n\n // Update the QueryParams when the filter state changes\n useEffect(() => {\n // Don't include undefined/empty parameters\n const params = omitBy(\n {\n // Sync the search params state with the debounced props\n [AR_NAME_OR_ID_SEARCH_PARAM_KEY]: nameOrID,\n [RELATED_PROJECT_ID_SEARCH_PARAM_KEY]: relatedProjectId,\n [REVIEWER_ID_SEARCH_PARAM_KEY]: reviewerId,\n [AR_TYPE_SEARCH_PARAM_KEY]: typeFilter, // typeFilter state is not debounced\n },\n item => item === undefined || item === '',\n ) as Record<string, string>\n\n // Add the new params to the URL\n // Replace history because intuitively, the user has not navigated to a new page\n const paramsObject = new URLSearchParams(params)\n navigate(\n {\n pathname: location.pathname,\n search: paramsObject.toString(),\n },\n { replace: true },\n )\n }, [\n nameOrID,\n relatedProjectId,\n reviewerId,\n typeFilter,\n navigate,\n location.pathname,\n ])\n\n const onReviewerChange = useCallback(\n (selected: string | null) => {\n if (selected) {\n setReviewerId(selected)\n } else {\n setReviewerId(undefined)\n }\n },\n [setReviewerId],\n )\n\n const accessRequirementsPanel = (\n <>\n <EntityFinderModal\n configuration={{\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: null,\n selectMultiple: false,\n selectableTypes: [EntityType.project],\n treeOnly: true,\n }}\n show={showEntityFinder}\n onCancel={() => {\n setShowEntityFinder(false)\n }}\n title={'Select Project to Filter Access Requirements'}\n promptCopy={\n 'Select a project to find Access Requirements that are associated with that project. Access Requirements will be found if the Access Requirement is applied to the project, or if it is applied to any item inside the project.'\n }\n onConfirm={selected => {\n setRelatedProjectId(selected[0].targetId)\n setShowEntityFinder(false)\n }}\n confirmButtonCopy={'Select'}\n />\n <Grid component={'form'} container spacing={2} className=\"InputPanel\">\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n label=\"Filter by Access Requirement Name or ID\"\n id=\"ar-name-filter\"\n type=\"text\"\n fullWidth\n placeholder=\"Search for an Access Requirement Name or ID\"\n onChange={e => {\n setNameOrID(e.target.value)\n }}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchOutlined />\n </InputAdornment>\n ),\n },\n }}\n />\n </Grid>\n <Grid\n size={{ xs: 12, md: 4 }}\n sx={{\n display: 'flex',\n gap: '5px',\n alignItems: 'stretch',\n }}\n >\n <TextField\n label=\"Filter by Project\"\n id=\"project-id-filter\"\n type=\"text\"\n fullWidth\n placeholder=\"Enter a project SynID\"\n error={projectFilterFieldIsError}\n helperText={\n projectFilterFieldIsError\n ? 'Value must be a Synapse ID, e.g. \"syn1234\"'\n : undefined\n }\n onChange={e => {\n const newValue = e.target.value\n if (newValue === '') {\n setRelatedProjectId(undefined)\n } else {\n setRelatedProjectId(newValue)\n }\n }}\n />\n <InputSizedButton\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => {\n setShowEntityFinder(true)\n }}\n >\n Browse\n </InputSizedButton>\n </Grid>\n <Grid size={{ xs: 12, md: 4 }}>\n <Typography\n component=\"label\"\n variant=\"smallText2\"\n htmlFor=\"reviewer-filter\"\n >\n Filter by Reviewer\n </Typography>\n <UserSearchBox\n inputId=\"reviewer-filter\"\n placeholder=\"Search for a username or team name\"\n defaultValue={reviewerId}\n onChange={onReviewerChange}\n />\n </Grid>\n </Grid>\n <AccessRequirementTable\n nameOrID={nameOrID}\n relatedProjectId={relatedProjectId}\n reviewerId={reviewerId}\n onCreateNewAccessRequirementClicked={\n onCreateNewAccessRequirementClicked\n }\n typeFilter={typeFilter}\n onTypeFilterChange={setTypeFilter}\n />\n </>\n )\n\n return (\n <div className=\"AccessRequirementDashboard\">{accessRequirementsPanel}</div>\n )\n}\n\nexport default AccessRequirementDashboard\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function EDucTemplateTable(): import("react/jsx-runtime").JSX.Element;
2
+ export default EDucTemplateTable;
3
+ //# sourceMappingURL=EDucTemplateTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EDucTemplateTable.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/EDucTemplateTable.tsx"],"names":[],"mappings":"AAiKA,wBAAgB,iBAAiB,4CAuEhC;AAED,eAAe,iBAAiB,CAAA"}