synapse-react-client 4.0.40 → 4.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.d.ts +1 -0
- package/dist/SWC.index.d.ts.map +1 -1
- package/dist/SWC.index.js +2 -1
- package/dist/SWC.index.js.map +1 -1
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts +1 -0
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts.map +1 -1
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js +12 -12
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts +7 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +30 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +138 -244
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts +13 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js +60 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DucUploadSection.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +8 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +179 -63
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts +2 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +13 -13
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts +3 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +3 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js +50 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/PrincipalInvestigatorFields.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +112 -143
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +4 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +8 -7
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +3 -2
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +79 -47
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js +51 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SigningOfficialFields.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts +12 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js +24 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/eDucSignatureUtils.js.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts +11 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/requestFlowTypes.js +0 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts +22 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.d.ts.map +1 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js +32 -0
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/useInitializeRequestAccessors.js.map +1 -0
- package/dist/components/AclEditor/AclEditor.js +20 -20
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +51 -48
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Authentication/Constants.d.ts +4 -0
- package/dist/components/Authentication/Constants.d.ts.map +1 -1
- package/dist/components/Authentication/Constants.js +5 -2
- package/dist/components/Authentication/Constants.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.d.ts.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js +8 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/RegenerateBackupCodesWarning.js +4 -1
- package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
- package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
- package/dist/components/Authentication/TOTPForm.js +20 -18
- package/dist/components/Authentication/TOTPForm.js.map +1 -1
- package/dist/components/Authentication/TwoFactorBackupCodes.d.ts.map +1 -1
- package/dist/components/Authentication/TwoFactorBackupCodes.js +41 -12
- package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js +90 -77
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +244 -246
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/components/GridLoadingState.d.ts +23 -0
- package/dist/components/DataGrid/components/GridLoadingState.d.ts.map +1 -0
- package/dist/components/DataGrid/components/GridLoadingState.js +64 -0
- package/dist/components/DataGrid/components/GridLoadingState.js.map +1 -0
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +52 -54
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts +60 -6
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.js +71 -60
- package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
- package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts +11 -0
- package/dist/components/DataGrid/utils/getNamedColumnIndices.d.ts.map +1 -0
- package/dist/components/DataGrid/utils/getNamedColumnIndices.js +8 -0
- package/dist/components/DataGrid/utils/getNamedColumnIndices.js.map +1 -0
- package/dist/components/FilePreview/FileHandleContentRenderer.d.ts +6 -2
- package/dist/components/FilePreview/FileHandleContentRenderer.d.ts.map +1 -1
- package/dist/components/FilePreview/FileHandleContentRenderer.js +27 -14
- package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
- package/dist/components/FilePreview/PdfPreview.d.ts +1 -1
- package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
- package/dist/components/FilePreview/PdfPreview.js +15 -16
- package/dist/components/FilePreview/PdfPreview.js.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts +11 -0
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +61 -0
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts +33 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +190 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.css +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts +17 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.js +88 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.module.js +5 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibrary.module.scss +12 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts +19 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js +115 -0
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.css +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts +9 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js +18 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js +5 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldValidationErrorAlert.module.scss +4 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts +21 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.js +108 -0
- package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts +10 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.js +31 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditor.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts +15 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +234 -0
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts +14 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.js +72 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts +13 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js +33 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js.map +1 -0
- package/dist/components/FormTemplateEditor/StepCard.d.ts +25 -0
- package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/StepCard.js +203 -0
- package/dist/components/FormTemplateEditor/StepCard.js.map +1 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts +34 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.js +128 -0
- package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts +19 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +78 -0
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -0
- package/dist/components/FormTemplateEditor/dragHandle.css +1 -0
- package/dist/components/FormTemplateEditor/dragHandle.module.js +8 -0
- package/dist/components/FormTemplateEditor/dragHandle.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/dragHandle.module.scss +22 -0
- package/dist/components/FormTemplateEditor/dropTarget.css +1 -0
- package/dist/components/FormTemplateEditor/dropTarget.module.js +5 -0
- package/dist/components/FormTemplateEditor/dropTarget.module.js.map +1 -0
- package/dist/components/FormTemplateEditor/dropTarget.module.scss +14 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts +48 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.js +126 -0
- package/dist/components/FormTemplateEditor/formTemplateDraftState.js.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts +35 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.js +35 -0
- package/dist/components/FormTemplateEditor/formTemplateSchema.js.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts +32 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.js +75 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.js.map +1 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +27 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js +84 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -0
- package/dist/components/FormTemplateEditor/sortableIds.d.ts +23 -0
- package/dist/components/FormTemplateEditor/sortableIds.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/sortableIds.js +24 -0
- package/dist/components/FormTemplateEditor/sortableIds.js.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts +33 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.js +59 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDraft.js.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts +9 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.js +66 -0
- package/dist/components/FormTemplateEditor/useFormTemplateDrag.js.map +1 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts +28 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +54 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -0
- package/dist/components/FormTemplateEditor/utils.d.ts +21 -0
- package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/utils.js +24 -0
- package/dist/components/FormTemplateEditor/utils.js.map +1 -0
- package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +1 -1
- package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +6 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +4 -0
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts +11 -0
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.js +28 -19
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.css +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts +3 -0
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.js +123 -123
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.module.js +10 -11
- package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.module.scss +0 -5
- package/dist/components/QueryBuilder/FilterGroupNode.css +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts +4 -0
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.js +85 -51
- package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.module.js +10 -9
- package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.module.scss +9 -0
- package/dist/components/QueryBuilder/QBDragHandle.d.ts +10 -0
- package/dist/components/QueryBuilder/QBDragHandle.d.ts.map +1 -0
- package/dist/components/QueryBuilder/QBDragHandle.js +22 -0
- package/dist/components/QueryBuilder/QBDragHandle.js.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.js +120 -108
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +7 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +2 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.js +25 -21
- package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderDnd.d.ts +27 -0
- package/dist/components/QueryBuilder/queryBuilderDnd.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderDnd.js +41 -0
- package/dist/components/QueryBuilder/queryBuilderDnd.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.module.js +8 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +12 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +16 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderMetadata.js +13 -5
- package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +13 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderOperations.js +39 -36
- package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts +18 -0
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -0
- package/dist/components/QueryBuilder/useQBValueDisplayName.js +64 -0
- package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -0
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +46 -47
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +6 -6
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts +1 -0
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.d.ts.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +13 -11
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
- package/dist/components/SynapseTable/SearchV2.js +4 -4
- package/dist/components/ToastMessage/ToastMessage.d.ts.map +1 -1
- package/dist/components/ToastMessage/ToastMessage.js +25 -22
- package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
- package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts +7 -0
- package/dist/components/dataaccess/FormTemplateEditorRoute.d.ts.map +1 -0
- package/dist/components/dataaccess/FormTemplateEditorRoute.js +26 -0
- package/dist/components/dataaccess/FormTemplateEditorRoute.js.map +1 -0
- package/dist/components/dataaccess/FormTemplateTable.d.ts +10 -0
- package/dist/components/dataaccess/FormTemplateTable.d.ts.map +1 -0
- package/dist/components/dataaccess/FormTemplateTable.js +124 -0
- package/dist/components/dataaccess/FormTemplateTable.js.map +1 -0
- package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
- package/dist/components/dataaccess/ReviewerDashboard.js +80 -50
- package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -0
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +35 -36
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
- package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
- package/dist/components/styled/LeftRightPanel.js +19 -2
- package/dist/components/styled/LeftRightPanel.js.map +1 -1
- package/dist/components/widgets/FileHandleLink.d.ts +12 -2
- package/dist/components/widgets/FileHandleLink.d.ts.map +1 -1
- package/dist/components/widgets/FileHandleLink.js +25 -29
- package/dist/components/widgets/FileHandleLink.js.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +4 -2
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.js +13 -14
- package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +4 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.js +24 -17
- package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +41 -14
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js +53 -44
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/authHandlers.d.ts +1 -0
- package/dist/mocks/msw/handlers/authHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/authHandlers.js +6 -2
- package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/chatHandlers.js +19 -13
- package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts +2 -0
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +52 -46
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.js +25 -21
- package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +2 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.js +18 -18
- package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.d.ts +10 -1
- package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.js +30 -7
- package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.js +24 -18
- package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/tableQueryHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/tableQueryHandlers.js +35 -16
- package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts +8 -0
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js +19 -0
- package/dist/mocks/msw/handlers/twoFactorEnrollmentHandlers.js.map +1 -0
- package/dist/style/abstracts/_cssVariables.scss +13 -0
- package/dist/style/components/_toasts.scss +10 -1
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +9 -3
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +17 -7
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/auth/index.d.ts +1 -0
- package/dist/synapse-queries/auth/index.d.ts.map +1 -1
- package/dist/synapse-queries/auth/index.js +2 -1
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts +11 -0
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.d.ts.map +1 -0
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +19 -0
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -0
- package/dist/synapse-queries/dataaccess/index.d.ts +0 -1
- package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/index.js +3 -4
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts +18 -0
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +33 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/file/useDirectUploadToS3.js +6 -6
- package/dist/synapse-queries/file/useFileHandle.d.ts +8 -0
- package/dist/synapse-queries/file/useFileHandle.d.ts.map +1 -1
- package/dist/synapse-queries/file/useFileHandle.js +15 -6
- package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
- package/dist/synapse-queries/index.js +260 -257
- package/dist/synapse-queries/jsonschema/index.js +2 -2
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +9 -0
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -0
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +22 -0
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -0
- package/dist/synapse-queries/jsonschema/useSchema.d.ts +5 -0
- package/dist/synapse-queries/jsonschema/useSchema.d.ts.map +1 -1
- package/dist/synapse-queries/jsonschema/useSchema.js +9 -1
- package/dist/synapse-queries/jsonschema/useSchema.js.map +1 -1
- package/dist/testutils/vitest.setup.js +18 -9
- package/dist/testutils/vitest.setup.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts +2 -0
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js +2 -2
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/appendFinalQueryParamKey.d.ts.map +1 -1
- package/dist/utils/appendFinalQueryParamKey.js +4 -1
- package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts +2 -0
- package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/functions/ArrayUtils.d.ts +3 -0
- package/dist/utils/functions/ArrayUtils.d.ts.map +1 -1
- package/dist/utils/functions/ArrayUtils.js +7 -1
- package/dist/utils/functions/ArrayUtils.js.map +1 -1
- package/dist/utils/functions/toPascalCase.d.ts +6 -0
- package/dist/utils/functions/toPascalCase.d.ts.map +1 -0
- package/dist/utils/functions/toPascalCase.js +8 -0
- package/dist/utils/functions/toPascalCase.js.map +1 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.d.ts +26 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.d.ts.map +1 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.js +28 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.js.map +1 -0
- package/dist/utils/jsonschema/submissionContext.d.ts +91 -0
- package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -0
- package/dist/utils/jsonschema/submissionContext.js +178 -0
- package/dist/utils/jsonschema/submissionContext.js.map +1 -0
- package/package.json +13 -10
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts +0 -6
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts.map +0 -1
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +0 -32
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +0 -1
- package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts +0 -9
- package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts.map +0 -1
- package/dist/components/entity/page/title_bar/TitleBarProperties.js +0 -24
- package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +0 -1
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts +0 -21
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts.map +0 -1
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js +0 -34
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js.map +0 -1
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column-kind classification and operator availability per kind. The QB uses
|
|
3
|
+
* this both to populate the operator picker dropdown and to decide what shape
|
|
4
|
+
* of value input to render.
|
|
5
|
+
*/
|
|
6
|
+
import { FacetColumnResult, FacetColumnResultValues } from '@sage-bionetworks/synapse-types';
|
|
1
7
|
import { QBConditionOp } from './QueryBuilderTypes';
|
|
8
|
+
/** Narrows a facet result to the enumerated-values variant the QB can render. */
|
|
9
|
+
export declare function isFacetColumnResultValues(facet: FacetColumnResult): facet is FacetColumnResultValues;
|
|
2
10
|
/** Categorization of columns for the QB UI. Not a synapse-types concept. */
|
|
3
11
|
export type QBColumnKind = 'enum' | 'list' | 'range' | 'boolean' | 'text' | 'unknown';
|
|
4
12
|
/**
|
|
@@ -21,4 +29,12 @@ export declare function labelForOp(op: QBConditionOp): string;
|
|
|
21
29
|
* The underlying value stored on the QB condition is unchanged.
|
|
22
30
|
*/
|
|
23
31
|
export declare function labelForFacetValue(value: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Does a facet value match the pill filter query? Matching considers both the
|
|
34
|
+
* user-facing label and the underlying value, so a pill labeled with a
|
|
35
|
+
* resolved entity or user name is still findable by the ID it stores.
|
|
36
|
+
*
|
|
37
|
+
* An empty query matches everything.
|
|
38
|
+
*/
|
|
39
|
+
export declare function facetValueMatchesFilter(value: string, label: string, query: string): boolean;
|
|
24
40
|
//# sourceMappingURL=queryBuilderMetadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilderMetadata.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queryBuilderMetadata.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,iCAAiC,CAAA;AAMxC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,iFAAiF;AACjF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,GACvB,KAAK,IAAI,uBAAuB,CAKlC;AAED,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,MAAM,GACN,SAAS,CAAA;AAEb;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,EAAE,OAAO,GAChB,YAAY,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,EAAE,CAoCvE;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAoCpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAQT"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { FRIENDLY_VALUE_NOT_SET as e } from "../../utils/SynapseConstants.js";
|
|
2
|
+
import { parseSynId as t } from "../../utils/functions/RegularExpressions.js";
|
|
2
3
|
//#region src/components/QueryBuilder/queryBuilderMetadata.ts
|
|
3
|
-
function
|
|
4
|
+
function n(e) {
|
|
5
|
+
return e.concreteType === "org.sagebionetworks.repo.model.table.FacetColumnResultValues";
|
|
6
|
+
}
|
|
7
|
+
function r(e, t) {
|
|
4
8
|
if (e?.endsWith("_LIST")) return "list";
|
|
5
9
|
if (t) return "enum";
|
|
6
10
|
if (e == null) return "unknown";
|
|
@@ -21,7 +25,7 @@ function t(e, t) {
|
|
|
21
25
|
default: return "text";
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
|
-
function
|
|
28
|
+
function i(e) {
|
|
25
29
|
switch (e) {
|
|
26
30
|
case "enum": return [
|
|
27
31
|
"is_any_of",
|
|
@@ -62,7 +66,7 @@ function n(e) {
|
|
|
62
66
|
default: return [];
|
|
63
67
|
}
|
|
64
68
|
}
|
|
65
|
-
function
|
|
69
|
+
function a(e) {
|
|
66
70
|
switch (e) {
|
|
67
71
|
case "is_any_of": return "is any of";
|
|
68
72
|
case "is_all_of": return "is all of";
|
|
@@ -82,10 +86,14 @@ function r(e) {
|
|
|
82
86
|
default: return e;
|
|
83
87
|
}
|
|
84
88
|
}
|
|
85
|
-
function
|
|
89
|
+
function o(t) {
|
|
86
90
|
return t === "org.sagebionetworks.UNDEFINED_NULL_NOTSET" ? e : t;
|
|
87
91
|
}
|
|
92
|
+
function s(e, n, r) {
|
|
93
|
+
let i = r.trim().toLowerCase();
|
|
94
|
+
return i === "" || n.toLowerCase().includes(i) || e.toLowerCase().includes(i) ? !0 : t(i)?.targetId === `syn${e}`;
|
|
95
|
+
}
|
|
88
96
|
//#endregion
|
|
89
|
-
export {
|
|
97
|
+
export { i as availableOpsForKind, r as classifyColumn, s as facetValueMatchesFilter, n as isFacetColumnResultValues, o as labelForFacetValue, a as labelForOp };
|
|
90
98
|
|
|
91
99
|
//# sourceMappingURL=queryBuilderMetadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilderMetadata.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"sourcesContent":["/**\n * Column-kind classification and operator availability per kind. The QB uses\n * this both to populate the operator picker dropdown and to decide what shape\n * of value input to render.\n */\nimport {\n FRIENDLY_VALUE_NOT_SET,\n VALUE_NOT_SET,\n} from '../../utils/SynapseConstants'\nimport { QBConditionOp } from './QueryBuilderTypes'\n\n/** Categorization of columns for the QB UI. Not a synapse-types concept. */\nexport type QBColumnKind =\n | 'enum'\n | 'list'\n | 'range'\n | 'boolean'\n | 'text'\n | 'unknown'\n\n/**\n * Classify a column into a QB kind based on its `ColumnTypeEnum` string and\n * whether the column has a facet in the query result. `hasFacet` distinguishes\n * a faceted single-value column (`enum`) from a plain single-value column\n * (`text`).\n */\nexport function classifyColumn(\n columnType: string | null,\n hasFacet: boolean,\n): QBColumnKind {\n // `_LIST` columns keep the `list` kind so `is_all_of` remains available.\n if (columnType?.endsWith('_LIST')) return 'list'\n // Any faceted column becomes an enum picker regardless of the raw column\n // type (even when the type is unknown, e.g. when the QB tree was hydrated\n // from `selectedFacets` without column-model context).\n if (hasFacet) return 'enum'\n if (columnType == null) return 'unknown'\n switch (columnType) {\n case 'BOOLEAN':\n return 'boolean'\n case 'INTEGER':\n case 'DOUBLE':\n case 'DATE':\n case 'DATE_TIME':\n return 'range'\n case 'STRING':\n case 'LARGETEXT':\n case 'LINK':\n case 'MEDIUMTEXT':\n case 'USERID':\n case 'ENTITYID':\n case 'EVALUATIONID':\n case 'SUBMISSIONID':\n return 'text'\n default:\n return 'text'\n }\n}\n\n/**\n * Ordered list of operators offered for a given column kind. Order controls\n * the operator picker dropdown ordering.\n */\nexport function availableOpsForKind(kind: QBColumnKind): QBConditionOp[] {\n switch (kind) {\n case 'enum':\n return ['is_any_of', 'has_value', 'no_value']\n case 'list':\n return ['is_any_of', 'is_all_of', 'has_value', 'no_value']\n case 'range':\n return [\n 'between',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'equal',\n 'not_equal',\n 'has_value',\n 'no_value',\n ]\n case 'boolean':\n return ['equal', 'has_value', 'no_value']\n case 'text':\n return [\n 'contains',\n 'starts_with',\n 'ends_with',\n 'is_exactly',\n 'has_value',\n 'no_value',\n ]\n case 'unknown':\n // No column picked yet; offer nothing until one is selected.\n return []\n default:\n kind satisfies never\n return []\n }\n}\n\n/** Human-readable label for an operator, shown in the operator picker. */\nexport function labelForOp(op: QBConditionOp): string {\n switch (op) {\n case 'is_any_of':\n return 'is any of'\n case 'is_all_of':\n return 'is all of'\n case 'between':\n return 'between'\n case 'gt':\n return '>'\n case 'gte':\n return '≥'\n case 'lt':\n return '<'\n case 'lte':\n return '≤'\n case 'equal':\n return 'equals'\n case 'not_equal':\n return 'does not equal'\n case 'has_value':\n return 'has value'\n case 'no_value':\n return 'has no value'\n case 'contains':\n return 'contains'\n case 'starts_with':\n return 'starts with'\n case 'ends_with':\n return 'ends with'\n case 'is_exactly':\n return 'is exactly'\n default:\n op satisfies never\n return op\n }\n}\n\n/**\n * Returns the user-facing label for a raw facet value. Backend sentinels like\n * `VALUE_NOT_SET` display as `Not Assigned`; every other value renders as-is.\n * The underlying value stored on the QB condition is unchanged.\n */\nexport function labelForFacetValue(value: string): string {\n return value === VALUE_NOT_SET ? FRIENDLY_VALUE_NOT_SET : value\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"queryBuilderMetadata.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderMetadata.ts"],"sourcesContent":["/**\n * Column-kind classification and operator availability per kind. The QB uses\n * this both to populate the operator picker dropdown and to decide what shape\n * of value input to render.\n */\nimport {\n FacetColumnResult,\n FacetColumnResultValues,\n} from '@sage-bionetworks/synapse-types'\nimport { parseSynId } from '../../utils/functions/RegularExpressions'\nimport {\n FRIENDLY_VALUE_NOT_SET,\n VALUE_NOT_SET,\n} from '../../utils/SynapseConstants'\nimport { QBConditionOp } from './QueryBuilderTypes'\n\n/** Narrows a facet result to the enumerated-values variant the QB can render. */\nexport function isFacetColumnResultValues(\n facet: FacetColumnResult,\n): facet is FacetColumnResultValues {\n return (\n facet.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnResultValues'\n )\n}\n\n/** Categorization of columns for the QB UI. Not a synapse-types concept. */\nexport type QBColumnKind =\n | 'enum'\n | 'list'\n | 'range'\n | 'boolean'\n | 'text'\n | 'unknown'\n\n/**\n * Classify a column into a QB kind based on its `ColumnTypeEnum` string and\n * whether the column has a facet in the query result. `hasFacet` distinguishes\n * a faceted single-value column (`enum`) from a plain single-value column\n * (`text`).\n */\nexport function classifyColumn(\n columnType: string | null,\n hasFacet: boolean,\n): QBColumnKind {\n // `_LIST` columns keep the `list` kind so `is_all_of` remains available.\n if (columnType?.endsWith('_LIST')) return 'list'\n // Any faceted column becomes an enum picker regardless of the raw column\n // type (even when the type is unknown, e.g. when the QB tree was hydrated\n // from `selectedFacets` without column-model context).\n if (hasFacet) return 'enum'\n if (columnType == null) return 'unknown'\n switch (columnType) {\n case 'BOOLEAN':\n return 'boolean'\n case 'INTEGER':\n case 'DOUBLE':\n case 'DATE':\n case 'DATE_TIME':\n return 'range'\n case 'STRING':\n case 'LARGETEXT':\n case 'LINK':\n case 'MEDIUMTEXT':\n case 'USERID':\n case 'ENTITYID':\n case 'EVALUATIONID':\n case 'SUBMISSIONID':\n return 'text'\n default:\n return 'text'\n }\n}\n\n/**\n * Ordered list of operators offered for a given column kind. Order controls\n * the operator picker dropdown ordering.\n */\nexport function availableOpsForKind(kind: QBColumnKind): QBConditionOp[] {\n switch (kind) {\n case 'enum':\n return ['is_any_of', 'has_value', 'no_value']\n case 'list':\n return ['is_any_of', 'is_all_of', 'has_value', 'no_value']\n case 'range':\n return [\n 'between',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'equal',\n 'not_equal',\n 'has_value',\n 'no_value',\n ]\n case 'boolean':\n return ['equal', 'has_value', 'no_value']\n case 'text':\n return [\n 'contains',\n 'starts_with',\n 'ends_with',\n 'is_exactly',\n 'has_value',\n 'no_value',\n ]\n case 'unknown':\n // No column picked yet; offer nothing until one is selected.\n return []\n default:\n kind satisfies never\n return []\n }\n}\n\n/** Human-readable label for an operator, shown in the operator picker. */\nexport function labelForOp(op: QBConditionOp): string {\n switch (op) {\n case 'is_any_of':\n return 'is any of'\n case 'is_all_of':\n return 'is all of'\n case 'between':\n return 'between'\n case 'gt':\n return '>'\n case 'gte':\n return '≥'\n case 'lt':\n return '<'\n case 'lte':\n return '≤'\n case 'equal':\n return 'equals'\n case 'not_equal':\n return 'does not equal'\n case 'has_value':\n return 'has value'\n case 'no_value':\n return 'has no value'\n case 'contains':\n return 'contains'\n case 'starts_with':\n return 'starts with'\n case 'ends_with':\n return 'ends with'\n case 'is_exactly':\n return 'is exactly'\n default:\n op satisfies never\n return op\n }\n}\n\n/**\n * Returns the user-facing label for a raw facet value. Backend sentinels like\n * `VALUE_NOT_SET` display as `Not Assigned`; every other value renders as-is.\n * The underlying value stored on the QB condition is unchanged.\n */\nexport function labelForFacetValue(value: string): string {\n return value === VALUE_NOT_SET ? FRIENDLY_VALUE_NOT_SET : value\n}\n\n/**\n * Does a facet value match the pill filter query? Matching considers both the\n * user-facing label and the underlying value, so a pill labeled with a\n * resolved entity or user name is still findable by the ID it stores.\n *\n * An empty query matches everything.\n */\nexport function facetValueMatchesFilter(\n value: string,\n label: string,\n query: string,\n): boolean {\n const normalizedQuery = query.trim().toLowerCase()\n if (normalizedQuery === '') return true\n if (label.toLowerCase().includes(normalizedQuery)) return true\n if (value.toLowerCase().includes(normalizedQuery)) return true\n // An entity ID pasted from elsewhere in Synapse carries a `syn` prefix (and\n // possibly a version suffix) that an ENTITYID column's stored value doesn't.\n return parseSynId(normalizedQuery)?.targetId === `syn${value}`\n}\n"],"mappings":";;;AAiBA,SAAgB,EACd,GACkC;CAClC,OACE,EAAM,iBACN;AAEJ;AAiBA,SAAgB,EACd,GACA,GACc;CAEd,IAAI,GAAY,SAAS,OAAO,GAAG,OAAO;CAI1C,IAAI,GAAU,OAAO;CACrB,IAAI,KAAc,MAAM,OAAO;CAC/B,QAAQ,GAAR;EACE,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,gBACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAMA,SAAgB,EAAoB,GAAqC;CACvE,QAAQ,GAAR;EACE,KAAK,QACH,OAAO;GAAC;GAAa;GAAa;EAAU;EAC9C,KAAK,QACH,OAAO;GAAC;GAAa;GAAa;GAAa;EAAU;EAC3D,KAAK,SACH,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACF,KAAK,WACH,OAAO;GAAC;GAAS;GAAa;EAAU;EAC1C,KAAK,QACH,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;EACF;EACF,KAAK,WAEH,OAAO,CAAC;EACV,SAEE,OAAO,CAAC;CACZ;AACF;AAGA,SAAgB,EAAW,GAA2B;CACpD,QAAQ,GAAR;EACE,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,SAEE,OAAO;CACX;AACF;AAOA,SAAgB,EAAmB,GAAuB;CACxD,OAAO,MAAA,8CAA0B,IAAyB;AAC5D;AASA,SAAgB,EACd,GACA,GACA,GACS;CACT,IAAM,IAAkB,EAAM,KAAK,EAAE,YAAY;CAMjD,OALI,MAAoB,MACpB,EAAM,YAAY,EAAE,SAAS,CAAe,KAC5C,EAAM,YAAY,EAAE,SAAS,CAAe,IAAU,KAGnD,EAAW,CAAe,GAAG,aAAa,MAAM;AACzD"}
|
|
@@ -45,6 +45,19 @@ export declare function removeNode(root: QBGroup, nodeId: string): QBGroup;
|
|
|
45
45
|
* - The move is a no-op (target group + index equals current group + index).
|
|
46
46
|
*/
|
|
47
47
|
export declare function moveNode(root: QBGroup, nodeId: string, targetGroupId: string, targetIndex: number): QBGroup;
|
|
48
|
+
/**
|
|
49
|
+
* Move the node identified by `nodeId` to the front of the group identified
|
|
50
|
+
* by `groupId`.
|
|
51
|
+
*
|
|
52
|
+
* This is the operation behind drag-and-drop: only groups are drop targets,
|
|
53
|
+
* so every drag resolves to "put this node in that group". The node always
|
|
54
|
+
* lands first, matching where `addConditionToGroup` puts a new row — within
|
|
55
|
+
* an AND/OR group the order carries no meaning, so there is nothing for a
|
|
56
|
+
* drop position to express. Enforces the same invariants as `moveNode`, and
|
|
57
|
+
* additionally returns the tree unchanged when `groupId` names something that
|
|
58
|
+
* is not a group.
|
|
59
|
+
*/
|
|
60
|
+
export declare function moveNodeIntoGroup(root: QBGroup, nodeId: string, groupId: string): QBGroup;
|
|
48
61
|
/**
|
|
49
62
|
* Find every node in the tree matching a predicate. Root is included.
|
|
50
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilderOperations.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderOperations.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,MAAM,EACP,MAAM,qBAAqB,CAAA;AAM5B;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,aAAa,CAgBf;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,WAAW,CAYb;AAED,wBAAgB,aAAa,CAAC,UAAU,GAAE,YAAoB,GAAG,OAAO,CAQvE;AAED,iFAAiF;AACjF,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAMD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAGT;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAUT;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjE;AAMD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAC/C,OAAO,CAIT;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,GACxD,OAAO,CAET;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQjE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAiCT;AAMD;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACnC,MAAM,EAAE,CAQV;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAI3D"}
|
|
1
|
+
{"version":3,"file":"queryBuilderOperations.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/queryBuilderOperations.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,OAAO,EACP,MAAM,EACP,MAAM,qBAAqB,CAAA;AAM5B;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,aAAa,CAgBf;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,WAAW,CAYb;AAED,wBAAgB,aAAa,CAAC,UAAU,GAAE,YAAoB,GAAG,OAAO,CAQvE;AAED,iFAAiF;AACjF,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAMD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAGT;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAUT;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjE;AAMD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAC/C,OAAO,CAIT;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,GACxD,OAAO,CAET;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQjE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAiCT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAGT;AAMD;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACnC,MAAM,EAAE,CAQV;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAI3D"}
|
|
@@ -42,14 +42,14 @@ function a() {
|
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
44
|
function o(e, t, n, i) {
|
|
45
|
-
return
|
|
45
|
+
return y(e, t, r(n, i));
|
|
46
46
|
}
|
|
47
47
|
function s(e, t) {
|
|
48
|
-
return
|
|
48
|
+
return y(e, t, i());
|
|
49
49
|
}
|
|
50
50
|
function c(e, t, n, r) {
|
|
51
|
-
return
|
|
52
|
-
let t =
|
|
51
|
+
return b(e, t, (e) => {
|
|
52
|
+
let t = T(e.children.length, n), i = [
|
|
53
53
|
...e.children.slice(0, t),
|
|
54
54
|
r,
|
|
55
55
|
...e.children.slice(t)
|
|
@@ -61,53 +61,56 @@ function c(e, t, n, r) {
|
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
function l(e, t) {
|
|
64
|
-
return
|
|
64
|
+
return b(e, t, (e) => ({
|
|
65
65
|
...e,
|
|
66
66
|
children: []
|
|
67
67
|
}));
|
|
68
68
|
}
|
|
69
69
|
function u(e, t, n) {
|
|
70
|
-
return
|
|
70
|
+
return x(e, t, (e) => e.kind === "condition" ? {
|
|
71
71
|
...e,
|
|
72
72
|
...n
|
|
73
73
|
} : e);
|
|
74
74
|
}
|
|
75
75
|
function d(e, t, n) {
|
|
76
|
-
return
|
|
76
|
+
return b(e, t, (e) => ({
|
|
77
77
|
...e,
|
|
78
78
|
...n
|
|
79
79
|
}));
|
|
80
80
|
}
|
|
81
81
|
function f(e, t) {
|
|
82
82
|
if (e.id === t) return e;
|
|
83
|
-
let n =
|
|
84
|
-
return n == null ? e :
|
|
83
|
+
let n = S(e, t);
|
|
84
|
+
return n == null ? e : b(e, n.parentId, (e) => ({
|
|
85
85
|
...e,
|
|
86
86
|
children: e.children.filter((e) => e.id !== t)
|
|
87
87
|
}));
|
|
88
88
|
}
|
|
89
89
|
function p(e, t, n, r) {
|
|
90
90
|
if (t === e.id || t === n) return e;
|
|
91
|
-
let i =
|
|
91
|
+
let i = S(e, t);
|
|
92
92
|
if (i == null) return e;
|
|
93
|
-
let a =
|
|
94
|
-
if (a == null || i.node.kind === "group" &&
|
|
95
|
-
let o = i.parentId === n, s =
|
|
96
|
-
return o && s === i.index ? e : c(
|
|
93
|
+
let a = C(e, n);
|
|
94
|
+
if (a == null || i.node.kind === "group" && w(i.node, n)) return e;
|
|
95
|
+
let o = i.parentId === n, s = T(o ? a.children.length - 1 : a.children.length, r);
|
|
96
|
+
return o && s === i.index ? e : c(b(e, i.parentId, (e) => ({
|
|
97
97
|
...e,
|
|
98
98
|
children: e.children.filter((e) => e.id !== t)
|
|
99
99
|
})), n, s, i.node);
|
|
100
100
|
}
|
|
101
|
-
function m(e, n) {
|
|
101
|
+
function m(e, t, n) {
|
|
102
|
+
return C(e, n) == null ? e : p(e, t, n, 0);
|
|
103
|
+
}
|
|
104
|
+
function h(e, n) {
|
|
102
105
|
let r = [], i = (e) => {
|
|
103
106
|
n(e) && r.push(e), t(e) && e.children.forEach(i);
|
|
104
107
|
};
|
|
105
108
|
return i(e), r;
|
|
106
109
|
}
|
|
107
|
-
function h(e) {
|
|
108
|
-
return m(e, (e) => e.kind === "condition").some((e) => g(e));
|
|
109
|
-
}
|
|
110
110
|
function g(e) {
|
|
111
|
+
return h(e, (e) => e.kind === "condition").some((e) => _(e));
|
|
112
|
+
}
|
|
113
|
+
function _(e) {
|
|
111
114
|
if (e.columnName == null) return !1;
|
|
112
115
|
switch (e.op) {
|
|
113
116
|
case "has_value":
|
|
@@ -116,31 +119,31 @@ function g(e) {
|
|
|
116
119
|
case "is_all_of":
|
|
117
120
|
case "equal":
|
|
118
121
|
case "not_equal": return e.values.length > 0;
|
|
119
|
-
case "between": return !
|
|
122
|
+
case "between": return !v(e.rangeMin) && !v(e.rangeMax);
|
|
120
123
|
case "gt":
|
|
121
|
-
case "gte": return !
|
|
124
|
+
case "gte": return !v(e.rangeMin);
|
|
122
125
|
case "lt":
|
|
123
|
-
case "lte": return !
|
|
126
|
+
case "lte": return !v(e.rangeMax);
|
|
124
127
|
case "contains":
|
|
125
128
|
case "starts_with":
|
|
126
129
|
case "ends_with":
|
|
127
|
-
case "is_exactly": return !
|
|
130
|
+
case "is_exactly": return !v(e.text);
|
|
128
131
|
default: return e.op, !1;
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
|
-
function
|
|
134
|
+
function v(e) {
|
|
132
135
|
return e == null || e === "";
|
|
133
136
|
}
|
|
134
|
-
function
|
|
135
|
-
return
|
|
137
|
+
function y(e, t, n) {
|
|
138
|
+
return b(e, t, (e) => ({
|
|
136
139
|
...e,
|
|
137
140
|
children: [n, ...e.children]
|
|
138
141
|
}));
|
|
139
142
|
}
|
|
140
|
-
function
|
|
141
|
-
return
|
|
143
|
+
function b(e, t, n) {
|
|
144
|
+
return x(e, t, (e) => e.kind === "group" ? n(e) : e);
|
|
142
145
|
}
|
|
143
|
-
function
|
|
146
|
+
function x(e, n, r) {
|
|
144
147
|
if (e.id === n) {
|
|
145
148
|
let n = r(e);
|
|
146
149
|
return t(n) ? n : e;
|
|
@@ -151,7 +154,7 @@ function b(e, n, r) {
|
|
|
151
154
|
return t !== e && (i = !0), t;
|
|
152
155
|
}
|
|
153
156
|
if (t(e)) {
|
|
154
|
-
let t =
|
|
157
|
+
let t = x(e, n, r);
|
|
155
158
|
return t !== e && (i = !0), t;
|
|
156
159
|
}
|
|
157
160
|
return e;
|
|
@@ -161,7 +164,7 @@ function b(e, n, r) {
|
|
|
161
164
|
children: a
|
|
162
165
|
} : e;
|
|
163
166
|
}
|
|
164
|
-
function
|
|
167
|
+
function S(e, n) {
|
|
165
168
|
let r = (e) => {
|
|
166
169
|
for (let i = 0; i < e.children.length; i++) {
|
|
167
170
|
let a = e.children[i];
|
|
@@ -179,22 +182,22 @@ function x(e, n) {
|
|
|
179
182
|
};
|
|
180
183
|
return r(e);
|
|
181
184
|
}
|
|
182
|
-
function
|
|
185
|
+
function C(e, n) {
|
|
183
186
|
if (e.id === n) return e;
|
|
184
187
|
for (let r of e.children) if (t(r)) {
|
|
185
|
-
let e =
|
|
188
|
+
let e = C(r, n);
|
|
186
189
|
if (e) return e;
|
|
187
190
|
}
|
|
188
191
|
return null;
|
|
189
192
|
}
|
|
190
|
-
function
|
|
191
|
-
for (let r of e.children) if (r.id === n || t(r) &&
|
|
193
|
+
function w(e, n) {
|
|
194
|
+
for (let r of e.children) if (r.id === n || t(r) && w(r, n)) return !0;
|
|
192
195
|
return !1;
|
|
193
196
|
}
|
|
194
|
-
function
|
|
197
|
+
function T(e, t) {
|
|
195
198
|
return !Number.isFinite(t) || t < 0 ? 0 : Math.min(e, Math.trunc(t));
|
|
196
199
|
}
|
|
197
200
|
//#endregion
|
|
198
|
-
export { s as addChildGroup, o as addConditionToGroup, l as clearGroup, n as defaultOpForColumnType, a as defaultQBGroup,
|
|
201
|
+
export { s as addChildGroup, o as addConditionToGroup, l as clearGroup, n as defaultOpForColumnType, a as defaultQBGroup, h as findNodes, g as hasCompleteCondition, c as insertNodeAt, p as moveNode, m as moveNodeIntoGroup, r as newBlankCondition, i as newEmptyGroup, f as removeNode, u as updateCondition, d as updateGroup };
|
|
199
202
|
|
|
200
203
|
//# sourceMappingURL=queryBuilderOperations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryBuilderOperations.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderOperations.ts"],"sourcesContent":["import { newQBNodeId } from './queryBuilderId'\nimport {\n isQBGroup,\n QBCombinator,\n QBCondition,\n QBConditionOp,\n QBGroup,\n QBNode,\n} from './QueryBuilderTypes'\n\n// -----------------------------------------------------------------------------\n// Factories\n// -----------------------------------------------------------------------------\n\n/**\n * The initial `op` for a brand-new condition. When the user hasn't picked a\n * column yet the choice is arbitrary — the row's operator picker replaces it\n * as soon as the column is chosen — but we still need a valid discriminant\n * so the UI can render. `is_any_of` renders as a pill-based value input, which\n * degrades gracefully for a blank row.\n */\nexport function defaultOpForColumnType(\n columnType: string | null,\n): QBConditionOp {\n if (columnType == null) return 'is_any_of'\n if (columnType.endsWith('_LIST')) return 'is_any_of'\n switch (columnType) {\n case 'INTEGER':\n case 'DOUBLE':\n case 'DATE':\n case 'DATE_TIME':\n return 'between'\n case 'BOOLEAN':\n return 'equal'\n case 'STRING':\n return 'contains'\n default:\n return 'is_any_of'\n }\n}\n\nexport function newBlankCondition(\n columnName: string | null,\n columnType: string | null,\n): QBCondition {\n return {\n kind: 'condition',\n id: newQBNodeId(),\n columnName,\n columnType,\n op: defaultOpForColumnType(columnType),\n values: [],\n rangeMin: null,\n rangeMax: null,\n text: null,\n }\n}\n\nexport function newEmptyGroup(combinator: QBCombinator = 'AND'): QBGroup {\n return {\n kind: 'group',\n id: newQBNodeId(),\n combinator,\n not: false,\n children: [],\n }\n}\n\n/** Root group with a single blank condition — the QB's default startup state. */\nexport function defaultQBGroup(): QBGroup {\n const root = newEmptyGroup()\n return { ...root, children: [newBlankCondition(null, null)] }\n}\n\n// -----------------------------------------------------------------------------\n// Add / clear\n// -----------------------------------------------------------------------------\n\nexport function addConditionToGroup(\n root: QBGroup,\n targetGroupId: string,\n columnName: string | null,\n columnType: string | null,\n): QBGroup {\n const condition = newBlankCondition(columnName, columnType)\n return prependChild(root, targetGroupId, condition)\n}\n\nexport function addChildGroup(root: QBGroup, targetGroupId: string): QBGroup {\n return prependChild(root, targetGroupId, newEmptyGroup())\n}\n\n/**\n * Insert `node` into the group identified by `targetGroupId` at\n * `targetIndex`. Semantics match `Array.prototype.splice(targetIndex, 0, node)`.\n * If the group can't be found, returns the tree unchanged.\n */\nexport function insertNodeAt(\n root: QBGroup,\n targetGroupId: string,\n targetIndex: number,\n node: QBNode,\n): QBGroup {\n return mapGroup(root, targetGroupId, group => {\n const clamped = clampInsertionIndex(group.children.length, targetIndex)\n const nextChildren = [\n ...group.children.slice(0, clamped),\n node,\n ...group.children.slice(clamped),\n ]\n return { ...group, children: nextChildren }\n })\n}\n\n/**\n * Empty the children of the group identified by `nodeId`. If the id doesn't\n * match any group, returns the tree unchanged.\n */\nexport function clearGroup(root: QBGroup, nodeId: string): QBGroup {\n return mapGroup(root, nodeId, group => ({ ...group, children: [] }))\n}\n\n// -----------------------------------------------------------------------------\n// Update\n// -----------------------------------------------------------------------------\n\nexport function updateCondition(\n root: QBGroup,\n nodeId: string,\n patch: Partial<Omit<QBCondition, 'kind' | 'id'>>,\n): QBGroup {\n return mapNode(root, nodeId, node =>\n node.kind === 'condition' ? { ...node, ...patch } : node,\n )\n}\n\nexport function updateGroup(\n root: QBGroup,\n nodeId: string,\n patch: Partial<Omit<QBGroup, 'kind' | 'id' | 'children'>>,\n): QBGroup {\n return mapGroup(root, nodeId, group => ({ ...group, ...patch }))\n}\n\n// -----------------------------------------------------------------------------\n// Remove\n// -----------------------------------------------------------------------------\n\n/**\n * Remove the node identified by `nodeId` from the tree. The root cannot be\n * removed — a request to remove the root returns the tree unchanged.\n */\nexport function removeNode(root: QBGroup, nodeId: string): QBGroup {\n if (root.id === nodeId) return root\n const location = findLocation(root, nodeId)\n if (location == null) return root\n return mapGroup(root, location.parentId, group => ({\n ...group,\n children: group.children.filter(child => child.id !== nodeId),\n }))\n}\n\n// -----------------------------------------------------------------------------\n// Move (DnD)\n// -----------------------------------------------------------------------------\n\n/**\n * Move the node identified by `nodeId` to `targetIndex` of the group\n * identified by `targetGroupId`. `targetIndex` is the insertion index in the\n * target group's children *after* the node has been removed from its current\n * position — same semantics as `Array.prototype.splice(targetIndex, 0, node)`.\n *\n * Returns the tree unchanged if any of the following invariants would be\n * violated:\n * - `nodeId` is the root (root cannot be moved).\n * - `targetGroupId` is `nodeId` (a node can't be dropped into itself).\n * - `targetGroupId` is a descendant of `nodeId` (would create a cycle).\n * - The move is a no-op (target group + index equals current group + index).\n */\nexport function moveNode(\n root: QBGroup,\n nodeId: string,\n targetGroupId: string,\n targetIndex: number,\n): QBGroup {\n if (nodeId === root.id) return root\n if (nodeId === targetGroupId) return root\n\n const source = findLocation(root, nodeId)\n if (source == null) return root\n\n const targetGroup = findGroup(root, targetGroupId)\n if (targetGroup == null) return root\n\n if (\n source.node.kind === 'group' &&\n containsDescendant(source.node, targetGroupId)\n ) {\n return root\n }\n\n const isSameParent = source.parentId === targetGroupId\n const clampedTarget = clampInsertionIndex(\n // When moving within the same parent, the effective target-array length\n // after the node is removed is one shorter.\n isSameParent\n ? targetGroup.children.length - 1\n : targetGroup.children.length,\n targetIndex,\n )\n if (isSameParent && clampedTarget === source.index) return root\n\n const withoutSource = mapGroup(root, source.parentId, group => ({\n ...group,\n children: group.children.filter(child => child.id !== nodeId),\n }))\n return insertNodeAt(withoutSource, targetGroupId, clampedTarget, source.node)\n}\n\n// -----------------------------------------------------------------------------\n// Query helpers\n// -----------------------------------------------------------------------------\n\n/**\n * Find every node in the tree matching a predicate. Root is included.\n */\nexport function findNodes(\n root: QBGroup,\n predicate: (node: QBNode) => boolean,\n): QBNode[] {\n const acc: QBNode[] = []\n const visit = (node: QBNode) => {\n if (predicate(node)) acc.push(node)\n if (isQBGroup(node)) node.children.forEach(visit)\n }\n visit(root)\n return acc\n}\n\n/**\n * Whether `root` (or any descendant) contains a condition with a resolvable,\n * complete filter — matches the design's \"at least one complete condition\"\n * requirement for `hasResettableFilters`.\n */\nexport function hasCompleteCondition(root: QBGroup): boolean {\n return findNodes(root, node => node.kind === 'condition').some(condition =>\n isConditionComplete(condition as QBCondition),\n )\n}\n\nfunction isConditionComplete(condition: QBCondition): boolean {\n if (condition.columnName == null) return false\n switch (condition.op) {\n case 'has_value':\n case 'no_value':\n return true\n case 'is_any_of':\n case 'is_all_of':\n case 'equal':\n case 'not_equal':\n return condition.values.length > 0\n case 'between':\n return !isBlank(condition.rangeMin) && !isBlank(condition.rangeMax)\n case 'gt':\n case 'gte':\n return !isBlank(condition.rangeMin)\n case 'lt':\n case 'lte':\n return !isBlank(condition.rangeMax)\n case 'contains':\n case 'starts_with':\n case 'ends_with':\n case 'is_exactly':\n return !isBlank(condition.text)\n default:\n condition.op satisfies never\n return false\n }\n}\n\nfunction isBlank(value: string | null | undefined): boolean {\n return value == null || value === ''\n}\n\n// -----------------------------------------------------------------------------\n// Internal traversal helpers\n// -----------------------------------------------------------------------------\n\nfunction prependChild(root: QBGroup, groupId: string, node: QBNode): QBGroup {\n return mapGroup(root, groupId, group => ({\n ...group,\n children: [node, ...group.children],\n }))\n}\n\n/**\n * Replace the group identified by `targetId` with `transform(group)`. If the\n * id is not found, returns the tree unchanged (by reference).\n */\nfunction mapGroup(\n root: QBGroup,\n targetId: string,\n transform: (group: QBGroup) => QBGroup,\n): QBGroup {\n return mapNode(root, targetId, node =>\n node.kind === 'group' ? transform(node) : node,\n )\n}\n\n/**\n * Replace the node identified by `targetId` with `transform(node)`. If the id\n * matches root, the transformed root is returned. Structural sharing: only\n * the ancestor chain of the changed node is rebuilt; unaffected subtrees are\n * kept by reference.\n */\nfunction mapNode(\n root: QBGroup,\n targetId: string,\n transform: (node: QBNode) => QBNode,\n): QBGroup {\n if (root.id === targetId) {\n const next = transform(root)\n return isQBGroup(next) ? next : root\n }\n let changed = false\n const nextChildren = root.children.map(child => {\n if (child.id === targetId) {\n const replaced = transform(child)\n if (replaced !== child) changed = true\n return replaced\n }\n if (isQBGroup(child)) {\n const replaced = mapNode(child, targetId, transform)\n if (replaced !== child) changed = true\n return replaced\n }\n return child\n })\n return changed ? { ...root, children: nextChildren } : root\n}\n\ntype QBNodeLocation = {\n node: QBNode\n parentId: string\n index: number\n}\n\nfunction findLocation(root: QBGroup, targetId: string): QBNodeLocation | null {\n const visit = (group: QBGroup): QBNodeLocation | null => {\n for (let index = 0; index < group.children.length; index++) {\n const child = group.children[index]\n if (child.id === targetId) {\n return { node: child, parentId: group.id, index }\n }\n if (isQBGroup(child)) {\n const nested = visit(child)\n if (nested) return nested\n }\n }\n return null\n }\n return visit(root)\n}\n\nfunction findGroup(root: QBGroup, targetId: string): QBGroup | null {\n if (root.id === targetId) return root\n for (const child of root.children) {\n if (isQBGroup(child)) {\n const nested = findGroup(child, targetId)\n if (nested) return nested\n }\n }\n return null\n}\n\nfunction containsDescendant(group: QBGroup, targetId: string): boolean {\n for (const child of group.children) {\n if (child.id === targetId) return true\n if (isQBGroup(child) && containsDescendant(child, targetId)) return true\n }\n return false\n}\n\nfunction clampInsertionIndex(length: number, index: number): number {\n if (!Number.isFinite(index) || index < 0) return 0\n return Math.min(length, Math.trunc(index))\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queryBuilderOperations.js","names":[],"sources":["../../../src/components/QueryBuilder/queryBuilderOperations.ts"],"sourcesContent":["import { newQBNodeId } from './queryBuilderId'\nimport {\n isQBGroup,\n QBCombinator,\n QBCondition,\n QBConditionOp,\n QBGroup,\n QBNode,\n} from './QueryBuilderTypes'\n\n// -----------------------------------------------------------------------------\n// Factories\n// -----------------------------------------------------------------------------\n\n/**\n * The initial `op` for a brand-new condition. When the user hasn't picked a\n * column yet the choice is arbitrary — the row's operator picker replaces it\n * as soon as the column is chosen — but we still need a valid discriminant\n * so the UI can render. `is_any_of` renders as a pill-based value input, which\n * degrades gracefully for a blank row.\n */\nexport function defaultOpForColumnType(\n columnType: string | null,\n): QBConditionOp {\n if (columnType == null) return 'is_any_of'\n if (columnType.endsWith('_LIST')) return 'is_any_of'\n switch (columnType) {\n case 'INTEGER':\n case 'DOUBLE':\n case 'DATE':\n case 'DATE_TIME':\n return 'between'\n case 'BOOLEAN':\n return 'equal'\n case 'STRING':\n return 'contains'\n default:\n return 'is_any_of'\n }\n}\n\nexport function newBlankCondition(\n columnName: string | null,\n columnType: string | null,\n): QBCondition {\n return {\n kind: 'condition',\n id: newQBNodeId(),\n columnName,\n columnType,\n op: defaultOpForColumnType(columnType),\n values: [],\n rangeMin: null,\n rangeMax: null,\n text: null,\n }\n}\n\nexport function newEmptyGroup(combinator: QBCombinator = 'AND'): QBGroup {\n return {\n kind: 'group',\n id: newQBNodeId(),\n combinator,\n not: false,\n children: [],\n }\n}\n\n/** Root group with a single blank condition — the QB's default startup state. */\nexport function defaultQBGroup(): QBGroup {\n const root = newEmptyGroup()\n return { ...root, children: [newBlankCondition(null, null)] }\n}\n\n// -----------------------------------------------------------------------------\n// Add / clear\n// -----------------------------------------------------------------------------\n\nexport function addConditionToGroup(\n root: QBGroup,\n targetGroupId: string,\n columnName: string | null,\n columnType: string | null,\n): QBGroup {\n const condition = newBlankCondition(columnName, columnType)\n return prependChild(root, targetGroupId, condition)\n}\n\nexport function addChildGroup(root: QBGroup, targetGroupId: string): QBGroup {\n return prependChild(root, targetGroupId, newEmptyGroup())\n}\n\n/**\n * Insert `node` into the group identified by `targetGroupId` at\n * `targetIndex`. Semantics match `Array.prototype.splice(targetIndex, 0, node)`.\n * If the group can't be found, returns the tree unchanged.\n */\nexport function insertNodeAt(\n root: QBGroup,\n targetGroupId: string,\n targetIndex: number,\n node: QBNode,\n): QBGroup {\n return mapGroup(root, targetGroupId, group => {\n const clamped = clampInsertionIndex(group.children.length, targetIndex)\n const nextChildren = [\n ...group.children.slice(0, clamped),\n node,\n ...group.children.slice(clamped),\n ]\n return { ...group, children: nextChildren }\n })\n}\n\n/**\n * Empty the children of the group identified by `nodeId`. If the id doesn't\n * match any group, returns the tree unchanged.\n */\nexport function clearGroup(root: QBGroup, nodeId: string): QBGroup {\n return mapGroup(root, nodeId, group => ({ ...group, children: [] }))\n}\n\n// -----------------------------------------------------------------------------\n// Update\n// -----------------------------------------------------------------------------\n\nexport function updateCondition(\n root: QBGroup,\n nodeId: string,\n patch: Partial<Omit<QBCondition, 'kind' | 'id'>>,\n): QBGroup {\n return mapNode(root, nodeId, node =>\n node.kind === 'condition' ? { ...node, ...patch } : node,\n )\n}\n\nexport function updateGroup(\n root: QBGroup,\n nodeId: string,\n patch: Partial<Omit<QBGroup, 'kind' | 'id' | 'children'>>,\n): QBGroup {\n return mapGroup(root, nodeId, group => ({ ...group, ...patch }))\n}\n\n// -----------------------------------------------------------------------------\n// Remove\n// -----------------------------------------------------------------------------\n\n/**\n * Remove the node identified by `nodeId` from the tree. The root cannot be\n * removed — a request to remove the root returns the tree unchanged.\n */\nexport function removeNode(root: QBGroup, nodeId: string): QBGroup {\n if (root.id === nodeId) return root\n const location = findLocation(root, nodeId)\n if (location == null) return root\n return mapGroup(root, location.parentId, group => ({\n ...group,\n children: group.children.filter(child => child.id !== nodeId),\n }))\n}\n\n// -----------------------------------------------------------------------------\n// Move (DnD)\n// -----------------------------------------------------------------------------\n\n/**\n * Move the node identified by `nodeId` to `targetIndex` of the group\n * identified by `targetGroupId`. `targetIndex` is the insertion index in the\n * target group's children *after* the node has been removed from its current\n * position — same semantics as `Array.prototype.splice(targetIndex, 0, node)`.\n *\n * Returns the tree unchanged if any of the following invariants would be\n * violated:\n * - `nodeId` is the root (root cannot be moved).\n * - `targetGroupId` is `nodeId` (a node can't be dropped into itself).\n * - `targetGroupId` is a descendant of `nodeId` (would create a cycle).\n * - The move is a no-op (target group + index equals current group + index).\n */\nexport function moveNode(\n root: QBGroup,\n nodeId: string,\n targetGroupId: string,\n targetIndex: number,\n): QBGroup {\n if (nodeId === root.id) return root\n if (nodeId === targetGroupId) return root\n\n const source = findLocation(root, nodeId)\n if (source == null) return root\n\n const targetGroup = findGroup(root, targetGroupId)\n if (targetGroup == null) return root\n\n if (\n source.node.kind === 'group' &&\n containsDescendant(source.node, targetGroupId)\n ) {\n return root\n }\n\n const isSameParent = source.parentId === targetGroupId\n const clampedTarget = clampInsertionIndex(\n // When moving within the same parent, the effective target-array length\n // after the node is removed is one shorter.\n isSameParent\n ? targetGroup.children.length - 1\n : targetGroup.children.length,\n targetIndex,\n )\n if (isSameParent && clampedTarget === source.index) return root\n\n const withoutSource = mapGroup(root, source.parentId, group => ({\n ...group,\n children: group.children.filter(child => child.id !== nodeId),\n }))\n return insertNodeAt(withoutSource, targetGroupId, clampedTarget, source.node)\n}\n\n/**\n * Move the node identified by `nodeId` to the front of the group identified\n * by `groupId`.\n *\n * This is the operation behind drag-and-drop: only groups are drop targets,\n * so every drag resolves to \"put this node in that group\". The node always\n * lands first, matching where `addConditionToGroup` puts a new row — within\n * an AND/OR group the order carries no meaning, so there is nothing for a\n * drop position to express. Enforces the same invariants as `moveNode`, and\n * additionally returns the tree unchanged when `groupId` names something that\n * is not a group.\n */\nexport function moveNodeIntoGroup(\n root: QBGroup,\n nodeId: string,\n groupId: string,\n): QBGroup {\n if (findGroup(root, groupId) == null) return root\n return moveNode(root, nodeId, groupId, 0)\n}\n\n// -----------------------------------------------------------------------------\n// Query helpers\n// -----------------------------------------------------------------------------\n\n/**\n * Find every node in the tree matching a predicate. Root is included.\n */\nexport function findNodes(\n root: QBGroup,\n predicate: (node: QBNode) => boolean,\n): QBNode[] {\n const acc: QBNode[] = []\n const visit = (node: QBNode) => {\n if (predicate(node)) acc.push(node)\n if (isQBGroup(node)) node.children.forEach(visit)\n }\n visit(root)\n return acc\n}\n\n/**\n * Whether `root` (or any descendant) contains a condition with a resolvable,\n * complete filter — matches the design's \"at least one complete condition\"\n * requirement for `hasResettableFilters`.\n */\nexport function hasCompleteCondition(root: QBGroup): boolean {\n return findNodes(root, node => node.kind === 'condition').some(condition =>\n isConditionComplete(condition as QBCondition),\n )\n}\n\nfunction isConditionComplete(condition: QBCondition): boolean {\n if (condition.columnName == null) return false\n switch (condition.op) {\n case 'has_value':\n case 'no_value':\n return true\n case 'is_any_of':\n case 'is_all_of':\n case 'equal':\n case 'not_equal':\n return condition.values.length > 0\n case 'between':\n return !isBlank(condition.rangeMin) && !isBlank(condition.rangeMax)\n case 'gt':\n case 'gte':\n return !isBlank(condition.rangeMin)\n case 'lt':\n case 'lte':\n return !isBlank(condition.rangeMax)\n case 'contains':\n case 'starts_with':\n case 'ends_with':\n case 'is_exactly':\n return !isBlank(condition.text)\n default:\n condition.op satisfies never\n return false\n }\n}\n\nfunction isBlank(value: string | null | undefined): boolean {\n return value == null || value === ''\n}\n\n// -----------------------------------------------------------------------------\n// Internal traversal helpers\n// -----------------------------------------------------------------------------\n\nfunction prependChild(root: QBGroup, groupId: string, node: QBNode): QBGroup {\n return mapGroup(root, groupId, group => ({\n ...group,\n children: [node, ...group.children],\n }))\n}\n\n/**\n * Replace the group identified by `targetId` with `transform(group)`. If the\n * id is not found, returns the tree unchanged (by reference).\n */\nfunction mapGroup(\n root: QBGroup,\n targetId: string,\n transform: (group: QBGroup) => QBGroup,\n): QBGroup {\n return mapNode(root, targetId, node =>\n node.kind === 'group' ? transform(node) : node,\n )\n}\n\n/**\n * Replace the node identified by `targetId` with `transform(node)`. If the id\n * matches root, the transformed root is returned. Structural sharing: only\n * the ancestor chain of the changed node is rebuilt; unaffected subtrees are\n * kept by reference.\n */\nfunction mapNode(\n root: QBGroup,\n targetId: string,\n transform: (node: QBNode) => QBNode,\n): QBGroup {\n if (root.id === targetId) {\n const next = transform(root)\n return isQBGroup(next) ? next : root\n }\n let changed = false\n const nextChildren = root.children.map(child => {\n if (child.id === targetId) {\n const replaced = transform(child)\n if (replaced !== child) changed = true\n return replaced\n }\n if (isQBGroup(child)) {\n const replaced = mapNode(child, targetId, transform)\n if (replaced !== child) changed = true\n return replaced\n }\n return child\n })\n return changed ? { ...root, children: nextChildren } : root\n}\n\ntype QBNodeLocation = {\n node: QBNode\n parentId: string\n index: number\n}\n\nfunction findLocation(root: QBGroup, targetId: string): QBNodeLocation | null {\n const visit = (group: QBGroup): QBNodeLocation | null => {\n for (let index = 0; index < group.children.length; index++) {\n const child = group.children[index]\n if (child.id === targetId) {\n return { node: child, parentId: group.id, index }\n }\n if (isQBGroup(child)) {\n const nested = visit(child)\n if (nested) return nested\n }\n }\n return null\n }\n return visit(root)\n}\n\nfunction findGroup(root: QBGroup, targetId: string): QBGroup | null {\n if (root.id === targetId) return root\n for (const child of root.children) {\n if (isQBGroup(child)) {\n const nested = findGroup(child, targetId)\n if (nested) return nested\n }\n }\n return null\n}\n\nfunction containsDescendant(group: QBGroup, targetId: string): boolean {\n for (const child of group.children) {\n if (child.id === targetId) return true\n if (isQBGroup(child) && containsDescendant(child, targetId)) return true\n }\n return false\n}\n\nfunction clampInsertionIndex(length: number, index: number): number {\n if (!Number.isFinite(index) || index < 0) return 0\n return Math.min(length, Math.trunc(index))\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ColumnModel, FacetColumnResult } from '@sage-bionetworks/synapse-types';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the user-facing label for a value stored on a QB condition. Columns
|
|
4
|
+
* whose values are Synapse IDs resolve to the object's name; every other
|
|
5
|
+
* column falls back to {@link labelForFacetValue}.
|
|
6
|
+
*/
|
|
7
|
+
export type QBValueDisplayNameFn = (columnName: string | null, value: string) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Builds the labeling function used for every value the QB displays — pill
|
|
10
|
+
* choices and the plain-English summary alike.
|
|
11
|
+
*
|
|
12
|
+
* IDs are looked up in batch for the whole panel rather than per condition, so
|
|
13
|
+
* a value keeps its name whether or not a condition is currently selecting it.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useQBValueDisplayName(columnModels: ColumnModel[], facetResults: readonly FacetColumnResult[]): QBValueDisplayNameFn;
|
|
16
|
+
/** Labeler used when no ID resolution is available (e.g. outside the panel). */
|
|
17
|
+
export declare const rawQBValueDisplayName: QBValueDisplayNameFn;
|
|
18
|
+
//# sourceMappingURL=useQBValueDisplayName.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQBValueDisplayName.d.ts","sourceRoot":"","sources":["../../../src/components/QueryBuilder/useQBValueDisplayName.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIX,iBAAiB,EAElB,MAAM,iCAAiC,CAAA;AASxC;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,KAAK,EAAE,MAAM,KACV,MAAM,CAAA;AAqBX;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,WAAW,EAAE,EAC3B,YAAY,EAAE,SAAS,iBAAiB,EAAE,GACzC,oBAAoB,CA2EtB;AAED,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,EAAE,oBAGN,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import "../../utils/SynapseConstants.js";
|
|
2
|
+
import e from "../../utils/hooks/useGetInfoFromIds.js";
|
|
3
|
+
import { isFacetColumnResultValues as t, labelForFacetValue as n } from "./queryBuilderMetadata.js";
|
|
4
|
+
import { useCallback as r, useMemo as i } from "react";
|
|
5
|
+
import { ColumnTypeEnum as a } from "@sage-bionetworks/synapse-types";
|
|
6
|
+
//#region src/components/QueryBuilder/useQBValueDisplayName.ts
|
|
7
|
+
function o(e) {
|
|
8
|
+
switch (e) {
|
|
9
|
+
case a.ENTITYID:
|
|
10
|
+
case a.ENTITYID_LIST: return "ENTITY_HEADER";
|
|
11
|
+
case a.USERID:
|
|
12
|
+
case a.USERID_LIST: return "USER_PROFILE";
|
|
13
|
+
case a.EVALUATIONID: return "EVALUATION_QUEUE";
|
|
14
|
+
default: return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function s(a, s) {
|
|
18
|
+
let c = i(() => {
|
|
19
|
+
let e = /* @__PURE__ */ new Map();
|
|
20
|
+
for (let t of a) {
|
|
21
|
+
let n = o(t.columnType);
|
|
22
|
+
n != null && e.set(t.name, n);
|
|
23
|
+
}
|
|
24
|
+
return e;
|
|
25
|
+
}, [a]), l = i(() => {
|
|
26
|
+
let e = {
|
|
27
|
+
ENTITY_HEADER: [],
|
|
28
|
+
USER_PROFILE: [],
|
|
29
|
+
EVALUATION_QUEUE: []
|
|
30
|
+
};
|
|
31
|
+
for (let n of s) {
|
|
32
|
+
if (!t(n)) continue;
|
|
33
|
+
let r = c.get(n.columnName);
|
|
34
|
+
if (r != null) for (let t of n.facetValues) t.value !== "org.sagebionetworks.UNDEFINED_NULL_NOTSET" && e[r].push(t.value);
|
|
35
|
+
}
|
|
36
|
+
return e;
|
|
37
|
+
}, [s, c]), u = e({
|
|
38
|
+
ids: l.ENTITY_HEADER,
|
|
39
|
+
type: "ENTITY_HEADER"
|
|
40
|
+
}), d = e({
|
|
41
|
+
ids: l.USER_PROFILE,
|
|
42
|
+
type: "USER_PROFILE"
|
|
43
|
+
}), f = e({
|
|
44
|
+
ids: l.EVALUATION_QUEUE,
|
|
45
|
+
type: "EVALUATION_QUEUE"
|
|
46
|
+
}), p = i(() => ({
|
|
47
|
+
ENTITY_HEADER: new Map(u.map((e) => [e.id, e.name])),
|
|
48
|
+
USER_PROFILE: new Map(d.map((e) => [e.ownerId, e.userName])),
|
|
49
|
+
EVALUATION_QUEUE: new Map(f.filter((e) => e.id != null && e.name != null).map((e) => [e.id, e.name]))
|
|
50
|
+
}), [
|
|
51
|
+
u,
|
|
52
|
+
d,
|
|
53
|
+
f
|
|
54
|
+
]);
|
|
55
|
+
return r((e, t) => {
|
|
56
|
+
let r = e == null ? null : c.get(e);
|
|
57
|
+
return r == null ? n(t) : p[r].get(t) ?? n(t);
|
|
58
|
+
}, [c, p]);
|
|
59
|
+
}
|
|
60
|
+
var c = (e, t) => n(t);
|
|
61
|
+
//#endregion
|
|
62
|
+
export { c as rawQBValueDisplayName, s as useQBValueDisplayName };
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=useQBValueDisplayName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQBValueDisplayName.js","names":[],"sources":["../../../src/components/QueryBuilder/useQBValueDisplayName.ts"],"sourcesContent":["import {\n ColumnModel,\n ColumnTypeEnum,\n EntityHeader,\n Evaluation,\n FacetColumnResult,\n UserGroupHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { useCallback, useMemo } from 'react'\nimport useGetInfoFromIds from '../../utils/hooks/useGetInfoFromIds'\nimport { VALUE_NOT_SET } from '../../utils/SynapseConstants'\nimport {\n isFacetColumnResultValues,\n labelForFacetValue,\n} from './queryBuilderMetadata'\n\n/**\n * Resolves the user-facing label for a value stored on a QB condition. Columns\n * whose values are Synapse IDs resolve to the object's name; every other\n * column falls back to {@link labelForFacetValue}.\n */\nexport type QBValueDisplayNameFn = (\n columnName: string | null,\n value: string,\n) => string\n\ntype LookupType = 'ENTITY_HEADER' | 'USER_PROFILE' | 'EVALUATION_QUEUE'\n\nfunction lookupTypeForColumnType(\n columnType: ColumnModel['columnType'] | undefined,\n): LookupType | null {\n switch (columnType) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n return 'ENTITY_HEADER'\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n return 'USER_PROFILE'\n case ColumnTypeEnum.EVALUATIONID:\n return 'EVALUATION_QUEUE'\n default:\n return null\n }\n}\n\n/**\n * Builds the labeling function used for every value the QB displays — pill\n * choices and the plain-English summary alike.\n *\n * IDs are looked up in batch for the whole panel rather than per condition, so\n * a value keeps its name whether or not a condition is currently selecting it.\n */\nexport function useQBValueDisplayName(\n columnModels: ColumnModel[],\n facetResults: readonly FacetColumnResult[],\n): QBValueDisplayNameFn {\n const lookupTypeByColumnName = useMemo(() => {\n const map = new Map<string, LookupType>()\n for (const columnModel of columnModels) {\n const lookupType = lookupTypeForColumnType(columnModel.columnType)\n if (lookupType != null) {\n map.set(columnModel.name, lookupType)\n }\n }\n return map\n }, [columnModels])\n\n // Only faceted columns enumerate their values in the UI, so the facet\n // results are the complete set of IDs that need names.\n const idsByLookupType = useMemo(() => {\n const ids: Record<LookupType, string[]> = {\n ENTITY_HEADER: [],\n USER_PROFILE: [],\n EVALUATION_QUEUE: [],\n }\n for (const facet of facetResults) {\n if (!isFacetColumnResultValues(facet)) continue\n const lookupType = lookupTypeByColumnName.get(facet.columnName)\n if (lookupType == null) continue\n for (const facetValue of facet.facetValues) {\n if (facetValue.value !== VALUE_NOT_SET) {\n ids[lookupType].push(facetValue.value)\n }\n }\n }\n return ids\n }, [facetResults, lookupTypeByColumnName])\n\n const entityHeaders = useGetInfoFromIds<EntityHeader>({\n ids: idsByLookupType.ENTITY_HEADER,\n type: 'ENTITY_HEADER',\n })\n const userGroupHeaders = useGetInfoFromIds<UserGroupHeader>({\n ids: idsByLookupType.USER_PROFILE,\n type: 'USER_PROFILE',\n })\n const evaluations = useGetInfoFromIds<Evaluation>({\n ids: idsByLookupType.EVALUATION_QUEUE,\n type: 'EVALUATION_QUEUE',\n })\n\n const labelsByLookupType: Record<LookupType, Map<string, string>> = useMemo(\n () => ({\n ENTITY_HEADER: new Map(entityHeaders.map(h => [h.id, h.name])),\n USER_PROFILE: new Map(userGroupHeaders.map(h => [h.ownerId, h.userName])),\n EVALUATION_QUEUE: new Map(\n evaluations\n .filter(e => e.id != null && e.name != null)\n .map(e => [e.id!, e.name!]),\n ),\n }),\n [entityHeaders, userGroupHeaders, evaluations],\n )\n\n return useCallback(\n (columnName, value) => {\n const lookupType =\n columnName == null ? null : lookupTypeByColumnName.get(columnName)\n if (lookupType == null) return labelForFacetValue(value)\n // Lookups resolve asynchronously, and only faceted values are looked up\n // at all, so the raw value is the best label available until (or unless)\n // a name arrives. An ID the backend won't resolve still gets a label\n // here: `useGetInfoFromIds` substitutes a placeholder header, named\n // after the ID for entities and `Unknown` for users.\n return (\n labelsByLookupType[lookupType].get(value) ?? labelForFacetValue(value)\n )\n },\n [lookupTypeByColumnName, labelsByLookupType],\n )\n}\n\n/** Labeler used when no ID resolution is available (e.g. outside the panel). */\nexport const rawQBValueDisplayName: QBValueDisplayNameFn = (\n _columnName,\n value,\n) => labelForFacetValue(value)\n"],"mappings":";;;;;;AA4BA,SAAS,EACP,GACmB;CACnB,QAAQ,GAAR;EACE,KAAK,EAAe;EACpB,KAAK,EAAe,eAClB,OAAO;EACT,KAAK,EAAe;EACpB,KAAK,EAAe,aAClB,OAAO;EACT,KAAK,EAAe,cAClB,OAAO;EACT,SACE,OAAO;CACX;AACF;AASA,SAAgB,EACd,GACA,GACsB;CACtB,IAAM,IAAyB,QAAc;EAC3C,IAAM,oBAAM,IAAI,IAAwB;EACxC,KAAK,IAAM,KAAe,GAAc;GACtC,IAAM,IAAa,EAAwB,EAAY,UAAU;GACjE,AAAI,KAAc,QAChB,EAAI,IAAI,EAAY,MAAM,CAAU;EAExC;EACA,OAAO;CACT,GAAG,CAAC,CAAY,CAAC,GAIX,IAAkB,QAAc;EACpC,IAAM,IAAoC;GACxC,eAAe,CAAC;GAChB,cAAc,CAAC;GACf,kBAAkB,CAAC;EACrB;EACA,KAAK,IAAM,KAAS,GAAc;GAChC,IAAI,CAAC,EAA0B,CAAK,GAAG;GACvC,IAAM,IAAa,EAAuB,IAAI,EAAM,UAAU;GAC1D,SAAc,MAClB,KAAK,IAAM,KAAc,EAAM,aAC7B,AAAI,EAAW,UAAA,+CACb,EAAI,GAAY,KAAK,EAAW,KAAK;EAG3C;EACA,OAAO;CACT,GAAG,CAAC,GAAc,CAAsB,CAAC,GAEnC,IAAgB,EAAgC;EACpD,KAAK,EAAgB;EACrB,MAAM;CACR,CAAC,GACK,IAAmB,EAAmC;EAC1D,KAAK,EAAgB;EACrB,MAAM;CACR,CAAC,GACK,IAAc,EAA8B;EAChD,KAAK,EAAgB;EACrB,MAAM;CACR,CAAC,GAEK,IAA8D,SAC3D;EACL,eAAe,IAAI,IAAI,EAAc,KAAI,MAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EAC7D,cAAc,IAAI,IAAI,EAAiB,KAAI,MAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;EACxE,kBAAkB,IAAI,IACpB,EACG,QAAO,MAAK,EAAE,MAAM,QAAQ,EAAE,QAAQ,IAAI,EAC1C,KAAI,MAAK,CAAC,EAAE,IAAK,EAAE,IAAK,CAAC,CAC9B;CACF,IACA;EAAC;EAAe;EAAkB;CAAW,CAC/C;CAEA,OAAO,GACJ,GAAY,MAAU;EACrB,IAAM,IACJ,KAAc,OAAO,OAAO,EAAuB,IAAI,CAAU;EAOnE,OANI,KAAc,OAAa,EAAmB,CAAK,IAOrD,EAAmB,GAAY,IAAI,CAAK,KAAK,EAAmB,CAAK;CAEzE,GACA,CAAC,GAAwB,CAAkB,CAC7C;AACF;AAGA,IAAa,KACX,GACA,MACG,EAAmB,CAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryWrapperPlotNav.d.ts","sourceRoot":"","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAA;AAiBlG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAItE,OAAO,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAGL,8BAA8B,EAC/B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAgB,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAiB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAElE,OAAyB,EACvB,qBAAqB,EACrB,aAAa,EACd,MAAM,mDAAmD,CAAA;AAG1D,OAAuB,EACrB,mBAAmB,EACpB,MAAM,qCAAqC,CAAA;AAC5C,OAA4B,EAC1B,wBAAwB,EACzB,MAAM,6CAA6C,CAAA;
|
|
1
|
+
{"version":3,"file":"QueryWrapperPlotNav.d.ts","sourceRoot":"","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"names":[],"mappings":"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"}
|