synapse-react-client 4.0.41 → 4.0.42

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 (313) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts +7 -0
  3. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts.map +1 -0
  4. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +30 -0
  5. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -0
  6. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  7. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +138 -244
  8. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts +13 -0
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts.map +1 -0
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js +60 -0
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js.map +1 -0
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +8 -2
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +179 -63
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts +2 -0
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts.map +1 -1
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +13 -13
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts +3 -2
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts.map +1 -1
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +3 -2
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts +12 -0
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts.map +1 -0
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js +50 -0
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js.map +1 -0
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +112 -143
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +4 -2
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -1
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +8 -7
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -1
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +3 -2
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +79 -47
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts +12 -0
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts.map +1 -0
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js +51 -0
  45. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js.map +1 -0
  46. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts +12 -0
  47. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts.map +1 -0
  48. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js +24 -0
  49. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js.map +1 -0
  50. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +11 -0
  51. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -0
  52. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.js +0 -0
  53. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts +22 -0
  54. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts.map +1 -0
  55. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js +32 -0
  56. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js.map +1 -0
  57. package/dist/components/AclEditor/AclEditor.js +20 -20
  58. package/dist/components/Authentication/TwoFactorBackupCodes.js +1 -1
  59. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  60. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  61. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +79 -69
  62. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  63. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  64. package/dist/components/DataGrid/SynapseGrid.js +244 -246
  65. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  66. package/dist/components/DataGrid/components/GridLoadingState.d.ts +23 -0
  67. package/dist/components/DataGrid/components/GridLoadingState.d.ts.map +1 -0
  68. package/dist/components/DataGrid/components/GridLoadingState.js +64 -0
  69. package/dist/components/DataGrid/components/GridLoadingState.js.map +1 -0
  70. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  71. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +30 -29
  72. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  73. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +60 -6
  74. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  75. package/dist/components/DataGrid/useDataGridWebsocket.js +71 -60
  76. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  77. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts +11 -0
  78. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts.map +1 -0
  79. package/dist/components/DataGrid/utils/getNamedColumnIndices.js +8 -0
  80. package/dist/components/DataGrid/utils/getNamedColumnIndices.js.map +1 -0
  81. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts +6 -2
  82. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts.map +1 -1
  83. package/dist/components/FilePreview/FileHandleContentRenderer.js +27 -14
  84. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  85. package/dist/components/FilePreview/PdfPreview.d.ts +1 -1
  86. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  87. package/dist/components/FilePreview/PdfPreview.js +15 -16
  88. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  89. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
  90. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +71 -68
  91. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
  92. package/dist/components/FormTemplateEditor/FieldLibrary.css +1 -0
  93. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts +17 -0
  94. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -0
  95. package/dist/components/FormTemplateEditor/FieldLibrary.js +88 -0
  96. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -0
  97. package/dist/components/FormTemplateEditor/FieldLibrary.module.js +5 -0
  98. package/dist/components/FormTemplateEditor/FieldLibrary.module.js.map +1 -0
  99. package/dist/components/FormTemplateEditor/FieldLibrary.module.scss +12 -0
  100. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts +19 -0
  101. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts.map +1 -0
  102. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +115 -0
  103. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -0
  104. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.css +1 -0
  105. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts +9 -0
  106. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts.map +1 -0
  107. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js +18 -0
  108. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js.map +1 -0
  109. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js +5 -0
  110. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js.map +1 -0
  111. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss +4 -0
  112. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts +21 -0
  113. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts.map +1 -0
  114. package/dist/components/FormTemplateEditor/FormStructurePanel.js +108 -0
  115. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -0
  116. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts +10 -0
  117. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts.map +1 -0
  118. package/dist/components/FormTemplateEditor/FormTemplateEditor.js +31 -0
  119. package/dist/components/FormTemplateEditor/FormTemplateEditor.js.map +1 -0
  120. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts +15 -0
  121. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts.map +1 -0
  122. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +234 -0
  123. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -0
  124. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -1
  125. package/dist/components/FormTemplateEditor/FormTemplatePreview.js +1 -12
  126. package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -1
  127. package/dist/components/FormTemplateEditor/StepCard.d.ts +25 -0
  128. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -0
  129. package/dist/components/FormTemplateEditor/StepCard.js +203 -0
  130. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -0
  131. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts +34 -0
  132. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -0
  133. package/dist/components/FormTemplateEditor/StepFieldRow.js +128 -0
  134. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -0
  135. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts +19 -0
  136. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -0
  137. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +78 -0
  138. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -0
  139. package/dist/components/FormTemplateEditor/dragHandle.css +1 -0
  140. package/dist/components/FormTemplateEditor/dragHandle.module.js +8 -0
  141. package/dist/components/FormTemplateEditor/dragHandle.module.js.map +1 -0
  142. package/dist/components/FormTemplateEditor/dragHandle.module.scss +22 -0
  143. package/dist/components/FormTemplateEditor/dropTarget.css +1 -0
  144. package/dist/components/FormTemplateEditor/dropTarget.module.js +5 -0
  145. package/dist/components/FormTemplateEditor/dropTarget.module.js.map +1 -0
  146. package/dist/components/FormTemplateEditor/dropTarget.module.scss +14 -0
  147. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts +48 -0
  148. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts.map +1 -0
  149. package/dist/components/FormTemplateEditor/formTemplateDraftState.js +126 -0
  150. package/dist/components/FormTemplateEditor/formTemplateDraftState.js.map +1 -0
  151. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts +35 -0
  152. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts.map +1 -0
  153. package/dist/components/FormTemplateEditor/formTemplateSchema.js +35 -0
  154. package/dist/components/FormTemplateEditor/formTemplateSchema.js.map +1 -0
  155. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +3 -1
  156. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -1
  157. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +26 -8
  158. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
  159. package/dist/components/FormTemplateEditor/sortableIds.d.ts +23 -0
  160. package/dist/components/FormTemplateEditor/sortableIds.d.ts.map +1 -0
  161. package/dist/components/FormTemplateEditor/sortableIds.js +24 -0
  162. package/dist/components/FormTemplateEditor/sortableIds.js.map +1 -0
  163. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts +33 -0
  164. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts.map +1 -0
  165. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js +59 -0
  166. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js.map +1 -0
  167. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts +9 -0
  168. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts.map +1 -0
  169. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js +66 -0
  170. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js.map +1 -0
  171. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -1
  172. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +34 -19
  173. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -1
  174. package/dist/components/FormTemplateEditor/utils.d.ts +2 -2
  175. package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -1
  176. package/dist/components/FormTemplateEditor/utils.js +7 -10
  177. package/dist/components/FormTemplateEditor/utils.js.map +1 -1
  178. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts +11 -0
  179. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts.map +1 -1
  180. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js +28 -19
  181. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  182. package/dist/components/QueryBuilder/FilterConditionRow.d.ts +1 -0
  183. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  184. package/dist/components/QueryBuilder/FilterConditionRow.js +102 -105
  185. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  186. package/dist/components/QueryBuilder/FilterGroupNode.js +6 -6
  187. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  188. package/dist/components/QueryBuilder/QueryBuilderControls.js +88 -81
  189. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  190. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +7 -0
  191. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  192. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  193. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +2 -1
  194. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -1
  195. package/dist/components/QueryBuilder/qbTreeToReadable.js +24 -20
  196. package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -1
  197. package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -1
  198. package/dist/components/QueryBuilder/queryBuilderDrag.module.js +2 -2
  199. package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -1
  200. package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +1 -1
  201. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +16 -0
  202. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  203. package/dist/components/QueryBuilder/queryBuilderMetadata.js +13 -5
  204. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  205. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts +18 -0
  206. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -0
  207. package/dist/components/QueryBuilder/useQBValueDisplayName.js +64 -0
  208. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -0
  209. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +6 -6
  210. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts +1 -0
  211. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts.map +1 -1
  212. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +13 -11
  213. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  214. package/dist/components/SynapseTable/SearchV2.js +4 -4
  215. package/dist/components/ToastMessage/ToastMessage.d.ts.map +1 -1
  216. package/dist/components/ToastMessage/ToastMessage.js +25 -22
  217. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  218. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts +7 -0
  219. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts.map +1 -0
  220. package/dist/components/dataaccess/FormTemplateEditorRoute.js +26 -0
  221. package/dist/components/dataaccess/FormTemplateEditorRoute.js.map +1 -0
  222. package/dist/components/dataaccess/FormTemplateTable.d.ts +10 -0
  223. package/dist/components/dataaccess/FormTemplateTable.d.ts.map +1 -0
  224. package/dist/components/dataaccess/FormTemplateTable.js +124 -0
  225. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -0
  226. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  227. package/dist/components/dataaccess/ReviewerDashboard.js +80 -50
  228. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  229. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  230. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -0
  231. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  232. package/dist/components/widgets/FileHandleLink.d.ts +12 -2
  233. package/dist/components/widgets/FileHandleLink.d.ts.map +1 -1
  234. package/dist/components/widgets/FileHandleLink.js +25 -29
  235. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  236. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +2 -0
  237. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
  238. package/dist/mocks/accessRequirement/mockFormTemplates.js +8 -2
  239. package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
  240. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
  241. package/dist/mocks/accessRequirement/mockJsonSchemas.js +17 -31
  242. package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
  243. package/dist/mocks/msw/handlers/authHandlers.d.ts +1 -0
  244. package/dist/mocks/msw/handlers/authHandlers.d.ts.map +1 -1
  245. package/dist/mocks/msw/handlers/authHandlers.js +6 -2
  246. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  247. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts +2 -0
  248. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  249. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +52 -46
  250. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  251. package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
  252. package/dist/mocks/msw/handlers/fileHandlers.js +25 -21
  253. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  254. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +2 -1
  255. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -1
  256. package/dist/mocks/msw/handlers/formTemplateHandlers.js +18 -18
  257. package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -1
  258. package/dist/mocks/msw/handlers/schemaHandlers.d.ts +8 -0
  259. package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
  260. package/dist/mocks/msw/handlers/schemaHandlers.js +20 -3
  261. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  262. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts +8 -0
  263. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts.map +1 -0
  264. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js +19 -0
  265. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js.map +1 -0
  266. package/dist/style/abstracts/_cssVariables.scss +13 -0
  267. package/dist/style/components/_toasts.scss +10 -1
  268. package/dist/style/main.css +1 -1
  269. package/dist/synapse-queries/KeyFactory.d.ts +8 -1
  270. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  271. package/dist/synapse-queries/KeyFactory.js +17 -4
  272. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  273. package/dist/synapse-queries/auth/index.d.ts +1 -0
  274. package/dist/synapse-queries/auth/index.d.ts.map +1 -1
  275. package/dist/synapse-queries/auth/index.js +2 -1
  276. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts +11 -0
  277. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts.map +1 -0
  278. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +19 -0
  279. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -0
  280. package/dist/synapse-queries/dataaccess/index.js +5 -5
  281. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +18 -0
  282. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  283. package/dist/synapse-queries/dataaccess/useEDuc.js +33 -1
  284. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  285. package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
  286. package/dist/synapse-queries/file/useFileHandle.d.ts +8 -0
  287. package/dist/synapse-queries/file/useFileHandle.d.ts.map +1 -1
  288. package/dist/synapse-queries/file/useFileHandle.js +15 -6
  289. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  290. package/dist/synapse-queries/index.js +260 -253
  291. package/dist/synapse-queries/jsonschema/index.js +2 -2
  292. package/dist/synapse-queries/jsonschema/useSchema.d.ts +5 -0
  293. package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -1
  294. package/dist/synapse-queries/jsonschema/useSchema.js +9 -1
  295. package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -1
  296. package/dist/tsconfig.build.tsbuildinfo +1 -1
  297. package/dist/utils/APIConstants.d.ts +1 -0
  298. package/dist/utils/APIConstants.d.ts.map +1 -1
  299. package/dist/utils/APIConstants.js +2 -2
  300. package/dist/utils/APIConstants.js.map +1 -1
  301. package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
  302. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  303. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  304. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  305. package/dist/utils/functions/toPascalCase.d.ts +6 -0
  306. package/dist/utils/functions/toPascalCase.d.ts.map +1 -0
  307. package/dist/utils/functions/toPascalCase.js +8 -0
  308. package/dist/utils/functions/toPascalCase.js.map +1 -0
  309. package/dist/utils/jsonschema/submissionContext.d.ts +5 -0
  310. package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -1
  311. package/dist/utils/jsonschema/submissionContext.js +22 -30
  312. package/dist/utils/jsonschema/submissionContext.js.map +1 -1
  313. package/package.json +10 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQBValueDisplayName.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/useQBValueDisplayName.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIX,iBAAiB,EAElB,MAAM,iCAAiC,CAAA;AASxC;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,KAAK,EAAE,MAAM,KACV,MAAM,CAAA;AAqBX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,WAAW,EAAE,EAC3B,YAAY,EAAE,SAAS,iBAAiB,EAAE,GACzC,oBAAoB,CA2EtB;AAED,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,EAAE,oBAGN,CAAA"}
