synapse-react-client 4.0.9 → 4.0.10
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/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.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 +113 -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.js.map +1 -1
- 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/json-rx/JsonRx.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/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.js.map +1 -1
- 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.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/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.js.map +1 -1
- package/dist/components/Forum/DiscussionSearchResult.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/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/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.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.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.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/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.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/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/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 +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseGrid.js","names":["GridMenuButton","UploadCsvToGridButton","ExportCsvFromGridButton","useGetSchemaForGrid","MergeGridWithSourceTableButton","computeReplicaSelectionModel","modelRowsToGrid","SkeletonTable","useGetEntity","getSchemaPropertiesInfo","SmartToyTwoTone","Stack","Tooltip","Grid","CreateGridRequest","GridSession","ClickableJsonCrdt","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","DataSheetGridRef","SelectionWithId","GridAgentChat","DataGrid","DataGridRow","GridModel","Operation","useGridUndoRedo","StartGridSession","StartGridSessionHandle","useDataGridWebSocket","applyModelChange","ModelChange","removeNoOpOperations","mapOperationsToModelChanges","useGetCurrentUserBundle","useListGridReplicas","useGridReplicaUsers","useRemoteSelections","enrichRowsWithChangeInfo","CertificationRequirement","ValidationAlert","SynapseGridProps","agentRegistrationId","showDebugInfo","SynapseGridHandle","initializeGrid","request","loadExistingSession","sessionId","SynapseGrid","ref","session","setSession","replicaId","setReplicaId","chatOpen","setChatOpen","lastSelection","setLastSelection","startGridSessionRef","gridRef","data","userBundle","isLoading","replicas","refetch","refetchReplicas","handleReplicaConnectionChange","currentUserId","userId","String","undefined","replicaUserMap","current","handleStartSession","handleLoadSession","isConnected","websocketInstance","hasCompletedInitialSync","model","modelSnapshot","connect","presignedUrl","hasSufficientData","onGridReady","onReplicaConnected","onReplicaDisconnected","websocketInstanceRef","lastConnectParamsRef","nextParams","prevParams","setActiveCell","jsonSchema","entityData","sourceEntityId","enabled","entityIsView","concreteType","schemaPropertiesInfo","connectionStatus","remoteSelections","rowValues","enrichedRowValues","commit","sendPatch","applyAndCommitChanges","modelChanges","forEach","change","applyModelChangeFromUndoRedo","console","error","type","undoUI","redoUI","addOperationsToUndoStack","clearRedoStack","handleChange","newValue","operations","length","handleSelectionChange","opts","selection","replicaSelectionModel","toString","selectedRowIndexRef","forceUpdate","handleSelectedRowChange","rowIndex","_row","isCertified","xs","xl","gridJsonSchema$Id","substring","color","connectedReplicas","filter","r","map","i","margin","fontSize","JSON","stringify","cursor","textDecoration","marginBottom","justifyContent","columnNames","columnOrder","padding","border","maxHeight","overflowY"],"sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport UploadCsvToGridButton from '@/components/DataGrid/components/UploadCsvToGridButton'\nimport ExportCsvFromGridButton from '@/components/DataGrid/components/ExportCsvFromGridButton'\nimport useGetSchemaForGrid from '@/components/DataGrid/hooks/useGetSchemaForGrid'\nimport MergeGridWithSourceTableButton from '@/components/DataGrid/MergeGridWithSourceTableButton'\nimport computeReplicaSelectionModel from '@/components/DataGrid/utils/computeReplicaSelectionModel'\nimport modelRowsToGrid from '@/components/DataGrid/utils/modelRowsToGrid'\nimport { SkeletonTable } from '@/components/index'\nimport { useGetEntity } from '@/synapse-queries/index'\nimport { getSchemaPropertiesInfo } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport { SmartToyTwoTone } from '@mui/icons-material'\nimport { Stack, Tooltip } from '@mui/material'\nimport Grid from '@mui/material/Grid'\nimport {\n CreateGridRequest,\n GridSession,\n} from '@sage-bionetworks/synapse-client'\nimport { ClickableJsonCrdt } from 'clickable-json'\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { DataSheetGridRef } from '@sage-bionetworks/react-datasheet-grid'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport GridAgentChat from '../SynapseChat/GridAgentChat'\nimport DataGrid from './DataGrid'\nimport { DataGridRow, GridModel, Operation } from './DataGridTypes'\nimport { useGridUndoRedo } from './hooks/useGridUndoRedo'\nimport { StartGridSession, StartGridSessionHandle } from './StartGridSession'\nimport { useDataGridWebSocket } from './useDataGridWebsocket'\nimport { applyModelChange, ModelChange } from './utils/applyModelChange'\nimport { removeNoOpOperations } from './utils/DataGridUtils'\nimport { mapOperationsToModelChanges } from './utils/mapOperationsToModelChanges'\nimport { useGetCurrentUserBundle } from '@/synapse-queries'\nimport { useListGridReplicas } from '@/synapse-queries/grid/useGridSession'\nimport { useGridReplicaUsers } from './hooks/useGridReplicaUsers'\nimport { useRemoteSelections } from './hooks/useRemoteSelections'\nimport { enrichRowsWithChangeInfo } from './utils/enrichRowsWithChangeInfo'\nimport CertificationRequirement from '@/components/AccessRequirementList/RequirementItem/CertificationRequirement'\nimport { ValidationAlert } from './components/ValidationAlert'\n\nexport type SynapseGridProps = {\n agentRegistrationId?: string\n showDebugInfo?: boolean\n}\n\nexport type SynapseGridHandle = {\n initializeGrid: (request: CreateGridRequest) => void\n loadExistingSession: (sessionId: string) => void\n}\n\nconst SynapseGrid = forwardRef<SynapseGridHandle, SynapseGridProps>(\n ({ agentRegistrationId, showDebugInfo = false }, ref) => {\n const [session, setSession] = useState<GridSession | null>(null)\n const [replicaId, setReplicaId] = useState<number | null>(null)\n const [chatOpen, setChatOpen] = useState(false)\n const [lastSelection, setLastSelection] = useState<SelectionWithId | null>(\n null,\n )\n\n const startGridSessionRef = useRef<StartGridSessionHandle | null>(null)\n const gridRef = useRef<DataSheetGridRef | null>(null)\n\n const { data: userBundle, isLoading } = useGetCurrentUserBundle()\n\n const { data: replicas = [], refetch: refetchReplicas } =\n useListGridReplicas(session?.sessionId)\n\n const handleReplicaConnectionChange = useCallback(() => {\n void refetchReplicas()\n }, [refetchReplicas])\n\n // ── Attribution infrastructure ─────────────────────────────────────────\n const currentUserId =\n userBundle?.userId != null ? String(userBundle.userId) : undefined\n\n const replicaUserMap = useGridReplicaUsers(\n replicas,\n replicaId,\n currentUserId,\n )\n\n useImperativeHandle(\n ref,\n () => ({\n initializeGrid: (request: CreateGridRequest) => {\n if (startGridSessionRef.current) {\n startGridSessionRef.current.handleStartSession(request)\n }\n },\n loadExistingSession: (sessionId: string) => {\n if (startGridSessionRef.current) {\n startGridSessionRef.current.handleLoadSession(sessionId)\n }\n },\n }),\n [],\n )\n\n // WebSocket state\n const {\n isConnected,\n websocketInstance,\n hasCompletedInitialSync,\n model,\n modelSnapshot,\n connect,\n presignedUrl,\n hasSufficientData,\n } = useDataGridWebSocket({\n onGridReady: handleReplicaConnectionChange,\n onReplicaConnected: handleReplicaConnectionChange,\n onReplicaDisconnected: handleReplicaConnectionChange,\n })\n\n const websocketInstanceRef = useRef<typeof websocketInstance | null>(null)\n\n useEffect(() => {\n websocketInstanceRef.current = websocketInstance\n }, [websocketInstance])\n\n // Track last connection parameters to avoid redundant connections\n const lastConnectParamsRef = useRef<{\n replicaId: number\n sessionId: string\n } | null>(null)\n\n useEffect(() => {\n if (\n replicaId === null ||\n replicaId === undefined ||\n !session?.sessionId\n ) {\n lastConnectParamsRef.current = null\n return\n }\n\n const nextParams = {\n replicaId,\n sessionId: session.sessionId,\n }\n\n const prevParams = lastConnectParamsRef.current\n\n if (\n prevParams &&\n prevParams.replicaId === nextParams.replicaId &&\n prevParams.sessionId === nextParams.sessionId\n ) {\n return\n }\n\n lastConnectParamsRef.current = nextParams\n connect(replicaId, session.sessionId)\n }, [replicaId, session?.sessionId, connect])\n\n // Reset grid state when model is reset (new session/replica)\n useEffect(() => {\n if (model === null) {\n // Clear any grid-specific state when starting a new session\n setLastSelection(null)\n // Clear active cell if grid exists\n if (gridRef.current) {\n gridRef.current.setActiveCell(null)\n }\n }\n }, [model])\n\n const jsonSchema = useGetSchemaForGrid(session)\n\n // Grid behaves differently for views vs recordSets\n // Note for future: can get modifiedOn to refresh grid when view changes\n const { data: entityData } = useGetEntity(\n session?.sourceEntityId,\n undefined,\n {\n enabled: !!session?.sourceEntityId,\n },\n )\n\n const entityIsView =\n entityData?.concreteType ===\n 'org.sagebionetworks.repo.model.table.EntityView'\n\n // Process schema properties once\n const schemaPropertiesInfo = useMemo(() => {\n return getSchemaPropertiesInfo(jsonSchema ?? null)\n }, [jsonSchema])\n\n const connectionStatus = isConnected ? 'Connected' : 'Disconnected'\n\n const remoteSelections = useRemoteSelections(\n modelSnapshot,\n model,\n replicas,\n replicaId,\n )\n\n // Transform the model view rows and columns to DataSheetGrid format\n const rowValues = useMemo(\n () => (modelSnapshot ? modelRowsToGrid(model, modelSnapshot) : []),\n [model, modelSnapshot],\n )\n\n // Enrich rows with per-cell change attribution for CSS indicators and tooltips\n const enrichedRowValues = useMemo(\n () =>\n enrichRowsWithChangeInfo(\n rowValues,\n model,\n modelSnapshot,\n replicaUserMap,\n ),\n [rowValues, model, modelSnapshot, replicaUserMap],\n )\n\n const commit = useCallback(() => {\n if (!isConnected || !websocketInstanceRef.current) {\n return\n }\n\n websocketInstanceRef.current.sendPatch()\n }, [isConnected, websocketInstanceRef])\n\n useEffect(() => {\n if (isConnected) {\n commit()\n }\n }, [isConnected, commit])\n\n const applyAndCommitChanges = useCallback(\n (model: GridModel, modelChanges: ModelChange[]) => {\n // Apply each change to the model\n modelChanges.forEach(change => {\n applyModelChange(model, change, schemaPropertiesInfo)\n })\n\n commit()\n },\n [commit, schemaPropertiesInfo],\n )\n\n const applyModelChangeFromUndoRedo = useCallback(\n (change: ModelChange) => {\n if (!model) {\n console.error('Model is not initialized')\n return\n }\n\n if (change.type === 'DELETE' && gridRef.current) {\n // The user may have set a cell as active that we are removing with an 'undo'. In that case, clear the active state\n gridRef.current.setActiveCell(null)\n }\n\n applyAndCommitChanges(model, [change])\n },\n [model, applyAndCommitChanges],\n )\n\n const { undoUI, redoUI, addOperationsToUndoStack, clearRedoStack } =\n useGridUndoRedo(applyModelChangeFromUndoRedo)\n\n const handleChange = useCallback(\n (newValue: DataGridRow[], operations: Operation[]) => {\n if (!model) {\n console.error('Model is not initialized')\n return\n }\n\n // Check that something changed before updating the model\n operations = removeNoOpOperations(newValue, rowValues, operations)\n\n if (operations.length > 0) {\n // Clear redo stack since new changes invalidate redo history\n clearRedoStack()\n\n // Track row creation, updates, and deletions to keep UI state and undo history in sync\n\n // Add all operations to the undo stack\n addOperationsToUndoStack(operations, rowValues, newValue)\n\n // Transform operations to model changes\n const modelChanges = mapOperationsToModelChanges(operations, newValue)\n\n applyAndCommitChanges(model, modelChanges)\n }\n },\n [\n model,\n rowValues,\n clearRedoStack,\n addOperationsToUndoStack,\n applyAndCommitChanges,\n ],\n )\n\n const handleSelectionChange = useCallback(\n (opts: { selection: SelectionWithId | null }) => {\n const { selection } = opts\n if (selection != null) {\n setLastSelection(selection)\n\n if (model != null && replicaId != null) {\n const replicaSelectionModel = computeReplicaSelectionModel(\n selection,\n model,\n )\n // insert it into the CRDT Model\n applyAndCommitChanges(model, [\n {\n type: 'SET_SELECTION',\n replicaId: replicaId.toString(),\n selection: replicaSelectionModel,\n },\n ])\n }\n }\n },\n [applyAndCommitChanges, model, replicaId],\n )\n\n // Track selected row index for validation display\n const selectedRowIndexRef = useRef<number | null>(null)\n const [, forceUpdate] = useState({})\n\n const handleSelectedRowChange = useCallback(\n (rowIndex: number | null, _row: DataGridRow | null) => {\n // Only update when a real row is selected — don't clear on blur/click-away\n // so the ValidationAlert stays open while the user interacts with it.\n if (rowIndex !== null) {\n selectedRowIndexRef.current = rowIndex\n forceUpdate({})\n }\n },\n [],\n )\n\n if (!isLoading && !userBundle?.isCertified) {\n return <CertificationRequirement />\n }\n\n return (\n <div>\n <Grid container spacing={2}>\n <Grid size={{ xs: 12, xl: 8 }}>\n <StartGridSession\n ref={startGridSessionRef}\n onSessionChange={setSession}\n onReplicaChange={setReplicaId}\n show={showDebugInfo}\n />\n </Grid>\n {/* Debug Information */}\n <Grid size={{ xs: 12, xl: 4 }}>\n {showDebugInfo && (\n <div>\n <p>Session ID: {session?.sessionId || 'No session created'}</p>\n <p>Replica ID: {replicaId || 'No replica created'}</p>\n <p>\n Source Entity ID:{' '}\n {session?.sourceEntityId || 'No source entity'}\n </p>\n <p>\n JSON Schema $id:{' '}\n {session?.gridJsonSchema$Id ||\n 'No schema attached to session'}\n </p>\n <p>\n Presigned URL:{' '}\n {presignedUrl\n ? presignedUrl.substring(0, 30) +\n (presignedUrl.length > 30\n ? ' ... ' +\n presignedUrl.substring(presignedUrl.length - 10)\n : '')\n : 'No URL generated'}\n </p>\n <p>\n WebSocket Status:{' '}\n <span style={{ color: isConnected ? 'green' : 'red' }}>\n {connectionStatus}\n </span>\n </p>\n <p>\n {(() => {\n const connectedReplicas = replicas.filter(\n r => r.isConnected,\n )\n return (\n <>\n Connected Replicas ({connectedReplicas.length} /{' '}\n {replicas.length} total):{' '}\n {connectedReplicas.length === 0\n ? 'none'\n : connectedReplicas.map((r, i) => (\n <Tooltip\n key={r.replicaId}\n title={\n <pre style={{ margin: 0, fontSize: '11px' }}>\n {JSON.stringify(r, null, 2)}\n </pre>\n }\n >\n <span\n style={{\n cursor: 'pointer',\n textDecoration: 'underline dotted',\n }}\n >\n {r.replicaId}\n {i < connectedReplicas.length - 1 ? ', ' : ''}\n </span>\n </Tooltip>\n ))}\n </>\n )\n })()}\n </p>\n </div>\n )}\n </Grid>\n\n {session && (\n <>\n {/* Grid Loading State */}\n {!hasSufficientData && (\n <Grid size={12}>\n <h3>Setting up grid...</h3>\n <div style={{ marginBottom: '10px' }}>\n {!session && <p>Creating grid session...</p>}\n {session && !replicaId && (\n <p>Setting up real-time sync...</p>\n )}\n {session && replicaId && !presignedUrl && (\n <p>Establishing secure connection...</p>\n )}\n {session && replicaId && presignedUrl && !isConnected && (\n <p>Connecting to server...</p>\n )}\n {isConnected && !hasCompletedInitialSync && (\n <p>Loading table data...</p>\n )}\n <SkeletonTable numRows={4} numCols={1} />\n </div>\n </Grid>\n )}\n {/* Grid */}\n {hasSufficientData && (\n <>\n <Grid size={12}>\n <Stack\n direction={'row'}\n spacing={1}\n sx={{ justifyContent: 'flex-end' }}\n >\n {undoUI}\n {redoUI}\n <GridMenuButton\n variant={'outlined'}\n onClick={() => setChatOpen(true)}\n startIcon={<SmartToyTwoTone />}\n >\n Open chat\n </GridMenuButton>\n <GridAgentChat\n agentRegistrationId={agentRegistrationId}\n open={chatOpen}\n onClose={() => setChatOpen(false)}\n gridSessionId={session.sessionId!}\n usersReplicaId={replicaId!}\n chatbotName=\"Grid Assistant\"\n />\n {session.sourceEntityId && (\n <UploadCsvToGridButton\n sourceEntityId={session.sourceEntityId}\n gridSessionId={session.sessionId!}\n />\n )}\n {session.sessionId && (\n <ExportCsvFromGridButton\n gridSessionId={session.sessionId}\n filename={\n 'grid-' + (session.sourceEntityId || 'export')\n }\n />\n )}\n {session.sourceEntityId && (\n <MergeGridWithSourceTableButton\n sourceEntityId={session.sourceEntityId}\n gridSessionId={session.sessionId!}\n />\n )}\n </Stack>\n </Grid>\n <Grid size={12}>\n <DataGrid\n gridRef={gridRef}\n rowValues={enrichedRowValues}\n columnNames={modelSnapshot?.columnNames ?? []}\n columnOrder={modelSnapshot?.columnOrder ?? []}\n schemaPropertiesInfo={schemaPropertiesInfo}\n entityIsView={entityIsView}\n jsonSchema={jsonSchema}\n lastSelection={lastSelection}\n handleChange={handleChange}\n handleSelectionChange={handleSelectionChange}\n onSelectedRowChange={handleSelectedRowChange}\n remoteSelections={remoteSelections}\n />\n </Grid>\n <Grid size={12}>\n <ValidationAlert\n selectedRowIndex={selectedRowIndexRef.current}\n rowValues={rowValues}\n />\n </Grid>\n </>\n )}\n {/* Debug Model Snapshot */}\n {showDebugInfo && (\n <Grid\n size={12}\n style={{\n margin: '10px 0',\n padding: '10px',\n border: '1px solid #ccc',\n maxHeight: '400px',\n overflowY: 'auto',\n }}\n >\n <h3>Model</h3>\n {model ? (\n <ClickableJsonCrdt model={model} />\n ) : (\n 'No model available'\n )}\n </Grid>\n )}\n </>\n )}\n </Grid>\n </div>\n )\n },\n)\n\nexport default SynapseGrid\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,IAAMsD,IAAcrC,GACjB,EAAE8B,wBAAqBC,mBAAgB,MAASO,OAAQ;CACvD,IAAM,CAACC,GAASC,MAAclC,EAA6B,KAAK,EAC1D,CAACmC,GAAWC,KAAgBpC,EAAwB,KAAK,EACzD,CAACqC,GAAUC,KAAetC,EAAS,GAAM,EACzC,CAACuC,GAAeC,KAAoBxC,EACxC,KACD,EAEKyC,IAAsB1C,EAAsC,KAAK,EACjE2C,IAAU3C,EAAgC,KAAK,EAE/C,EAAE4C,MAAMC,GAAYC,iBAAc7B,GAAyB,EAE3D,EAAE2B,MAAMG,IAAW,EAAE,EAAEC,SAASC,MACpC/B,GAAoBgB,GAASH,UAAU,EAEnCmB,IAAgCtD,QAAkB;AACjDqD,KAAiB;IACrB,CAACA,EAAgB,CAAC,EAMfM,IAAiBpC,GACrB4B,GACAX,GAJAS,GAAYO,UAAU,OAAmCE,KAAAA,IAA5BD,OAAOR,EAAWO,OAAO,CAMvD;AAEDtD,GACEmC,WACO;EACLL,iBAAiBC,MAA+B;AAC9C,GAAIa,EAAoBc,WACtBd,EAAoBc,QAAQC,mBAAmB5B,EAAQ;;EAG3DC,sBAAsBC,MAAsB;AAC1C,GAAIW,EAAoBc,WACtBd,EAAoBc,QAAQE,kBAAkB3B,EAAU;;EAG7D,GACD,EACF,CAAC;CAGD,IAAM,EACJ4B,gBACAC,sBACAC,6BACAC,UACAC,kBACAC,YACAC,iBACAC,yBACEtD,GAAqB;EACvBuD,aAAajB;EACbkB,oBAAoBlB;EACpBmB,uBAAuBnB;EACxB,CAAC,EAEIoB,IAAuBtE,EAAwC,KAAK;AAE1EH,SAAgB;AACdyE,IAAqBd,UAAUI;IAC9B,CAACA,EAAkB,CAAC;CAGvB,IAAMW,IAAuBvE,EAGnB,KAAK;AAgCfH,CA9BAA,QAAgB;AACd,MACEuC,KAAc,QAEd,CAACF,GAASH,WACV;AACAwC,KAAqBf,UAAU;AAC/B;;EAGF,IAAMgB,IAAa;GACjBpC;GACAL,WAAWG,EAAQH;GACpB,EAEK0C,IAAaF,EAAqBf;AAGtCiB,OACAA,EAAWrC,cAAcoC,EAAWpC,aACpCqC,EAAW1C,cAAcyC,EAAWzC,cAKtCwC,EAAqBf,UAAUgB,GAC/BR,EAAQ5B,GAAWF,EAAQH,UAAU;IACpC;EAACK;EAAWF,GAASH;EAAWiC;EAAQ,CAAC,EAG5CnE,QAAgB;AACd,EAAIiE,MAAU,SAEZrB,EAAiB,KAAK,EAElBE,EAAQa,WACVb,EAAQa,QAAQkB,cAAc,KAAK;IAGtC,CAACZ,EAAM,CAAC;CAEX,IAAMa,IAAa9F,GAAoBqD,EAAQ,EAIzC,EAAEU,MAAMgC,OAAe1F,EAC3BgD,GAAS2C,gBACTvB,KAAAA,GACA,EACEwB,SAAS,CAAC,CAAC5C,GAAS2C,gBAExB,CAAC,EAEKE,KACJH,IAAYI,iBACZ,mDAGIC,IAAuBlF,QACpBZ,GAAwBwF,KAAc,KAAK,EACjD,CAACA,EAAW,CAAC,EAEVO,KAAmBvB,IAAc,cAAc,gBAE/CwB,KAAmB/D,EACvB2C,GACAD,GACAf,GACAX,EACD,EAGKgD,IAAYrF,QACTgE,IAAgB/E,EAAgB8E,GAAOC,EAAc,GAAG,EAAG,EAClE,CAACD,GAAOC,EACV,CAAC,EAGKsB,KAAoBtF,QAEtBsB,EACE+D,GACAtB,GACAC,GACAR,EACD,EACH;EAAC6B;EAAWtB;EAAOC;EAAeR;EACpC,CAAC,EAEK+B,IAAS1F,QAAkB;AAC3B,GAAC+D,KAAe,CAACW,EAAqBd,WAI1Cc,EAAqBd,QAAQ+B,WAAW;IACvC,CAAC5B,GAAaW,EAAqB,CAAC;AAEvCzE,SAAgB;AACd,EAAI8D,KACF2B,GAAQ;IAET,CAAC3B,GAAa2B,EAAO,CAAC;CAEzB,IAAME,IAAwB5F,GAC3BkE,GAAkB2B,MAAgC;AAMjDH,EAJAG,EAAaC,SAAQC,MAAU;AAC7B9E,MAAiBiD,GAAO6B,GAAQV,EAAqB;IACrD,EAEFK,GAAQ;IAEV,CAACA,GAAQL,EACX,CAAC,EAmBK,EAAEe,YAAQC,YAAQC,6BAA0BC,sBAChD1F,GAlBmCb,GAClC+F,MAAwB;AACvB,MAAI,CAAC7B,GAAO;AACV+B,WAAQC,MAAM,2BAA2B;AACzC;;AAQFN,EALIG,EAAOI,SAAS,YAAYpD,EAAQa,WAEtCb,EAAQa,QAAQkB,cAAc,KAAK,EAGrCc,EAAsB1B,GAAO,CAAC6B,EAAO,CAAC;IAExC,CAAC7B,GAAO0B,EACV,CAAC,CAG8C,EAEzCY,KAAexG,GAClByG,GAAyBC,MAA4B;AACpD,MAAI,CAACxC,GAAO;AACV+B,WAAQC,MAAM,2BAA2B;AACzC;;AAMF,EAFAQ,IAAavF,EAAqBsF,GAAUjB,GAAWkB,EAAW,EAE9DA,EAAWC,SAAS,MAEtBJ,GAAgB,EAKhBD,EAAyBI,GAAYlB,GAAWiB,EAAS,EAKzDb,EAAsB1B,GAFD9C,GAA4BsF,GAAYD,EAAS,CAE5B;IAG9C;EACEvC;EACAsB;EACAe;EACAD;EACAV;EAEJ,CAAC,EAEKgB,KAAwB5G,GAC3B6G,MAAgD;EAC/C,IAAM,EAAEC,iBAAcD;AACtB,MAAIC,KAAa,SACfjE,EAAiBiE,EAAU,EAEvB5C,KAAS,QAAQ1B,KAAa,OAAM;GACtC,IAAMuE,IAAwB5H,EAC5B2H,GACA5C,EACD;AAED0B,KAAsB1B,GAAO,CAC3B;IACEiC,MAAM;IACN3D,WAAWA,EAAUwE,UAAU;IAC/BF,WAAWC;IACZ,CACF,CAAC;;IAIR;EAACnB;EAAuB1B;EAAO1B;EACjC,CAAC,EAGKyE,IAAsB7G,EAAsB,KAAK,EACjD,GAAG8G,MAAe7G,EAAS,EAAE,CAAC,EAE9B8G,KAA0BnH,GAC7BoH,GAAyBC,MAA6B;AAGrD,EAAID,MAAa,SACfH,EAAoBrD,UAAUwD,GAC9BF,GAAY,EAAE,CAAC;IAGnB,EACF,CAAC;AAMD,QAJI,CAAChE,KAAa,CAACD,GAAYqE,cACtB,kBAAC,IAAD,EAA4B,CAAA,GAInC,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;EAAM,WAAA;EAAU,SAAS;YAAzB;GACE,kBAAC,GAAD;IAAM,MAAM;KAAEC,IAAI;KAAIC,IAAI;KAAG;cAC3B,kBAAC,IAAD;KACE,KAAK1E;KACL,iBAAiBP;KACjB,iBAAiBE;KACjB,MAAMX;KAAc,CAAA;IAElB,CAAA;GAEN,kBAAC,GAAD;IAAM,MAAM;KAAEyF,IAAI;KAAIC,IAAI;KAAG;cAC1B1F,KACC,kBAAC,OAAD,EAAA,UAAA;KACE,kBAAC,KAAD,EAAA,UAAA,CAAG,gBAAaQ,GAASH,aAAa,qBAAwB,EAAA,CAAA;KAC9D,kBAAC,KAAD,EAAA,UAAA,CAAG,gBAAaK,KAAa,qBAAwB,EAAA,CAAA;KACrD,kBAAC,KAAD,EAAA,UAAA;MAAE;MACkB;MACjBF,GAAS2C,kBAAkB;MAC3B,EAAA,CAAA;KACH,kBAAC,KAAD,EAAA,UAAA;MAAE;MACiB;MAChB3C,GAASmF,qBACR;MACD,EAAA,CAAA;KACH,kBAAC,KAAD,EAAA,UAAA;MAAE;MACe;MACdpD,IACGA,EAAaqD,UAAU,GAAG,GAAG,IAC5BrD,EAAasC,SAAS,KACnB,UACAtC,EAAaqD,UAAUrD,EAAasC,SAAS,GAAG,GAChD,MACJ;MACH,EAAA,CAAA;KACH,kBAAC,KAAD,EAAA,UAAA;MAAE;MACkB;MAClB,kBAAC,QAAD;OAAM,OAAO,EAAEgB,OAAO5D,IAAc,UAAU,OAAO;iBAClDuB;OACG,CAAA;MACL,EAAA,CAAA;KACH,kBAAC,KAAD,EAAA,iBACU;MACN,IAAMsC,IAAoBzE,EAAS0E,QACjCC,MAAKA,EAAE/D,YACR;AACD,aACE,kBAAA,GAAA,EAAA,UAAA;OAAA;OACuB6D,EAAkBjB;OAAO;OAAG;OAChDxD,EAASwD;OAAO;OAAS;OACzBiB,EAAkBjB,WAAW,IAC1B,SACAiB,EAAkBG,KAAKD,GAAGE,MACxB,kBAAC,IAAD;QAEE,OACE,kBAAC,OAAD;SAAK,OAAO;UAAEC,QAAQ;UAAGC,UAAU;UAAQ;mBACxCC,KAAKC,UAAUN,GAAG,MAAM,EAAE;SAE/B,CAAA;kBAEA,kBAAC,QAAD;SACE,OAAO;UACLO,QAAQ;UACRC,gBAAgB;UACjB;mBAJH,CAMGR,EAAEtF,WACFwF,IAAIJ,EAAkBjB,SAAS,IAAI,OAAO,GACvC;;QAET,EAjBQmB,EAAEtF,UAiBV,CAAC;OACL,EAAA,CAAA;SAEH,EACH,CAAA;KAEN,EAAA,CAAA;IACG,CAAA;GAELF,KACC,kBAAA,GAAA,EAAA,UAAA;IAEG,CAACgC,KACA,kBAAC,GAAD;KAAM,MAAM;eAAZ,CACE,kBAAC,MAAD,EAAA,UAAI,sBAAsB,CAAA,EAC1B,kBAAC,OAAD;MAAK,OAAO,EAAEiE,cAAc,QAAQ;gBAApC;OACG,CAACjG,KAAW,kBAAC,KAAD,EAAA,UAAG,4BAA4B,CAAA;OAC3CA,KAAW,CAACE,KACX,kBAAC,KAAD,EAAA,UAAG,gCACJ,CAAA;OACAF,KAAWE,KAAa,CAAC6B,KACxB,kBAAC,KAAD,EAAA,UAAG,qCACJ,CAAA;OACA/B,KAAWE,KAAa6B,KAAgB,CAACN,KACxC,kBAAC,KAAD,EAAA,UAAG,2BACJ,CAAA;OACAA,KAAe,CAACE,MACf,kBAAC,KAAD,EAAA,UAAG,yBACJ,CAAA;OACD,kBAAC,GAAD;QAAe,SAAS;QAAG,SAAS;QAAE,CAAA;OACnC;QAER;;IAEAK,KACC,kBAAA,GAAA,EAAA,UAAA;KACE,kBAAC,GAAD;MAAM,MAAM;gBACV,kBAAC,IAAD;OACE,WAAW;OACX,SAAS;OACT,IAAI,EAAEkE,gBAAgB,YAAY;iBAHpC;QAKGpC;QACAC;QACD,kBAAC,IAAD;SACE,SAAS;SACT,eAAe1D,EAAY,GAAK;SAChC,WAAW,kBAAC,IAAD,EAAmB,CAAA;mBAAC;SAGjB,CAAA;QAChB,kBAAC,IAAD;SACuBd;SACrB,MAAMa;SACN,eAAeC,EAAY,GAAM;SACjC,eAAeL,EAAQH;SACvB,gBAAgBK;SAChB,aAAY;SAAgB,CAAA;QAE7BF,EAAQ2C,kBACP,kBAAC,IAAD;SACE,gBAAgB3C,EAAQ2C;SACxB,eAAe3C,EAAQH;SAE1B,CAAA;QACAG,EAAQH,aACP,kBAAC,IAAD;SACE,eAAeG,EAAQH;SACvB,UACE,WAAWG,EAAQ2C,kBAAkB;SAG1C,CAAA;QACA3C,EAAQ2C,kBACP,kBAAC,GAAD;SACE,gBAAgB3C,EAAQ2C;SACxB,eAAe3C,EAAQH;SAE1B,CAAA;QACI;;MACH,CAAA;KACN,kBAAC,GAAD;MAAM,MAAM;gBACV,kBAAC,IAAD;OACWY;OACT,WAAW0C;OACX,aAAatB,GAAesE,eAAe,EAAE;OAC7C,aAAatE,GAAeuE,eAAe,EAAE;OACvBrD;OACRF;OACFJ;OACGnC;OACD4D;OACSI;OACvB,qBAAqBO;OACH5B;OAAiB,CAAA;MAEjC,CAAA;KACN,kBAAC,GAAD;MAAM,MAAM;gBACV,kBAAC,GAAD;OACE,kBAAkB0B,EAAoBrD;OAC3B4B;OAAU,CAAA;MAEnB,CAAA;KAET,EAAA,CAAA;IAEA1D,KACC,kBAAC,GAAD;KACE,MAAM;KACN,OAAO;MACLmG,QAAQ;MACRU,SAAS;MACTC,QAAQ;MACRC,WAAW;MACXC,WAAW;MACZ;eARH,CAUE,kBAAC,MAAD,EAAA,UAAI,SAAS,CAAA,EACZ5E,IACC,kBAAC,IAAD,EAA0BA,UAAS,CAAA,GAEnC,qBAGL;;IAEJ,EAAA,CAAA;GACG;KACF,CAAA;EAGX"}
|
|
1
|
+
{"version":3,"file":"SynapseGrid.js","names":["GridMenuButton","UploadCsvToGridButton","ExportCsvFromGridButton","useGetSchemaForGrid","MergeGridWithSourceTableButton","computeReplicaSelectionModel","modelRowsToGrid","SkeletonTable","useGetEntity","getSchemaPropertiesInfo","SmartToyTwoTone","Box","Stack","Tooltip","Typography","SynapseSpinner","Grid","CreateGridRequest","GridSession","ClickableJsonCrdt","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","DataSheetGridRef","SelectionWithId","GridAgentChat","DataGrid","DataGridRow","GridModel","Operation","useGridUndoRedo","StartGridSession","StartGridSessionHandle","useDataGridWebSocket","applyModelChange","ModelChange","removeNoOpOperations","mapOperationsToModelChanges","useGetCurrentUserBundle","useListGridReplicas","useGridReplicaUsers","useRemoteSelections","enrichRowsWithChangeInfo","CertificationRequirement","ValidationAlert","SynapseGridProps","agentRegistrationId","showDebugInfo","SynapseGridHandle","initializeGrid","request","loadExistingSession","sessionId","SynapseGrid","t0","ref","$","_c","t1","undefined","session","setSession","replicaId","setReplicaId","chatOpen","setChatOpen","lastSelection","setLastSelection","startGridSessionRef","gridRef","data","userBundle","isLoading","t2","refetch","refetchReplicas","t3","replicas","t4","handleReplicaConnectionChange","currentUserId","userId","String","replicaUserMap","t5","t6","Symbol","for","current","handleStartSession","handleLoadSession","t7","onGridReady","onReplicaConnected","onReplicaDisconnected","isConnected","websocketInstance","hasCompletedInitialSync","isSyncing","model","modelSnapshot","connect","presignedUrl","hasSufficientData","websocketInstanceRef","t8","t9","lastConnectParamsRef","t10","nextParams","prevParams","t11","t12","t13","t14","setActiveCell","jsonSchema","t15","sourceEntityId","t16","enabled","entityData","entityIsView","concreteType","t17","t18","schemaPropertiesInfo","connectionStatus","remoteSelections","t19","rowValues","t20","enrichedRowValues","t21","sendPatch","commit","t22","t23","t24","model_0","modelChanges","forEach","change","applyAndCommitChanges","t25","change_0","console","error","type","applyModelChangeFromUndoRedo","undoUI","redoUI","addOperationsToUndoStack","clearRedoStack","t26","newValue","operations","length","modelChanges_0","handleChange","t27","opts","selection","replicaSelectionModel","toString","handleSelectionChange","t28","rowIndex","colIndex","col","row","handleNavigateToCell","isCertified","t29","xs","xl","t30","t31","t32","gridJsonSchema$Id","substring","color","connectedReplicas","filter","_temp","map","r_0","i","r","margin","fontSize","JSON","stringify","cursor","textDecoration","t33","t34","columnNames","columnOrder","marginBottom","justifyContent","display","alignItems","gap","mr","padding","border","maxHeight","overflowY","t35"],"sources":["../../../src/components/DataGrid/SynapseGrid.tsx"],"sourcesContent":["import GridMenuButton from '@/components/DataGrid/components/GridMenuButton/GridMenuButton'\nimport UploadCsvToGridButton from '@/components/DataGrid/components/UploadCsvToGridButton'\nimport ExportCsvFromGridButton from '@/components/DataGrid/components/ExportCsvFromGridButton'\nimport useGetSchemaForGrid from '@/components/DataGrid/hooks/useGetSchemaForGrid'\nimport MergeGridWithSourceTableButton from '@/components/DataGrid/MergeGridWithSourceTableButton'\nimport computeReplicaSelectionModel from '@/components/DataGrid/utils/computeReplicaSelectionModel'\nimport modelRowsToGrid from '@/components/DataGrid/utils/modelRowsToGrid'\nimport { SkeletonTable } from '@/components/index'\nimport { useGetEntity } from '@/synapse-queries/index'\nimport { getSchemaPropertiesInfo } from '@/utils/jsonschema/getSchemaPropertyInfo'\nimport { SmartToyTwoTone } from '@mui/icons-material'\nimport { Box, Stack, Tooltip, Typography } from '@mui/material'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport Grid from '@mui/material/Grid'\nimport {\n CreateGridRequest,\n GridSession,\n} from '@sage-bionetworks/synapse-client'\nimport { ClickableJsonCrdt } from 'clickable-json'\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { DataSheetGridRef } from '@sage-bionetworks/react-datasheet-grid'\nimport { SelectionWithId } from '@sage-bionetworks/react-datasheet-grid'\nimport GridAgentChat from '../SynapseChat/GridAgentChat'\nimport DataGrid from './DataGrid'\nimport { DataGridRow, GridModel, Operation } from './DataGridTypes'\nimport { useGridUndoRedo } from './hooks/useGridUndoRedo'\nimport { StartGridSession, StartGridSessionHandle } from './StartGridSession'\nimport { useDataGridWebSocket } from './useDataGridWebsocket'\nimport { applyModelChange, ModelChange } from './utils/applyModelChange'\nimport { removeNoOpOperations } from './utils/DataGridUtils'\nimport { mapOperationsToModelChanges } from './utils/mapOperationsToModelChanges'\nimport { useGetCurrentUserBundle } from '@/synapse-queries'\nimport { useListGridReplicas } from '@/synapse-queries/grid/useGridSession'\nimport { useGridReplicaUsers } from './hooks/useGridReplicaUsers'\nimport { useRemoteSelections } from './hooks/useRemoteSelections'\nimport { enrichRowsWithChangeInfo } from './utils/enrichRowsWithChangeInfo'\nimport CertificationRequirement from '@/components/AccessRequirementList/RequirementItem/CertificationRequirement'\nimport { ValidationAlert } from './components/ValidationAlert'\n\nexport type SynapseGridProps = {\n agentRegistrationId?: string\n showDebugInfo?: boolean\n}\n\nexport type SynapseGridHandle = {\n initializeGrid: (request: CreateGridRequest) => void\n loadExistingSession: (sessionId: string) => void\n}\n\nconst SynapseGrid = forwardRef<SynapseGridHandle, SynapseGridProps>(\n ({ agentRegistrationId, showDebugInfo = false }, ref) => {\n const [session, setSession] = useState<GridSession | null>(null)\n const [replicaId, setReplicaId] = useState<number | null>(null)\n const [chatOpen, setChatOpen] = useState(false)\n const [lastSelection, setLastSelection] = useState<SelectionWithId | null>(\n null,\n )\n\n const startGridSessionRef = useRef<StartGridSessionHandle | null>(null)\n const gridRef = useRef<DataSheetGridRef | null>(null)\n\n const { data: userBundle, isLoading } = useGetCurrentUserBundle()\n\n const { data: replicas = [], refetch: refetchReplicas } =\n useListGridReplicas(session?.sessionId)\n\n const handleReplicaConnectionChange = useCallback(() => {\n void refetchReplicas()\n }, [refetchReplicas])\n\n // ── Attribution infrastructure ─────────────────────────────────────────\n const currentUserId =\n userBundle?.userId != null ? String(userBundle.userId) : undefined\n\n const replicaUserMap = useGridReplicaUsers(\n replicas,\n replicaId,\n currentUserId,\n )\n\n useImperativeHandle(\n ref,\n () => ({\n initializeGrid: (request: CreateGridRequest) => {\n if (startGridSessionRef.current) {\n startGridSessionRef.current.handleStartSession(request)\n }\n },\n loadExistingSession: (sessionId: string) => {\n if (startGridSessionRef.current) {\n startGridSessionRef.current.handleLoadSession(sessionId)\n }\n },\n }),\n [],\n )\n\n // WebSocket state\n const {\n isConnected,\n websocketInstance,\n hasCompletedInitialSync,\n isSyncing,\n model,\n modelSnapshot,\n connect,\n presignedUrl,\n hasSufficientData,\n } = useDataGridWebSocket({\n onGridReady: handleReplicaConnectionChange,\n onReplicaConnected: handleReplicaConnectionChange,\n onReplicaDisconnected: handleReplicaConnectionChange,\n })\n\n const websocketInstanceRef = useRef<typeof websocketInstance | null>(null)\n\n useEffect(() => {\n websocketInstanceRef.current = websocketInstance\n }, [websocketInstance])\n\n // Track last connection parameters to avoid redundant connections\n const lastConnectParamsRef = useRef<{\n replicaId: number\n sessionId: string\n } | null>(null)\n\n useEffect(() => {\n if (\n replicaId === null ||\n replicaId === undefined ||\n !session?.sessionId\n ) {\n lastConnectParamsRef.current = null\n return\n }\n\n const nextParams = {\n replicaId,\n sessionId: session.sessionId,\n }\n\n const prevParams = lastConnectParamsRef.current\n\n if (\n prevParams &&\n prevParams.replicaId === nextParams.replicaId &&\n prevParams.sessionId === nextParams.sessionId\n ) {\n return\n }\n\n lastConnectParamsRef.current = nextParams\n connect(replicaId, session.sessionId)\n }, [replicaId, session?.sessionId, connect])\n\n // Reset grid state when model is reset (new session/replica)\n useEffect(() => {\n if (model === null) {\n // Clear any grid-specific state when starting a new session\n setLastSelection(null)\n // Clear active cell if grid exists\n if (gridRef.current) {\n gridRef.current.setActiveCell(null)\n }\n }\n }, [model])\n\n const jsonSchema = useGetSchemaForGrid(session)\n\n // Grid behaves differently for views vs recordSets\n // Note for future: can get modifiedOn to refresh grid when view changes\n const { data: entityData } = useGetEntity(\n session?.sourceEntityId,\n undefined,\n {\n enabled: !!session?.sourceEntityId,\n },\n )\n\n const entityIsView =\n entityData?.concreteType ===\n 'org.sagebionetworks.repo.model.table.EntityView'\n\n // Process schema properties once\n const schemaPropertiesInfo = useMemo(() => {\n return getSchemaPropertiesInfo(jsonSchema ?? null)\n }, [jsonSchema])\n\n const connectionStatus = isConnected ? 'Connected' : 'Disconnected'\n\n const remoteSelections = useRemoteSelections(\n modelSnapshot,\n model,\n replicas,\n replicaId,\n )\n\n // Transform the model view rows and columns to DataSheetGrid format\n const rowValues = useMemo(\n () => (modelSnapshot ? modelRowsToGrid(model, modelSnapshot) : []),\n [model, modelSnapshot],\n )\n\n // Enrich rows with per-cell change attribution for CSS indicators and tooltips\n const enrichedRowValues = useMemo(\n () =>\n enrichRowsWithChangeInfo(\n rowValues,\n model,\n modelSnapshot,\n replicaUserMap,\n ),\n [rowValues, model, modelSnapshot, replicaUserMap],\n )\n\n const commit = useCallback(() => {\n if (!isConnected || !websocketInstanceRef.current) {\n return\n }\n\n websocketInstanceRef.current.sendPatch()\n }, [isConnected, websocketInstanceRef])\n\n useEffect(() => {\n if (isConnected) {\n commit()\n }\n }, [isConnected, commit])\n\n const applyAndCommitChanges = useCallback(\n (model: GridModel, modelChanges: ModelChange[]) => {\n // Apply each change to the model\n modelChanges.forEach(change => {\n applyModelChange(model, change, schemaPropertiesInfo)\n })\n\n commit()\n },\n [commit, schemaPropertiesInfo],\n )\n\n const applyModelChangeFromUndoRedo = useCallback(\n (change: ModelChange) => {\n if (!model) {\n console.error('Model is not initialized')\n return\n }\n\n if (change.type === 'DELETE' && gridRef.current) {\n // The user may have set a cell as active that we are removing with an 'undo'. In that case, clear the active state\n gridRef.current.setActiveCell(null)\n }\n\n applyAndCommitChanges(model, [change])\n },\n [model, applyAndCommitChanges],\n )\n\n const { undoUI, redoUI, addOperationsToUndoStack, clearRedoStack } =\n useGridUndoRedo(applyModelChangeFromUndoRedo)\n\n const handleChange = useCallback(\n (newValue: DataGridRow[], operations: Operation[]) => {\n if (!model) {\n console.error('Model is not initialized')\n return\n }\n\n // Check that something changed before updating the model\n operations = removeNoOpOperations(newValue, rowValues, operations)\n\n if (operations.length > 0) {\n // Clear redo stack since new changes invalidate redo history\n clearRedoStack()\n\n // Track row creation, updates, and deletions to keep UI state and undo history in sync\n\n // Add all operations to the undo stack\n addOperationsToUndoStack(operations, rowValues, newValue)\n\n // Transform operations to model changes\n const modelChanges = mapOperationsToModelChanges(operations, newValue)\n\n applyAndCommitChanges(model, modelChanges)\n }\n },\n [\n model,\n rowValues,\n clearRedoStack,\n addOperationsToUndoStack,\n applyAndCommitChanges,\n ],\n )\n\n const handleSelectionChange = useCallback(\n (opts: { selection: SelectionWithId | null }) => {\n const { selection } = opts\n if (selection != null) {\n setLastSelection(selection)\n\n if (model != null && replicaId != null) {\n const replicaSelectionModel = computeReplicaSelectionModel(\n selection,\n model,\n )\n // insert it into the CRDT Model\n applyAndCommitChanges(model, [\n {\n type: 'SET_SELECTION',\n replicaId: replicaId.toString(),\n selection: replicaSelectionModel,\n },\n ])\n }\n }\n },\n [applyAndCommitChanges, model, replicaId],\n )\n\n const handleNavigateToCell = useCallback(\n (rowIndex: number, colIndex: number) => {\n gridRef.current?.setActiveCell({ col: colIndex, row: rowIndex })\n },\n [],\n )\n\n if (!isLoading && !userBundle?.isCertified) {\n return <CertificationRequirement />\n }\n\n return (\n <div>\n <Grid container spacing={2}>\n <Grid size={{ xs: 12, xl: 8 }}>\n <StartGridSession\n ref={startGridSessionRef}\n onSessionChange={setSession}\n onReplicaChange={setReplicaId}\n show={showDebugInfo}\n />\n </Grid>\n {/* Debug Information */}\n <Grid size={{ xs: 12, xl: 4 }}>\n {showDebugInfo && (\n <div>\n <p>Session ID: {session?.sessionId || 'No session created'}</p>\n <p>Replica ID: {replicaId || 'No replica created'}</p>\n <p>\n Source Entity ID:{' '}\n {session?.sourceEntityId || 'No source entity'}\n </p>\n <p>\n JSON Schema $id:{' '}\n {session?.gridJsonSchema$Id ||\n 'No schema attached to session'}\n </p>\n <p>\n Presigned URL:{' '}\n {presignedUrl\n ? presignedUrl.substring(0, 30) +\n (presignedUrl.length > 30\n ? ' ... ' +\n presignedUrl.substring(presignedUrl.length - 10)\n : '')\n : 'No URL generated'}\n </p>\n <p>\n WebSocket Status:{' '}\n <span style={{ color: isConnected ? 'green' : 'red' }}>\n {connectionStatus}\n </span>\n </p>\n <p>\n {(() => {\n const connectedReplicas = replicas.filter(\n r => r.isConnected,\n )\n return (\n <>\n Connected Replicas ({connectedReplicas.length} /{' '}\n {replicas.length} total):{' '}\n {connectedReplicas.length === 0\n ? 'none'\n : connectedReplicas.map((r, i) => (\n <Tooltip\n key={r.replicaId}\n title={\n <pre style={{ margin: 0, fontSize: '11px' }}>\n {JSON.stringify(r, null, 2)}\n </pre>\n }\n >\n <span\n style={{\n cursor: 'pointer',\n textDecoration: 'underline dotted',\n }}\n >\n {r.replicaId}\n {i < connectedReplicas.length - 1 ? ', ' : ''}\n </span>\n </Tooltip>\n ))}\n </>\n )\n })()}\n </p>\n </div>\n )}\n </Grid>\n\n {session && (\n <>\n {/* Grid Loading State */}\n {!hasSufficientData && (\n <Grid size={12}>\n <h3>Setting up grid...</h3>\n <div style={{ marginBottom: '10px' }}>\n {!session && <p>Creating grid session...</p>}\n {session && !replicaId && (\n <p>Setting up real-time sync...</p>\n )}\n {session && replicaId && !presignedUrl && (\n <p>Establishing secure connection...</p>\n )}\n {session && replicaId && presignedUrl && !isConnected && (\n <p>Connecting to server...</p>\n )}\n {isConnected && !hasCompletedInitialSync && (\n <p>Loading table data...</p>\n )}\n <SkeletonTable numRows={4} numCols={1} />\n </div>\n </Grid>\n )}\n {/* Grid */}\n {hasSufficientData && (\n <>\n <Grid size={12}>\n <ValidationAlert\n rowValues={rowValues}\n columnNames={modelSnapshot?.columnNames ?? []}\n columnOrder={modelSnapshot?.columnOrder ?? []}\n onNavigateToCell={handleNavigateToCell}\n isLoading={!hasCompletedInitialSync}\n />\n </Grid>\n <Grid size={12}>\n <Stack\n direction={'row'}\n spacing={1}\n sx={{ justifyContent: 'flex-end' }}\n >\n {(!hasCompletedInitialSync || isSyncing) && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n mr: 'auto',\n }}\n >\n <SynapseSpinner size={16} margin=\"0\" />\n <Typography variant=\"caption\" color=\"text.secondary\">\n {hasCompletedInitialSync ? 'Syncing…' : 'Loading…'}\n </Typography>\n </Box>\n )}\n {undoUI}\n {redoUI}\n <GridMenuButton\n variant={'outlined'}\n onClick={() => setChatOpen(true)}\n startIcon={<SmartToyTwoTone />}\n >\n Open chat\n </GridMenuButton>\n <GridAgentChat\n agentRegistrationId={agentRegistrationId}\n open={chatOpen}\n onClose={() => setChatOpen(false)}\n gridSessionId={session.sessionId!}\n usersReplicaId={replicaId!}\n chatbotName=\"Grid Assistant\"\n />\n {session.sourceEntityId && (\n <UploadCsvToGridButton\n sourceEntityId={session.sourceEntityId}\n gridSessionId={session.sessionId!}\n />\n )}\n {session.sessionId && (\n <ExportCsvFromGridButton\n gridSessionId={session.sessionId}\n filename={\n 'grid-' + (session.sourceEntityId || 'export')\n }\n />\n )}\n {session.sourceEntityId && (\n <MergeGridWithSourceTableButton\n sourceEntityId={session.sourceEntityId}\n gridSessionId={session.sessionId!}\n />\n )}\n </Stack>\n </Grid>\n <Grid size={12}>\n <DataGrid\n gridRef={gridRef}\n rowValues={enrichedRowValues}\n columnNames={modelSnapshot?.columnNames ?? []}\n columnOrder={modelSnapshot?.columnOrder ?? []}\n schemaPropertiesInfo={schemaPropertiesInfo}\n entityIsView={entityIsView}\n jsonSchema={jsonSchema}\n lastSelection={lastSelection}\n handleChange={handleChange}\n handleSelectionChange={handleSelectionChange}\n remoteSelections={remoteSelections}\n />\n </Grid>\n </>\n )}\n {/* Debug Model Snapshot */}\n {showDebugInfo && (\n <Grid\n size={12}\n style={{\n margin: '10px 0',\n padding: '10px',\n border: '1px solid #ccc',\n maxHeight: '400px',\n overflowY: 'auto',\n }}\n >\n <h3>Model</h3>\n {model ? (\n <ClickableJsonCrdt model={model} />\n ) : (\n 'No model available'\n )}\n </Grid>\n )}\n </>\n )}\n </Grid>\n </div>\n )\n },\n)\n\nexport default SynapseGrid\n"],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export type AutocompleteCellProps = CellProps & {
|
|
|
10
10
|
};
|
|
11
11
|
export declare function castCellValueToString(toCast: any): string;
|
|
12
12
|
export declare function AutocompleteCell({ rowData, setRowData, choices, colType, focus, stopEditing, active, clearValue, }: AutocompleteCellProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function areAutocompleteCellPropsEqual(prevProps: AutocompleteCellProps, nextProps: AutocompleteCellProps): boolean;
|
|
14
|
+
export declare const MemoizedAutocompleteCell: import("react").NamedExoticComponent<AutocompleteCellProps>;
|
|
13
15
|
export type AutocompleteColumnProps = {
|
|
14
16
|
choices: AutocompleteOption[];
|
|
15
17
|
colType?: JSONSchema7Type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AutocompleteColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAW7C,OAAO,EAEL,SAAS,EACT,MAAM,EACP,MAAM,wCAAwC,CAAA;AAoB/C,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC,OAAO,CAAC,CAAA;AAElB,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG;IAC9C,OAAO,EAAE,kBAAkB,CAAA;IAC3B,UAAU,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC/C,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAQzD;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAsB,GACvB,EAAE,qBAAqB,2CAsIvB;AAMD,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,qBAAqB,WAUjC;AAED,eAAO,MAAM,wBAAwB,6DAGpC,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,UAAU,GACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3C"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import e from "../utils/parseFreeTextUsingJsonSchemaType.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { useGridAutocompleteState as t } from "./useGridAutocompleteState.js";
|
|
3
|
+
import { memo as n, useEffect as r, useLayoutEffect as i, useRef as ee, useState as te } from "react";
|
|
4
|
+
import { isNil as ne } from "lodash-es";
|
|
5
|
+
import { Autocomplete as re, TextField as ie } from "@mui/material";
|
|
6
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
7
|
+
import { c as ae } from "react/compiler-runtime";
|
|
6
8
|
//#region src/components/DataGrid/columns/AutocompleteColumn.tsx
|
|
7
|
-
var
|
|
9
|
+
var oe = {
|
|
8
10
|
width: "100%",
|
|
9
11
|
height: "100%",
|
|
10
12
|
"& .MuiTextField-root .MuiInputBase-root": {
|
|
@@ -19,77 +21,121 @@ var u = {
|
|
|
19
21
|
},
|
|
20
22
|
"& .MuiFormControl-root": { height: "100%" }
|
|
21
23
|
};
|
|
22
|
-
function
|
|
23
|
-
return
|
|
24
|
+
function o(e) {
|
|
25
|
+
return ne(e) ? "" : typeof e == "object" ? JSON.stringify(e) : String(e);
|
|
24
26
|
}
|
|
25
|
-
function
|
|
26
|
-
let
|
|
27
|
-
|
|
28
|
-
_
|
|
29
|
-
}, [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
function s(n) {
|
|
28
|
+
let s = ae(55), { rowData: c, setRowData: l, choices: u, colType: d, focus: f, stopEditing: p, active: m, clearValue: h } = n, g = h === void 0 ? void 0 : h, _ = ee(l), v;
|
|
29
|
+
s[0] === l ? v = s[1] : (v = () => {
|
|
30
|
+
_.current = l;
|
|
31
|
+
}, s[0] = l, s[1] = v), i(v);
|
|
32
|
+
let y = ee(p), b;
|
|
33
|
+
s[2] === p ? b = s[3] : (b = () => {
|
|
34
|
+
y.current = p;
|
|
35
|
+
}, s[2] = p, s[3] = b), i(b);
|
|
36
|
+
let x;
|
|
37
|
+
s[4] === c ? x = s[5] : (x = o(c), s[4] = c, s[5] = x);
|
|
38
|
+
let S = x, [C, ce] = te(S), w;
|
|
39
|
+
s[6] !== d || s[7] !== C || s[8] !== S ? (w = () => {
|
|
40
|
+
C !== S && _.current(e(C, d));
|
|
41
|
+
}, s[6] = d, s[7] = C, s[8] = S, s[9] = w) : w = s[9];
|
|
42
|
+
let T;
|
|
43
|
+
s[10] !== m || s[11] !== p || s[12] !== w ? (T = {
|
|
44
|
+
active: m,
|
|
45
|
+
stopEditing: p,
|
|
46
|
+
onDeactivate: w
|
|
47
|
+
}, s[10] = m, s[11] = p, s[12] = w, s[13] = T) : T = s[13];
|
|
48
|
+
let { menuIsOpen: E, inputRef: D, handleListboxMouseDown: O, notifyOptionCommitted: k, handleMenuOpen: A, handleClose: j } = t(T), M, N;
|
|
49
|
+
s[14] !== m || s[15] !== f || s[16] !== S ? (M = () => {
|
|
50
|
+
!f && !m && ce(S);
|
|
51
|
+
}, N = [
|
|
52
|
+
f,
|
|
53
|
+
m,
|
|
34
54
|
S
|
|
35
|
-
]);
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
], s[14] = m, s[15] = f, s[16] = S, s[17] = M, s[18] = N) : (M = s[17], N = s[18]), r(M, N);
|
|
56
|
+
let P;
|
|
57
|
+
s[19] === c ? P = s[20] : (P = !ne(c) && c !== "", s[19] = c, s[20] = P);
|
|
58
|
+
let le = P, F = f ? void 0 : "none", I;
|
|
59
|
+
s[21] === F ? I = s[22] : (I = {
|
|
60
|
+
padding: "0 10px",
|
|
61
|
+
backgroundColor: "inherit",
|
|
62
|
+
pointerEvents: F
|
|
63
|
+
}, s[21] = F, s[22] = I);
|
|
64
|
+
let L = m ? "visible" : "hidden", R;
|
|
65
|
+
s[23] === L ? R = s[24] : (R = {
|
|
66
|
+
visibility: L,
|
|
67
|
+
pointerEvents: "auto"
|
|
68
|
+
}, s[23] = L, s[24] = R);
|
|
69
|
+
let z = m ? "visible" : "hidden", B;
|
|
70
|
+
s[25] === z ? B = s[26] : (B = {
|
|
71
|
+
visibility: z,
|
|
72
|
+
pointerEvents: "auto"
|
|
73
|
+
}, s[25] = z, s[26] = B);
|
|
74
|
+
let V, H;
|
|
75
|
+
s[27] === Symbol.for("react.memo_cache_sentinel") ? (V = { visibility: "visible" }, H = { visibility: "visible" }, s[27] = V, s[28] = H) : (V = s[27], H = s[28]);
|
|
76
|
+
let U;
|
|
77
|
+
s[29] !== I || s[30] !== R || s[31] !== B ? (U = {
|
|
78
|
+
...oe,
|
|
79
|
+
"& .MuiAutocomplete-inputRoot": I,
|
|
80
|
+
"& .MuiAutocomplete-clearIndicator": R,
|
|
81
|
+
"& .MuiAutocomplete-popupIndicator": B,
|
|
82
|
+
"&:hover .MuiAutocomplete-clearIndicator": V,
|
|
83
|
+
"&:hover .MuiAutocomplete-popupIndicator": H
|
|
84
|
+
}, s[29] = I, s[30] = R, s[31] = B, s[32] = U) : U = s[32];
|
|
85
|
+
let W = U, G;
|
|
86
|
+
s[33] === Symbol.for("react.memo_cache_sentinel") ? (G = (e) => {
|
|
87
|
+
e.key === "Tab" ? (e.preventDefault(), y.current({ nextRow: !1 })) : e.key === "Enter" && (e.preventDefault(), y.current({ nextRow: !0 }));
|
|
88
|
+
}, s[33] = G) : G = s[33];
|
|
89
|
+
let ue = G, K;
|
|
90
|
+
s[34] !== g || s[35] !== d || s[36] !== k ? (K = (t, n, r) => {
|
|
91
|
+
k(), r === "clear" ? _.current(g) : r === "createOption" ? _.current(e(n, d)) : _.current(n), setTimeout(() => {
|
|
92
|
+
y.current({ nextRow: !1 });
|
|
93
|
+
}, 0);
|
|
94
|
+
}, s[34] = g, s[35] = d, s[36] = k, s[37] = K) : K = s[37];
|
|
95
|
+
let q = K, J = !le, Y = c, X;
|
|
96
|
+
s[38] === Symbol.for("react.memo_cache_sentinel") ? (X = (e, t) => {
|
|
97
|
+
ce(t);
|
|
98
|
+
}, s[38] = X) : X = s[38];
|
|
99
|
+
let Z;
|
|
100
|
+
s[39] === O ? Z = s[40] : (Z = { listbox: { onMouseDown: O } }, s[39] = O, s[40] = Z);
|
|
101
|
+
let Q;
|
|
102
|
+
s[41] === D ? Q = s[42] : (Q = (e) => /* @__PURE__ */ a(ie, {
|
|
103
|
+
...e,
|
|
104
|
+
inputRef: D
|
|
105
|
+
}), s[41] = D, s[42] = Q);
|
|
106
|
+
let $;
|
|
107
|
+
return s[43] !== W || s[44] !== u || s[45] !== q || s[46] !== j || s[47] !== A || s[48] !== C || s[49] !== E || s[50] !== J || s[51] !== Y || s[52] !== Z || s[53] !== Q ? ($ = /* @__PURE__ */ a(re, {
|
|
108
|
+
open: E,
|
|
109
|
+
onOpen: A,
|
|
59
110
|
forcePopupIcon: !0,
|
|
60
|
-
disableClearable:
|
|
111
|
+
disableClearable: J,
|
|
61
112
|
freeSolo: !0,
|
|
62
113
|
disablePortal: !1,
|
|
63
|
-
options:
|
|
64
|
-
autoSelect: !0,
|
|
114
|
+
options: u,
|
|
65
115
|
selectOnFocus: !0,
|
|
66
|
-
getOptionLabel:
|
|
67
|
-
value:
|
|
116
|
+
getOptionLabel: se,
|
|
117
|
+
value: Y,
|
|
68
118
|
inputValue: C,
|
|
69
|
-
onInputChange:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
e.key === "Tab" ? (e.preventDefault(), g({ nextRow: !1 })) : e.key === "Enter" && (e.preventDefault(), g({ nextRow: !0 }));
|
|
74
|
-
},
|
|
75
|
-
onClose: () => {
|
|
76
|
-
b(!1), g({ nextRow: !1 });
|
|
77
|
-
},
|
|
78
|
-
onChange: (t, n, r) => {
|
|
79
|
-
f(r === "clear" ? v : r === "createOption" ? e(n, m) : n), setTimeout(() => g({ nextRow: !1 }), 0);
|
|
80
|
-
},
|
|
119
|
+
onInputChange: X,
|
|
120
|
+
onKeyDown: ue,
|
|
121
|
+
onClose: j,
|
|
122
|
+
onChange: q,
|
|
81
123
|
blurOnSelect: !0,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
124
|
+
slotProps: Z,
|
|
125
|
+
renderInput: Q,
|
|
126
|
+
sx: W
|
|
127
|
+
}), s[43] = W, s[44] = u, s[45] = q, s[46] = j, s[47] = A, s[48] = C, s[49] = E, s[50] = J, s[51] = Y, s[52] = Z, s[53] = Q, s[54] = $) : $ = s[54], $;
|
|
128
|
+
}
|
|
129
|
+
function se(e) {
|
|
130
|
+
return o(e);
|
|
131
|
+
}
|
|
132
|
+
function c(e, t) {
|
|
133
|
+
return e.rowData === t.rowData && e.choices === t.choices && e.colType === t.colType && e.focus === t.focus && e.active === t.active && e.clearValue === t.clearValue;
|
|
88
134
|
}
|
|
89
|
-
var
|
|
90
|
-
function
|
|
135
|
+
var l = n(s, c);
|
|
136
|
+
function u({ choices: e, colType: t, clearValue: n }) {
|
|
91
137
|
return {
|
|
92
|
-
component: ((r) => /* @__PURE__ */ l
|
|
138
|
+
component: ((r) => /* @__PURE__ */ a(l, {
|
|
93
139
|
...r,
|
|
94
140
|
choices: e,
|
|
95
141
|
colType: t,
|
|
@@ -102,6 +148,6 @@ function m({ choices: e, colType: t, clearValue: n }) {
|
|
|
102
148
|
};
|
|
103
149
|
}
|
|
104
150
|
//#endregion
|
|
105
|
-
export {
|
|
151
|
+
export { s as AutocompleteCell, l as MemoizedAutocompleteCell, c as areAutocompleteCellPropsEqual, u as autocompleteColumn, o as castCellValueToString };
|
|
106
152
|
|
|
107
153
|
//# sourceMappingURL=AutocompleteColumn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteColumn.js","names":["parseFreeTextGivenJsonSchemaType","Autocomplete","SxProps","TextField","Theme","JSONSchema7Type","isNil","memo","useEffect","useMemo","useRef","useState","CellComponent","CellProps","Column","AUTOCOMPLETE_BASE_SX","width","height","padding","backgroundColor","borderRadius","AutocompleteOption","Record","Array","AutocompleteCellProps","rowData","setRowData","value","choices","colType","clearValue","castCellValueToString","toCast","JSON","stringify","String","AutocompleteCell","focus","stopEditing","active","undefined","menuIsOpen","setMenuIsOpen","textInputRef","HTMLInputElement","rowDataAsString","localInputState","setLocalInputState","current","blur","hasValue","autocompleteSx","pointerEvents","visibility","option","_","newInputValue","e","key","preventDefault","nextRow","_e","newVal","reason","setTimeout","params","MemoizedAutocompleteCell","prevProps","nextProps","AutocompleteColumnProps","autocompleteColumn","Partial","component","props","Omit","copyValue","pasteValue","disableKeys","keepFocus"],"sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"sourcesContent":["import parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport { Autocomplete, SxProps, TextField, Theme } from '@mui/material'\nimport { JSONSchema7Type } from 'json-schema'\nimport { isNil } from 'lodash-es'\nimport { memo, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n CellComponent,\n CellProps,\n Column,\n} from '@sage-bionetworks/react-datasheet-grid'\n\n// Static styles extracted to avoid recreation on every render\nconst AUTOCOMPLETE_BASE_SX: SxProps<Theme> = {\n width: '100%',\n height: '100%',\n '& .MuiTextField-root .MuiInputBase-root': {\n height: '100%',\n padding: '0 10px',\n backgroundColor: 'inherit',\n borderRadius: 0,\n },\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n },\n '& .MuiFormControl-root': { height: '100%' },\n}\n\nexport type AutocompleteOption =\n | string\n | number\n | boolean\n | null\n | Record<string, unknown>\n | Array<unknown>\n\nexport type AutocompleteCellProps = CellProps & {\n rowData: AutocompleteOption\n setRowData: (value: AutocompleteOption) => void\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n clearValue?: undefined | null\n}\n\nexport function castCellValueToString(toCast: any): string {\n if (isNil(toCast)) {\n return ''\n }\n if (typeof toCast === 'object') {\n return JSON.stringify(toCast)\n }\n return String(toCast)\n}\n\nexport function AutocompleteCell({\n rowData,\n setRowData,\n choices,\n colType,\n focus,\n stopEditing,\n active,\n clearValue = undefined,\n}: AutocompleteCellProps) {\n const [menuIsOpen, setMenuIsOpen] = useState(false)\n const textInputRef = useRef<HTMLInputElement>(null)\n\n const rowDataAsString = castCellValueToString(rowData)\n const [localInputState, setLocalInputState] =\n useState<string>(rowDataAsString)\n\n useEffect(() => {\n // Treat `active` as the source of truth for blurring\n // If we listen to Autocomplete's onBlur, it will fire when selecting an option from the dropdown, in which case\n // we do not want to update rowData\n if (active) {\n textInputRef.current?.focus()\n } else {\n setMenuIsOpen(false)\n textInputRef.current?.blur()\n if (localInputState !== rowDataAsString) {\n // If we have local edits that haven't been committed yet, commit them now\n setRowData(parseFreeTextGivenJsonSchemaType(localInputState, colType))\n }\n }\n // only invoke this if active changes!\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [active])\n\n // When not actively being edited, sync localInputState with rowData (e.g., after cut)\n useEffect(() => {\n if (!focus && !active) {\n setLocalInputState(rowDataAsString)\n }\n }, [focus, active, rowDataAsString])\n\n const hasValue = !isNil(rowData) && rowData !== ''\n\n // Memoize sx to avoid recreation - dynamic styles change based on active/focus state\n const autocompleteSx = useMemo<SxProps<Theme>>(\n () => ({\n ...AUTOCOMPLETE_BASE_SX,\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n pointerEvents: focus ? undefined : 'none',\n },\n '& .MuiAutocomplete-clearIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '& .MuiAutocomplete-popupIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '&:hover .MuiAutocomplete-clearIndicator': {\n visibility: 'visible',\n },\n '&:hover .MuiAutocomplete-popupIndicator': {\n visibility: 'visible',\n },\n }),\n [active, focus],\n )\n\n return (\n <Autocomplete\n open={menuIsOpen}\n onOpen={() => {\n setMenuIsOpen(true)\n }}\n forcePopupIcon={true}\n disableClearable={!hasValue}\n freeSolo={true}\n disablePortal={false}\n options={choices}\n autoSelect\n selectOnFocus\n getOptionLabel={option => castCellValueToString(option)}\n value={rowData as AutocompleteOption}\n inputValue={localInputState}\n onInputChange={(_, newInputValue) => {\n setLocalInputState(newInputValue)\n }}\n onKeyDown={e => {\n // tab\n if (e.key === 'Tab') {\n e.preventDefault()\n stopEditing({ nextRow: false })\n } else if (e.key === 'Enter') {\n e.preventDefault()\n stopEditing({ nextRow: true })\n }\n }}\n onClose={() => {\n setMenuIsOpen(false)\n stopEditing({ nextRow: false })\n }}\n onChange={(_e, newVal, reason) => {\n if (reason === 'clear') {\n setRowData(clearValue)\n } else if (reason === 'createOption') {\n // The user typed an option that wasn't a defined enum. Try to cast it to the correct type\n setRowData(\n parseFreeTextGivenJsonSchemaType(newVal as string, colType),\n )\n } else {\n // The value was selected, so explicitly set it\n setRowData(newVal)\n }\n setTimeout(() => stopEditing({ nextRow: false }), 0)\n }}\n blurOnSelect={true}\n renderInput={params => {\n return <TextField {...params} inputRef={textInputRef} />\n }}\n sx={autocompleteSx}\n />\n )\n}\n\n// Memoize the cell component to prevent unnecessary re-renders\n// Custom comparison function that ignores function prop identity changes\n// since the grid library recreates them on each render but their behavior is stable\nconst MemoizedAutocompleteCell = memo(\n AutocompleteCell,\n (prevProps, nextProps) => {\n // Compare all non-function props that represent actual state changes\n return (\n prevProps.active === nextProps.active &&\n prevProps.focus === nextProps.focus &&\n prevProps.rowData === nextProps.rowData &&\n prevProps.choices === nextProps.choices &&\n prevProps.colType === nextProps.colType &&\n prevProps.clearValue === nextProps.clearValue\n // Note: We intentionally skip comparing stopEditing and setRowData\n // These are recreated by react-datasheet-grid on every render but their\n // behavior remains functionally identical for the same cell position.\n // Comparing them would defeat the purpose of memoization.\n )\n },\n)\n\nexport type AutocompleteColumnProps = {\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n clearValue: undefined | null\n}\n\nexport function autocompleteColumn({\n choices,\n colType,\n clearValue,\n}: AutocompleteColumnProps): Partial<Column> {\n return {\n component: ((props: Omit<AutocompleteCellProps, 'choices'>) => (\n <MemoizedAutocompleteCell\n {...props}\n choices={choices}\n colType={colType}\n clearValue={clearValue}\n />\n )) as CellComponent,\n // If we update our enums to support labels, then we can update copy to copy the label and paste to lookup the mapping from label -> value\n copyValue: ({ rowData }) => rowData,\n pasteValue: ({ value }) => value,\n disableKeys: true,\n keepFocus: true,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutocompleteColumn.js","names":["parseFreeTextGivenJsonSchemaType","Autocomplete","AutocompleteChangeReason","SxProps","TextField","Theme","JSONSchema7Type","isNil","memo","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CellComponent","CellProps","Column","useGridAutocompleteState","AUTOCOMPLETE_BASE_SX","width","height","padding","backgroundColor","borderRadius","AutocompleteOption","Record","Array","AutocompleteCellProps","rowData","setRowData","value","choices","colType","clearValue","castCellValueToString","toCast","JSON","stringify","String","AutocompleteCell","t0","$","_c","focus","stopEditing","active","t1","undefined","setRowDataRef","t2","current","stopEditingRef","t3","t4","rowDataAsString","localInputState","setLocalInputState","t5","t6","onDeactivate","menuIsOpen","inputRef","handleListboxMouseDown","notifyOptionCommitted","handleMenuOpen","handleClose","t7","t8","t9","hasValue","t10","t11","pointerEvents","t12","t13","visibility","t14","t15","t16","t17","Symbol","for","t18","autocompleteSx","t19","e","key","preventDefault","nextRow","handleKeyDown","t20","_e","newVal","reason","setTimeout","handleChange","t21","t22","t23","_","newInputValue","t24","listbox","onMouseDown","t25","params","t26","_temp","option","areAutocompleteCellPropsEqual","prevProps","nextProps","MemoizedAutocompleteCell","AutocompleteColumnProps","autocompleteColumn","Partial","component","props","Omit","copyValue","pasteValue","disableKeys","keepFocus"],"sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"sourcesContent":["import parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport {\n Autocomplete,\n AutocompleteChangeReason,\n SxProps,\n TextField,\n Theme,\n} from '@mui/material'\nimport { JSONSchema7Type } from 'json-schema'\nimport { isNil } from 'lodash-es'\nimport {\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n CellComponent,\n CellProps,\n Column,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { useGridAutocompleteState } from './useGridAutocompleteState'\n\n// Static styles extracted to avoid recreation on every render\nconst AUTOCOMPLETE_BASE_SX: SxProps<Theme> = {\n width: '100%',\n height: '100%',\n '& .MuiTextField-root .MuiInputBase-root': {\n height: '100%',\n padding: '0 10px',\n backgroundColor: 'inherit',\n borderRadius: 0,\n },\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n },\n '& .MuiFormControl-root': { height: '100%' },\n}\n\nexport type AutocompleteOption =\n | string\n | number\n | boolean\n | null\n | Record<string, unknown>\n | Array<unknown>\n\nexport type AutocompleteCellProps = CellProps & {\n rowData: AutocompleteOption\n setRowData: (value: AutocompleteOption) => void\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n clearValue?: undefined | null\n}\n\nexport function castCellValueToString(toCast: any): string {\n if (isNil(toCast)) {\n return ''\n }\n if (typeof toCast === 'object') {\n return JSON.stringify(toCast)\n }\n return String(toCast)\n}\n\nexport function AutocompleteCell({\n rowData,\n setRowData,\n choices,\n colType,\n focus,\n stopEditing,\n active,\n clearValue = undefined,\n}: AutocompleteCellProps) {\n // Stable refs so memo(AutocompleteCell) can use default shallow comparison —\n // react-datasheet-grid recreates these functions on every render, but their\n // behavior is stable for a given cell position.\n const setRowDataRef = useRef(setRowData)\n useLayoutEffect(() => {\n setRowDataRef.current = setRowData\n })\n const stopEditingRef = useRef(stopEditing)\n useLayoutEffect(() => {\n stopEditingRef.current = stopEditing\n })\n\n const rowDataAsString = castCellValueToString(rowData)\n const [localInputState, setLocalInputState] =\n useState<string>(rowDataAsString)\n\n const {\n menuIsOpen,\n inputRef,\n handleListboxMouseDown,\n notifyOptionCommitted,\n handleMenuOpen,\n handleClose,\n } = useGridAutocompleteState({\n active,\n stopEditing,\n onDeactivate: () => {\n if (localInputState !== rowDataAsString) {\n // Commit any free-typed text that hasn't been saved yet\n setRowDataRef.current(\n parseFreeTextGivenJsonSchemaType(localInputState, colType),\n )\n }\n },\n })\n\n // When not actively being edited, sync localInputState with rowData (e.g. after cut)\n useEffect(() => {\n if (!focus && !active) {\n setLocalInputState(rowDataAsString)\n }\n }, [focus, active, rowDataAsString])\n\n const hasValue = !isNil(rowData) && rowData !== ''\n\n // Memoize sx to avoid recreation — dynamic styles change based on active/focus state\n const autocompleteSx = useMemo<SxProps<Theme>>(\n () => ({\n ...AUTOCOMPLETE_BASE_SX,\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n pointerEvents: focus ? undefined : 'none',\n },\n '& .MuiAutocomplete-clearIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '& .MuiAutocomplete-popupIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '&:hover .MuiAutocomplete-clearIndicator': {\n visibility: 'visible',\n },\n '&:hover .MuiAutocomplete-popupIndicator': {\n visibility: 'visible',\n },\n }),\n [active, focus],\n )\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n e.preventDefault()\n stopEditingRef.current({ nextRow: false })\n } else if (e.key === 'Enter') {\n e.preventDefault()\n stopEditingRef.current({ nextRow: true })\n }\n }, [])\n\n const handleChange = useCallback(\n (\n _e: React.SyntheticEvent,\n newVal: unknown,\n reason: AutocompleteChangeReason,\n ) => {\n notifyOptionCommitted()\n if (reason === 'clear') {\n setRowDataRef.current(clearValue)\n } else if (reason === 'createOption') {\n // The user typed an option that wasn't a defined enum — cast to correct type\n setRowDataRef.current(\n parseFreeTextGivenJsonSchemaType(newVal as string, colType),\n )\n } else {\n setRowDataRef.current(newVal as AutocompleteOption)\n }\n setTimeout(() => {\n stopEditingRef.current({ nextRow: false })\n }, 0)\n },\n [clearValue, colType, notifyOptionCommitted],\n )\n\n return (\n <Autocomplete\n open={menuIsOpen}\n onOpen={handleMenuOpen}\n forcePopupIcon={true}\n disableClearable={!hasValue}\n freeSolo={true}\n disablePortal={false}\n options={choices}\n selectOnFocus\n getOptionLabel={option => castCellValueToString(option)}\n value={rowData as AutocompleteOption}\n inputValue={localInputState}\n onInputChange={(_, newInputValue) => {\n setLocalInputState(newInputValue)\n }}\n onKeyDown={handleKeyDown}\n onClose={handleClose}\n onChange={handleChange}\n blurOnSelect={true}\n slotProps={{\n listbox: { onMouseDown: handleListboxMouseDown },\n }}\n renderInput={params => <TextField {...params} inputRef={inputRef} />}\n sx={autocompleteSx}\n />\n )\n}\n\n// Memoize the cell component to prevent unnecessary re-renders.\n// react-datasheet-grid provides new setRowData/stopEditing function instances\n// on each render, so we must ignore those callback identities here and only\n// compare the props that affect rendering.\nexport function areAutocompleteCellPropsEqual(\n prevProps: AutocompleteCellProps,\n nextProps: AutocompleteCellProps,\n) {\n return (\n prevProps.rowData === nextProps.rowData &&\n prevProps.choices === nextProps.choices &&\n prevProps.colType === nextProps.colType &&\n prevProps.focus === nextProps.focus &&\n prevProps.active === nextProps.active &&\n prevProps.clearValue === nextProps.clearValue\n )\n}\n\nexport const MemoizedAutocompleteCell = memo(\n AutocompleteCell,\n areAutocompleteCellPropsEqual,\n)\nexport type AutocompleteColumnProps = {\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n clearValue: undefined | null\n}\n\nexport function autocompleteColumn({\n choices,\n colType,\n clearValue,\n}: AutocompleteColumnProps): Partial<Column> {\n return {\n component: ((props: Omit<AutocompleteCellProps, 'choices'>) => (\n <MemoizedAutocompleteCell\n {...props}\n choices={choices}\n colType={colType}\n clearValue={clearValue}\n />\n )) as CellComponent,\n // If we update our enums to support labels, then we can update copy to copy the label and paste to lookup the mapping from label -> value\n copyValue: ({ rowData }) => rowData,\n pasteValue: ({ value }) => value,\n disableKeys: true,\n keepFocus: true,\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { JSONSchema7Type } from 'json-schema';
|
|
2
2
|
import { Column } from '@sage-bionetworks/react-datasheet-grid';
|
|
3
3
|
import { AutocompleteCellProps, AutocompleteOption } from './AutocompleteColumn';
|
|
4
|
-
export type AutocompleteMultipleEnumOption = AutocompleteOption
|
|
4
|
+
export type AutocompleteMultipleEnumOption = AutocompleteOption;
|
|
5
5
|
export type AutocompleteMultipleEnumCellProps = Omit<AutocompleteCellProps, 'choices'> & {
|
|
6
6
|
choices: AutocompleteMultipleEnumOption[];
|
|
7
7
|
limitTags?: number;
|
|
8
8
|
clearValue?: undefined | null;
|
|
9
9
|
};
|
|
10
|
+
export declare function areAutocompleteMultipleEnumCellPropsEqual(prevProps: AutocompleteMultipleEnumCellProps, nextProps: AutocompleteMultipleEnumCellProps): boolean;
|
|
10
11
|
export type AutocompleteMultipleEnumColumnProps = {
|
|
11
12
|
choices: AutocompleteMultipleEnumOption[];
|
|
12
13
|
colType?: JSONSchema7Type;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteMultipleEnumColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/AutocompleteMultipleEnumColumn.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AutocompleteMultipleEnumColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/AutocompleteMultipleEnumColumn.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAS7C,OAAO,EAAiB,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAEL,qBAAqB,EAErB,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AA+B7B,MAAM,MAAM,8BAA8B,GAAG,kBAAkB,CAAA;AAE/D,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,qBAAqB,EACrB,SAAS,CACV,GAAG;IACF,OAAO,EAAE,8BAA8B,EAAE,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC9B,CAAA;AA4OD,wBAAgB,yCAAyC,CACvD,SAAS,EAAE,iCAAiC,EAC5C,SAAS,EAAE,iCAAiC,WAM7C;AAOD,MAAM,MAAM,mCAAmC,GAAG;IAChD,OAAO,EAAE,8BAA8B,EAAE,CAAA;IACzC,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,OAAO,EACP,OAAO,EACP,SAAa,EACb,aAAqB,EACrB,UAAsB,GACvB,EAAE,mCAAmC,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CvD"}
|