synapse-react-client 4.0.40 → 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 (438) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts +1 -0
  6. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts.map +1 -1
  7. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js +12 -12
  8. package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts +7 -0
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts.map +1 -0
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +30 -0
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -0
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +138 -244
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts +13 -0
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts.map +1 -0
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js +60 -0
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js.map +1 -0
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +8 -2
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +179 -63
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts +2 -0
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +13 -13
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts +3 -2
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts.map +1 -1
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +3 -2
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts +12 -0
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts.map +1 -0
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js +50 -0
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js.map +1 -0
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +112 -143
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +4 -2
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -1
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +8 -7
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -1
  45. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +3 -2
  46. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
  47. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +79 -47
  48. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
  49. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts +12 -0
  50. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts.map +1 -0
  51. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js +51 -0
  52. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js.map +1 -0
  53. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts +12 -0
  54. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts.map +1 -0
  55. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js +24 -0
  56. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js.map +1 -0
  57. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +11 -0
  58. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -0
  59. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.js +0 -0
  60. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts +22 -0
  61. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts.map +1 -0
  62. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js +32 -0
  63. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js.map +1 -0
  64. package/dist/components/AclEditor/AclEditor.js +20 -20
  65. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  66. package/dist/components/Aridhia/AridhiaAccessStatus.js +51 -48
  67. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  68. package/dist/components/Authentication/Constants.d.ts +4 -0
  69. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  70. package/dist/components/Authentication/Constants.js +5 -2
  71. package/dist/components/Authentication/Constants.js.map +1 -1
  72. package/dist/components/Authentication/RecoveryCodeGrid.d.ts.map +1 -1
  73. package/dist/components/Authentication/RecoveryCodeGrid.js +8 -1
  74. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  75. package/dist/components/Authentication/RegenerateBackupCodesWarning.js +4 -1
  76. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  77. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  78. package/dist/components/Authentication/TOTPForm.js +20 -18
  79. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  80. package/dist/components/Authentication/TwoFactorBackupCodes.d.ts.map +1 -1
  81. package/dist/components/Authentication/TwoFactorBackupCodes.js +41 -12
  82. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  83. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  84. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +90 -77
  85. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  86. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  87. package/dist/components/DataGrid/SynapseGrid.js +244 -246
  88. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  89. package/dist/components/DataGrid/components/GridLoadingState.d.ts +23 -0
  90. package/dist/components/DataGrid/components/GridLoadingState.d.ts.map +1 -0
  91. package/dist/components/DataGrid/components/GridLoadingState.js +64 -0
  92. package/dist/components/DataGrid/components/GridLoadingState.js.map +1 -0
  93. package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
  94. package/dist/components/DataGrid/components/ReorderColumnsDialog.js +52 -54
  95. package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
  96. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +60 -6
  97. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  98. package/dist/components/DataGrid/useDataGridWebsocket.js +71 -60
  99. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  100. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts +11 -0
  101. package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts.map +1 -0
  102. package/dist/components/DataGrid/utils/getNamedColumnIndices.js +8 -0
  103. package/dist/components/DataGrid/utils/getNamedColumnIndices.js.map +1 -0
  104. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts +6 -2
  105. package/dist/components/FilePreview/FileHandleContentRenderer.d.ts.map +1 -1
  106. package/dist/components/FilePreview/FileHandleContentRenderer.js +27 -14
  107. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  108. package/dist/components/FilePreview/PdfPreview.d.ts +1 -1
  109. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  110. package/dist/components/FilePreview/PdfPreview.js +15 -16
  111. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  112. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts +11 -0
  113. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -0
  114. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +61 -0
  115. package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -0
  116. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts +33 -0
  117. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -0
  118. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +190 -0
  119. package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -0
  120. package/dist/components/FormTemplateEditor/FieldLibrary.css +1 -0
  121. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts +17 -0
  122. package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -0
  123. package/dist/components/FormTemplateEditor/FieldLibrary.js +88 -0
  124. package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -0
  125. package/dist/components/FormTemplateEditor/FieldLibrary.module.js +5 -0
  126. package/dist/components/FormTemplateEditor/FieldLibrary.module.js.map +1 -0
  127. package/dist/components/FormTemplateEditor/FieldLibrary.module.scss +12 -0
  128. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts +19 -0
  129. package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts.map +1 -0
  130. package/dist/components/FormTemplateEditor/FieldLibraryRow.js +115 -0
  131. package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -0
  132. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.css +1 -0
  133. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts +9 -0
  134. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts.map +1 -0
  135. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js +18 -0
  136. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js.map +1 -0
  137. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js +5 -0
  138. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js.map +1 -0
  139. package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss +4 -0
  140. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts +21 -0
  141. package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts.map +1 -0
  142. package/dist/components/FormTemplateEditor/FormStructurePanel.js +108 -0
  143. package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -0
  144. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts +10 -0
  145. package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts.map +1 -0
  146. package/dist/components/FormTemplateEditor/FormTemplateEditor.js +31 -0
  147. package/dist/components/FormTemplateEditor/FormTemplateEditor.js.map +1 -0
  148. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts +15 -0
  149. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts.map +1 -0
  150. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +234 -0
  151. package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -0
  152. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts +14 -0
  153. package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -0
  154. package/dist/components/FormTemplateEditor/FormTemplatePreview.js +72 -0
  155. package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -0
  156. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts +13 -0
  157. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts.map +1 -0
  158. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js +33 -0
  159. package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js.map +1 -0
  160. package/dist/components/FormTemplateEditor/StepCard.d.ts +25 -0
  161. package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -0
  162. package/dist/components/FormTemplateEditor/StepCard.js +203 -0
  163. package/dist/components/FormTemplateEditor/StepCard.js.map +1 -0
  164. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts +34 -0
  165. package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -0
  166. package/dist/components/FormTemplateEditor/StepFieldRow.js +128 -0
  167. package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -0
  168. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts +19 -0
  169. package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -0
  170. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +78 -0
  171. package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -0
  172. package/dist/components/FormTemplateEditor/dragHandle.css +1 -0
  173. package/dist/components/FormTemplateEditor/dragHandle.module.js +8 -0
  174. package/dist/components/FormTemplateEditor/dragHandle.module.js.map +1 -0
  175. package/dist/components/FormTemplateEditor/dragHandle.module.scss +22 -0
  176. package/dist/components/FormTemplateEditor/dropTarget.css +1 -0
  177. package/dist/components/FormTemplateEditor/dropTarget.module.js +5 -0
  178. package/dist/components/FormTemplateEditor/dropTarget.module.js.map +1 -0
  179. package/dist/components/FormTemplateEditor/dropTarget.module.scss +14 -0
  180. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts +48 -0
  181. package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts.map +1 -0
  182. package/dist/components/FormTemplateEditor/formTemplateDraftState.js +126 -0
  183. package/dist/components/FormTemplateEditor/formTemplateDraftState.js.map +1 -0
  184. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts +35 -0
  185. package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts.map +1 -0
  186. package/dist/components/FormTemplateEditor/formTemplateSchema.js +35 -0
  187. package/dist/components/FormTemplateEditor/formTemplateSchema.js.map +1 -0
  188. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts +32 -0
  189. package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts.map +1 -0
  190. package/dist/components/FormTemplateEditor/formTemplateValidation.js +75 -0
  191. package/dist/components/FormTemplateEditor/formTemplateValidation.js.map +1 -0
  192. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +27 -0
  193. package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -0
  194. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +84 -0
  195. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -0
  196. package/dist/components/FormTemplateEditor/sortableIds.d.ts +23 -0
  197. package/dist/components/FormTemplateEditor/sortableIds.d.ts.map +1 -0
  198. package/dist/components/FormTemplateEditor/sortableIds.js +24 -0
  199. package/dist/components/FormTemplateEditor/sortableIds.js.map +1 -0
  200. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts +33 -0
  201. package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts.map +1 -0
  202. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js +59 -0
  203. package/dist/components/FormTemplateEditor/useFormTemplateDraft.js.map +1 -0
  204. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts +9 -0
  205. package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts.map +1 -0
  206. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js +66 -0
  207. package/dist/components/FormTemplateEditor/useFormTemplateDrag.js.map +1 -0
  208. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts +28 -0
  209. package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -0
  210. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +54 -0
  211. package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -0
  212. package/dist/components/FormTemplateEditor/utils.d.ts +21 -0
  213. package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -0
  214. package/dist/components/FormTemplateEditor/utils.js +24 -0
  215. package/dist/components/FormTemplateEditor/utils.js.map +1 -0
  216. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +1 -1
  217. package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
  218. package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -1
  219. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +1 -1
  220. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -1
  221. package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +6 -1
  222. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
  223. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +4 -0
  224. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  225. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts +11 -0
  226. package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts.map +1 -1
  227. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js +28 -19
  228. package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
  229. package/dist/components/QueryBuilder/FilterConditionRow.css +1 -1
  230. package/dist/components/QueryBuilder/FilterConditionRow.d.ts +3 -0
  231. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  232. package/dist/components/QueryBuilder/FilterConditionRow.js +123 -123
  233. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  234. package/dist/components/QueryBuilder/FilterConditionRow.module.js +10 -11
  235. package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -1
  236. package/dist/components/QueryBuilder/FilterConditionRow.module.scss +0 -5
  237. package/dist/components/QueryBuilder/FilterGroupNode.css +1 -1
  238. package/dist/components/QueryBuilder/FilterGroupNode.d.ts +4 -0
  239. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
  240. package/dist/components/QueryBuilder/FilterGroupNode.js +85 -51
  241. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
  242. package/dist/components/QueryBuilder/FilterGroupNode.module.js +10 -9
  243. package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -1
  244. package/dist/components/QueryBuilder/FilterGroupNode.module.scss +9 -0
  245. package/dist/components/QueryBuilder/QBDragHandle.d.ts +10 -0
  246. package/dist/components/QueryBuilder/QBDragHandle.d.ts.map +1 -0
  247. package/dist/components/QueryBuilder/QBDragHandle.js +22 -0
  248. package/dist/components/QueryBuilder/QBDragHandle.js.map +1 -0
  249. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  250. package/dist/components/QueryBuilder/QueryBuilderControls.js +120 -108
  251. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  252. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +7 -0
  253. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  254. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  255. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +2 -1
  256. package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -1
  257. package/dist/components/QueryBuilder/qbTreeToReadable.js +25 -21
  258. package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -1
  259. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts +27 -0
  260. package/dist/components/QueryBuilder/queryBuilderDnd.d.ts.map +1 -0
  261. package/dist/components/QueryBuilder/queryBuilderDnd.js +41 -0
  262. package/dist/components/QueryBuilder/queryBuilderDnd.js.map +1 -0
  263. package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -0
  264. package/dist/components/QueryBuilder/queryBuilderDrag.module.js +8 -0
  265. package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -0
  266. package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +12 -0
  267. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +16 -0
  268. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  269. package/dist/components/QueryBuilder/queryBuilderMetadata.js +13 -5
  270. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  271. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +13 -0
  272. package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -1
  273. package/dist/components/QueryBuilder/queryBuilderOperations.js +39 -36
  274. package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -1
  275. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts +18 -0
  276. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -0
  277. package/dist/components/QueryBuilder/useQBValueDisplayName.js +64 -0
  278. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -0
  279. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  280. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +46 -47
  281. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  282. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +6 -6
  283. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts +1 -0
  284. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts.map +1 -1
  285. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +13 -11
  286. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
  287. package/dist/components/SynapseTable/SearchV2.js +4 -4
  288. package/dist/components/ToastMessage/ToastMessage.d.ts.map +1 -1
  289. package/dist/components/ToastMessage/ToastMessage.js +25 -22
  290. package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
  291. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts +7 -0
  292. package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts.map +1 -0
  293. package/dist/components/dataaccess/FormTemplateEditorRoute.js +26 -0
  294. package/dist/components/dataaccess/FormTemplateEditorRoute.js.map +1 -0
  295. package/dist/components/dataaccess/FormTemplateTable.d.ts +10 -0
  296. package/dist/components/dataaccess/FormTemplateTable.d.ts.map +1 -0
  297. package/dist/components/dataaccess/FormTemplateTable.js +124 -0
  298. package/dist/components/dataaccess/FormTemplateTable.js.map +1 -0
  299. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  300. package/dist/components/dataaccess/ReviewerDashboard.js +80 -50
  301. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  302. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
  303. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -0
  304. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
  305. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
  306. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  307. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +35 -36
  308. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  309. package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
  310. package/dist/components/styled/LeftRightPanel.js +19 -2
  311. package/dist/components/styled/LeftRightPanel.js.map +1 -1
  312. package/dist/components/widgets/FileHandleLink.d.ts +12 -2
  313. package/dist/components/widgets/FileHandleLink.d.ts.map +1 -1
  314. package/dist/components/widgets/FileHandleLink.js +25 -29
  315. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  316. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +4 -2
  317. package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
  318. package/dist/mocks/accessRequirement/mockFormTemplates.js +13 -14
  319. package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
  320. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +4 -1
  321. package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
  322. package/dist/mocks/accessRequirement/mockJsonSchemas.js +24 -17
  323. package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
  324. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +41 -14
  325. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  326. package/dist/mocks/msw/handlers/asyncJobHandlers.js +53 -44
  327. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  328. package/dist/mocks/msw/handlers/authHandlers.d.ts +1 -0
  329. package/dist/mocks/msw/handlers/authHandlers.d.ts.map +1 -1
  330. package/dist/mocks/msw/handlers/authHandlers.js +6 -2
  331. package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
  332. package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
  333. package/dist/mocks/msw/handlers/chatHandlers.js +19 -13
  334. package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
  335. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts +2 -0
  336. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  337. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +52 -46
  338. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  339. package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
  340. package/dist/mocks/msw/handlers/fileHandlers.js +25 -21
  341. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  342. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +2 -1
  343. package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -1
  344. package/dist/mocks/msw/handlers/formTemplateHandlers.js +18 -18
  345. package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -1
  346. package/dist/mocks/msw/handlers/schemaHandlers.d.ts +10 -1
  347. package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
  348. package/dist/mocks/msw/handlers/schemaHandlers.js +30 -7
  349. package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
  350. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  351. package/dist/mocks/msw/handlers/searchQueryHandlers.js +24 -18
  352. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  353. package/dist/mocks/msw/handlers/tableQueryHandlers.d.ts.map +1 -1
  354. package/dist/mocks/msw/handlers/tableQueryHandlers.js +35 -16
  355. package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
  356. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts +8 -0
  357. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts.map +1 -0
  358. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js +19 -0
  359. package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js.map +1 -0
  360. package/dist/style/abstracts/_cssVariables.scss +13 -0
  361. package/dist/style/components/_toasts.scss +10 -1
  362. package/dist/style/main.css +1 -1
  363. package/dist/synapse-queries/KeyFactory.d.ts +9 -3
  364. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  365. package/dist/synapse-queries/KeyFactory.js +17 -7
  366. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  367. package/dist/synapse-queries/auth/index.d.ts +1 -0
  368. package/dist/synapse-queries/auth/index.d.ts.map +1 -1
  369. package/dist/synapse-queries/auth/index.js +2 -1
  370. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts +11 -0
  371. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts.map +1 -0
  372. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +19 -0
  373. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -0
  374. package/dist/synapse-queries/dataaccess/index.d.ts +0 -1
  375. package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
  376. package/dist/synapse-queries/dataaccess/index.js +3 -4
  377. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +18 -0
  378. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  379. package/dist/synapse-queries/dataaccess/useEDuc.js +33 -1
  380. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  381. package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
  382. package/dist/synapse-queries/file/useFileHandle.d.ts +8 -0
  383. package/dist/synapse-queries/file/useFileHandle.d.ts.map +1 -1
  384. package/dist/synapse-queries/file/useFileHandle.js +15 -6
  385. package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
  386. package/dist/synapse-queries/index.js +260 -257
  387. package/dist/synapse-queries/jsonschema/index.js +2 -2
  388. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +9 -0
  389. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -0
  390. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +22 -0
  391. package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -0
  392. package/dist/synapse-queries/jsonschema/useSchema.d.ts +5 -0
  393. package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -1
  394. package/dist/synapse-queries/jsonschema/useSchema.js +9 -1
  395. package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -1
  396. package/dist/testutils/vitest.setup.js +18 -9
  397. package/dist/testutils/vitest.setup.js.map +1 -1
  398. package/dist/tsconfig.build.tsbuildinfo +1 -1
  399. package/dist/utils/APIConstants.d.ts +2 -0
  400. package/dist/utils/APIConstants.d.ts.map +1 -1
  401. package/dist/utils/APIConstants.js +2 -2
  402. package/dist/utils/APIConstants.js.map +1 -1
  403. package/dist/utils/appendFinalQueryParamKey.d.ts.map +1 -1
  404. package/dist/utils/appendFinalQueryParamKey.js +4 -1
  405. package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
  406. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -0
  407. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  408. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  409. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  410. package/dist/utils/functions/ArrayUtils.d.ts +3 -0
  411. package/dist/utils/functions/ArrayUtils.d.ts.map +1 -1
  412. package/dist/utils/functions/ArrayUtils.js +7 -1
  413. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  414. package/dist/utils/functions/toPascalCase.d.ts +6 -0
  415. package/dist/utils/functions/toPascalCase.d.ts.map +1 -0
  416. package/dist/utils/functions/toPascalCase.js +8 -0
  417. package/dist/utils/functions/toPascalCase.js.map +1 -0
  418. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts +26 -0
  419. package/dist/utils/jsonschema/generateDataAccessSchema.d.ts.map +1 -0
  420. package/dist/utils/jsonschema/generateDataAccessSchema.js +28 -0
  421. package/dist/utils/jsonschema/generateDataAccessSchema.js.map +1 -0
  422. package/dist/utils/jsonschema/submissionContext.d.ts +91 -0
  423. package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -0
  424. package/dist/utils/jsonschema/submissionContext.js +178 -0
  425. package/dist/utils/jsonschema/submissionContext.js.map +1 -0
  426. package/package.json +13 -10
  427. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts +0 -6
  428. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts.map +0 -1
  429. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +0 -32
  430. package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +0 -1
  431. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts +0 -9
  432. package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts.map +0 -1
  433. package/dist/components/entity/page/title_bar/TitleBarProperties.js +0 -24
  434. package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +0 -1
  435. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts +0 -21
  436. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts.map +0 -1
  437. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js +0 -34
  438. package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js.map +0 -1
