synapse-react-client 4.0.41 → 4.0.43
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.
- package/dist/SWC.index.js +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +6 -20
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js +165 -159
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts +3 -2
- package/dist/components/AccessRequirementList/AccessRequirementListItem.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListItem.js +23 -22
- package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListUtils.d.ts +4 -3
- package/dist/components/AccessRequirementList/AccessRequirementListUtils.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListUtils.js +6 -4
- package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/JsonSchemaRequestWizard.d.ts +22 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/JsonSchemaRequestWizard.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/JsonSchemaRequestWizard.js +166 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/JsonSchemaRequestWizard.js.map +1 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/RequesterInformationFields.d.ts +18 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/RequesterInformationFields.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/RequesterInformationFields.js +91 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/RequesterInformationFields.js.map +1 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/requesterInformation.d.ts +33 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/requesterInformation.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/requesterInformation.js +49 -0
- package/dist/components/AccessRequirementList/JsonSchemaAccessRequirementRequestFlow/requesterInformation.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts +7 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +30 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js +26 -42
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +97 -218
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts +13 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js +60 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +8 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +177 -78
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts +4 -3
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +15 -15
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +3 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +88 -103
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js +50 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js +14 -30
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/{ManagedACTAccessRequirementItem.d.ts → RequestableAccessRequirementItem.d.ts} +9 -8
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestableAccessRequirementItem.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/{ManagedACTAccessRequirementItem.js → RequestableAccessRequirementItem.js} +16 -16
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestableAccessRequirementItem.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/{ManagedACTAccessRequirementItemView.d.ts → RequestableAccessRequirementItemView.d.ts} +8 -7
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestableAccessRequirementItemView.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/{ManagedACTAccessRequirementItemView.js → RequestableAccessRequirementItemView.js} +3 -4
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestableAccessRequirementItemView.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +123 -170
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +2 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +35 -51
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +3 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +107 -91
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js +51 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js +24 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.js +0 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts +22 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js +32 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js.map +1 -0
- package/dist/components/AccessRequirementList/RequestDataStep.d.ts +34 -0
- package/dist/components/AccessRequirementList/RequestDataStep.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/RequestDataStep.js +37 -0
- package/dist/components/AccessRequirementList/RequestDataStep.js.map +1 -0
- package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.d.ts +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.js +20 -20
- package/dist/components/Authentication/TwoFactorBackupCodes.js +1 -1
- package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js +79 -69
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +244 -246
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/components/GridLoadingState.d.ts +23 -0
- package/dist/components/DataGrid/components/GridLoadingState.d.ts.map +1 -0
- package/dist/components/DataGrid/components/GridLoadingState.js +64 -0
- package/dist/components/DataGrid/components/GridLoadingState.js.map +1 -0
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +30 -29
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts +60 -6
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.js +71 -60
- package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
- package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts +11 -0
- package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts.map +1 -0
- package/dist/components/DataGrid/utils/getNamedColumnIndices.js +8 -0
- package/dist/components/DataGrid/utils/getNamedColumnIndices.js.map +1 -0
- package/dist/components/FilePreview/FileHandleContentRenderer.d.ts +6 -2
- package/dist/components/FilePreview/FileHandleContentRenderer.d.ts.map +1 -1
- package/dist/components/FilePreview/FileHandleContentRenderer.js +27 -14
- package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
- package/dist/components/FilePreview/PdfPreview.d.ts +1 -1
- package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
- package/dist/components/FilePreview/PdfPreview.js +15 -16
- package/dist/components/FilePreview/PdfPreview.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +71 -68
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.css +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts +17 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.js +88 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.module.js +5 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.module.scss +12 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts +19 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js +115 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.css +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts +9 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js +18 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js +5 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss +4 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts +21 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.js +108 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts +10 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.js +31 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts +15 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +234 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FormTemplatePreview.js +29 -41
- package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.d.ts +25 -0
- package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/StepCard.js +203 -0
- package/dist/components/FormTemplateEditor/StepCard.js.map +1 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts +34 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.js +128 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts +19 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +78 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -0
- package/dist/components/FormTemplateEditor/dragHandle.css +1 -0
- package/dist/components/FormTemplateEditor/dragHandle.module.js +8 -0
- package/dist/components/FormTemplateEditor/dragHandle.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/dragHandle.module.scss +22 -0
- package/dist/components/FormTemplateEditor/dropTarget.css +1 -0
- package/dist/components/FormTemplateEditor/dropTarget.module.js +5 -0
- package/dist/components/FormTemplateEditor/dropTarget.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/dropTarget.module.scss +14 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts +48 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.js +126 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.js.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts +35 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.js +35 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.js.map +1 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +3 -1
- package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js +26 -8
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
- package/dist/components/FormTemplateEditor/sortableIds.d.ts +23 -0
- package/dist/components/FormTemplateEditor/sortableIds.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/sortableIds.js +24 -0
- package/dist/components/FormTemplateEditor/sortableIds.js.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts +33 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.js +59 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.js.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts +9 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.js +66 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.js.map +1 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +34 -19
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -1
- package/dist/components/FormTemplateEditor/utils.d.ts +2 -2
- package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/utils.js +7 -10
- package/dist/components/FormTemplateEditor/utils.js.map +1 -1
- package/dist/components/JsonSchemaForm/SchemaStepForm.d.ts +21 -0
- package/dist/components/JsonSchemaForm/SchemaStepForm.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm/SchemaStepForm.js +29 -0
- package/dist/components/JsonSchemaForm/SchemaStepForm.js.map +1 -0
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts +11 -0
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.js +28 -19
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts +1 -0
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.js +102 -105
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.js +6 -6
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.js +88 -81
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +7 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +2 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.js +24 -20
- package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -1
- package/dist/components/QueryBuilder/queryBuilderDrag.module.js +2 -2
- package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +1 -1
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +16 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderMetadata.js +13 -5
- package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts +18 -0
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -0
- package/dist/components/QueryBuilder/useQBValueDisplayName.js +64 -0
- package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -0
- package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.d.ts +2 -2
- package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.d.ts.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js +11 -10
- package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
- package/dist/components/SynapseForm/SynapseForm.js +28 -28
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +6 -6
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts +1 -0
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +13 -11
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
- package/dist/components/SynapseTable/SearchV2.js +4 -4
- package/dist/components/ToastMessage/ToastMessage.d.ts.map +1 -1
- package/dist/components/ToastMessage/ToastMessage.js +25 -22
- package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
- package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts +7 -0
- package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts.map +1 -0
- package/dist/components/dataaccess/FormTemplateEditorRoute.js +26 -0
- package/dist/components/dataaccess/FormTemplateEditorRoute.js.map +1 -0
- package/dist/components/dataaccess/FormTemplateTable.d.ts +10 -0
- package/dist/components/dataaccess/FormTemplateTable.d.ts.map +1 -0
- package/dist/components/dataaccess/FormTemplateTable.js +124 -0
- package/dist/components/dataaccess/FormTemplateTable.js.map +1 -0
- package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
- package/dist/components/dataaccess/ReviewerDashboard.js +80 -50
- package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +7 -4
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +5 -4
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
- package/dist/components/widgets/FileHandleLink.d.ts +12 -2
- package/dist/components/widgets/FileHandleLink.d.ts.map +1 -1
- package/dist/components/widgets/FileHandleLink.js +25 -29
- package/dist/components/widgets/FileHandleLink.js.map +1 -1
- package/dist/features/curator/dashboard/CuratorDashboardRouter.d.ts.map +1 -1
- package/dist/features/curator/dashboard/CuratorDashboardRouter.js +15 -15
- package/dist/features/curator/dashboard/CuratorDashboardRouter.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js +15 -14
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +2 -0
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.js +8 -2
- package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +7 -0
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +30 -15
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.js +17 -31
- package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
- package/dist/mocks/dataaccess/MockDataAccessRequest.d.ts +3 -0
- package/dist/mocks/dataaccess/MockDataAccessRequest.d.ts.map +1 -1
- package/dist/mocks/dataaccess/MockDataAccessRequest.js +24 -12
- package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
- package/dist/mocks/msw/handlers/authHandlers.d.ts +1 -0
- package/dist/mocks/msw/handlers/authHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/authHandlers.js +6 -2
- package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts +2 -0
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +65 -47
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.js +25 -21
- package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +2 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.js +18 -18
- package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.d.ts +8 -0
- package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.js +20 -3
- package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts +8 -0
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js +19 -0
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js.map +1 -0
- package/dist/style/abstracts/_cssVariables.scss +13 -0
- package/dist/style/components/_toasts.scss +10 -1
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +8 -1
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +17 -4
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/auth/index.d.ts +1 -0
- package/dist/synapse-queries/auth/index.d.ts.map +1 -1
- package/dist/synapse-queries/auth/index.js +2 -1
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts +11 -0
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts.map +1 -0
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +19 -0
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -0
- package/dist/synapse-queries/dataaccess/index.js +5 -5
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts +18 -0
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +33 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useGeneratedRequestForm.d.ts +19 -0
- package/dist/synapse-queries/dataaccess/useGeneratedRequestForm.d.ts.map +1 -0
- package/dist/synapse-queries/dataaccess/useGeneratedRequestForm.js +26 -0
- package/dist/synapse-queries/dataaccess/useGeneratedRequestForm.js.map +1 -0
- package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
- package/dist/synapse-queries/file/useFileHandle.d.ts +8 -0
- package/dist/synapse-queries/file/useFileHandle.d.ts.map +1 -1
- package/dist/synapse-queries/file/useFileHandle.js +15 -6
- package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
- package/dist/synapse-queries/index.js +260 -253
- package/dist/synapse-queries/jsonschema/index.js +2 -2
- package/dist/synapse-queries/jsonschema/useSchema.d.ts +5 -0
- package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -1
- package/dist/synapse-queries/jsonschema/useSchema.js +9 -1
- package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts +1 -0
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js +2 -2
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
- package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/functions/toPascalCase.d.ts +6 -0
- package/dist/utils/functions/toPascalCase.d.ts.map +1 -0
- package/dist/utils/functions/toPascalCase.js +8 -0
- package/dist/utils/functions/toPascalCase.js.map +1 -0
- package/dist/utils/hooks/useDetectSSOCode.d.ts.map +1 -1
- package/dist/utils/hooks/useDetectSSOCode.js +31 -26
- package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
- package/dist/utils/jsonschema/schemaData.d.ts +18 -0
- package/dist/utils/jsonschema/schemaData.d.ts.map +1 -0
- package/dist/utils/jsonschema/schemaData.js +26 -0
- package/dist/utils/jsonschema/schemaData.js.map +1 -0
- package/dist/utils/jsonschema/submissionContext.d.ts +5 -0
- package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -1
- package/dist/utils/jsonschema/submissionContext.js +22 -30
- package/dist/utils/jsonschema/submissionContext.js.map +1 -1
- package/package.json +10 -9
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.d.ts.map +0 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +0 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts.map +0 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridWebsocket.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useDataGridWebsocket.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,iBAAiB,EAClB,MAAM,qCAAqC,CAAA;AAI5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB;;;;;OAKG;IACH,uBAAuB,EAAE,OAAO,CAAA;IAChC;;;;;OAKG;IACH,uBAAuB,EAAE,OAAO,CAAA;IAChC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC3C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;CACxB;AAGD,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,mBAAmB,CAAA;IACzB,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CACrE,GACD;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,SAAS,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAGjD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,GACtB,cAAc,CAyGhB;AAED,eAAO,MAAM,qBAAqB,EAAE,cAYnC,CAAA;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAClD,OAAO,CAOT;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAA;CACnC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAyD1D,MAAM,aAAa,MAAM;;;;EAuIxC"}
|
|
@@ -15,6 +15,7 @@ function l(e, t) {
|
|
|
15
15
|
sessionId: t.payload.sessionId
|
|
16
16
|
},
|
|
17
17
|
hasCompletedInitialSync: n ? e.hasCompletedInitialSync : !1,
|
|
18
|
+
hasCompletedInitialLoad: n ? e.hasCompletedInitialLoad : !1,
|
|
18
19
|
isSyncing: !1,
|
|
19
20
|
model: n ? e.model : null,
|
|
20
21
|
isConnected: !1,
|
|
@@ -37,12 +38,17 @@ function l(e, t) {
|
|
|
37
38
|
...e,
|
|
38
39
|
isConnected: !1,
|
|
39
40
|
isConnecting: !1,
|
|
40
|
-
isSyncing: !1
|
|
41
|
+
isSyncing: !1,
|
|
42
|
+
hasCompletedInitialSync: e.hasCompletedInitialLoad ? e.hasCompletedInitialSync : !1
|
|
41
43
|
};
|
|
42
44
|
case "GRID_READY": return {
|
|
43
45
|
...e,
|
|
44
46
|
hasCompletedInitialSync: !0
|
|
45
47
|
};
|
|
48
|
+
case "INITIAL_LOAD_COMPLETE": return {
|
|
49
|
+
...e,
|
|
50
|
+
hasCompletedInitialLoad: !0
|
|
51
|
+
};
|
|
46
52
|
case "SYNC_STARTED": return {
|
|
47
53
|
...e,
|
|
48
54
|
isSyncing: !0
|
|
@@ -70,6 +76,7 @@ function l(e, t) {
|
|
|
70
76
|
var u = {
|
|
71
77
|
model: null,
|
|
72
78
|
hasCompletedInitialSync: !1,
|
|
79
|
+
hasCompletedInitialLoad: !1,
|
|
73
80
|
isSyncing: !1,
|
|
74
81
|
isConnected: !1,
|
|
75
82
|
isConnecting: !1,
|
|
@@ -79,35 +86,43 @@ var u = {
|
|
|
79
86
|
connectionError: null,
|
|
80
87
|
websocketError: null
|
|
81
88
|
};
|
|
82
|
-
function d(
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
function d(e, t) {
|
|
90
|
+
if (!e?.api.getSnapshot() || !t) return !1;
|
|
91
|
+
let { columnNames: n, columnOrder: r, rows: i } = t, a = n.length >= 1, o = r.length >= 1, s = i.length >= 0;
|
|
92
|
+
return a && o && s;
|
|
93
|
+
}
|
|
94
|
+
function f(e, t) {
|
|
95
|
+
return !e.hasCompletedInitialLoad && e.hasCompletedInitialSync && !e.isSyncing && d(e.model, t);
|
|
96
|
+
}
|
|
97
|
+
function p(d) {
|
|
98
|
+
let [p, m] = o(l, u), h = s(0), g = s(null), _ = t(p.model), v = c(), { mutateAsync: y, isPending: b, error: x, presignedUrl: S, reset: C, clearPresignedUrl: w } = e(), T = r((e) => {
|
|
99
|
+
m({
|
|
85
100
|
type: "MODEL_CREATED",
|
|
86
101
|
payload: e
|
|
87
102
|
});
|
|
88
|
-
}, [
|
|
103
|
+
}, [m]), E = a(() => ({
|
|
89
104
|
onGridReady: () => {
|
|
90
|
-
|
|
105
|
+
m({ type: "GRID_READY" }), d?.onGridReady?.();
|
|
91
106
|
},
|
|
92
|
-
onStatusChange: (e) =>
|
|
93
|
-
onModelCreate:
|
|
107
|
+
onStatusChange: (e) => m({ type: e ? "CONNECTION_OPENED" : "CONNECTION_CLOSED" }),
|
|
108
|
+
onModelCreate: T,
|
|
94
109
|
onReplicaConnected: d?.onReplicaConnected,
|
|
95
110
|
onReplicaDisconnected: d?.onReplicaDisconnected,
|
|
96
|
-
onSyncStart: () =>
|
|
97
|
-
onSyncEnd: () =>
|
|
98
|
-
onError: (e) =>
|
|
111
|
+
onSyncStart: () => m({ type: "SYNC_STARTED" }),
|
|
112
|
+
onSyncEnd: () => m({ type: "SYNC_ENDED" }),
|
|
113
|
+
onError: (e) => m({
|
|
99
114
|
type: "WEBSOCKET_ERROR",
|
|
100
115
|
payload: n(e)
|
|
101
116
|
})
|
|
102
117
|
}), [
|
|
103
|
-
|
|
118
|
+
T,
|
|
104
119
|
d?.onGridReady,
|
|
105
120
|
d?.onReplicaConnected,
|
|
106
121
|
d?.onReplicaDisconnected
|
|
107
|
-
]),
|
|
108
|
-
|
|
109
|
-
let n =
|
|
110
|
-
|
|
122
|
+
]), D = r((e, t) => {
|
|
123
|
+
C(), (!p.connectionParams || p.connectionParams.replicaId !== e || p.connectionParams.sessionId !== t) && w(), h.current += 1;
|
|
124
|
+
let n = h.current;
|
|
125
|
+
m({
|
|
111
126
|
type: "CONNECT_REQUESTED",
|
|
112
127
|
payload: {
|
|
113
128
|
replicaId: e,
|
|
@@ -116,75 +131,71 @@ function d(d) {
|
|
|
116
131
|
}
|
|
117
132
|
});
|
|
118
133
|
}, [
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
S,
|
|
134
|
+
m,
|
|
135
|
+
p.connectionParams,
|
|
122
136
|
C,
|
|
123
|
-
|
|
137
|
+
w,
|
|
138
|
+
h
|
|
124
139
|
]);
|
|
125
140
|
i(() => {
|
|
126
|
-
let { connectionParams: e, connectionAttemptId: t } =
|
|
127
|
-
!e || t === null ||
|
|
141
|
+
let { connectionParams: e, connectionAttemptId: t } = p;
|
|
142
|
+
!e || t === null || p.isConnected || p.isConnecting || b || x || p.connectionError || !v || (g.current = t, y({
|
|
128
143
|
replicaId: e.replicaId,
|
|
129
144
|
sessionId: e.sessionId,
|
|
130
145
|
websocketOptions: {
|
|
131
|
-
...
|
|
132
|
-
model:
|
|
146
|
+
...E,
|
|
147
|
+
model: p.model
|
|
133
148
|
}
|
|
134
149
|
}).then((e) => {
|
|
135
|
-
if (
|
|
150
|
+
if (g.current !== t) {
|
|
136
151
|
e.disconnect();
|
|
137
152
|
return;
|
|
138
153
|
}
|
|
139
|
-
|
|
154
|
+
m({
|
|
140
155
|
type: "CONNECTION_ESTABLISHED",
|
|
141
156
|
payload: e
|
|
142
157
|
});
|
|
143
158
|
}).catch((e) => {
|
|
144
|
-
|
|
159
|
+
m({
|
|
145
160
|
type: "CONNECTION_ERROR",
|
|
146
161
|
payload: e
|
|
147
162
|
}), console.error("Failed to establish WebSocket", e);
|
|
148
163
|
}));
|
|
149
164
|
}, [
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
y,
|
|
165
|
+
p,
|
|
166
|
+
p.connectionParams,
|
|
167
|
+
p.connectionAttemptId,
|
|
168
|
+
p.isConnected,
|
|
169
|
+
p.isConnecting,
|
|
156
170
|
b,
|
|
157
|
-
|
|
171
|
+
x,
|
|
158
172
|
v,
|
|
159
|
-
|
|
173
|
+
y,
|
|
174
|
+
E
|
|
160
175
|
]);
|
|
161
|
-
let
|
|
162
|
-
i(() => {
|
|
163
|
-
let e =
|
|
164
|
-
e && t && (e.replicaId !== t.replicaId || e.sessionId !== t.sessionId) &&
|
|
165
|
-
}, [
|
|
166
|
-
|
|
167
|
-
}, [
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
presignedUrl: x,
|
|
182
|
-
errorEstablishingWebsocketConnection: f.connectionError ?? b,
|
|
183
|
-
websocketError: f.websocketError,
|
|
184
|
-
hasSufficientData: O(f.model)
|
|
176
|
+
let O = s(null);
|
|
177
|
+
return i(() => {
|
|
178
|
+
let e = O.current, t = p.connectionParams;
|
|
179
|
+
e && t && (e.replicaId !== t.replicaId || e.sessionId !== t.sessionId) && p.websocketInstance?.disconnect(), O.current = t;
|
|
180
|
+
}, [p.connectionParams, p.websocketInstance]), i(() => () => {
|
|
181
|
+
p.websocketInstance?.disconnect(), g.current = null;
|
|
182
|
+
}, [p.websocketInstance]), i(() => {
|
|
183
|
+
f(p, _) && m({ type: "INITIAL_LOAD_COMPLETE" });
|
|
184
|
+
}, [p, _]), {
|
|
185
|
+
isConnected: p.isConnected,
|
|
186
|
+
websocketInstance: p.websocketInstance,
|
|
187
|
+
hasCompletedInitialSync: p.hasCompletedInitialSync,
|
|
188
|
+
hasCompletedInitialLoad: p.hasCompletedInitialLoad,
|
|
189
|
+
isSyncing: p.isSyncing,
|
|
190
|
+
model: p.model,
|
|
191
|
+
modelSnapshot: _,
|
|
192
|
+
connect: D,
|
|
193
|
+
presignedUrl: S,
|
|
194
|
+
errorEstablishingWebsocketConnection: p.connectionError ?? x,
|
|
195
|
+
websocketError: p.websocketError
|
|
185
196
|
};
|
|
186
197
|
}
|
|
187
198
|
//#endregion
|
|
188
|
-
export { u as initialWebSocketState,
|
|
199
|
+
export { u as initialWebSocketState, f as isInitialLoadReady, p as useDataGridWebSocket, l as websocketReducer };
|
|
189
200
|
|
|
190
201
|
//# sourceMappingURL=useDataGridWebsocket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDataGridWebsocket.js","names":["GridModel","useCRDTModelView","normalizeWebsocketError","useCallback","useEffect","useMemo","useReducer","useRef","DataGridWebSocket","useEstablishWebsocketConnection","useDocumentVisibility","WebSocketState","model","hasCompletedInitialSync","isSyncing","isConnected","isConnecting","connectionParams","replicaId","sessionId","websocketInstance","connectionAttemptId","connectionError","websocketError","WebSocketAction","type","payload","attemptId","websocketReducer","state","action","isSameConnection","initialWebSocketState","UseDataGridWebSocketOptions","onGridReady","onReplicaConnected","onReplicaDisconnected","useDataGridWebSocket","options","dispatch","connectionAttemptCounter","activeConnectionAttemptIdRef","modelSnapshot","isDocumentVisible","mutateAsync","establishWebsocketConnection","isPending","isEstablishingWebsocketConnection","error","errorEstablishingWebsocketConnection","presignedUrl","reset","resetEstablishWebsocketConnection","clearPresignedUrl","handleModelCreate","newModel","websocketOptionsWithoutModel","onStatusChange","open","onModelCreate","onSyncStart","onSyncEnd","onError","connect","isDifferentConnection","current","websocketOptions","then","ws","disconnect","catch","err","console","previousConnectionParams","previous","isModelRenderable","api","getSnapshot","columnNames","columnOrder","rows","columnsReady","length","orderReady","rowsReady","hasSufficientData"],"sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"sourcesContent":["import { GridModel } from '@/components/DataGrid/DataGridTypes'\nimport { useCRDTModelView } from '@/components/DataGrid/useCRDTModelView'\nimport { normalizeWebsocketError } from '@/components/DataGrid/utils/normalizeWebsocketError'\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { DataGridWebSocket } from './DataGridWebSocket'\nimport { useEstablishWebsocketConnection } from '@/synapse-queries/grid/useEstablishWebsocketConnection'\nimport { useDocumentVisibility } from '@react-hookz/web'\n\n// State type\ninterface WebSocketState {\n model: GridModel | null\n /**\n * True if the WebSocket has finished the initial sync and can process CRDT updates.\n * Corresponds to the `GRID_READY` action.\n */\n hasCompletedInitialSync: boolean\n /**\n * True while a clock-sync exchange is in progress. Set on every outgoing\n * `synchronize-clock` and cleared on `ResponseComplete`, which the server\n * sends once per exchange to signal \"we're synchronized\" — not per request.\n */\n isSyncing: boolean\n isConnected: boolean\n isConnecting: boolean\n connectionParams: {\n replicaId: number\n sessionId: string\n } | null\n websocketInstance: DataGridWebSocket | null\n connectionAttemptId: number | null\n connectionError: unknown\n websocketError: unknown\n}\n\n// Action types\ntype WebSocketAction =\n | {\n type: 'CONNECT_REQUESTED'\n payload: { replicaId: number; sessionId: string; attemptId: number }\n }\n | { type: 'CONNECTION_ESTABLISHED'; payload: DataGridWebSocket }\n | { type: 'CONNECTION_OPENED' }\n | { type: 'CONNECTION_CLOSED' }\n | { type: 'GRID_READY' }\n | { type: 'SYNC_STARTED' }\n | { type: 'SYNC_ENDED' }\n | { type: 'MODEL_CREATED'; payload: GridModel }\n | { type: 'CONNECTION_ERROR'; payload: unknown }\n | { type: 'WEBSOCKET_ERROR'; payload: unknown }\n\n// Reducer function\nfunction websocketReducer(\n state: WebSocketState,\n action: WebSocketAction,\n): WebSocketState {\n switch (action.type) {\n case 'CONNECT_REQUESTED': {\n const isSameConnection =\n state.connectionParams &&\n state.connectionParams.replicaId === action.payload.replicaId &&\n state.connectionParams.sessionId === action.payload.sessionId\n\n return {\n ...state,\n connectionParams: {\n replicaId: action.payload.replicaId,\n sessionId: action.payload.sessionId,\n },\n hasCompletedInitialSync: isSameConnection\n ? state.hasCompletedInitialSync\n : false,\n isSyncing: false,\n model: isSameConnection ? state.model : null,\n isConnected: false,\n isConnecting: false,\n connectionAttemptId: action.payload.attemptId,\n connectionError: null,\n }\n }\n\n case 'CONNECTION_ESTABLISHED':\n return {\n ...state,\n websocketInstance: action.payload,\n isConnecting: true,\n }\n\n case 'CONNECTION_OPENED':\n return {\n ...state,\n isConnected: true,\n isConnecting: false,\n }\n\n case 'CONNECTION_CLOSED':\n return {\n ...state,\n isConnected: false,\n isConnecting: false,\n isSyncing: false,\n }\n\n case 'GRID_READY':\n return {\n ...state,\n hasCompletedInitialSync: true,\n }\n\n case 'SYNC_STARTED':\n return {\n ...state,\n isSyncing: true,\n }\n\n case 'SYNC_ENDED':\n return {\n ...state,\n isSyncing: false,\n }\n\n case 'MODEL_CREATED':\n return {\n ...state,\n model: action.payload,\n }\n\n case 'CONNECTION_ERROR':\n return {\n ...state,\n connectionError: action.payload,\n isConnecting: false,\n }\n\n case 'WEBSOCKET_ERROR':\n return {\n ...state,\n websocketError: action.payload,\n }\n\n default:\n return state\n }\n}\n\nexport const initialWebSocketState: WebSocketState = {\n model: null,\n hasCompletedInitialSync: false,\n isSyncing: false,\n isConnected: false,\n isConnecting: false,\n connectionParams: null,\n websocketInstance: null,\n connectionAttemptId: null,\n connectionError: null,\n websocketError: null,\n}\n\n/**\n * Custom hook to manage a DataGrid WebSocket connection.\n * Handles:\n * - Fetching presigned URLs via a mutation hook\n * - Instantiating the DataGridWebSocket\n * - Connection status tracking\n * - Reconnection on disconnect\n * - Grid model updates and snapshot tracking\n */\nexport interface UseDataGridWebSocketOptions {\n onGridReady?: () => void\n onReplicaConnected?: () => void\n onReplicaDisconnected?: () => void\n}\n\nexport function useDataGridWebSocket(options?: UseDataGridWebSocketOptions) {\n const [state, dispatch] = useReducer(websocketReducer, initialWebSocketState)\n\n const connectionAttemptCounter = useRef(0)\n const activeConnectionAttemptIdRef = useRef<number | null>(null)\n\n const modelSnapshot = useCRDTModelView(state.model)\n\n const isDocumentVisible = useDocumentVisibility()\n\n const {\n mutateAsync: establishWebsocketConnection,\n isPending: isEstablishingWebsocketConnection,\n error: errorEstablishingWebsocketConnection,\n presignedUrl,\n reset: resetEstablishWebsocketConnection,\n clearPresignedUrl,\n } = useEstablishWebsocketConnection()\n\n // Update model creation handler - only set model, don't reset to null on disconnect\n const handleModelCreate = useCallback(\n (newModel: GridModel) => {\n dispatch({ type: 'MODEL_CREATED', payload: newModel })\n },\n [dispatch],\n )\n\n // Memoize websocket options to prevent unnecessary re-renders (excluding model to avoid circular deps)\n const websocketOptionsWithoutModel = useMemo(\n () => ({\n onGridReady: () => {\n dispatch({ type: 'GRID_READY' })\n options?.onGridReady?.()\n },\n onStatusChange: (open: boolean) =>\n dispatch({ type: open ? 'CONNECTION_OPENED' : 'CONNECTION_CLOSED' }),\n onModelCreate: handleModelCreate,\n onReplicaConnected: options?.onReplicaConnected,\n onReplicaDisconnected: options?.onReplicaDisconnected,\n onSyncStart: () => dispatch({ type: 'SYNC_STARTED' }),\n onSyncEnd: () => dispatch({ type: 'SYNC_ENDED' }),\n onError: (error: unknown) =>\n dispatch({\n type: 'WEBSOCKET_ERROR',\n payload: normalizeWebsocketError(error),\n }),\n }),\n [\n handleModelCreate,\n options?.onGridReady,\n options?.onReplicaConnected,\n options?.onReplicaDisconnected,\n ],\n )\n\n // Initiate (or re-initiate) a connection\n const connect = useCallback(\n (replicaId: number, sessionId: string) => {\n resetEstablishWebsocketConnection()\n\n const isDifferentConnection =\n !state.connectionParams ||\n state.connectionParams.replicaId !== replicaId ||\n state.connectionParams.sessionId !== sessionId\n\n if (isDifferentConnection) {\n clearPresignedUrl()\n }\n\n connectionAttemptCounter.current += 1\n const attemptId = connectionAttemptCounter.current\n\n dispatch({\n type: 'CONNECT_REQUESTED',\n payload: { replicaId, sessionId, attemptId },\n })\n },\n [\n dispatch,\n state.connectionParams,\n resetEstablishWebsocketConnection,\n clearPresignedUrl,\n connectionAttemptCounter,\n ],\n )\n\n /**\n * Establish the WebSocket connection when conditions are met.\n * Uses the current model state at connection time for reconnections to the same session.\n * Note: Changes to `model` alone do NOT trigger reconnection - only changes to connection\n * params, visibility, or connection status will trigger a new connection attempt.\n */\n useEffect(() => {\n // Don't attempt connection if conditions aren't met\n const { connectionParams, connectionAttemptId } = state\n\n if (\n !connectionParams ||\n connectionAttemptId === null ||\n state.isConnected ||\n state.isConnecting ||\n isEstablishingWebsocketConnection ||\n errorEstablishingWebsocketConnection ||\n state.connectionError ||\n !isDocumentVisible\n ) {\n return\n }\n\n activeConnectionAttemptIdRef.current = connectionAttemptId\n\n // Use current model state for reconnections to same session\n // (model may have been created by a previous connection)\n establishWebsocketConnection({\n replicaId: connectionParams.replicaId,\n sessionId: connectionParams.sessionId,\n websocketOptions: {\n ...websocketOptionsWithoutModel,\n model: state.model, // Current model at connection time\n },\n })\n .then(ws => {\n if (activeConnectionAttemptIdRef.current !== connectionAttemptId) {\n ws.disconnect()\n return\n }\n\n dispatch({ type: 'CONNECTION_ESTABLISHED', payload: ws })\n })\n .catch(err => {\n dispatch({ type: 'CONNECTION_ERROR', payload: err })\n console.error('Failed to establish WebSocket', err)\n })\n }, [\n state,\n state.connectionParams,\n state.connectionAttemptId,\n state.isConnected,\n state.isConnecting,\n isEstablishingWebsocketConnection,\n errorEstablishingWebsocketConnection,\n isDocumentVisible,\n establishWebsocketConnection,\n websocketOptionsWithoutModel,\n ])\n\n const previousConnectionParams =\n useRef<WebSocketState['connectionParams']>(null)\n\n useEffect(() => {\n const previous = previousConnectionParams.current\n const current = state.connectionParams\n\n if (\n previous &&\n current &&\n (previous.replicaId !== current.replicaId ||\n previous.sessionId !== current.sessionId)\n ) {\n state.websocketInstance?.disconnect()\n }\n\n previousConnectionParams.current = current\n }, [state.connectionParams, state.websocketInstance])\n\n useEffect(() => {\n return () => {\n state.websocketInstance?.disconnect()\n activeConnectionAttemptIdRef.current = null\n }\n }, [state.websocketInstance])\n\n /**\n * Checks if the model snapshot contains the minimum data required for rendering (columns and rows).\n */\n function isModelRenderable(model: GridModel | null) {\n if (!model?.api.getSnapshot() || !modelSnapshot) {\n return false\n }\n const { columnNames, columnOrder, rows } = modelSnapshot\n const columnsReady = columnNames.length >= 1\n const orderReady = columnOrder.length >= 1\n const rowsReady = rows.length >= 0\n return columnsReady && orderReady && rowsReady\n }\n\n return {\n isConnected: state.isConnected,\n websocketInstance: state.websocketInstance,\n hasCompletedInitialSync: state.hasCompletedInitialSync,\n isSyncing: state.isSyncing,\n model: state.model,\n modelSnapshot,\n connect,\n presignedUrl,\n errorEstablishingWebsocketConnection:\n state.connectionError ?? errorEstablishingWebsocketConnection,\n websocketError: state.websocketError,\n hasSufficientData: isModelRenderable(state.model),\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDataGridWebsocket.js","names":["GridModel","GridModelSnapshot","useCRDTModelView","normalizeWebsocketError","useCallback","useEffect","useMemo","useReducer","useRef","DataGridWebSocket","useEstablishWebsocketConnection","useDocumentVisibility","WebSocketState","model","hasCompletedInitialSync","hasCompletedInitialLoad","isSyncing","isConnected","isConnecting","connectionParams","replicaId","sessionId","websocketInstance","connectionAttemptId","connectionError","websocketError","WebSocketAction","type","payload","attemptId","websocketReducer","state","action","isSameConnection","initialWebSocketState","isModelRenderable","modelSnapshot","api","getSnapshot","columnNames","columnOrder","rows","columnsReady","length","orderReady","rowsReady","isInitialLoadReady","UseDataGridWebSocketOptions","onGridReady","onReplicaConnected","onReplicaDisconnected","useDataGridWebSocket","options","dispatch","connectionAttemptCounter","activeConnectionAttemptIdRef","isDocumentVisible","mutateAsync","establishWebsocketConnection","isPending","isEstablishingWebsocketConnection","error","errorEstablishingWebsocketConnection","presignedUrl","reset","resetEstablishWebsocketConnection","clearPresignedUrl","handleModelCreate","newModel","websocketOptionsWithoutModel","onStatusChange","open","onModelCreate","onSyncStart","onSyncEnd","onError","connect","isDifferentConnection","current","websocketOptions","then","ws","disconnect","catch","err","console","previousConnectionParams","previous"],"sources":["../../../src/components/DataGrid/useDataGridWebsocket.ts"],"sourcesContent":["import {\n GridModel,\n GridModelSnapshot,\n} from '@/components/DataGrid/DataGridTypes'\nimport { useCRDTModelView } from '@/components/DataGrid/useCRDTModelView'\nimport { normalizeWebsocketError } from '@/components/DataGrid/utils/normalizeWebsocketError'\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { DataGridWebSocket } from './DataGridWebSocket'\nimport { useEstablishWebsocketConnection } from '@/synapse-queries/grid/useEstablishWebsocketConnection'\nimport { useDocumentVisibility } from '@react-hookz/web'\n\n// State type\nexport interface WebSocketState {\n model: GridModel | null\n /**\n * True if the WebSocket has finished a sync exchange on the current connection\n * and can process CRDT updates. Set by `GRID_READY`; cleared on disconnect until\n * `hasCompletedInitialLoad` is set, since a drop mid-replay leaves the model\n * holding only part of the server's data.\n */\n hasCompletedInitialSync: boolean\n /**\n * True once the first connection for the current session has finished replaying\n * the server's data into the model. A one-way transition: later sync activity\n * never takes it back to false, and only connecting to a different\n * session/replica resets it.\n */\n hasCompletedInitialLoad: boolean\n /**\n * True while a clock-sync exchange is in progress. Set on every outgoing\n * `synchronize-clock` and cleared on `ResponseComplete`, which the server\n * sends once per exchange to signal \"we're synchronized\" — not per request.\n */\n isSyncing: boolean\n isConnected: boolean\n isConnecting: boolean\n connectionParams: {\n replicaId: number\n sessionId: string\n } | null\n websocketInstance: DataGridWebSocket | null\n connectionAttemptId: number | null\n connectionError: unknown\n websocketError: unknown\n}\n\n// Action types\nexport type WebSocketAction =\n | {\n type: 'CONNECT_REQUESTED'\n payload: { replicaId: number; sessionId: string; attemptId: number }\n }\n | { type: 'CONNECTION_ESTABLISHED'; payload: DataGridWebSocket }\n | { type: 'CONNECTION_OPENED' }\n | { type: 'CONNECTION_CLOSED' }\n | { type: 'GRID_READY' }\n | { type: 'INITIAL_LOAD_COMPLETE' }\n | { type: 'SYNC_STARTED' }\n | { type: 'SYNC_ENDED' }\n | { type: 'MODEL_CREATED'; payload: GridModel }\n | { type: 'CONNECTION_ERROR'; payload: unknown }\n | { type: 'WEBSOCKET_ERROR'; payload: unknown }\n\n// Reducer function\nexport function websocketReducer(\n state: WebSocketState,\n action: WebSocketAction,\n): WebSocketState {\n switch (action.type) {\n case 'CONNECT_REQUESTED': {\n const isSameConnection =\n state.connectionParams &&\n state.connectionParams.replicaId === action.payload.replicaId &&\n state.connectionParams.sessionId === action.payload.sessionId\n\n return {\n ...state,\n connectionParams: {\n replicaId: action.payload.replicaId,\n sessionId: action.payload.sessionId,\n },\n hasCompletedInitialSync: isSameConnection\n ? state.hasCompletedInitialSync\n : false,\n hasCompletedInitialLoad: isSameConnection\n ? state.hasCompletedInitialLoad\n : false,\n isSyncing: false,\n model: isSameConnection ? state.model : null,\n isConnected: false,\n isConnecting: false,\n connectionAttemptId: action.payload.attemptId,\n connectionError: null,\n }\n }\n\n case 'CONNECTION_ESTABLISHED':\n return {\n ...state,\n websocketInstance: action.payload,\n isConnecting: true,\n }\n\n case 'CONNECTION_OPENED':\n return {\n ...state,\n isConnected: true,\n isConnecting: false,\n }\n\n case 'CONNECTION_CLOSED':\n return {\n ...state,\n isConnected: false,\n isConnecting: false,\n isSyncing: false,\n // A drop before the initial load finishes invalidates the completed-exchange\n // signal: the model may hold only the part of the data that arrived so far.\n // Clearing it makes the readiness gate wait for the reconnect's replay\n // instead of latching onto a partially loaded model. Once the load is done,\n // drops are ordinary reconnects and the signal must survive them.\n hasCompletedInitialSync: state.hasCompletedInitialLoad\n ? state.hasCompletedInitialSync\n : false,\n }\n\n case 'GRID_READY':\n return {\n ...state,\n hasCompletedInitialSync: true,\n }\n\n case 'INITIAL_LOAD_COMPLETE':\n return {\n ...state,\n hasCompletedInitialLoad: true,\n }\n\n case 'SYNC_STARTED':\n return {\n ...state,\n isSyncing: true,\n }\n\n case 'SYNC_ENDED':\n return {\n ...state,\n isSyncing: false,\n }\n\n case 'MODEL_CREATED':\n return {\n ...state,\n model: action.payload,\n }\n\n case 'CONNECTION_ERROR':\n return {\n ...state,\n connectionError: action.payload,\n isConnecting: false,\n }\n\n case 'WEBSOCKET_ERROR':\n return {\n ...state,\n websocketError: action.payload,\n }\n\n default:\n return state\n }\n}\n\nexport const initialWebSocketState: WebSocketState = {\n model: null,\n hasCompletedInitialSync: false,\n hasCompletedInitialLoad: false,\n isSyncing: false,\n isConnected: false,\n isConnecting: false,\n connectionParams: null,\n websocketInstance: null,\n connectionAttemptId: null,\n connectionError: null,\n websocketError: null,\n}\n\n/**\n * Checks if the model snapshot contains the minimum data required for rendering (columns and rows).\n */\nfunction isModelRenderable(\n model: GridModel | null,\n modelSnapshot: GridModelSnapshot | null | undefined,\n) {\n if (!model?.api.getSnapshot() || !modelSnapshot) {\n return false\n }\n const { columnNames, columnOrder, rows } = modelSnapshot\n const columnsReady = columnNames.length >= 1\n const orderReady = columnOrder.length >= 1\n const rowsReady = rows.length >= 0\n return columnsReady && orderReady && rowsReady\n}\n\n/**\n * Whether the server has finished replaying its data into the model, so the grid\n * can be shown and edited. Drives the one-way `INITIAL_LOAD_COMPLETE` transition.\n *\n * Returns false once `hasCompletedInitialLoad` is set, so callers can dispatch\n * unconditionally on a true result without re-entering the transition.\n *\n * `hasCompletedInitialSync` alone is not sufficient: the server may complete the\n * snapshot request before the client has fetched and decoded the snapshot, which\n * leaves that flag true while the rows are still arriving. Requiring an idle sync\n * exchange holds the transition until the replay drains.\n */\nexport function isInitialLoadReady(\n state: WebSocketState,\n modelSnapshot: GridModelSnapshot | null | undefined,\n): boolean {\n return (\n !state.hasCompletedInitialLoad &&\n state.hasCompletedInitialSync &&\n !state.isSyncing &&\n isModelRenderable(state.model, modelSnapshot)\n )\n}\n\n/**\n * Custom hook to manage a DataGrid WebSocket connection.\n * Handles:\n * - Fetching presigned URLs via a mutation hook\n * - Instantiating the DataGridWebSocket\n * - Connection status tracking\n * - Reconnection on disconnect\n * - Grid model updates and snapshot tracking\n */\nexport interface UseDataGridWebSocketOptions {\n onGridReady?: () => void\n onReplicaConnected?: () => void\n onReplicaDisconnected?: () => void\n}\n\nexport function useDataGridWebSocket(options?: UseDataGridWebSocketOptions) {\n const [state, dispatch] = useReducer(websocketReducer, initialWebSocketState)\n\n const connectionAttemptCounter = useRef(0)\n const activeConnectionAttemptIdRef = useRef<number | null>(null)\n\n const modelSnapshot = useCRDTModelView(state.model)\n\n const isDocumentVisible = useDocumentVisibility()\n\n const {\n mutateAsync: establishWebsocketConnection,\n isPending: isEstablishingWebsocketConnection,\n error: errorEstablishingWebsocketConnection,\n presignedUrl,\n reset: resetEstablishWebsocketConnection,\n clearPresignedUrl,\n } = useEstablishWebsocketConnection()\n\n // Update model creation handler - only set model, don't reset to null on disconnect\n const handleModelCreate = useCallback(\n (newModel: GridModel) => {\n dispatch({ type: 'MODEL_CREATED', payload: newModel })\n },\n [dispatch],\n )\n\n // Memoize websocket options to prevent unnecessary re-renders (excluding model to avoid circular deps)\n const websocketOptionsWithoutModel = useMemo(\n () => ({\n onGridReady: () => {\n dispatch({ type: 'GRID_READY' })\n options?.onGridReady?.()\n },\n onStatusChange: (open: boolean) =>\n dispatch({ type: open ? 'CONNECTION_OPENED' : 'CONNECTION_CLOSED' }),\n onModelCreate: handleModelCreate,\n onReplicaConnected: options?.onReplicaConnected,\n onReplicaDisconnected: options?.onReplicaDisconnected,\n onSyncStart: () => dispatch({ type: 'SYNC_STARTED' }),\n onSyncEnd: () => dispatch({ type: 'SYNC_ENDED' }),\n onError: (error: unknown) =>\n dispatch({\n type: 'WEBSOCKET_ERROR',\n payload: normalizeWebsocketError(error),\n }),\n }),\n [\n handleModelCreate,\n options?.onGridReady,\n options?.onReplicaConnected,\n options?.onReplicaDisconnected,\n ],\n )\n\n // Initiate (or re-initiate) a connection\n const connect = useCallback(\n (replicaId: number, sessionId: string) => {\n resetEstablishWebsocketConnection()\n\n const isDifferentConnection =\n !state.connectionParams ||\n state.connectionParams.replicaId !== replicaId ||\n state.connectionParams.sessionId !== sessionId\n\n if (isDifferentConnection) {\n clearPresignedUrl()\n }\n\n connectionAttemptCounter.current += 1\n const attemptId = connectionAttemptCounter.current\n\n dispatch({\n type: 'CONNECT_REQUESTED',\n payload: { replicaId, sessionId, attemptId },\n })\n },\n [\n dispatch,\n state.connectionParams,\n resetEstablishWebsocketConnection,\n clearPresignedUrl,\n connectionAttemptCounter,\n ],\n )\n\n /**\n * Establish the WebSocket connection when conditions are met.\n * Uses the current model state at connection time for reconnections to the same session.\n * Note: Changes to `model` alone do NOT trigger reconnection - only changes to connection\n * params, visibility, or connection status will trigger a new connection attempt.\n */\n useEffect(() => {\n // Don't attempt connection if conditions aren't met\n const { connectionParams, connectionAttemptId } = state\n\n if (\n !connectionParams ||\n connectionAttemptId === null ||\n state.isConnected ||\n state.isConnecting ||\n isEstablishingWebsocketConnection ||\n errorEstablishingWebsocketConnection ||\n state.connectionError ||\n !isDocumentVisible\n ) {\n return\n }\n\n activeConnectionAttemptIdRef.current = connectionAttemptId\n\n // Use current model state for reconnections to same session\n // (model may have been created by a previous connection)\n establishWebsocketConnection({\n replicaId: connectionParams.replicaId,\n sessionId: connectionParams.sessionId,\n websocketOptions: {\n ...websocketOptionsWithoutModel,\n model: state.model, // Current model at connection time\n },\n })\n .then(ws => {\n if (activeConnectionAttemptIdRef.current !== connectionAttemptId) {\n ws.disconnect()\n return\n }\n\n dispatch({ type: 'CONNECTION_ESTABLISHED', payload: ws })\n })\n .catch(err => {\n dispatch({ type: 'CONNECTION_ERROR', payload: err })\n console.error('Failed to establish WebSocket', err)\n })\n }, [\n state,\n state.connectionParams,\n state.connectionAttemptId,\n state.isConnected,\n state.isConnecting,\n isEstablishingWebsocketConnection,\n errorEstablishingWebsocketConnection,\n isDocumentVisible,\n establishWebsocketConnection,\n websocketOptionsWithoutModel,\n ])\n\n const previousConnectionParams =\n useRef<WebSocketState['connectionParams']>(null)\n\n useEffect(() => {\n const previous = previousConnectionParams.current\n const current = state.connectionParams\n\n if (\n previous &&\n current &&\n (previous.replicaId !== current.replicaId ||\n previous.sessionId !== current.sessionId)\n ) {\n state.websocketInstance?.disconnect()\n }\n\n previousConnectionParams.current = current\n }, [state.connectionParams, state.websocketInstance])\n\n useEffect(() => {\n return () => {\n state.websocketInstance?.disconnect()\n activeConnectionAttemptIdRef.current = null\n }\n }, [state.websocketInstance])\n\n useEffect(() => {\n if (isInitialLoadReady(state, modelSnapshot)) {\n dispatch({ type: 'INITIAL_LOAD_COMPLETE' })\n }\n }, [state, modelSnapshot])\n\n return {\n isConnected: state.isConnected,\n websocketInstance: state.websocketInstance,\n hasCompletedInitialSync: state.hasCompletedInitialSync,\n hasCompletedInitialLoad: state.hasCompletedInitialLoad,\n isSyncing: state.isSyncing,\n model: state.model,\n modelSnapshot,\n connect,\n presignedUrl,\n errorEstablishingWebsocketConnection:\n state.connectionError ?? errorEstablishingWebsocketConnection,\n websocketError: state.websocketError,\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filters column identity indices down to those that resolve to a name in `columnNames`.
|
|
3
|
+
*
|
|
4
|
+
* A column's header, width, and row data are all resolved through its name, so an index without
|
|
5
|
+
* one cannot be rendered. The hub patches `columnNames` and `columnOrder` independently, and a
|
|
6
|
+
* render can observe the state between those patches: an index whose name has not arrived yet, or
|
|
7
|
+
* one whose name slot has been unset (a json-joy vector reports an unset slot as `undefined`
|
|
8
|
+
* rather than shortening itself).
|
|
9
|
+
*/
|
|
10
|
+
export declare function getNamedColumnIndices(columnNames: string[], columnIndices: number[]): number[];
|
|
11
|
+
//# sourceMappingURL=getNamedColumnIndices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNamedColumnIndices.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/utils/getNamedColumnIndices.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,EAAE,CAEV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNamedColumnIndices.js","names":["getNamedColumnIndices","columnNames","columnIndices","filter","index","Boolean"],"sources":["../../../../src/components/DataGrid/utils/getNamedColumnIndices.ts"],"sourcesContent":["/**\n * Filters column identity indices down to those that resolve to a name in `columnNames`.\n *\n * A column's header, width, and row data are all resolved through its name, so an index without\n * one cannot be rendered. The hub patches `columnNames` and `columnOrder` independently, and a\n * render can observe the state between those patches: an index whose name has not arrived yet, or\n * one whose name slot has been unset (a json-joy vector reports an unset slot as `undefined`\n * rather than shortening itself).\n */\nexport function getNamedColumnIndices(\n columnNames: string[],\n columnIndices: number[],\n): number[] {\n return columnIndices.filter(index => Boolean(columnNames[index]))\n}\n"],"mappings":";AASA,SAAgBA,EACdC,GACAC,GACU;CACV,OAAOA,EAAcC,QAAOC,MAASC,EAAQJ,EAAYG,EAAO;AAClE"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { FileHandle, FileHandleAssociation } from '@sage-bionetworks/synapse-types';
|
|
2
2
|
import { PreviewRendererType } from './PreviewRendererType';
|
|
3
|
-
|
|
3
|
+
type FileHandleContentProps = {
|
|
4
4
|
/** The file handle whose contents should be downloaded and rendered */
|
|
5
5
|
fileHandle: FileHandle;
|
|
6
6
|
/** The association between the file handle and an object which will give the user permission to access the file data */
|
|
7
7
|
fileHandleAssociation: FileHandleAssociation;
|
|
8
|
+
};
|
|
9
|
+
export type FileHandleContentRendererProps = FileHandleContentProps & {
|
|
8
10
|
/** Informs how to render the file data */
|
|
9
11
|
previewType: PreviewRendererType;
|
|
10
12
|
};
|
|
11
13
|
/**
|
|
12
|
-
*
|
|
14
|
+
* Renders the contents of a file handle. Each supported preview type is responsible for retrieving the file data in
|
|
15
|
+
* whichever form it needs.
|
|
13
16
|
* @param props
|
|
14
17
|
* @returns
|
|
15
18
|
*/
|
|
16
19
|
export default function FileHandleContentRenderer(props: FileHandleContentRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
17
21
|
//# sourceMappingURL=FileHandleContentRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHandleContentRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/FilePreview/FileHandleContentRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,UAAU,EACV,qBAAqB,EACtB,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"FileHandleContentRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/FilePreview/FileHandleContentRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,UAAU,EACV,qBAAqB,EACtB,MAAM,iCAAiC,CAAA;AAKxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAI3D,KAAK,sBAAsB,GAAG;IAC5B,uEAAuE;IACvE,UAAU,EAAE,UAAU,CAAA;IACtB,wHAAwH;IACxH,qBAAqB,EAAE,qBAAqB,CAAA;CAC7C,CAAA;AAkCD,MAAM,MAAM,8BAA8B,GAAG,sBAAsB,GAAG;IACpE,0CAA0C;IAC1C,WAAW,EAAE,mBAAmB,CAAA;CACjC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,KAAK,EAAE,8BAA8B,2CA2BtC"}
|
|
@@ -4,25 +4,38 @@ import { useGetPresignedUrlContent as n } from "../../synapse-queries/file/useFi
|
|
|
4
4
|
import r from "./HtmlPreview/HtmlPreview.js";
|
|
5
5
|
import i from "./PdfPreview.js";
|
|
6
6
|
import { PreviewRendererType as a } from "./PreviewRendererType.js";
|
|
7
|
-
import {
|
|
7
|
+
import { useMemo as o } from "react";
|
|
8
|
+
import { Fragment as s, jsx as c } from "react/jsx-runtime";
|
|
8
9
|
//#region src/components/FilePreview/FileHandleContentRenderer.tsx
|
|
9
|
-
var
|
|
10
|
-
function
|
|
11
|
-
let { fileHandle:
|
|
12
|
-
requestedFiles: [
|
|
10
|
+
var l = 30 * e;
|
|
11
|
+
function u(e) {
|
|
12
|
+
let { fileHandle: i, fileHandleAssociation: a } = e, { data: s, isLoading: u } = n(i, o(() => ({
|
|
13
|
+
requestedFiles: [a],
|
|
13
14
|
includePreSignedURLs: !0,
|
|
14
15
|
includeFileHandles: !1,
|
|
15
16
|
includePreviewPreSignedURLs: !1
|
|
16
|
-
},
|
|
17
|
-
return
|
|
18
|
-
rawHtml:
|
|
19
|
-
createdByUserId:
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
}), [a]), l, { throwOnError: !0 });
|
|
18
|
+
return u ? /* @__PURE__ */ c(t, {}) : /* @__PURE__ */ c(r, {
|
|
19
|
+
rawHtml: s,
|
|
20
|
+
createdByUserId: i.createdBy
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function d(e) {
|
|
24
|
+
let { fileHandle: t, fileHandleAssociation: n, previewType: r } = e;
|
|
25
|
+
switch (r) {
|
|
26
|
+
case a.HTML: return /* @__PURE__ */ c(u, {
|
|
27
|
+
fileHandle: t,
|
|
28
|
+
fileHandleAssociation: n
|
|
29
|
+
});
|
|
30
|
+
case a.PDF: return /* @__PURE__ */ c(i, {
|
|
31
|
+
fileHandle: t,
|
|
32
|
+
fileHandleAssociation: n
|
|
33
|
+
});
|
|
34
|
+
case a.NONE: return /* @__PURE__ */ c(s, {});
|
|
35
|
+
default: return console.warn(`Rendering a preview of type ${r} is not supported in Portals`), /* @__PURE__ */ c(s, {});
|
|
36
|
+
}
|
|
24
37
|
}
|
|
25
38
|
//#endregion
|
|
26
|
-
export {
|
|
39
|
+
export { d as default };
|
|
27
40
|
|
|
28
41
|
//# sourceMappingURL=FileHandleContentRenderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHandleContentRenderer.js","names":[],"sources":["../../../src/components/FilePreview/FileHandleContentRenderer.tsx"],"sourcesContent":["import { useGetPresignedUrlContent } from '@/synapse-queries/file/useFiles'\nimport { MB } from '@/utils/SynapseConstants'\nimport {\n BatchFileRequest,\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport HtmlPreview from './HtmlPreview/HtmlPreview'\nimport PdfPreview from './PdfPreview'\nimport { PreviewRendererType } from './PreviewRendererType'\n\nconst MAX_FILE_SIZE = 30 * MB\n\
|
|
1
|
+
{"version":3,"file":"FileHandleContentRenderer.js","names":[],"sources":["../../../src/components/FilePreview/FileHandleContentRenderer.tsx"],"sourcesContent":["import { useGetPresignedUrlContent } from '@/synapse-queries/file/useFiles'\nimport { MB } from '@/utils/SynapseConstants'\nimport {\n BatchFileRequest,\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { useMemo } from 'react'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport HtmlPreview from './HtmlPreview/HtmlPreview'\nimport PdfPreview from './PdfPreview'\nimport { PreviewRendererType } from './PreviewRendererType'\n\nconst MAX_FILE_SIZE = 30 * MB\n\ntype FileHandleContentProps = {\n /** The file handle whose contents should be downloaded and rendered */\n fileHandle: FileHandle\n /** The association between the file handle and an object which will give the user permission to access the file data */\n fileHandleAssociation: FileHandleAssociation\n}\n\n/**\n * Downloads a file handle's contents as text and renders it as sanitized HTML.\n */\nfunction HtmlPreviewLoader(props: FileHandleContentProps) {\n const { fileHandle, fileHandleAssociation } = props\n\n const batchFileRequest: BatchFileRequest = useMemo(\n () => ({\n requestedFiles: [fileHandleAssociation],\n includePreSignedURLs: true,\n includeFileHandles: false,\n includePreviewPreSignedURLs: false,\n }),\n [fileHandleAssociation],\n )\n\n const { data: content, isLoading } = useGetPresignedUrlContent(\n fileHandle,\n batchFileRequest,\n MAX_FILE_SIZE,\n { throwOnError: true },\n )\n\n if (isLoading) {\n return <SynapseSpinner />\n }\n\n return (\n <HtmlPreview rawHtml={content!} createdByUserId={fileHandle.createdBy} />\n )\n}\n\nexport type FileHandleContentRendererProps = FileHandleContentProps & {\n /** Informs how to render the file data */\n previewType: PreviewRendererType\n}\n\n/**\n * Renders the contents of a file handle. Each supported preview type is responsible for retrieving the file data in\n * whichever form it needs.\n * @param props\n * @returns\n */\nexport default function FileHandleContentRenderer(\n props: FileHandleContentRendererProps,\n) {\n const { fileHandle, fileHandleAssociation, previewType } = props\n\n switch (previewType) {\n case PreviewRendererType.HTML:\n return (\n <HtmlPreviewLoader\n fileHandle={fileHandle}\n fileHandleAssociation={fileHandleAssociation}\n />\n )\n case PreviewRendererType.PDF:\n return (\n <PdfPreview\n fileHandle={fileHandle}\n fileHandleAssociation={fileHandleAssociation}\n />\n )\n case PreviewRendererType.NONE:\n return <></>\n default:\n console.warn(\n `Rendering a preview of type ${previewType} is not supported in Portals`,\n )\n return <></>\n }\n}\n"],"mappings":";;;;;;;;;AAaA,IAAM,IAAgB,KAAK;AAY3B,SAAS,EAAkB,GAA+B;CACxD,IAAM,EAAE,eAAY,6BAA0B,GAYxC,EAAE,MAAM,GAAS,iBAAc,EACnC,GAXyC,SAClC;EACL,gBAAgB,CAAC,CAAqB;EACtC,sBAAsB;EACtB,oBAAoB;EACpB,6BAA6B;CAC/B,IACA,CAAC,CAAqB,CAKtB,GACA,GACA,EAAE,cAAc,GAAK,CACvB;CAMA,OAJI,IACK,kBAAC,GAAD,CAAiB,CAAA,IAIxB,kBAAC,GAAD;EAAa,SAAS;EAAU,iBAAiB,EAAW;CAAY,CAAA;AAE5E;AAaA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,0BAAuB,mBAAgB;CAE3D,QAAQ,GAAR;EACE,KAAK,EAAoB,MACvB,OACE,kBAAC,GAAD;GACc;GACW;EACxB,CAAA;EAEL,KAAK,EAAoB,KACvB,OACE,kBAAC,GAAD;GACc;GACW;EACxB,CAAA;EAEL,KAAK,EAAoB,MACvB,OAAO,kBAAA,GAAA,CAAI,CAAA;EACb,SAIE,OAHA,QAAQ,KACN,+BAA+B,EAAY,6BAC7C,GACO,kBAAA,GAAA,CAAI,CAAA;CACf;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfPreview.d.ts","sourceRoot":"","sources":["../../../src/components/FilePreview/PdfPreview.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,qBAAqB,EACtB,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"PdfPreview.d.ts","sourceRoot":"","sources":["../../../src/components/FilePreview/PdfPreview.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,qBAAqB,EACtB,MAAM,iCAAiC,CAAA;AAExC,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,UAAU,CAAA;IACtB,qBAAqB,EAAE,qBAAqB,CAAA;CAC7C,CAAA;AAED,eAAO,MAAM,UAAU,QAAyB,CAAA;AAGhD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAK,EAAE,eAAe,2CAwCxD"}
|
|
@@ -1,40 +1,39 @@
|
|
|
1
1
|
import { calculateFriendlyFileSize as e } from "../../utils/functions/calculateFriendlyFileSize.js";
|
|
2
|
-
import t from "../../synapse-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
2
|
+
import { useGetStablePresignedUrl as t } from "../../synapse-queries/file/useFiles.js";
|
|
3
|
+
import { Alert as n, Skeleton as r } from "@mui/material";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
5
|
//#region src/components/FilePreview/PdfPreview.tsx
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
let { fileHandle:
|
|
10
|
-
return
|
|
6
|
+
var o = 1024 ** 2 * 30, s = e(o);
|
|
7
|
+
function c(c) {
|
|
8
|
+
let { fileHandle: l, fileHandleAssociation: u } = c, d = l.contentSize > o, f = t(u, !1, { enabled: !d }), p = f?.dataUrl, m = f?.queryResult.error, h = e(l.contentSize);
|
|
9
|
+
return d ? /* @__PURE__ */ a(n, {
|
|
11
10
|
severity: "error",
|
|
12
11
|
sx: { marginBottom: "20px" },
|
|
13
12
|
children: [
|
|
14
13
|
"The PDF preview was not shown because the file size (",
|
|
15
|
-
|
|
14
|
+
h,
|
|
16
15
|
") exceeds the maximum preview size (",
|
|
17
|
-
|
|
16
|
+
s,
|
|
18
17
|
")"
|
|
19
18
|
]
|
|
20
|
-
}) :
|
|
19
|
+
}) : m ? /* @__PURE__ */ a(n, {
|
|
21
20
|
severity: "error",
|
|
22
21
|
sx: { marginBottom: "20px" },
|
|
23
|
-
children: ["The PDF preview could not be loaded: ",
|
|
24
|
-
}) :
|
|
25
|
-
src:
|
|
22
|
+
children: ["The PDF preview could not be loaded: ", m.message]
|
|
23
|
+
}) : p ? /* @__PURE__ */ i("iframe", {
|
|
24
|
+
src: p,
|
|
26
25
|
height: "800px",
|
|
27
26
|
style: {
|
|
28
27
|
border: 0,
|
|
29
28
|
width: "100%"
|
|
30
29
|
}
|
|
31
|
-
}) : /* @__PURE__ */
|
|
30
|
+
}) : /* @__PURE__ */ i(r, {
|
|
32
31
|
variant: "rectangular",
|
|
33
32
|
width: "100%",
|
|
34
33
|
height: "800px"
|
|
35
34
|
});
|
|
36
35
|
}
|
|
37
36
|
//#endregion
|
|
38
|
-
export {
|
|
37
|
+
export { c as default, o as maxPdfSize };
|
|
39
38
|
|
|
40
39
|
//# sourceMappingURL=PdfPreview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfPreview.js","names":[],"sources":["../../../src/components/FilePreview/PdfPreview.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"PdfPreview.js","names":[],"sources":["../../../src/components/FilePreview/PdfPreview.tsx"],"sourcesContent":["import { useGetStablePresignedUrl } from '@/synapse-queries/file/useFiles'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { Alert, Skeleton } from '@mui/material'\nimport {\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\n\nexport type PdfPreviewProps = {\n fileHandle: FileHandle\n fileHandleAssociation: FileHandleAssociation\n}\n\nexport const maxPdfSize = Math.pow(1024, 2) * 30 // 30MB\nconst friendlyMaxPdfSize = calculateFriendlyFileSize(maxPdfSize) // 30MB\n\n/**\n * Renders a PDF file handle in an iframe.\n * @param props\n * @returns\n */\nexport default function PdfPreview(props: PdfPreviewProps) {\n const { fileHandle, fileHandleAssociation } = props\n\n const exceedsMaxSize = fileHandle.contentSize > maxPdfSize\n\n // The presigned URL is fetched into a blob rather than used as the iframe src directly: Synapse signs the URL with\n // `response-content-disposition=attachment`, which would make the browser download the file instead of rendering it.\n const stablePresignedUrl = useGetStablePresignedUrl(\n fileHandleAssociation,\n false,\n { enabled: !exceedsMaxSize },\n )\n const blobUrl = stablePresignedUrl?.dataUrl\n const blobError = stablePresignedUrl?.queryResult.error\n\n const friendlyFileSize = calculateFriendlyFileSize(fileHandle.contentSize)\n if (exceedsMaxSize) {\n return (\n <Alert severity=\"error\" sx={{ marginBottom: '20px' }}>\n The PDF preview was not shown because the file size ({friendlyFileSize})\n exceeds the maximum preview size ({friendlyMaxPdfSize})\n </Alert>\n )\n }\n\n if (blobError) {\n return (\n <Alert severity=\"error\" sx={{ marginBottom: '20px' }}>\n The PDF preview could not be loaded: {blobError.message}\n </Alert>\n )\n }\n\n if (!blobUrl) {\n return <Skeleton variant=\"rectangular\" width=\"100%\" height=\"800px\" />\n }\n\n return (\n <iframe src={blobUrl} height=\"800px\" style={{ border: 0, width: '100%' }} />\n )\n}\n"],"mappings":";;;;;AAaA,IAAa,IAAsB,QAAM,IAAK,IACxC,IAAqB,EAA0B,CAAU;AAO/D,SAAwB,EAAW,GAAwB;CACzD,IAAM,EAAE,eAAY,6BAA0B,GAExC,IAAiB,EAAW,cAAc,GAI1C,IAAqB,EACzB,GACA,IACA,EAAE,SAAS,CAAC,EAAe,CAC7B,GACM,IAAU,GAAoB,SAC9B,IAAY,GAAoB,YAAY,OAE5C,IAAmB,EAA0B,EAAW,WAAW;CAsBzE,OArBI,IAEA,kBAAC,GAAD;EAAO,UAAS;EAAQ,IAAI,EAAE,cAAc,OAAO;YAAnD;GAAsD;GACE;GAAiB;GACpC;GAAmB;EACjD;MAIP,IAEA,kBAAC,GAAD;EAAO,UAAS;EAAQ,IAAI,EAAE,cAAc,OAAO;YAAnD,CAAsD,yCACd,EAAU,OAC3C;MAIN,IAKH,kBAAC,UAAD;EAAQ,KAAK;EAAS,QAAO;EAAQ,OAAO;GAAE,QAAQ;GAAG,OAAO;EAAO;CAAI,CAAA,IAJpE,kBAAC,GAAD;EAAU,SAAQ;EAAc,OAAM;EAAO,QAAO;CAAS,CAAA;AAMxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldDefinitionDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FieldDefinitionDrawer.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"FieldDefinitionDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/FormTemplateEditor/FieldDefinitionDrawer.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAoB5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,6EAA6E;IAC7E,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB;;;;;;OAMG;IACH,OAAO,EAAE,qBAAqB,CAAA;IAC9B,qFAAqF;IACrF,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACrC,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,eAAe,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAA;IACzD,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,aAAa,EACb,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,QAAQ,GACT,EAAE,0BAA0B,2CA8M5B"}
|