@@ -0,0 +1,64 @@
1
+ import "../../utils/SynapseConstants.js";
2
+ import e from "../../utils/hooks/useGetInfoFromIds.js";
3
+ import { isFacetColumnResultValues as t, labelForFacetValue as n } from "./queryBuilderMetadata.js";
4
+ import { useCallback as r, useMemo as i } from "react";
5
+ import { ColumnTypeEnum as a } from "@sage-bionetworks/synapse-types";
6
+ //#region src/components/QueryBuilder/useQBValueDisplayName.ts
7
+ function o(e) {
8
+ switch (e) {
9
+ case a.ENTITYID:
10
+ case a.ENTITYID_LIST: return "ENTITY_HEADER";
11
+ case a.USERID:
12
+ case a.USERID_LIST: return "USER_PROFILE";
13
+ case a.EVALUATIONID: return "EVALUATION_QUEUE";
14
+ default: return null;
15
+ }
16
+ }
17
+ function s(a, s) {
18
+ let c = i(() => {
19
+ let e = /* @__PURE__ */ new Map();
20
+ for (let t of a) {
21
+ let n = o(t.columnType);
22
+ n != null && e.set(t.name, n);
23
+ }
24
+ return e;
25
+ }, [a]), l = i(() => {
26
+ let e = {
27
+ ENTITY_HEADER: [],
28
+ USER_PROFILE: [],
29
+ EVALUATION_QUEUE: []
30
+ };
31
+ for (let n of s) {
32
+ if (!t(n)) continue;
33
+ let r = c.get(n.columnName);
34
+ if (r != null) for (let t of n.facetValues) t.value !== "org.sagebionetworks.UNDEFINED_NULL_NOTSET" && e[r].push(t.value);
35
+ }
36
+ return e;
37
+ }, [s, c]), u = e({
38
+ ids: l.ENTITY_HEADER,
39
+ type: "ENTITY_HEADER"
40
+ }), d = e({
41
+ ids: l.USER_PROFILE,
42
+ type: "USER_PROFILE"
43
+ }), f = e({
44
+ ids: l.EVALUATION_QUEUE,
45
+ type: "EVALUATION_QUEUE"
46
+ }), p = i(() => ({
47
+ ENTITY_HEADER: new Map(u.map((e) => [e.id, e.name])),
48
+ USER_PROFILE: new Map(d.map((e) => [e.ownerId, e.userName])),
49
+ EVALUATION_QUEUE: new Map(f.filter((e) => e.id != null && e.name != null).map((e) => [e.id, e.name]))
50
+ }), [
51
+ u,
52
+ d,
53
+ f
54
+ ]);
55
+ return r((e, t) => {
56
+ let r = e == null ? null : c.get(e);
57
+ return r == null ? n(t) : p[r].get(t) ?? n(t);
58
+ }, [c, p]);
59
+ }
60
+ var c = (e, t) => n(t);
61
+ //#endregion
62
+ export { c as rawQBValueDisplayName, s as useQBValueDisplayName };
63
+
64
+ //# sourceMappingURL=useQBValueDisplayName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQBValueDisplayName.js","names":[],"sources":["../../../src/components/QueryBuilder/useQBValueDisplayName.ts"],"sourcesContent":["import {\n ColumnModel,\n ColumnTypeEnum,\n EntityHeader,\n Evaluation,\n FacetColumnResult,\n UserGroupHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { useCallback, useMemo } from 'react'\nimport useGetInfoFromIds from '../../utils/hooks/useGetInfoFromIds'\nimport { VALUE_NOT_SET } from '../../utils/SynapseConstants'\nimport {\n isFacetColumnResultValues,\n labelForFacetValue,\n} from './queryBuilderMetadata'\n\n/**\n * Resolves the user-facing label for a value stored on a QB condition. Columns\n * whose values are Synapse IDs resolve to the object's name; every other\n * column falls back to {@link labelForFacetValue}.\n */\nexport type QBValueDisplayNameFn = (\n columnName: string | null,\n value: string,\n) => string\n\ntype LookupType = 'ENTITY_HEADER' | 'USER_PROFILE' | 'EVALUATION_QUEUE'\n\nfunction lookupTypeForColumnType(\n columnType: ColumnModel['columnType'] | undefined,\n): LookupType | null {\n switch (columnType) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n return 'ENTITY_HEADER'\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n return 'USER_PROFILE'\n case ColumnTypeEnum.EVALUATIONID:\n return 'EVALUATION_QUEUE'\n default:\n return null\n }\n}\n\n/**\n * Builds the labeling function used for every value the QB displays — pill\n * choices and the plain-English summary alike.\n *\n * IDs are looked up in batch for the whole panel rather than per condition, so\n * a value keeps its name whether or not a condition is currently selecting it.\n */\nexport function useQBValueDisplayName(\n columnModels: ColumnModel[],\n facetResults: readonly FacetColumnResult[],\n): QBValueDisplayNameFn {\n const lookupTypeByColumnName = useMemo(() => {\n const map = new Map<string, LookupType>()\n for (const columnModel of columnModels) {\n const lookupType = lookupTypeForColumnType(columnModel.columnType)\n if (lookupType != null) {\n map.set(columnModel.name, lookupType)\n }\n }\n return map\n }, [columnModels])\n\n // Only faceted columns enumerate their values in the UI, so the facet\n // results are the complete set of IDs that need names.\n const idsByLookupType = useMemo(() => {\n const ids: Record<LookupType, string[]> = {\n ENTITY_HEADER: [],\n USER_PROFILE: [],\n EVALUATION_QUEUE: [],\n }\n for (const facet of facetResults) {\n if (!isFacetColumnResultValues(facet)) continue\n const lookupType = lookupTypeByColumnName.get(facet.columnName)\n if (lookupType == null) continue\n for (const facetValue of facet.facetValues) {\n if (facetValue.value !== VALUE_NOT_SET) {\n ids[lookupType].push(facetValue.value)\n }\n }\n }\n return ids\n }, [facetResults, lookupTypeByColumnName])\n\n const entityHeaders = useGetInfoFromIds<EntityHeader>({\n ids: idsByLookupType.ENTITY_HEADER,\n type: 'ENTITY_HEADER',\n })\n const userGroupHeaders = useGetInfoFromIds<UserGroupHeader>({\n ids: idsByLookupType.USER_PROFILE,\n type: 'USER_PROFILE',\n })\n const evaluations = useGetInfoFromIds<Evaluation>({\n ids: idsByLookupType.EVALUATION_QUEUE,\n type: 'EVALUATION_QUEUE',\n })\n\n const labelsByLookupType: Record<LookupType, Map<string, string>> = useMemo(\n () => ({\n ENTITY_HEADER: new Map(entityHeaders.map(h => [h.id, h.name])),\n USER_PROFILE: new Map(userGroupHeaders.map(h => [h.ownerId, h.userName])),\n EVALUATION_QUEUE: new Map(\n evaluations\n .filter(e => e.id != null && e.name != null)\n .map(e => [e.id!, e.name!]),\n ),\n }),\n [entityHeaders, userGroupHeaders, evaluations],\n )\n\n return useCallback(\n (columnName, value) => {\n const lookupType =\n columnName == null ? null : lookupTypeByColumnName.get(columnName)\n if (lookupType == null) return labelForFacetValue(value)\n // Lookups resolve asynchronously, and only faceted values are looked up\n // at all, so the raw value is the best label available until (or unless)\n // a name arrives. An ID the backend won't resolve still gets a label\n // here: `useGetInfoFromIds` substitutes a placeholder header, named\n // after the ID for entities and `Unknown` for users.\n return (\n labelsByLookupType[lookupType].get(value) ?? labelForFacetValue(value)\n )\n },\n [lookupTypeByColumnName, labelsByLookupType],\n )\n}\n\n/** Labeler used when no ID resolution is available (e.g. outside the panel). */\nexport const rawQBValueDisplayName: QBValueDisplayNameFn = (\n _columnName,\n value,\n) => labelForFacetValue(value)\n"],"mappings":";;;;;;AA4BA,SAAS,EACP,GACmB;CACnB,QAAQ,GAAR;EACE,KAAK,EAAe;EACpB,KAAK,EAAe,eAClB,OAAO;EACT,KAAK,EAAe;EACpB,KAAK,EAAe,aAClB,OAAO;EACT,KAAK,EAAe,cAClB,OAAO;EACT,SACE,OAAO;CACX;AACF;AASA,SAAgB,EACd,GACA,GACsB;CACtB,IAAM,IAAyB,QAAc;EAC3C,IAAM,oBAAM,IAAI,IAAwB;EACxC,KAAK,IAAM,KAAe,GAAc;GACtC,IAAM,IAAa,EAAwB,EAAY,UAAU;GACjE,AAAI,KAAc,QAChB,EAAI,IAAI,EAAY,MAAM,CAAU;EAExC;EACA,OAAO;CACT,GAAG,CAAC,CAAY,CAAC,GAIX,IAAkB,QAAc;EACpC,IAAM,IAAoC;GACxC,eAAe,CAAC;GAChB,cAAc,CAAC;GACf,kBAAkB,CAAC;EACrB;EACA,KAAK,IAAM,KAAS,GAAc;GAChC,IAAI,CAAC,EAA0B,CAAK,GAAG;GACvC,IAAM,IAAa,EAAuB,IAAI,EAAM,UAAU;GAC1D,SAAc,MAClB,KAAK,IAAM,KAAc,EAAM,aAC7B,AAAI,EAAW,UAAA,+CACb,EAAI,GAAY,KAAK,EAAW,KAAK;EAG3C;EACA,OAAO;CACT,GAAG,CAAC,GAAc,CAAsB,CAAC,GAEnC,IAAgB,EAAgC;EACpD,KAAK,EAAgB;EACrB,MAAM;CACR,CAAC,GACK,IAAmB,EAAmC;EAC1D,KAAK,EAAgB;EACrB,MAAM;CACR,CAAC,GACK,IAAc,EAA8B;EAChD,KAAK,EAAgB;EACrB,MAAM;CACR,CAAC,GAEK,IAA8D,SAC3D;EACL,eAAe,IAAI,IAAI,EAAc,KAAI,MAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EAC7D,cAAc,IAAI,IAAI,EAAiB,KAAI,MAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;EACxE,kBAAkB,IAAI,IACpB,EACG,QAAO,MAAK,EAAE,MAAM,QAAQ,EAAE,QAAQ,IAAI,EAC1C,KAAI,MAAK,CAAC,EAAE,IAAK,EAAE,IAAK,CAAC,CAC9B;CACF,IACA;EAAC;EAAe;EAAkB;CAAW,CAC/C;CAEA,OAAO,GACJ,GAAY,MAAU;EACrB,IAAM,IACJ,KAAc,OAAO,OAAO,EAAuB,IAAI,CAAU;EAOnE,OANI,KAAc,OAAa,EAAmB,CAAK,IAOrD,EAAmB,GAAY,IAAI,CAAK,KAAK,EAAmB,CAAK;CAEzE,GACA,CAAC,GAAwB,CAAkB,CAC7C;AACF;AAGA,IAAa,KACX,GACA,MACG,EAAmB,CAAK"}
@@ -16,8 +16,8 @@ import { useGetAddToDownloadListRequestForCurrentQuery as u } from "../../QueryW
16
16
  import { CustomControlButton as d } from "../CustomControls/CustomControlButton.js";