@@ -35,16 +35,15 @@ import { CustomControls as T } from "../SynapseTable/CustomControls/CustomContro
35
35
  import E from "../widgets/facet-nav/PlotsContainer.js";
36
36
  import { defaultQBGroup as D, hasCompleteCondition as O } from "../QueryBuilder/queryBuilderOperations.js";
37
37
  import { qbNodeToApiFilter as ee, selectedFacetsToQBGroup as te } from "../QueryBuilder/queryBuilderTranslation.js";
38
- import { QueryBuilderControls as ne } from "../QueryBuilder/QueryBuilderControls.js";
39
- import { Suspense as k, createElement as A, useMemo as j, useState as M } from "react";
40
- import { Box as re } from "@mui/material";
41
- import { jsx as N, jsxs as ie } from "react/jsx-runtime";
42
- import { useQuery as ae } from "@tanstack/react-query";
43
- import { useAtomValue as oe } from "jotai";
38
+ import { Suspense as k, createElement as A, lazy as j, useMemo as M, useState as N } from "react";
39
+ import { Box as ne } from "@mui/material";
40
+ import { jsx as P, jsxs as re } from "react/jsx-runtime";
41
+ import { useQuery as ie } from "@tanstack/react-query";
42
+ import { useAtomValue as ae } from "jotai";
44
43
  //#region src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx
