synapse-react-client 4.0.46 → 4.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.js +1 -1
- package/dist/aridhia-queries/useSubmitAridhiaDar.js +2 -2
- package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.test-utils.js +3 -5
- package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +43 -30
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +6 -2
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js +101 -31
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +11 -9
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +24 -13
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
- package/dist/components/Authentication/LastLoginInfo.js +2 -2
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
- package/dist/components/Authentication/TOTPForm.js +3 -3
- package/dist/components/Authentication/TOTPForm.js.map +1 -1
- package/dist/components/Authentication/index.d.ts +6 -6
- package/dist/components/Authentication/index.d.ts.map +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
- package/dist/components/CardContainer/CardContainer.js +7 -7
- package/dist/components/CardContainer/CardContainer.js.map +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +1 -1
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverUtils.js +2 -2
- package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
- package/dist/components/CohortBuilder/CohortBuilder.css +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.d.ts +35 -0
- package/dist/components/CohortBuilder/CohortBuilder.d.ts.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.js +108 -0
- package/dist/components/CohortBuilder/CohortBuilder.js.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.js +10 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.js.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.scss +20 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.d.ts +16 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.d.ts.map +1 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.js +124 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.js.map +1 -0
- package/dist/components/CohortBuilder/cohortHandOff.d.ts +25 -0
- package/dist/components/CohortBuilder/cohortHandOff.d.ts.map +1 -0
- package/dist/components/CohortBuilder/cohortHandOff.js +26 -0
- package/dist/components/CohortBuilder/cohortHandOff.js.map +1 -0
- package/dist/components/ColumnFilter/ColumnFilter.d.ts.map +1 -1
- package/dist/components/ColumnFilter/ColumnFilter.js +14 -13
- package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +11 -2
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.js +115 -109
- package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.js +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts +20 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts.map +1 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.js +18 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.js.map +1 -0
- package/dist/components/DataGrid/components/contextMenu.js +3 -3
- package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.d.ts.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js +9 -7
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
- package/dist/components/DataGrid/hooks/useStack.d.ts +1 -1
- package/dist/components/DataGrid/hooks/useStack.js +2 -2
- package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +47 -42
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js +7 -7
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js +2 -2
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
- package/dist/components/DownloadCart/MeetAccessRequirementCard.js +1 -1
- package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +5 -5
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.d.ts.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.js +4 -4
- package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js +4 -4
- package/dist/components/EntityHeaderTable/Filter.d.ts.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.js +1 -1
- package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.d.ts.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +80 -84
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormStructurePanel.js +7 -7
- package/dist/components/FormTemplateEditor/StepCard.js +9 -9
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js +2 -2
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
- package/dist/components/FullTextSearch/FullTextSearch.js +8 -8
- package/dist/components/GenericCard/CardUtils.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +1 -1
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/duoTerms.js +1 -1
- package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +37 -37
- package/dist/components/GoalsV3/GoalsV3.js +1 -1
- package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
- package/dist/components/HexGrid/HexGrid.d.ts +3 -1
- package/dist/components/HexGrid/HexGrid.d.ts.map +1 -1
- package/dist/components/HexGrid/HexGrid.js +14 -13
- package/dist/components/HexGrid/HexGrid.js.map +1 -1
- package/dist/components/IconSvg/index.d.ts +1 -1
- package/dist/components/IconSvg/index.d.ts.map +1 -1
- package/dist/components/IconSvg/index.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js +3 -3
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
- package/dist/components/Markdown/MarkdownEditor.js +1 -1
- package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
- package/dist/components/Markdown/widget/index.d.ts +1 -1
- package/dist/components/Markdown/widget/index.d.ts.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.d.ts.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.js +2 -1
- package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
- package/dist/components/Plot/BarPlot.js +1 -1
- package/dist/components/Plot/BarPlot.js.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.d.ts +3 -2
- package/dist/components/Plot/PlotPanelHeader.d.ts.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js +3 -3
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.js +28 -27
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.js +91 -75
- package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.js +91 -79
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js +11 -11
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +2 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +2 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderLimits.d.ts +18 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.js +38 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +0 -8
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderMetadata.js +6 -9
- package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +5 -4
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.js +58 -33
- package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.js +4 -4
- package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.js +5 -5
- package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -1
- package/dist/components/QuerySortSelector.js +5 -5
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +21 -21
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts +20 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts.map +1 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js +50 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js.map +1 -0
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts +5 -3
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js +7 -3
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
- package/dist/components/QueryWrapper/downloadListFiles.d.ts +25 -0
- package/dist/components/QueryWrapper/downloadListFiles.d.ts.map +1 -0
- package/dist/components/QueryWrapper/downloadListFiles.js +39 -0
- package/dist/components/QueryWrapper/downloadListFiles.js.map +1 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts +16 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts.map +1 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js +50 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js.map +1 -0
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts +4 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts.map +1 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js +15 -28
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.d.ts.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.js +7 -6
- package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts +3 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.js +26 -21
- package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +7 -7
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +2 -2
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +34 -32
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +7 -7
- package/dist/components/QueryWrapperPlotNav/UseRowSet.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js +12 -12
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
- package/dist/components/RowDataTable/CategorizedRowDataTable.css +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts +33 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.js +64 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.js.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.js +8 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.js.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.scss +18 -0
- package/dist/components/RowDataTable/RowDataTable.d.ts +13 -0
- package/dist/components/RowDataTable/RowDataTable.d.ts.map +1 -1
- package/dist/components/RowDataTable/RowDataTable.js +25 -8
- package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.d.ts.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js +2 -2
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +17 -9
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +39 -30
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +24 -24
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js +8 -8
- package/dist/components/SynapseChat/SynapseChatMessage.js +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
- package/dist/components/SynapseForm/NavButtons.js.map +1 -1
- package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/HighlightedTypography.js +1 -1
- package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js +3 -3
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +38 -44
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +4 -4
- package/dist/components/SynapseTable/SqlEditor.js +7 -7
- package/dist/components/SynapseTable/SynapseTable.js +8 -8
- package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.js +73 -72
- package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +44 -45
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.d.ts.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +142 -142
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +4 -4
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +12 -12
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
- package/dist/components/SynapseTable/table-top/ColumnSelection.js +6 -6
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +0 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.js +64 -57
- package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.d.ts.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js +3 -3
- package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +2 -2
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +60 -60
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.js +1 -4
- package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
- package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
- package/dist/components/TotalQueryResults.js +14 -14
- package/dist/components/Webhook/WebhookDashboard.d.ts.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js +2 -2
- package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.d.ts +5 -1
- package/dist/components/download_list/DownloadConfirmationUtils.d.ts.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.js +2 -2
- package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
- package/dist/components/error/ErrorBanner.d.ts.map +1 -1
- package/dist/components/error/ErrorBanner.js +49 -46
- package/dist/components/error/ErrorBanner.js.map +1 -1
- package/dist/components/file/upload/MultiFileUploadProgress.js +5 -5
- package/dist/components/row_renderers/Dataset.d.ts.map +1 -1
- package/dist/components/row_renderers/Dataset.js +6 -6
- package/dist/components/row_renderers/Dataset.js.map +1 -1
- package/dist/components/row_renderers/Funder.js +1 -1
- package/dist/components/row_renderers/Funder.js.map +1 -1
- package/dist/components/widgets/ElementWithTooltip.d.ts +6 -1
- package/dist/components/widgets/ElementWithTooltip.d.ts.map +1 -1
- package/dist/components/widgets/ElementWithTooltip.js +22 -14
- package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.d.ts.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/components/widgets/SynapseImage.js +1 -1
- package/dist/components/widgets/SynapseImage.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +16 -5
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +115 -102
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js +4 -2
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts +2 -0
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +7 -0
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.js +47 -45
- package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
- package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +4 -4
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts +3 -2
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.js +16 -15
- package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
- package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js +4 -4
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +2 -2
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +62 -60
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -0
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +10 -10
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +2 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts +3 -2
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.d.ts +3 -2
- package/dist/components/widgets/query-filter/FacetFilterControls.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js +63 -62
- package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js +30 -29
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js +5 -5
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts +53 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js +391 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts +41 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js +379 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts +26 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js +112 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js.map +1 -0
- package/dist/mocks/mockAnnotationColumns.d.ts.map +1 -1
- package/dist/mocks/mockAnnotationColumns.js +1 -1
- package/dist/mocks/mockAnnotationColumns.js.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +9 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +24 -15
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +21 -2
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js +30 -22
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts +27 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.js +158 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.js.map +1 -0
- package/dist/mocks/msw/handlers/subscriptionHandlers.js +1 -1
- package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js +2 -2
- package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
- package/dist/mocks/query/mockColumnCategoryTable.d.ts +19 -0
- package/dist/mocks/query/mockColumnCategoryTable.d.ts.map +1 -0
- package/dist/mocks/query/mockColumnCategoryTable.js +188 -0
- package/dist/mocks/query/mockColumnCategoryTable.js.map +1 -0
- package/dist/stories/ColorPaletteInspector.d.ts.map +1 -1
- package/dist/stories/ColorPaletteInspector.js +2 -2
- package/dist/stories/ColorPaletteInspector.js.map +1 -1
- package/dist/style/components/facet_nav/_facet-nav-panel.scss +8 -0
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/auth/useOIDC.js +2 -2
- package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +2 -2
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -1
- package/dist/synapse-queries/challenge/useChallenge.js +2 -2
- package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
- package/dist/synapse-queries/chat/useChat.js +8 -8
- package/dist/synapse-queries/chat/useChat.js.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.js +10 -10
- package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js +24 -24
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js +4 -4
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +6 -6
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useFormTemplate.js +4 -4
- package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
- package/dist/synapse-queries/download/index.js +2 -2
- package/dist/synapse-queries/download/useDownloadList.d.ts +5 -0
- package/dist/synapse-queries/download/useDownloadList.d.ts.map +1 -1
- package/dist/synapse-queries/download/useDownloadList.js +14 -13
- package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
- package/dist/synapse-queries/entity/useEntity.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useEntity.js +20 -20
- package/dist/synapse-queries/entity/useEntity.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js +2 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.js +3 -2
- package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.js +2 -1
- package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js +4 -7
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
- package/dist/synapse-queries/forum/useReply.js +6 -6
- package/dist/synapse-queries/forum/useReply.js.map +1 -1
- package/dist/synapse-queries/forum/useThread.js +14 -14
- package/dist/synapse-queries/forum/useThread.js.map +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
- package/dist/synapse-queries/grid/useGridSession.js +4 -4
- package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
- package/dist/synapse-queries/index.js +177 -176
- package/dist/synapse-queries/oauth/useOAuthClient.js +9 -9
- package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
- package/dist/synapse-queries/portal/usePortal.js +7 -7
- package/dist/synapse-queries/portal/usePortal.js.map +1 -1
- package/dist/synapse-queries/subscription/useSubscription.js +4 -4
- package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
- package/dist/synapse-queries/table/useTableUpdateTransaction.js +2 -2
- package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
- package/dist/synapse-queries/team/useTeam.js +2 -2
- package/dist/synapse-queries/team/useTeam.js.map +1 -1
- package/dist/synapse-queries/team/useTeamList.d.ts.map +1 -1
- package/dist/synapse-queries/team/useTeamList.js +3 -3
- package/dist/synapse-queries/team/useTeamList.js.map +1 -1
- package/dist/synapse-queries/team/useTeamMembers.js +8 -8
- package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
- package/dist/synapse-queries/termsOfService/useTermsOfService.js +2 -2
- package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
- package/dist/synapse-queries/trash/useTrashCan.js +4 -4
- package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
- package/dist/synapse-queries/user/useCertificationQuiz.js +2 -2
- package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
- package/dist/synapse-queries/user/useFavorites.js +4 -4
- package/dist/synapse-queries/user/useFavorites.js.map +1 -1
- package/dist/synapse-queries/user/useRevokeCertification.js +2 -2
- package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
- package/dist/synapse-queries/wiki/useWiki.js +10 -10
- package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/ContentTypeUtils.js +4 -4
- package/dist/utils/ContentTypeUtils.js.map +1 -1
- package/dist/utils/PermissionLevelToAccessType.js +1 -1
- package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
- package/dist/utils/context/DocumentMetadataContext.js +1 -1
- package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.js +3 -3
- package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
- package/dist/utils/functions/ArrayUtils.js +2 -2
- package/dist/utils/functions/ArrayUtils.js.map +1 -1
- package/dist/utils/functions/FileHandleUtils.js +1 -1
- package/dist/utils/functions/FileHandleUtils.js.map +1 -1
- package/dist/utils/functions/RegularExpressions.js +1 -1
- package/dist/utils/functions/RegularExpressions.js.map +1 -1
- package/dist/utils/functions/StringUtils.d.ts.map +1 -1
- package/dist/utils/functions/StringUtils.js +1 -2
- package/dist/utils/functions/StringUtils.js.map +1 -1
- package/dist/utils/functions/deepLinkingUtils.js +2 -2
- package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
- package/dist/utils/functions/enumerationFacet.d.ts +26 -0
- package/dist/utils/functions/enumerationFacet.d.ts.map +1 -0
- package/dist/utils/functions/enumerationFacet.js +27 -0
- package/dist/utils/functions/enumerationFacet.js.map +1 -0
- package/dist/utils/functions/facetCountUtils.d.ts +12 -0
- package/dist/utils/functions/facetCountUtils.d.ts.map +1 -0
- package/dist/utils/functions/facetCountUtils.js +9 -0
- package/dist/utils/functions/facetCountUtils.js.map +1 -0
- package/dist/utils/functions/getEndpoint.js.map +1 -1
- package/dist/utils/functions/getUserData.js +1 -1
- package/dist/utils/functions/getUserData.js.map +1 -1
- package/dist/utils/functions/queryUtils.d.ts +1 -1
- package/dist/utils/functions/queryUtils.d.ts.map +1 -1
- package/dist/utils/functions/queryUtils.js +26 -22
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.d.ts.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.js +17 -26
- package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
- package/dist/utils/functions/unCamelCase.js +1 -1
- package/dist/utils/functions/unCamelCase.js.map +1 -1
- package/dist/utils/hooks/useGetInfoFromIds.js +5 -5
- package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
- package/dist/utils/hooks/useLogin.d.ts.map +1 -1
- package/dist/utils/hooks/useLogin.js +5 -5
- package/dist/utils/hooks/useLogin.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +6 -0
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.js +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -1
- package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts +22 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts.map +1 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.js +39 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.js.map +1 -0
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts +1 -0
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts.map +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts +5 -0
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js +30 -15
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
- package/dist/utils/jsonschema/submissionContext.js +2 -2
- package/dist/utils/jsonschema/submissionContext.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { JSONSchema7Type } from 'json-schema';
|
|
2
2
|
import { CellProps, Column } from '@sage-bionetworks/react-datasheet-grid';
|
|
3
3
|
export type AutocompleteOption = string | number | boolean | null | Record<string, unknown> | Array<unknown>;
|
|
4
|
+
/** Converts text typed or pasted into a cell into the value stored in the model */
|
|
5
|
+
export type ParseFreeText = (freeText: string) => unknown;
|
|
4
6
|
export type AutocompleteCellProps = CellProps & {
|
|
5
7
|
rowData: AutocompleteOption;
|
|
6
8
|
setRowData: (value: AutocompleteOption) => void;
|
|
7
9
|
choices: AutocompleteOption[];
|
|
8
10
|
colType?: JSONSchema7Type;
|
|
11
|
+
/**
|
|
12
|
+
* Replaces parsing typed text by `colType`. Compared by reference when
|
|
13
|
+
* memoizing the cell, so it must be stable across renders.
|
|
14
|
+
*/
|
|
15
|
+
parseFreeText?: ParseFreeText;
|
|
9
16
|
clearValue?: undefined | null;
|
|
10
17
|
};
|
|
11
18
|
export declare function castCellValueToString(toCast: any): string;
|
|
12
|
-
export declare function AutocompleteCell({ rowData, setRowData, choices, colType, focus, stopEditing, active, clearValue, }: AutocompleteCellProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function AutocompleteCell({ rowData, setRowData, choices, colType, parseFreeText, focus, stopEditing, active, clearValue, }: AutocompleteCellProps): import("react/jsx-runtime").JSX.Element;
|
|
13
20
|
export declare function areAutocompleteCellPropsEqual(prevProps: AutocompleteCellProps, nextProps: AutocompleteCellProps): boolean;
|
|
14
21
|
export declare const MemoizedAutocompleteCell: import("react").NamedExoticComponent<AutocompleteCellProps>;
|
|
15
22
|
export type AutocompleteColumnProps = {
|
|
16
23
|
choices: AutocompleteOption[];
|
|
17
24
|
colType?: JSONSchema7Type;
|
|
25
|
+
/** Parses typed and pasted text. When omitted, both are parsed by `colType`. */
|
|
26
|
+
parseFreeText?: ParseFreeText;
|
|
18
27
|
clearValue: undefined | null;
|
|
19
28
|
};
|
|
20
|
-
export declare function autocompleteColumn({ choices, colType, clearValue, }: AutocompleteColumnProps): Partial<Column>;
|
|
29
|
+
export declare function autocompleteColumn({ choices, colType, parseFreeText, clearValue, }: AutocompleteColumnProps): Partial<Column>;
|
|
21
30
|
//# sourceMappingURL=AutocompleteColumn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;AAqBD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAsB,GACvB,EAAE,qBAAqB,
|
|
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,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;AAYzD,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;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAQzD;AAqBD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,aAAa,EACb,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAsB,GACvB,EAAE,qBAAqB,2CAmJvB;AAMD,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,qBAAqB,WAWjC;AAED,eAAO,MAAM,wBAAwB,6DAGpC,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,aAAa,EACb,UAAU,GACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3C"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import e from "../utils/parseFreeTextUsingJsonSchemaType.js";
|
|
2
2
|
import { useGridAutocompleteState as t } from "./useGridAutocompleteState.js";
|
|
3
|
-
import { memo as n, useEffect as r, useLayoutEffect as
|
|
4
|
-
import { isNil as
|
|
5
|
-
import { Autocomplete as
|
|
6
|
-
import { jsx as
|
|
7
|
-
import { c as
|
|
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";
|
|
8
8
|
//#region src/components/DataGrid/columns/AutocompleteColumn.tsx
|
|
9
|
-
var
|
|
9
|
+
var oe = {
|
|
10
10
|
width: "100%",
|
|
11
11
|
height: "100%",
|
|
12
12
|
"& .MuiTextField-root .MuiInputBase-root": {
|
|
@@ -21,148 +21,154 @@ var ce = {
|
|
|
21
21
|
},
|
|
22
22
|
"& .MuiFormControl-root": { height: "100%" }
|
|
23
23
|
};
|
|
24
|
-
function
|
|
25
|
-
return
|
|
24
|
+
function se(t, n, r) {
|
|
25
|
+
return r ? r(t) : e(t, n);
|
|
26
26
|
}
|
|
27
|
-
function
|
|
27
|
+
function o(e) {
|
|
28
|
+
return ne(e) ? "" : typeof e == "object" ? JSON.stringify(e) : String(e);
|
|
29
|
+
}
|
|
30
|
+
function ce(e, t) {
|
|
28
31
|
return e == null || typeof e == "string" && e.trim() === "" ? t : e;
|
|
29
32
|
}
|
|
30
|
-
function
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
let
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
let
|
|
40
|
-
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
function s(e) {
|
|
34
|
+
let n = ae(64), { rowData: s, setRowData: c, choices: l, colType: u, parseFreeText: ue, focus: d, stopEditing: f, active: p, clearValue: de } = e, m = de === void 0 ? void 0 : de, h = ee(c), g;
|
|
35
|
+
n[0] === c ? g = n[1] : (g = () => {
|
|
36
|
+
h.current = c;
|
|
37
|
+
}, n[0] = c, n[1] = g), i(g);
|
|
38
|
+
let _ = ee(f), v;
|
|
39
|
+
n[2] === f ? v = n[3] : (v = () => {
|
|
40
|
+
_.current = f;
|
|
41
|
+
}, n[2] = f, n[3] = v), i(v);
|
|
42
|
+
let y;
|
|
43
|
+
n[4] === s ? y = n[5] : (y = o(s), n[4] = s, n[5] = y);
|
|
44
|
+
let b = y, [x, fe] = te(b), S;
|
|
45
|
+
n[6] !== u || n[7] !== ue ? (S = (e) => se(e, u, ue), n[6] = u, n[7] = ue, n[8] = S) : S = n[8];
|
|
46
|
+
let C = S, w;
|
|
47
|
+
n[9] !== m || n[10] !== x || n[11] !== C || n[12] !== b ? (w = () => {
|
|
48
|
+
if (x !== b) {
|
|
49
|
+
let e = C(x);
|
|
50
|
+
h.current(ce(e, m));
|
|
46
51
|
}
|
|
47
|
-
},
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
active:
|
|
51
|
-
focus:
|
|
52
|
-
stopEditing:
|
|
53
|
-
onDeactivate:
|
|
54
|
-
},
|
|
55
|
-
let { menuIsOpen:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
},
|
|
59
|
-
let
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
|
|
52
|
+
}, n[9] = m, n[10] = x, n[11] = C, n[12] = b, n[13] = w) : w = n[13];
|
|
53
|
+
let T;
|
|
54
|
+
n[14] !== p || n[15] !== d || n[16] !== f || n[17] !== w ? (T = {
|
|
55
|
+
active: p,
|
|
56
|
+
focus: d,
|
|
57
|
+
stopEditing: f,
|
|
58
|
+
onDeactivate: w
|
|
59
|
+
}, n[14] = p, n[15] = d, n[16] = f, n[17] = w, n[18] = T) : T = n[18];
|
|
60
|
+
let { menuIsOpen: pe, inputRef: me, handleListboxMouseDown: E, notifyOptionCommitted: D, handleMenuOpen: O, handleClose: k, handlePopupIndicatorMouseDown: A } = t(T), j, M;
|
|
61
|
+
n[19] !== d || n[20] !== b ? (j = () => {
|
|
62
|
+
d || fe(b);
|
|
63
|
+
}, M = [d, b], n[19] = d, n[20] = b, n[21] = j, n[22] = M) : (j = n[21], M = n[22]), r(j, M);
|
|
64
|
+
let N;
|
|
65
|
+
n[23] === s ? N = n[24] : (N = !ne(s) && s !== "", n[23] = s, n[24] = N);
|
|
66
|
+
let he = N, P = d ? void 0 : "none", F;
|
|
67
|
+
n[25] === P ? F = n[26] : (F = {
|
|
63
68
|
padding: "0 10px",
|
|
64
69
|
backgroundColor: "inherit",
|
|
65
|
-
pointerEvents:
|
|
66
|
-
},
|
|
67
|
-
let
|
|
68
|
-
|
|
69
|
-
visibility:
|
|
70
|
+
pointerEvents: P
|
|
71
|
+
}, n[25] = P, n[26] = F);
|
|
72
|
+
let I = p ? "visible" : "hidden", L;
|
|
73
|
+
n[27] === I ? L = n[28] : (L = {
|
|
74
|
+
visibility: I,
|
|
70
75
|
pointerEvents: "auto"
|
|
71
|
-
},
|
|
72
|
-
let
|
|
73
|
-
|
|
74
|
-
visibility:
|
|
76
|
+
}, n[27] = I, n[28] = L);
|
|
77
|
+
let R = p ? "visible" : "hidden", z;
|
|
78
|
+
n[29] === R ? z = n[30] : (z = {
|
|
79
|
+
visibility: R,
|
|
75
80
|
pointerEvents: "auto"
|
|
76
|
-
},
|
|
77
|
-
let
|
|
78
|
-
|
|
79
|
-
let
|
|
80
|
-
|
|
81
|
-
...
|
|
82
|
-
"& .MuiAutocomplete-inputRoot":
|
|
83
|
-
"& .MuiAutocomplete-clearIndicator":
|
|
84
|
-
"& .MuiAutocomplete-popupIndicator":
|
|
85
|
-
"&:hover .MuiAutocomplete-clearIndicator":
|
|
86
|
-
"&:hover .MuiAutocomplete-popupIndicator":
|
|
87
|
-
},
|
|
88
|
-
let
|
|
89
|
-
|
|
90
|
-
e.key === "Tab" ? (e.preventDefault(),
|
|
91
|
-
},
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
if (
|
|
95
|
-
else if (
|
|
96
|
-
let
|
|
97
|
-
|
|
98
|
-
} else
|
|
81
|
+
}, n[29] = R, n[30] = z);
|
|
82
|
+
let B, V;
|
|
83
|
+
n[31] === Symbol.for("react.memo_cache_sentinel") ? (B = { visibility: "visible" }, V = { visibility: "visible" }, n[31] = B, n[32] = V) : (B = n[31], V = n[32]);
|
|
84
|
+
let H;
|
|
85
|
+
n[33] !== F || n[34] !== L || n[35] !== z ? (H = {
|
|
86
|
+
...oe,
|
|
87
|
+
"& .MuiAutocomplete-inputRoot": F,
|
|
88
|
+
"& .MuiAutocomplete-clearIndicator": L,
|
|
89
|
+
"& .MuiAutocomplete-popupIndicator": z,
|
|
90
|
+
"&:hover .MuiAutocomplete-clearIndicator": B,
|
|
91
|
+
"&:hover .MuiAutocomplete-popupIndicator": V
|
|
92
|
+
}, n[33] = F, n[34] = L, n[35] = z, n[36] = H) : H = n[36];
|
|
93
|
+
let U = H, W;
|
|
94
|
+
n[37] === Symbol.for("react.memo_cache_sentinel") ? (W = (e) => {
|
|
95
|
+
e.key === "Tab" ? (e.preventDefault(), _.current({ nextRow: !1 })) : e.key === "Enter" && (e.preventDefault(), _.current({ nextRow: !0 }));
|
|
96
|
+
}, n[37] = W) : W = n[37];
|
|
97
|
+
let ge = W, G;
|
|
98
|
+
n[38] !== m || n[39] !== D || n[40] !== C ? (G = (e, t, n) => {
|
|
99
|
+
if (D(), n === "clear") h.current(m);
|
|
100
|
+
else if (n === "createOption") {
|
|
101
|
+
let e = C(t);
|
|
102
|
+
h.current(ce(e, m));
|
|
103
|
+
} else h.current(t);
|
|
99
104
|
setTimeout(() => {
|
|
100
|
-
|
|
105
|
+
_.current({ nextRow: !1 });
|
|
101
106
|
}, 0);
|
|
102
|
-
},
|
|
103
|
-
let
|
|
104
|
-
|
|
107
|
+
}, n[38] = m, n[39] = D, n[40] = C, n[41] = G) : G = n[41];
|
|
108
|
+
let K = G, q = !he, _e = s, J;
|
|
109
|
+
n[42] === Symbol.for("react.memo_cache_sentinel") ? (J = (e, t) => {
|
|
105
110
|
fe(t);
|
|
106
|
-
},
|
|
111
|
+
}, n[42] = J) : J = n[42];
|
|
107
112
|
let Y;
|
|
108
|
-
|
|
113
|
+
n[43] === E ? Y = n[44] : (Y = { onMouseDown: E }, n[43] = E, n[44] = Y);
|
|
109
114
|
let X;
|
|
110
|
-
|
|
115
|
+
n[45] === A ? X = n[46] : (X = { onMouseDown: A }, n[45] = A, n[46] = X);
|
|
111
116
|
let Z;
|
|
112
|
-
|
|
117
|
+
n[47] !== Y || n[48] !== X ? (Z = {
|
|
113
118
|
listbox: Y,
|
|
114
119
|
popupIndicator: X
|
|
115
|
-
},
|
|
120
|
+
}, n[47] = Y, n[48] = X, n[49] = Z) : Z = n[49];
|
|
116
121
|
let Q;
|
|
117
|
-
|
|
122
|
+
n[50] === me ? Q = n[51] : (Q = (e) => /* @__PURE__ */ a(ie, {
|
|
118
123
|
...e,
|
|
119
|
-
inputRef:
|
|
120
|
-
}),
|
|
124
|
+
inputRef: me
|
|
125
|
+
}), n[50] = me, n[51] = Q);
|
|
121
126
|
let $;
|
|
122
|
-
return
|
|
123
|
-
open:
|
|
124
|
-
onOpen:
|
|
127
|
+
return n[52] !== U || n[53] !== l || n[54] !== K || n[55] !== k || n[56] !== O || n[57] !== x || n[58] !== pe || n[59] !== q || n[60] !== _e || n[61] !== Z || n[62] !== Q ? ($ = /* @__PURE__ */ a(re, {
|
|
128
|
+
open: pe,
|
|
129
|
+
onOpen: O,
|
|
125
130
|
forcePopupIcon: !0,
|
|
126
|
-
disableClearable:
|
|
131
|
+
disableClearable: q,
|
|
127
132
|
freeSolo: !0,
|
|
128
133
|
disablePortal: !1,
|
|
129
|
-
options:
|
|
134
|
+
options: l,
|
|
130
135
|
selectOnFocus: !0,
|
|
131
|
-
getOptionLabel:
|
|
132
|
-
value:
|
|
133
|
-
inputValue:
|
|
136
|
+
getOptionLabel: le,
|
|
137
|
+
value: _e,
|
|
138
|
+
inputValue: x,
|
|
134
139
|
onInputChange: J,
|
|
135
|
-
onKeyDown:
|
|
136
|
-
onClose:
|
|
137
|
-
onChange:
|
|
140
|
+
onKeyDown: ge,
|
|
141
|
+
onClose: k,
|
|
142
|
+
onChange: K,
|
|
138
143
|
blurOnSelect: !0,
|
|
139
144
|
slotProps: Z,
|
|
140
145
|
renderInput: Q,
|
|
141
|
-
sx:
|
|
142
|
-
}),
|
|
146
|
+
sx: U
|
|
147
|
+
}), n[52] = U, n[53] = l, n[54] = K, n[55] = k, n[56] = O, n[57] = x, n[58] = pe, n[59] = q, n[60] = _e, n[61] = Z, n[62] = Q, n[63] = $) : $ = n[63], $;
|
|
143
148
|
}
|
|
144
|
-
function
|
|
145
|
-
return
|
|
149
|
+
function le(e) {
|
|
150
|
+
return o(e);
|
|
146
151
|
}
|
|
147
|
-
function
|
|
148
|
-
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;
|
|
152
|
+
function c(e, t) {
|
|
153
|
+
return e.rowData === t.rowData && e.choices === t.choices && e.colType === t.colType && e.parseFreeText === t.parseFreeText && e.focus === t.focus && e.active === t.active && e.clearValue === t.clearValue;
|
|
149
154
|
}
|
|
150
|
-
var
|
|
151
|
-
function
|
|
155
|
+
var l = n(s, c);
|
|
156
|
+
function u({ choices: e, colType: t, parseFreeText: n, clearValue: r }) {
|
|
152
157
|
return {
|
|
153
|
-
component: ((
|
|
154
|
-
...
|
|
158
|
+
component: ((i) => /* @__PURE__ */ a(l, {
|
|
159
|
+
...i,
|
|
155
160
|
choices: e,
|
|
156
161
|
colType: t,
|
|
157
|
-
|
|
162
|
+
parseFreeText: n,
|
|
163
|
+
clearValue: r
|
|
158
164
|
})),
|
|
159
165
|
copyValue: ({ rowData: e }) => e,
|
|
160
|
-
pasteValue: ({ value: e }) => e,
|
|
166
|
+
pasteValue: ({ value: e }) => se(e, t, n),
|
|
161
167
|
disableKeys: !0,
|
|
162
168
|
keepFocus: !0
|
|
163
169
|
};
|
|
164
170
|
}
|
|
165
171
|
//#endregion
|
|
166
|
-
export {
|
|
172
|
+
export { s as AutocompleteCell, l as MemoizedAutocompleteCell, c as areAutocompleteCellPropsEqual, u as autocompleteColumn, o as castCellValueToString };
|
|
167
173
|
|
|
168
174
|
//# sourceMappingURL=AutocompleteColumn.js.map
|
|
@@ -1 +1 @@
|
|
|
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","commitParsedValue","parsed","undefined","trim","AutocompleteCell","t0","$","_c","focus","stopEditing","active","t1","setRowDataRef","t2","current","stopEditingRef","t3","t4","rowDataAsString","localInputState","setLocalInputState","t5","t6","onDeactivate","menuIsOpen","inputRef","handleListboxMouseDown","notifyOptionCommitted","handleMenuOpen","handleClose","handlePopupIndicatorMouseDown","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","parsed_0","setTimeout","handleChange","t21","t22","t23","_","newInputValue","t24","onMouseDown","t25","t26","listbox","popupIndicator","t27","params","t28","_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\n// Free-text typed/pasted into the cell parses to \"\" for empty input. Committing\n// \"\" leaves the cell as an empty string, which fails enum validation with a\n// terse \"is not a valid enum value\" message. Substitute the column's clearValue\n// (null for required, undefined for optional) so the commit path matches the\n// X-button clear path and the validator surfaces the substantive message.\nfunction commitParsedValue(\n parsed: unknown,\n clearValue: undefined | null,\n): unknown {\n if (\n parsed === null ||\n parsed === undefined ||\n (typeof parsed === 'string' && parsed.trim() === '')\n ) {\n return clearValue\n }\n return parsed\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 handlePopupIndicatorMouseDown,\n } = useGridAutocompleteState({\n active,\n focus,\n stopEditing,\n onDeactivate: () => {\n if (localInputState !== rowDataAsString) {\n // Commit any free-typed text that hasn't been saved yet\n const parsed = parseFreeTextGivenJsonSchemaType(\n localInputState,\n colType,\n )\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n }\n },\n })\n\n // Sync localInputState with rowData whenever the cell isn't being edited.\n // Covers: deletes/cuts from active-but-not-focused state, Escape (grid flips\n // focus=false while active stays true, so the gate must allow this case),\n // and post-commit cleanup after the cell exits edit mode.\n useEffect(() => {\n if (!focus) {\n setLocalInputState(rowDataAsString)\n }\n }, [focus, 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 const parsed = parseFreeTextGivenJsonSchemaType(\n newVal as string,\n colType,\n )\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\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 popupIndicator: { onMouseDown: handlePopupIndicatorMouseDown },\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
|
+
{"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","ParseFreeText","freeText","parseCellText","colType","parseFreeText","AutocompleteCellProps","rowData","setRowData","value","choices","clearValue","castCellValueToString","toCast","JSON","stringify","String","commitParsedValue","parsed","undefined","trim","AutocompleteCell","t0","$","_c","focus","stopEditing","active","t1","setRowDataRef","t2","current","stopEditingRef","t3","t4","rowDataAsString","localInputState","setLocalInputState","t5","parseTypedText","t6","t7","onDeactivate","menuIsOpen","inputRef","handleListboxMouseDown","notifyOptionCommitted","handleMenuOpen","handleClose","handlePopupIndicatorMouseDown","t8","t9","t10","hasValue","t11","t12","pointerEvents","t13","t14","visibility","t15","t16","t17","t18","Symbol","for","t19","autocompleteSx","t20","e","key","preventDefault","nextRow","handleKeyDown","t21","_e","newVal","reason","parsed_0","setTimeout","handleChange","t22","t23","t24","_","newInputValue","t25","onMouseDown","t26","t27","listbox","popupIndicator","t28","params","t29","_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\n/** Converts text typed or pasted into a cell into the value stored in the model */\nexport type ParseFreeText = (freeText: string) => unknown\n\nfunction parseCellText(\n freeText: string,\n colType: JSONSchema7Type | undefined,\n parseFreeText: ParseFreeText | undefined,\n): unknown {\n return parseFreeText\n ? parseFreeText(freeText)\n : parseFreeTextGivenJsonSchemaType(freeText, colType)\n}\n\nexport type AutocompleteCellProps = CellProps & {\n rowData: AutocompleteOption\n setRowData: (value: AutocompleteOption) => void\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n /**\n * Replaces parsing typed text by `colType`. Compared by reference when\n * memoizing the cell, so it must be stable across renders.\n */\n parseFreeText?: ParseFreeText\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\n// Free-text typed/pasted into the cell parses to \"\" for empty input. Committing\n// \"\" leaves the cell as an empty string, which fails enum validation with a\n// terse \"is not a valid enum value\" message. Substitute the column's clearValue\n// (null for required, undefined for optional) so the commit path matches the\n// X-button clear path and the validator surfaces the substantive message.\nfunction commitParsedValue(\n parsed: unknown,\n clearValue: undefined | null,\n): unknown {\n if (\n parsed === null ||\n parsed === undefined ||\n (typeof parsed === 'string' && parsed.trim() === '')\n ) {\n return clearValue\n }\n return parsed\n}\n\nexport function AutocompleteCell({\n rowData,\n setRowData,\n choices,\n colType,\n parseFreeText,\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 parseTypedText = useCallback(\n (freeText: string) => parseCellText(freeText, colType, parseFreeText),\n [parseFreeText, colType],\n )\n\n const {\n menuIsOpen,\n inputRef,\n handleListboxMouseDown,\n notifyOptionCommitted,\n handleMenuOpen,\n handleClose,\n handlePopupIndicatorMouseDown,\n } = useGridAutocompleteState({\n active,\n focus,\n stopEditing,\n onDeactivate: () => {\n if (localInputState !== rowDataAsString) {\n // Commit any free-typed text that hasn't been saved yet\n const parsed = parseTypedText(localInputState)\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n }\n },\n })\n\n // Sync localInputState with rowData whenever the cell isn't being edited.\n // Covers: deletes/cuts from active-but-not-focused state, Escape (grid flips\n // focus=false while active stays true, so the gate must allow this case),\n // and post-commit cleanup after the cell exits edit mode.\n useEffect(() => {\n if (!focus) {\n setLocalInputState(rowDataAsString)\n }\n }, [focus, 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 const parsed = parseTypedText(newVal as string)\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n } else {\n setRowDataRef.current(newVal as AutocompleteOption)\n }\n setTimeout(() => {\n stopEditingRef.current({ nextRow: false })\n }, 0)\n },\n [clearValue, parseTypedText, 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 popupIndicator: { onMouseDown: handlePopupIndicatorMouseDown },\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.parseFreeText === nextProps.parseFreeText &&\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 /** Parses typed and pasted text. When omitted, both are parsed by `colType`. */\n parseFreeText?: ParseFreeText\n clearValue: undefined | null\n}\n\nexport function autocompleteColumn({\n choices,\n colType,\n parseFreeText,\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 parseFreeText={parseFreeText}\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: string }) =>\n parseCellText(value, colType, parseFreeText),\n disableKeys: true,\n keepFocus: true,\n }\n}\n"],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ function o({ colType: i = "number", isRequired: o }) {
|
|
|
18
18
|
formatBlurredInput: a,
|
|
19
19
|
formatInputOnFocus: t,
|
|
20
20
|
parseUserInput: s,
|
|
21
|
-
parsePastedValue: (e) => s(e.
|
|
21
|
+
parsePastedValue: (e) => s(e.replaceAll(/[\n\r]+/g, " "))
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberColumn.js","names":["getEmptyValue","parseFreeTextGivenJsonSchemaType","Column","createTextColumn","JSONSchema7Type","castCellValueToString","NUMBER_FORMAT","Intl","NumberFormat","formatNumberCellValue","value","Number","isNaN","format","NumberColumnProps","colType","isRequired","NumberColumnData","placeholder","alignRight","continuousUpdates","parseUserInput","formatBlurredInput","formatInputOnFocus","numberColumn","Partial","parse","trim","deletedValue","parsePastedValue","
|
|
1
|
+
{"version":3,"file":"NumberColumn.js","names":["getEmptyValue","parseFreeTextGivenJsonSchemaType","Column","createTextColumn","JSONSchema7Type","castCellValueToString","NUMBER_FORMAT","Intl","NumberFormat","formatNumberCellValue","value","Number","isNaN","format","NumberColumnProps","colType","isRequired","NumberColumnData","placeholder","alignRight","continuousUpdates","parseUserInput","formatBlurredInput","formatInputOnFocus","numberColumn","Partial","parse","trim","deletedValue","parsePastedValue","replaceAll"],"sources":["../../../../src/components/DataGrid/columns/NumberColumn.ts"],"sourcesContent":["import { getEmptyValue } from '@/components/DataGrid/utils/getEmptyValue'\nimport parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport {\n Column,\n createTextColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { JSONSchema7Type } from 'json-schema'\nimport { castCellValueToString } from './AutocompleteColumn'\n\nconst NUMBER_FORMAT = new Intl.NumberFormat()\n\n/**\n * Render a numeric cell value for display while the cell is not being edited.\n *\n * Real numbers are locale-formatted; anything else is stringified verbatim.\n * Numeric columns legitimately hold non-numeric values — CSV import writes\n * cells server-side without passing through any client-side parsing, and\n * parseFreeTextGivenJsonSchemaType deliberately preserves unparseable text so\n * the validator can report it. Rendering those as blank leaves the user with an\n * apparently empty cell on a row flagged invalid.\n */\nexport function formatNumberCellValue(value: unknown): string {\n if (typeof value === 'number') {\n return Number.isNaN(value) ? '' : NUMBER_FORMAT.format(value)\n }\n return castCellValueToString(value)\n}\n\nexport type NumberColumnProps = {\n colType?: JSONSchema7Type\n isRequired?: boolean\n}\n\n/**\n * Mirrors the (unexported) columnData that createTextColumn builds, so callers\n * and tests can reach the format/parse functions it derives.\n */\nexport type NumberColumnData = {\n placeholder?: string\n alignRight: boolean\n continuousUpdates: boolean\n parseUserInput: (value: string) => unknown\n formatBlurredInput: (value: unknown) => string\n formatInputOnFocus: (value: unknown) => string\n}\n\nexport function numberColumn({\n colType = 'number',\n isRequired,\n}: NumberColumnProps): Partial<Column<unknown, NumberColumnData, string>> {\n function parse(value: string): unknown {\n if (value.trim() === '') {\n return getEmptyValue(isRequired)\n }\n return parseFreeTextGivenJsonSchemaType(value, colType)\n }\n\n return createTextColumn<unknown>({\n alignRight: true,\n continuousUpdates: false,\n deletedValue: getEmptyValue(isRequired),\n formatBlurredInput: formatNumberCellValue,\n // Edit against the stored value rather than the locale-formatted one so\n // grouping separators never reach the parser.\n formatInputOnFocus: castCellValueToString,\n parseUserInput: parse,\n parsePastedValue: value => parse(value.replaceAll(/[\\n\\r]+/g, ' ')),\n })\n}\n"],"mappings":";;;;;AASA,IAAMM,IAAgB,IAAIC,KAAKC,aAAa;AAY5C,SAAgBC,EAAsBC,GAAwB;CAI5D,OAHI,OAAOA,KAAU,WACZC,OAAOC,MAAMF,CAAK,IAAI,KAAKJ,EAAcO,OAAOH,CAAK,IAEvDL,EAAsBK,CAAK;AACpC;AAoBA,SAAgBc,EAAa,EAC3BT,aAAU,UACVC,iBACwE;CACxE,SAASU,EAAMhB,GAAwB;EAIrC,OAHIA,EAAMiB,KAAK,MAAM,KACZ3B,EAAcgB,CAAU,IAE1Bf,EAAiCS,GAAOK,CAAO;CACxD;CAEA,OAAOZ,EAA0B;EAC/BgB,YAAY;EACZC,mBAAmB;EACnBQ,cAAc5B,EAAcgB,CAAU;EACtCM,oBAAoBb;EAGpBc,oBAAoBlB;EACpBgB,gBAAgBK;EAChBG,mBAAkBnB,MAASgB,EAAMhB,EAAMoB,WAAW,YAAY,GAAG,CAAC;CACpE,CAAC;AACH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues';
|
|
2
|
+
import { Column } from '@sage-bionetworks/react-datasheet-grid';
|
|
3
|
+
/**
|
|
4
|
+
* Converts text entered into a number-or-enum cell to the type its schema
|
|
5
|
+
* expects: one of the allowed strings stays a string, a decimal number becomes
|
|
6
|
+
* a number, and anything else is kept as trimmed text. The value is never
|
|
7
|
+
* rounded or range-checked; the backend validator decides whether it is valid.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseNumberOrEnumInput(text: string, enumValues: readonly EnumeratedValue[]): string | number;
|
|
10
|
+
export type NumberOrEnumColumnProps = {
|
|
11
|
+
enumValues: EnumeratedValue[];
|
|
12
|
+
clearValue: undefined | null;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* A column for a property that is either a number or one of a closed set of
|
|
16
|
+
* strings. It offers the strings as options and stores typed or pasted numbers
|
|
17
|
+
* as numbers.
|
|
18
|
+
*/
|
|
19
|
+
export declare function numberOrEnumColumn({ enumValues, clearValue, }: NumberOrEnumColumnProps): Partial<Column>;
|
|
20
|
+
//# sourceMappingURL=NumberOrEnumColumn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberOrEnumColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/NumberOrEnumColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAO/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,eAAe,EAAE,GACrC,MAAM,GAAG,MAAM,CAMjB;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,UAAU,GACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { autocompleteColumn as e } from "./AutocompleteColumn.js";
|
|
2
|
+
//#region src/components/DataGrid/columns/NumberOrEnumColumn.ts
|
|
3
|
+
var t = /^-?\d+(\.\d+)?$/;
|
|
4
|
+
function n(e, n) {
|
|
5
|
+
let r = e.trim();
|
|
6
|
+
return n.includes(r) ? r : t.test(r) ? Number(r) : r;
|
|
7
|
+
}
|
|
8
|
+
function r({ enumValues: t, clearValue: r }) {
|
|
9
|
+
return e({
|
|
10
|
+
choices: t,
|
|
11
|
+
parseFreeText: (e) => n(e, t),
|
|
12
|
+
clearValue: r
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { r as numberOrEnumColumn, n as parseNumberOrEnumInput };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=NumberOrEnumColumn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberOrEnumColumn.js","names":["EnumeratedValue","Column","autocompleteColumn","DECIMAL_NUMBER_PATTERN","parseNumberOrEnumInput","text","enumValues","trimmed","trim","includes","test","Number","NumberOrEnumColumnProps","clearValue","numberOrEnumColumn","Partial","choices","parseFreeText"],"sources":["../../../../src/components/DataGrid/columns/NumberOrEnumColumn.ts"],"sourcesContent":["import { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues'\nimport { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport { autocompleteColumn } from './AutocompleteColumn'\n\n// Decimal notation only, so exponent, hex, and binary forms (e.g. \"0x2B\") are\n// left as text for the validator to reject rather than stored as a different number.\nconst DECIMAL_NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?$/\n\n/**\n * Converts text entered into a number-or-enum cell to the type its schema\n * expects: one of the allowed strings stays a string, a decimal number becomes\n * a number, and anything else is kept as trimmed text. The value is never\n * rounded or range-checked; the backend validator decides whether it is valid.\n */\nexport function parseNumberOrEnumInput(\n text: string,\n enumValues: readonly EnumeratedValue[],\n): string | number {\n const trimmed = text.trim()\n if (enumValues.includes(trimmed)) {\n return trimmed\n }\n return DECIMAL_NUMBER_PATTERN.test(trimmed) ? Number(trimmed) : trimmed\n}\n\nexport type NumberOrEnumColumnProps = {\n enumValues: EnumeratedValue[]\n clearValue: undefined | null\n}\n\n/**\n * A column for a property that is either a number or one of a closed set of\n * strings. It offers the strings as options and stores typed or pasted numbers\n * as numbers.\n */\nexport function numberOrEnumColumn({\n enumValues,\n clearValue,\n}: NumberOrEnumColumnProps): Partial<Column> {\n return autocompleteColumn({\n choices: enumValues,\n parseFreeText: text => parseNumberOrEnumInput(text, enumValues),\n clearValue,\n })\n}\n"],"mappings":";;AAMA,IAAMG,IAAyB;AAQ/B,SAAgBC,EACdC,GACAC,GACiB;CACjB,IAAMC,IAAUF,EAAKG,KAAK;CAI1B,OAHIF,EAAWG,SAASF,CAAO,IACtBA,IAEFJ,EAAuBO,KAAKH,CAAO,IAAII,OAAOJ,CAAO,IAAIA;AAClE;AAYA,SAAgBO,EAAmB,EACjCR,eACAO,iBAC2C;CAC3C,OAAOX,EAAmB;EACxBc,SAASV;EACTW,gBAAeZ,MAAQD,EAAuBC,GAAMC,CAAU;EAC9DO;CACF,CAAC;AACH"}
|
|
@@ -2,11 +2,11 @@ import { Fragment as e, jsx as t } from "react/jsx-runtime";
|
|
|
2
2
|
import { c as n } from "react/compiler-runtime";
|
|
3
3
|
import { createAddRowsComponent as r, createContextMenuComponent as i } from "@sage-bionetworks/react-datasheet-grid";
|
|
4
4
|
//#region src/components/DataGrid/components/contextMenu.tsx
|
|
5
|
-
var a = [
|
|
5
|
+
var a = new Set([
|
|
6
6
|
"COPY",
|
|
7
7
|
"PASTE",
|
|
8
8
|
"CUT"
|
|
9
|
-
], o = r(), s = {
|
|
9
|
+
]), o = r(), s = {
|
|
10
10
|
COPY: "Copy",
|
|
11
11
|
PASTE: "Paste",
|
|
12
12
|
CUT: "Cut",
|
|
@@ -25,7 +25,7 @@ var a = [
|
|
|
25
25
|
}), r[2] = a, r[3] = e, r[4] = o) : o = r[4], o;
|
|
26
26
|
}, f = (e) => /* @__PURE__ */ t(o, { ...e }), p = (e) => /* @__PURE__ */ t(d, { ...e }), m = (e) => /* @__PURE__ */ t(u, { ...e });
|
|
27
27
|
function h(e) {
|
|
28
|
-
return a.
|
|
28
|
+
return a.has(e.type);
|
|
29
29
|
}
|
|
30
30
|
//#endregion
|
|
31
31
|
export { f as renderAddRowsComponent, m as renderRecordSetContextMenu, p as renderViewContextMenu };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextMenu.js","names":["createAddRowsComponent","createContextMenuComponent","ContextMenuItem","DataSheetGrid","VIEW_ALLOWED_MENU_ITEMS","AddRowsComponent","CONTEXT_MENU_ITEM_LABELS","Record","COPY","PASTE","CUT","INSERT_ROW_BELLOW","DELETE_ROW","DUPLICATE_ROW","DELETE_ROWS","DUPLICATE_ROWS","renderContextMenuItem","item","type","BaseViewContextMenuComponent","RecordSetContextMenuComponent","ViewContextMenuComponent","React","FC","ComponentProps","props","$","_c","t0","items","filter","_temp","filteredItems","t1","renderAddRowsComponent","renderViewContextMenu","renderRecordSetContextMenu","
|
|
1
|
+
{"version":3,"file":"contextMenu.js","names":["createAddRowsComponent","createContextMenuComponent","ContextMenuItem","DataSheetGrid","VIEW_ALLOWED_MENU_ITEMS","ReadonlySet","Set","AddRowsComponent","CONTEXT_MENU_ITEM_LABELS","Record","COPY","PASTE","CUT","INSERT_ROW_BELLOW","DELETE_ROW","DUPLICATE_ROW","DELETE_ROWS","DUPLICATE_ROWS","renderContextMenuItem","item","type","BaseViewContextMenuComponent","RecordSetContextMenuComponent","ViewContextMenuComponent","React","FC","ComponentProps","props","$","_c","t0","items","filter","_temp","filteredItems","t1","renderAddRowsComponent","renderViewContextMenu","renderRecordSetContextMenu","has"],"sources":["../../../../src/components/DataGrid/components/contextMenu.tsx"],"sourcesContent":["import {\n createAddRowsComponent,\n createContextMenuComponent,\n ContextMenuItem,\n DataSheetGrid,\n} from '@sage-bionetworks/react-datasheet-grid'\n\n// Define which context menu items are allowed for tables (a subset)\nconst VIEW_ALLOWED_MENU_ITEMS: ReadonlySet<ContextMenuItem['type']> = new Set([\n 'COPY',\n 'PASTE',\n 'CUT',\n])\n\n// Create components outside of render to avoid recreating on every render\nconst AddRowsComponent = createAddRowsComponent()\n\n// Keyed by the full item type union, so adding a new item type upstream is a\n// compile error here rather than a menu entry that silently renders nothing.\nconst CONTEXT_MENU_ITEM_LABELS: Record<ContextMenuItem['type'], string> = {\n COPY: 'Copy',\n PASTE: 'Paste',\n CUT: 'Cut',\n INSERT_ROW_BELLOW: 'Insert row below',\n DELETE_ROW: 'Delete row',\n DUPLICATE_ROW: 'Duplicate row',\n DELETE_ROWS: 'Delete rows',\n DUPLICATE_ROWS: 'Duplicate rows',\n}\n\n// Shared render function for context menu items\nconst renderContextMenuItem = (item: ContextMenuItem) => (\n <>{CONTEXT_MENU_ITEM_LABELS[item.type]}</>\n)\n\n// Create base context menus (copy/cut/paste for recordSet, default for views)\nconst BaseViewContextMenuComponent = createContextMenuComponent(\n renderContextMenuItem,\n)\n\nconst RecordSetContextMenuComponent = createContextMenuComponent(\n renderContextMenuItem,\n)\n\n// Create a wrapper component that filters items for views\nconst ViewContextMenuComponent: React.FC<\n React.ComponentProps<typeof BaseViewContextMenuComponent>\n> = props => {\n // Filter the items to only include allowed ones for views\n const filteredItems = props.items.filter(item =>\n VIEW_ALLOWED_MENU_ITEMS.has(item.type),\n )\n\n return <BaseViewContextMenuComponent {...props} items={filteredItems} />\n}\n\n// Create stable render functions outside the component\nexport const renderAddRowsComponent: React.ComponentProps<\n typeof DataSheetGrid\n>['addRowsComponent'] = props => <AddRowsComponent {...props} />\n\nexport const renderViewContextMenu: React.ComponentProps<\n typeof DataSheetGrid\n>['contextMenuComponent'] = props => <ViewContextMenuComponent {...props} />\n\nexport const renderRecordSetContextMenu: React.ComponentProps<\n typeof DataSheetGrid\n>['contextMenuComponent'] = props => (\n <RecordSetContextMenuComponent {...props} />\n)\n"],"mappings":";;;;AAQA,IAAMI,IAAgE,IAAIE,IAAI;CAC5E;CACA;CACA;AAAK,CACN,GAGKC,IAAmBP,EAAuB,GAI1CQ,IAAoE;CACxEE,MAAM;CACNC,OAAO;CACPC,KAAK;CACLC,mBAAmB;CACnBC,YAAY;CACZC,eAAe;CACfC,aAAa;CACbC,gBAAgB;AAClB,GAGMC,KAAyBC,MAC7B,kBAAA,GAAA,EAAA,UAAGX,EAAyBW,EAAKC,MAAM,CAAA,GAInCC,IAA+BpB,EACnCiB,CACF,GAEMI,IAAgCrB,EACpCiB,CACF,GAGMK,KAEFI,MAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,EAAAI,QAIDD,IAAAF,EAAA,MAFqBE,IAAAH,EAAKI,MAAMC,OAAQC,CAEzC,GAACL,EAAA,KAAAD,EAAAI,OAAAH,EAAA,KAAAE;CAFD,IAAAI,IAAsBJ,GAErBK;CAEuE,OAFvEP,EAAA,OAAAM,KAAAN,EAAA,OAAAD,KAEMQ,IAAA,kBAAC,GAAD;EAA6B,GAAKR;EAAcO,OAAAA;CAAa,CAAA,GAAIN,EAAA,KAAAM,GAAAN,EAAA,KAAAD,GAAAC,EAAA,KAAAO,KAAAA,IAAAP,EAAA,IAAjEO;AAAiE,GAI7DC,KAEWT,MAAS,kBAAC,GAAD,EAAkB,GAAIA,EAAM,CAAA,GAEhDU,KAEeV,MAAS,kBAAC,GAAD,EAA0B,GAAIA,EAAM,CAAA,GAE5DW,KAEeX,MAC1B,kBAAC,GAAD,EAA+B,GAAIA,EAAM,CAAA;AArBvC,SAAAM,EAAAd,GAAA;CAAA,OAGAf,EAAuBmC,IAAKpB,EAAIC,IAAK;AAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGridUndoRedo.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/hooks/useGridUndoRedo.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AAE/D;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,mBAAmB,CAKrB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI;;;;;;;
|
|
1
|
+
{"version":3,"file":"useGridUndoRedo.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/hooks/useGridUndoRedo.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AAE/D;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,mBAAmB,CAKrB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI;;;;;;;6BAsLjB,UAAU;;2CAS5B,SAAS,EAAE,aACZ,WAAW,EAAE,YACd,WAAW,EAAE;;;;;;;;;;;;EAmI1B"}
|
|
@@ -33,8 +33,9 @@ function l(l) {
|
|
|
33
33
|
u[5] === Symbol.for("react.memo_cache_sentinel") ? (S = () => se(null), u[5] = S) : S = u[5];
|
|
34
34
|
let de = S, C;
|
|
35
35
|
u[6] === f ? C = u[7] : (C = () => {
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
let e = f.peek();
|
|
37
|
+
if (e === void 0) return null;
|
|
38
|
+
let t, n = 0;
|
|
38
39
|
if (e.type === "COMPOSITE") {
|
|
39
40
|
t = "COMPOSITE";
|
|
40
41
|
for (let e = f.stack.length - 1; e >= 0 && f.stack[e].type === "COMPOSITE"; e--) n++;
|
|
@@ -50,8 +51,9 @@ function l(l) {
|
|
|
50
51
|
}, u[6] = f, u[7] = C);
|
|
51
52
|
let fe = C, w;
|
|
52
53
|
u[8] === m ? w = u[9] : (w = () => {
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
let e = m.peek();
|
|
55
|
+
if (e === void 0) return null;
|
|
56
|
+
let t, n = 0;
|
|
55
57
|
if (e.type === "COMPOSITE") t = "COMPOSITE", n = 1;
|
|
56
58
|
else {
|
|
57
59
|
t = e.type;
|
|
@@ -89,9 +91,9 @@ function l(l) {
|
|
|
89
91
|
if (m.isEmpty()) return;
|
|
90
92
|
let e = m.pop();
|
|
91
93
|
if (e) if (e.type === "COMPOSITE") {
|
|
92
|
-
for (let n
|
|
93
|
-
let
|
|
94
|
-
|
|
94
|
+
for (let n of e.actions) {
|
|
95
|
+
let e = t(n, "redo");
|
|
96
|
+
e && l(e);
|
|
95
97
|
}
|
|
96
98
|
f.push(e);
|
|
97
99
|
} else {
|