17
17
  import { RowSelectionUI as f } from "./RowSelectionUI.js";
18
18
  import { useState as p } from "react";
19
- import { toast as m } from "react-hot-toast";
20
- import { Box as h, Button as g } from "@mui/material";
19
+ import { Box as m, Button as h } from "@mui/material";
20
+ import { toast as g } from "react-hot-toast";
21
21
  import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
22
22
  import { GetAppTwoTone as b } from "@mui/icons-material";
23
23
  import { useAtom as x } from "jotai";
@@ -44,7 +44,7 @@ function C(C) {
44
44
  control: e,
45
45
  startIcon: e.icon
46
46
  }, e.buttonText)),
47
- z && /* @__PURE__ */ v(g, {
47
+ z && /* @__PURE__ */ v(h, {
48
48
  variant: "outlined",
49
49
  onClick: () => {
50
50
  E ? L(!0) : O(!0);
@@ -56,15 +56,15 @@ function C(C) {
56
56
  onHide: () => O(!1),
57
57
  content: "You must be signed in to send results to an analysis platform."
58
58
  }),
59
- V && /* @__PURE__ */ v(g, {
59
+ V && /* @__PURE__ */ v(h, {
60
60
  variant: "contained",
61
61
  onClick: () => {
62
- let e = m.custom(/* @__PURE__ */ v(h, {
62
+ let e = g.custom(/* @__PURE__ */ v(m, {
63
63
  sx: { width: "100%" },
64
64
  children: /* @__PURE__ */ v(i, {
65
65
  addToDownloadListRequest: I,
66
66
  onClose: () => {
67
- m.dismiss(e);
67
+ g.dismiss(e);
68
68
  }
69
69
  })
70
70
  }), { duration: Infinity });
@@ -1,4 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
+ export declare const FLOATING_ROW_SELECTION_BAR_CLASS_NAME = "SynapseFloatingRowSelectionBar";
2
3
  export type RowSelectionUIProps = {
3
4
  show?: boolean;
4
5
  selectedRowCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionUI.d.ts","sourceRoot":"","sources":["../../../../src/components/SynapseTable/RowSelection/RowSelectionUI.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAA;CAC3B,CAAA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA8DxD"}
1
+ {"version":3,"file":"RowSelectionUI.d.ts","sourceRoot":"","sources":["../../../../src/components/SynapseTable/RowSelection/RowSelectionUI.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC,eAAO,MAAM,qCAAqC,mCAChB,CAAA;AAIlC,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAA;CAC3B,CAAA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAqExD"}
@@ -5,18 +5,20 @@ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
5
5
  import { useAtomValue as l } from "jotai";
6
6
  import u from "pluralize";
7
7
  //#region src/components/SynapseTable/RowSelection/RowSelectionUI.tsx
8
- function d(d) {
9
- let { show: f = !0, selectedRowCount: p, onClearSelection: m, customControls: h = /* @__PURE__ */ s(o, {}) } = d, g = l(e);
10
- return f ? /* @__PURE__ */ c(i, {
8
+ var d = "SynapseFloatingRowSelectionBar", f = "var(--synapse-floating-row-selection-bar-height)";
9
+ function p(p) {
10
+ let { show: m = !0, selectedRowCount: h, onClearSelection: g, customControls: _ = /* @__PURE__ */ s(o, {}) } = p, v = l(e);
11
+ return m ? /* @__PURE__ */ c(i, {
12
+ className: v ? d : void 0,
11
13
  sx: {
12
14
  display: "flex",
13
15
  alignItems: "center",
14
16
  justifyContent: "space-between",
15
- position: g ? "fixed" : "absolute",
16
- bottom: g ? 0 : -70,
17
+ position: v ? "fixed" : "absolute",
18
+ bottom: v ? 0 : `calc(-1 * ${f})`,
17
19
  left: 0,
18
20
  width: "100%",
19
- height: "70px",
21
+ height: f,
20
22
  zIndex: 1,
21
23
  px: 2.5
22
24
  },
@@ -24,7 +26,7 @@ function d(d) {
24
26
  variant: "text",
25
27
  color: "error",
26
28
  onClick: () => {
27
- m();
29
+ g();
28
30
  },
29
31
  children: "Clear Selection"
30
32
  }), /* @__PURE__ */ c(n, {
@@ -39,18 +41,18 @@ function d(d) {
39
41
  gap: 1.5
40
42
  },
41
43
  children: [/* @__PURE__ */ s(t, {
42
- badgeContent: p.toLocaleString(),
44
+ badgeContent: h.toLocaleString(),
43
45
  color: "primary",
44
46
  max: Infinity
45
47
  }), /* @__PURE__ */ c(a, {
46
48
  variant: "body1",
47
- children: [u("Row", p), " Selected"]
49
+ children: [u("Row", h), " Selected"]
48
50
  })]
49
- }), h]
51
+ }), _]
50
52
  })]
51
53
  }) : /* @__PURE__ */ s(o, {});
52
54
  }
53
55
  //#endregion
54
- export { d as RowSelectionUI };
56
+ export { d as FLOATING_ROW_SELECTION_BAR_CLASS_NAME, p as RowSelectionUI };
55
57
 
56
58
  //# sourceMappingURL=RowSelectionUI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionUI.js","names":[],"sources":["../../../../src/components/SynapseTable/RowSelection/RowSelectionUI.tsx"],"sourcesContent":["import InlineBadge from '@/components/styled/InlineBadge'\nimport { Box, Button, Paper, Typography } from '@mui/material'\nimport { useAtomValue } from 'jotai'\nimport pluralize from 'pluralize'\nimport { ReactNode } from 'react'\nimport { isRowSelectionUIFloatingAtom } from '../../QueryWrapper/TableRowSelectionState'\n\nexport type RowSelectionUIProps = {\n show?: boolean\n selectedRowCount: number\n onClearSelection: () => void\n customControls?: ReactNode\n}\n\n/**\n * UI-only component for displaying the number of table rows selected, along with actions that can be performed on those rows\n */\nexport function RowSelectionUI(props: RowSelectionUIProps) {\n const {\n show = true,\n selectedRowCount,\n onClearSelection,\n customControls = <></>,\n } = props\n const isRowSelectionUIFloating = useAtomValue(isRowSelectionUIFloatingAtom)\n if (!show) {\n return <></>\n }\n\n return (\n <Paper\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n position: isRowSelectionUIFloating ? 'fixed' : 'absolute',\n bottom: isRowSelectionUIFloating ? 0 : -70,\n left: 0,\n width: '100%',\n height: '70px',\n zIndex: 1,\n px: 2.5,\n }}\n >\n <Button\n variant=\"text\"\n color=\"error\"\n onClick={() => {\n onClearSelection()\n }}\n >\n Clear Selection\n </Button>\n <Box\n sx={{\n display: 'flex',\n gap: 2.5,\n alignItems: 'center',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n gap: 1.5,\n }}\n >\n <InlineBadge\n badgeContent={selectedRowCount.toLocaleString()}\n color=\"primary\"\n max={Infinity}\n />\n <Typography variant=\"body1\">\n {pluralize('Row', selectedRowCount)} Selected\n </Typography>\n </Box>\n {customControls}\n </Box>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;AAiBA,SAAgB,EAAe,GAA4B;CACzD,IAAM,EACJ,UAAO,IACP,qBACA,qBACA,oBAAiB,kBAAA,GAAA,CAAI,CAAA,MACnB,GACE,IAA2B,EAAa,CAA4B;CAK1E,OAJK,IAKH,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,UAAU,IAA2B,UAAU;GAC/C,QAAQ,IAA2B,IAAI;GACvC,MAAM;GACN,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,IAAI;EACN;YAZF,CAcE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,eAAe;IACb,EAAiB;GACnB;aACD;EAEO,CAAA,GACR,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,KAAK;IACL,YAAY;GACd;aALF,CAOE,kBAAC,GAAD;IACE,IAAI;KACF,SAAS;KACT,KAAK;IACP;cAJF,CAME,kBAAC,GAAD;KACE,cAAc,EAAiB,eAAe;KAC9C,OAAM;KACN,KAAK;IACN,CAAA,GACD,kBAAC,GAAD;KAAY,SAAQ;eAApB,CACG,EAAU,OAAO,CAAgB,GAAE,WAC1B;MACT;OACJ,CACE;IACA;MAnDA,kBAAA,GAAA,CAAI,CAAA;AAqDf"}
1
+ {"version":3,"file":"RowSelectionUI.js","names":[],"sources":["../../../../src/components/SynapseTable/RowSelection/RowSelectionUI.tsx"],"sourcesContent":["import InlineBadge from '@/components/styled/InlineBadge'\nimport { Box, Button, Paper, Typography } from '@mui/material'\nimport { useAtomValue } from 'jotai'\nimport pluralize from 'pluralize'\nimport { ReactNode } from 'react'\nimport { isRowSelectionUIFloatingAtom } from '../../QueryWrapper/TableRowSelectionState'\n\nexport const FLOATING_ROW_SELECTION_BAR_CLASS_NAME =\n 'SynapseFloatingRowSelectionBar'\n\nconst HEIGHT_CSS_VARIABLE = 'var(--synapse-floating-row-selection-bar-height)'\n\nexport type RowSelectionUIProps = {\n show?: boolean\n selectedRowCount: number\n onClearSelection: () => void\n customControls?: ReactNode\n}\n\n/**\n * UI-only component for displaying the number of table rows selected, along with actions that can be performed on those rows\n */\nexport function RowSelectionUI(props: RowSelectionUIProps) {\n const {\n show = true,\n selectedRowCount,\n onClearSelection,\n customControls = <></>,\n } = props\n const isRowSelectionUIFloating = useAtomValue(isRowSelectionUIFloatingAtom)\n if (!show) {\n return <></>\n }\n\n return (\n <Paper\n className={\n isRowSelectionUIFloating\n ? FLOATING_ROW_SELECTION_BAR_CLASS_NAME\n : undefined\n }\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n position: isRowSelectionUIFloating ? 'fixed' : 'absolute',\n bottom: isRowSelectionUIFloating\n ? 0\n : `calc(-1 * ${HEIGHT_CSS_VARIABLE})`,\n left: 0,\n width: '100%',\n height: HEIGHT_CSS_VARIABLE,\n zIndex: 1,\n px: 2.5,\n }}\n >\n <Button\n variant=\"text\"\n color=\"error\"\n onClick={() => {\n onClearSelection()\n }}\n >\n Clear Selection\n </Button>\n <Box\n sx={{\n display: 'flex',\n gap: 2.5,\n alignItems: 'center',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n gap: 1.5,\n }}\n >\n <InlineBadge\n badgeContent={selectedRowCount.toLocaleString()}\n color=\"primary\"\n max={Infinity}\n />\n <Typography variant=\"body1\">\n {pluralize('Row', selectedRowCount)} Selected\n </Typography>\n </Box>\n {customControls}\n </Box>\n </Paper>\n )\n}\n"],"mappings":";;;;;;;AAOA,IAAa,IACX,kCAEI,IAAsB;AAY5B,SAAgB,EAAe,GAA4B;CACzD,IAAM,EACJ,UAAO,IACP,qBACA,qBACA,oBAAiB,kBAAA,GAAA,CAAI,CAAA,MACnB,GACE,IAA2B,EAAa,CAA4B;CAK1E,OAJK,IAKH,kBAAC,GAAD;EACE,WACE,IACI,IACA,KAAA;EAEN,IAAI;GACF,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,UAAU,IAA2B,UAAU;GAC/C,QAAQ,IACJ,IACA,aAAa,EAAoB;GACrC,MAAM;GACN,OAAO;GACP,QAAQ;GACR,QAAQ;GACR,IAAI;EACN;YAnBF,CAqBE,kBAAC,GAAD;GACE,SAAQ;GACR,OAAM;GACN,eAAe;IACb,EAAiB;GACnB;aACD;EAEO,CAAA,GACR,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,KAAK;IACL,YAAY;GACd;aALF,CAOE,kBAAC,GAAD;IACE,IAAI;KACF,SAAS;KACT,KAAK;IACP;cAJF,CAME,kBAAC,GAAD;KACE,cAAc,EAAiB,eAAe;KAC9C,OAAM;KACN,KAAK;IACN,CAAA,GACD,kBAAC,GAAD;KAAY,SAAQ;eAApB,CACG,EAAU,OAAO,CAAgB,GAAE,WAC1B;MACT;OACJ,CACE;IACA;MA1DA,kBAAA,GAAA,CAAI,CAAA;AA4Df"}
@@ -3,8 +3,8 @@ import "../../utils/index.js";
3
3
  import n from "../IconSvg/IconSvg.js";
4
4
  import { useGetQueryMetadata as r } from "../QueryWrapper/useGetQueryMetadata.js";
5
5
  import { Component as i, createRef as a } from "react";
6
- import { CSSTransition as o } from "react-transition-group";
7
- import { Collapse as s } from "@mui/material";
6
+ import { Collapse as o } from "@mui/material";
7
+ import { CSSTransition as s } from "react-transition-group";
8
8
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
9
  import { ColumnMultiValueFunction as u, ColumnSingleValueFilterOperator as d, ColumnTypeEnum as f } from "@sage-bionetworks/synapse-types";
10
10
  //#region src/components/SynapseTable/SearchV2.tsx
@@ -93,7 +93,7 @@ var p = class extends i {
93
93
  let { searchable: e, lockedColumn: t, columnModels: r, queryVisualizationContext: { showSearchBar: i, getColumnDisplayName: a } } = this.props, { searchText: u, show: d, columnName: f } = this.state, p = [];
94
94
  return e ? p = e.map((e) => r?.find((t) => t.name === e)).filter(this.isSupportedColumnAndInProps).map((e) => e.name) : r && (p = r?.filter(this.isSupportedColumn).map((e) => e.name)), p.length && t?.columnName && (p = p.filter((e) => e !== t?.columnName)), /* @__PURE__ */ l("div", {
95
95
  className: "QueryWrapperSearchInput",
96
- children: [/* @__PURE__ */ c(s, {
96
+ children: [/* @__PURE__ */ c(o, {
97
97
  in: i,
98
98
  children: /* @__PURE__ */ l("form", {
99
99
  className: "QueryWrapperSearchInput__searchbar",
@@ -128,7 +128,7 @@ var p = class extends i {
128
128
  })
129
129
  }), /* @__PURE__ */ c("div", {
130
130
  className: "QueryWrapperSearchInput__dropdown_pos",
131
- children: /* @__PURE__ */ c(o, {
131
+ children: /* @__PURE__ */ c(s, {
132
132
  nodeRef: this.radioFormRef,
133
133
  in: d,
134
134
  classNames: "QueryWrapperSearchInput__animate_dropdown",
@@ -1 +1 @@
1
- {"version":3,"file":"ToastMessage.d.ts","sourceRoot":"","sources":["../../../src/components/ToastMessage/ToastMessage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAU,MAAM,OAAO,CAAA;AAGhD,OAAuB,EACrB,iBAAiB,EAClB,MAAM,kCAAkC,CAAA;AAEzC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,QAAQ,GACT,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiBvC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,KAAK,CAAC,SAAS,CAiBvD;AAED,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,iBAAiB,CAAA;IACvC,qBAAqB,CAAC,EAAE,iBAAiB,CAAA;IACzC,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,6BAA6B,CAAC,EAAE,OAAO,CAAA;CACxC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,SAAS,EAClB,UAAU,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,EACnD,sBAAqB,mBAAmB,GAAG,IAAS,KACnD,CAAC,MAAM,IAAI,CAkEb,CAAA"}
1
+ {"version":3,"file":"ToastMessage.d.ts","sourceRoot":"","sources":["../../../src/components/ToastMessage/ToastMessage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAU,MAAM,OAAO,CAAA;AAIhD,OAAuB,EACrB,iBAAiB,EAClB,MAAM,kCAAkC,CAAA;AAMzC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,QAAQ,GACT,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiBvC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,KAAK,CAAC,SAAS,CA2BvD;AAED,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,iBAAiB,CAAA;IACvC,qBAAqB,CAAC,EAAE,iBAAiB,CAAA;IACzC,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,6BAA6B,CAAC,EAAE,OAAO,CAAA;CACxC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,SAAS,EAClB,UAAU,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,EACnD,sBAAqB,mBAAmB,GAAG,IAAS,KACnD,CAAC,MAAM,IAAI,CAkEb,CAAA"}
@@ -1,43 +1,46 @@
1
1
  import e from "../FullWidthAlert/FullWidthAlert.js";
2
2
  import { useRef as t } from "react";
3
3
  import { uniqueId as n } from "lodash-es";
4
- import { ToastBar as r, Toaster as i, toast as a } from "react-hot-toast";
5
- import { CSSTransition as o, TransitionGroup as s } from "react-transition-group";
6
- import { jsx as c } from "react/jsx-runtime";
4
+ import { useMediaQuery as r } from "@mui/material";
5
+ import { ToastBar as i, Toaster as a, toast as o } from "react-hot-toast";
6
+ import { CSSTransition as s, TransitionGroup as c } from "react-transition-group";
7
+ import { jsx as l } from "react/jsx-runtime";
7
8
  //#region src/components/ToastMessage/ToastMessage.tsx
8
- function l({ text: e, show: n, autohide: r }) {
9
+ var u = "SynapseToastContainer", d = "SynapseToastContainerTop", f = "SynapseToastContainerBottom";
10
+ function p({ text: e, show: n, autohide: r }) {
9
11
  let i = t(null);
10
- return /* @__PURE__ */ c(s, { children: n && /* @__PURE__ */ c(o, {
12
+ return /* @__PURE__ */ l(c, { children: n && /* @__PURE__ */ l(s, {
11
13
  nodeRef: i,
12
14
  classNames: "SRC-card",
13
15
  timeout: r ? {
14
16
  enter: 500,
15
17
  exit: 300
16
18
  } : {},
17
- children: /* @__PURE__ */ c("div", {
19
+ children: /* @__PURE__ */ l("div", {
18
20
  className: "SRC-modal",
19
21
  ref: i,
20
22
  children: e
21
23
  })
22
24
  }) });
23
25
  }
24
- function u() {
25
- return /* @__PURE__ */ c(i, {
26
- containerClassName: "SynapseToastContainer",
27
- position: "bottom-center",
28
- children: (e) => /* @__PURE__ */ c(r, {
29
- toast: e,
26
+ function m() {
27
+ let e = r((e) => e.breakpoints.down("sm"));
28
+ return /* @__PURE__ */ l(a, {
29
+ containerClassName: `${u} ${e ? d : f}`,
30
+ position: e ? "top-center" : "bottom-center",
31
+ children: (t) => /* @__PURE__ */ l(i, {
32
+ toast: t,
30
33
  style: {
31
- ...e.style,
32
- animation: e.visible ? "fadeInUp 0.5s ease" : "fadeOutDown 1s ease"
34
+ ...t.style,
35
+ animation: t.visible ? `${e ? "fadeInDown" : "fadeInUp"} 0.5s ease` : `${e ? "fadeOutUp" : "fadeOutDown"} 1s ease`
33
36
  }
34
37
  })
35
38
  });
36
39
  }
37
- var d = (t, r, i = {}) => {
38
- let o = n("synToast-"), s = () => {
39
- a.dismiss(o);
40
- }, { title: l = void 0, primaryButtonConfig: u = void 0, secondaryButtonConfig: d = void 0, dismissOnPrimaryButtonClick: f = !1, dismissOnSecondaryButtonClick: p = !1 } = i ?? {};
40
+ var h = (t, r, i = {}) => {
41
+ let a = n("synToast-"), s = () => {
42
+ o.dismiss(a);
43
+ }, { title: c = void 0, primaryButtonConfig: u = void 0, secondaryButtonConfig: d = void 0, dismissOnPrimaryButtonClick: f = !1, dismissOnSecondaryButtonClick: p = !1 } = i ?? {};
41
44
  if (u && "onClick" in u && f) {
42
45
  let e = u.onClick;
43
46
  u.onClick = (t) => {
@@ -51,22 +54,22 @@ var d = (t, r, i = {}) => {
51
54
  };
52
55
  }
53
56
  let { autoCloseInMs: m = 15e3 } = i ?? {};
54
- return m === 0 && (m = Infinity), a(/* @__PURE__ */ c(e, {
57
+ return m === 0 && (m = Infinity), o(/* @__PURE__ */ l(e, {
55
58
  isGlobal: !1,
56
59
  onClose: s,
57
60
  variant: r ?? "info",
58
61
  show: !0,
59
- title: l,
62
+ title: c,
60
63
  description: t,
61
64
  primaryButtonConfig: u,
62
65
  secondaryButtonConfig: d
63
66
  }), {
64
- id: o,
67
+ id: a,
65
68
  className: "SynapseToastMessage",
66
69
  duration: m
67
70
  }), s;
68
71
  };
69
72
  //#endregion
70
- export { u as SynapseToastContainer, l as ToastMessage, d as displayToast };
73
+ export { m as SynapseToastContainer, p as ToastMessage, h as displayToast };
71
74
 
72
75
  //# sourceMappingURL=ToastMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToastMessage.js","names":[],"sources":["../../../src/components/ToastMessage/ToastMessage.tsx"],"sourcesContent":["import { uniqueId } from 'lodash-es'\nimport React, { ReactNode, useRef } from 'react'\nimport { toast, ToastBar, Toaster } from 'react-hot-toast'\nimport { CSSTransition, TransitionGroup } from 'react-transition-group'\nimport FullWidthAlert, {\n AlertButtonConfig,\n} from '../FullWidthAlert/FullWidthAlert'\n\nexport type ToastMessageProps = {\n text: string\n show: boolean\n autohide: boolean\n}\n\n/**\n *\n * Generalization of a Material-style toast message used in a couple of places. This component is simple and\n * cannot handle issuing multiple toast messages. For more sophisticated cases, see {@link displayToast}\n */\nexport function ToastMessage({\n text,\n show,\n autohide,\n}: ToastMessageProps): React.JSX.Element {\n const modalRef = useRef<HTMLDivElement>(null)\n return (\n <TransitionGroup>\n {show && (\n <CSSTransition\n nodeRef={modalRef}\n classNames=\"SRC-card\"\n timeout={autohide ? { enter: 500, exit: 300 } : {}}\n >\n <div className=\"SRC-modal\" ref={modalRef}>\n {text}\n </div>\n </CSSTransition>\n )}\n </TransitionGroup>\n )\n}\n\n/**\n * Customized ToastContainer for using react-toastify.\n *\n * Note that this will collide with other notification systems, such as the BootstrapNotify notifications\n * in SWC.\n */\nexport function SynapseToastContainer(): React.ReactNode {\n return (\n <Toaster\n containerClassName=\"SynapseToastContainer\"\n position=\"bottom-center\"\n >\n {t => (\n <ToastBar\n toast={t}\n style={{\n ...t.style,\n animation: t.visible ? 'fadeInUp 0.5s ease' : 'fadeOutDown 1s ease', // The exit animation needs to be long enough for the element to be removed, or else it will pop back in\n }}\n ></ToastBar>\n )}\n </Toaster>\n )\n}\n\ntype ToastMessageOptions = {\n title?: string\n /* autoCloseInMs default: 15000 */\n autoCloseInMs?: number\n primaryButtonConfig?: AlertButtonConfig\n secondaryButtonConfig?: AlertButtonConfig\n dismissOnPrimaryButtonClick?: boolean\n dismissOnSecondaryButtonClick?: boolean\n}\n\n/**\n * Displays a toast message. Requires one 'SynapseToastContainer' to be somewhere in the page.\n *\n * @param message - The description of the toast message.\n * @param variant - The type of toast message to display. Default 'info'.\n\n * In ToastMessageOptions:\n *\n * @param autoCloseInMs - The amount of time in milliseconds to wait before automatically closing the toast. To prevent autoclose, set to 0 or Infinity. Default 15000.\n *\n * The rest of the options params are undefined by default.\n */\nexport const displayToast = (\n message: ReactNode,\n variant?: 'info' | 'success' | 'warning' | 'danger',\n toastMessageOptions: ToastMessageOptions | null = {},\n): (() => void) => {\n const id = uniqueId('synToast-')\n const onClose = () => {\n toast.dismiss(id)\n }\n\n const {\n title = undefined,\n primaryButtonConfig = undefined,\n secondaryButtonConfig = undefined,\n dismissOnPrimaryButtonClick = false,\n dismissOnSecondaryButtonClick = false,\n } = toastMessageOptions ?? {}\n\n // If 'dismissOnPrimaryButtonClick' is true, then we need to invoke onClose after onClick is invoked.\n if (\n primaryButtonConfig &&\n 'onClick' in primaryButtonConfig &&\n dismissOnPrimaryButtonClick\n ) {\n const onClick = primaryButtonConfig.onClick!\n primaryButtonConfig.onClick = e => {\n onClick(e)\n onClose()\n }\n }\n\n // ditto for secondary\n if (\n secondaryButtonConfig &&\n 'onClick' in secondaryButtonConfig &&\n dismissOnSecondaryButtonClick\n ) {\n const onClick = secondaryButtonConfig.onClick!\n secondaryButtonConfig.onClick = e => {\n onClick(e)\n onClose()\n }\n }\n\n let { autoCloseInMs = 15000 } = toastMessageOptions ?? {}\n // Some toast libraries use 0 to prevent autoclose\n // react-hot-toast doesn't, but we can convert it for better compatibility as we try to migrate to use just one library\n if (autoCloseInMs === 0) {\n autoCloseInMs = Infinity\n }\n\n toast(\n <FullWidthAlert\n isGlobal={false}\n onClose={onClose}\n variant={variant ?? 'info'}\n show={true}\n title={title}\n description={message}\n primaryButtonConfig={primaryButtonConfig}\n secondaryButtonConfig={secondaryButtonConfig}\n />,\n {\n id: id,\n className: 'SynapseToastMessage',\n duration: autoCloseInMs,\n },\n )\n\n return onClose\n}\n"],"mappings":";;;;;;;AAmBA,SAAgB,EAAa,EAC3B,SACA,SACA,eACuC;CACvC,IAAM,IAAW,EAAuB,IAAI;CAC5C,OACE,kBAAC,GAAD,EAAA,UACG,KACC,kBAAC,GAAD;EACE,SAAS;EACT,YAAW;EACX,SAAS,IAAW;GAAE,OAAO;GAAK,MAAM;EAAI,IAAI,CAAC;YAEjD,kBAAC,OAAD;GAAK,WAAU;GAAY,KAAK;aAC7B;EACE,CAAA;CACQ,CAAA,EAEF,CAAA;AAErB;AAQA,SAAgB,IAAyC;CACvD,OACE,kBAAC,GAAD;EACE,oBAAmB;EACnB,UAAS;aAER,MACC,kBAAC,GAAD;GACE,OAAO;GACP,OAAO;IACL,GAAG,EAAE;IACL,WAAW,EAAE,UAAU,uBAAuB;GAChD;EACS,CAAA;CAEN,CAAA;AAEb;AAwBA,IAAa,KACX,GACA,GACA,IAAkD,CAAC,MAClC;CACjB,IAAM,IAAK,EAAS,WAAW,GACzB,UAAgB;EACpB,EAAM,QAAQ,CAAE;CAClB,GAEM,EACJ,WAAQ,KAAA,GACR,yBAAsB,KAAA,GACtB,2BAAwB,KAAA,GACxB,iCAA8B,IAC9B,mCAAgC,OAC9B,KAAuB,CAAC;CAG5B,IACE,KACA,aAAa,KACb,GACA;EACA,IAAM,IAAU,EAAoB;EACpC,EAAoB,WAAU,MAAK;GAEjC,AADA,EAAQ,CAAC,GACT,EAAQ;EACV;CACF;CAGA,IACE,KACA,aAAa,KACb,GACA;EACA,IAAM,IAAU,EAAsB;EACtC,EAAsB,WAAU,MAAK;GAEnC,AADA,EAAQ,CAAC,GACT,EAAQ;EACV;CACF;CAEA,IAAI,EAAE,mBAAgB,SAAU,KAAuB,CAAC;CAyBxD,OAtBI,MAAkB,MACpB,IAAgB,WAGlB,EACE,kBAAC,GAAD;EACE,UAAU;EACD;EACT,SAAS,KAAW;EACpB,MAAM;EACC;EACP,aAAa;EACQ;EACE;CACxB,CAAA,GACD;EACM;EACJ,WAAW;EACX,UAAU;CACZ,CACF,GAEO;AACT"}
1
+ {"version":3,"file":"ToastMessage.js","names":[],"sources":["../../../src/components/ToastMessage/ToastMessage.tsx"],"sourcesContent":["import { uniqueId } from 'lodash-es'\nimport React, { ReactNode, useRef } from 'react'\nimport { useMediaQuery } from '@mui/material'\nimport { toast, ToastBar, Toaster } from 'react-hot-toast'\nimport { CSSTransition, TransitionGroup } from 'react-transition-group'\nimport FullWidthAlert, {\n AlertButtonConfig,\n} from '../FullWidthAlert/FullWidthAlert'\n\nconst TOAST_CONTAINER_CLASS_NAME = 'SynapseToastContainer'\nconst TOAST_CONTAINER_TOP_CLASS_NAME = 'SynapseToastContainerTop'\nconst TOAST_CONTAINER_BOTTOM_CLASS_NAME = 'SynapseToastContainerBottom'\n\nexport type ToastMessageProps = {\n text: string\n show: boolean\n autohide: boolean\n}\n\n/**\n *\n * Generalization of a Material-style toast message used in a couple of places. This component is simple and\n * cannot handle issuing multiple toast messages. For more sophisticated cases, see {@link displayToast}\n */\nexport function ToastMessage({\n text,\n show,\n autohide,\n}: ToastMessageProps): React.JSX.Element {\n const modalRef = useRef<HTMLDivElement>(null)\n return (\n <TransitionGroup>\n {show && (\n <CSSTransition\n nodeRef={modalRef}\n classNames=\"SRC-card\"\n timeout={autohide ? { enter: 500, exit: 300 } : {}}\n >\n <div className=\"SRC-modal\" ref={modalRef}>\n {text}\n </div>\n </CSSTransition>\n )}\n </TransitionGroup>\n )\n}\n\n/**\n * Customized ToastContainer for using react-toastify.\n *\n * Note that this will collide with other notification systems, such as the BootstrapNotify notifications\n * in SWC.\n */\nexport function SynapseToastContainer(): React.ReactNode {\n // Anchor toasts to the top on small screens, where a virtual keyboard can cover the bottom of the viewport\n const anchorTop = useMediaQuery(theme => theme.breakpoints.down('sm'))\n\n return (\n <Toaster\n containerClassName={`${TOAST_CONTAINER_CLASS_NAME} ${\n anchorTop\n ? TOAST_CONTAINER_TOP_CLASS_NAME\n : TOAST_CONTAINER_BOTTOM_CLASS_NAME\n }`}\n position={anchorTop ? 'top-center' : 'bottom-center'}\n >\n {t => (\n <ToastBar\n toast={t}\n style={{\n ...t.style,\n // The exit animation needs to be long enough for the element to be removed, or else it will pop back in\n animation: t.visible\n ? `${anchorTop ? 'fadeInDown' : 'fadeInUp'} 0.5s ease`\n : `${anchorTop ? 'fadeOutUp' : 'fadeOutDown'} 1s ease`,\n }}\n ></ToastBar>\n )}\n </Toaster>\n )\n}\n\ntype ToastMessageOptions = {\n title?: string\n /* autoCloseInMs default: 15000 */\n autoCloseInMs?: number\n primaryButtonConfig?: AlertButtonConfig\n secondaryButtonConfig?: AlertButtonConfig\n dismissOnPrimaryButtonClick?: boolean\n dismissOnSecondaryButtonClick?: boolean\n}\n\n/**\n * Displays a toast message. Requires one 'SynapseToastContainer' to be somewhere in the page.\n *\n * @param message - The description of the toast message.\n * @param variant - The type of toast message to display. Default 'info'.\n\n * In ToastMessageOptions:\n *\n * @param autoCloseInMs - The amount of time in milliseconds to wait before automatically closing the toast. To prevent autoclose, set to 0 or Infinity. Default 15000.\n *\n * The rest of the options params are undefined by default.\n */\nexport const displayToast = (\n message: ReactNode,\n variant?: 'info' | 'success' | 'warning' | 'danger',\n toastMessageOptions: ToastMessageOptions | null = {},\n): (() => void) => {\n const id = uniqueId('synToast-')\n const onClose = () => {\n toast.dismiss(id)\n }\n\n const {\n title = undefined,\n primaryButtonConfig = undefined,\n secondaryButtonConfig = undefined,\n dismissOnPrimaryButtonClick = false,\n dismissOnSecondaryButtonClick = false,\n } = toastMessageOptions ?? {}\n\n // If 'dismissOnPrimaryButtonClick' is true, then we need to invoke onClose after onClick is invoked.\n if (\n primaryButtonConfig &&\n 'onClick' in primaryButtonConfig &&\n dismissOnPrimaryButtonClick\n ) {\n const onClick = primaryButtonConfig.onClick!\n primaryButtonConfig.onClick = e => {\n onClick(e)\n onClose()\n }\n }\n\n // ditto for secondary\n if (\n secondaryButtonConfig &&\n 'onClick' in secondaryButtonConfig &&\n dismissOnSecondaryButtonClick\n ) {\n const onClick = secondaryButtonConfig.onClick!\n secondaryButtonConfig.onClick = e => {\n onClick(e)\n onClose()\n }\n }\n\n let { autoCloseInMs = 15000 } = toastMessageOptions ?? {}\n // Some toast libraries use 0 to prevent autoclose\n // react-hot-toast doesn't, but we can convert it for better compatibility as we try to migrate to use just one library\n if (autoCloseInMs === 0) {\n autoCloseInMs = Infinity\n }\n\n toast(\n <FullWidthAlert\n isGlobal={false}\n onClose={onClose}\n variant={variant ?? 'info'}\n show={true}\n title={title}\n description={message}\n primaryButtonConfig={primaryButtonConfig}\n secondaryButtonConfig={secondaryButtonConfig}\n />,\n {\n id: id,\n className: 'SynapseToastMessage',\n duration: autoCloseInMs,\n },\n )\n\n return onClose\n}\n"],"mappings":";;;;;;;;AASA,IAAM,IAA6B,yBAC7B,IAAiC,4BACjC,IAAoC;AAa1C,SAAgB,EAAa,EAC3B,SACA,SACA,eACuC;CACvC,IAAM,IAAW,EAAuB,IAAI;CAC5C,OACE,kBAAC,GAAD,EAAA,UACG,KACC,kBAAC,GAAD;EACE,SAAS;EACT,YAAW;EACX,SAAS,IAAW;GAAE,OAAO;GAAK,MAAM;EAAI,IAAI,CAAC;YAEjD,kBAAC,OAAD;GAAK,WAAU;GAAY,KAAK;aAC7B;EACE,CAAA;CACQ,CAAA,EAEF,CAAA;AAErB;AAQA,SAAgB,IAAyC;CAEvD,IAAM,IAAY,GAAc,MAAS,EAAM,YAAY,KAAK,IAAI,CAAC;CAErE,OACE,kBAAC,GAAD;EACE,oBAAoB,GAAG,EAA2B,GAChD,IACI,IACA;EAEN,UAAU,IAAY,eAAe;aAEpC,MACC,kBAAC,GAAD;GACE,OAAO;GACP,OAAO;IACL,GAAG,EAAE;IAEL,WAAW,EAAE,UACT,GAAG,IAAY,eAAe,WAAW,cACzC,GAAG,IAAY,cAAc,cAAc;GACjD;EACS,CAAA;CAEN,CAAA;AAEb;AAwBA,IAAa,KACX,GACA,GACA,IAAkD,CAAC,MAClC;CACjB,IAAM,IAAK,EAAS,WAAW,GACzB,UAAgB;EACpB,EAAM,QAAQ,CAAE;CAClB,GAEM,EACJ,WAAQ,KAAA,GACR,yBAAsB,KAAA,GACtB,2BAAwB,KAAA,GACxB,iCAA8B,IAC9B,mCAAgC,OAC9B,KAAuB,CAAC;CAG5B,IACE,KACA,aAAa,KACb,GACA;EACA,IAAM,IAAU,EAAoB;EACpC,EAAoB,WAAU,MAAK;GAEjC,AADA,EAAQ,CAAC,GACT,EAAQ;EACV;CACF;CAGA,IACE,KACA,aAAa,KACb,GACA;EACA,IAAM,IAAU,EAAsB;EACtC,EAAsB,WAAU,MAAK;GAEnC,AADA,EAAQ,CAAC,GACT,EAAQ;EACV;CACF;CAEA,IAAI,EAAE,mBAAgB,SAAU,KAAuB,CAAC;CAyBxD,OAtBI,MAAkB,MACpB,IAAgB,WAGlB,EACE,kBAAC,GAAD;EACE,UAAU;EACD;EACT,SAAS,KAAW;EACpB,MAAM;EACC;EACP,aAAa;EACQ;EACE;CACxB,CAAA,GACD;EACM;EACJ,WAAW;EACX,UAAU;CACZ,CACF,GAEO;AACT"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Route element for creating a form template (no `templateId` param) or editing an existing one.
3
+ * Saving or cancelling returns to the template list.
4
+ */
5
+ export declare function FormTemplateEditorRoute(): import("react/jsx-runtime").JSX.Element;
6
+ export default FormTemplateEditorRoute;
7
+ //# sourceMappingURL=FormTemplateEditorRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateEditorRoute.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/FormTemplateEditorRoute.tsx"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,uBAAuB,4CAuBtC;AAED,eAAe,uBAAuB,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { FormTemplateEditor as e } from "../FormTemplateEditor/FormTemplateEditor.js";
2
+ import { FORM_TEMPLATES_PATH as t } from "./FormTemplateTable.js";
3
+ import { Link as n } from "@mui/material";
4
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ import { Link as o, useNavigate as s, useParams as c } from "react-router";
6
+ //#region src/components/dataaccess/FormTemplateEditorRoute.tsx
7
+ function l() {
8
+ let { templateId: l } = c(), u = s(), d = () => void u(t);
9
+ return /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(n, {
10
+ component: o,
11
+ to: t,
12
+ sx: {
13
+ display: "block",
14
+ mb: 2
15
+ },
16
+ children: "Form Templates"
17
+ }), /* @__PURE__ */ i(e, {
18
+ templateId: l,
19
+ onSaved: d,
20
+ onCancel: d
21
+ }, l ?? "new")] });
22
+ }
23
+ //#endregion
24
+ export { l as FormTemplateEditorRoute, l as default };
25
+
26
+ //# sourceMappingURL=FormTemplateEditorRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateEditorRoute.js","names":[],"sources":["../../../src/components/dataaccess/FormTemplateEditorRoute.tsx"],"sourcesContent":["import { Link as MuiLink } from '@mui/material'\nimport { Link, useNavigate, useParams } from 'react-router'\nimport { FormTemplateEditor } from '../FormTemplateEditor/FormTemplateEditor'\nimport { FORM_TEMPLATES_PATH } from './FormTemplateTable'\n\n/**\n * Route element for creating a form template (no `templateId` param) or editing an existing one.\n * Saving or cancelling returns to the template list.\n */\nexport function FormTemplateEditorRoute() {\n const { templateId } = useParams<{ templateId: string }>()\n const navigate = useNavigate()\n const goToList = () => void navigate(FORM_TEMPLATES_PATH)\n\n return (\n <>\n <MuiLink\n component={Link}\n to={FORM_TEMPLATES_PATH}\n sx={{ display: 'block', mb: 2 }}\n >\n Form Templates\n </MuiLink>\n <FormTemplateEditor\n // Reset editor state when navigating between templates\n key={templateId ?? 'new'}\n templateId={templateId}\n onSaved={goToList}\n onCancel={goToList}\n />\n </>\n )\n}\n\nexport default FormTemplateEditorRoute\n"],"mappings":";;;;;;AASA,SAAgB,IAA0B;CACxC,IAAM,EAAE,kBAAe,EAAkC,GACnD,IAAW,EAAY,GACvB,UAAiB,KAAK,EAAS,CAAmB;CAExD,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,WAAW;EACX,IAAI;EACJ,IAAI;GAAE,SAAS;GAAS,IAAI;EAAE;YAC/B;CAEQ,CAAA,GACT,kBAAC,GAAD;EAGc;EACZ,SAAS;EACT,UAAU;CACX,GAJM,KAAc,KAIpB,CACD,EAAA,CAAA;AAEN"}
@@ -0,0 +1,10 @@
1
+ export declare const FORM_TEMPLATES_ROUTE = "FormTemplates";
2
+ export declare const NEW_FORM_TEMPLATE_ROUTE = "FormTemplates/new";
3
+ export declare const FORM_TEMPLATE_ROUTE = "FormTemplates/:templateId";
4
+ export declare const FORM_TEMPLATES_PATH = "/FormTemplates";
5
+ export declare const NEW_FORM_TEMPLATE_PATH = "/FormTemplates/new";
6
+ export declare const getFormTemplatePath: (templateId: string) => string;
7
+ export declare const NAME_SEARCH_DEBOUNCE_DELAY_MS = 500;
8
+ export declare function FormTemplateTable(): import("react/jsx-runtime").JSX.Element;
9
+ export default FormTemplateTable;
10
+ //# sourceMappingURL=FormTemplateTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateTable.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/FormTemplateTable.tsx"],"names":[],"mappings":"AA2BA,eAAO,MAAM,oBAAoB,kBAAkB,CAAA;AACnD,eAAO,MAAM,uBAAuB,sBAAgC,CAAA;AACpE,eAAO,MAAM,mBAAmB,8BAAwC,CAAA;AACxE,eAAO,MAAM,mBAAmB,mBAA6B,CAAA;AAC7D,eAAO,MAAM,sBAAsB,uBAAgC,CAAA;AACnE,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,WACd,CAAA;AAGxC,eAAO,MAAM,6BAA6B,MAAM,CAAA;AA2BhD,wBAAgB,iBAAiB,4CAiIhC;AAED,eAAe,iBAAiB,CAAA"}
@@ -0,0 +1,124 @@
1
+ import { useSearchFormTemplatesInfinite as e } from "../../synapse-queries/dataaccess/useFormTemplate.js";
2
+ import t from "../TanStackTable/StyledTanStackTable.js";
3
+ import n from "../TanStackTable/ColumnHeader.js";
4
+ import { useMemo as r, useState as i } from "react";
5
+ import { Alert as a, Box as o, Button as s, Chip as c, FormControlLabel as l, InputAdornment as u, Skeleton as d, Switch as f, TextField as p, Typography as m } from "@mui/material";
6
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
7
+ import { keepPreviousData as v } from "@tanstack/react-query";
8
+ import { SearchOutlined as y } from "@mui/icons-material";
9
+ import { Link as b, useNavigate as x } from "react-router";
10
+ import { useDebouncedState as S } from "@react-hookz/web";
11
+ import { createColumnHelper as C, getCoreRowModel as w, useReactTable as T } from "@tanstack/react-table";
12
+ //#region src/components/dataaccess/FormTemplateTable.tsx
13
+ var E = "FormTemplates", D = `${E}/new`, O = `${E}/:templateId`, k = `/${E}`, A = `/${D}`, j = (e) => `${k}/${e}`, M = 500, N = C(), P = [
14
+ N.accessor("name", {
15
+ header: (e) => /* @__PURE__ */ g(n, {
16
+ ...e,
17
+ title: "Name"
18
+ }),
19
+ cell: ({ row: e, getValue: t }) => e.original.id ? /* @__PURE__ */ g(b, {
20
+ to: j(e.original.id),
21
+ children: t()
22
+ }) : t(),
23
+ enableColumnFilter: !1
24
+ }),
25
+ N.accessor("versionNumber", {
26
+ header: (e) => /* @__PURE__ */ g(n, {
27
+ ...e,
28
+ title: "Version"
29
+ }),
30
+ enableColumnFilter: !1
31
+ }),
32
+ N.accessor("deprecated", {
33
+ header: (e) => /* @__PURE__ */ g(n, {
34
+ ...e,
35
+ title: "Status"
36
+ }),
37
+ cell: ({ getValue: e }) => e() ? /* @__PURE__ */ g(c, {
38
+ label: "Deprecated",
39
+ size: "small"
40
+ }) : null,
41
+ enableColumnFilter: !1
42
+ })
43
+ ];
44
+ function F() {
45
+ let n = x(), [c, b] = S("", 500), [C, E] = i(!1), { data: D, isLoading: O, error: k, hasNextPage: j, fetchNextPage: M, isFetchingNextPage: N } = e(r(() => ({
46
+ name: c || void 0,
47
+ includeDeprecated: C
48
+ }), [c, C]), { placeholderData: v }), F = r(() => D?.pages.flatMap((e) => e.results ?? []) ?? [], [D]), I = T({
49
+ data: F,
50
+ columns: P,
51
+ getCoreRowModel: w(),
52
+ getRowId: (e) => e.id ?? ""
53
+ }), L = k && /* @__PURE__ */ _(a, {
54
+ severity: "error",
55
+ children: [
56
+ /* @__PURE__ */ g("strong", { children: "Sorry, we couldn't load the form templates." }),
57
+ /* @__PURE__ */ g("br", {}),
58
+ k.reason
59
+ ]
60
+ }), R;
61
+ return R = O ? /* @__PURE__ */ g(d, {
62
+ variant: "rectangular",
63
+ height: 200
64
+ }) : k && !D ? L : F.length === 0 ? /* @__PURE__ */ g(m, {
65
+ variant: "body1",
66
+ sx: {
67
+ textAlign: "center",
68
+ my: 2
69
+ },
70
+ children: "No form templates found."
71
+ }) : /* @__PURE__ */ _(h, { children: [
72
+ /* @__PURE__ */ g(t, {
73
+ table: I,
74
+ styledTableContainerProps: { sx: { my: 2 } }
75
+ }),
76
+ L,
77
+ j && /* @__PURE__ */ g(s, {
78
+ variant: "outlined",
79
+ disabled: N,
80
+ onClick: () => void M(),
81
+ children: "Load more"
82
+ })
83
+ ] }), /* @__PURE__ */ _(o, { children: [/* @__PURE__ */ _(o, {
84
+ sx: {
85
+ display: "flex",
86
+ alignItems: "flex-end",
87
+ gap: 2,
88
+ flexWrap: "wrap",
89
+ mb: 2
90
+ },
91
+ children: [
92
+ /* @__PURE__ */ g(p, {
93
+ label: "Filter by template name",
94
+ type: "text",
95
+ size: "small",
96
+ onChange: (e) => b(e.target.value),
97
+ slotProps: { input: { endAdornment: /* @__PURE__ */ g(u, {
98
+ position: "end",
99
+ children: /* @__PURE__ */ g(y, {})
100
+ }) } },
101
+ sx: { minWidth: 300 }
102
+ }),
103
+ /* @__PURE__ */ g(l, {
104
+ label: "Include deprecated",
105
+ sx: { mb: 0 },
106
+ control: /* @__PURE__ */ g(f, {
107
+ sx: { "& .MuiSwitch-input": { m: 0 } },
108
+ checked: C,
109
+ onChange: (e) => E(e.target.checked)
110
+ })
111
+ }),
112
+ /* @__PURE__ */ g(s, {
113
+ variant: "contained",
114
+ sx: { ml: "auto" },
115
+ onClick: () => void n(A),
116
+ children: "Create template"
117
+ })
118
+ ]
119
+ }), R] });
120
+ }
121
+ //#endregion
122
+ export { k as FORM_TEMPLATES_PATH, E as FORM_TEMPLATES_ROUTE, O as FORM_TEMPLATE_ROUTE, F as FormTemplateTable, F as default, M as NAME_SEARCH_DEBOUNCE_DELAY_MS, A as NEW_FORM_TEMPLATE_PATH, D as NEW_FORM_TEMPLATE_ROUTE, j as getFormTemplatePath };
123
+
124
+ //# sourceMappingURL=FormTemplateTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormTemplateTable.js","names":[],"sources":["../../../src/components/dataaccess/FormTemplateTable.tsx"],"sourcesContent":["import { useSearchFormTemplatesInfinite } from '@/synapse-queries/dataaccess/useFormTemplate'\nimport { SearchOutlined } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n Button,\n Chip,\n FormControlLabel,\n InputAdornment,\n Skeleton,\n Switch,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useDebouncedState } from '@react-hookz/web'\nimport { FormTemplate } from '@sage-bionetworks/synapse-client'\nimport {\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useMemo, useState } from 'react'\nimport { Link, useNavigate } from 'react-router'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { keepPreviousData } from '@tanstack/react-query'\n\nexport const FORM_TEMPLATES_ROUTE = 'FormTemplates'\nexport const NEW_FORM_TEMPLATE_ROUTE = `${FORM_TEMPLATES_ROUTE}/new`\nexport const FORM_TEMPLATE_ROUTE = `${FORM_TEMPLATES_ROUTE}/:templateId`\nexport const FORM_TEMPLATES_PATH = `/${FORM_TEMPLATES_ROUTE}`\nexport const NEW_FORM_TEMPLATE_PATH = `/${NEW_FORM_TEMPLATE_ROUTE}`\nexport const getFormTemplatePath = (templateId: string) =>\n `${FORM_TEMPLATES_PATH}/${templateId}`\n\n// Time to wait after the search input changes before sending a new request\nexport const NAME_SEARCH_DEBOUNCE_DELAY_MS = 500\n\nconst columnHelper = createColumnHelper<FormTemplate>()\n\nconst columns = [\n columnHelper.accessor('name', {\n header: props => <ColumnHeader {...props} title={'Name'} />,\n cell: ({ row, getValue }) =>\n row.original.id ? (\n <Link to={getFormTemplatePath(row.original.id)}>{getValue()}</Link>\n ) : (\n getValue()\n ),\n enableColumnFilter: false,\n }),\n columnHelper.accessor('versionNumber', {\n header: props => <ColumnHeader {...props} title={'Version'} />,\n enableColumnFilter: false,\n }),\n columnHelper.accessor('deprecated', {\n header: props => <ColumnHeader {...props} title={'Status'} />,\n cell: ({ getValue }) =>\n getValue() ? <Chip label={'Deprecated'} size={'small'} /> : null,\n enableColumnFilter: false,\n }),\n]\n\nexport function FormTemplateTable() {\n const navigate = useNavigate()\n const [name, setName] = useDebouncedState<string>(\n '',\n NAME_SEARCH_DEBOUNCE_DELAY_MS,\n )\n const [includeDeprecated, setIncludeDeprecated] = useState(false)\n\n const request = useMemo(\n () => ({ name: name || undefined, includeDeprecated }),\n [name, includeDeprecated],\n )\n const {\n data,\n isLoading,\n error,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage,\n } = useSearchFormTemplatesInfinite(request, {\n // keepPreviousData avoids a flicker when the request changes\n placeholderData: keepPreviousData,\n })\n\n const templates = useMemo(\n () => data?.pages.flatMap(page => page.results ?? []) ?? [],\n [data],\n )\n\n const table = useReactTable<FormTemplate>({\n data: templates,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getRowId: row => row.id ?? '',\n })\n\n const errorAlert = error && (\n <Alert severity={'error'}>\n <strong>Sorry, we couldn&apos;t load the form templates.</strong>\n <br />\n {error.reason}\n </Alert>\n )\n\n let content\n if (isLoading) {\n content = <Skeleton variant={'rectangular'} height={200} />\n } else if (error && !data) {\n content = errorAlert\n } else if (templates.length === 0) {\n content = (\n <Typography variant={'body1'} sx={{ textAlign: 'center', my: 2 }}>\n No form templates found.\n </Typography>\n )\n } else {\n content = (\n <>\n <StyledTanStackTable\n table={table}\n styledTableContainerProps={{ sx: { my: 2 } }}\n />\n {/* A failed \"Load more\" keeps the loaded rows; clicking \"Load more\" again retries */}\n {errorAlert}\n {hasNextPage && (\n <Button\n variant={'outlined'}\n disabled={isFetchingNextPage}\n onClick={() => void fetchNextPage()}\n >\n Load more\n </Button>\n )}\n </>\n )\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: 'flex',\n // The text field's label sits above its input, so align to the bottom to line up with the input\n alignItems: 'flex-end',\n gap: 2,\n flexWrap: 'wrap',\n mb: 2,\n }}\n >\n <TextField\n label={'Filter by template name'}\n type={'text'}\n size={'small'}\n onChange={e => setName(e.target.value)}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position={'end'}>\n <SearchOutlined />\n </InputAdornment>\n ),\n },\n }}\n sx={{ minWidth: 300 }}\n />\n <FormControlLabel\n label={'Include deprecated'}\n // Drop the inherited bottom margin so the switch lines up with the input\n sx={{ mb: 0 }}\n control={\n <Switch\n // The hidden input's default margin overflows the switch and scrolls it when checked\n sx={{ '& .MuiSwitch-input': { m: 0 } }}\n checked={includeDeprecated}\n onChange={e => setIncludeDeprecated(e.target.checked)}\n />\n }\n />\n <Button\n variant={'contained'}\n sx={{ ml: 'auto' }}\n onClick={() => void navigate(NEW_FORM_TEMPLATE_PATH)}\n >\n Create template\n </Button>\n </Box>\n {content}\n </Box>\n )\n}\n\nexport default FormTemplateTable\n"],"mappings":";;;;;;;;;;;;AA2BA,IAAa,IAAuB,iBACvB,IAA0B,GAAG,EAAqB,OAClD,IAAsB,GAAG,EAAqB,eAC9C,IAAsB,IAAI,KAC1B,IAAyB,IAAI,KAC7B,KAAuB,MAClC,GAAG,EAAoB,GAAG,KAGf,IAAgC,KAEvC,IAAe,EAAiC,GAEhD,IAAU;CACd,EAAa,SAAS,QAAQ;EAC5B,SAAQ,MAAS,kBAAC,GAAD;GAAc,GAAI;GAAO,OAAO;EAAS,CAAA;EAC1D,OAAO,EAAE,QAAK,kBACZ,EAAI,SAAS,KACX,kBAAC,GAAD;GAAM,IAAI,EAAoB,EAAI,SAAS,EAAE;aAAI,EAAS;EAAQ,CAAA,IAElE,EAAS;EAEb,oBAAoB;CACtB,CAAC;CACD,EAAa,SAAS,iBAAiB;EACrC,SAAQ,MAAS,kBAAC,GAAD;GAAc,GAAI;GAAO,OAAO;EAAY,CAAA;EAC7D,oBAAoB;CACtB,CAAC;CACD,EAAa,SAAS,cAAc;EAClC,SAAQ,MAAS,kBAAC,GAAD;GAAc,GAAI;GAAO,OAAO;EAAW,CAAA;EAC5D,OAAO,EAAE,kBACP,EAAS,IAAI,kBAAC,GAAD;GAAM,OAAO;GAAc,MAAM;EAAU,CAAA,IAAI;EAC9D,oBAAoB;CACtB,CAAC;AACH;AAEA,SAAgB,IAAoB;CAClC,IAAM,IAAW,EAAY,GACvB,CAAC,GAAM,KAAW,EACtB,IAAA,GAEF,GACM,CAAC,GAAmB,KAAwB,EAAS,EAAK,GAM1D,EACJ,SACA,cACA,UACA,gBACA,kBACA,0BACE,EAXY,SACP;EAAE,MAAM,KAAQ,KAAA;EAAW;CAAkB,IACpD,CAAC,GAAM,CAAiB,CASS,GAAS,EAE1C,iBAAiB,EACnB,CAAC,GAEK,IAAY,QACV,GAAM,MAAM,SAAQ,MAAQ,EAAK,WAAW,CAAC,CAAC,KAAK,CAAC,GAC1D,CAAC,CAAI,CACP,GAEM,IAAQ,EAA4B;EACxC,MAAM;EACN;EACA,iBAAiB,EAAgB;EACjC,WAAU,MAAO,EAAI,MAAM;CAC7B,CAAC,GAEK,IAAa,KACjB,kBAAC,GAAD;EAAO,UAAU;YAAjB;GACE,kBAAC,UAAD,EAAA,UAAQ,8CAAwD,CAAA;GAChE,kBAAC,MAAD,CAAK,CAAA;GACJ,EAAM;EACF;KAGL;CAiCJ,OAhCA,AAWE,IAXE,IACQ,kBAAC,GAAD;EAAU,SAAS;EAAe,QAAQ;CAAM,CAAA,IACjD,KAAS,CAAC,IACT,IACD,EAAU,WAAW,IAE5B,kBAAC,GAAD;EAAY,SAAS;EAAS,IAAI;GAAE,WAAW;GAAU,IAAI;EAAE;YAAG;CAEtD,CAAA,IAIZ,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,GAAD;GACS;GACP,2BAA2B,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;EAC5C,CAAA;EAEA;EACA,KACC,kBAAC,GAAD;GACE,SAAS;GACT,UAAU;GACV,eAAe,KAAK,EAAc;aACnC;EAEO,CAAA;CAEV,EAAA,CAAA,GAKJ,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GAET,YAAY;GACZ,KAAK;GACL,UAAU;GACV,IAAI;EACN;YARF;GAUE,kBAAC,GAAD;IACE,OAAO;IACP,MAAM;IACN,MAAM;IACN,WAAU,MAAK,EAAQ,EAAE,OAAO,KAAK;IACrC,WAAW,EACT,OAAO,EACL,cACE,kBAAC,GAAD;KAAgB,UAAU;eACxB,kBAAC,GAAD,CAAiB,CAAA;IACH,CAAA,EAEpB,EACF;IACA,IAAI,EAAE,UAAU,IAAI;GACrB,CAAA;GACD,kBAAC,GAAD;IACE,OAAO;IAEP,IAAI,EAAE,IAAI,EAAE;IACZ,SACE,kBAAC,GAAD;KAEE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,EAAE;KACrC,SAAS;KACT,WAAU,MAAK,EAAqB,EAAE,OAAO,OAAO;IACrD,CAAA;GAEJ,CAAA;GACD,kBAAC,GAAD;IACE,SAAS;IACT,IAAI,EAAE,IAAI,OAAO;IACjB,eAAe,KAAK,EAAS,CAAsB;cACpD;GAEO,CAAA;EACL;KACJ,CACE,EAAA,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewerDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/ReviewerDashboard.tsx"],"names":[],"mappings":"AAuCA,KAAK,sBAAsB,GAAG;IAC5B,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,wGAAwG;IACxG,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAgH9D;AAUD,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"ReviewerDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/ReviewerDashboard.tsx"],"names":[],"mappings":"AAsDA,KAAK,sBAAsB,GAAG;IAC5B,iGAAiG;IACjG,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,wGAAwG;IACxG,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAoJ9D;AAUD,eAAe,iBAAiB,CAAA"}