synapse-react-client 4.0.9 → 4.0.11
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.d.ts +1 -0
- package/dist/SWC.index.d.ts.map +1 -1
- package/dist/SWC.index.js +2 -1
- package/dist/SWC.index.js.map +1 -1
- package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
- package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
- package/dist/assets/icons/CloudWarning.d.ts +5 -0
- package/dist/assets/icons/CloudWarning.d.ts.map +1 -0
- package/dist/assets/icons/CloudWarning.js +47 -0
- package/dist/assets/icons/CloudWarning.js.map +1 -0
- package/dist/assets/icons/TasksIcon.d.ts.map +1 -1
- package/dist/assets/icons/TasksIcon.js +6 -10
- package/dist/assets/icons/TasksIcon.js.map +1 -1
- package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
- package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js +69 -63
- package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
- package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
- package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
- package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
- package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
- package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
- package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
- package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
- package/dist/components/Authentication/AuthenticationMethodSelection.js +38 -37
- package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
- package/dist/components/Authentication/Constants.d.ts +1 -0
- package/dist/components/Authentication/Constants.d.ts.map +1 -1
- package/dist/components/Authentication/Constants.js +2 -2
- package/dist/components/Authentication/Constants.js.map +1 -1
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
- package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
- package/dist/components/Authentication/StandaloneLoginForm.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 +2 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
- package/dist/components/CardContainer/CardContainer.js.map +1 -1
- package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
- package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
- package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.d.ts.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +143 -140
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
- package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
- package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
- package/dist/components/ChangePassword/useChangePasswordFormState.js +1 -1
- package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
- package/dist/components/ComponentCollapse.js.map +1 -1
- package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
- package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
- package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
- package/dist/components/DataGrid/DataGrid.d.ts +0 -1
- package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/DataGrid.js +72 -72
- package/dist/components/DataGrid/DataGrid.js.map +1 -1
- package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
- package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
- package/dist/components/DataGrid/DataGridWebSocket.js +9 -8
- package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +326 -268
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +2 -0
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.js +124 -67
- package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts +2 -1
- package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +126 -122
- package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +58 -0
- package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -0
- package/dist/components/DataGrid/columns/useGridAutocompleteState.js +52 -0
- package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -0
- package/dist/components/DataGrid/components/ValidationAlert.d.ts +5 -2
- package/dist/components/DataGrid/components/ValidationAlert.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ValidationAlert.js +429 -24
- package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
- package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
- package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
- package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts +7 -0
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.js +16 -2
- package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
- package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
- package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.d.ts +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.js +27 -24
- package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.d.ts +8 -0
- package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +47 -44
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
- package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/getCellClassName.js +8 -8
- package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
- package/dist/components/DataGrid/utils/getEmptyValue.d.ts +2 -0
- package/dist/components/DataGrid/utils/getEmptyValue.d.ts.map +1 -0
- package/dist/components/DataGrid/utils/getEmptyValue.js +8 -0
- package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -0
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
- package/dist/components/DataGrid/utils/modelColsToGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/modelColsToGrid.js +2 -1
- package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
- package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
- package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
- package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts +32 -0
- package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts.map +1 -0
- package/dist/components/DataGrid/utils/schemaAwarePasteValue.js +22 -0
- package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -0
- package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
- package/dist/components/DirectDownloadButton.js.map +1 -1
- package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.css +1 -0
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +199 -132
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js +22 -0
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -0
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +170 -0
- package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
- package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
- package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
- package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
- package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
- package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
- package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
- package/dist/components/EntityAclEditor/EntityAclEditor.js +103 -103
- package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
- package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
- package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts.map +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -0
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.d.ts.map +1 -1
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +36 -30
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
- package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
- package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
- package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
- package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
- package/dist/components/EntityForm/EntityForm.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
- package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
- package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
- package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
- package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
- package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.d.ts.map +1 -1
- package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js +15 -14
- package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
- package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
- package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
- package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
- package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
- package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
- package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
- package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
- package/dist/components/Forum/DiscussionReply.d.ts +1 -0
- package/dist/components/Forum/DiscussionReply.d.ts.map +1 -1
- package/dist/components/Forum/DiscussionReply.js +19 -19
- package/dist/components/Forum/DiscussionReply.js.map +1 -1
- package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
- package/dist/components/Forum/DiscussionThread.d.ts +1 -0
- package/dist/components/Forum/DiscussionThread.d.ts.map +1 -1
- package/dist/components/Forum/DiscussionThread.js +73 -72
- package/dist/components/Forum/DiscussionThread.js.map +1 -1
- package/dist/components/Forum/ForumTable.js.map +1 -1
- package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
- package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
- package/dist/components/GenericCard/BioregistryRules.d.ts.map +1 -1
- package/dist/components/GenericCard/BioregistryRules.js +7 -3
- package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
- package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
- package/dist/components/GenericCard/GenericCard.js +12 -7
- package/dist/components/GenericCard/GenericCard.js.map +1 -1
- package/dist/components/GenericCard/Linkify.js.map +1 -1
- package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +105 -105
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/Goals/Goals.Mobile.js.map +1 -1
- package/dist/components/Goals/Goals.js.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
- package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
- package/dist/components/HasAccess/AccessIcon.js.map +1 -1
- package/dist/components/HasAccess/useHasAccess.js.map +1 -1
- package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
- package/dist/components/HeaderCard.d.ts +6 -1
- package/dist/components/HeaderCard.d.ts.map +1 -1
- package/dist/components/HeaderCard.js +107 -76
- package/dist/components/HeaderCard.js.map +1 -1
- package/dist/components/HexGrid/HexGrid.js.map +1 -1
- package/dist/components/IconList.js.map +1 -1
- package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
- package/dist/components/IconSvg/IconSvg.js +2 -1
- package/dist/components/IconSvg/IconSvg.js.map +1 -1
- package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
- package/dist/components/ImageFromSynapseTable.js.map +1 -1
- package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
- package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
- package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
- package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
- package/dist/components/Markdown/UserMentionModal.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
- package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
- package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js +45 -39
- package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
- package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
- package/dist/components/PageProgress/PageProgress.js.map +1 -1
- package/dist/components/Plot/DotPlot.js.map +1 -1
- package/dist/components/Plot/Plot.js.map +1 -1
- package/dist/components/Plot/SynapsePlot.js.map +1 -1
- package/dist/components/Plot/ThemesPlot.js.map +1 -1
- package/dist/components/Plot/UpsetPlot.js.map +1 -1
- package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
- package/dist/components/PortalAclEditor/PortalAclEditor.js +43 -41
- package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
- package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
- package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
- package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
- package/dist/components/Programs/Programs.Mobile.js.map +1 -1
- package/dist/components/Programs/Programs.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
- package/dist/components/QueryCount/QueryCount.js.map +1 -1
- package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
- package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
- package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
- package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
- package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
- package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
- package/dist/components/Resources/Resources.Mobile.js.map +1 -1
- package/dist/components/Resources/Resources.js.map +1 -1
- package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
- package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
- package/dist/components/SmartLink/SmartButton.js.map +1 -1
- package/dist/components/SmartLink/SmartLink.js.map +1 -1
- package/dist/components/SourceAppImage.js.map +1 -1
- package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
- package/dist/components/StatisticsPlot.js.map +1 -1
- package/dist/components/StorybookComponentWrapper.js.map +1 -1
- package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
- package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
- package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
- package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
- package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
- package/dist/components/SynapseForm/SynapseForm.js +4 -2
- package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts +8 -7
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +173 -164
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
- package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
- package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.d.ts +1 -0
- package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js +8 -8
- package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
- package/dist/components/TanStackTable/TableBody.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
- package/dist/components/TextField/TextField.js.map +1 -1
- package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
- package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
- package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
- package/dist/components/UserCard/Avatar.js.map +1 -1
- package/dist/components/UserCardList/UserCardList.js.map +1 -1
- package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
- package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
- package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
- package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
- package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
- package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
- package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
- package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
- package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.d.ts.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +157 -148
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
- package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js +20 -19
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
- package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
- package/dist/components/error/ErrorPage.js.map +1 -1
- package/dist/components/favorites/FavoritesPage.js.map +1 -1
- package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
- package/dist/components/layout/SWCHeader.d.ts +9 -0
- package/dist/components/layout/SWCHeader.d.ts.map +1 -0
- package/dist/components/layout/SWCHeader.js +19 -0
- package/dist/components/layout/SWCHeader.js.map +1 -0
- package/dist/components/layout/SWCPageLayout.d.ts +9 -0
- package/dist/components/layout/SWCPageLayout.d.ts.map +1 -0
- package/dist/components/layout/SWCPageLayout.js +14 -0
- package/dist/components/layout/SWCPageLayout.js.map +1 -0
- package/dist/components/menu/ComplexMenu.js.map +1 -1
- package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
- package/dist/components/styled/StyledPopover.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvPreview.js +2 -1
- package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
- package/dist/components/trash/TrashCanList.js.map +1 -1
- package/dist/components/widgets/FileHandleLink.js.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/components/widgets/SynapseVideo.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
- package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
- package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
- package/dist/features/curator/GridPage/components/GridPageTitle.d.ts.map +1 -1
- package/dist/features/curator/GridPage/components/GridPageTitle.js +23 -30
- package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
- package/dist/features/curator/dashboard/CuratorDashboard.d.ts +2 -0
- package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -0
- package/dist/features/curator/dashboard/CuratorDashboard.js +45 -0
- package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +9 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.js +106 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +12 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -0
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +52 -0
- package/dist/features/curator/dashboard/components/NextStepButton.css +1 -0
- package/dist/features/curator/dashboard/components/NextStepButton.d.ts +14 -0
- package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -0
- package/dist/features/curator/dashboard/components/NextStepButton.js +35 -0
- package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -0
- package/dist/features/curator/dashboard/components/NextStepButton.module.js +11 -0
- package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -0
- package/dist/features/curator/dashboard/components/NextStepButton.module.scss +57 -0
- package/dist/features/curator/dashboard/components/UserOrTeamChip.css +1 -1
- package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js +1 -1
- package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js.map +1 -1
- package/dist/features/curator/dashboard/components/UserOrTeamChip.module.scss +5 -5
- package/dist/features/curator/dashboard/components/shared.css +1 -0
- package/dist/features/curator/dashboard/components/shared.module.js +5 -0
- package/dist/features/curator/dashboard/components/shared.module.js.map +1 -0
- package/dist/features/curator/dashboard/components/shared.module.scss +8 -0
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -2
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +16 -34
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
- package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts +10 -0
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +37 -0
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -0
- package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
- package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/utils/constants.js +6 -0
- package/dist/features/entity/metadata-task/utils/constants.js.map +1 -0
- package/dist/mocks/challenge/mockChallenge.js.map +1 -1
- package/dist/mocks/entity/mockDataset.js.map +1 -1
- package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
- package/dist/mocks/entity/mockFileEntity.js.map +1 -1
- package/dist/mocks/entity/mockFileView.js.map +1 -1
- package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
- package/dist/mocks/entity/mockProject.js.map +1 -1
- package/dist/mocks/entity/mockProjectView.js.map +1 -1
- package/dist/mocks/entity/mockRootEntity.js.map +1 -1
- package/dist/mocks/entity/mockTableEntity.js.map +1 -1
- package/dist/mocks/mockWiki.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
- package/dist/mocks/provenance/mockActivity.js.map +1 -1
- package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
- package/dist/ror-client/index.js.map +1 -1
- package/dist/style/components/_cards.scss +4 -0
- package/dist/style/components/_data-grid-extra.css +1 -1
- package/dist/style/components/_data-grid-extra.scss +2 -0
- package/dist/style/main.css +1 -1
- package/dist/synapse-client/HttpClient.js.map +1 -1
- package/dist/synapse-client/SynapseClient.js.map +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +1 -0
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +3 -0
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
- package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
- package/dist/synapse-queries/doi/useDOI.js.map +1 -1
- package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
- package/dist/synapse-queries/entity/useEntity.js.map +1 -1
- package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
- package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
- package/dist/synapse-queries/entity/useSchema.js.map +1 -1
- package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
- package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
- package/dist/synapse-queries/file/useFiles.js.map +1 -1
- package/dist/synapse-queries/forum/useReply.js.map +1 -1
- package/dist/synapse-queries/forum/useThread.d.ts +1 -0
- package/dist/synapse-queries/forum/useThread.d.ts.map +1 -1
- package/dist/synapse-queries/forum/useThread.js +19 -12
- package/dist/synapse-queries/forum/useThread.js.map +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
- package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
- package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
- package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
- package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
- package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
- package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
- package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
- package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
- package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
- package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
- package/dist/theme/ThemeProvider.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/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
- package/dist/utils/AppUtils/session/ApplicationSessionManager.js +7 -4
- package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
- package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
- package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
- package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
- package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
- package/dist/utils/context/SynapseContext.js.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.d.ts +4 -0
- package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.js +12 -1
- package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.js +15 -4
- package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
- package/dist/utils/functions/GridApiUtils.js.map +1 -1
- package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
- package/dist/utils/functions/RealmUtils.d.ts +4 -0
- package/dist/utils/functions/RealmUtils.d.ts.map +1 -1
- package/dist/utils/functions/RealmUtils.js +9 -3
- package/dist/utils/functions/RealmUtils.js.map +1 -1
- package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
- package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
- package/dist/utils/functions/SqlFunctions.js.map +1 -1
- package/dist/utils/functions/StringUtils.js.map +1 -1
- package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
- package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
- package/dist/utils/functions/getEndpoint.js.map +1 -1
- package/dist/utils/functions/getUserData.js.map +1 -1
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
- package/dist/utils/hooks/useConfirmItems.js.map +1 -1
- package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
- package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
- package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
- package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
- package/dist/utils/hooks/useGetGoalData.js.map +1 -1
- package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
- package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
- package/dist/utils/hooks/useIsBot.js.map +1 -1
- package/dist/utils/hooks/useListState.js.map +1 -1
- package/dist/utils/hooks/useLogin.d.ts.map +1 -1
- package/dist/utils/hooks/useLogin.js +53 -52
- package/dist/utils/hooks/useLogin.js.map +1 -1
- package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
- package/dist/utils/hooks/useOverlay.js.map +1 -1
- package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
- package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
- package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
- package/dist/utils/hooks/useSet.js.map +1 -1
- package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
- package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
- package/dist/utils/html/TargetEnum.js.map +1 -1
- package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateTableViewWizardUtils.js","names":[],"sources":["../../../src/components/CreateTableViewWizard/CreateTableViewWizardUtils.ts"],"sourcesContent":["import { entityTypeToFriendlyName } from '@/utils/functions/EntityTypeUtils'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n Entity,\n EntityView,\n MaterializedView,\n SubmissionView,\n Table,\n VirtualTable,\n} from '@sage-bionetworks/synapse-types'\n\nexport type CreateTableViewWizardStep =\n | 'CHOOSE_TABLE_TYPE'\n | 'CHOOSE_VIEW_TYPE'\n | 'ENTITY_VIEW_SCOPE'\n | 'SUBMISSION_VIEW_SCOPE'\n | 'TABLE_COLUMNS'\n | 'TABLE_SQL'\n | 'TABLE_NAME'\n\nexport function getModalTitle(\n step: CreateTableViewWizardStep,\n entityType?: EntityType,\n): string {\n switch (step) {\n case 'CHOOSE_TABLE_TYPE':\n return 'Create Table or View'\n case 'CHOOSE_VIEW_TYPE':\n return 'Create View'\n case 'ENTITY_VIEW_SCOPE':\n case 'SUBMISSION_VIEW_SCOPE':\n return `Define ${entityTypeToFriendlyName(entityType!)} Scope`\n case 'TABLE_SQL':\n return 'Create a SQL-Defined View'\n\n case 'TABLE_COLUMNS':\n return `Add Columns to ${entityTypeToFriendlyName(entityType!)}`\n\n case 'TABLE_NAME':\n return `Create the ${entityTypeToFriendlyName(entityType!)}`\n }\n}\n\nexport function getPreviousStep(\n currentStep: CreateTableViewWizardStep,\n entityType?: EntityType,\n): CreateTableViewWizardStep {\n switch (currentStep) {\n case 'CHOOSE_TABLE_TYPE':\n // This should never happen\n break\n case 'CHOOSE_VIEW_TYPE':\n return 'CHOOSE_TABLE_TYPE'\n case 'ENTITY_VIEW_SCOPE':\n case 'SUBMISSION_VIEW_SCOPE':\n case 'TABLE_SQL':\n return 'CHOOSE_VIEW_TYPE'\n case 'TABLE_COLUMNS':\n // If this is a table, then go back to the table type selection\n if (entityType === EntityType.table) {\n return 'CHOOSE_TABLE_TYPE'\n }\n // If this is a view, go back to scope selection\n if (entityType === EntityType.entityview) {\n return 'ENTITY_VIEW_SCOPE'\n }\n if (entityType === EntityType.submissionview) {\n return 'SUBMISSION_VIEW_SCOPE'\n }\n break\n case 'TABLE_NAME':\n if (\n entityType === EntityType.table ||\n entityType === EntityType.entityview ||\n entityType === EntityType.submissionview\n ) {\n return 'TABLE_COLUMNS'\n } else if (\n entityType === EntityType.materializedview ||\n entityType === EntityType.virtualtable\n ) {\n // TODO: Currently, this block is unreachable\n // TABLE_SQL is the last step, but after PLFM-8209 is complete, TABLE_SQL can come before TABLE_NAME, where this will make more sense\n // Other than removing this comment, no change will be needed here\n return 'TABLE_SQL'\n }\n break\n }\n console.warn(`Unknown previous step at ${currentStep} for type ${entityType}`)\n return 'CHOOSE_TABLE_TYPE'\n}\n\nexport function isLastStep(step: CreateTableViewWizardStep) {\n return step === 'TABLE_NAME'\n}\n\nexport function getStepAfterTypeSelection(\n entityType: EntityType,\n): CreateTableViewWizardStep {\n if (entityType === EntityType.table) {\n return 'TABLE_COLUMNS'\n }\n if (entityType === EntityType.entityview) {\n return 'ENTITY_VIEW_SCOPE'\n }\n if (entityType === EntityType.submissionview) {\n return 'SUBMISSION_VIEW_SCOPE'\n }\n if (\n entityType === EntityType.materializedview ||\n entityType === EntityType.virtualtable\n ) {\n return 'TABLE_SQL'\n }\n\n // Should never happen\n return 'CHOOSE_TABLE_TYPE'\n}\n\nexport function maybeSetColumnIds(\n entityToCreate: Entity,\n entityType: EntityType,\n createdColumnModels: ColumnModel[],\n) {\n const hasColumnIdsTypes: EntityType[] = [\n EntityType.table,\n EntityType.entityview,\n EntityType.submissionview,\n EntityType.dataset,\n EntityType.datasetcollection,\n ]\n if (hasColumnIdsTypes.includes(entityType)) {\n if (createdColumnModels.length > 0) {\n ;(entityToCreate as Table)['columnIds'] = createdColumnModels.map(\n cm => cm.id,\n )\n }\n }\n}\n\nexport function maybeSetScopeIds(\n entityToCreate: Entity,\n entityType: EntityType,\n scopeIds: string[],\n) {\n const hasScopeIdsTypes: EntityType[] = [\n EntityType.entityview,\n EntityType.submissionview,\n ]\n if (hasScopeIdsTypes.includes(entityType) && scopeIds.length > 0) {\n ;(entityToCreate as EntityView | SubmissionView)['scopeIds'] = scopeIds\n }\n}\n\nexport function maybeSetViewTypeMask(\n entityToCreate: Entity,\n entityType: EntityType,\n viewTypeMask: number,\n) {\n if (entityType === EntityType.entityview) {\n ;(entityToCreate as EntityView)['viewTypeMask'] = viewTypeMask\n }\n}\n\nexport function maybeSetDefiningSQL(\n entityToCreate: Entity,\n entityType: EntityType,\n sql: string,\n) {\n const hasDefiningSQLTypes: EntityType[] = [\n EntityType.materializedview,\n EntityType.virtualtable,\n ]\n if (hasDefiningSQLTypes.includes(entityType)) {\n ;(entityToCreate as MaterializedView | VirtualTable)['definingSQL'] = sql\n }\n}\n"],"mappings":";;;AAqBA,SAAgB,EACd,GACA,GACQ;AACR,SAAQ,GAAR;EACE,KAAK,oBACH,QAAO;EACT,KAAK,mBACH,QAAO;EACT,KAAK;EACL,KAAK,wBACH,QAAO,UAAU,EAAyB,EAAY,CAAC;EACzD,KAAK,YACH,QAAO;EAET,KAAK,gBACH,QAAO,kBAAkB,EAAyB,EAAY;EAEhE,KAAK,aACH,QAAO,cAAc,EAAyB,EAAY;;;AAIhE,SAAgB,EACd,GACA,GAC2B;AAC3B,SAAQ,GAAR;EACE,KAAK,oBAEH;EACF,KAAK,mBACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,YACH,QAAO;EACT,KAAK;AAEH,OAAI,MAAe,EAAW,MAC5B,QAAO;AAGT,OAAI,MAAe,EAAW,WAC5B,QAAO;AAET,OAAI,MAAe,EAAW,eAC5B,QAAO;AAET;EACF,KAAK;AACH,OACE,MAAe,EAAW,SAC1B,MAAe,EAAW,cAC1B,MAAe,EAAW,eAE1B,QAAO;OAEP,MAAe,EAAW,oBAC1B,MAAe,EAAW,aAK1B,QAAO;AAET;;AAGJ,QADA,QAAQ,KAAK,4BAA4B,EAAY,YAAY,IAAa,EACvE;;AAGT,SAAgB,EAAW,GAAiC;AAC1D,QAAO,MAAS;;AAGlB,SAAgB,EACd,GAC2B;AAkB3B,QAjBI,MAAe,EAAW,QACrB,kBAEL,MAAe,EAAW,aACrB,sBAEL,MAAe,EAAW,iBACrB,0BAGP,MAAe,EAAW,oBAC1B,MAAe,EAAW,eAEnB,cAIF;;AAGT,SAAgB,EACd,GACA,GACA,GACA;AAQA,
|
|
1
|
+
{"version":3,"file":"CreateTableViewWizardUtils.js","names":[],"sources":["../../../src/components/CreateTableViewWizard/CreateTableViewWizardUtils.ts"],"sourcesContent":["import { entityTypeToFriendlyName } from '@/utils/functions/EntityTypeUtils'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n ColumnModel,\n Entity,\n EntityView,\n MaterializedView,\n SubmissionView,\n Table,\n VirtualTable,\n} from '@sage-bionetworks/synapse-types'\n\nexport type CreateTableViewWizardStep =\n | 'CHOOSE_TABLE_TYPE'\n | 'CHOOSE_VIEW_TYPE'\n | 'ENTITY_VIEW_SCOPE'\n | 'SUBMISSION_VIEW_SCOPE'\n | 'TABLE_COLUMNS'\n | 'TABLE_SQL'\n | 'TABLE_NAME'\n\nexport function getModalTitle(\n step: CreateTableViewWizardStep,\n entityType?: EntityType,\n): string {\n switch (step) {\n case 'CHOOSE_TABLE_TYPE':\n return 'Create Table or View'\n case 'CHOOSE_VIEW_TYPE':\n return 'Create View'\n case 'ENTITY_VIEW_SCOPE':\n case 'SUBMISSION_VIEW_SCOPE':\n return `Define ${entityTypeToFriendlyName(entityType!)} Scope`\n case 'TABLE_SQL':\n return 'Create a SQL-Defined View'\n\n case 'TABLE_COLUMNS':\n return `Add Columns to ${entityTypeToFriendlyName(entityType!)}`\n\n case 'TABLE_NAME':\n return `Create the ${entityTypeToFriendlyName(entityType!)}`\n }\n}\n\nexport function getPreviousStep(\n currentStep: CreateTableViewWizardStep,\n entityType?: EntityType,\n): CreateTableViewWizardStep {\n switch (currentStep) {\n case 'CHOOSE_TABLE_TYPE':\n // This should never happen\n break\n case 'CHOOSE_VIEW_TYPE':\n return 'CHOOSE_TABLE_TYPE'\n case 'ENTITY_VIEW_SCOPE':\n case 'SUBMISSION_VIEW_SCOPE':\n case 'TABLE_SQL':\n return 'CHOOSE_VIEW_TYPE'\n case 'TABLE_COLUMNS':\n // If this is a table, then go back to the table type selection\n if (entityType === EntityType.table) {\n return 'CHOOSE_TABLE_TYPE'\n }\n // If this is a view, go back to scope selection\n if (entityType === EntityType.entityview) {\n return 'ENTITY_VIEW_SCOPE'\n }\n if (entityType === EntityType.submissionview) {\n return 'SUBMISSION_VIEW_SCOPE'\n }\n break\n case 'TABLE_NAME':\n if (\n entityType === EntityType.table ||\n entityType === EntityType.entityview ||\n entityType === EntityType.submissionview\n ) {\n return 'TABLE_COLUMNS'\n } else if (\n entityType === EntityType.materializedview ||\n entityType === EntityType.virtualtable\n ) {\n // TODO: Currently, this block is unreachable\n // TABLE_SQL is the last step, but after PLFM-8209 is complete, TABLE_SQL can come before TABLE_NAME, where this will make more sense\n // Other than removing this comment, no change will be needed here\n return 'TABLE_SQL'\n }\n break\n }\n console.warn(`Unknown previous step at ${currentStep} for type ${entityType}`)\n return 'CHOOSE_TABLE_TYPE'\n}\n\nexport function isLastStep(step: CreateTableViewWizardStep) {\n return step === 'TABLE_NAME'\n}\n\nexport function getStepAfterTypeSelection(\n entityType: EntityType,\n): CreateTableViewWizardStep {\n if (entityType === EntityType.table) {\n return 'TABLE_COLUMNS'\n }\n if (entityType === EntityType.entityview) {\n return 'ENTITY_VIEW_SCOPE'\n }\n if (entityType === EntityType.submissionview) {\n return 'SUBMISSION_VIEW_SCOPE'\n }\n if (\n entityType === EntityType.materializedview ||\n entityType === EntityType.virtualtable\n ) {\n return 'TABLE_SQL'\n }\n\n // Should never happen\n return 'CHOOSE_TABLE_TYPE'\n}\n\nexport function maybeSetColumnIds(\n entityToCreate: Entity,\n entityType: EntityType,\n createdColumnModels: ColumnModel[],\n) {\n const hasColumnIdsTypes: EntityType[] = [\n EntityType.table,\n EntityType.entityview,\n EntityType.submissionview,\n EntityType.dataset,\n EntityType.datasetcollection,\n ]\n if (hasColumnIdsTypes.includes(entityType)) {\n if (createdColumnModels.length > 0) {\n ;(entityToCreate as Table)['columnIds'] = createdColumnModels.map(\n cm => cm.id,\n )\n }\n }\n}\n\nexport function maybeSetScopeIds(\n entityToCreate: Entity,\n entityType: EntityType,\n scopeIds: string[],\n) {\n const hasScopeIdsTypes: EntityType[] = [\n EntityType.entityview,\n EntityType.submissionview,\n ]\n if (hasScopeIdsTypes.includes(entityType) && scopeIds.length > 0) {\n ;(entityToCreate as EntityView | SubmissionView)['scopeIds'] = scopeIds\n }\n}\n\nexport function maybeSetViewTypeMask(\n entityToCreate: Entity,\n entityType: EntityType,\n viewTypeMask: number,\n) {\n if (entityType === EntityType.entityview) {\n ;(entityToCreate as EntityView)['viewTypeMask'] = viewTypeMask\n }\n}\n\nexport function maybeSetDefiningSQL(\n entityToCreate: Entity,\n entityType: EntityType,\n sql: string,\n) {\n const hasDefiningSQLTypes: EntityType[] = [\n EntityType.materializedview,\n EntityType.virtualtable,\n ]\n if (hasDefiningSQLTypes.includes(entityType)) {\n ;(entityToCreate as MaterializedView | VirtualTable)['definingSQL'] = sql\n }\n}\n"],"mappings":";;;AAqBA,SAAgB,EACd,GACA,GACQ;AACR,SAAQ,GAAR;EACE,KAAK,oBACH,QAAO;EACT,KAAK,mBACH,QAAO;EACT,KAAK;EACL,KAAK,wBACH,QAAO,UAAU,EAAyB,EAAY,CAAC;EACzD,KAAK,YACH,QAAO;EAET,KAAK,gBACH,QAAO,kBAAkB,EAAyB,EAAY;EAEhE,KAAK,aACH,QAAO,cAAc,EAAyB,EAAY;;;AAIhE,SAAgB,EACd,GACA,GAC2B;AAC3B,SAAQ,GAAR;EACE,KAAK,oBAEH;EACF,KAAK,mBACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,YACH,QAAO;EACT,KAAK;AAEH,OAAI,MAAe,EAAW,MAC5B,QAAO;AAGT,OAAI,MAAe,EAAW,WAC5B,QAAO;AAET,OAAI,MAAe,EAAW,eAC5B,QAAO;AAET;EACF,KAAK;AACH,OACE,MAAe,EAAW,SAC1B,MAAe,EAAW,cAC1B,MAAe,EAAW,eAE1B,QAAO;OAEP,MAAe,EAAW,oBAC1B,MAAe,EAAW,aAK1B,QAAO;AAET;;AAGJ,QADA,QAAQ,KAAK,4BAA4B,EAAY,YAAY,IAAa,EACvE;;AAGT,SAAgB,EAAW,GAAiC;AAC1D,QAAO,MAAS;;AAGlB,SAAgB,EACd,GAC2B;AAkB3B,QAjBI,MAAe,EAAW,QACrB,kBAEL,MAAe,EAAW,aACrB,sBAEL,MAAe,EAAW,iBACrB,0BAGP,MAAe,EAAW,oBAC1B,MAAe,EAAW,eAEnB,cAIF;;AAGT,SAAgB,EACd,GACA,GACA,GACA;AAQA,CAAI;EANF,EAAW;EACX,EAAW;EACX,EAAW;EACX,EAAW;EACX,EAAW;EAET,CAAkB,SAAS,EAAW,IACpC,EAAoB,SAAS,MAC7B,EAAyB,YAAe,EAAoB,KAC5D,MAAM,EAAG,GACV;;AAKP,SAAgB,EACd,GACA,GACA,GACA;AAKA,CAAI,CAHF,EAAW,YACX,EAAW,eAET,CAAiB,SAAS,EAAW,IAAI,EAAS,SAAS,MAC3D,EAA+C,WAAc;;AAInE,SAAgB,EACd,GACA,GACA,GACA;AACA,CAAI,MAAe,EAAW,eAC1B,EAA8B,eAAkB;;AAItD,SAAgB,EACd,GACA,GACA,GACA;AAKA,CAAI,CAHF,EAAW,kBACX,EAAW,aAET,CAAoB,SAAS,EAAW,KACxC,EAAmD,cAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAEL,gBAAgB,EACjB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,uDAAuD,CAAA;AAC9D,OAAO,8CAA8C,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAMxE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACjD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,oBAAoB,EAAE,mBAAmB,CAAA;IACzC,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,aAAa,EAAE,eAAe,GAAG,IAAI,CAAA;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;IACxE,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IAC5E,
|
|
1
|
+
{"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAE9E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAEL,gBAAgB,EACjB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,uDAAuD,CAAA;AAC9D,OAAO,8CAA8C,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAMxE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAElE,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACjD,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,oBAAoB,EAAE,mBAAmB,CAAA;IACzC,SAAS,EAAE,WAAW,EAAE,CAAA;IACxB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,WAAW,GAAG,SAAS,CAAA;IACnC,aAAa,EAAE,eAAe,GAAG,IAAI,CAAA;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;IACxE,qBAAqB,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAA;IAC5E,gBAAgB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAoOpD"}
|
|
@@ -2,28 +2,28 @@ import { GRID_ROW_REACT_KEY_PROPERTY as e } from "./utils/DataGridUtils.js";
|
|
|
2
2
|
import { calculateDefaultColumnWidth as t } from "./utils/calculateColumnWidth.js";
|
|
3
3
|
import { modelColsToGrid as n } from "./utils/modelColsToGrid.js";
|
|
4
4
|
import '../../style/components/_data-grid-extra.css';/* empty css */
|
|
5
|
-
import { renderAddRowsComponent as r, renderRecordSetContextMenu as i, renderViewContextMenu as
|
|
6
|
-
import { getCellClassName as
|
|
5
|
+
import { renderAddRowsComponent as r, renderRecordSetContextMenu as i, renderViewContextMenu as a } from "./components/contextMenu.js";
|
|
6
|
+
import { getCellClassName as ee } from "./utils/getCellClassName.js";
|
|
7
7
|
import { useColumnResizeHandles as te } from "./hooks/useColumnResizeHandles.js";
|
|
8
8
|
import { useEffect as ne, useRef as o, useState as s } from "react";
|
|
9
9
|
import { jsx as c } from "react/jsx-runtime";
|
|
10
|
-
import { c as re } from "react/compiler-runtime";
|
|
11
|
-
import { DynamicDataSheetGrid as ie } from "@sage-bionetworks/react-datasheet-grid";
|
|
12
10
|
import l from "classnames";
|
|
11
|
+
import { c as re } from "react/compiler-runtime";
|
|
12
|
+
import { DynamicDataSheetGrid as u } from "@sage-bionetworks/react-datasheet-grid";
|
|
13
13
|
import "@sage-bionetworks/react-datasheet-grid/dist/style.css";
|
|
14
14
|
//#region src/components/DataGrid/DataGrid.tsx
|
|
15
|
-
function
|
|
16
|
-
let
|
|
17
|
-
|
|
18
|
-
let [
|
|
19
|
-
|
|
20
|
-
!
|
|
21
|
-
let n =
|
|
15
|
+
function d(d) {
|
|
16
|
+
let p = re(43), { gridRef: m, rowValues: h, columnNames: g, columnOrder: _, schemaPropertiesInfo: v, entityIsView: y, jsonSchema: b, lastSelection: x, handleChange: S, handleSelectionChange: C, remoteSelections: w } = d, T;
|
|
17
|
+
p[0] === Symbol.for("react.memo_cache_sentinel") ? (T = {}, p[0] = T) : T = p[0];
|
|
18
|
+
let [E, D] = s(T), [O, k] = s(!1), A, j;
|
|
19
|
+
p[1] !== g || p[2] !== _ || p[3] !== v ? (A = () => {
|
|
20
|
+
!g || !_ || D((e) => {
|
|
21
|
+
let n = _.map((e) => g[e]);
|
|
22
22
|
if (!n.some((t) => !e[t])) return e;
|
|
23
23
|
let r = { ...e };
|
|
24
24
|
return n.forEach((e, n) => {
|
|
25
25
|
if (!r[e]) {
|
|
26
|
-
let i =
|
|
26
|
+
let i = v[e];
|
|
27
27
|
r[e] = t(e, i, {
|
|
28
28
|
showPinIcon: n === 0,
|
|
29
29
|
hasDescription: !!i?.description
|
|
@@ -31,102 +31,102 @@ function u(u) {
|
|
|
31
31
|
}
|
|
32
32
|
}), r;
|
|
33
33
|
});
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
],
|
|
39
|
-
let
|
|
40
|
-
|
|
41
|
-
typeof e != "number" || e < 0 || !
|
|
42
|
-
},
|
|
43
|
-
let j = A, M;
|
|
44
|
-
d[8] === D ? M = d[9] : (M = D ? new Set([0]) : /* @__PURE__ */ new Set(), d[8] = D, d[9] = M);
|
|
34
|
+
}, j = [
|
|
35
|
+
g,
|
|
36
|
+
_,
|
|
37
|
+
v
|
|
38
|
+
], p[1] = g, p[2] = _, p[3] = v, p[4] = A, p[5] = j) : (A = p[4], j = p[5]), ne(A, j);
|
|
39
|
+
let M;
|
|
40
|
+
p[6] === _ ? M = p[7] : (M = (e) => {
|
|
41
|
+
typeof e != "number" || e < 0 || !_ || e >= _.length || e === 0 && k(f);
|
|
42
|
+
}, p[6] = _, p[7] = M);
|
|
45
43
|
let N = M, P;
|
|
46
|
-
|
|
47
|
-
let F = P,
|
|
48
|
-
|
|
44
|
+
p[8] === O ? P = p[9] : (P = O ? new Set([0]) : /* @__PURE__ */ new Set(), p[8] = O, p[9] = P);
|
|
45
|
+
let F = P, I;
|
|
46
|
+
p[10] !== g || p[11] !== _ || p[12] !== E || p[13] !== N || p[14] !== F || p[15] !== v ? (I = n(g, _, v, E, F, N), p[10] = g, p[11] = _, p[12] = E, p[13] = N, p[14] = F, p[15] = v, p[16] = I) : I = p[16];
|
|
47
|
+
let L = I, [R, ae] = s(null), z = y ? a : i, B = y ? !1 : r, V;
|
|
48
|
+
p[17] !== b || p[18] !== R ? (V = (e) => {
|
|
49
49
|
let { rowData: t, rowIndex: n } = e;
|
|
50
50
|
return l({
|
|
51
|
-
"row-valid": !!
|
|
52
|
-
"row-invalid": !!
|
|
53
|
-
"row-unknown": !!
|
|
54
|
-
"row-selected":
|
|
51
|
+
"row-valid": !!b && t.__validationStatus === "valid",
|
|
52
|
+
"row-invalid": !!b && t.__validationStatus === "invalid",
|
|
53
|
+
"row-unknown": !!b && t.__validationStatus === "pending",
|
|
54
|
+
"row-selected": R === n
|
|
55
55
|
});
|
|
56
|
-
},
|
|
57
|
-
let
|
|
58
|
-
|
|
56
|
+
}, p[17] = b, p[18] = R, p[19] = V) : V = p[19];
|
|
57
|
+
let H = V, U;
|
|
58
|
+
p[20] !== L || p[21] !== x || p[22] !== w || p[23] !== R ? (U = (e) => {
|
|
59
59
|
let { rowData: t, rowIndex: n, columnId: r } = e;
|
|
60
|
-
return
|
|
60
|
+
return ee({
|
|
61
61
|
rowData: t,
|
|
62
62
|
rowIndex: n,
|
|
63
63
|
columnId: r || "",
|
|
64
|
-
selectedRowIndex:
|
|
65
|
-
lastSelection:
|
|
66
|
-
colValues:
|
|
67
|
-
remoteSelections:
|
|
64
|
+
selectedRowIndex: R,
|
|
65
|
+
lastSelection: x,
|
|
66
|
+
colValues: L,
|
|
67
|
+
remoteSelections: w
|
|
68
68
|
});
|
|
69
|
-
},
|
|
70
|
-
let
|
|
71
|
-
|
|
69
|
+
}, p[20] = L, p[21] = x, p[22] = w, p[23] = R, p[24] = U) : U = p[24];
|
|
70
|
+
let W = U, oe = ie, G;
|
|
71
|
+
p[25] === Symbol.for("react.memo_cache_sentinel") ? (G = (e) => {
|
|
72
72
|
let { cell: t } = e;
|
|
73
|
-
t ?
|
|
74
|
-
},
|
|
75
|
-
let
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
let e =
|
|
73
|
+
ae(t ? t.row : null);
|
|
74
|
+
}, p[25] = G) : G = p[25];
|
|
75
|
+
let se = G, K = o(null), q = o(null), J;
|
|
76
|
+
p[26] === m ? J = p[27] : (J = (e, t) => {
|
|
77
|
+
if (m.current) {
|
|
78
|
+
let e = m.current.activeCell;
|
|
79
79
|
e ? q.current = {
|
|
80
80
|
col: e.col,
|
|
81
81
|
row: e.row
|
|
82
82
|
} : q.current = null;
|
|
83
83
|
}
|
|
84
|
-
|
|
84
|
+
D((n) => ({
|
|
85
85
|
...n,
|
|
86
86
|
[e]: t
|
|
87
87
|
}));
|
|
88
|
-
},
|
|
88
|
+
}, p[26] = m, p[27] = J);
|
|
89
89
|
let Y = J, X;
|
|
90
|
-
|
|
90
|
+
p[28] !== L || p[29] !== Y ? (X = {
|
|
91
91
|
wrapperRef: K,
|
|
92
|
-
colValues:
|
|
92
|
+
colValues: L,
|
|
93
93
|
onColumnResize: Y
|
|
94
|
-
},
|
|
94
|
+
}, p[28] = L, p[29] = Y, p[30] = X) : X = p[30], te(X);
|
|
95
95
|
let Z;
|
|
96
|
-
|
|
96
|
+
p[31] === Symbol.for("react.memo_cache_sentinel") ? (Z = {
|
|
97
97
|
position: "relative",
|
|
98
98
|
width: "100%"
|
|
99
|
-
},
|
|
100
|
-
let Q = !
|
|
101
|
-
return
|
|
99
|
+
}, p[31] = Z) : Z = p[31];
|
|
100
|
+
let Q = !y, $;
|
|
101
|
+
return p[32] !== B || p[33] !== W || p[34] !== L || p[35] !== z || p[36] !== m || p[37] !== S || p[38] !== C || p[39] !== H || p[40] !== h || p[41] !== Q ? ($ = /* @__PURE__ */ c("div", {
|
|
102
102
|
ref: K,
|
|
103
103
|
style: Z,
|
|
104
|
-
children: /* @__PURE__ */ c(
|
|
105
|
-
ref:
|
|
106
|
-
value:
|
|
107
|
-
columns:
|
|
104
|
+
children: /* @__PURE__ */ c(u, {
|
|
105
|
+
ref: m,
|
|
106
|
+
value: h,
|
|
107
|
+
columns: L,
|
|
108
108
|
autoAddRow: Q,
|
|
109
109
|
disableSmartDelete: !0,
|
|
110
|
-
addRowsComponent:
|
|
111
|
-
contextMenuComponent:
|
|
110
|
+
addRowsComponent: B,
|
|
111
|
+
contextMenuComponent: z,
|
|
112
112
|
rowKey: e,
|
|
113
|
-
rowClassName:
|
|
114
|
-
cellClassName:
|
|
115
|
-
duplicateRow:
|
|
116
|
-
onChange:
|
|
117
|
-
onActiveCellChange:
|
|
118
|
-
onSelectionChange:
|
|
113
|
+
rowClassName: H,
|
|
114
|
+
cellClassName: W,
|
|
115
|
+
duplicateRow: oe,
|
|
116
|
+
onChange: S,
|
|
117
|
+
onActiveCellChange: se,
|
|
118
|
+
onSelectionChange: C
|
|
119
119
|
})
|
|
120
|
-
}),
|
|
120
|
+
}), p[32] = B, p[33] = W, p[34] = L, p[35] = z, p[36] = m, p[37] = S, p[38] = C, p[39] = H, p[40] = h, p[41] = Q, p[42] = $) : $ = p[42], $;
|
|
121
121
|
}
|
|
122
|
-
function
|
|
122
|
+
function ie(e) {
|
|
123
123
|
let { rowData: t } = e;
|
|
124
124
|
return { ...t };
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function f(e) {
|
|
127
127
|
return !e;
|
|
128
128
|
}
|
|
129
129
|
//#endregion
|
|
130
|
-
export {
|
|
130
|
+
export { d as default };
|
|
131
131
|
|
|
132
132
|
//# sourceMappingURL=DataGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGrid.js","names":["modelColsToGrid","SchemaPropertiesMap","classNames","JSONSchema7","useEffect","useMemo","useState","useRef","useCallback","DynamicDataSheetGrid","DataSheetGridRef","SelectionWithId","renderAddRowsComponent","renderRecordSetContextMenu","renderViewContextMenu","DataGridRow","Operation","GRID_ROW_REACT_KEY_PROPERTY","getCellClassName","useColumnResizeHandles","calculateDefaultColumnWidth","HeaderOptions","RemoteSelection","DataGridProps","gridRef","React","RefObject","columnNames","columnOrder","schemaPropertiesInfo","rowValues","entityIsView","jsonSchema","lastSelection","handleChange","newValue","operations","handleSelectionChange","opts","selection","onSelectedRowChange","rowIndex","row","remoteSelections","DataGrid","props","$","_c","t0","Symbol","for","columnWidths","setColumnWidths","isPinned","setIsPinned","t1","t2","prev","modelColumnNames","map","idx","needsUpdate","some","name","newWidths","forEach","columnName","arrayIndex","propertyInfo","headerOptions","showPinIcon","hasDescription","description","t3","columnIndex","length","_temp","handleTogglePin","t4","Set","pinnedColumnsSet","t5","colValues","selectedRowIndex","setSelectedRowIndex","contextMenuComponent","addRowsComponent","t6","t7","rowData","__validationStatus","rowClassNameCallback","t8","rowData_0","rowIndex_0","columnId","cellClassNameCallback","duplicateRowCallback","_temp2","t9","cell","handleActiveCellChange","wrapperRef","activeCellBeforeResizeRef","columnName_0","newWidth","current","activeCell","col","prev_1","handleColumnResize","t10","onColumnResize","t11","position","width","t12","t13","rowData_1","prev_0"],"sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import { modelColsToGrid } from '@/components/DataGrid/utils/modelColsToGrid'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport classNames from 'classnames'\nimport { JSONSchema7 } from 'json-schema'\nimport { useEffect, useMemo, useState, useRef, useCallback } from 'react'\nimport {\n DynamicDataSheetGrid,\n DataSheetGridRef,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport '@sage-bionetworks/react-datasheet-grid/dist/style.css'\nimport '../../style/components/_data-grid-extra.scss'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport {\n renderAddRowsComponent,\n renderRecordSetContextMenu,\n renderViewContextMenu,\n} from './components/contextMenu'\nimport { DataGridRow, Operation } from './DataGridTypes'\nimport { GRID_ROW_REACT_KEY_PROPERTY } from './utils/DataGridUtils'\nimport { getCellClassName } from './utils/getCellClassName'\nimport { useColumnResizeHandles } from './hooks/useColumnResizeHandles'\nimport {\n calculateDefaultColumnWidth,\n HeaderOptions,\n} from './utils/calculateColumnWidth'\nimport type { RemoteSelection } from './hooks/useRemoteSelections'\n\ntype DataGridProps = {\n gridRef: React.RefObject<DataSheetGridRef | null>\n columnNames: string[]\n columnOrder: number[]\n schemaPropertiesInfo: SchemaPropertiesMap\n rowValues: DataGridRow[]\n entityIsView: boolean\n jsonSchema: JSONSchema7 | undefined\n lastSelection: SelectionWithId | null\n handleChange: (newValue: DataGridRow[], operations: Operation[]) => void\n handleSelectionChange: (opts: { selection: SelectionWithId | null }) => void\n onSelectedRowChange?: (\n rowIndex: number | null,\n row: DataGridRow | null,\n ) => void\n remoteSelections?: readonly RemoteSelection[]\n}\n\n/**\n * Component that renders a data grid/spreadsheet using react-datasheet-grid.\n * @param props\n * @constructor\n */\nexport default function DataGrid(props: DataGridProps) {\n const {\n gridRef,\n rowValues,\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n entityIsView,\n jsonSchema,\n lastSelection,\n handleChange,\n handleSelectionChange,\n onSelectedRowChange,\n remoteSelections,\n } = props\n\n // Move columnWidths state into DataGrid\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({})\n\n // Pin state management for first column\n const [isPinned, setIsPinned] = useState(false)\n\n // Initialize column widths with defaults when columns first become available\n useEffect(() => {\n if (!columnNames || !columnOrder) {\n return\n }\n\n // Initialize widths for any columns that don't have them yet\n setColumnWidths(prev => {\n const modelColumnNames = columnOrder.map(idx => columnNames[idx])\n\n // Check if any columns need initialization\n const needsUpdate = modelColumnNames.some(name => !prev[name])\n\n if (!needsUpdate) {\n return prev // Return same reference to avoid triggering updates\n }\n\n const newWidths = { ...prev }\n modelColumnNames.forEach((columnName, arrayIndex) => {\n if (!newWidths[columnName]) {\n // Calculate default width using centralized function\n const propertyInfo = schemaPropertiesInfo[columnName]\n const headerOptions: HeaderOptions = {\n showPinIcon: arrayIndex === 0,\n hasDescription: !!propertyInfo?.description,\n }\n newWidths[columnName] = calculateDefaultColumnWidth(\n columnName,\n propertyInfo,\n headerOptions,\n )\n }\n })\n return newWidths\n })\n }, [columnNames, columnOrder, schemaPropertiesInfo])\n\n // Handler to toggle pin state for the first column only\n const handleTogglePin = useCallback(\n (columnIndex: number) => {\n // Validate columnIndex\n if (\n typeof columnIndex !== 'number' ||\n columnIndex < 0 ||\n !columnOrder ||\n columnIndex >= columnOrder.length\n ) {\n return\n }\n\n if (columnIndex !== 0) return // Only allow first column pinning\n\n setIsPinned(prev => !prev)\n },\n [columnOrder],\n )\n\n // Memoize the pinned columns set to prevent recalculation during scroll\n const pinnedColumnsSet = useMemo<Set<number>>(() => {\n return isPinned ? new Set([0]) : new Set()\n }, [isPinned])\n\n const colValues = useMemo(\n () =>\n modelColsToGrid(\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ),\n [\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ],\n )\n const [selectedRowIndex, setSelectedRowIndex] = useState<number | null>(null)\n\n // Memoize contextMenuComponent\n const contextMenuComponent = useMemo(\n () => (entityIsView ? renderViewContextMenu : renderRecordSetContextMenu),\n [entityIsView],\n )\n\n // Memoize addRowsComponent\n const addRowsComponent = useMemo(\n () => (entityIsView ? false : renderAddRowsComponent),\n [entityIsView],\n )\n\n // Wrap rowClassName in useCallback\n const rowClassNameCallback = useCallback(\n ({ rowData, rowIndex }: { rowData: DataGridRow; rowIndex: number }) =>\n classNames({\n 'row-valid': !!jsonSchema && rowData.__validationStatus === 'valid',\n 'row-invalid': !!jsonSchema && rowData.__validationStatus === 'invalid',\n 'row-unknown': !!jsonSchema && rowData.__validationStatus === 'pending',\n 'row-selected': selectedRowIndex === rowIndex,\n }),\n [jsonSchema, selectedRowIndex],\n )\n\n // Wrap cellClassName in useCallback\n const cellClassNameCallback = useCallback(\n ({\n rowData,\n rowIndex,\n columnId,\n }: {\n rowData: unknown\n rowIndex: number\n columnId?: string\n }) => {\n return getCellClassName({\n rowData: rowData as DataGridRow,\n rowIndex,\n columnId: columnId || '',\n selectedRowIndex,\n lastSelection,\n colValues,\n remoteSelections,\n })\n },\n [selectedRowIndex, lastSelection, colValues, remoteSelections],\n )\n\n // Wrap duplicateRow in useCallback\n const duplicateRowCallback = useCallback(\n ({ rowData }: { rowData: DataGridRow }) => ({\n ...rowData,\n }),\n [],\n )\n\n // Wrap onActiveCellChange in useCallback\n const handleActiveCellChange = useCallback(\n ({ cell }: { cell: { row: number; col: number } | null }) => {\n if (cell) {\n setSelectedRowIndex(cell.row)\n onSelectedRowChange?.(cell.row, rowValues[cell.row])\n } else {\n setSelectedRowIndex(null)\n onSelectedRowChange?.(null, null)\n }\n },\n [onSelectedRowChange, rowValues],\n )\n\n // Wrapper ref for the grid container\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n\n // Store the active cell before column resize so we can restore it\n const activeCellBeforeResizeRef = useRef<{ col: number; row: number } | null>(\n null,\n )\n\n // Handle column resize callback\n const handleColumnResize = useCallback(\n (columnName: string, newWidth: number) => {\n // Save the current active cell before updating widths (which will trigger remount)\n if (gridRef.current) {\n const activeCell = gridRef.current.activeCell\n if (activeCell) {\n activeCellBeforeResizeRef.current = {\n col: activeCell.col,\n row: activeCell.row,\n }\n } else {\n // Explicitly clear the ref if there's no active cell\n activeCellBeforeResizeRef.current = null\n }\n }\n\n setColumnWidths(prev => ({\n ...prev,\n [columnName]: newWidth,\n }))\n },\n [gridRef],\n )\n\n // Setup column resize handles\n useColumnResizeHandles({\n wrapperRef,\n colValues,\n onColumnResize: handleColumnResize,\n })\n\n return (\n <div ref={wrapperRef} style={{ position: 'relative', width: '100%' }}>\n <DynamicDataSheetGrid\n ref={gridRef}\n value={rowValues}\n columns={colValues}\n autoAddRow={!entityIsView}\n disableSmartDelete\n addRowsComponent={addRowsComponent}\n contextMenuComponent={contextMenuComponent}\n rowKey={GRID_ROW_REACT_KEY_PROPERTY}\n rowClassName={rowClassNameCallback}\n cellClassName={cellClassNameCallback}\n duplicateRow={duplicateRowCallback}\n onChange={handleChange}\n onActiveCellChange={handleActiveCellChange}\n onSelectionChange={handleSelectionChange}\n />\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataGrid.js","names":["modelColsToGrid","SchemaPropertiesMap","classNames","JSONSchema7","useEffect","useMemo","useState","useRef","useCallback","DynamicDataSheetGrid","DataSheetGridRef","SelectionWithId","renderAddRowsComponent","renderRecordSetContextMenu","renderViewContextMenu","DataGridRow","Operation","GRID_ROW_REACT_KEY_PROPERTY","getCellClassName","useColumnResizeHandles","calculateDefaultColumnWidth","HeaderOptions","RemoteSelection","DataGridProps","gridRef","React","RefObject","columnNames","columnOrder","schemaPropertiesInfo","rowValues","entityIsView","jsonSchema","lastSelection","handleChange","newValue","operations","handleSelectionChange","opts","selection","remoteSelections","DataGrid","props","$","_c","t0","Symbol","for","columnWidths","setColumnWidths","isPinned","setIsPinned","t1","t2","prev","modelColumnNames","map","idx","needsUpdate","some","name","newWidths","forEach","columnName","arrayIndex","propertyInfo","headerOptions","showPinIcon","hasDescription","description","t3","columnIndex","length","_temp","handleTogglePin","t4","Set","pinnedColumnsSet","t5","colValues","selectedRowIndex","setSelectedRowIndex","contextMenuComponent","addRowsComponent","t6","t7","rowData","rowIndex","__validationStatus","rowClassNameCallback","t8","rowData_0","rowIndex_0","columnId","cellClassNameCallback","duplicateRowCallback","_temp2","t9","cell","row","handleActiveCellChange","wrapperRef","activeCellBeforeResizeRef","columnName_0","newWidth","current","activeCell","col","prev_1","handleColumnResize","t10","onColumnResize","t11","position","width","t12","t13","rowData_1","prev_0"],"sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import { modelColsToGrid } from '@/components/DataGrid/utils/modelColsToGrid'\nimport { SchemaPropertiesMap } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport classNames from 'classnames'\nimport { JSONSchema7 } from 'json-schema'\nimport { useEffect, useMemo, useState, useRef, useCallback } from 'react'\nimport {\n DynamicDataSheetGrid,\n DataSheetGridRef,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport '@sage-bionetworks/react-datasheet-grid/dist/style.css'\nimport '../../style/components/_data-grid-extra.scss'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport {\n renderAddRowsComponent,\n renderRecordSetContextMenu,\n renderViewContextMenu,\n} from './components/contextMenu'\nimport { DataGridRow, Operation } from './DataGridTypes'\nimport { GRID_ROW_REACT_KEY_PROPERTY } from './utils/DataGridUtils'\nimport { getCellClassName } from './utils/getCellClassName'\nimport { useColumnResizeHandles } from './hooks/useColumnResizeHandles'\nimport {\n calculateDefaultColumnWidth,\n HeaderOptions,\n} from './utils/calculateColumnWidth'\nimport type { RemoteSelection } from './hooks/useRemoteSelections'\n\ntype DataGridProps = {\n gridRef: React.RefObject<DataSheetGridRef | null>\n columnNames: string[]\n columnOrder: number[]\n schemaPropertiesInfo: SchemaPropertiesMap\n rowValues: DataGridRow[]\n entityIsView: boolean\n jsonSchema: JSONSchema7 | undefined\n lastSelection: SelectionWithId | null\n handleChange: (newValue: DataGridRow[], operations: Operation[]) => void\n handleSelectionChange: (opts: { selection: SelectionWithId | null }) => void\n remoteSelections?: readonly RemoteSelection[]\n}\n\n/**\n * Component that renders a data grid/spreadsheet using react-datasheet-grid.\n * @param props\n * @constructor\n */\nexport default function DataGrid(props: DataGridProps) {\n const {\n gridRef,\n rowValues,\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n entityIsView,\n jsonSchema,\n lastSelection,\n handleChange,\n handleSelectionChange,\n remoteSelections,\n } = props\n\n // Move columnWidths state into DataGrid\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({})\n\n // Pin state management for first column\n const [isPinned, setIsPinned] = useState(false)\n\n // Initialize column widths with defaults when columns first become available\n useEffect(() => {\n if (!columnNames || !columnOrder) {\n return\n }\n\n // Initialize widths for any columns that don't have them yet\n setColumnWidths(prev => {\n const modelColumnNames = columnOrder.map(idx => columnNames[idx])\n\n // Check if any columns need initialization\n const needsUpdate = modelColumnNames.some(name => !prev[name])\n\n if (!needsUpdate) {\n return prev // Return same reference to avoid triggering updates\n }\n\n const newWidths = { ...prev }\n modelColumnNames.forEach((columnName, arrayIndex) => {\n if (!newWidths[columnName]) {\n // Calculate default width using centralized function\n const propertyInfo = schemaPropertiesInfo[columnName]\n const headerOptions: HeaderOptions = {\n showPinIcon: arrayIndex === 0,\n hasDescription: !!propertyInfo?.description,\n }\n newWidths[columnName] = calculateDefaultColumnWidth(\n columnName,\n propertyInfo,\n headerOptions,\n )\n }\n })\n return newWidths\n })\n }, [columnNames, columnOrder, schemaPropertiesInfo])\n\n // Handler to toggle pin state for the first column only\n const handleTogglePin = useCallback(\n (columnIndex: number) => {\n // Validate columnIndex\n if (\n typeof columnIndex !== 'number' ||\n columnIndex < 0 ||\n !columnOrder ||\n columnIndex >= columnOrder.length\n ) {\n return\n }\n\n if (columnIndex !== 0) return // Only allow first column pinning\n\n setIsPinned(prev => !prev)\n },\n [columnOrder],\n )\n\n // Memoize the pinned columns set to prevent recalculation during scroll\n const pinnedColumnsSet = useMemo<Set<number>>(() => {\n return isPinned ? new Set([0]) : new Set()\n }, [isPinned])\n\n const colValues = useMemo(\n () =>\n modelColsToGrid(\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ),\n [\n columnNames,\n columnOrder,\n schemaPropertiesInfo,\n columnWidths,\n pinnedColumnsSet,\n handleTogglePin,\n ],\n )\n const [selectedRowIndex, setSelectedRowIndex] = useState<number | null>(null)\n\n // Memoize contextMenuComponent\n const contextMenuComponent = useMemo(\n () => (entityIsView ? renderViewContextMenu : renderRecordSetContextMenu),\n [entityIsView],\n )\n\n // Memoize addRowsComponent\n const addRowsComponent = useMemo(\n () => (entityIsView ? false : renderAddRowsComponent),\n [entityIsView],\n )\n\n // Wrap rowClassName in useCallback\n const rowClassNameCallback = useCallback(\n ({ rowData, rowIndex }: { rowData: DataGridRow; rowIndex: number }) =>\n classNames({\n 'row-valid': !!jsonSchema && rowData.__validationStatus === 'valid',\n 'row-invalid': !!jsonSchema && rowData.__validationStatus === 'invalid',\n 'row-unknown': !!jsonSchema && rowData.__validationStatus === 'pending',\n 'row-selected': selectedRowIndex === rowIndex,\n }),\n [jsonSchema, selectedRowIndex],\n )\n\n // Wrap cellClassName in useCallback\n const cellClassNameCallback = useCallback(\n ({\n rowData,\n rowIndex,\n columnId,\n }: {\n rowData: unknown\n rowIndex: number\n columnId?: string\n }) => {\n return getCellClassName({\n rowData: rowData as DataGridRow,\n rowIndex,\n columnId: columnId || '',\n selectedRowIndex,\n lastSelection,\n colValues,\n remoteSelections,\n })\n },\n [selectedRowIndex, lastSelection, colValues, remoteSelections],\n )\n\n // Wrap duplicateRow in useCallback\n const duplicateRowCallback = useCallback(\n ({ rowData }: { rowData: DataGridRow }) => ({\n ...rowData,\n }),\n [],\n )\n\n // Wrap onActiveCellChange in useCallback\n const handleActiveCellChange = useCallback(\n ({ cell }: { cell: { row: number; col: number } | null }) => {\n setSelectedRowIndex(cell ? cell.row : null)\n },\n [],\n )\n\n // Wrapper ref for the grid container\n const wrapperRef = useRef<HTMLDivElement | null>(null)\n\n // Store the active cell before column resize so we can restore it\n const activeCellBeforeResizeRef = useRef<{ col: number; row: number } | null>(\n null,\n )\n\n // Handle column resize callback\n const handleColumnResize = useCallback(\n (columnName: string, newWidth: number) => {\n // Save the current active cell before updating widths (which will trigger remount)\n if (gridRef.current) {\n const activeCell = gridRef.current.activeCell\n if (activeCell) {\n activeCellBeforeResizeRef.current = {\n col: activeCell.col,\n row: activeCell.row,\n }\n } else {\n // Explicitly clear the ref if there's no active cell\n activeCellBeforeResizeRef.current = null\n }\n }\n\n setColumnWidths(prev => ({\n ...prev,\n [columnName]: newWidth,\n }))\n },\n [gridRef],\n )\n\n // Setup column resize handles\n useColumnResizeHandles({\n wrapperRef,\n colValues,\n onColumnResize: handleColumnResize,\n })\n\n return (\n <div ref={wrapperRef} style={{ position: 'relative', width: '100%' }}>\n <DynamicDataSheetGrid\n ref={gridRef}\n value={rowValues}\n columns={colValues}\n autoAddRow={!entityIsView}\n disableSmartDelete\n addRowsComponent={addRowsComponent}\n contextMenuComponent={contextMenuComponent}\n rowKey={GRID_ROW_REACT_KEY_PROPERTY}\n rowClassName={rowClassNameCallback}\n cellClassName={cellClassNameCallback}\n duplicateRow={duplicateRowCallback}\n onChange={handleChange}\n onActiveCellChange={handleActiveCellChange}\n onSelectionChange={handleSelectionChange}\n />\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ type DataGridWebSocketConstructorArgs = {
|
|
|
7
7
|
onModelCreate?: (model: GridModel) => void;
|
|
8
8
|
onReplicaConnected?: () => void;
|
|
9
9
|
onReplicaDisconnected?: () => void;
|
|
10
|
+
onSyncStart?: () => void;
|
|
11
|
+
onSyncEnd?: () => void;
|
|
10
12
|
maxPayloadSizeBytes?: number;
|
|
11
13
|
socket?: WebSocket;
|
|
12
14
|
model?: GridModel | null;
|
|
@@ -26,6 +28,8 @@ export declare class DataGridWebSocket {
|
|
|
26
28
|
private onStatusChange;
|
|
27
29
|
private onReplicaConnected;
|
|
28
30
|
private onReplicaDisconnected;
|
|
31
|
+
private onSyncStart;
|
|
32
|
+
private onSyncEnd;
|
|
29
33
|
constructor(args: DataGridWebSocketConstructorArgs);
|
|
30
34
|
private attachSocketHandlers;
|
|
31
35
|
disconnect(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGridWebSocket.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGridWebSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAyC/D,KAAK,gCAAgC,GAAG;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACvE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAC1C,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAA;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,eAAe,CAAwB;IAE/C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,cAAc,CAAqD;IAC3E,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,qBAAqB,CAAY;
|
|
1
|
+
{"version":3,"file":"DataGridWebSocket.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGridWebSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAyC/D,KAAK,gCAAgC,GAAG;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACvE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAC1C,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,eAAe,CAAwB;IAE/C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,cAAc,CAAqD;IAC3E,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,qBAAqB,CAAY;IACzC,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,SAAS,CAAY;gBAEjB,IAAI,EAAE,gCAAgC;IA6ClD,OAAO,CAAC,oBAAoB;IAwBrB,UAAU;IAWjB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,kBAAkB;YAiBZ,qBAAqB;IAYnC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,WAAW;IAWZ,SAAS;IAIhB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,eAAe;YAUT,sBAAsB;CAYrC"}
|
|
@@ -30,9 +30,11 @@ var h = /* @__PURE__ */ function(e) {
|
|
|
30
30
|
onStatusChange;
|
|
31
31
|
onReplicaConnected;
|
|
32
32
|
onReplicaDisconnected;
|
|
33
|
+
onSyncStart;
|
|
34
|
+
onSyncEnd;
|
|
33
35
|
constructor(e) {
|
|
34
|
-
let { replicaId: t, url: n, onGridReady: r, onStatusChange: i, onModelCreate: o, onReplicaConnected: s, onReplicaDisconnected: l,
|
|
35
|
-
this.messageCounter = new a(), this.replicaId = t, this.maxPayloadSizeBytes =
|
|
36
|
+
let { replicaId: t, url: n, onGridReady: r, onStatusChange: i, onModelCreate: o, onReplicaConnected: s, onReplicaDisconnected: l, onSyncStart: u, onSyncEnd: d, maxPayloadSizeBytes: p, socket: m, model: h, patchThrottleMs: v } = e;
|
|
37
|
+
this.messageCounter = new a(), this.replicaId = t, this.maxPayloadSizeBytes = p ?? g, this.socket = m ?? new WebSocket(n), this.onModelCreate = o ?? c, this.onGridReady = r ?? c, this.onStatusChange = i ?? c, this.onReplicaConnected = s ?? c, this.onReplicaDisconnected = l ?? c, this.onSyncStart = u ?? c, this.onSyncEnd = d ?? c, h && (this.model = h), this.attachSocketHandlers(), this.throttledSendPatch = f(() => this.sendPatchImmediate(), v ?? _, {
|
|
36
38
|
leading: !1,
|
|
37
39
|
trailing: !0
|
|
38
40
|
});
|
|
@@ -93,13 +95,14 @@ var h = /* @__PURE__ */ function(e) {
|
|
|
93
95
|
async handleSnapshotPayload(e) {
|
|
94
96
|
console.debug("Received snapshot URL from server:", e);
|
|
95
97
|
try {
|
|
96
|
-
|
|
98
|
+
let t = await this.fetchAndDecodeSnapshot(e);
|
|
99
|
+
this.model = t.fork(this.replicaId), this.onModelCreate(this.model), this.sendClockSync();
|
|
97
100
|
} catch (e) {
|
|
98
101
|
console.error("Failed to fetch or decode snapshot", e);
|
|
99
102
|
}
|
|
100
103
|
}
|
|
101
104
|
handleResponseComplete() {
|
|
102
|
-
this.onGridReady(), console.debug("Clocks synchronized with server. Incrementing sequence number.");
|
|
105
|
+
this.onGridReady(), this.onSyncEnd(), console.debug("Clocks synchronized with server. Incrementing sequence number.");
|
|
103
106
|
}
|
|
104
107
|
handleNotification(e) {
|
|
105
108
|
let t = e.getMethodName();
|
|
@@ -120,9 +123,7 @@ var h = /* @__PURE__ */ function(e) {
|
|
|
120
123
|
}
|
|
121
124
|
{
|
|
122
125
|
let e = this.verboseEncoder.encode(this.model);
|
|
123
|
-
console.debug("New patch received, syncing data:", e.time);
|
|
124
|
-
let t = new r(this.messageCounter.getNext(), "synchronize-clock", e.time);
|
|
125
|
-
this.sendMessage(t);
|
|
126
|
+
console.debug("New patch received, syncing data:", e.time), this.sendSyncMessage(e.time);
|
|
126
127
|
}
|
|
127
128
|
break;
|
|
128
129
|
case "replica-connected":
|
|
@@ -153,7 +154,7 @@ var h = /* @__PURE__ */ function(e) {
|
|
|
153
154
|
}
|
|
154
155
|
sendSyncMessage(e) {
|
|
155
156
|
let t = new r(this.messageCounter.getNext(), "synchronize-clock", e ?? []);
|
|
156
|
-
this.sendMessage(t);
|
|
157
|
+
this.onSyncStart(), this.sendMessage(t);
|
|
157
158
|
}
|
|
158
159
|
async fetchAndDecodeSnapshot(e) {
|
|
159
160
|
let t = await (await (await s(e)).blob()).arrayBuffer(), n = m(new Uint8Array(t));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGridWebSocket.js","names":["GridModel","JsonRx","JsonRxMessage","JsonRxNotification","JsonRxRequestComplete","JsonRxResponse","JsonRxResponseComplete","MessageCounter","splitPatch","Model","CompactCodecPatch","decode","Encoder","VerboseEncoder","JsonCrdtVerboseLogicalTimestamp","noop","throttle","DebouncedFunc","Decoder","SnapshotDecoder","decodeCbor","IndexedFields","fetchWithExponentialTimeout","SynapseGridWebSocketMessagePayloadType","PATCH","SNAPSHOT","PATCHES","SynapseGridWebSocketMessagePayload","type","body","DataGridWebSocketConstructorArgs","replicaId","url","onGridReady","onStatusChange","isOpen","instance","DataGridWebSocket","onModelCreate","model","onReplicaConnected","onReplicaDisconnected","maxPayloadSizeBytes","socket","WebSocket","patchThrottleMs","DEFAULT_MAX_PAYLOAD_SIZE_BYTES","DEFAULT_PATCH_THROTTLE_MS","messageCounter","verboseEncoder","throttledSendPatch","snapshotDecoder","_this","constructor","args","attachSocketHandlers","sendPatchImmediate","leading","trailing","onopen","console","debug","onmessage","event","MessageEvent","data","handleMessage","error","onclose","onerror","Event","disconnect","flush","cancel","readyState","OPEN","close","warn","sendClockSync","patchesWereSent","verbModel","encode","sendSyncMessage","time","rawMessage","message","fromJson","JSON","parse","handleResponse","handleResponseComplete","handleNotification","payload","getPayload","handlePatchPayload","handleSnapshotPayload","encodedPatch","patches","map","fromPatches","fork","applyBatch","err","snapshotUrl","decodedModel","fetchAndDecodeSnapshot","methodName","getMethodName","undefined","msg","getNext","sendMessage","send","stringify","getJson","sendPatch","patch","api","hasOperationsToDispatch","ops","length","forEach","compactEncodedPatch","clock","Promise","response","blob","buffer","arrayBuffer","decodedFromCbor","Uint8Array"],"sources":["../../../src/components/DataGrid/DataGridWebSocket.ts"],"sourcesContent":["import { GridModel } from '@/components/DataGrid/DataGridTypes'\nimport JsonRx from '@/components/DataGrid/utils/json-rx/JsonRx'\nimport JsonRxMessage from '@/components/DataGrid/utils/json-rx/JsonRxMessage'\nimport JsonRxNotification from '@/components/DataGrid/utils/json-rx/JsonRxNotification'\nimport JsonRxRequestComplete from '@/components/DataGrid/utils/json-rx/JsonRxRequestComplete'\nimport JsonRxResponse from '@/components/DataGrid/utils/json-rx/JsonRxResponse'\nimport JsonRxResponseComplete from '@/components/DataGrid/utils/json-rx/JsonRxResponseComplete'\nimport MessageCounter from '@/components/DataGrid/utils/MessageCounter'\nimport { splitPatch } from '@/components/DataGrid/utils/splitPatch'\nimport { Model } from 'json-joy/lib/json-crdt'\nimport {\n CompactCodecPatch,\n decode,\n} from 'json-joy/lib/json-crdt-patch/codec/compact'\nimport { Encoder as VerboseEncoder } from 'json-joy/lib/json-crdt/codec/structural/verbose/Encoder'\nimport { JsonCrdtVerboseLogicalTimestamp } from 'json-joy/lib/json-crdt/codec/structural/verbose/types'\nimport noop from 'lodash-es/noop'\nimport throttle from 'lodash-es/throttle'\nimport { type DebouncedFunc } from 'lodash-es'\nimport { Decoder as SnapshotDecoder } from 'json-joy/lib/json-crdt/codec/indexed/binary/Decoder'\nimport { decode as decodeCbor } from 'cbor2'\nimport type { IndexedFields } from 'json-joy/lib/json-crdt/codec/indexed/binary'\nimport { fetchWithExponentialTimeout } from '@sage-bionetworks/synapse-client'\n\nenum SynapseGridWebSocketMessagePayloadType {\n PATCH = 'patch',\n SNAPSHOT = 'snapshot',\n PATCHES = 'patches',\n}\n\ntype SynapseGridWebSocketMessagePayload =\n | {\n type: SynapseGridWebSocketMessagePayloadType.PATCH\n body: CompactCodecPatch\n }\n | {\n type: SynapseGridWebSocketMessagePayloadType.PATCHES\n body: CompactCodecPatch[]\n }\n | { type: SynapseGridWebSocketMessagePayloadType.SNAPSHOT; body: string }\n\ntype DataGridWebSocketConstructorArgs = {\n replicaId: number\n url: string\n onGridReady?: () => void\n onStatusChange?: (isOpen: boolean, instance: DataGridWebSocket) => void\n onModelCreate?: (model: GridModel) => void\n onReplicaConnected?: () => void\n onReplicaDisconnected?: () => void\n maxPayloadSizeBytes?: number\n socket?: WebSocket\n model?: GridModel | null\n patchThrottleMs?: number\n}\n\n// API Gateway WebSocket payload size limit is 32 KB per message\n// There is some overhead we aren't computing in our utility, namely the size of the patch header and the communication protocol itself\n// So add some buffer\nconst DEFAULT_MAX_PAYLOAD_SIZE_BYTES = 30 * 1024 // 30 KB\nconst DEFAULT_PATCH_THROTTLE_MS = 250\n\nexport class DataGridWebSocket {\n private socket: WebSocket\n private model: GridModel | null = null\n private messageCounter: MessageCounter\n private replicaId: number\n private verboseEncoder = new VerboseEncoder()\n private maxPayloadSizeBytes: number\n private throttledSendPatch: DebouncedFunc<() => void>\n private snapshotDecoder = new SnapshotDecoder()\n\n private onModelCreate: (model: GridModel) => void\n private onGridReady: () => void\n private onStatusChange: (isOpen: boolean, _this: DataGridWebSocket) => void\n private onReplicaConnected: () => void\n private onReplicaDisconnected: () => void\n\n constructor(args: DataGridWebSocketConstructorArgs) {\n const {\n replicaId,\n url,\n onGridReady,\n onStatusChange,\n onModelCreate,\n onReplicaConnected,\n onReplicaDisconnected,\n maxPayloadSizeBytes,\n socket,\n model,\n patchThrottleMs,\n } = args\n this.messageCounter = new MessageCounter()\n this.replicaId = replicaId\n this.maxPayloadSizeBytes =\n maxPayloadSizeBytes ?? DEFAULT_MAX_PAYLOAD_SIZE_BYTES\n this.socket = socket ?? new WebSocket(url)\n\n // Assign callbacks, falling back to no-ops\n this.onModelCreate = onModelCreate ?? noop\n this.onGridReady = onGridReady ?? noop\n this.onStatusChange = onStatusChange ?? noop\n this.onReplicaConnected = onReplicaConnected ?? noop\n this.onReplicaDisconnected = onReplicaDisconnected ?? noop\n\n // Restore existing model if provided\n if (model) {\n this.model = model\n }\n\n this.attachSocketHandlers()\n\n this.throttledSendPatch = throttle(\n () => this.sendPatchImmediate(),\n patchThrottleMs ?? DEFAULT_PATCH_THROTTLE_MS,\n { leading: false, trailing: true },\n )\n }\n\n private attachSocketHandlers() {\n this.socket.onopen = () => {\n console.debug('Connected to the WebSocket server')\n this.onStatusChange(true, this)\n }\n\n this.socket.onmessage = (event: MessageEvent) => {\n if (typeof event.data === 'string') {\n this.handleMessage(event.data)\n } else {\n console.error('Received non-string message data:', event.data)\n }\n }\n\n this.socket.onclose = () => {\n console.debug('Disconnected from the WebSocket server')\n this.onStatusChange(false, this)\n }\n\n this.socket.onerror = (error: Event) => {\n console.error('WebSocket error:', error)\n }\n }\n\n public disconnect() {\n this.throttledSendPatch.flush()\n this.throttledSendPatch.cancel()\n if (this.socket.readyState === WebSocket.OPEN) {\n this.socket.close()\n console.debug('WebSocket connection closed')\n } else {\n console.warn('WebSocket is not open. No action taken.')\n }\n }\n\n /**\n * Flushes the local model clock and sends the resulting patch (or a clock-sync\n * message) to the server so that both sides converge.\n */\n private sendClockSync() {\n if (!this.model) {\n console.error('Model is not initialized. Cannot sync model.')\n return\n }\n\n const patchesWereSent = this.sendPatchImmediate()\n if (!patchesWereSent) {\n // We've flushed all of our changes, so now we can receive changes from the server\n const verbModel = this.verboseEncoder.encode(this.model)\n this.sendSyncMessage(verbModel.time)\n }\n }\n\n private handleMessage(rawMessage: string) {\n const message = JsonRx.fromJson(JSON.parse(rawMessage))\n if (message instanceof JsonRxResponse) {\n this.handleResponse(\n message as JsonRxResponse<SynapseGridWebSocketMessagePayload>,\n )\n } else if (message instanceof JsonRxResponseComplete) {\n this.handleResponseComplete()\n } else if (message instanceof JsonRxNotification) {\n this.handleNotification(message)\n } else {\n console.warn('Unexpected WebSocket message format:', message)\n }\n }\n\n private handleResponse(\n message: JsonRxResponse<SynapseGridWebSocketMessagePayload>,\n ) {\n const payload = message.getPayload()\n\n switch (payload.type) {\n case SynapseGridWebSocketMessagePayloadType.PATCH:\n this.handlePatchPayload([payload.body])\n break\n\n case SynapseGridWebSocketMessagePayloadType.PATCHES:\n void this.handlePatchPayload(payload.body)\n break\n\n case SynapseGridWebSocketMessagePayloadType.SNAPSHOT:\n void this.handleSnapshotPayload(payload.body)\n break\n\n default:\n console.warn('Unknown payload type:', payload)\n break\n }\n }\n\n private handlePatchPayload(encodedPatch: CompactCodecPatch[]) {\n try {\n const patches = encodedPatch.map(decode)\n if (!this.model) {\n this.model = Model.fromPatches(patches).fork(\n this.replicaId,\n ) as unknown as GridModel\n this.onModelCreate(this.model)\n } else {\n this.model.applyBatch(patches)\n }\n this.sendClockSync()\n } catch (err) {\n console.error('Failed to apply patches or send clock:', err)\n }\n }\n\n private async handleSnapshotPayload(snapshotUrl: string) {\n console.debug('Received snapshot URL from server:', snapshotUrl)\n try {\n const decodedModel = await this.fetchAndDecodeSnapshot(snapshotUrl)\n this.model = decodedModel.fork(this.replicaId) as unknown as GridModel\n this.onModelCreate(this.model)\n this.sendClockSync()\n } catch (err) {\n console.error('Failed to fetch or decode snapshot', err)\n }\n }\n\n private handleResponseComplete() {\n // Clocks are in sync, no further action needed\n this.onGridReady()\n console.debug(\n 'Clocks synchronized with server. Incrementing sequence number.',\n )\n }\n\n private handleNotification(message: JsonRxNotification) {\n const methodName = message.getMethodName()\n console.debug('Notification received from server:', methodName)\n\n switch (methodName) {\n case 'ping':\n console.debug('Received ping from server')\n break\n\n case 'connected':\n console.debug('Server ready to receive patches')\n this.sendSyncMessage(\n this.model ? this.verboseEncoder.encode(this.model).time : undefined,\n )\n break\n\n case 'error':\n console.warn('Error from server:', message.getPayload())\n break\n\n case 'new-patch':\n if (!this.model) {\n console.warn(\n \"Model is not initialized. Cannot handle 'new-patch' message.\",\n )\n break\n }\n {\n const verbModel = this.verboseEncoder.encode(this.model)\n console.debug('New patch received, syncing data:', verbModel.time)\n const msg = new JsonRxRequestComplete(\n this.messageCounter.getNext(),\n 'synchronize-clock',\n verbModel.time,\n )\n this.sendMessage(msg)\n }\n break\n\n case 'replica-connected':\n console.debug('A replica connected to the grid session')\n this.onReplicaConnected()\n break\n\n case 'replica-disconnected':\n console.debug('A replica disconnected from the grid session')\n this.onReplicaDisconnected()\n break\n\n default:\n console.warn('Unknown notification method:', methodName)\n break\n }\n }\n\n private sendMessage(message: JsonRxMessage) {\n if (this.socket.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify(message.getJson()))\n } else {\n console.error(\n 'WebSocket is not open. Unable to send message. Current state:',\n this.socket.readyState,\n )\n }\n }\n\n public sendPatch() {\n this.throttledSendPatch()\n }\n\n /**\n * @returns true if one or more patches were sent\n */\n private sendPatchImmediate(): boolean {\n if (!this.model) {\n console.warn('Model is not initialized. Cannot send patch.')\n return false\n }\n\n const patch = this.model.api.flush()\n const hasOperationsToDispatch = patch.ops.length > 0\n\n if (hasOperationsToDispatch) {\n // Split the patch if it exceeds the maximum size we can send in a single frame\n const patches = splitPatch(patch, this.maxPayloadSizeBytes)\n patches.forEach(compactEncodedPatch => {\n console.debug('Sending patch to server:', compactEncodedPatch)\n const msg = new JsonRxRequestComplete(\n this.messageCounter.getNext(),\n 'patch',\n compactEncodedPatch,\n )\n this.sendMessage(msg)\n })\n }\n\n return hasOperationsToDispatch\n }\n\n private sendSyncMessage(clock?: number | JsonCrdtVerboseLogicalTimestamp[]) {\n const message = new JsonRxRequestComplete(\n this.messageCounter.getNext(),\n 'synchronize-clock',\n clock ?? [],\n )\n this.sendMessage(message)\n }\n\n private async fetchAndDecodeSnapshot(\n snapshotUrl: string,\n ): Promise<GridModel> {\n const response = await fetchWithExponentialTimeout(snapshotUrl)\n const blob = await response.blob()\n const buffer = await blob.arrayBuffer()\n const decodedFromCbor = decodeCbor(new Uint8Array(buffer))\n const decodedModel = this.snapshotDecoder.decode(\n decodedFromCbor as IndexedFields,\n ) as unknown as GridModel\n return decodedModel\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataGridWebSocket.js","names":["GridModel","JsonRx","JsonRxMessage","JsonRxNotification","JsonRxRequestComplete","JsonRxResponse","JsonRxResponseComplete","MessageCounter","splitPatch","Model","CompactCodecPatch","decode","Encoder","VerboseEncoder","JsonCrdtVerboseLogicalTimestamp","noop","throttle","DebouncedFunc","Decoder","SnapshotDecoder","decodeCbor","IndexedFields","fetchWithExponentialTimeout","SynapseGridWebSocketMessagePayloadType","PATCH","SNAPSHOT","PATCHES","SynapseGridWebSocketMessagePayload","type","body","DataGridWebSocketConstructorArgs","replicaId","url","onGridReady","onStatusChange","isOpen","instance","DataGridWebSocket","onModelCreate","model","onReplicaConnected","onReplicaDisconnected","onSyncStart","onSyncEnd","maxPayloadSizeBytes","socket","WebSocket","patchThrottleMs","DEFAULT_MAX_PAYLOAD_SIZE_BYTES","DEFAULT_PATCH_THROTTLE_MS","messageCounter","verboseEncoder","throttledSendPatch","snapshotDecoder","_this","constructor","args","attachSocketHandlers","sendPatchImmediate","leading","trailing","onopen","console","debug","onmessage","event","MessageEvent","data","handleMessage","error","onclose","onerror","Event","disconnect","flush","cancel","readyState","OPEN","close","warn","sendClockSync","patchesWereSent","verbModel","encode","sendSyncMessage","time","rawMessage","message","fromJson","JSON","parse","handleResponse","handleResponseComplete","handleNotification","payload","getPayload","handlePatchPayload","handleSnapshotPayload","encodedPatch","patches","map","fromPatches","fork","applyBatch","err","snapshotUrl","decodedModel","fetchAndDecodeSnapshot","methodName","getMethodName","undefined","sendMessage","send","stringify","getJson","sendPatch","patch","api","hasOperationsToDispatch","ops","length","forEach","compactEncodedPatch","msg","getNext","clock","Promise","response","blob","buffer","arrayBuffer","decodedFromCbor","Uint8Array"],"sources":["../../../src/components/DataGrid/DataGridWebSocket.ts"],"sourcesContent":["import { GridModel } from '@/components/DataGrid/DataGridTypes'\nimport JsonRx from '@/components/DataGrid/utils/json-rx/JsonRx'\nimport JsonRxMessage from '@/components/DataGrid/utils/json-rx/JsonRxMessage'\nimport JsonRxNotification from '@/components/DataGrid/utils/json-rx/JsonRxNotification'\nimport JsonRxRequestComplete from '@/components/DataGrid/utils/json-rx/JsonRxRequestComplete'\nimport JsonRxResponse from '@/components/DataGrid/utils/json-rx/JsonRxResponse'\nimport JsonRxResponseComplete from '@/components/DataGrid/utils/json-rx/JsonRxResponseComplete'\nimport MessageCounter from '@/components/DataGrid/utils/MessageCounter'\nimport { splitPatch } from '@/components/DataGrid/utils/splitPatch'\nimport { Model } from 'json-joy/lib/json-crdt'\nimport {\n CompactCodecPatch,\n decode,\n} from 'json-joy/lib/json-crdt-patch/codec/compact'\nimport { Encoder as VerboseEncoder } from 'json-joy/lib/json-crdt/codec/structural/verbose/Encoder'\nimport { JsonCrdtVerboseLogicalTimestamp } from 'json-joy/lib/json-crdt/codec/structural/verbose/types'\nimport noop from 'lodash-es/noop'\nimport throttle from 'lodash-es/throttle'\nimport { type DebouncedFunc } from 'lodash-es'\nimport { Decoder as SnapshotDecoder } from 'json-joy/lib/json-crdt/codec/indexed/binary/Decoder'\nimport { decode as decodeCbor } from 'cbor2'\nimport type { IndexedFields } from 'json-joy/lib/json-crdt/codec/indexed/binary'\nimport { fetchWithExponentialTimeout } from '@sage-bionetworks/synapse-client'\n\nenum SynapseGridWebSocketMessagePayloadType {\n PATCH = 'patch',\n SNAPSHOT = 'snapshot',\n PATCHES = 'patches',\n}\n\ntype SynapseGridWebSocketMessagePayload =\n | {\n type: SynapseGridWebSocketMessagePayloadType.PATCH\n body: CompactCodecPatch\n }\n | {\n type: SynapseGridWebSocketMessagePayloadType.PATCHES\n body: CompactCodecPatch[]\n }\n | { type: SynapseGridWebSocketMessagePayloadType.SNAPSHOT; body: string }\n\ntype DataGridWebSocketConstructorArgs = {\n replicaId: number\n url: string\n onGridReady?: () => void\n onStatusChange?: (isOpen: boolean, instance: DataGridWebSocket) => void\n onModelCreate?: (model: GridModel) => void\n onReplicaConnected?: () => void\n onReplicaDisconnected?: () => void\n onSyncStart?: () => void\n onSyncEnd?: () => void\n maxPayloadSizeBytes?: number\n socket?: WebSocket\n model?: GridModel | null\n patchThrottleMs?: number\n}\n\n// API Gateway WebSocket payload size limit is 32 KB per message\n// There is some overhead we aren't computing in our utility, namely the size of the patch header and the communication protocol itself\n// So add some buffer\nconst DEFAULT_MAX_PAYLOAD_SIZE_BYTES = 30 * 1024 // 30 KB\nconst DEFAULT_PATCH_THROTTLE_MS = 250\n\nexport class DataGridWebSocket {\n private socket: WebSocket\n private model: GridModel | null = null\n private messageCounter: MessageCounter\n private replicaId: number\n private verboseEncoder = new VerboseEncoder()\n private maxPayloadSizeBytes: number\n private throttledSendPatch: DebouncedFunc<() => void>\n private snapshotDecoder = new SnapshotDecoder()\n\n private onModelCreate: (model: GridModel) => void\n private onGridReady: () => void\n private onStatusChange: (isOpen: boolean, _this: DataGridWebSocket) => void\n private onReplicaConnected: () => void\n private onReplicaDisconnected: () => void\n private onSyncStart: () => void\n private onSyncEnd: () => void\n\n constructor(args: DataGridWebSocketConstructorArgs) {\n const {\n replicaId,\n url,\n onGridReady,\n onStatusChange,\n onModelCreate,\n onReplicaConnected,\n onReplicaDisconnected,\n onSyncStart,\n onSyncEnd,\n maxPayloadSizeBytes,\n socket,\n model,\n patchThrottleMs,\n } = args\n this.messageCounter = new MessageCounter()\n this.replicaId = replicaId\n this.maxPayloadSizeBytes =\n maxPayloadSizeBytes ?? DEFAULT_MAX_PAYLOAD_SIZE_BYTES\n this.socket = socket ?? new WebSocket(url)\n\n // Assign callbacks, falling back to no-ops\n this.onModelCreate = onModelCreate ?? noop\n this.onGridReady = onGridReady ?? noop\n this.onStatusChange = onStatusChange ?? noop\n this.onReplicaConnected = onReplicaConnected ?? noop\n this.onReplicaDisconnected = onReplicaDisconnected ?? noop\n this.onSyncStart = onSyncStart ?? noop\n this.onSyncEnd = onSyncEnd ?? noop\n\n // Restore existing model if provided\n if (model) {\n this.model = model\n }\n\n this.attachSocketHandlers()\n\n this.throttledSendPatch = throttle(\n () => this.sendPatchImmediate(),\n patchThrottleMs ?? DEFAULT_PATCH_THROTTLE_MS,\n { leading: false, trailing: true },\n )\n }\n\n private attachSocketHandlers() {\n this.socket.onopen = () => {\n console.debug('Connected to the WebSocket server')\n this.onStatusChange(true, this)\n }\n\n this.socket.onmessage = (event: MessageEvent) => {\n if (typeof event.data === 'string') {\n this.handleMessage(event.data)\n } else {\n console.error('Received non-string message data:', event.data)\n }\n }\n\n this.socket.onclose = () => {\n console.debug('Disconnected from the WebSocket server')\n this.onStatusChange(false, this)\n }\n\n this.socket.onerror = (error: Event) => {\n console.error('WebSocket error:', error)\n }\n }\n\n public disconnect() {\n this.throttledSendPatch.flush()\n this.throttledSendPatch.cancel()\n if (this.socket.readyState === WebSocket.OPEN) {\n this.socket.close()\n console.debug('WebSocket connection closed')\n } else {\n console.warn('WebSocket is not open. No action taken.')\n }\n }\n\n /**\n * Flushes the local model clock and sends the resulting patch (or a clock-sync\n * message) to the server so that both sides converge.\n */\n private sendClockSync() {\n if (!this.model) {\n console.error('Model is not initialized. Cannot sync model.')\n return\n }\n\n const patchesWereSent = this.sendPatchImmediate()\n if (!patchesWereSent) {\n // We've flushed all of our changes, so now we can receive changes from the server\n const verbModel = this.verboseEncoder.encode(this.model)\n this.sendSyncMessage(verbModel.time)\n }\n }\n\n private handleMessage(rawMessage: string) {\n const message = JsonRx.fromJson(JSON.parse(rawMessage))\n if (message instanceof JsonRxResponse) {\n this.handleResponse(\n message as JsonRxResponse<SynapseGridWebSocketMessagePayload>,\n )\n } else if (message instanceof JsonRxResponseComplete) {\n this.handleResponseComplete()\n } else if (message instanceof JsonRxNotification) {\n this.handleNotification(message)\n } else {\n console.warn('Unexpected WebSocket message format:', message)\n }\n }\n\n private handleResponse(\n message: JsonRxResponse<SynapseGridWebSocketMessagePayload>,\n ) {\n const payload = message.getPayload()\n\n switch (payload.type) {\n case SynapseGridWebSocketMessagePayloadType.PATCH:\n this.handlePatchPayload([payload.body])\n break\n\n case SynapseGridWebSocketMessagePayloadType.PATCHES:\n void this.handlePatchPayload(payload.body)\n break\n\n case SynapseGridWebSocketMessagePayloadType.SNAPSHOT:\n void this.handleSnapshotPayload(payload.body)\n break\n\n default:\n console.warn('Unknown payload type:', payload)\n break\n }\n }\n\n private handlePatchPayload(encodedPatch: CompactCodecPatch[]) {\n try {\n const patches = encodedPatch.map(decode)\n if (!this.model) {\n this.model = Model.fromPatches(patches).fork(\n this.replicaId,\n ) as unknown as GridModel\n this.onModelCreate(this.model)\n } else {\n this.model.applyBatch(patches)\n }\n this.sendClockSync()\n } catch (err) {\n console.error('Failed to apply patches or send clock:', err)\n }\n }\n\n private async handleSnapshotPayload(snapshotUrl: string) {\n console.debug('Received snapshot URL from server:', snapshotUrl)\n try {\n const decodedModel = await this.fetchAndDecodeSnapshot(snapshotUrl)\n this.model = decodedModel.fork(this.replicaId) as unknown as GridModel\n this.onModelCreate(this.model)\n this.sendClockSync()\n } catch (err) {\n console.error('Failed to fetch or decode snapshot', err)\n }\n }\n\n private handleResponseComplete() {\n // Clocks are in sync, no further action needed\n this.onGridReady()\n this.onSyncEnd()\n console.debug(\n 'Clocks synchronized with server. Incrementing sequence number.',\n )\n }\n\n private handleNotification(message: JsonRxNotification) {\n const methodName = message.getMethodName()\n console.debug('Notification received from server:', methodName)\n\n switch (methodName) {\n case 'ping':\n console.debug('Received ping from server')\n break\n\n case 'connected':\n console.debug('Server ready to receive patches')\n this.sendSyncMessage(\n this.model ? this.verboseEncoder.encode(this.model).time : undefined,\n )\n break\n\n case 'error':\n console.warn('Error from server:', message.getPayload())\n break\n\n case 'new-patch':\n if (!this.model) {\n console.warn(\n \"Model is not initialized. Cannot handle 'new-patch' message.\",\n )\n break\n }\n {\n const verbModel = this.verboseEncoder.encode(this.model)\n console.debug('New patch received, syncing data:', verbModel.time)\n this.sendSyncMessage(verbModel.time)\n }\n break\n\n case 'replica-connected':\n console.debug('A replica connected to the grid session')\n this.onReplicaConnected()\n break\n\n case 'replica-disconnected':\n console.debug('A replica disconnected from the grid session')\n this.onReplicaDisconnected()\n break\n\n default:\n console.warn('Unknown notification method:', methodName)\n break\n }\n }\n\n private sendMessage(message: JsonRxMessage) {\n if (this.socket.readyState === WebSocket.OPEN) {\n this.socket.send(JSON.stringify(message.getJson()))\n } else {\n console.error(\n 'WebSocket is not open. Unable to send message. Current state:',\n this.socket.readyState,\n )\n }\n }\n\n public sendPatch() {\n this.throttledSendPatch()\n }\n\n /**\n * @returns true if one or more patches were sent\n */\n private sendPatchImmediate(): boolean {\n if (!this.model) {\n console.warn('Model is not initialized. Cannot send patch.')\n return false\n }\n\n const patch = this.model.api.flush()\n const hasOperationsToDispatch = patch.ops.length > 0\n\n if (hasOperationsToDispatch) {\n // Split the patch if it exceeds the maximum size we can send in a single frame\n const patches = splitPatch(patch, this.maxPayloadSizeBytes)\n patches.forEach(compactEncodedPatch => {\n console.debug('Sending patch to server:', compactEncodedPatch)\n const msg = new JsonRxRequestComplete(\n this.messageCounter.getNext(),\n 'patch',\n compactEncodedPatch,\n )\n this.sendMessage(msg)\n })\n }\n\n return hasOperationsToDispatch\n }\n\n private sendSyncMessage(clock?: number | JsonCrdtVerboseLogicalTimestamp[]) {\n const message = new JsonRxRequestComplete(\n this.messageCounter.getNext(),\n 'synchronize-clock',\n clock ?? [],\n )\n this.onSyncStart()\n this.sendMessage(message)\n }\n\n private async fetchAndDecodeSnapshot(\n snapshotUrl: string,\n ): Promise<GridModel> {\n const response = await fetchWithExponentialTimeout(snapshotUrl)\n const blob = await response.blob()\n const buffer = await blob.arrayBuffer()\n const decodedFromCbor = decodeCbor(new Uint8Array(buffer))\n const decodedModel = this.snapshotDecoder.decode(\n decodedFromCbor as IndexedFields,\n ) as unknown as GridModel\n return decodedModel\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SynapseGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"names":[],"mappings":"AAcA,OAAO,EACL,iBAAiB,EAElB,MAAM,kCAAkC,CAAA;AA8BzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACpD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,CAAA;AAED,QAAA,MAAM,WAAW,gHAsfhB,CAAA;AAED,eAAe,WAAW,CAAA"}
|