45
- var P = "isShowingFacetFilters", F = "isHidingFacetFilters", I = "hasSelectedRows";
46
- function L(t) {
47
- let { tableConfiguration: n, name: r, cardConfiguration: a, facetsToPlot: l, availableFacets: d, initialExpandedFacetControls: p, hideDownload: v, hideAddToDownloadListMenuItem: A, hideProgrammaticOptionsMenuItem: j, hideQueryCount: L, hideSqlEditorControl: R, hideVisualizationsControl: se, searchConfiguration: z, cavaticaConnectAccountURL: ce, customControls: B, remount: V = () => {}, isFullTextSearchEnabled: le, customPlots: ue, initialLimit: H, initialPlotTypeByFacetColumnName: de, hideTopLevelControls: U, showQueryBuilderControl: fe = !1, defaultShowQueryBuilder: pe = !1 } = t, W = c(), [me, he] = M(!1), [G, K] = M(pe), [q, J] = M(() => D()), [ge, Y] = M(!1), { hasFacetedSelectColumn: X, queryMetadataQueryOptions: _e } = W, { executeQueryRequest: Z } = W, { isLoading: ve, data: ye } = ae(_e), be = () => {
44
+ var oe = j(() => import("../QueryBuilder/QueryBuilderControls.js").then((e) => ({ default: e.QueryBuilderControls }))), F = "isShowingFacetFilters", I = "isHidingFacetFilters", L = "hasSelectedRows";
45
+ function R(t) {
46
+ let { tableConfiguration: n, name: r, cardConfiguration: a, facetsToPlot: l, availableFacets: d, initialExpandedFacetControls: p, hideDownload: v, hideAddToDownloadListMenuItem: A, hideProgrammaticOptionsMenuItem: j, hideQueryCount: M, hideSqlEditorControl: R, hideVisualizationsControl: z, searchConfiguration: B, cavaticaConnectAccountURL: se, customControls: V, remount: H = () => {}, isFullTextSearchEnabled: ce, customPlots: le, initialLimit: ue, initialPlotTypeByFacetColumnName: de, hideTopLevelControls: U, showQueryBuilderControl: fe = !1, defaultShowQueryBuilder: pe = !1 } = t, W = c(), [me, he] = N(!1), [G, K] = N(pe), [q, J] = N(() => D()), [ge, Y] = N(!1), { hasFacetedSelectColumn: X, queryMetadataQueryOptions: _e } = W, { executeQueryRequest: Z } = W, { isLoading: ve, data: ye } = ie(_e), be = () => {
48
47
  let t = W.currentQueryRequest.query.selectedFacets;
49
48
  if (t && t.length > 0) {
50
49
  let n = te(t, ye?.columnModels), r = ee(n);
@@ -77,81 +76,81 @@ function L(t) {
77
76
  return;
78
77
  }
79
78
  Q();
80
- }, Se = oe(f), $ = W.currentQueryRequest, Ce = $?.query.selectedFacets !== void 0 && $.query.selectedFacets.length > 0 || $?.query.additionalFilters !== void 0 && $?.query.additionalFilters.length > 0, we = x();
81
- return /* @__PURE__ */ N(u, { children: (e) => {
79
+ }, Se = ae(f), $ = W.currentQueryRequest, Ce = $?.query.selectedFacets !== void 0 && $.query.selectedFacets.length > 0 || $?.query.additionalFilters !== void 0 && $?.query.additionalFilters.length > 0, we = x();
80
+ return /* @__PURE__ */ P(u, { children: (e) => {
82
81
  if (e === void 0) throw Error("No queryVisualizationContext found when using QueryVisualizationContextConsumer");
83
- return /* @__PURE__ */ N(re, {
84
- className: `QueryWrapperPlotNav ${e.showFacetFilter && !G ? P : F} ${Se ? I : ""} ${U ? "isHidingTopLevelControls" : ""} ${G ? "isShowingQueryBuilder" : ""}`,
82
+ return /* @__PURE__ */ P(ne, {
83
+ className: `QueryWrapperPlotNav ${e.showFacetFilter && !G ? F : I} ${Se ? L : ""} ${U ? "isHidingTopLevelControls" : ""} ${G ? "isShowingQueryBuilder" : ""}`,
85
84
  sx: { "*": { cursor: ve ? "wait" : void 0 } },
86
- children: /* @__PURE__ */ ie(g, { children: [
87
- le ? /* @__PURE__ */ N(S, { ftsConfig: z?.ftsConfig }) : /* @__PURE__ */ N(C, {
88
- ...z,
85
+ children: /* @__PURE__ */ re(g, { children: [
86
+ ce ? /* @__PURE__ */ P(S, { ftsConfig: B?.ftsConfig }) : /* @__PURE__ */ P(C, {
87
+ ...B,
89
88
  queryContext: W,
90
89
  queryVisualizationContext: e
91
90
  }),
92
- /* @__PURE__ */ N(h, {}),
93
- e.showDownloadConfirmation && /* @__PURE__ */ N(s, {
91
+ /* @__PURE__ */ P(h, {}),
92
+ e.showDownloadConfirmation && /* @__PURE__ */ P(s, {
94
93
  addToDownloadListRequest: we,
95
94
  onClose: () => e.setShowDownloadConfirmation(!1)
96
95
  }),
97
- !U && /* @__PURE__ */ N(i, { children: /* @__PURE__ */ N(w, {
96
+ !U && /* @__PURE__ */ P(i, { children: /* @__PURE__ */ P(w, {
98
97
  showColumnSelection: n !== void 0,
99
98
  name: r,
100
99
  hideDownload: v,
101
100
  hideAddToDownloadListMenuItem: A,
102
101
  hideProgrammaticOptionsMenuItem: j,
103
- hideQueryCount: L,
102
+ hideQueryCount: M,
104
103
  hideFacetFilterControl: !X || G,
105
- hideVisualizationsControl: !X || se,
104
+ hideVisualizationsControl: !X || z,
106
105
  hideSqlEditorControl: R,
107
- cavaticaConnectAccountURL: ce,
108
- remount: V,
109
- customControls: B,
106
+ cavaticaConnectAccountURL: se,
107
+ remount: H,
108
+ customControls: V,
110
109
  showQueryBuilderControl: fe,
111
110
  showQueryBuilder: G,
112
111
  onToggleQueryBuilder: xe
113
112
  }) }),
114
- G ? /* @__PURE__ */ N(k, {
113
+ G ? /* @__PURE__ */ P(k, {
115
114
  fallback: null,
116
- children: /* @__PURE__ */ N("div", {
115
+ children: /* @__PURE__ */ P("div", {
117
116
  className: "QueryBuilderControls",
118
- children: /* @__PURE__ */ N(ne, {
117
+ children: /* @__PURE__ */ P(oe, {
119
118
  tree: q,
120
119
  onTreeChange: J
121
120
  })
122
121
  })
123
- }) : X && /* @__PURE__ */ N(b, {
122
+ }) : X && /* @__PURE__ */ P(b, {
124
123
  availableFacets: d,
125
124
  initialExpandedFacetControls: p
126
125
  }),
127
- /* @__PURE__ */ N(k, {
126
+ /* @__PURE__ */ P(k, {
128
127
  fallback: null,
129
- children: /* @__PURE__ */ N(m, {
128
+ children: /* @__PURE__ */ P(m, {
130
129
  frontText: "",
131
130
  endText: Ce ? "filtered by" : "",
132
131
  hideIfUnfiltered: !0
133
132
  })
134
133
  }),
135
- /* @__PURE__ */ N(T, {
136
- customControls: B,
137
- remount: V
134
+ /* @__PURE__ */ P(T, {
135
+ customControls: V,
136
+ remount: H
138
137
  }),
139
- /* @__PURE__ */ N(E, {
138
+ /* @__PURE__ */ P(E, {
140
139
  facetsToPlot: l,
141
- customPlots: ue,
140
+ customPlots: le,
142
141
  initialPlotTypeByFacetColumnName: de
143
142
  }),
144
- /* @__PURE__ */ N(y, {
143
+ /* @__PURE__ */ P(y, {
145
144
  tableConfiguration: n,
146
145
  hideDownload: v,
147
146
  cardConfiguration: a,
148
- initialLimit: H
147
+ initialLimit: ue
149
148
  }),
150
- me && /* @__PURE__ */ N(_, {
149
+ me && /* @__PURE__ */ P(_, {
151
150
  getLastQueryRequest: W?.getCurrentQueryRequest,
152
151
  onClose: () => he(!1)
153
152
  }),
154
- /* @__PURE__ */ N(o, {
153
+ /* @__PURE__ */ P(o, {
155
154
  open: ge,
156
155
  title: "Hide Query Builder?",
157
156
  content: "Hiding the Query Builder will clear the conditions you've built. This can't be undone.",
@@ -169,8 +168,8 @@ function L(t) {
169
168
  });
170
169
  } });
171
170
  }
172
- function R(e) {
173
- let { sql: i, tableConfiguration: o, isInfinite: s = !o, limit: c = 25, showLastUpdatedOn: u, unitDescription: f, additionalFiltersSessionStorageKey: m, helpConfiguration: h, customPlots: g, enabledExternalAnalysisPlatforms: _ } = e, { entityId: y, versionNumber: b } = r(e.query?.sql ?? i ?? ""), x = j(() => e.query ? e.query : e.initQueryJson ? JSON.parse(e.initQueryJson) : {
171
+ function z(e) {
172
+ let { sql: i, tableConfiguration: o, isInfinite: s = !o, limit: c = 25, showLastUpdatedOn: u, unitDescription: f, additionalFiltersSessionStorageKey: m, helpConfiguration: h, customPlots: g, enabledExternalAnalysisPlatforms: _ } = e, { entityId: y, versionNumber: b } = r(e.query?.sql ?? i ?? ""), x = M(() => e.query ? e.query : e.initQueryJson ? JSON.parse(e.initQueryJson) : {
174
173
  sql: i,
175
174
  additionalFilters: n(e.searchParams, e.sqlOperator, m),
176
175
  limit: c,
@@ -183,7 +182,7 @@ function R(e) {
183
182
  m,
184
183
  i,
185
184
  c
186
- ]), [S, C] = M(1), w = () => {
185
+ ]), [S, C] = N(1), w = () => {
187
186
  C(S + 1);
188
187
  }, { data: T } = a(y, b), E = {
189
188
  entityId: y ?? "",
@@ -196,9 +195,9 @@ function R(e) {
196
195
  initQueryRequest: E,
197
196
  key: O,
198
197
  isInfinite: s
199
- }, /* @__PURE__ */ N(k, {
200
- fallback: /* @__PURE__ */ N(v, {}),
201
- children: /* @__PURE__ */ N(d, {
198
+ }, /* @__PURE__ */ P(k, {
199
+ fallback: /* @__PURE__ */ P(v, {}),
200
+ children: /* @__PURE__ */ P(d, {
202
201
  unitDescription: f,
203
202
  rgbIndex: e.rgbIndex,
204
203
  columnAliases: e.columnAliases,
@@ -216,7 +215,7 @@ function R(e) {
216
215
  noContentPlaceholderType: l.INTERACTIVE,
217
216
  hasCustomPlots: Array.isArray(g) && g.length > 0,
218
217
  enabledExternalAnalysisPlatforms: _,
219
- children: /* @__PURE__ */ N(L, {
218
+ children: /* @__PURE__ */ P(R, {
220
219
  ...e,
221
220
  isFullTextSearchEnabled: D,
222
221
  remount: w
@@ -225,6 +224,6 @@ function R(e) {
225
224
  }));
226
225
  }
227
226
  //#endregion
228
- export { I as HAS_SELECTED_ROWS_CSS, F as QUERY_FILTERS_COLLAPSED_CSS, P as QUERY_FILTERS_EXPANDED_CSS, L as QueryWrapperPlotNavContents, R as default };
227
+ export { L as HAS_SELECTED_ROWS_CSS, I as QUERY_FILTERS_COLLAPSED_CSS, F as QUERY_FILTERS_EXPANDED_CSS, R as QueryWrapperPlotNavContents, z as default };
229
228
 
230
229
  //# sourceMappingURL=QueryWrapperPlotNav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryWrapperPlotNav.js","names":[],"sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"sourcesContent":["import { QueryOrDeprecatedSearchParams } from '@/components/CardContainerLogic/CardContainerLogic'\nimport AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport {\n getAdditionalFilters,\n parseEntityIdAndVersionFromSqlStatement,\n} from '@/utils/functions'\nimport { isTable } from '@/utils/functions/EntityTypeUtils'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Box } from '@mui/material'\nimport { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { Suspense, useMemo, useState } from 'react'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport { SynapseErrorBoundary } from '../error'\nimport FullTextSearch from '../FullTextSearch/FullTextSearch'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { QueryWrapperPlotNavCustomPlotParams } from '../Plot/SynapsePlot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryVisualizationContextConsumer,\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport { QueryWrapper, QueryWrapperProps } from '../QueryWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport SearchV2, { SearchV2Props } from '../SynapseTable/SearchV2'\nimport SqlEditor from '../SynapseTable/SqlEditor'\nimport TopLevelControls, {\n TopLevelControlsProps,\n CustomControl,\n} from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { CustomControls } from '../SynapseTable/CustomControls/CustomControls'\nimport TotalQueryResults from '../TotalQueryResults'\nimport PlotsContainer, {\n PlotsContainerProps,\n} from '../widgets/facet-nav/PlotsContainer'\nimport FacetFilterControls, {\n FacetFilterControlsProps,\n} from '../widgets/query-filter/FacetFilterControls'\nimport { QueryBuilderControls } from '../QueryBuilder/QueryBuilderControls'\nimport {\n defaultQBGroup,\n hasCompleteCondition,\n} from '../QueryBuilder/queryBuilderOperations'\nimport {\n qbNodeToApiFilter,\n selectedFacetsToQBGroup,\n} from '../QueryBuilder/queryBuilderTranslation'\nimport { QBGroup } from '../QueryBuilder/QueryBuilderTypes'\nimport { ConfirmationDialog } from '../ConfirmationDialog'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { QueryWrapperSynapsePlotProps } from './QueryWrapperSynapsePlot'\nimport { RowSetView } from './RowSetView'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\n\nexport const QUERY_FILTERS_EXPANDED_CSS: string = 'isShowingFacetFilters'\nexport const QUERY_FILTERS_COLLAPSED_CSS: string = 'isHidingFacetFilters'\n\nexport const HAS_SELECTED_ROWS_CSS: string = 'hasSelectedRows'\n\ntype QueryWrapperPlotNavOwnProps = {\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n /** Set to true when you want the query to be saved in the URL search parameters. If you are controlling the view (such as in PortalSearch), you'll want to set this to false */\n shouldDeepLink?: boolean\n /** If onQueryChange is set, the callback will be invoked when the Query changes */\n onQueryChange?: (newQueryJson: string) => void\n /** If onQueryResultBundleChange is set, the callback will be invoked when the QueryResultBundle changes */\n onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void\n /** If initQueryJson is set, it will be the Query used in the initial QueryBundleRequest */\n initQueryJson?: string\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n searchConfiguration?: Omit<\n SearchV2Props,\n 'queryContext' | 'queryVisualizationContext'\n >\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n customPlots?: QueryWrapperSynapsePlotProps[]\n customControls?: CustomControl[]\n defaultColumn?: string\n defaultShowSearchBox?: boolean\n lockedColumn?: QueryWrapperProps['lockedColumn']\n initialLimit?: number\n hideTopLevelControls?: boolean\n /**\n * When true, shows a `Show / Hide Query Builder` toggle in `TopLevelControls`.\n * The QB and the facet nav are mutually exclusive — turning the QB on hides\n * the facet nav entirely.\n */\n showQueryBuilderControl?: boolean\n /**\n * When true, the QB is shown by default. When `showQueryBuilderControl` is\n * also true, the user can toggle it back off from `TopLevelControls`. When\n * `showQueryBuilderControl` is false the QB is permanently displayed with\n * no toggle button.\n */\n defaultShowQueryBuilder?: boolean\n} & Omit<TopLevelControlsProps, 'entityId'> &\n Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> &\n Pick<\n QueryWrapperProps,\n | 'isRowSelectionVisible'\n | 'rowSelectionPrimaryKey'\n | 'isRowSelectionUIFloating'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n > &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'hiddenColumns'\n | 'columnAliases'\n | 'renderFacetValue'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'additionalFiltersSessionStorageKey'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideSearchBarControl'\n | 'hideVisualizationsControl'\n | 'enabledExternalAnalysisPlatforms'\n | 'lockTextMatchesQueryFilterPill'\n > &\n Pick<QueryContextType, 'combineRangeFacetConfig'>\n\nexport type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams &\n PlotsContainerProps &\n QueryWrapperPlotNavOwnProps\n\nexport type QueryWrapperPlotNavContentsProps = Pick<\n QueryWrapperPlotNavProps,\n | 'tableConfiguration'\n | 'name'\n | 'cardConfiguration'\n | 'facetsToPlot'\n | 'availableFacets'\n | 'initialExpandedFacetControls'\n | 'hideDownload'\n | 'hideAddToDownloadListMenuItem'\n | 'hideProgrammaticOptionsMenuItem'\n | 'hideQueryCount'\n | 'hideSqlEditorControl'\n | 'hideVisualizationsControl'\n | 'searchConfiguration'\n | 'enabledExternalAnalysisPlatforms'\n | 'cavaticaConnectAccountURL'\n | 'customControls'\n | 'customPlots'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n | 'initialLimit'\n | 'initialPlotTypeByFacetColumnName'\n | 'hideTopLevelControls'\n | 'showQueryBuilderControl'\n | 'defaultShowQueryBuilder'\n> & {\n isFullTextSearchEnabled: boolean\n remount?: () => void\n}\n\nexport function QueryWrapperPlotNavContents(\n props: QueryWrapperPlotNavContentsProps,\n) {\n const {\n tableConfiguration,\n name,\n cardConfiguration,\n facetsToPlot,\n availableFacets,\n initialExpandedFacetControls,\n hideDownload,\n hideAddToDownloadListMenuItem,\n hideProgrammaticOptionsMenuItem,\n hideQueryCount,\n hideSqlEditorControl,\n hideVisualizationsControl,\n searchConfiguration,\n cavaticaConnectAccountURL,\n customControls,\n remount = () => {},\n isFullTextSearchEnabled,\n customPlots,\n initialLimit,\n initialPlotTypeByFacetColumnName,\n hideTopLevelControls,\n showQueryBuilderControl = false,\n defaultShowQueryBuilder = false,\n } = props\n const queryContext = useQueryContext()\n const [showExportMetadata, setShowExportMetadata] = useState(false)\n const [showQueryBuilder, setShowQueryBuilder] = useState(\n defaultShowQueryBuilder,\n )\n const [qbTree, setQbTree] = useState<QBGroup>(() => defaultQBGroup())\n const [isConfirmingHideQb, setIsConfirmingHideQb] = useState(false)\n const { hasFacetedSelectColumn: isFaceted, queryMetadataQueryOptions } =\n queryContext\n const { executeQueryRequest } = queryContext\n const { isLoading: isLoadingQueryMetadata, data: queryMetadata } = useQuery(\n queryMetadataQueryOptions,\n )\n\n // Facets ↔ QB transitions: switching FF → QB silently translates\n // selectedFacets into the QB tree and swaps them for a FilterGroup in\n // additionalFilters so results stay stable. Switching QB → FF prompts if\n // the QB has meaningful state (a completed condition or an applied filter),\n // since we can't losslessly reverse the translation.\n const enterQueryBuilder = () => {\n const selectedFacets = queryContext.currentQueryRequest.query.selectedFacets\n if (selectedFacets && selectedFacets.length > 0) {\n const translated = selectedFacetsToQBGroup(\n selectedFacets,\n queryMetadata?.columnModels,\n )\n const asFilter = qbNodeToApiFilter(translated)\n setQbTree(translated)\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n selectedFacets: undefined,\n additionalFilters: asFilter\n ? [\n ...(prev.query.additionalFilters ?? []).filter(\n f => !isFilterGroup(f),\n ),\n asFilter,\n ]\n : prev.query.additionalFilters,\n },\n }))\n }\n setShowQueryBuilder(true)\n }\n\n const exitQueryBuilder = () => {\n setQbTree(defaultQBGroup())\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n additionalFilters: prev.query.additionalFilters?.filter(\n f => !isFilterGroup(f),\n ),\n },\n }))\n setShowQueryBuilder(false)\n }\n\n const handleToggleQueryBuilder = () => {\n if (!showQueryBuilder) {\n enterQueryBuilder()\n return\n }\n const hasFilterGroupApplied =\n queryContext.currentQueryRequest.query.additionalFilters?.some(\n isFilterGroup,\n ) ?? false\n if (hasCompleteCondition(qbTree) || hasFilterGroupApplied) {\n setIsConfirmingHideQb(true)\n return\n }\n exitQueryBuilder()\n }\n\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const currentQueryRequest = queryContext.currentQueryRequest\n\n const hasFacetsOrFilters =\n (currentQueryRequest?.query.selectedFacets !== undefined &&\n currentQueryRequest.query.selectedFacets.length > 0) ||\n (currentQueryRequest?.query.additionalFilters !== undefined &&\n currentQueryRequest?.query.additionalFilters.length > 0)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n return (\n <QueryVisualizationContextConsumer>\n {queryVisualizationContext => {\n if (queryVisualizationContext === undefined) {\n throw new Error(\n 'No queryVisualizationContext found when using QueryVisualizationContextConsumer',\n )\n }\n\n return (\n <Box\n className={`QueryWrapperPlotNav ${\n queryVisualizationContext.showFacetFilter && !showQueryBuilder\n ? QUERY_FILTERS_EXPANDED_CSS\n : QUERY_FILTERS_COLLAPSED_CSS\n } ${isRowSelectionVisible ? HAS_SELECTED_ROWS_CSS : ''} ${\n hideTopLevelControls ? 'isHidingTopLevelControls' : ''\n } ${showQueryBuilder ? 'isShowingQueryBuilder' : ''}`}\n sx={{\n '*': {\n cursor: isLoadingQueryMetadata ? 'wait' : undefined,\n },\n }}\n >\n <QueryWrapperErrorBoundary>\n {isFullTextSearchEnabled ? (\n <FullTextSearch ftsConfig={searchConfiguration?.ftsConfig} />\n ) : (\n <SearchV2\n {...searchConfiguration}\n queryContext={queryContext}\n queryVisualizationContext={queryVisualizationContext}\n />\n )}\n <SqlEditor />\n {queryVisualizationContext.showDownloadConfirmation && (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() =>\n queryVisualizationContext.setShowDownloadConfirmation(false)\n }\n />\n )}\n {!hideTopLevelControls && (\n <SynapseErrorBoundary>\n <TopLevelControls\n showColumnSelection={tableConfiguration !== undefined}\n name={name}\n hideDownload={hideDownload}\n hideAddToDownloadListMenuItem={\n hideAddToDownloadListMenuItem\n }\n hideProgrammaticOptionsMenuItem={\n hideProgrammaticOptionsMenuItem\n }\n hideQueryCount={hideQueryCount}\n hideFacetFilterControl={!isFaceted || showQueryBuilder}\n hideVisualizationsControl={\n !isFaceted || hideVisualizationsControl\n }\n hideSqlEditorControl={hideSqlEditorControl}\n cavaticaConnectAccountURL={cavaticaConnectAccountURL}\n remount={remount}\n customControls={customControls}\n showQueryBuilderControl={showQueryBuilderControl}\n showQueryBuilder={showQueryBuilder}\n onToggleQueryBuilder={handleToggleQueryBuilder}\n />\n </SynapseErrorBoundary>\n )}\n {showQueryBuilder ? (\n <Suspense fallback={null}>\n <div className=\"QueryBuilderControls\">\n <QueryBuilderControls\n tree={qbTree}\n onTreeChange={setQbTree}\n />\n </div>\n </Suspense>\n ) : (\n isFaceted && (\n <FacetFilterControls\n availableFacets={availableFacets}\n initialExpandedFacetControls={initialExpandedFacetControls}\n />\n )\n )}\n {/* Isolated Suspense so that metadata loading does not hide the table */}\n <Suspense fallback={null}>\n <TotalQueryResults\n frontText={''}\n endText={hasFacetsOrFilters ? 'filtered by' : ''}\n hideIfUnfiltered={true}\n />\n </Suspense>\n <CustomControls\n customControls={customControls}\n remount={remount}\n />\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n customPlots={customPlots}\n initialPlotTypeByFacetColumnName={\n initialPlotTypeByFacetColumnName\n }\n />\n <RowSetView\n tableConfiguration={tableConfiguration}\n hideDownload={hideDownload}\n cardConfiguration={cardConfiguration}\n initialLimit={initialLimit}\n />\n {showExportMetadata && (\n <ModalDownload\n getLastQueryRequest={queryContext?.getCurrentQueryRequest}\n onClose={() => setShowExportMetadata(false)}\n />\n )}\n <ConfirmationDialog\n open={isConfirmingHideQb}\n title=\"Hide Query Builder?\"\n content=\"Hiding the Query Builder will clear the conditions you've built. This can't be undone.\"\n confirmButtonProps={{\n children: 'Hide Query Builder',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n setIsConfirmingHideQb(false)\n exitQueryBuilder()\n }}\n onCancel={() => setIsConfirmingHideQb(false)}\n />\n </QueryWrapperErrorBoundary>\n </Box>\n )\n }}\n </QueryVisualizationContextConsumer>\n )\n}\n\nexport default function QueryWrapperPlotNav(props: QueryWrapperPlotNavProps) {\n const {\n sql: deprecatedSql,\n tableConfiguration,\n isInfinite = !tableConfiguration,\n limit = DEFAULT_PAGE_SIZE,\n showLastUpdatedOn,\n unitDescription,\n additionalFiltersSessionStorageKey,\n helpConfiguration,\n customPlots,\n enabledExternalAnalysisPlatforms,\n } = props\n\n const sql = props.query?.sql ?? deprecatedSql ?? ''\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(sql)\n\n const query: Query = useMemo(() => {\n if (props.query) {\n // use query if set\n return props.query\n } else if (props.initQueryJson) {\n // Otherwise use initQueryJson\n return JSON.parse(props.initQueryJson) as Query\n } else {\n // use the deprecated sql, searchParams, and sqlOperator\n const additionalFilters = getAdditionalFilters(\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n return {\n sql: deprecatedSql!,\n additionalFilters,\n limit: limit,\n offset: 0,\n }\n }\n }, [\n props.query,\n props.initQueryJson,\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n deprecatedSql,\n limit,\n ])\n\n const [componentKey, setComponentKey] = useState(1)\n const remount = () => {\n setComponentKey(componentKey + 1)\n }\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n const initQueryRequest: QueryBundleRequest = {\n entityId: entityId ?? '',\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |\n SynapseConstants.BUNDLE_MASK_QUERY_COUNT |\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS |\n SynapseConstants.BUNDLE_MASK_QUERY_FACETS |\n SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES |\n SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON,\n query,\n }\n const isFullTextSearchEnabled =\n (entity && isTable(entity) && entity.isSearchEnabled) ?? false\n\n /**\n * Fully re-render the uncontrolled QueryWrapper component when the initial query changes. This eliminates a class of\n * bugs where our 'derived' state (the current query), which should be reset, is out of sync with props.\n *\n * See https://legacy.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\n */\n const queryWrapperKey = `${JSON.stringify(initQueryRequest)}-${componentKey}`\n\n return (\n <QueryWrapper\n {...props}\n initQueryRequest={initQueryRequest}\n key={queryWrapperKey}\n isInfinite={isInfinite}\n >\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n renderFacetValue={props.renderFacetValue}\n dataUseModifiersColumnName={\n props.cardConfiguration?.genericCardSchema\n ?.dataUseModifiersColumnName\n }\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n hiddenColumns={props.hiddenColumns}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n defaultShowSearchBar={\n (props.defaultShowSearchBox || isFullTextSearchEnabled) &&\n !props.hideSearchBarControl\n }\n lockTextMatchesQueryFilterPill={props.lockTextMatchesQueryFilterPill}\n hideSearchBarControl={props.hideSearchBarControl}\n showLastUpdatedOn={showLastUpdatedOn}\n noContentPlaceholderType={NoContentPlaceholderType.INTERACTIVE}\n hasCustomPlots={Array.isArray(customPlots) && customPlots.length > 0}\n enabledExternalAnalysisPlatforms={enabledExternalAnalysisPlatforms}\n >\n <QueryWrapperPlotNavContents\n {...props}\n isFullTextSearchEnabled={isFullTextSearchEnabled}\n remount={remount}\n />\n </QueryVisualizationWrapper>\n </Suspense>\n </QueryWrapper>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"QueryWrapperPlotNav.js","names":[],"sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"sourcesContent":["import { QueryOrDeprecatedSearchParams } from '@/components/CardContainerLogic/CardContainerLogic'\nimport AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport {\n getAdditionalFilters,\n parseEntityIdAndVersionFromSqlStatement,\n} from '@/utils/functions'\nimport { isTable } from '@/utils/functions/EntityTypeUtils'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Box } from '@mui/material'\nimport { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { lazy, Suspense, useMemo, useState } from 'react'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport { SynapseErrorBoundary } from '../error'\nimport FullTextSearch from '../FullTextSearch/FullTextSearch'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { QueryWrapperPlotNavCustomPlotParams } from '../Plot/SynapsePlot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryVisualizationContextConsumer,\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport { QueryWrapper, QueryWrapperProps } from '../QueryWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport SearchV2, { SearchV2Props } from '../SynapseTable/SearchV2'\nimport SqlEditor from '../SynapseTable/SqlEditor'\nimport TopLevelControls, {\n TopLevelControlsProps,\n CustomControl,\n} from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { CustomControls } from '../SynapseTable/CustomControls/CustomControls'\nimport TotalQueryResults from '../TotalQueryResults'\nimport PlotsContainer, {\n PlotsContainerProps,\n} from '../widgets/facet-nav/PlotsContainer'\nimport FacetFilterControls, {\n FacetFilterControlsProps,\n} from '../widgets/query-filter/FacetFilterControls'\nimport {\n defaultQBGroup,\n hasCompleteCondition,\n} from '../QueryBuilder/queryBuilderOperations'\nimport {\n qbNodeToApiFilter,\n selectedFacetsToQBGroup,\n} from '../QueryBuilder/queryBuilderTranslation'\nimport { QBGroup } from '../QueryBuilder/QueryBuilderTypes'\nimport { ConfirmationDialog } from '../ConfirmationDialog'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { QueryWrapperSynapsePlotProps } from './QueryWrapperSynapsePlot'\nimport { RowSetView } from './RowSetView'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\n\n/**\n * The Query Builder is hidden on every tab that renders this nav until the\n * user opens it, and it pulls in a drag-and-drop library alongside its own\n * panel. Loading it on demand keeps all of that off the critical path for the\n * table and card views. It already renders inside a `Suspense` boundary, so\n * there is nothing else to coordinate.\n *\n * The QB tree helpers imported above stay eager — they are pure functions this\n * component calls from its own handlers, and none of them reach dnd-kit.\n */\nconst QueryBuilderControls = lazy(() =>\n import('../QueryBuilder/QueryBuilderControls').then(module => ({\n default: module.QueryBuilderControls,\n })),\n)\n\nexport const QUERY_FILTERS_EXPANDED_CSS: string = 'isShowingFacetFilters'\nexport const QUERY_FILTERS_COLLAPSED_CSS: string = 'isHidingFacetFilters'\n\nexport const HAS_SELECTED_ROWS_CSS: string = 'hasSelectedRows'\n\ntype QueryWrapperPlotNavOwnProps = {\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n /** Set to true when you want the query to be saved in the URL search parameters. If you are controlling the view (such as in PortalSearch), you'll want to set this to false */\n shouldDeepLink?: boolean\n /** If onQueryChange is set, the callback will be invoked when the Query changes */\n onQueryChange?: (newQueryJson: string) => void\n /** If onQueryResultBundleChange is set, the callback will be invoked when the QueryResultBundle changes */\n onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void\n /** If initQueryJson is set, it will be the Query used in the initial QueryBundleRequest */\n initQueryJson?: string\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n searchConfiguration?: Omit<\n SearchV2Props,\n 'queryContext' | 'queryVisualizationContext'\n >\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n customPlots?: QueryWrapperSynapsePlotProps[]\n customControls?: CustomControl[]\n defaultColumn?: string\n defaultShowSearchBox?: boolean\n lockedColumn?: QueryWrapperProps['lockedColumn']\n initialLimit?: number\n hideTopLevelControls?: boolean\n /**\n * When true, shows a `Show / Hide Query Builder` toggle in `TopLevelControls`.\n * The QB and the facet nav are mutually exclusive — turning the QB on hides\n * the facet nav entirely.\n */\n showQueryBuilderControl?: boolean\n /**\n * When true, the QB is shown by default. When `showQueryBuilderControl` is\n * also true, the user can toggle it back off from `TopLevelControls`. When\n * `showQueryBuilderControl` is false the QB is permanently displayed with\n * no toggle button.\n */\n defaultShowQueryBuilder?: boolean\n} & Omit<TopLevelControlsProps, 'entityId'> &\n Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> &\n Pick<\n QueryWrapperProps,\n | 'isRowSelectionVisible'\n | 'rowSelectionPrimaryKey'\n | 'isRowSelectionUIFloating'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n > &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'hiddenColumns'\n | 'columnAliases'\n | 'renderFacetValue'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'additionalFiltersSessionStorageKey'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideSearchBarControl'\n | 'hideVisualizationsControl'\n | 'enabledExternalAnalysisPlatforms'\n | 'lockTextMatchesQueryFilterPill'\n > &\n Pick<QueryContextType, 'combineRangeFacetConfig'>\n\nexport type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams &\n PlotsContainerProps &\n QueryWrapperPlotNavOwnProps\n\nexport type QueryWrapperPlotNavContentsProps = Pick<\n QueryWrapperPlotNavProps,\n | 'tableConfiguration'\n | 'name'\n | 'cardConfiguration'\n | 'facetsToPlot'\n | 'availableFacets'\n | 'initialExpandedFacetControls'\n | 'hideDownload'\n | 'hideAddToDownloadListMenuItem'\n | 'hideProgrammaticOptionsMenuItem'\n | 'hideQueryCount'\n | 'hideSqlEditorControl'\n | 'hideVisualizationsControl'\n | 'searchConfiguration'\n | 'enabledExternalAnalysisPlatforms'\n | 'cavaticaConnectAccountURL'\n | 'customControls'\n | 'customPlots'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n | 'initialLimit'\n | 'initialPlotTypeByFacetColumnName'\n | 'hideTopLevelControls'\n | 'showQueryBuilderControl'\n | 'defaultShowQueryBuilder'\n> & {\n isFullTextSearchEnabled: boolean\n remount?: () => void\n}\n\nexport function QueryWrapperPlotNavContents(\n props: QueryWrapperPlotNavContentsProps,\n) {\n const {\n tableConfiguration,\n name,\n cardConfiguration,\n facetsToPlot,\n availableFacets,\n initialExpandedFacetControls,\n hideDownload,\n hideAddToDownloadListMenuItem,\n hideProgrammaticOptionsMenuItem,\n hideQueryCount,\n hideSqlEditorControl,\n hideVisualizationsControl,\n searchConfiguration,\n cavaticaConnectAccountURL,\n customControls,\n remount = () => {},\n isFullTextSearchEnabled,\n customPlots,\n initialLimit,\n initialPlotTypeByFacetColumnName,\n hideTopLevelControls,\n showQueryBuilderControl = false,\n defaultShowQueryBuilder = false,\n } = props\n const queryContext = useQueryContext()\n const [showExportMetadata, setShowExportMetadata] = useState(false)\n const [showQueryBuilder, setShowQueryBuilder] = useState(\n defaultShowQueryBuilder,\n )\n const [qbTree, setQbTree] = useState<QBGroup>(() => defaultQBGroup())\n const [isConfirmingHideQb, setIsConfirmingHideQb] = useState(false)\n const { hasFacetedSelectColumn: isFaceted, queryMetadataQueryOptions } =\n queryContext\n const { executeQueryRequest } = queryContext\n const { isLoading: isLoadingQueryMetadata, data: queryMetadata } = useQuery(\n queryMetadataQueryOptions,\n )\n\n // Facets ↔ QB transitions: switching FF → QB silently translates\n // selectedFacets into the QB tree and swaps them for a FilterGroup in\n // additionalFilters so results stay stable. Switching QB → FF prompts if\n // the QB has meaningful state (a completed condition or an applied filter),\n // since we can't losslessly reverse the translation.\n const enterQueryBuilder = () => {\n const selectedFacets = queryContext.currentQueryRequest.query.selectedFacets\n if (selectedFacets && selectedFacets.length > 0) {\n const translated = selectedFacetsToQBGroup(\n selectedFacets,\n queryMetadata?.columnModels,\n )\n const asFilter = qbNodeToApiFilter(translated)\n setQbTree(translated)\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n selectedFacets: undefined,\n additionalFilters: asFilter\n ? [\n ...(prev.query.additionalFilters ?? []).filter(\n f => !isFilterGroup(f),\n ),\n asFilter,\n ]\n : prev.query.additionalFilters,\n },\n }))\n }\n setShowQueryBuilder(true)\n }\n\n const exitQueryBuilder = () => {\n setQbTree(defaultQBGroup())\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n additionalFilters: prev.query.additionalFilters?.filter(\n f => !isFilterGroup(f),\n ),\n },\n }))\n setShowQueryBuilder(false)\n }\n\n const handleToggleQueryBuilder = () => {\n if (!showQueryBuilder) {\n enterQueryBuilder()\n return\n }\n const hasFilterGroupApplied =\n queryContext.currentQueryRequest.query.additionalFilters?.some(\n isFilterGroup,\n ) ?? false\n if (hasCompleteCondition(qbTree) || hasFilterGroupApplied) {\n setIsConfirmingHideQb(true)\n return\n }\n exitQueryBuilder()\n }\n\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const currentQueryRequest = queryContext.currentQueryRequest\n\n const hasFacetsOrFilters =\n (currentQueryRequest?.query.selectedFacets !== undefined &&\n currentQueryRequest.query.selectedFacets.length > 0) ||\n (currentQueryRequest?.query.additionalFilters !== undefined &&\n currentQueryRequest?.query.additionalFilters.length > 0)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n return (\n <QueryVisualizationContextConsumer>\n {queryVisualizationContext => {\n if (queryVisualizationContext === undefined) {\n throw new Error(\n 'No queryVisualizationContext found when using QueryVisualizationContextConsumer',\n )\n }\n\n return (\n <Box\n className={`QueryWrapperPlotNav ${\n queryVisualizationContext.showFacetFilter && !showQueryBuilder\n ? QUERY_FILTERS_EXPANDED_CSS\n : QUERY_FILTERS_COLLAPSED_CSS\n } ${isRowSelectionVisible ? HAS_SELECTED_ROWS_CSS : ''} ${\n hideTopLevelControls ? 'isHidingTopLevelControls' : ''\n } ${showQueryBuilder ? 'isShowingQueryBuilder' : ''}`}\n sx={{\n '*': {\n cursor: isLoadingQueryMetadata ? 'wait' : undefined,\n },\n }}\n >\n <QueryWrapperErrorBoundary>\n {isFullTextSearchEnabled ? (\n <FullTextSearch ftsConfig={searchConfiguration?.ftsConfig} />\n ) : (\n <SearchV2\n {...searchConfiguration}\n queryContext={queryContext}\n queryVisualizationContext={queryVisualizationContext}\n />\n )}\n <SqlEditor />\n {queryVisualizationContext.showDownloadConfirmation && (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() =>\n queryVisualizationContext.setShowDownloadConfirmation(false)\n }\n />\n )}\n {!hideTopLevelControls && (\n <SynapseErrorBoundary>\n <TopLevelControls\n showColumnSelection={tableConfiguration !== undefined}\n name={name}\n hideDownload={hideDownload}\n hideAddToDownloadListMenuItem={\n hideAddToDownloadListMenuItem\n }\n hideProgrammaticOptionsMenuItem={\n hideProgrammaticOptionsMenuItem\n }\n hideQueryCount={hideQueryCount}\n hideFacetFilterControl={!isFaceted || showQueryBuilder}\n hideVisualizationsControl={\n !isFaceted || hideVisualizationsControl\n }\n hideSqlEditorControl={hideSqlEditorControl}\n cavaticaConnectAccountURL={cavaticaConnectAccountURL}\n remount={remount}\n customControls={customControls}\n showQueryBuilderControl={showQueryBuilderControl}\n showQueryBuilder={showQueryBuilder}\n onToggleQueryBuilder={handleToggleQueryBuilder}\n />\n </SynapseErrorBoundary>\n )}\n {showQueryBuilder ? (\n <Suspense fallback={null}>\n <div className=\"QueryBuilderControls\">\n <QueryBuilderControls\n tree={qbTree}\n onTreeChange={setQbTree}\n />\n </div>\n </Suspense>\n ) : (\n isFaceted && (\n <FacetFilterControls\n availableFacets={availableFacets}\n initialExpandedFacetControls={initialExpandedFacetControls}\n />\n )\n )}\n {/* Isolated Suspense so that metadata loading does not hide the table */}\n <Suspense fallback={null}>\n <TotalQueryResults\n frontText={''}\n endText={hasFacetsOrFilters ? 'filtered by' : ''}\n hideIfUnfiltered={true}\n />\n </Suspense>\n <CustomControls\n customControls={customControls}\n remount={remount}\n />\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n customPlots={customPlots}\n initialPlotTypeByFacetColumnName={\n initialPlotTypeByFacetColumnName\n }\n />\n <RowSetView\n tableConfiguration={tableConfiguration}\n hideDownload={hideDownload}\n cardConfiguration={cardConfiguration}\n initialLimit={initialLimit}\n />\n {showExportMetadata && (\n <ModalDownload\n getLastQueryRequest={queryContext?.getCurrentQueryRequest}\n onClose={() => setShowExportMetadata(false)}\n />\n )}\n <ConfirmationDialog\n open={isConfirmingHideQb}\n title=\"Hide Query Builder?\"\n content=\"Hiding the Query Builder will clear the conditions you've built. This can't be undone.\"\n confirmButtonProps={{\n children: 'Hide Query Builder',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n setIsConfirmingHideQb(false)\n exitQueryBuilder()\n }}\n onCancel={() => setIsConfirmingHideQb(false)}\n />\n </QueryWrapperErrorBoundary>\n </Box>\n )\n }}\n </QueryVisualizationContextConsumer>\n )\n}\n\nexport default function QueryWrapperPlotNav(props: QueryWrapperPlotNavProps) {\n const {\n sql: deprecatedSql,\n tableConfiguration,\n isInfinite = !tableConfiguration,\n limit = DEFAULT_PAGE_SIZE,\n showLastUpdatedOn,\n unitDescription,\n additionalFiltersSessionStorageKey,\n helpConfiguration,\n customPlots,\n enabledExternalAnalysisPlatforms,\n } = props\n\n const sql = props.query?.sql ?? deprecatedSql ?? ''\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(sql)\n\n const query: Query = useMemo(() => {\n if (props.query) {\n // use query if set\n return props.query\n } else if (props.initQueryJson) {\n // Otherwise use initQueryJson\n return JSON.parse(props.initQueryJson) as Query\n } else {\n // use the deprecated sql, searchParams, and sqlOperator\n const additionalFilters = getAdditionalFilters(\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n return {\n sql: deprecatedSql!,\n additionalFilters,\n limit: limit,\n offset: 0,\n }\n }\n }, [\n props.query,\n props.initQueryJson,\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n deprecatedSql,\n limit,\n ])\n\n const [componentKey, setComponentKey] = useState(1)\n const remount = () => {\n setComponentKey(componentKey + 1)\n }\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n const initQueryRequest: QueryBundleRequest = {\n entityId: entityId ?? '',\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |\n SynapseConstants.BUNDLE_MASK_QUERY_COUNT |\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS |\n SynapseConstants.BUNDLE_MASK_QUERY_FACETS |\n SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES |\n SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON,\n query,\n }\n const isFullTextSearchEnabled =\n (entity && isTable(entity) && entity.isSearchEnabled) ?? false\n\n /**\n * Fully re-render the uncontrolled QueryWrapper component when the initial query changes. This eliminates a class of\n * bugs where our 'derived' state (the current query), which should be reset, is out of sync with props.\n *\n * See https://legacy.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\n */\n const queryWrapperKey = `${JSON.stringify(initQueryRequest)}-${componentKey}`\n\n return (\n <QueryWrapper\n {...props}\n initQueryRequest={initQueryRequest}\n key={queryWrapperKey}\n isInfinite={isInfinite}\n >\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n renderFacetValue={props.renderFacetValue}\n dataUseModifiersColumnName={\n props.cardConfiguration?.genericCardSchema\n ?.dataUseModifiersColumnName\n }\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n hiddenColumns={props.hiddenColumns}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n defaultShowSearchBar={\n (props.defaultShowSearchBox || isFullTextSearchEnabled) &&\n !props.hideSearchBarControl\n }\n lockTextMatchesQueryFilterPill={props.lockTextMatchesQueryFilterPill}\n hideSearchBarControl={props.hideSearchBarControl}\n showLastUpdatedOn={showLastUpdatedOn}\n noContentPlaceholderType={NoContentPlaceholderType.INTERACTIVE}\n hasCustomPlots={Array.isArray(customPlots) && customPlots.length > 0}\n enabledExternalAnalysisPlatforms={enabledExternalAnalysisPlatforms}\n >\n <QueryWrapperPlotNavContents\n {...props}\n isFullTextSearchEnabled={isFullTextSearchEnabled}\n remount={remount}\n />\n </QueryVisualizationWrapper>\n </Suspense>\n </QueryWrapper>\n )\n}\n"],"mappings":"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"}
@@ -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"}