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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterConditionRow.js","names":[],"sources":["../../../src/components/QueryBuilder/FilterConditionRow.tsx"],"sourcesContent":["import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport {\n Autocomplete,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n ToggleButton,\n ToggleButtonGroup,\n Tooltip,\n} from '@mui/material'\nimport { FacetColumnResult } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useMemo, useState } from 'react'\nimport { splitAndTrim } from '../../utils/functions/StringUtils'\nimport { useQueryBuilderInternalContext } from './QueryBuilderInternalContext'\nimport {\n availableOpsForKind,\n classifyColumn,\n facetValueMatchesFilter,\n isFacetColumnResultValues,\n labelForOp,\n QBColumnKind,\n} from './queryBuilderMetadata'\nimport styles from './FilterConditionRow.module.scss'\nimport { QBDragHandle } from './QBDragHandle'\nimport dragStyles from './queryBuilderDrag.module.scss'\nimport { defaultOpForColumnType } from './queryBuilderOperations'\nimport { QBCondition, QBConditionOp } from './QueryBuilderTypes'\n\nexport type FilterConditionRowProps = {\n condition: QBCondition\n parentGroupId: string\n index: number\n}\n\nexport function FilterConditionRow(props: FilterConditionRowProps) {\n const { condition, parentGroupId, index } = props\n const {\n columnModels,\n facetResults,\n onlyFacetedColumns,\n getColumnDisplayName,\n updateConditionAt,\n removeConditionAt,\n } = useQueryBuilderInternalContext()\n\n // A condition is a drag source only. Dropping onto a condition has no\n // meaning in a boolean tree — a node joins a group, not another leaf — so\n // groups own every drop zone and this row never becomes a target.\n const {\n ref: sortableRef,\n handleRef,\n isDragSource,\n } = useSortable({\n id: condition.id,\n index,\n group: parentGroupId,\n disabled: { droppable: true },\n })\n\n const facetColumnNames = useMemo(\n () =>\n new Set(\n facetResults.filter(isFacetColumnResultValues).map(f => f.columnName),\n ),\n [facetResults],\n )\n\n const propertyOptions = useMemo(() => {\n const source = onlyFacetedColumns\n ? columnModels.filter(cm => facetColumnNames.has(cm.name))\n : columnModels\n return source.map(cm => ({\n name: cm.name,\n columnType: cm.columnType as string,\n label: getColumnDisplayName(cm.name),\n }))\n }, [columnModels, facetColumnNames, onlyFacetedColumns, getColumnDisplayName])\n\n const selectedOption =\n propertyOptions.find(opt => opt.name === condition.columnName) ?? null\n\n const hasFacet =\n condition.columnName != null && facetColumnNames.has(condition.columnName)\n const columnKind = classifyColumn(condition.columnType, hasFacet)\n const availableOps = availableOpsForKind(columnKind)\n\n const operatorLabelId = `qb-op-label-${condition.id}`\n\n return (\n <div\n ref={sortableRef}\n className={`${styles.row}${isDragSource ? ` ${dragStyles.dragSource}` : ''}`}\n role=\"group\"\n aria-label={`Filter condition${condition.columnName ? ` on ${condition.columnName}` : ''}`}\n data-qb-node-id={condition.id}\n >\n <QBDragHandle\n handleRef={handleRef}\n label=\"Drag condition into a condition group\"\n />\n\n <Tooltip title=\"Remove condition\">\n <IconButton\n size=\"small\"\n className={styles.remove}\n aria-label=\"Remove condition\"\n onClick={() => removeConditionAt(condition.id)}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n\n <Autocomplete\n className={styles.propertyPicker}\n size=\"small\"\n options={propertyOptions}\n getOptionLabel={opt => opt.label}\n isOptionEqualToValue={(a, b) => a.name === b.name}\n value={selectedOption}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"outlined\"\n placeholder=\"Select property…\"\n inputProps={{ ...params.inputProps, 'aria-label': 'Property' }}\n />\n )}\n onChange={(_event, value) => {\n if (value == null) return\n // Pick a default op that matches the new column's kind (so a\n // faceted column shifts the row into pill-picker mode, a numeric\n // column into range mode, etc.). Fall back to the raw columnType\n // default if the kind has no ops.\n const nextKind = classifyColumn(\n value.columnType,\n hasFacetForColumnName(facetResults, value.name),\n )\n const opsForKind = availableOpsForKind(nextKind)\n const nextOp =\n opsForKind.length > 0\n ? opsForKind[0]\n : defaultOpForColumnType(value.columnType)\n updateConditionAt(condition.id, {\n columnName: value.name,\n columnType: value.columnType,\n op: nextOp,\n values: [],\n rangeMin: null,\n rangeMax: null,\n text: null,\n })\n }}\n />\n\n {availableOps.length > 0 && (\n <>\n <InputLabel id={operatorLabelId} sx={{ display: 'none' }}>\n Operator\n </InputLabel>\n <Select\n className={styles.operatorPicker}\n size=\"small\"\n labelId={operatorLabelId}\n variant=\"outlined\"\n value={\n availableOps.includes(condition.op)\n ? condition.op\n : availableOps[0]\n }\n onChange={event => {\n const nextOp = event.target.value as QBConditionOp\n updateConditionAt(condition.id, { op: nextOp })\n }}\n aria-label=\"Operator\"\n >\n {availableOps.map(op => (\n <MenuItem key={op} value={op}>\n {labelForOp(op)}\n </MenuItem>\n ))}\n </Select>\n </>\n )}\n\n <ValueInput\n condition={condition}\n columnKind={columnKind}\n hasFacet={hasFacet}\n facetValues={\n hasFacet && condition.columnName != null\n ? findFacetValues(facetResults, condition.columnName)\n : []\n }\n onChange={patch => updateConditionAt(condition.id, patch)}\n />\n </div>\n )\n}\n\ntype ValueInputProps = {\n condition: QBCondition\n columnKind: QBColumnKind\n hasFacet: boolean\n facetValues: string[]\n onChange: (patch: Partial<Omit<QBCondition, 'kind' | 'id'>>) => void\n}\n\nfunction ValueInput(props: ValueInputProps) {\n const { condition, columnKind, hasFacet, facetValues, onChange } = props\n const { op } = condition\n\n // Presence operators have no input at all.\n if (op === 'has_value' || op === 'no_value') return null\n\n switch (op) {\n case 'is_any_of':\n case 'is_all_of':\n if ((columnKind === 'enum' || columnKind === 'list') && hasFacet) {\n return (\n <FacetPillGroup\n columnName={condition.columnName}\n facetValues={facetValues}\n selectedValues={condition.values}\n onChange={next => onChange({ values: next })}\n />\n )\n }\n return (\n <TextField\n className={styles.textInput}\n size=\"small\"\n variant=\"outlined\"\n placeholder=\"Comma-separated values\"\n value={condition.values.join(', ')}\n slotProps={{ htmlInput: { 'aria-label': 'Values' } }}\n onChange={event =>\n onChange({ values: splitAndTrim(event.target.value) })\n }\n />\n )\n case 'between':\n return (\n <>\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n placeholder=\"Min\"\n value={condition.rangeMin ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Minimum' } }}\n onChange={event => onChange({ rangeMin: event.target.value })}\n />\n <span aria-hidden=\"true\">to</span>\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n placeholder=\"Max\"\n value={condition.rangeMax ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Maximum' } }}\n onChange={event => onChange({ rangeMax: event.target.value })}\n />\n </>\n )\n case 'gt':\n case 'gte':\n return (\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n value={condition.rangeMin ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ rangeMin: event.target.value })}\n />\n )\n case 'lt':\n case 'lte':\n return (\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n value={condition.rangeMax ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ rangeMax: event.target.value })}\n />\n )\n case 'equal':\n case 'not_equal':\n if (columnKind === 'boolean') {\n return (\n <ToggleButtonGroup\n className={styles.pillGroup}\n exclusive\n value={condition.values[0] ?? null}\n onChange={(_event, next: string | null) => {\n onChange({ values: next == null ? [] : [next] })\n }}\n aria-label=\"Boolean value\"\n >\n <ToggleButton value=\"true\">Yes</ToggleButton>\n <ToggleButton value=\"false\">No</ToggleButton>\n </ToggleButtonGroup>\n )\n }\n return (\n <TextField\n className={styles.textInput}\n size=\"small\"\n variant=\"outlined\"\n value={condition.values[0] ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ values: [event.target.value] })}\n />\n )\n case 'contains':\n case 'starts_with':\n case 'ends_with':\n case 'is_exactly':\n return (\n <TextField\n className={styles.textInput}\n size=\"small\"\n variant=\"outlined\"\n value={condition.text ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ text: event.target.value })}\n />\n )\n default:\n op satisfies never\n return null\n }\n}\n\ntype FacetPillGroupProps = {\n columnName: string | null\n facetValues: string[]\n selectedValues: string[]\n onChange: (next: string[]) => void\n}\n\n// Above this many pills we show a text filter above the group.\nexport const PILL_FILTER_THRESHOLD = 40\n\nfunction FacetPillGroup(props: FacetPillGroupProps) {\n const { columnName, facetValues, selectedValues, onChange } = props\n const { getValueDisplayName } = useQueryBuilderInternalContext()\n const [filter, setFilter] = useState('')\n const showFilter = facetValues.length > PILL_FILTER_THRESHOLD\n\n const labelForValue = useCallback(\n (value: string) => getValueDisplayName(columnName, value),\n [getValueDisplayName, columnName],\n )\n\n // Sort alphabetically by the user-facing label so the pill order is\n // predictable regardless of the backend's facet-result ordering.\n const sortedValues = useMemo(() => {\n return [...facetValues].sort((a, b) =>\n labelForValue(a).localeCompare(labelForValue(b), undefined, {\n sensitivity: 'base',\n }),\n )\n }, [facetValues, labelForValue])\n\n const visibleValues = useMemo(() => {\n if (!showFilter) return sortedValues\n return sortedValues.filter(v =>\n facetValueMatchesFilter(v, labelForValue(v), filter),\n )\n }, [sortedValues, filter, showFilter, labelForValue])\n\n return (\n <div className={styles.pillGroupContainer}>\n {showFilter && (\n <TextField\n className={styles.pillFilter}\n size=\"small\"\n variant=\"outlined\"\n placeholder={`Filter ${facetValues.length} values…`}\n value={filter}\n onChange={event => setFilter(event.target.value)}\n slotProps={{ htmlInput: { 'aria-label': 'Filter values' } }}\n />\n )}\n <div className={styles.pillGroupScroll}>\n <ToggleButtonGroup\n className={styles.pillGroup}\n value={selectedValues}\n onChange={(_event, next: string[]) => onChange(next)}\n aria-label=\"Selected values\"\n >\n {visibleValues.map(value => (\n <ToggleButton key={value} value={value}>\n {labelForValue(value)}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </div>\n </div>\n )\n}\n\nfunction findFacetValues(\n facetResults: readonly FacetColumnResult[],\n columnName: string,\n): string[] {\n const match = facetResults.find(f => f.columnName === columnName)\n if (match == null || !isFacetColumnResultValues(match)) return []\n return match.facetValues.map(v => v.value)\n}\n\nfunction hasFacetForColumnName(\n facetResults: readonly FacetColumnResult[],\n columnName: string,\n): boolean {\n return facetResults.some(\n f => f.columnName === columnName && isFacetColumnResultValues(f),\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterConditionRow.js","names":[],"sources":["../../../src/components/QueryBuilder/FilterConditionRow.tsx"],"sourcesContent":["import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport {\n Autocomplete,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n ToggleButton,\n ToggleButtonGroup,\n Tooltip,\n} from '@mui/material'\nimport { FacetColumnResult } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useMemo, useState } from 'react'\nimport { getEnumerationFacet } from '../../utils/functions/enumerationFacet'\nimport { splitAndTrim } from '../../utils/functions/StringUtils'\nimport { useQueryBuilderInternalContext } from './QueryBuilderInternalContext'\nimport {\n availableOpsForKind,\n classifyColumn,\n facetValueMatchesFilter,\n labelForOp,\n QBColumnKind,\n} from './queryBuilderMetadata'\nimport styles from './FilterConditionRow.module.scss'\nimport { QBDragHandle } from './QBDragHandle'\nimport dragStyles from './queryBuilderDrag.module.scss'\nimport { defaultOpForColumnType } from './queryBuilderOperations'\nimport { QBCondition, QBConditionOp } from './QueryBuilderTypes'\n\nexport type FilterConditionRowProps = {\n condition: QBCondition\n parentGroupId: string\n index: number\n}\n\nexport function FilterConditionRow(props: FilterConditionRowProps) {\n const { condition, parentGroupId, index } = props\n const {\n columnModels,\n facetResults,\n onlyFacetedColumns,\n getColumnDisplayName,\n updateConditionAt,\n removeConditionAt,\n } = useQueryBuilderInternalContext()\n\n // A condition is a drag source only. Dropping onto a condition has no\n // meaning in a boolean tree — a node joins a group, not another leaf — so\n // groups own every drop zone and this row never becomes a target.\n const {\n ref: sortableRef,\n handleRef,\n isDragSource,\n } = useSortable({\n id: condition.id,\n index,\n group: parentGroupId,\n disabled: { droppable: true },\n })\n\n const facetColumnNames = useMemo(\n () =>\n new Set(\n facetResults\n .filter(f => getEnumerationFacet(f) !== undefined)\n .map(f => f.columnName),\n ),\n [facetResults],\n )\n\n const propertyOptions = useMemo(() => {\n const source = onlyFacetedColumns\n ? columnModels.filter(cm => facetColumnNames.has(cm.name))\n : columnModels\n return source.map(cm => ({\n name: cm.name,\n columnType: cm.columnType as string,\n label: getColumnDisplayName(cm.name),\n }))\n }, [columnModels, facetColumnNames, onlyFacetedColumns, getColumnDisplayName])\n\n const selectedOption =\n propertyOptions.find(opt => opt.name === condition.columnName) ?? null\n\n const hasFacet =\n condition.columnName != null && facetColumnNames.has(condition.columnName)\n const columnKind = classifyColumn(condition.columnType, hasFacet)\n const availableOps = availableOpsForKind(columnKind)\n\n const operatorLabelId = `qb-op-label-${condition.id}`\n\n return (\n <div\n ref={sortableRef}\n className={`${styles.row}${isDragSource ? ` ${dragStyles.dragSource}` : ''}`}\n role=\"group\"\n aria-label={`Filter condition${condition.columnName ? ` on ${condition.columnName}` : ''}`}\n data-qb-node-id={condition.id}\n >\n <QBDragHandle\n handleRef={handleRef}\n label=\"Drag condition into a condition group\"\n />\n\n <Tooltip title=\"Remove condition\">\n <IconButton\n size=\"small\"\n className={styles.remove}\n aria-label=\"Remove condition\"\n onClick={() => removeConditionAt(condition.id)}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n\n <Autocomplete\n className={styles.propertyPicker}\n size=\"small\"\n options={propertyOptions}\n getOptionLabel={opt => opt.label}\n isOptionEqualToValue={(a, b) => a.name === b.name}\n value={selectedOption}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"outlined\"\n placeholder=\"Select property…\"\n inputProps={{ ...params.inputProps, 'aria-label': 'Property' }}\n />\n )}\n onChange={(_event, value) => {\n if (value == null) return\n // Pick a default op that matches the new column's kind (so a\n // faceted column shifts the row into pill-picker mode, a numeric\n // column into range mode, etc.). Fall back to the raw columnType\n // default if the kind has no ops.\n const nextKind = classifyColumn(\n value.columnType,\n hasFacetForColumnName(facetResults, value.name),\n )\n const opsForKind = availableOpsForKind(nextKind)\n const nextOp =\n opsForKind.length > 0\n ? opsForKind[0]\n : defaultOpForColumnType(value.columnType)\n updateConditionAt(condition.id, {\n columnName: value.name,\n columnType: value.columnType,\n op: nextOp,\n values: [],\n rangeMin: null,\n rangeMax: null,\n text: null,\n })\n }}\n />\n\n {availableOps.length > 0 && (\n <>\n <InputLabel id={operatorLabelId} sx={{ display: 'none' }}>\n Operator\n </InputLabel>\n <Select\n className={styles.operatorPicker}\n size=\"small\"\n labelId={operatorLabelId}\n variant=\"outlined\"\n value={\n availableOps.includes(condition.op)\n ? condition.op\n : availableOps[0]\n }\n onChange={event => {\n const nextOp = event.target.value as QBConditionOp\n updateConditionAt(condition.id, { op: nextOp })\n }}\n aria-label=\"Operator\"\n >\n {availableOps.map(op => (\n <MenuItem key={op} value={op}>\n {labelForOp(op)}\n </MenuItem>\n ))}\n </Select>\n </>\n )}\n\n <ValueInput\n condition={condition}\n columnKind={columnKind}\n hasFacet={hasFacet}\n facetValues={\n hasFacet && condition.columnName != null\n ? findFacetValues(facetResults, condition.columnName)\n : []\n }\n onChange={patch => updateConditionAt(condition.id, patch)}\n />\n </div>\n )\n}\n\ntype ValueInputProps = {\n condition: QBCondition\n columnKind: QBColumnKind\n hasFacet: boolean\n facetValues: string[]\n onChange: (patch: Partial<Omit<QBCondition, 'kind' | 'id'>>) => void\n}\n\nfunction ValueInput(props: ValueInputProps) {\n const { condition, columnKind, hasFacet, facetValues, onChange } = props\n const { op } = condition\n\n // Presence operators have no input at all.\n if (op === 'has_value' || op === 'no_value') return null\n\n switch (op) {\n case 'is_any_of':\n case 'is_all_of':\n if ((columnKind === 'enum' || columnKind === 'list') && hasFacet) {\n return (\n <FacetPillGroup\n columnName={condition.columnName}\n facetValues={facetValues}\n selectedValues={condition.values}\n onChange={next => onChange({ values: next })}\n />\n )\n }\n return (\n <TextField\n className={styles.textInput}\n size=\"small\"\n variant=\"outlined\"\n placeholder=\"Comma-separated values\"\n value={condition.values.join(', ')}\n slotProps={{ htmlInput: { 'aria-label': 'Values' } }}\n onChange={event =>\n onChange({ values: splitAndTrim(event.target.value) })\n }\n />\n )\n case 'between':\n return (\n <>\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n placeholder=\"Min\"\n value={condition.rangeMin ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Minimum' } }}\n onChange={event => onChange({ rangeMin: event.target.value })}\n />\n <span aria-hidden=\"true\">to</span>\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n placeholder=\"Max\"\n value={condition.rangeMax ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Maximum' } }}\n onChange={event => onChange({ rangeMax: event.target.value })}\n />\n </>\n )\n case 'gt':\n case 'gte':\n return (\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n value={condition.rangeMin ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ rangeMin: event.target.value })}\n />\n )\n case 'lt':\n case 'lte':\n return (\n <TextField\n className={styles.rangeInput}\n size=\"small\"\n variant=\"outlined\"\n type=\"text\"\n value={condition.rangeMax ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ rangeMax: event.target.value })}\n />\n )\n case 'equal':\n case 'not_equal':\n if (columnKind === 'boolean') {\n return (\n <ToggleButtonGroup\n className={styles.pillGroup}\n exclusive\n value={condition.values[0] ?? null}\n onChange={(_event, next: string | null) => {\n onChange({ values: next == null ? [] : [next] })\n }}\n aria-label=\"Boolean value\"\n >\n <ToggleButton value=\"true\">Yes</ToggleButton>\n <ToggleButton value=\"false\">No</ToggleButton>\n </ToggleButtonGroup>\n )\n }\n return (\n <TextField\n className={styles.textInput}\n size=\"small\"\n variant=\"outlined\"\n value={condition.values[0] ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ values: [event.target.value] })}\n />\n )\n case 'contains':\n case 'starts_with':\n case 'ends_with':\n case 'is_exactly':\n return (\n <TextField\n className={styles.textInput}\n size=\"small\"\n variant=\"outlined\"\n value={condition.text ?? ''}\n slotProps={{ htmlInput: { 'aria-label': 'Value' } }}\n onChange={event => onChange({ text: event.target.value })}\n />\n )\n default:\n op satisfies never\n return null\n }\n}\n\ntype FacetPillGroupProps = {\n columnName: string | null\n facetValues: string[]\n selectedValues: string[]\n onChange: (next: string[]) => void\n}\n\n// Above this many pills we show a text filter above the group.\nexport const PILL_FILTER_THRESHOLD = 40\n\nfunction FacetPillGroup(props: FacetPillGroupProps) {\n const { columnName, facetValues, selectedValues, onChange } = props\n const { getValueDisplayName } = useQueryBuilderInternalContext()\n const [filter, setFilter] = useState('')\n const showFilter = facetValues.length > PILL_FILTER_THRESHOLD\n\n const labelForValue = useCallback(\n (value: string) => getValueDisplayName(columnName, value),\n [getValueDisplayName, columnName],\n )\n\n // Sort alphabetically by the user-facing label so the pill order is\n // predictable regardless of the backend's facet-result ordering.\n const sortedValues = useMemo(() => {\n return [...facetValues].toSorted((a, b) =>\n labelForValue(a).localeCompare(labelForValue(b), undefined, {\n sensitivity: 'base',\n }),\n )\n }, [facetValues, labelForValue])\n\n const visibleValues = useMemo(() => {\n if (!showFilter) return sortedValues\n return sortedValues.filter(v =>\n facetValueMatchesFilter(v, labelForValue(v), filter),\n )\n }, [sortedValues, filter, showFilter, labelForValue])\n\n return (\n <div className={styles.pillGroupContainer}>\n {showFilter && (\n <TextField\n className={styles.pillFilter}\n size=\"small\"\n variant=\"outlined\"\n placeholder={`Filter ${facetValues.length} values…`}\n value={filter}\n onChange={event => setFilter(event.target.value)}\n slotProps={{ htmlInput: { 'aria-label': 'Filter values' } }}\n />\n )}\n <div className={styles.pillGroupScroll}>\n <ToggleButtonGroup\n className={styles.pillGroup}\n value={selectedValues}\n onChange={(_event, next: string[]) => onChange(next)}\n aria-label=\"Selected values\"\n >\n {visibleValues.map(value => (\n <ToggleButton key={value} value={value}>\n {labelForValue(value)}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </div>\n </div>\n )\n}\n\nfunction findFacetValues(\n facetResults: readonly FacetColumnResult[],\n columnName: string,\n): string[] {\n const match = facetResults.find(f => f.columnName === columnName)\n const enumerationFacet = match && getEnumerationFacet(match)\n return enumerationFacet?.facetValues.map(v => v.value) ?? []\n}\n\nfunction hasFacetForColumnName(\n facetResults: readonly FacetColumnResult[],\n columnName: string,\n): boolean {\n return facetResults.some(\n f => f.columnName === columnName && getEnumerationFacet(f) !== undefined,\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAqCA,SAAgB,EAAmB,GAAgC;CACjE,IAAM,EAAE,cAAW,kBAAe,aAAU,GACtC,EACJ,iBACA,iBACA,uBACA,yBACA,sBACA,yBACE,EAA+B,GAK7B,EACJ,KAAK,GACL,cACA,oBACE,EAAY;EACd,IAAI,EAAU;EACd;EACA,OAAO;EACP,UAAU,EAAE,WAAW,GAAK;CAC9B,CAAC,GAEK,IAAmB,QAErB,IAAI,IACF,EACG,QAAO,MAAK,EAAoB,CAAC,MAAM,KAAA,CAAS,EAChD,KAAI,MAAK,EAAE,UAAU,CAC1B,GACF,CAAC,CAAY,CACf,GAEM,IAAkB,SACP,IACX,EAAa,QAAO,MAAM,EAAiB,IAAI,EAAG,IAAI,CAAC,IACvD,GACU,KAAI,OAAO;EACvB,MAAM,EAAG;EACT,YAAY,EAAG;EACf,OAAO,EAAqB,EAAG,IAAI;CACrC,EAAE,GACD;EAAC;EAAc;EAAkB;EAAoB;CAAoB,CAAC,GAEvE,IACJ,EAAgB,MAAK,MAAO,EAAI,SAAS,EAAU,UAAU,KAAK,MAE9D,IACJ,EAAU,cAAc,QAAQ,EAAiB,IAAI,EAAU,UAAU,GACrE,IAAa,EAAe,EAAU,YAAY,CAAQ,GAC1D,IAAe,EAAoB,CAAU,GAE7C,IAAkB,eAAe,EAAU;CAEjD,OACE,kBAAC,OAAD;EACE,KAAK;EACL,WAAW,GAAG,EAAO,MAAM,IAAe,IAAI,EAAW,eAAe;EACxE,MAAK;EACL,cAAY,mBAAmB,EAAU,aAAa,OAAO,EAAU,eAAe;EACtF,mBAAiB,EAAU;YAL7B;GAOE,kBAAC,GAAD;IACa;IACX,OAAM;GACP,CAAA;GAED,kBAAC,GAAD;IAAS,OAAM;cACb,kBAAC,GAAD;KACE,MAAK;KACL,WAAW,EAAO;KAClB,cAAW;KACX,eAAe,EAAkB,EAAU,EAAE;eAE7C,kBAAC,GAAD,EAAmB,UAAS,QAAS,CAAA;IAC3B,CAAA;GACL,CAAA;GAET,kBAAC,GAAD;IACE,WAAW,EAAO;IAClB,MAAK;IACL,SAAS;IACT,iBAAgB,MAAO,EAAI;IAC3B,uBAAuB,GAAG,MAAM,EAAE,SAAS,EAAE;IAC7C,OAAO;IACP,cAAa,MACX,kBAAC,GAAD;KACE,GAAI;KACJ,SAAQ;KACR,aAAY;KACZ,YAAY;MAAE,GAAG,EAAO;MAAY,cAAc;KAAW;IAC9D,CAAA;IAEH,WAAW,GAAQ,MAAU;KAC3B,IAAI,KAAS,MAAM;KASnB,IAAM,IAAa,EAJF,EACf,EAAM,YACN,EAAsB,GAAc,EAAM,IAAI,CAET,CAAQ,GACzC,IACJ,EAAW,SAAS,IAChB,EAAW,KACX,EAAuB,EAAM,UAAU;KAC7C,EAAkB,EAAU,IAAI;MAC9B,YAAY,EAAM;MAClB,YAAY,EAAM;MAClB,IAAI;MACJ,QAAQ,CAAC;MACT,UAAU;MACV,UAAU;MACV,MAAM;KACR,CAAC;IACH;GACD,CAAA;GAEA,EAAa,SAAS,KACrB,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,IAAI;IAAiB,IAAI,EAAE,SAAS,OAAO;cAAG;GAE9C,CAAA,GACZ,kBAAC,GAAD;IACE,WAAW,EAAO;IAClB,MAAK;IACL,SAAS;IACT,SAAQ;IACR,OACE,EAAa,SAAS,EAAU,EAAE,IAC9B,EAAU,KACV,EAAa;IAEnB,WAAU,MAAS;KACjB,IAAM,IAAS,EAAM,OAAO;KAC5B,EAAkB,EAAU,IAAI,EAAE,IAAI,EAAO,CAAC;IAChD;IACA,cAAW;cAEV,EAAa,KAAI,MAChB,kBAAC,GAAD;KAAmB,OAAO;eACvB,EAAW,CAAE;IACN,GAFK,CAEL,CACX;GACK,CAAA,CACR,EAAA,CAAA;GAGJ,kBAAC,GAAD;IACa;IACC;IACF;IACV,aACE,KAAY,EAAU,cAAc,OAChC,EAAgB,GAAc,EAAU,UAAU,IAClD,CAAC;IAEP,WAAU,MAAS,EAAkB,EAAU,IAAI,CAAK;GACzD,CAAA;EACE;;AAET;AAUA,SAAS,EAAW,GAAwB;CAC1C,IAAM,EAAE,cAAW,eAAY,aAAU,gBAAa,gBAAa,GAC7D,EAAE,UAAO;CAGf,IAAI,MAAO,eAAe,MAAO,YAAY,OAAO;CAEpD,QAAQ,GAAR;EACE,KAAK;EACL,KAAK,aAWH,QAVK,MAAe,UAAU,MAAe,WAAW,IAEpD,kBAAC,GAAD;GACE,YAAY,EAAU;GACT;GACb,gBAAgB,EAAU;GAC1B,WAAU,MAAQ,EAAS,EAAE,QAAQ,EAAK,CAAC;EAC5C,CAAA,IAIH,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,MAAK;GACL,SAAQ;GACR,aAAY;GACZ,OAAO,EAAU,OAAO,KAAK,IAAI;GACjC,WAAW,EAAE,WAAW,EAAE,cAAc,SAAS,EAAE;GACnD,WAAU,MACR,EAAS,EAAE,QAAQ,EAAa,EAAM,OAAO,KAAK,EAAE,CAAC;EAExD,CAAA;EAEL,KAAK,WACH,OACE,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IACE,WAAW,EAAO;IAClB,MAAK;IACL,SAAQ;IACR,MAAK;IACL,aAAY;IACZ,OAAO,EAAU,YAAY;IAC7B,WAAW,EAAE,WAAW,EAAE,cAAc,UAAU,EAAE;IACpD,WAAU,MAAS,EAAS,EAAE,UAAU,EAAM,OAAO,MAAM,CAAC;GAC7D,CAAA;GACD,kBAAC,QAAD;IAAM,eAAY;cAAO;GAAQ,CAAA;GACjC,kBAAC,GAAD;IACE,WAAW,EAAO;IAClB,MAAK;IACL,SAAQ;IACR,MAAK;IACL,aAAY;IACZ,OAAO,EAAU,YAAY;IAC7B,WAAW,EAAE,WAAW,EAAE,cAAc,UAAU,EAAE;IACpD,WAAU,MAAS,EAAS,EAAE,UAAU,EAAM,OAAO,MAAM,CAAC;GAC7D,CAAA;EACD,EAAA,CAAA;EAEN,KAAK;EACL,KAAK,OACH,OACE,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,MAAK;GACL,SAAQ;GACR,MAAK;GACL,OAAO,EAAU,YAAY;GAC7B,WAAW,EAAE,WAAW,EAAE,cAAc,QAAQ,EAAE;GAClD,WAAU,MAAS,EAAS,EAAE,UAAU,EAAM,OAAO,MAAM,CAAC;EAC7D,CAAA;EAEL,KAAK;EACL,KAAK,OACH,OACE,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,MAAK;GACL,SAAQ;GACR,MAAK;GACL,OAAO,EAAU,YAAY;GAC7B,WAAW,EAAE,WAAW,EAAE,cAAc,QAAQ,EAAE;GAClD,WAAU,MAAS,EAAS,EAAE,UAAU,EAAM,OAAO,MAAM,CAAC;EAC7D,CAAA;EAEL,KAAK;EACL,KAAK,aAiBH,OAhBI,MAAe,YAEf,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,WAAA;GACA,OAAO,EAAU,OAAO,MAAM;GAC9B,WAAW,GAAQ,MAAwB;IACzC,EAAS,EAAE,QAAQ,KAAQ,OAAO,CAAC,IAAI,CAAC,CAAI,EAAE,CAAC;GACjD;GACA,cAAW;aAPb,CASE,kBAAC,GAAD;IAAc,OAAM;cAAO;GAAiB,CAAA,GAC5C,kBAAC,GAAD;IAAc,OAAM;cAAQ;GAAgB,CAAA,CAC3B;OAIrB,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,MAAK;GACL,SAAQ;GACR,OAAO,EAAU,OAAO,MAAM;GAC9B,WAAW,EAAE,WAAW,EAAE,cAAc,QAAQ,EAAE;GAClD,WAAU,MAAS,EAAS,EAAE,QAAQ,CAAC,EAAM,OAAO,KAAK,EAAE,CAAC;EAC7D,CAAA;EAEL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,cACH,OACE,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,MAAK;GACL,SAAQ;GACR,OAAO,EAAU,QAAQ;GACzB,WAAW,EAAE,WAAW,EAAE,cAAc,QAAQ,EAAE;GAClD,WAAU,MAAS,EAAS,EAAE,MAAM,EAAM,OAAO,MAAM,CAAC;EACzD,CAAA;EAEL,SAEE,OAAO;CACX;AACF;AAUA,IAAa,IAAwB;AAErC,SAAS,EAAe,GAA4B;CAClD,IAAM,EAAE,eAAY,gBAAa,mBAAgB,gBAAa,GACxD,EAAE,2BAAwB,EAA+B,GACzD,CAAC,GAAQ,KAAa,EAAS,EAAE,GACjC,IAAa,EAAY,SAAA,IAEzB,IAAgB,GACnB,MAAkB,EAAoB,GAAY,CAAK,GACxD,CAAC,GAAqB,CAAU,CAClC,GAIM,IAAe,QACZ,CAAC,GAAG,CAAW,EAAE,UAAU,GAAG,MACnC,EAAc,CAAC,EAAE,cAAc,EAAc,CAAC,GAAG,KAAA,GAAW,EAC1D,aAAa,OACf,CAAC,CACH,GACC,CAAC,GAAa,CAAa,CAAC,GAEzB,IAAgB,QACf,IACE,EAAa,QAAO,MACzB,EAAwB,GAAG,EAAc,CAAC,GAAG,CAAM,CACrD,IAHwB,GAIvB;EAAC;EAAc;EAAQ;EAAY;CAAa,CAAC;CAEpD,OACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB,CACG,KACC,kBAAC,GAAD;GACE,WAAW,EAAO;GAClB,MAAK;GACL,SAAQ;GACR,aAAa,UAAU,EAAY,OAAO;GAC1C,OAAO;GACP,WAAU,MAAS,EAAU,EAAM,OAAO,KAAK;GAC/C,WAAW,EAAE,WAAW,EAAE,cAAc,gBAAgB,EAAE;EAC3D,CAAA,GAEH,kBAAC,OAAD;GAAK,WAAW,EAAO;aACrB,kBAAC,GAAD;IACE,WAAW,EAAO;IAClB,OAAO;IACP,WAAW,GAAQ,MAAmB,EAAS,CAAI;IACnD,cAAW;cAEV,EAAc,KAAI,MACjB,kBAAC,GAAD;KAAiC;eAC9B,EAAc,CAAK;IACR,GAFK,CAEL,CACf;GACgB,CAAA;EAChB,CAAA,CACF;;AAET;AAEA,SAAS,EACP,GACA,GACU;CACV,IAAM,IAAQ,EAAa,MAAK,MAAK,EAAE,eAAe,CAAU;CAEhE,QADyB,KAAS,EAAoB,CAAK,IAClC,YAAY,KAAI,MAAK,EAAE,KAAK,KAAK,CAAC;AAC7D;AAEA,SAAS,EACP,GACA,GACS;CACT,OAAO,EAAa,MAClB,MAAK,EAAE,eAAe,KAAc,EAAoB,CAAC,MAAM,KAAA,CACjE;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterGroupNode.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/FilterGroupNode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FilterGroupNode.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/FilterGroupNode.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAExD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAkL1D"}
|
|
@@ -1,134 +1,150 @@
|
|
|
1
1
|
import { isQBGroup as e } from "./QueryBuilderTypes.js";
|
|
2
2
|
import { groupDropZoneData as t, groupDropZoneId as n } from "./queryBuilderDnd.js";
|
|
3
|
-
import {
|
|
4
|
-
import i from "./
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import s from "./
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
3
|
+
import { FILTER_LIMIT_VIOLATION_MESSAGES as r } from "./queryBuilderLimits.js";
|
|
4
|
+
import { useQueryBuilderInternalContext as i } from "./QueryBuilderInternalContext.js";
|
|
5
|
+
import a from "./queryBuilderDrag.module.js";
|
|
6
|
+
import { QBDragHandle as o } from "./QBDragHandle.js";
|
|
7
|
+
import { FilterConditionRow as s } from "./FilterConditionRow.js";
|
|
8
|
+
import c from "./FilterGroupNode.module.js";
|
|
9
|
+
import { Button as l, ToggleButton as u, ToggleButtonGroup as d, Tooltip as f } from "@mui/material";
|
|
10
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
11
|
+
import { useForkRef as h } from "@mui/material/utils";
|
|
12
|
+
import { useDroppable as g } from "@dnd-kit/react";
|
|
13
|
+
import { useSortable as _ } from "@dnd-kit/react/sortable";
|
|
14
|
+
import { pointerIntersection as v } from "@dnd-kit/collision";
|
|
14
15
|
//#region src/components/QueryBuilder/FilterGroupNode.tsx
|
|
15
|
-
function
|
|
16
|
-
let { group:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
function y(f) {
|
|
17
|
+
let { group: C, isRoot: w = !1, parentGroupId: T, index: E, depth: D = 0 } = f, { addConditionAt: O, addChildGroupAt: k, clearGroupAt: A, updateGroupAt: j, removeGroupAt: M, isAtLeafPredicateLimit: N } = i(), P = D + 1, F = C.children.length >= 25, I;
|
|
18
|
+
F ? I = r.groupChildren : N && (I = r.leafPredicates);
|
|
19
|
+
let L;
|
|
20
|
+
F ? L = r.groupChildren : P >= 5 && (L = r.depth);
|
|
21
|
+
let { ref: R, handleRef: z, isDragSource: B } = _({
|
|
22
|
+
id: C.id,
|
|
23
|
+
index: E ?? 0,
|
|
24
|
+
group: T ?? C.id,
|
|
20
25
|
disabled: {
|
|
21
|
-
draggable:
|
|
26
|
+
draggable: w,
|
|
22
27
|
droppable: !0
|
|
23
28
|
}
|
|
24
|
-
}), { ref:
|
|
25
|
-
id: n(
|
|
26
|
-
data: t(
|
|
27
|
-
collisionDetector:
|
|
28
|
-
collisionPriority:
|
|
29
|
-
}),
|
|
30
|
-
"--qb-accent-color":
|
|
31
|
-
"--qb-pill-color":
|
|
29
|
+
}), { ref: V, isDropTarget: H } = g({
|
|
30
|
+
id: n(C.id),
|
|
31
|
+
data: t(C.id),
|
|
32
|
+
collisionDetector: v,
|
|
33
|
+
collisionPriority: D
|
|
34
|
+
}), U = h(R, V), W = {
|
|
35
|
+
"--qb-accent-color": x(C),
|
|
36
|
+
"--qb-pill-color": x(C)
|
|
32
37
|
};
|
|
33
|
-
return /* @__PURE__ */
|
|
34
|
-
ref:
|
|
35
|
-
className: `${
|
|
36
|
-
style:
|
|
38
|
+
return /* @__PURE__ */ m("div", {
|
|
39
|
+
ref: U,
|
|
40
|
+
className: `${c.group} ${w ? "" : c.nested}${B ? ` ${a.dragSource}` : ""}${H ? ` ${c.dropTarget}` : ""}`,
|
|
41
|
+
style: W,
|
|
37
42
|
role: "group",
|
|
38
|
-
"aria-label":
|
|
39
|
-
"data-qb-node-id":
|
|
40
|
-
children: [/* @__PURE__ */
|
|
41
|
-
className:
|
|
43
|
+
"aria-label": S(C),
|
|
44
|
+
"data-qb-node-id": C.id,
|
|
45
|
+
children: [/* @__PURE__ */ m("div", {
|
|
46
|
+
className: c.header,
|
|
42
47
|
children: [
|
|
43
|
-
!
|
|
44
|
-
handleRef:
|
|
48
|
+
!w && /* @__PURE__ */ p(o, {
|
|
49
|
+
handleRef: z,
|
|
45
50
|
label: "Drag condition group into another condition group"
|
|
46
51
|
}),
|
|
47
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ m(d, {
|
|
48
53
|
size: "small",
|
|
49
|
-
className:
|
|
54
|
+
className: c.combinator,
|
|
50
55
|
exclusive: !0,
|
|
51
|
-
value:
|
|
56
|
+
value: C.combinator,
|
|
52
57
|
"aria-label": "Boolean combinator",
|
|
53
58
|
onChange: (e, t) => {
|
|
54
|
-
t != null &&
|
|
59
|
+
t != null && j(C.id, { combinator: t });
|
|
55
60
|
},
|
|
56
|
-
children: [/* @__PURE__ */
|
|
61
|
+
children: [/* @__PURE__ */ p(u, {
|
|
57
62
|
value: "AND",
|
|
58
63
|
"aria-label": "AND",
|
|
59
64
|
children: "AND"
|
|
60
|
-
}), /* @__PURE__ */
|
|
65
|
+
}), /* @__PURE__ */ p(u, {
|
|
61
66
|
value: "OR",
|
|
62
67
|
"aria-label": "OR",
|
|
63
68
|
children: "OR"
|
|
64
69
|
})]
|
|
65
70
|
}),
|
|
66
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ p(u, {
|
|
67
72
|
size: "small",
|
|
68
73
|
value: "not",
|
|
69
|
-
selected:
|
|
70
|
-
className:
|
|
74
|
+
selected: C.not,
|
|
75
|
+
className: c.notToggle,
|
|
71
76
|
"aria-label": "Negate this group",
|
|
72
|
-
"aria-pressed":
|
|
73
|
-
onChange: () =>
|
|
77
|
+
"aria-pressed": C.not,
|
|
78
|
+
onChange: () => j(C.id, { not: !C.not }),
|
|
74
79
|
children: "Exclude (NOT)"
|
|
75
80
|
}),
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
className:
|
|
81
|
+
/* @__PURE__ */ m("div", {
|
|
82
|
+
className: c.actions,
|
|
78
83
|
children: [
|
|
79
|
-
/* @__PURE__ */
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
onClick: () => E(x.id),
|
|
84
|
+
/* @__PURE__ */ p(b, {
|
|
85
|
+
disabledReason: I,
|
|
86
|
+
onClick: () => O(C.id),
|
|
83
87
|
children: "+ Condition"
|
|
84
88
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
onClick: () => D(x.id),
|
|
89
|
+
/* @__PURE__ */ p(b, {
|
|
90
|
+
disabledReason: L,
|
|
91
|
+
onClick: () => k(C.id),
|
|
89
92
|
children: "+ Condition Group"
|
|
90
93
|
}),
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
className:
|
|
94
|
+
/* @__PURE__ */ p(l, {
|
|
95
|
+
className: c.actionButton,
|
|
93
96
|
size: "small",
|
|
94
|
-
onClick: () =>
|
|
95
|
-
disabled:
|
|
97
|
+
onClick: () => A(C.id),
|
|
98
|
+
disabled: C.children.length === 0,
|
|
96
99
|
children: "Clear"
|
|
97
100
|
}),
|
|
98
|
-
!
|
|
99
|
-
className:
|
|
101
|
+
!w && /* @__PURE__ */ p(l, {
|
|
102
|
+
className: c.actionButton,
|
|
100
103
|
size: "small",
|
|
101
|
-
onClick: () =>
|
|
104
|
+
onClick: () => M(C.id),
|
|
102
105
|
children: "Delete Condition Group"
|
|
103
106
|
})
|
|
104
107
|
]
|
|
105
108
|
})
|
|
106
109
|
]
|
|
107
|
-
}), /* @__PURE__ */
|
|
108
|
-
className:
|
|
109
|
-
children:
|
|
110
|
-
className:
|
|
110
|
+
}), /* @__PURE__ */ p("div", {
|
|
111
|
+
className: c.children,
|
|
112
|
+
children: C.children.length === 0 ? /* @__PURE__ */ p("div", {
|
|
113
|
+
className: c.emptyState,
|
|
111
114
|
children: "No conditions yet, add one above"
|
|
112
|
-
}) :
|
|
115
|
+
}) : C.children.map((t, n) => e(t) ? /* @__PURE__ */ p(y, {
|
|
113
116
|
group: t,
|
|
114
|
-
parentGroupId:
|
|
117
|
+
parentGroupId: C.id,
|
|
115
118
|
index: n,
|
|
116
|
-
depth:
|
|
117
|
-
}, t.id) : /* @__PURE__ */
|
|
119
|
+
depth: D + 1
|
|
120
|
+
}, t.id) : /* @__PURE__ */ p(s, {
|
|
118
121
|
condition: t,
|
|
119
|
-
parentGroupId:
|
|
122
|
+
parentGroupId: C.id,
|
|
120
123
|
index: n
|
|
121
124
|
}, t.id))
|
|
122
125
|
})]
|
|
123
126
|
});
|
|
124
127
|
}
|
|
125
|
-
function
|
|
128
|
+
function b(e) {
|
|
129
|
+
let { disabledReason: t, onClick: n, children: r } = e, i = /* @__PURE__ */ p(l, {
|
|
130
|
+
className: c.actionButton,
|
|
131
|
+
size: "small",
|
|
132
|
+
onClick: n,
|
|
133
|
+
disabled: t !== void 0,
|
|
134
|
+
children: r
|
|
135
|
+
});
|
|
136
|
+
return t === void 0 ? i : /* @__PURE__ */ p(f, {
|
|
137
|
+
title: t,
|
|
138
|
+
children: /* @__PURE__ */ p("span", { children: i })
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function x(e) {
|
|
126
142
|
return e.not ? "var(--synapse-error)" : e.combinator === "OR" ? "var(--synapse-warning)" : "var(--synapse-primary-action-color)";
|
|
127
143
|
}
|
|
128
|
-
function
|
|
144
|
+
function S(e) {
|
|
129
145
|
return `${e.not ? "excluded " : ""}${e.combinator} filter group`;
|
|
130
146
|
}
|
|
131
147
|
//#endregion
|
|
132
|
-
export {
|
|
148
|
+
export { y as FilterGroupNode };
|
|
133
149
|
|
|
134
150
|
//# sourceMappingURL=FilterGroupNode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterGroupNode.js","names":[],"sources":["../../../src/components/QueryBuilder/FilterGroupNode.tsx"],"sourcesContent":["import { Button, ToggleButton, ToggleButtonGroup } from '@mui/material'\nimport { useForkRef } from '@mui/material/utils'\nimport { pointerIntersection } from '@dnd-kit/collision'\nimport { useDroppable } from '@dnd-kit/react'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport { CSSProperties } from 'react'\nimport { FilterConditionRow } from './FilterConditionRow'\nimport styles from './FilterGroupNode.module.scss'\nimport { QBDragHandle } from './QBDragHandle'\nimport dragStyles from './queryBuilderDrag.module.scss'\nimport { groupDropZoneData, groupDropZoneId } from './queryBuilderDnd'\nimport { useQueryBuilderInternalContext } from './QueryBuilderInternalContext'\nimport { isQBGroup, QBGroup } from './QueryBuilderTypes'\n\nexport type FilterGroupNodeProps = {\n group: QBGroup\n isRoot?: boolean\n parentGroupId?: string\n index?: number\n /** Nesting level, used to resolve drops into the innermost group. */\n depth?: number\n}\n\nexport function FilterGroupNode(props: FilterGroupNodeProps) {\n const { group, isRoot = false, parentGroupId, index, depth = 0 } = props\n const {\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n } = useQueryBuilderInternalContext()\n\n // Groups become drop targets only through the `useDroppable` zone below.\n // Keep the sortable's droppable half disabled unless `useQueryBuilderDrag`\n // also resolves sortable targets: for any target the app doesn't reposition\n // in `onDragOver`, dnd-kit's OptimisticSortingPlugin moves the DOM node\n // itself, and React's next commit throws `NotFoundError` on `removeChild`.\n const {\n ref: sortableRef,\n handleRef,\n isDragSource,\n } = useSortable({\n id: group.id,\n index: index ?? 0,\n group: parentGroupId ?? group.id,\n disabled: { draggable: isRoot, droppable: true },\n })\n\n // `useQueryBuilderDrag` identifies the target group by `data.groupId`. Zones\n // nest inside their groups, so the pointer is inside every ancestor of the\n // group it is over; hit-testing by pointer and ranking by depth selects the\n // innermost. `collisionPriority` replaces the ranking a detector returns, so\n // the detector has to be one that reports nothing but pointer hits —\n // otherwise a deeper zone the dragged box merely overlaps outranks the zone\n // the pointer is actually in.\n const { ref: dropZoneRef, isDropTarget } = useDroppable({\n id: groupDropZoneId(group.id),\n data: groupDropZoneData(group.id),\n collisionDetector: pointerIntersection,\n collisionPriority: depth,\n })\n\n // The drag source and the drop zone are the same element.\n const groupRef = useForkRef(sortableRef, dropZoneRef)\n\n const style: CSSProperties = {\n ['--qb-accent-color' as string]: accentColorFor(group),\n ['--qb-pill-color' as string]: accentColorFor(group),\n }\n\n return (\n <div\n ref={groupRef}\n className={`${styles.group} ${isRoot ? '' : styles.nested}${\n isDragSource ? ` ${dragStyles.dragSource}` : ''\n }${isDropTarget ? ` ${styles.dropTarget}` : ''}`}\n style={style}\n role=\"group\"\n aria-label={groupAriaLabel(group)}\n data-qb-node-id={group.id}\n >\n <div className={styles.header}>\n {!isRoot && (\n <QBDragHandle\n handleRef={handleRef}\n label=\"Drag condition group into another condition group\"\n />\n )}\n <ToggleButtonGroup\n size=\"small\"\n className={styles.combinator}\n exclusive\n value={group.combinator}\n aria-label=\"Boolean combinator\"\n onChange={(_event, next) => {\n if (next == null) return\n updateGroupAt(group.id, { combinator: next })\n }}\n >\n <ToggleButton value=\"AND\" aria-label=\"AND\">\n AND\n </ToggleButton>\n <ToggleButton value=\"OR\" aria-label=\"OR\">\n OR\n </ToggleButton>\n </ToggleButtonGroup>\n\n <ToggleButton\n size=\"small\"\n value=\"not\"\n selected={group.not}\n className={styles.notToggle}\n aria-label=\"Negate this group\"\n aria-pressed={group.not}\n onChange={() => updateGroupAt(group.id, { not: !group.not })}\n >\n Exclude (NOT)\n </ToggleButton>\n\n <div className={styles.actions}>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => addConditionAt(group.id)}\n >\n + Condition\n </Button>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => addChildGroupAt(group.id)}\n >\n + Condition Group\n </Button>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => clearGroupAt(group.id)}\n disabled={group.children.length === 0}\n >\n Clear\n </Button>\n {!isRoot && (\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => removeGroupAt(group.id)}\n >\n Delete Condition Group\n </Button>\n )}\n </div>\n </div>\n\n <div className={styles.children}>\n {group.children.length === 0 ? (\n <div className={styles.emptyState}>\n No conditions yet, add one above\n </div>\n ) : (\n group.children.map((child, childIndex) => {\n if (isQBGroup(child)) {\n return (\n <FilterGroupNode\n key={child.id}\n group={child}\n parentGroupId={group.id}\n index={childIndex}\n depth={depth + 1}\n />\n )\n }\n return (\n <FilterConditionRow\n key={child.id}\n condition={child}\n parentGroupId={group.id}\n index={childIndex}\n />\n )\n })\n )}\n </div>\n </div>\n )\n}\n\nfunction accentColorFor(group: QBGroup): string {\n if (group.not) return 'var(--synapse-error)'\n if (group.combinator === 'OR') return 'var(--synapse-warning)'\n return 'var(--synapse-primary-action-color)'\n}\n\nfunction groupAriaLabel(group: QBGroup): string {\n const modifier = group.not ? 'excluded ' : ''\n return `${modifier}${group.combinator} filter group`\n}\n"],"mappings":";;;;;;;;;;;;;;AAuBA,SAAgB,EAAgB,GAA6B;CAC3D,IAAM,EAAE,UAAO,YAAS,IAAO,kBAAe,UAAO,WAAQ,MAAM,GAC7D,EACJ,mBACA,oBACA,iBACA,kBACA,qBACE,EAA+B,GAO7B,EACJ,KAAK,GACL,cACA,oBACE,EAAY;EACd,IAAI,EAAM;EACV,OAAO,KAAS;EAChB,OAAO,KAAiB,EAAM;EAC9B,UAAU;GAAE,WAAW;GAAQ,WAAW;EAAK;CACjD,CAAC,GASK,EAAE,KAAK,GAAa,oBAAiB,EAAa;EACtD,IAAI,EAAgB,EAAM,EAAE;EAC5B,MAAM,EAAkB,EAAM,EAAE;EAChC,mBAAmB;EACnB,mBAAmB;CACrB,CAAC,GAGK,IAAW,EAAW,GAAa,CAAW,GAE9C,IAAuB;EAC1B,qBAAgC,EAAe,CAAK;EACpD,mBAA8B,EAAe,CAAK;CACrD;CAEA,OACE,kBAAC,OAAD;EACE,KAAK;EACL,WAAW,GAAG,EAAO,MAAM,GAAG,IAAS,KAAK,EAAO,SACjD,IAAe,IAAI,EAAW,eAAe,KAC5C,IAAe,IAAI,EAAO,eAAe;EACrC;EACP,MAAK;EACL,cAAY,EAAe,CAAK;EAChC,mBAAiB,EAAM;YARzB,CAUE,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB;IACG,CAAC,KACA,kBAAC,GAAD;KACa;KACX,OAAM;IACP,CAAA;IAEH,kBAAC,GAAD;KACE,MAAK;KACL,WAAW,EAAO;KAClB,WAAA;KACA,OAAO,EAAM;KACb,cAAW;KACX,WAAW,GAAQ,MAAS;MACtB,KAAQ,QACZ,EAAc,EAAM,IAAI,EAAE,YAAY,EAAK,CAAC;KAC9C;eATF,CAWE,kBAAC,GAAD;MAAc,OAAM;MAAM,cAAW;gBAAM;KAE7B,CAAA,GACd,kBAAC,GAAD;MAAc,OAAM;MAAK,cAAW;gBAAK;KAE3B,CAAA,CACG;;IAEnB,kBAAC,GAAD;KACE,MAAK;KACL,OAAM;KACN,UAAU,EAAM;KAChB,WAAW,EAAO;KAClB,cAAW;KACX,gBAAc,EAAM;KACpB,gBAAgB,EAAc,EAAM,IAAI,EAAE,KAAK,CAAC,EAAM,IAAI,CAAC;eAC5D;IAEa,CAAA;IAEd,kBAAC,OAAD;KAAK,WAAW,EAAO;eAAvB;MACE,kBAAC,GAAD;OACE,WAAW,EAAO;OAClB,MAAK;OACL,eAAe,EAAe,EAAM,EAAE;iBACvC;MAEO,CAAA;MACR,kBAAC,GAAD;OACE,WAAW,EAAO;OAClB,MAAK;OACL,eAAe,EAAgB,EAAM,EAAE;iBACxC;MAEO,CAAA;MACR,kBAAC,GAAD;OACE,WAAW,EAAO;OAClB,MAAK;OACL,eAAe,EAAa,EAAM,EAAE;OACpC,UAAU,EAAM,SAAS,WAAW;iBACrC;MAEO,CAAA;MACP,CAAC,KACA,kBAAC,GAAD;OACE,WAAW,EAAO;OAClB,MAAK;OACL,eAAe,EAAc,EAAM,EAAE;iBACtC;MAEO,CAAA;KAEP;;GACF;MAEL,kBAAC,OAAD;GAAK,WAAW,EAAO;aACpB,EAAM,SAAS,WAAW,IACzB,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAY;GAE9B,CAAA,IAEL,EAAM,SAAS,KAAK,GAAO,MACrB,EAAU,CAAK,IAEf,kBAAC,GAAD;IAEE,OAAO;IACP,eAAe,EAAM;IACrB,OAAO;IACP,OAAO,IAAQ;GAChB,GALM,EAAM,EAKZ,IAIH,kBAAC,GAAD;IAEE,WAAW;IACX,eAAe,EAAM;IACrB,OAAO;GACR,GAJM,EAAM,EAIZ,CAEJ;EAEA,CAAA,CACF;;AAET;AAEA,SAAS,EAAe,GAAwB;CAG9C,OAFI,EAAM,MAAY,yBAClB,EAAM,eAAe,OAAa,2BAC/B;AACT;AAEA,SAAS,EAAe,GAAwB;CAE9C,OAAO,GADU,EAAM,MAAM,cAAc,KACtB,EAAM,WAAW;AACxC"}
|
|
1
|
+
{"version":3,"file":"FilterGroupNode.js","names":[],"sources":["../../../src/components/QueryBuilder/FilterGroupNode.tsx"],"sourcesContent":["import { Button, ToggleButton, ToggleButtonGroup, Tooltip } from '@mui/material'\nimport { useForkRef } from '@mui/material/utils'\nimport { pointerIntersection } from '@dnd-kit/collision'\nimport { useDroppable } from '@dnd-kit/react'\nimport { useSortable } from '@dnd-kit/react/sortable'\nimport { CSSProperties, ReactNode } from 'react'\nimport { FilterConditionRow } from './FilterConditionRow'\nimport styles from './FilterGroupNode.module.scss'\nimport { QBDragHandle } from './QBDragHandle'\nimport dragStyles from './queryBuilderDrag.module.scss'\nimport { groupDropZoneData, groupDropZoneId } from './queryBuilderDnd'\nimport {\n FILTER_LIMIT_VIOLATION_MESSAGES,\n MAX_FILTER_GROUP_CHILDREN,\n MAX_FILTER_GROUP_DEPTH,\n} from './queryBuilderLimits'\nimport { useQueryBuilderInternalContext } from './QueryBuilderInternalContext'\nimport { isQBGroup, QBGroup } from './QueryBuilderTypes'\n\nexport type FilterGroupNodeProps = {\n group: QBGroup\n isRoot?: boolean\n parentGroupId?: string\n index?: number\n /** Nesting level, used to resolve drops into the innermost group. */\n depth?: number\n}\n\nexport function FilterGroupNode(props: FilterGroupNodeProps) {\n const { group, isRoot = false, parentGroupId, index, depth = 0 } = props\n const {\n addConditionAt,\n addChildGroupAt,\n clearGroupAt,\n updateGroupAt,\n removeGroupAt,\n isAtLeafPredicateLimit,\n } = useQueryBuilderInternalContext()\n\n // The root group is sent directly in additionalFilters, where the server counts it as depth 1.\n const filterDepth = depth + 1\n const isAtChildLimit = group.children.length >= MAX_FILTER_GROUP_CHILDREN\n let addConditionDisabledReason: string | undefined\n if (isAtChildLimit) {\n addConditionDisabledReason = FILTER_LIMIT_VIOLATION_MESSAGES.groupChildren\n } else if (isAtLeafPredicateLimit) {\n addConditionDisabledReason = FILTER_LIMIT_VIOLATION_MESSAGES.leafPredicates\n }\n let addGroupDisabledReason: string | undefined\n if (isAtChildLimit) {\n addGroupDisabledReason = FILTER_LIMIT_VIOLATION_MESSAGES.groupChildren\n } else if (filterDepth >= MAX_FILTER_GROUP_DEPTH) {\n addGroupDisabledReason = FILTER_LIMIT_VIOLATION_MESSAGES.depth\n }\n\n // Groups become drop targets only through the `useDroppable` zone below.\n // Keep the sortable's droppable half disabled unless `useQueryBuilderDrag`\n // also resolves sortable targets: for any target the app doesn't reposition\n // in `onDragOver`, dnd-kit's OptimisticSortingPlugin moves the DOM node\n // itself, and React's next commit throws `NotFoundError` on `removeChild`.\n const {\n ref: sortableRef,\n handleRef,\n isDragSource,\n } = useSortable({\n id: group.id,\n index: index ?? 0,\n group: parentGroupId ?? group.id,\n disabled: { draggable: isRoot, droppable: true },\n })\n\n // `useQueryBuilderDrag` identifies the target group by `data.groupId`. Zones\n // nest inside their groups, so the pointer is inside every ancestor of the\n // group it is over; hit-testing by pointer and ranking by depth selects the\n // innermost. `collisionPriority` replaces the ranking a detector returns, so\n // the detector has to be one that reports nothing but pointer hits —\n // otherwise a deeper zone the dragged box merely overlaps outranks the zone\n // the pointer is actually in.\n const { ref: dropZoneRef, isDropTarget } = useDroppable({\n id: groupDropZoneId(group.id),\n data: groupDropZoneData(group.id),\n collisionDetector: pointerIntersection,\n collisionPriority: depth,\n })\n\n // The drag source and the drop zone are the same element.\n const groupRef = useForkRef(sortableRef, dropZoneRef)\n\n const style: CSSProperties = {\n ['--qb-accent-color' as string]: accentColorFor(group),\n ['--qb-pill-color' as string]: accentColorFor(group),\n }\n\n return (\n <div\n ref={groupRef}\n className={`${styles.group} ${isRoot ? '' : styles.nested}${\n isDragSource ? ` ${dragStyles.dragSource}` : ''\n }${isDropTarget ? ` ${styles.dropTarget}` : ''}`}\n style={style}\n role=\"group\"\n aria-label={groupAriaLabel(group)}\n data-qb-node-id={group.id}\n >\n <div className={styles.header}>\n {!isRoot && (\n <QBDragHandle\n handleRef={handleRef}\n label=\"Drag condition group into another condition group\"\n />\n )}\n <ToggleButtonGroup\n size=\"small\"\n className={styles.combinator}\n exclusive\n value={group.combinator}\n aria-label=\"Boolean combinator\"\n onChange={(_event, next) => {\n if (next == null) return\n updateGroupAt(group.id, { combinator: next })\n }}\n >\n <ToggleButton value=\"AND\" aria-label=\"AND\">\n AND\n </ToggleButton>\n <ToggleButton value=\"OR\" aria-label=\"OR\">\n OR\n </ToggleButton>\n </ToggleButtonGroup>\n\n <ToggleButton\n size=\"small\"\n value=\"not\"\n selected={group.not}\n className={styles.notToggle}\n aria-label=\"Negate this group\"\n aria-pressed={group.not}\n onChange={() => updateGroupAt(group.id, { not: !group.not })}\n >\n Exclude (NOT)\n </ToggleButton>\n\n <div className={styles.actions}>\n <AddButton\n disabledReason={addConditionDisabledReason}\n onClick={() => addConditionAt(group.id)}\n >\n + Condition\n </AddButton>\n <AddButton\n disabledReason={addGroupDisabledReason}\n onClick={() => addChildGroupAt(group.id)}\n >\n + Condition Group\n </AddButton>\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => clearGroupAt(group.id)}\n disabled={group.children.length === 0}\n >\n Clear\n </Button>\n {!isRoot && (\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={() => removeGroupAt(group.id)}\n >\n Delete Condition Group\n </Button>\n )}\n </div>\n </div>\n\n <div className={styles.children}>\n {group.children.length === 0 ? (\n <div className={styles.emptyState}>\n No conditions yet, add one above\n </div>\n ) : (\n group.children.map((child, childIndex) => {\n if (isQBGroup(child)) {\n return (\n <FilterGroupNode\n key={child.id}\n group={child}\n parentGroupId={group.id}\n index={childIndex}\n depth={depth + 1}\n />\n )\n }\n return (\n <FilterConditionRow\n key={child.id}\n condition={child}\n parentGroupId={group.id}\n index={childIndex}\n />\n )\n })\n )}\n </div>\n </div>\n )\n}\n\ntype AddButtonProps = {\n /** When set, the button is disabled and this explanation is shown on hover. */\n disabledReason: string | undefined\n onClick: () => void\n children: ReactNode\n}\n\nfunction AddButton(props: AddButtonProps) {\n const { disabledReason, onClick, children } = props\n const button = (\n <Button\n className={styles.actionButton}\n size=\"small\"\n onClick={onClick}\n disabled={disabledReason !== undefined}\n >\n {children}\n </Button>\n )\n if (disabledReason === undefined) {\n return button\n }\n // A disabled button fires no pointer events, so the tooltip listens on a wrapper.\n return (\n <Tooltip title={disabledReason}>\n <span>{button}</span>\n </Tooltip>\n )\n}\n\nfunction accentColorFor(group: QBGroup): string {\n if (group.not) return 'var(--synapse-error)'\n if (group.combinator === 'OR') return 'var(--synapse-warning)'\n return 'var(--synapse-primary-action-color)'\n}\n\nfunction groupAriaLabel(group: QBGroup): string {\n const modifier = group.not ? 'excluded ' : ''\n return `${modifier}${group.combinator} filter group`\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.
|
|
1
|
+
._root_1wpms_1{background:var(--synapse-background-color-gray-light);border:1px solid var(--synapse-border-color-gray);border-radius:4px;flex-direction:column;gap:12px;padding:12px;display:flex}._applyRow_1wpms_11{justify-content:flex-end;align-items:center;gap:12px;display:flex}._applyButton_1wpms_18{text-transform:none}._summaryBar_1wpms_22{border:1px solid var(--synapse-border-color-gray);background:#fff;border-radius:4px;flex-direction:column;align-items:stretch;gap:6px;padding:8px 12px;display:flex}._summaryHeader_1wpms_33{justify-content:space-between;align-items:center;gap:12px;display:flex}._summaryLabel_1wpms_40{text-transform:uppercase;letter-spacing:.5px;color:var(--synapse-gray-regular);font-size:11px;font-weight:700}._summaryContent_1wpms_48{word-break:break-word;font-size:14px;line-height:1.5}._summaryModeToggle_1wpms_54{flex-shrink:0}._summaryModeToggle_1wpms_54 .MuiToggleButton-root{text-transform:none;padding:2px 12px;font-size:12px}._sqlPlaceholder_1wpms_63{color:var(--synapse-gray-deemphasized);font-style:italic}._sqlText_1wpms_68{font-family:var(--synapse-font-family-mono,monospace);white-space:pre-wrap;word-break:break-word;color:var(--synapse-gray-1000);font-size:12px;display:block}._sqlError_1wpms_77{color:var(--synapse-error);font-size:13px}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderControls.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/QueryBuilderControls.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QueryBuilderControls.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/QueryBuilderControls.tsx"],"names":[],"mappings":"AAgCA,OAAO,EAAe,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAK1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,iEAAiE;IACjE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,2DAA2D;IAC3D,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,2CAqNpE"}
|