synapse-react-client 4.0.45 → 4.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.js +1 -1
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
- package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
- package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
- package/dist/aridhia-queries/index.d.ts +1 -0
- package/dist/aridhia-queries/index.d.ts.map +1 -1
- package/dist/aridhia-queries/index.js +11 -10
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
- package/dist/aridhia-queries/useSubmitAridhiaDar.js +2 -2
- package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.test-utils.js +3 -5
- package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +43 -30
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +6 -2
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js +101 -31
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +11 -9
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +24 -13
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
- package/dist/components/Authentication/LastLoginInfo.js +3 -3
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
- package/dist/components/Authentication/TOTPForm.js +3 -3
- package/dist/components/Authentication/TOTPForm.js.map +1 -1
- package/dist/components/Authentication/index.d.ts +6 -6
- package/dist/components/Authentication/index.d.ts.map +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
- package/dist/components/CardContainer/CardContainer.js +7 -7
- package/dist/components/CardContainer/CardContainer.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverUtils.js +2 -2
- package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
- package/dist/components/CohortBuilder/CohortBuilder.css +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.d.ts +35 -0
- package/dist/components/CohortBuilder/CohortBuilder.d.ts.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.js +108 -0
- package/dist/components/CohortBuilder/CohortBuilder.js.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.js +10 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.js.map +1 -0
- package/dist/components/CohortBuilder/CohortBuilder.module.scss +20 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.d.ts +16 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.d.ts.map +1 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.js +124 -0
- package/dist/components/CohortBuilder/CohortFilesPanel.js.map +1 -0
- package/dist/components/CohortBuilder/cohortHandOff.d.ts +25 -0
- package/dist/components/CohortBuilder/cohortHandOff.d.ts.map +1 -0
- package/dist/components/CohortBuilder/cohortHandOff.js +26 -0
- package/dist/components/CohortBuilder/cohortHandOff.js.map +1 -0
- package/dist/components/ColumnFilter/ColumnFilter.d.ts.map +1 -1
- package/dist/components/ColumnFilter/ColumnFilter.js +14 -13
- package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
- package/dist/components/ComponentCollapse.d.ts.map +1 -1
- package/dist/components/ComponentCollapse.js +2 -1
- package/dist/components/ComponentCollapse.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +231 -219
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
- package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +11 -2
- package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.js +115 -109
- package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.js +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts +20 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts.map +1 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.js +18 -0
- package/dist/components/DataGrid/columns/NumberOrEnumColumn.js.map +1 -0
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
- package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
- package/dist/components/DataGrid/components/contextMenu.js +3 -3
- package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.d.ts.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js +14 -12
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
- package/dist/components/DataGrid/hooks/useStack.d.ts +1 -1
- package/dist/components/DataGrid/hooks/useStack.js +2 -2
- package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
- package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +47 -42
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js +7 -7
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js +2 -2
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.js +22 -13
- package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +3 -2
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
- package/dist/components/DownloadCart/MeetAccessRequirementCard.js +1 -1
- package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +5 -5
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
- package/dist/components/EntityFinder/EntityFinder.js +4 -4
- package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
- package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.d.ts.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.js +4 -4
- package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
- package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js +4 -4
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.d.ts.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.js +1 -1
- package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
- package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.d.ts.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +80 -84
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormStructurePanel.js +7 -7
- package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.js +15 -10
- package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
- package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js +2 -2
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
- package/dist/components/FullTextSearch/FullTextSearch.js +8 -8
- package/dist/components/GenericCard/CardUtils.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +46 -46
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/duoTerms.js +1 -1
- package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -1
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +38 -38
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.js +1 -1
- package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
- package/dist/components/HelpPopover/HelpPopover.js +1 -1
- package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
- package/dist/components/HexGrid/HexGrid.d.ts +3 -1
- package/dist/components/HexGrid/HexGrid.d.ts.map +1 -1
- package/dist/components/HexGrid/HexGrid.js +14 -13
- package/dist/components/HexGrid/HexGrid.js.map +1 -1
- package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
- package/dist/components/IconSvg/IconSvg.js +154 -47
- package/dist/components/IconSvg/IconSvg.js.map +1 -1
- package/dist/components/IconSvg/index.d.ts +1 -1
- package/dist/components/IconSvg/index.d.ts.map +1 -1
- package/dist/components/IconSvg/index.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js +3 -3
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
- package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownCollapse.js +3 -1
- package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
- package/dist/components/Markdown/MarkdownEditor.js +1 -1
- package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
- package/dist/components/Markdown/widget/index.d.ts +1 -1
- package/dist/components/Markdown/widget/index.d.ts.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.d.ts.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.js +2 -1
- package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
- package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
- package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
- package/dist/components/Plot/BarPlot.js +1 -1
- package/dist/components/Plot/BarPlot.js.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.d.ts +3 -2
- package/dist/components/Plot/PlotPanelHeader.d.ts.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
- package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
- package/dist/components/PortalList/PortalCard.js +6 -5
- package/dist/components/PortalList/PortalCard.js.map +1 -1
- package/dist/components/PortalList/PortalList.js +4 -4
- package/dist/components/PortalList/PortalList.js.map +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
- package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js +3 -3
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.js +31 -30
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.js +91 -75
- package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.js +91 -79
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js +11 -11
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +2 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +2 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderLimits.d.ts +18 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.js +38 -0
- package/dist/components/QueryBuilder/queryBuilderLimits.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +0 -8
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderMetadata.js +6 -9
- package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +5 -4
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.js +58 -33
- package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.js +4 -4
- package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -1
- package/dist/components/QueryBuilder/useQBValueDisplayName.js +5 -5
- package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -1
- package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
- package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
- package/dist/components/QuerySortSelector.js +5 -5
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +21 -21
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts +20 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts.map +1 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js +50 -0
- package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js.map +1 -0
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts +5 -3
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js +7 -3
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
- package/dist/components/QueryWrapper/downloadListFiles.d.ts +25 -0
- package/dist/components/QueryWrapper/downloadListFiles.d.ts.map +1 -0
- package/dist/components/QueryWrapper/downloadListFiles.js +39 -0
- package/dist/components/QueryWrapper/downloadListFiles.js.map +1 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts +16 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts.map +1 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js +50 -0
- package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js.map +1 -0
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts +4 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts.map +1 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js +15 -28
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.d.ts.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.js +7 -6
- package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts +3 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.js +26 -21
- package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +7 -7
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +2 -2
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +34 -32
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +7 -7
- package/dist/components/QueryWrapperPlotNav/UseRowSet.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js +12 -12
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
- package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
- package/dist/components/RowDataTable/CategorizedRowDataTable.css +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts +33 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.js +64 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.js.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.js +8 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.js.map +1 -0
- package/dist/components/RowDataTable/CategorizedRowDataTable.module.scss +18 -0
- package/dist/components/RowDataTable/RowDataTable.d.ts +13 -0
- package/dist/components/RowDataTable/RowDataTable.d.ts.map +1 -1
- package/dist/components/RowDataTable/RowDataTable.js +25 -8
- package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.d.ts.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js +2 -2
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +17 -9
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +39 -30
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +24 -24
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
- package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
- package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js +8 -8
- package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
- package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.js +1 -1
- package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.js +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
- package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
- package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
- package/dist/components/SynapseForm/NavButtons.js.map +1 -1
- package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/HighlightedTypography.js +1 -1
- package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js +3 -3
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +38 -44
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +4 -4
- package/dist/components/SynapseTable/SqlEditor.js +7 -7
- package/dist/components/SynapseTable/SynapseTable.js +8 -8
- package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.js +73 -72
- package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +44 -45
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.d.ts.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +6 -6
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +4 -4
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +12 -12
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
- package/dist/components/SynapseTable/table-top/ColumnSelection.js +6 -6
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +0 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.js +64 -57
- package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.d.ts.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js +3 -3
- package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +2 -2
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +2 -2
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +59 -59
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.js +1 -4
- package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
- package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
- package/dist/components/TotalQueryResults.js +14 -14
- package/dist/components/Webhook/WebhookDashboard.d.ts.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js +3 -3
- package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
- package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
- package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
- package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
- package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
- package/dist/components/dataaccess/FormTemplateTable.js +6 -6
- package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
- package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
- package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
- package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.d.ts +5 -1
- package/dist/components/download_list/DownloadConfirmationUtils.d.ts.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.js +2 -2
- package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
- package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
- package/dist/components/download_list/DownloadDetails.js +12 -10
- package/dist/components/download_list/DownloadDetails.js.map +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
- package/dist/components/error/ErrorBanner.d.ts.map +1 -1
- package/dist/components/error/ErrorBanner.js +49 -46
- package/dist/components/error/ErrorBanner.js.map +1 -1
- package/dist/components/error/ErrorChip.d.ts.map +1 -1
- package/dist/components/error/ErrorChip.js +2 -1
- package/dist/components/error/ErrorChip.js.map +1 -1
- package/dist/components/file/upload/MultiFileUploadProgress.js +5 -5
- package/dist/components/row_renderers/Dataset.d.ts.map +1 -1
- package/dist/components/row_renderers/Dataset.js +6 -6
- package/dist/components/row_renderers/Dataset.js.map +1 -1
- package/dist/components/row_renderers/Funder.js +1 -1
- package/dist/components/row_renderers/Funder.js.map +1 -1
- package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
- package/dist/components/widgets/ElementWithTooltip.d.ts +6 -1
- package/dist/components/widgets/ElementWithTooltip.d.ts.map +1 -1
- package/dist/components/widgets/ElementWithTooltip.js +22 -14
- package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.d.ts.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/components/widgets/SynapseImage.js +1 -1
- package/dist/components/widgets/SynapseImage.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +16 -5
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +115 -102
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js +4 -2
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts +2 -0
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +7 -0
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.js +47 -45
- package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
- package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +4 -4
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts +3 -2
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.js +16 -15
- package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
- package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js +4 -4
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +2 -2
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +62 -60
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -0
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +10 -10
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +2 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts +3 -2
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.d.ts +3 -2
- package/dist/components/widgets/query-filter/FacetFilterControls.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js +63 -62
- package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js +30 -29
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js +5 -5
- package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
- package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
- package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts +53 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js +391 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts +41 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js +379 -0
- package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts +26 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts.map +1 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js +112 -0
- package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js.map +1 -0
- package/dist/mocks/mockAnnotationColumns.d.ts.map +1 -1
- package/dist/mocks/mockAnnotationColumns.js +1 -1
- package/dist/mocks/mockAnnotationColumns.js.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +17 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +62 -42
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +21 -2
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js +30 -22
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts +27 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.js +158 -0
- package/dist/mocks/msw/handlers/cohortBuilderHandlers.js.map +1 -0
- package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
- package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
- package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/subscriptionHandlers.js +1 -1
- package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js +2 -2
- package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
- package/dist/mocks/msw/server.d.ts.map +1 -1
- package/dist/mocks/msw/server.js +4 -2
- package/dist/mocks/msw/server.js.map +1 -1
- package/dist/mocks/query/mockColumnCategoryTable.d.ts +19 -0
- package/dist/mocks/query/mockColumnCategoryTable.d.ts.map +1 -0
- package/dist/mocks/query/mockColumnCategoryTable.js +188 -0
- package/dist/mocks/query/mockColumnCategoryTable.js.map +1 -0
- package/dist/stories/ColorPaletteInspector.d.ts.map +1 -1
- package/dist/stories/ColorPaletteInspector.js +2 -2
- package/dist/stories/ColorPaletteInspector.js.map +1 -1
- package/dist/style/components/facet_nav/_facet-nav-panel.scss +8 -0
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/auth/useOIDC.js +2 -2
- package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +2 -2
- package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -1
- package/dist/synapse-queries/challenge/useChallenge.js +2 -2
- package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
- package/dist/synapse-queries/chat/useChat.js +8 -8
- package/dist/synapse-queries/chat/useChat.js.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.js +10 -10
- package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js +24 -24
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js +4 -4
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +6 -6
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useFormTemplate.js +4 -4
- package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
- package/dist/synapse-queries/download/index.js +2 -2
- package/dist/synapse-queries/download/useDownloadList.d.ts +5 -0
- package/dist/synapse-queries/download/useDownloadList.d.ts.map +1 -1
- package/dist/synapse-queries/download/useDownloadList.js +14 -13
- package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
- package/dist/synapse-queries/entity/useEntity.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useEntity.js +20 -20
- package/dist/synapse-queries/entity/useEntity.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js +2 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.js +3 -2
- package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.js +2 -1
- package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.d.ts.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js +4 -7
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
- package/dist/synapse-queries/forum/useReply.js +6 -6
- package/dist/synapse-queries/forum/useReply.js.map +1 -1
- package/dist/synapse-queries/forum/useThread.js +14 -14
- package/dist/synapse-queries/forum/useThread.js.map +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
- package/dist/synapse-queries/grid/useGridSession.js +4 -4
- package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
- package/dist/synapse-queries/index.js +177 -176
- package/dist/synapse-queries/oauth/useOAuthClient.js +9 -9
- package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
- package/dist/synapse-queries/portal/usePortal.js +7 -7
- package/dist/synapse-queries/portal/usePortal.js.map +1 -1
- package/dist/synapse-queries/subscription/useSubscription.js +4 -4
- package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
- package/dist/synapse-queries/table/useTableUpdateTransaction.js +2 -2
- package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
- package/dist/synapse-queries/team/useTeam.js +2 -2
- package/dist/synapse-queries/team/useTeam.js.map +1 -1
- package/dist/synapse-queries/team/useTeamList.d.ts.map +1 -1
- package/dist/synapse-queries/team/useTeamList.js +3 -3
- package/dist/synapse-queries/team/useTeamList.js.map +1 -1
- package/dist/synapse-queries/team/useTeamMembers.js +8 -8
- package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
- package/dist/synapse-queries/termsOfService/useTermsOfService.js +2 -2
- package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
- package/dist/synapse-queries/trash/useTrashCan.js +4 -4
- package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
- package/dist/synapse-queries/user/useCertificationQuiz.js +2 -2
- package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
- package/dist/synapse-queries/user/useFavorites.js +4 -4
- package/dist/synapse-queries/user/useFavorites.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
- package/dist/synapse-queries/user/useRevokeCertification.js +2 -2
- package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
- package/dist/synapse-queries/wiki/useWiki.js +10 -10
- package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
- package/dist/theme/DefaultTheme.d.ts.map +1 -1
- package/dist/theme/DefaultTheme.js +4 -1
- package/dist/theme/DefaultTheme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/AppUtils/AppUtils.js +1 -1
- package/dist/utils/AppUtils/AppUtils.js.map +1 -1
- package/dist/utils/ContentTypeUtils.js +4 -4
- package/dist/utils/ContentTypeUtils.js.map +1 -1
- package/dist/utils/PermissionLevelToAccessType.js +1 -1
- package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
- package/dist/utils/context/DocumentMetadataContext.js +1 -1
- package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.js +3 -3
- package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
- package/dist/utils/functions/ArrayUtils.js +2 -2
- package/dist/utils/functions/ArrayUtils.js.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
- package/dist/utils/functions/FileHandleUtils.js +1 -1
- package/dist/utils/functions/FileHandleUtils.js.map +1 -1
- package/dist/utils/functions/RegularExpressions.js +1 -1
- package/dist/utils/functions/RegularExpressions.js.map +1 -1
- package/dist/utils/functions/StringUtils.d.ts.map +1 -1
- package/dist/utils/functions/StringUtils.js +1 -2
- package/dist/utils/functions/StringUtils.js.map +1 -1
- package/dist/utils/functions/deepLinkingUtils.js +2 -2
- package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
- package/dist/utils/functions/enumerationFacet.d.ts +26 -0
- package/dist/utils/functions/enumerationFacet.d.ts.map +1 -0
- package/dist/utils/functions/enumerationFacet.js +27 -0
- package/dist/utils/functions/enumerationFacet.js.map +1 -0
- package/dist/utils/functions/facetCountUtils.d.ts +12 -0
- package/dist/utils/functions/facetCountUtils.d.ts.map +1 -0
- package/dist/utils/functions/facetCountUtils.js +9 -0
- package/dist/utils/functions/facetCountUtils.js.map +1 -0
- package/dist/utils/functions/getEndpoint.js.map +1 -1
- package/dist/utils/functions/getUserData.js +1 -1
- package/dist/utils/functions/getUserData.js.map +1 -1
- package/dist/utils/functions/queryUtils.d.ts +1 -1
- package/dist/utils/functions/queryUtils.d.ts.map +1 -1
- package/dist/utils/functions/queryUtils.js +26 -22
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.d.ts.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.js +17 -26
- package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
- package/dist/utils/functions/unCamelCase.js +1 -1
- package/dist/utils/functions/unCamelCase.js.map +1 -1
- package/dist/utils/hooks/useGetInfoFromIds.js +5 -5
- package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
- package/dist/utils/hooks/useLogin.d.ts.map +1 -1
- package/dist/utils/hooks/useLogin.js +5 -5
- package/dist/utils/hooks/useLogin.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +6 -0
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.js +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -1
- package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts +22 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts.map +1 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.js +39 -0
- package/dist/utils/jsonschema/getNumberOrEnumInfo.js.map +1 -0
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts +1 -0
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts.map +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts +5 -0
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js +30 -15
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
- package/dist/utils/jsonschema/submissionContext.js +2 -2
- package/dist/utils/jsonschema/submissionContext.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityBadgeIcons.js","names":[],"sources":["../../../src/components/EntityBadgeIcons/EntityBadgeIcons.tsx"],"sourcesContent":["import {\n useDeleteEntity,\n useGetEntityBundle,\n useGetJson,\n useGetSchemaBinding,\n useGetValidationResults,\n} from '@/synapse-queries'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport { isEntityPublic } from '@/utils/functions/AccessControlListUtils'\nimport {\n ChatBubbleTwoTone,\n CheckTwoTone,\n DescriptionTwoTone,\n LinkOffTwoTone,\n LocalOfferTwoTone,\n LockTwoTone,\n PublicTwoTone,\n} from '@mui/icons-material'\nimport { Tooltip } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { ALL_ENTITY_BUNDLE_FIELDS } from '@sage-bionetworks/synapse-types'\nimport { isEmpty } from 'lodash-es'\nimport React, { useEffect, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { getDisplayedAnnotation } from '../entity/metadata/AnnotationsTable'\nimport { EntityModal } from '../entity/metadata/EntityModal'\nimport { HoverPopover } from '../styled/HoverPopover'\nimport WarningDialog from '../SynapseForm/WarningDialog'\n\nexport type EntityBadgeIconsProps = {\n entityId: string\n versionNumber?: number\n flexWrap?: // possible settings for flex-wrap\n | 'wrap'\n | 'nowrap'\n | '-moz-initial'\n | 'inherit'\n | 'initial'\n | 'revert'\n | 'unset'\n | 'wrap-reverse'\n justifyContent?: 'flex-start' | 'flex-end' | string\n /** Shows an icon indicating if the entity is 'public' or 'private'. Default true */\n showIsPublicPrivate?: boolean\n /** Shows an icon if the entity has sharing settings set on itself. Default true */\n showHasLocalSharingSettings?: boolean\n /** Shows an icon if the entity has annotations, or if it has a validation schema (in experimental mode only). Default true */\n showHasAnnotations?: boolean\n /** Shows an icon if the entity a wiki. Default true */\n showHasWiki?: boolean\n /** Shows an icon if the entity has been mentioned in discussion threads. Default true */\n showHasDiscussionThread?: boolean\n /* Shows an 'unlink' button if the entity is a link and the user has permission to delete it. Default true */\n showUnlink?: boolean\n /* Invoked after the entity is unlinked/deleted in case there is cleanup to do. Returns the entityId */\n onUnlink?: (entityId: string) => void\n onUnlinkError?: (error: unknown) => void\n /** Whether or not the badges (e.g. Annotations) can trigger opening a modal on click */\n canOpenModal: boolean\n}\n\n/**\n * Stateless component used to show icons that show an entity's status.\n * Adapted from https://github.com/Sage-Bionetworks/SynapseWebClient/blob/46b9b717636cda2421926d96365244bbb72a05b6/src/main/java/org/sagebionetworks/web/client/widget/entity/EntityBadge.java\n */\nexport const EntityBadgeIcons = (\n props: EntityBadgeIconsProps,\n): React.ReactNode => {\n const {\n entityId,\n versionNumber,\n flexWrap = 'nowrap',\n justifyContent = 'flex-start',\n showIsPublicPrivate = true,\n showHasLocalSharingSettings = true,\n showHasAnnotations = true,\n showHasWiki = true,\n showHasDiscussionThread = true,\n showUnlink = true,\n onUnlink = () => {\n /* noop */\n },\n onUnlinkError = () => {\n /* noop */\n },\n canOpenModal,\n } = props\n\n const { data } = useGetRealmPrincipals()\n const realmPrincipals = data || {}\n\n enum SchemaConformanceState {\n NO_SCHEMA = '', // or not in experimental mode\n VALID = 'Valid',\n INVALID = 'Invalid',\n ANNOTATIONS_MISSING = 'Missing',\n }\n\n const { ref, inView } = useInView()\n\n const { data: entityData } = useGetJson(entityId, versionNumber, true, {\n enabled: inView,\n })\n const annotations = entityData?.annotations\n const { data: bundle } = useGetEntityBundle(\n entityId,\n versionNumber,\n ALL_ENTITY_BUNDLE_FIELDS,\n {\n enabled: inView,\n },\n )\n const [showModal, setShowModal] = useState(false)\n const [showUnlinkConfirmModal, setShowUnlinkConfirmModal] = useState(false)\n const [schemaConformance, setSchemaConformance] = useState(\n SchemaConformanceState.NO_SCHEMA,\n )\n\n const { data: boundSchema } = useGetSchemaBinding(entityId, {\n enabled: inView,\n staleTime: 60 * 1000, // 60 seconds\n })\n\n const { data: schemaValidationResults } = useGetValidationResults(entityId, {\n enabled: inView && !!boundSchema,\n staleTime: 60 * 1000, // 60 seconds\n })\n\n const annotationsCount =\n annotations && !isEmpty(annotations) ? Object.keys(annotations).length : 0\n useEffect(() => {\n if (schemaValidationResults) {\n if (schemaValidationResults.isValid) {\n setSchemaConformance(SchemaConformanceState.VALID)\n } else if (annotationsCount) {\n // If annotations exist, then indicate that they are invalid\n setSchemaConformance(SchemaConformanceState.INVALID)\n } else {\n // If annotations are missing, it's still invalid, but should appear differently\n setSchemaConformance(SchemaConformanceState.ANNOTATIONS_MISSING)\n }\n }\n }, [\n schemaValidationResults,\n annotationsCount,\n annotations,\n SchemaConformanceState.VALID,\n SchemaConformanceState.INVALID,\n SchemaConformanceState.ANNOTATIONS_MISSING,\n ])\n\n const { mutate: unlinkEntity } = useDeleteEntity({\n onSuccess: (_, entityId) => {\n onUnlink(entityId)\n },\n onError: onUnlinkError,\n })\n\n /**\n * Convert the list of annotations to a string of <tr>...anno1</tr><tr>...anno2</tr>...\n * If there are no annotations, this is the empty string ('')\n */\n const annotationsTableRows = (\n <>\n {annotations\n ? Object.entries(annotations ?? []).map(([key, value]) => (\n <tr key={key}>\n <td>\n <b>{key}</b>\n </td>\n <td>\n {Array.isArray(value)\n ? value.map(getDisplayedAnnotation).join(', ')\n : getDisplayedAnnotation(value as string | number | boolean)}\n </td>\n </tr>\n ))\n : ''}\n </>\n )\n // We also show the schema name if there is one (and we're in experimental mode)\n const valiationSchemaTableRow = (\n <>\n {boundSchema ? (\n <tr>\n <td>\n <b>Validation Schema</b>\n </td>\n <td>{boundSchema.jsonSchemaVersionInfo.schemaName}</td>\n </tr>\n ) : (\n ''\n )}\n </>\n )\n const annotationsTitle = schemaValidationResults\n ? `${schemaConformance} Annotations`\n : ''\n const annotationsHtml = (\n <div className=\"EntityBadgeTooltip\">\n <table>\n <tbody>\n {annotationsTableRows ? annotationsTableRows : ''}\n {valiationSchemaTableRow}\n </tbody>\n </table>\n </div>\n )\n\n return (\n <div className=\"EntityBadge\" ref={ref} style={{ flexWrap, justifyContent }}>\n {bundle && (\n <>\n <div onClick={e => e.stopPropagation()}>\n <EntityModal\n entityId={entityId}\n show={showModal}\n showTabs={false}\n onClose={() => setShowModal(false)}\n initialTab={'ANNOTATIONS'}\n />\n </div>\n {showIsPublicPrivate &&\n bundle.benefactorAcl &&\n isEntityPublic(\n bundle.benefactorAcl.resourceAccess,\n realmPrincipals,\n ) ? (\n <Tooltip title=\"Public\" enterNextDelay={100} placement=\"right\">\n <PublicTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'is-public-icon'}\n />\n </Tooltip>\n ) : null}\n {showIsPublicPrivate &&\n bundle.benefactorAcl &&\n !isEntityPublic(\n bundle.benefactorAcl.resourceAccess,\n realmPrincipals,\n ) ? (\n <Tooltip title=\"Private\" enterNextDelay={100} placement=\"right\">\n <LockTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'is-private-icon'}\n />\n </Tooltip>\n ) : null}\n {showHasLocalSharingSettings &&\n bundle.benefactorAcl &&\n entityId === bundle.benefactorAcl.id ? (\n <Tooltip\n title=\"Sharing Settings have been set\"\n enterNextDelay={100}\n placement=\"right\"\n >\n <CheckTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'sharing-settings-icon'}\n />\n </Tooltip>\n ) : null}\n\n {showHasAnnotations &&\n !!(annotationsCount || schemaValidationResults) && (\n <HoverPopover\n title={annotationsTitle}\n popoverContent={annotationsHtml}\n placement=\"right\"\n maxWidth={500}\n actionButton={\n canOpenModal\n ? {\n content: 'Edit Annotations',\n onClick: () => setShowModal(true),\n closeOnClick: true,\n }\n : undefined\n }\n >\n <LocalOfferTwoTone\n aria-hidden={false}\n role={canOpenModal ? 'button' : 'img'}\n className={`EntityBadge__Badge ${schemaConformance}`}\n data-html={true}\n data-testid={'annotations-icon'}\n />\n </HoverPopover>\n )}\n {showHasWiki && bundle.rootWikiId && (\n <Tooltip title=\"Has a wiki\" enterNextDelay={100} placement=\"right\">\n <DescriptionTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'wiki-icon'}\n />\n </Tooltip>\n )}\n {showHasDiscussionThread &&\n !!bundle.threadCount &&\n !!(bundle.threadCount > 0) && (\n <Tooltip\n title=\"Has been mentioned in discussion\"\n enterNextDelay={100}\n placement=\"right\"\n >\n <ChatBubbleTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'discussion-icon'}\n />\n </Tooltip>\n )}\n {showUnlink &&\n bundle.entityType === EntityType.link &&\n bundle.permissions?.canDelete && (\n <>\n <WarningDialog\n open={showUnlinkConfirmModal}\n title=\"Confirm Unlink\"\n content={\n 'Are you sure you want to remove this link? The original object will not be changed.'\n }\n confirmButtonText=\"Unlink\"\n confirmButtonColor=\"error\"\n onConfirm={() => {\n unlinkEntity(entityId)\n setShowUnlinkConfirmModal(false)\n }}\n onCancel={() => {\n setShowUnlinkConfirmModal(false)\n }}\n />\n <Tooltip\n title=\"Remove this link\"\n enterNextDelay={100}\n placement=\"right\"\n >\n <LinkOffTwoTone\n aria-hidden={false}\n role=\"button\"\n onClick={() => setShowUnlinkConfirmModal(true)}\n className=\"EntityBadge__Badge Unlink\"\n data-testid={'unlink-icon'}\n />\n </Tooltip>\n </>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport default EntityBadgeIcons\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityBadgeIcons.js","names":[],"sources":["../../../src/components/EntityBadgeIcons/EntityBadgeIcons.tsx"],"sourcesContent":["import {\n useDeleteEntity,\n useGetEntityBundle,\n useGetJson,\n useGetSchemaBinding,\n useGetValidationResults,\n} from '@/synapse-queries'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport { isEntityPublic } from '@/utils/functions/AccessControlListUtils'\nimport ChatBubbleTwoTone from '@mui/icons-material/ChatBubbleTwoTone'\nimport CheckTwoTone from '@mui/icons-material/CheckTwoTone'\nimport DescriptionTwoTone from '@mui/icons-material/DescriptionTwoTone'\nimport LinkOffTwoTone from '@mui/icons-material/LinkOffTwoTone'\nimport LocalOfferTwoTone from '@mui/icons-material/LocalOfferTwoTone'\nimport LockTwoTone from '@mui/icons-material/LockTwoTone'\nimport PublicTwoTone from '@mui/icons-material/PublicTwoTone'\nimport { Tooltip } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { ALL_ENTITY_BUNDLE_FIELDS } from '@sage-bionetworks/synapse-types'\nimport { isEmpty } from 'lodash-es'\nimport React, { useEffect, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { getDisplayedAnnotation } from '../entity/metadata/AnnotationsTable'\nimport { EntityModal } from '../entity/metadata/EntityModal'\nimport { HoverPopover } from '../styled/HoverPopover'\nimport WarningDialog from '../SynapseForm/WarningDialog'\n\nexport type EntityBadgeIconsProps = {\n entityId: string\n versionNumber?: number\n flexWrap?: // possible settings for flex-wrap\n | 'wrap'\n | 'nowrap'\n | '-moz-initial'\n | 'inherit'\n | 'initial'\n | 'revert'\n | 'unset'\n | 'wrap-reverse'\n justifyContent?: 'flex-start' | 'flex-end' | string\n /** Shows an icon indicating if the entity is 'public' or 'private'. Default true */\n showIsPublicPrivate?: boolean\n /** Shows an icon if the entity has sharing settings set on itself. Default true */\n showHasLocalSharingSettings?: boolean\n /** Shows an icon if the entity has annotations, or if it has a validation schema (in experimental mode only). Default true */\n showHasAnnotations?: boolean\n /** Shows an icon if the entity a wiki. Default true */\n showHasWiki?: boolean\n /** Shows an icon if the entity has been mentioned in discussion threads. Default true */\n showHasDiscussionThread?: boolean\n /* Shows an 'unlink' button if the entity is a link and the user has permission to delete it. Default true */\n showUnlink?: boolean\n /* Invoked after the entity is unlinked/deleted in case there is cleanup to do. Returns the entityId */\n onUnlink?: (entityId: string) => void\n onUnlinkError?: (error: unknown) => void\n /** Whether or not the badges (e.g. Annotations) can trigger opening a modal on click */\n canOpenModal: boolean\n}\n\n/**\n * Stateless component used to show icons that show an entity's status.\n * Adapted from https://github.com/Sage-Bionetworks/SynapseWebClient/blob/46b9b717636cda2421926d96365244bbb72a05b6/src/main/java/org/sagebionetworks/web/client/widget/entity/EntityBadge.java\n */\nexport const EntityBadgeIcons = (\n props: EntityBadgeIconsProps,\n): React.ReactNode => {\n const {\n entityId,\n versionNumber,\n flexWrap = 'nowrap',\n justifyContent = 'flex-start',\n showIsPublicPrivate = true,\n showHasLocalSharingSettings = true,\n showHasAnnotations = true,\n showHasWiki = true,\n showHasDiscussionThread = true,\n showUnlink = true,\n onUnlink = () => {\n /* noop */\n },\n onUnlinkError = () => {\n /* noop */\n },\n canOpenModal,\n } = props\n\n const { data } = useGetRealmPrincipals()\n const realmPrincipals = data || {}\n\n enum SchemaConformanceState {\n NO_SCHEMA = '', // or not in experimental mode\n VALID = 'Valid',\n INVALID = 'Invalid',\n ANNOTATIONS_MISSING = 'Missing',\n }\n\n const { ref, inView } = useInView()\n\n const { data: entityData } = useGetJson(entityId, versionNumber, true, {\n enabled: inView,\n })\n const annotations = entityData?.annotations\n const { data: bundle } = useGetEntityBundle(\n entityId,\n versionNumber,\n ALL_ENTITY_BUNDLE_FIELDS,\n {\n enabled: inView,\n },\n )\n const [showModal, setShowModal] = useState(false)\n const [showUnlinkConfirmModal, setShowUnlinkConfirmModal] = useState(false)\n const [schemaConformance, setSchemaConformance] = useState(\n SchemaConformanceState.NO_SCHEMA,\n )\n\n const { data: boundSchema } = useGetSchemaBinding(entityId, {\n enabled: inView,\n staleTime: 60 * 1000, // 60 seconds\n })\n\n const { data: schemaValidationResults } = useGetValidationResults(entityId, {\n enabled: inView && !!boundSchema,\n staleTime: 60 * 1000, // 60 seconds\n })\n\n const annotationsCount =\n annotations && !isEmpty(annotations) ? Object.keys(annotations).length : 0\n useEffect(() => {\n if (schemaValidationResults) {\n if (schemaValidationResults.isValid) {\n setSchemaConformance(SchemaConformanceState.VALID)\n } else if (annotationsCount) {\n // If annotations exist, then indicate that they are invalid\n setSchemaConformance(SchemaConformanceState.INVALID)\n } else {\n // If annotations are missing, it's still invalid, but should appear differently\n setSchemaConformance(SchemaConformanceState.ANNOTATIONS_MISSING)\n }\n }\n }, [\n schemaValidationResults,\n annotationsCount,\n annotations,\n SchemaConformanceState.VALID,\n SchemaConformanceState.INVALID,\n SchemaConformanceState.ANNOTATIONS_MISSING,\n ])\n\n const { mutate: unlinkEntity } = useDeleteEntity({\n onSuccess: (_, entityId) => {\n onUnlink(entityId)\n },\n onError: onUnlinkError,\n })\n\n /**\n * Convert the list of annotations to a string of <tr>...anno1</tr><tr>...anno2</tr>...\n * If there are no annotations, this is the empty string ('')\n */\n const annotationsTableRows = (\n <>\n {annotations\n ? Object.entries(annotations ?? []).map(([key, value]) => (\n <tr key={key}>\n <td>\n <b>{key}</b>\n </td>\n <td>\n {Array.isArray(value)\n ? value.map(getDisplayedAnnotation).join(', ')\n : getDisplayedAnnotation(value as string | number | boolean)}\n </td>\n </tr>\n ))\n : ''}\n </>\n )\n // We also show the schema name if there is one (and we're in experimental mode)\n const valiationSchemaTableRow = (\n <>\n {boundSchema ? (\n <tr>\n <td>\n <b>Validation Schema</b>\n </td>\n <td>{boundSchema.jsonSchemaVersionInfo.schemaName}</td>\n </tr>\n ) : (\n ''\n )}\n </>\n )\n const annotationsTitle = schemaValidationResults\n ? `${schemaConformance} Annotations`\n : ''\n const annotationsHtml = (\n <div className=\"EntityBadgeTooltip\">\n <table>\n <tbody>\n {annotationsTableRows ? annotationsTableRows : ''}\n {valiationSchemaTableRow}\n </tbody>\n </table>\n </div>\n )\n\n return (\n <div className=\"EntityBadge\" ref={ref} style={{ flexWrap, justifyContent }}>\n {bundle && (\n <>\n <div onClick={e => e.stopPropagation()}>\n <EntityModal\n entityId={entityId}\n show={showModal}\n showTabs={false}\n onClose={() => setShowModal(false)}\n initialTab={'ANNOTATIONS'}\n />\n </div>\n {showIsPublicPrivate &&\n bundle.benefactorAcl &&\n isEntityPublic(\n bundle.benefactorAcl.resourceAccess,\n realmPrincipals,\n ) ? (\n <Tooltip title=\"Public\" enterNextDelay={100} placement=\"right\">\n <PublicTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'is-public-icon'}\n />\n </Tooltip>\n ) : null}\n {showIsPublicPrivate &&\n bundle.benefactorAcl &&\n !isEntityPublic(\n bundle.benefactorAcl.resourceAccess,\n realmPrincipals,\n ) ? (\n <Tooltip title=\"Private\" enterNextDelay={100} placement=\"right\">\n <LockTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'is-private-icon'}\n />\n </Tooltip>\n ) : null}\n {showHasLocalSharingSettings &&\n bundle.benefactorAcl &&\n entityId === bundle.benefactorAcl.id ? (\n <Tooltip\n title=\"Sharing Settings have been set\"\n enterNextDelay={100}\n placement=\"right\"\n >\n <CheckTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'sharing-settings-icon'}\n />\n </Tooltip>\n ) : null}\n\n {showHasAnnotations &&\n !!(annotationsCount || schemaValidationResults) && (\n <HoverPopover\n title={annotationsTitle}\n popoverContent={annotationsHtml}\n placement=\"right\"\n maxWidth={500}\n actionButton={\n canOpenModal\n ? {\n content: 'Edit Annotations',\n onClick: () => setShowModal(true),\n closeOnClick: true,\n }\n : undefined\n }\n >\n <LocalOfferTwoTone\n aria-hidden={false}\n role={canOpenModal ? 'button' : 'img'}\n className={`EntityBadge__Badge ${schemaConformance}`}\n data-html={true}\n data-testid={'annotations-icon'}\n />\n </HoverPopover>\n )}\n {showHasWiki && bundle.rootWikiId && (\n <Tooltip title=\"Has a wiki\" enterNextDelay={100} placement=\"right\">\n <DescriptionTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'wiki-icon'}\n />\n </Tooltip>\n )}\n {showHasDiscussionThread &&\n !!bundle.threadCount &&\n !!(bundle.threadCount > 0) && (\n <Tooltip\n title=\"Has been mentioned in discussion\"\n enterNextDelay={100}\n placement=\"right\"\n >\n <ChatBubbleTwoTone\n aria-hidden={false}\n role=\"img\"\n className=\"EntityBadge__Badge\"\n data-testid={'discussion-icon'}\n />\n </Tooltip>\n )}\n {showUnlink &&\n bundle.entityType === EntityType.link &&\n bundle.permissions?.canDelete && (\n <>\n <WarningDialog\n open={showUnlinkConfirmModal}\n title=\"Confirm Unlink\"\n content={\n 'Are you sure you want to remove this link? The original object will not be changed.'\n }\n confirmButtonText=\"Unlink\"\n confirmButtonColor=\"error\"\n onConfirm={() => {\n unlinkEntity(entityId)\n setShowUnlinkConfirmModal(false)\n }}\n onCancel={() => {\n setShowUnlinkConfirmModal(false)\n }}\n />\n <Tooltip\n title=\"Remove this link\"\n enterNextDelay={100}\n placement=\"right\"\n >\n <LinkOffTwoTone\n aria-hidden={false}\n role=\"button\"\n onClick={() => setShowUnlinkConfirmModal(true)}\n className=\"EntityBadge__Badge Unlink\"\n data-testid={'unlink-icon'}\n />\n </Tooltip>\n </>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport default EntityBadgeIcons\n"],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ import { useState as y } from "react";
|
|
|
18
18
|
import { Fragment as ee, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
19
19
|
import { FileHandleAssociateType as S } from "@sage-bionetworks/synapse-types";
|
|
20
20
|
import { EntityType as C } from "@sage-bionetworks/synapse-client";
|
|
21
|
-
import
|
|
21
|
+
import w from "@mui/icons-material/DownloadOutlined";
|
|
22
22
|
import { createPortal as T } from "react-dom";
|
|
23
23
|
//#region src/components/EntityDownloadButton/EntityDownloadButton.tsx
|
|
24
24
|
var E = "import synapseclient\nsyn = synapseclient.Synapse()\nsyn.login(authToken=\"YOUR_TOKEN_HERE\")", D = "library(synapser)\nsynLogin(authToken=\"YOUR_TOKEN_HERE\")";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityDownloadButton.js","names":[],"sources":["../../../src/components/EntityDownloadButton/EntityDownloadButton.tsx"],"sourcesContent":["import { useGetEntity, useGetVersions } from '@/synapse-queries'\nimport {\n useAddFileToDownloadList,\n useGetAddToDownloadListStats,\n} from '@/synapse-queries/index'\nimport { useSynapseContext } from '@/utils'\nimport {\n entityTypeToFriendlyName,\n hasFilesInView,\n isContainerType,\n isDataset,\n isEntityView,\n isVersionableEntity,\n} from '@/utils/functions/EntityTypeUtils'\nimport { useDirectDownloadHandler } from '@/utils/hooks/useDirectDownloadHandler'\nimport { isFileEntity } from '@/utils/types/IsType'\nimport { DownloadOutlined as DownloadIcon } from '@mui/icons-material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n FileHandleAssociateType,\n QueryBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { RefObject, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { displayFilesWereAddedToDownloadListSuccess } from '../download_list/DownloadConfirmationUtils'\nimport { EntityDownloadConfirmation } from '../EntityDownloadConfirmation'\nimport { DropdownMenu, DropdownMenuItem } from '../menu/DropdownMenu'\nimport { ModalDownload } from '../ModalDownload/ModalDownload'\nimport { ProgrammaticInstructionsModal } from '../ProgrammaticInstructionsModal/ProgrammaticInstructionsModal'\nimport { displayToast } from '../ToastMessage/index'\n\n// WIP\n// Per Nick Grosenbacher: For this to be reusable, I think we would also need to accept versionNumber as a prop. Where we would have the following behavior:\n// - If the version number is present, use it\n// - If the version number is null, do not use it,\n// - If the version number is undefined, then we would try to do the 'smart' thing-- get the latest version for datasets, otherwise don't use it.\n\n// Have to keep these consts outside of getProgrammaticAccessCode because\n// they are being called in ProgrammaticTableDownload.tsx\n// Python client import and login instructions\nexport const PYTHON_CLIENT_IMPORT_AND_LOGIN = `import synapseclient\nsyn = synapseclient.Synapse()\nsyn.login(authToken=\"YOUR_TOKEN_HERE\")`\n\n// R client import and login instructions\nexport const R_CLIENT_IMPORT_AND_LOGIN = `library(synapser)\nsynLogin(authToken=\"YOUR_TOKEN_HERE\")`\n\ntype ProgrammaticAccessCode = {\n cliCode: string | undefined\n rCode: string | undefined\n pythonCode: string | undefined\n}\n\n// Generate programmatic access code snippet content based on entity type\nexport function getProgrammaticAccessCode(\n type: EntityType,\n entityId: string,\n version: number | undefined,\n): ProgrammaticAccessCode {\n const id =\n type === EntityType.dataset && version ? `${entityId}.${version}` : entityId\n switch (type) {\n case EntityType.file:\n case EntityType.folder:\n case EntityType.project:\n case EntityType.link:\n return {\n cliCode: `synapse get -r ${entityId}`,\n rCode: `${R_CLIENT_IMPORT_AND_LOGIN} \\n\n# Download file\nsynGet('${entityId}')`,\n pythonCode: `${PYTHON_CLIENT_IMPORT_AND_LOGIN} \\n\n# Download file\nsyn.get('${entityId}')`,\n }\n case EntityType.dockerrepo:\n return {\n cliCode: `docker login -u <synapse username> -p <synapse password> docker.synapse.org \\n\ndocker pull docker.synapse.org/${entityId}/myrepo`,\n rCode: undefined,\n pythonCode: undefined,\n }\n case EntityType.dataset:\n case EntityType.entityview:\n case EntityType.datasetcollection:\n case EntityType.table:\n case EntityType.materializedview:\n case EntityType.submissionview:\n case EntityType.virtualtable:\n case EntityType.recordset:\n return {\n cliCode: `synapse get -q \"SELECT * FROM ${id}\"`,\n rCode: `${R_CLIENT_IMPORT_AND_LOGIN} \\n\nquery <- synTableQuery(\"SELECT * FROM ${id}\")\nread.table(query$filepath, sep=\",\")`,\n pythonCode: `${PYTHON_CLIENT_IMPORT_AND_LOGIN} \\n\nquery = syn.tableQuery(\"SELECT * FROM ${id}\")\nquery.asDataFrame()`,\n }\n case EntityType.searchindex:\n return {\n cliCode: undefined,\n rCode: undefined,\n pythonCode: undefined,\n }\n default:\n throw new Error(`Unhandled EntityType: ${type}`)\n }\n}\n\nenum DownloadAction {\n downloadFile,\n addToCart,\n programmaticAccess,\n programmaticAccessDocker,\n exportTable,\n}\n\n// Function that creates menu items for download actions\nfunction getMenuItemForAction(\n entityId: string,\n entityName: string,\n entityType: EntityType,\n downloadAction: DownloadAction,\n setShowProgrammaticAccess: (show: boolean) => void,\n setShowExportMetadata: (show: boolean) => void,\n addFileToDownloadList: (params: {\n entityId: string\n entityVersionNumber: number | undefined\n }) => void,\n setShowDownloadConfirmation: (show: boolean) => void,\n versionNumber?: number,\n addToCartDisabled?: boolean,\n onDownloadFile?: () => void,\n isAuthenticated?: boolean,\n): DropdownMenuItem {\n switch (downloadAction) {\n case DownloadAction.downloadFile:\n return {\n text: 'Download File',\n onClick: () => {\n if (onDownloadFile) onDownloadFile()\n },\n tooltipText: isAuthenticated\n ? 'Download this file directly'\n : 'Sign in to download this file',\n disabled: !isAuthenticated,\n }\n case DownloadAction.addToCart:\n return {\n text: 'Add to Download List',\n disabled: addToCartDisabled,\n tooltipText: getAddToCartTooltip(entityType, !!addToCartDisabled),\n onClick: () => {\n if (\n entityType === EntityType.file ||\n entityType === EntityType.recordset\n ) {\n addFileToDownloadList({\n entityId,\n entityVersionNumber: versionNumber,\n })\n } else {\n setShowDownloadConfirmation(true)\n }\n },\n }\n case DownloadAction.programmaticAccess:\n return {\n text: 'Programmatic Access',\n onClick: () => {\n setShowProgrammaticAccess(true)\n },\n tooltipText: 'View programmatic access options',\n }\n case DownloadAction.programmaticAccessDocker:\n return {\n text: 'Programmatic Access (Docker)',\n onClick: () => {\n setShowProgrammaticAccess(true)\n },\n tooltipText: 'View programmatic options to pull Docker image',\n }\n case DownloadAction.exportTable:\n return {\n text: 'Export Table',\n onClick: () => {\n setShowExportMetadata(true)\n },\n tooltipText: 'Export table data',\n }\n }\n}\n\n/**\n * Determines the tooltip message based on the entity type and its \"add to cart\" status.\n */\nconst getAddToCartTooltip = (\n entityType: EntityType,\n isDisabled: boolean,\n): string => {\n if (!isDisabled) {\n return 'Add file(s) to your download list'\n }\n const entityFriendlyName = entityTypeToFriendlyName(entityType)\n return `This ${entityFriendlyName} has no accessible files`\n}\n\n// Function that returns DropdownMenuItem\nexport function getDownloadActionsForEntityType(\n type: EntityType,\n): DownloadAction[][] {\n switch (type) {\n case EntityType.file:\n case EntityType.recordset:\n return [\n [DownloadAction.downloadFile],\n [DownloadAction.addToCart, DownloadAction.programmaticAccess],\n ]\n case EntityType.project:\n case EntityType.folder:\n return [[DownloadAction.addToCart, DownloadAction.programmaticAccess]]\n case EntityType.dockerrepo:\n return [[DownloadAction.programmaticAccessDocker]]\n case EntityType.entityview:\n case EntityType.dataset:\n return [\n [\n DownloadAction.exportTable,\n DownloadAction.programmaticAccess,\n DownloadAction.addToCart,\n ],\n ]\n case EntityType.datasetcollection:\n case EntityType.table:\n case EntityType.materializedview:\n case EntityType.submissionview:\n case EntityType.virtualtable:\n return [[DownloadAction.exportTable, DownloadAction.programmaticAccess]]\n case EntityType.link:\n return [[DownloadAction.programmaticAccess]]\n case EntityType.searchindex:\n return []\n default:\n // this will fail if a new EntityType is added and not handled\n throw new Error(`Unhandled EntityType: ${type}`)\n }\n}\n\n// get the appropriate version number for download based on entity type\n// for datasets: returns the most recent released version if any exist, undefined otherwise\n// for other entities: returns the current version number\nfunction useGetLatestVersionNumber(entityId: string, entityType: EntityType) {\n // get entity data\n const { data: entityData, isLoading: entityDataLoading } =\n useGetEntity(entityId) // No version = latest\n\n // for datasets, check if any versions exist and use the most recent one\n const mustGetVersion = entityType === EntityType.dataset\n const { data: versionsData, isLoading: versionsLoading } = useGetVersions(\n entityId,\n 0,\n 1,\n {\n enabled: mustGetVersion,\n },\n )\n\n let latestVersionNumber: number | undefined\n\n if (mustGetVersion) {\n // for datasets, check if any versions exist\n if (versionsData?.results && versionsData.results.length > 0) {\n // Use the most recent released version (first in the list, since versions are returned in descending order)\n latestVersionNumber = versionsData.results[0].versionNumber\n } else {\n // no versions exist, use undefined (will use current/draft version)\n latestVersionNumber = undefined\n }\n } else {\n // for non-datasets, use the entity's version number\n latestVersionNumber =\n entityData && isVersionableEntity(entityData)\n ? entityData.versionNumber\n : undefined\n }\n\n const isLoading = entityDataLoading || versionsLoading\n\n return { latestVersionNumber, isLoading }\n}\n\n// create default queryBundleRequest with appropriate SQL\nfunction getDefaultQueryBundleRequestForEntity(\n entityId: string,\n versionNumber: number | undefined,\n entityType: EntityType,\n): QueryBundleRequest {\n let sql: string\n\n if (entityType === EntityType.dataset) {\n // for datasets:\n // - if a version number exists (released version), use it: syn123.5\n // - if no version number (no released versions), use current/draft: syn123\n sql = versionNumber\n ? `SELECT * FROM ${entityId}.${versionNumber}`\n : `SELECT * FROM ${entityId}`\n } else {\n // For non-datasets, always use entity ID without version\n sql = `SELECT * FROM ${entityId}`\n }\n\n return {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: `${entityId}`,\n query: {\n sql: sql,\n },\n partMask: 0,\n }\n}\n\nexport function EntityDownloadButton(props: {\n entityId: string\n name: string\n entityType: EntityType\n downloadConfirmationContainer?: RefObject<HTMLElement | null>\n disabled?: boolean\n}) {\n // get the appropriate version number for the entity\n const { latestVersionNumber } = useGetLatestVersionNumber(\n props.entityId,\n props.entityType,\n )\n // create queryBundleRequest with appropriate SQL based on entity type and version\n const defaultQueryBundleRequest = getDefaultQueryBundleRequestForEntity(\n props.entityId,\n latestVersionNumber,\n props.entityType,\n )\n\n // Get context and download functionality\n const { downloadCartPageUrl, isAuthenticated } = useSynapseContext()\n const { mutate: addFileToDownloadList } = useAddFileToDownloadList({\n onSuccess: data => {\n if (data.numberOfFilesAdded > 0) {\n displayFilesWereAddedToDownloadListSuccess(downloadCartPageUrl)\n } else {\n displayToast('0 Files added to your Download List', 'info')\n }\n },\n onError: error => {\n displayToast(error.reason, 'danger')\n },\n })\n\n // state to manage programmatic access modal visibility\n const [showProgrammaticAccess, setShowProgrammaticAccess] =\n useState<boolean>(false)\n\n // state to manage download confirmation visibility and loading\n const [showDownloadConfirmation, setShowDownloadConfirmation] =\n useState<boolean>(false)\n const [downloadConfirmationLoading, setDownloadConfirmationLoading] =\n useState<boolean>(false)\n\n const handleCloseProgrammaticAccess = () => {\n setShowProgrammaticAccess(false)\n }\n\n const isFolderOrProject = isContainerType(props.entityType)\n\n const {\n data: folderOrProjectStats,\n isLoading: isLoadingFolderOrProjectStats,\n } = useGetAddToDownloadListStats(\n {\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListStatsRequest',\n request: {\n parentId: props.entityId,\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListRequest',\n recursive: true,\n },\n },\n {\n enabled: isFolderOrProject,\n },\n )\n\n const folderOrProjectHasNoFiles =\n isFolderOrProject &&\n (isLoadingFolderOrProjectStats || folderOrProjectStats?.fileCount === 0)\n\n const { data: entityData } = useGetEntity(props.entityId)\n\n const { downloadFile } = useDirectDownloadHandler()\n\n const fileHandleId =\n entityData && isFileEntity(entityData)\n ? entityData.dataFileHandleId\n : undefined\n\n const onDownloadFile = fileHandleId\n ? () => {\n void downloadFile({\n fileHandleId,\n associatedObjectId: props.entityId,\n associatedObjectType: FileHandleAssociateType.FileEntity,\n })\n }\n : undefined\n\n const entityViewHasNoFiles =\n entityData && isEntityView(entityData) && !hasFilesInView(entityData)\n\n const datasetHasNoFiles =\n entityData &&\n isDataset(entityData) &&\n (!entityData.items || entityData.items.length === 0)\n\n const addToCartDisabled =\n folderOrProjectHasNoFiles || entityViewHasNoFiles || datasetHasNoFiles\n\n // state to manage export metadata modal visibility\n const [showExportMetadata, setShowExportMetadata] = useState<boolean>(false)\n\n const handleCloseExportMetadata = () => {\n setShowExportMetadata(false)\n }\n\n // Create download menu items\n const downloadActions = getDownloadActionsForEntityType(props.entityType)\n const downloadMenuItems = downloadActions.map(actionGroup =>\n actionGroup.map(action =>\n getMenuItemForAction(\n props.entityId,\n props.name,\n props.entityType,\n action,\n setShowProgrammaticAccess,\n setShowExportMetadata,\n addFileToDownloadList,\n setShowDownloadConfirmation,\n latestVersionNumber,\n addToCartDisabled,\n onDownloadFile,\n isAuthenticated,\n ),\n ),\n )\n\n // Return programmatic access modal content\n const { cliCode, rCode, pythonCode } = getProgrammaticAccessCode(\n props.entityType,\n props.entityId,\n latestVersionNumber,\n )\n\n const downloadConfirmation = showDownloadConfirmation ? (\n <EntityDownloadConfirmation\n entityId={props.entityId}\n handleClose={() => setShowDownloadConfirmation(false)}\n onIsLoadingChange={setDownloadConfirmationLoading}\n />\n ) : null\n\n return (\n <>\n <DropdownMenu\n items={downloadMenuItems}\n dropdownButtonText=\"Download\"\n buttonTooltip=\"Download options for this entity\"\n buttonProps={{\n variant: 'outlined',\n startIcon: <DownloadIcon />,\n disabled: props.disabled || downloadConfirmationLoading,\n }}\n />\n {downloadConfirmation &&\n (props.downloadConfirmationContainer?.current\n ? createPortal(\n downloadConfirmation,\n props.downloadConfirmationContainer.current,\n )\n : downloadConfirmation)}\n <ProgrammaticInstructionsModal\n show={showProgrammaticAccess}\n title={`Programmatic Access: ${props.name}`}\n onClose={handleCloseProgrammaticAccess}\n pythonCode={pythonCode}\n rCode={rCode}\n cliCode={cliCode}\n helpUrl=\"https://help.synapse.org/docs/Synapse-Docker-Registry.2011037752.html#SynapseDockerRegistry-UsingDockerImagesStoredintheSynapseDockerRegistry\"\n />\n {showExportMetadata && (\n <ModalDownload\n queryBundleRequest={defaultQueryBundleRequest}\n onClose={handleCloseExportMetadata}\n />\n )}\n </>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityDownloadButton.js","names":[],"sources":["../../../src/components/EntityDownloadButton/EntityDownloadButton.tsx"],"sourcesContent":["import { useGetEntity, useGetVersions } from '@/synapse-queries'\nimport {\n useAddFileToDownloadList,\n useGetAddToDownloadListStats,\n} from '@/synapse-queries/index'\nimport { useSynapseContext } from '@/utils'\nimport {\n entityTypeToFriendlyName,\n hasFilesInView,\n isContainerType,\n isDataset,\n isEntityView,\n isVersionableEntity,\n} from '@/utils/functions/EntityTypeUtils'\nimport { useDirectDownloadHandler } from '@/utils/hooks/useDirectDownloadHandler'\nimport { isFileEntity } from '@/utils/types/IsType'\nimport DownloadIcon from '@mui/icons-material/DownloadOutlined'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n FileHandleAssociateType,\n QueryBundleRequest,\n} from '@sage-bionetworks/synapse-types'\nimport { RefObject, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { displayFilesWereAddedToDownloadListSuccess } from '../download_list/DownloadConfirmationUtils'\nimport { EntityDownloadConfirmation } from '../EntityDownloadConfirmation'\nimport { DropdownMenu, DropdownMenuItem } from '../menu/DropdownMenu'\nimport { ModalDownload } from '../ModalDownload/ModalDownload'\nimport { ProgrammaticInstructionsModal } from '../ProgrammaticInstructionsModal/ProgrammaticInstructionsModal'\nimport { displayToast } from '../ToastMessage/index'\n\n// WIP\n// Per Nick Grosenbacher: For this to be reusable, I think we would also need to accept versionNumber as a prop. Where we would have the following behavior:\n// - If the version number is present, use it\n// - If the version number is null, do not use it,\n// - If the version number is undefined, then we would try to do the 'smart' thing-- get the latest version for datasets, otherwise don't use it.\n\n// Have to keep these consts outside of getProgrammaticAccessCode because\n// they are being called in ProgrammaticTableDownload.tsx\n// Python client import and login instructions\nexport const PYTHON_CLIENT_IMPORT_AND_LOGIN = `import synapseclient\nsyn = synapseclient.Synapse()\nsyn.login(authToken=\"YOUR_TOKEN_HERE\")`\n\n// R client import and login instructions\nexport const R_CLIENT_IMPORT_AND_LOGIN = `library(synapser)\nsynLogin(authToken=\"YOUR_TOKEN_HERE\")`\n\ntype ProgrammaticAccessCode = {\n cliCode: string | undefined\n rCode: string | undefined\n pythonCode: string | undefined\n}\n\n// Generate programmatic access code snippet content based on entity type\nexport function getProgrammaticAccessCode(\n type: EntityType,\n entityId: string,\n version: number | undefined,\n): ProgrammaticAccessCode {\n const id =\n type === EntityType.dataset && version ? `${entityId}.${version}` : entityId\n switch (type) {\n case EntityType.file:\n case EntityType.folder:\n case EntityType.project:\n case EntityType.link:\n return {\n cliCode: `synapse get -r ${entityId}`,\n rCode: `${R_CLIENT_IMPORT_AND_LOGIN} \\n\n# Download file\nsynGet('${entityId}')`,\n pythonCode: `${PYTHON_CLIENT_IMPORT_AND_LOGIN} \\n\n# Download file\nsyn.get('${entityId}')`,\n }\n case EntityType.dockerrepo:\n return {\n cliCode: `docker login -u <synapse username> -p <synapse password> docker.synapse.org \\n\ndocker pull docker.synapse.org/${entityId}/myrepo`,\n rCode: undefined,\n pythonCode: undefined,\n }\n case EntityType.dataset:\n case EntityType.entityview:\n case EntityType.datasetcollection:\n case EntityType.table:\n case EntityType.materializedview:\n case EntityType.submissionview:\n case EntityType.virtualtable:\n case EntityType.recordset:\n return {\n cliCode: `synapse get -q \"SELECT * FROM ${id}\"`,\n rCode: `${R_CLIENT_IMPORT_AND_LOGIN} \\n\nquery <- synTableQuery(\"SELECT * FROM ${id}\")\nread.table(query$filepath, sep=\",\")`,\n pythonCode: `${PYTHON_CLIENT_IMPORT_AND_LOGIN} \\n\nquery = syn.tableQuery(\"SELECT * FROM ${id}\")\nquery.asDataFrame()`,\n }\n case EntityType.searchindex:\n return {\n cliCode: undefined,\n rCode: undefined,\n pythonCode: undefined,\n }\n default:\n throw new Error(`Unhandled EntityType: ${type}`)\n }\n}\n\nenum DownloadAction {\n downloadFile,\n addToCart,\n programmaticAccess,\n programmaticAccessDocker,\n exportTable,\n}\n\n// Function that creates menu items for download actions\nfunction getMenuItemForAction(\n entityId: string,\n entityName: string,\n entityType: EntityType,\n downloadAction: DownloadAction,\n setShowProgrammaticAccess: (show: boolean) => void,\n setShowExportMetadata: (show: boolean) => void,\n addFileToDownloadList: (params: {\n entityId: string\n entityVersionNumber: number | undefined\n }) => void,\n setShowDownloadConfirmation: (show: boolean) => void,\n versionNumber?: number,\n addToCartDisabled?: boolean,\n onDownloadFile?: () => void,\n isAuthenticated?: boolean,\n): DropdownMenuItem {\n switch (downloadAction) {\n case DownloadAction.downloadFile:\n return {\n text: 'Download File',\n onClick: () => {\n if (onDownloadFile) onDownloadFile()\n },\n tooltipText: isAuthenticated\n ? 'Download this file directly'\n : 'Sign in to download this file',\n disabled: !isAuthenticated,\n }\n case DownloadAction.addToCart:\n return {\n text: 'Add to Download List',\n disabled: addToCartDisabled,\n tooltipText: getAddToCartTooltip(entityType, !!addToCartDisabled),\n onClick: () => {\n if (\n entityType === EntityType.file ||\n entityType === EntityType.recordset\n ) {\n addFileToDownloadList({\n entityId,\n entityVersionNumber: versionNumber,\n })\n } else {\n setShowDownloadConfirmation(true)\n }\n },\n }\n case DownloadAction.programmaticAccess:\n return {\n text: 'Programmatic Access',\n onClick: () => {\n setShowProgrammaticAccess(true)\n },\n tooltipText: 'View programmatic access options',\n }\n case DownloadAction.programmaticAccessDocker:\n return {\n text: 'Programmatic Access (Docker)',\n onClick: () => {\n setShowProgrammaticAccess(true)\n },\n tooltipText: 'View programmatic options to pull Docker image',\n }\n case DownloadAction.exportTable:\n return {\n text: 'Export Table',\n onClick: () => {\n setShowExportMetadata(true)\n },\n tooltipText: 'Export table data',\n }\n }\n}\n\n/**\n * Determines the tooltip message based on the entity type and its \"add to cart\" status.\n */\nconst getAddToCartTooltip = (\n entityType: EntityType,\n isDisabled: boolean,\n): string => {\n if (!isDisabled) {\n return 'Add file(s) to your download list'\n }\n const entityFriendlyName = entityTypeToFriendlyName(entityType)\n return `This ${entityFriendlyName} has no accessible files`\n}\n\n// Function that returns DropdownMenuItem\nexport function getDownloadActionsForEntityType(\n type: EntityType,\n): DownloadAction[][] {\n switch (type) {\n case EntityType.file:\n case EntityType.recordset:\n return [\n [DownloadAction.downloadFile],\n [DownloadAction.addToCart, DownloadAction.programmaticAccess],\n ]\n case EntityType.project:\n case EntityType.folder:\n return [[DownloadAction.addToCart, DownloadAction.programmaticAccess]]\n case EntityType.dockerrepo:\n return [[DownloadAction.programmaticAccessDocker]]\n case EntityType.entityview:\n case EntityType.dataset:\n return [\n [\n DownloadAction.exportTable,\n DownloadAction.programmaticAccess,\n DownloadAction.addToCart,\n ],\n ]\n case EntityType.datasetcollection:\n case EntityType.table:\n case EntityType.materializedview:\n case EntityType.submissionview:\n case EntityType.virtualtable:\n return [[DownloadAction.exportTable, DownloadAction.programmaticAccess]]\n case EntityType.link:\n return [[DownloadAction.programmaticAccess]]\n case EntityType.searchindex:\n return []\n default:\n // this will fail if a new EntityType is added and not handled\n throw new Error(`Unhandled EntityType: ${type}`)\n }\n}\n\n// get the appropriate version number for download based on entity type\n// for datasets: returns the most recent released version if any exist, undefined otherwise\n// for other entities: returns the current version number\nfunction useGetLatestVersionNumber(entityId: string, entityType: EntityType) {\n // get entity data\n const { data: entityData, isLoading: entityDataLoading } =\n useGetEntity(entityId) // No version = latest\n\n // for datasets, check if any versions exist and use the most recent one\n const mustGetVersion = entityType === EntityType.dataset\n const { data: versionsData, isLoading: versionsLoading } = useGetVersions(\n entityId,\n 0,\n 1,\n {\n enabled: mustGetVersion,\n },\n )\n\n let latestVersionNumber: number | undefined\n\n if (mustGetVersion) {\n // for datasets, check if any versions exist\n if (versionsData?.results && versionsData.results.length > 0) {\n // Use the most recent released version (first in the list, since versions are returned in descending order)\n latestVersionNumber = versionsData.results[0].versionNumber\n } else {\n // no versions exist, use undefined (will use current/draft version)\n latestVersionNumber = undefined\n }\n } else {\n // for non-datasets, use the entity's version number\n latestVersionNumber =\n entityData && isVersionableEntity(entityData)\n ? entityData.versionNumber\n : undefined\n }\n\n const isLoading = entityDataLoading || versionsLoading\n\n return { latestVersionNumber, isLoading }\n}\n\n// create default queryBundleRequest with appropriate SQL\nfunction getDefaultQueryBundleRequestForEntity(\n entityId: string,\n versionNumber: number | undefined,\n entityType: EntityType,\n): QueryBundleRequest {\n let sql: string\n\n if (entityType === EntityType.dataset) {\n // for datasets:\n // - if a version number exists (released version), use it: syn123.5\n // - if no version number (no released versions), use current/draft: syn123\n sql = versionNumber\n ? `SELECT * FROM ${entityId}.${versionNumber}`\n : `SELECT * FROM ${entityId}`\n } else {\n // For non-datasets, always use entity ID without version\n sql = `SELECT * FROM ${entityId}`\n }\n\n return {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId: `${entityId}`,\n query: {\n sql: sql,\n },\n partMask: 0,\n }\n}\n\nexport function EntityDownloadButton(props: {\n entityId: string\n name: string\n entityType: EntityType\n downloadConfirmationContainer?: RefObject<HTMLElement | null>\n disabled?: boolean\n}) {\n // get the appropriate version number for the entity\n const { latestVersionNumber } = useGetLatestVersionNumber(\n props.entityId,\n props.entityType,\n )\n // create queryBundleRequest with appropriate SQL based on entity type and version\n const defaultQueryBundleRequest = getDefaultQueryBundleRequestForEntity(\n props.entityId,\n latestVersionNumber,\n props.entityType,\n )\n\n // Get context and download functionality\n const { downloadCartPageUrl, isAuthenticated } = useSynapseContext()\n const { mutate: addFileToDownloadList } = useAddFileToDownloadList({\n onSuccess: data => {\n if (data.numberOfFilesAdded > 0) {\n displayFilesWereAddedToDownloadListSuccess(downloadCartPageUrl)\n } else {\n displayToast('0 Files added to your Download List', 'info')\n }\n },\n onError: error => {\n displayToast(error.reason, 'danger')\n },\n })\n\n // state to manage programmatic access modal visibility\n const [showProgrammaticAccess, setShowProgrammaticAccess] =\n useState<boolean>(false)\n\n // state to manage download confirmation visibility and loading\n const [showDownloadConfirmation, setShowDownloadConfirmation] =\n useState<boolean>(false)\n const [downloadConfirmationLoading, setDownloadConfirmationLoading] =\n useState<boolean>(false)\n\n const handleCloseProgrammaticAccess = () => {\n setShowProgrammaticAccess(false)\n }\n\n const isFolderOrProject = isContainerType(props.entityType)\n\n const {\n data: folderOrProjectStats,\n isLoading: isLoadingFolderOrProjectStats,\n } = useGetAddToDownloadListStats(\n {\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListStatsRequest',\n request: {\n parentId: props.entityId,\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListRequest',\n recursive: true,\n },\n },\n {\n enabled: isFolderOrProject,\n },\n )\n\n const folderOrProjectHasNoFiles =\n isFolderOrProject &&\n (isLoadingFolderOrProjectStats || folderOrProjectStats?.fileCount === 0)\n\n const { data: entityData } = useGetEntity(props.entityId)\n\n const { downloadFile } = useDirectDownloadHandler()\n\n const fileHandleId =\n entityData && isFileEntity(entityData)\n ? entityData.dataFileHandleId\n : undefined\n\n const onDownloadFile = fileHandleId\n ? () => {\n void downloadFile({\n fileHandleId,\n associatedObjectId: props.entityId,\n associatedObjectType: FileHandleAssociateType.FileEntity,\n })\n }\n : undefined\n\n const entityViewHasNoFiles =\n entityData && isEntityView(entityData) && !hasFilesInView(entityData)\n\n const datasetHasNoFiles =\n entityData &&\n isDataset(entityData) &&\n (!entityData.items || entityData.items.length === 0)\n\n const addToCartDisabled =\n folderOrProjectHasNoFiles || entityViewHasNoFiles || datasetHasNoFiles\n\n // state to manage export metadata modal visibility\n const [showExportMetadata, setShowExportMetadata] = useState<boolean>(false)\n\n const handleCloseExportMetadata = () => {\n setShowExportMetadata(false)\n }\n\n // Create download menu items\n const downloadActions = getDownloadActionsForEntityType(props.entityType)\n const downloadMenuItems = downloadActions.map(actionGroup =>\n actionGroup.map(action =>\n getMenuItemForAction(\n props.entityId,\n props.name,\n props.entityType,\n action,\n setShowProgrammaticAccess,\n setShowExportMetadata,\n addFileToDownloadList,\n setShowDownloadConfirmation,\n latestVersionNumber,\n addToCartDisabled,\n onDownloadFile,\n isAuthenticated,\n ),\n ),\n )\n\n // Return programmatic access modal content\n const { cliCode, rCode, pythonCode } = getProgrammaticAccessCode(\n props.entityType,\n props.entityId,\n latestVersionNumber,\n )\n\n const downloadConfirmation = showDownloadConfirmation ? (\n <EntityDownloadConfirmation\n entityId={props.entityId}\n handleClose={() => setShowDownloadConfirmation(false)}\n onIsLoadingChange={setDownloadConfirmationLoading}\n />\n ) : null\n\n return (\n <>\n <DropdownMenu\n items={downloadMenuItems}\n dropdownButtonText=\"Download\"\n buttonTooltip=\"Download options for this entity\"\n buttonProps={{\n variant: 'outlined',\n startIcon: <DownloadIcon />,\n disabled: props.disabled || downloadConfirmationLoading,\n }}\n />\n {downloadConfirmation &&\n (props.downloadConfirmationContainer?.current\n ? createPortal(\n downloadConfirmation,\n props.downloadConfirmationContainer.current,\n )\n : downloadConfirmation)}\n <ProgrammaticInstructionsModal\n show={showProgrammaticAccess}\n title={`Programmatic Access: ${props.name}`}\n onClose={handleCloseProgrammaticAccess}\n pythonCode={pythonCode}\n rCode={rCode}\n cliCode={cliCode}\n helpUrl=\"https://help.synapse.org/docs/Synapse-Docker-Registry.2011037752.html#SynapseDockerRegistry-UsingDockerImagesStoredintheSynapseDockerRegistry\"\n />\n {showExportMetadata && (\n <ModalDownload\n queryBundleRequest={defaultQueryBundleRequest}\n onClose={handleCloseExportMetadata}\n />\n )}\n </>\n )\n}\n"],"mappings":"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"}
|
|
@@ -9,24 +9,24 @@ import { useEffect as o, useMemo as s } from "react";
|
|
|
9
9
|
import { jsx as c } from "react/jsx-runtime";
|
|
10
10
|
import { EntityType as l } from "@sage-bionetworks/synapse-client";
|
|
11
11
|
//#region src/components/EntityDownloadConfirmation/EntityDownloadConfirmation.tsx
|
|
12
|
-
var u = [
|
|
12
|
+
var u = new Set([
|
|
13
13
|
l.project,
|
|
14
14
|
l.folder,
|
|
15
15
|
l.dataset,
|
|
16
16
|
l.datasetcollection
|
|
17
|
-
], d = [l.entityview], f = [l.dataset, l.datasetcollection];
|
|
17
|
+
]), d = new Set([l.entityview]), f = new Set([l.dataset, l.datasetcollection]);
|
|
18
18
|
function p({ entityId: l, versionNumber: p, handleClose: m, onIsLoadingChange: h }) {
|
|
19
19
|
let { isAuthenticated: g } = n(), { data: _, isLoading: v } = r(g ? l : void 0), y = _?.concreteType ? e(_.concreteType) : void 0;
|
|
20
20
|
o(() => {
|
|
21
21
|
h(v);
|
|
22
22
|
}, [v, h]);
|
|
23
|
-
let b = s(() => y ? d.
|
|
23
|
+
let b = s(() => y ? d.has(y) ? {
|
|
24
24
|
concreteType: "org.sagebionetworks.repo.model.download.AddToDownloadListRequest",
|
|
25
25
|
query: { sql: `select * from ${l}${p == null ? "" : `.${p}`}` }
|
|
26
|
-
} : u.
|
|
26
|
+
} : u.has(y) ? {
|
|
27
27
|
concreteType: "org.sagebionetworks.repo.model.download.AddToDownloadListRequest",
|
|
28
28
|
parentId: l,
|
|
29
|
-
useVersionNumber: f.
|
|
29
|
+
useVersionNumber: f.has(y),
|
|
30
30
|
recursive: t(y)
|
|
31
31
|
} : null : null, [
|
|
32
32
|
y,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityDownloadConfirmation.js","names":[],"sources":["../../../src/components/EntityDownloadConfirmation/EntityDownloadConfirmation.tsx"],"sourcesContent":["import AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport DownloadConfirmationUI from '@/components/download_list/DownloadConfirmationUI'\nimport {\n convertToEntityType,\n isContainerType,\n} from '@/utils/functions/EntityTypeUtils'\nimport { useSynapseContext } from '@/utils'\nimport {\n AddToDownloadListRequest,\n EntityType,\n} from '@sage-bionetworks/synapse-client'\nimport { useEffect, useMemo } from 'react'\nimport { useGetEntity } from '../../synapse-queries/'\n\n/**\n * Props for the EntityDownloadConfirmation component.\n *\n * @property entityId - The ID of the entity to be added to the download cart.\n */\nexport type EntityDownloadConfirmationProps = {\n entityId: string\n versionNumber?: number\n onIsLoadingChange: (isLoading: boolean) => void\n handleClose: () => void\n}\n\nconst typesToAddToDownloadListWithParentId: EntityType
|
|
1
|
+
{"version":3,"file":"EntityDownloadConfirmation.js","names":[],"sources":["../../../src/components/EntityDownloadConfirmation/EntityDownloadConfirmation.tsx"],"sourcesContent":["import AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport DownloadConfirmationUI from '@/components/download_list/DownloadConfirmationUI'\nimport {\n convertToEntityType,\n isContainerType,\n} from '@/utils/functions/EntityTypeUtils'\nimport { useSynapseContext } from '@/utils'\nimport {\n AddToDownloadListRequest,\n EntityType,\n} from '@sage-bionetworks/synapse-client'\nimport { useEffect, useMemo } from 'react'\nimport { useGetEntity } from '../../synapse-queries/'\n\n/**\n * Props for the EntityDownloadConfirmation component.\n *\n * @property entityId - The ID of the entity to be added to the download cart.\n */\nexport type EntityDownloadConfirmationProps = {\n entityId: string\n versionNumber?: number\n onIsLoadingChange: (isLoading: boolean) => void\n handleClose: () => void\n}\n\nconst typesToAddToDownloadListWithParentId: ReadonlySet<EntityType> = new Set([\n EntityType.project,\n EntityType.folder,\n EntityType.dataset,\n EntityType.datasetcollection,\n])\nconst typesToAddToDownloadListWithQuery: ReadonlySet<EntityType> = new Set([\n EntityType.entityview,\n])\n/** Users expect the specific file version included in the dataset to be added to the cart */\nconst typesWhereFileVersionNumberShouldBeUsed: ReadonlySet<EntityType> =\n new Set([EntityType.dataset, EntityType.datasetcollection])\n\n/**\n * A component that allows users to add an entity to the download cart. It displays a confirmation dialog that displays\n * statistics about the set of items that will be added to the download cart.\n *\n * @param props - The properties for the component.\n * @param props.entityId - The ID of the entity to be added to the download cart.\n *\n * @returns The rendered EntityDownloadConfirmation component.\n */\nexport function EntityDownloadConfirmation({\n entityId,\n versionNumber,\n handleClose,\n onIsLoadingChange,\n}: EntityDownloadConfirmationProps) {\n const { isAuthenticated } = useSynapseContext()\n const { data: entity, isLoading: isLoadingEntity } = useGetEntity(\n isAuthenticated ? entityId : undefined,\n )\n const entityType = entity?.concreteType\n ? convertToEntityType(entity.concreteType)\n : undefined\n\n useEffect(() => {\n onIsLoadingChange(isLoadingEntity)\n }, [isLoadingEntity, onIsLoadingChange])\n\n const addToDownloadListRequest: AddToDownloadListRequest | null =\n useMemo(() => {\n if (!entityType) {\n return null\n }\n if (typesToAddToDownloadListWithQuery.has(entityType)) {\n return {\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListRequest',\n query: {\n sql: `select * from ${entityId}${\n versionNumber != undefined ? `.${versionNumber}` : ''\n }`,\n },\n }\n }\n if (typesToAddToDownloadListWithParentId.has(entityType)) {\n const useVersionNumber =\n typesWhereFileVersionNumberShouldBeUsed.has(entityType)\n return {\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListRequest',\n // TODO: Specify version of dataset/dataset collection (PLFM-9311)\n parentId: entityId,\n useVersionNumber,\n recursive: isContainerType(entityType),\n }\n }\n\n return null\n }, [entityType, entityId, versionNumber])\n\n if (!addToDownloadListRequest) {\n if (!isAuthenticated) {\n return (\n <div>\n <DownloadConfirmationUI\n onAddToDownloadCart={() => {\n // Only displaying UI to prompt sign-in, so no-op is OK\n }}\n onCancel={handleClose}\n />\n </div>\n )\n }\n return null\n }\n\n return (\n <div>\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={handleClose}\n />\n </div>\n )\n}\n\nexport default EntityDownloadConfirmation\n"],"mappings":";;;;;;;;;;;AA0BA,IAAM,IAAgE,IAAI,IAAI;CAC5E,EAAW;CACX,EAAW;CACX,EAAW;CACX,EAAW;AACb,CAAC,GACK,IAA6D,IAAI,IAAI,CACzE,EAAW,UACb,CAAC,GAEK,IACJ,IAAI,IAAI,CAAC,EAAW,SAAS,EAAW,iBAAiB,CAAC;AAW5D,SAAgB,EAA2B,EACzC,aACA,kBACA,gBACA,wBACkC;CAClC,IAAM,EAAE,uBAAoB,EAAkB,GACxC,EAAE,MAAM,GAAQ,WAAW,MAAoB,EACnD,IAAkB,IAAW,KAAA,CAC/B,GACM,IAAa,GAAQ,eACvB,EAAoB,EAAO,YAAY,IACvC,KAAA;CAEJ,QAAgB;EACd,EAAkB,CAAe;CACnC,GAAG,CAAC,GAAiB,CAAiB,CAAC;CAEvC,IAAM,IACJ,QACO,IAGD,EAAkC,IAAI,CAAU,IAC3C;EACL,cACE;EACF,OAAO,EACL,KAAK,iBAAiB,IACpB,KAAiB,OAAkC,KAAtB,IAAI,MAErC;CACF,IAEE,EAAqC,IAAI,CAAU,IAG9C;EACL,cACE;EAEF,UAAU;EACV,kBANA,EAAwC,IAAI,CAM5C;EACA,WAAW,EAAgB,CAAU;CACvC,IAGK,OA1BE,MA2BR;EAAC;EAAY;EAAU;CAAa,CAAC;CAkB1C,OAhBK,IAiBH,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;EAC4B;EAC1B,SAAS;CACV,CAAA,EACE,CAAA,IArBA,IAYE,OAVH,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;EACE,2BAA2B,CAE3B;EACA,UAAU;CACX,CAAA,EACE,CAAA;AAcb"}
|
|
@@ -14,8 +14,8 @@ import { Box as ae, Chip as oe, IconButton as se, InputAdornment as f, Stack as
|
|
|
14
14
|
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
15
15
|
import { EntityType as _ } from "@sage-bionetworks/synapse-client";
|
|
16
16
|
import { useErrorHandler as ue } from "react-error-boundary";
|
|
17
|
-
import de from "@mui/icons-material/
|
|
18
|
-
import fe from "@mui/icons-material/
|
|
17
|
+
import de from "@mui/icons-material/Clear";
|
|
18
|
+
import fe from "@mui/icons-material/Search";
|
|
19
19
|
import { Map as pe } from "immutable";
|
|
20
20
|
import { ReflexContainer as me, ReflexElement as v, ReflexSplitter as he } from "react-reflex";
|
|
21
21
|
import "react-reflex/styles.css";
|
|
@@ -137,7 +137,7 @@ function x({ initialScope: _, projectId: x, initialContainer: S = null, selectMu
|
|
|
137
137
|
slotProps: { input: {
|
|
138
138
|
startAdornment: /* @__PURE__ */ h(f, {
|
|
139
139
|
position: "start",
|
|
140
|
-
children: /* @__PURE__ */ h(
|
|
140
|
+
children: /* @__PURE__ */ h(fe, {})
|
|
141
141
|
}),
|
|
142
142
|
endAdornment: R ? /* @__PURE__ */ h(f, {
|
|
143
143
|
position: "end",
|
|
@@ -148,7 +148,7 @@ function x({ initialScope: _, projectId: x, initialContainer: S = null, selectMu
|
|
|
148
148
|
},
|
|
149
149
|
"aria-label": "Clear Search",
|
|
150
150
|
disabled: !I && !P,
|
|
151
|
-
children: /* @__PURE__ */ h(
|
|
151
|
+
children: /* @__PURE__ */ h(de, {})
|
|
152
152
|
})
|
|
153
153
|
}) : void 0
|
|
154
154
|
} }
|
|
@@ -4,7 +4,7 @@ import { EntityFinderModal as t } from "./EntityFinderModal.js";
|
|
|
4
4
|
import { useState as n } from "react";
|
|
5
5
|
import { IconButton as r } from "@mui/material";
|
|
6
6
|
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
7
|
-
import
|
|
7
|
+
import s from "@mui/icons-material/SearchOutlined";
|
|
8
8
|
//#region src/components/EntityFinder/EntityIdTextField.tsx
|
|
9
9
|
function c(c) {
|
|
10
10
|
let { label: l, value: u, description: d, onChange: f, disabled: p, required: m, entityFinderModalProps: h } = c, [g, _] = n(!1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityIdTextField.js","names":[],"sources":["../../../src/components/EntityFinder/EntityIdTextField.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"EntityIdTextField.js","names":[],"sources":["../../../src/components/EntityFinder/EntityIdTextField.tsx"],"sourcesContent":["import SearchOutlined from '@mui/icons-material/SearchOutlined'\nimport { IconButton } from '@mui/material'\nimport { useState } from 'react'\nimport { TextField } from '../TextField'\nimport { EntityFinderModal, EntityFinderModalProps } from './EntityFinderModal'\n\nexport type EntityIdTextFieldProps = {\n label: string\n value: string\n onChange: (value: string) => void\n description?: string\n disabled?: boolean\n required?: boolean\n entityFinderModalProps: Omit<\n EntityFinderModalProps,\n 'show' | 'onConfirm' | 'onCancel'\n >\n}\n\n/**\n * A text field with an adornment button that opens an EntityFinderModal to select an entity.\n * The selected entity's ID is set as the value of the text field. Users may also type or paste\n * a raw synId.\n */\nfunction EntityIdTextField(props: EntityIdTextFieldProps) {\n const {\n label,\n value,\n description,\n onChange,\n disabled,\n required,\n entityFinderModalProps,\n } = props\n const [showEntityFinder, setShowEntityFinder] = useState(false)\n return (\n <>\n <EntityFinderModal\n show={showEntityFinder}\n onConfirm={selected => {\n onChange(selected[0].targetId)\n setShowEntityFinder(false)\n }}\n onCancel={() => setShowEntityFinder(false)}\n {...entityFinderModalProps}\n />\n <TextField\n label={label}\n description={description}\n type=\"text\"\n fullWidth\n required={required}\n value={value}\n disabled={disabled}\n onChange={e => onChange(e.target.value)}\n slotProps={{\n input: {\n endAdornment: !disabled && (\n <IconButton onClick={() => setShowEntityFinder(true)}>\n <SearchOutlined />\n </IconButton>\n ),\n },\n }}\n />\n </>\n )\n}\n\nexport default EntityIdTextField\n"],"mappings":";;;;;;;;AAwBA,SAAS,EAAkB,GAA+B;CACxD,IAAM,EACJ,UACA,UACA,gBACA,aACA,aACA,aACA,8BACE,GACE,CAAC,GAAkB,KAAuB,EAAS,EAAK;CAC9D,OACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,MAAM;EACN,YAAW,MAAY;GAErB,AADA,EAAS,EAAS,GAAG,QAAQ,GAC7B,EAAoB,EAAK;EAC3B;EACA,gBAAgB,EAAoB,EAAK;EACzC,GAAI;CACL,CAAA,GACD,kBAAC,GAAD;EACS;EACM;EACb,MAAK;EACL,WAAA;EACU;EACH;EACG;EACV,WAAU,MAAK,EAAS,EAAE,OAAO,KAAK;EACtC,WAAW,EACT,OAAO,EACL,cAAc,CAAC,KACb,kBAAC,GAAD;GAAY,eAAe,EAAoB,EAAI;aACjD,kBAAC,GAAD,CAAiB,CAAA;EACP,CAAA,EAEhB,EACF;CACD,CAAA,CACD,EAAA,CAAA;AAEN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsView.d.ts","sourceRoot":"","sources":["../../../../../src/components/EntityFinder/details/view/DetailsView.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EACL,qBAAqB,EAGtB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAIL,UAAU,EACV,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAA;AAQvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAG7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AA4BnE;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B,IAAI,SAAS;IACb,WAAW,eAAe;IAC1B,EAAE,OAAO;IACT,UAAU,cAAc;IACxB,WAAW,eAAe;IAC1B,WAAW,eAAe;IAC1B,oBAAoB,sBAAsB;IAC1C,eAAe,mBAAmB;IAClC,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,4BAA4B,GAAG;IAC5D,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACrC,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,iGAAiG;IACjG,eAAe,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;IAC1C,oBAAoB,CAAC,EAAE,SAAS,CAAA;IAChC,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,oGAAoG;IACpG,gCAAgC,CAAC,EAAE,qBAAqB,CAAA;IACxD,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,kBAAkB,GAAG;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AA2OD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"DetailsView.d.ts","sourceRoot":"","sources":["../../../../../src/components/EntityFinder/details/view/DetailsView.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EACL,qBAAqB,EAGtB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EAIL,UAAU,EACV,YAAY,EAGb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAA;AAQvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAG7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AA4BnE;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B,IAAI,SAAS;IACb,WAAW,eAAe;IAC1B,EAAE,OAAO;IACT,UAAU,cAAc;IACxB,WAAW,eAAe;IAC1B,WAAW,eAAe;IAC1B,oBAAoB,sBAAsB;IAC1C,eAAe,mBAAmB;IAClC,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,4BAA4B,GAAG;IAC5D,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACrC,oCAAoC;IACpC,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,iGAAiG;IACjG,eAAe,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAA;IAC1C,oBAAoB,CAAC,EAAE,SAAS,CAAA;IAChC,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,oGAAoG;IACpG,gCAAgC,CAAC,EAAE,qBAAqB,CAAA;IACxD,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,kBAAkB,GAAG;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AA2OD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA6YlD"}
|
|
@@ -229,7 +229,7 @@ function B(n) {
|
|
|
229
229
|
return !m.has(e.id) && y.includes(n) && v.includes(n);
|
|
230
230
|
}).map(async (n) => {
|
|
231
231
|
let r, a = t(n);
|
|
232
|
-
return f === _.REQUIRED && i(a) && (Object.
|
|
232
|
+
return f === _.REQUIRED && i(a) && (Object.hasOwn(n, "versionNumber") && !F(a, n) && (r = n.versionNumber), !r) && (Y(!0), r = (await U.fetchQuery({
|
|
233
233
|
queryKey: G.getPaginatedEntityVersionsQueryKey(n.id, 1, 0),
|
|
234
234
|
queryFn: () => e(n.id, W, 0, 1)
|
|
235
235
|
})).results[0]?.versionNumber), {
|
|
@@ -282,7 +282,7 @@ function B(n) {
|
|
|
282
282
|
m,
|
|
283
283
|
f,
|
|
284
284
|
v
|
|
285
|
-
]), X = L, Z = !(l || r.
|
|
285
|
+
]), X = L, Z = !(l || r.some((e) => y.includes(t(e)) && v.includes(t(e)))), le = w(() => re({
|
|
286
286
|
setCurrentContainer: V,
|
|
287
287
|
isSelectAllVisible: X,
|
|
288
288
|
isSelectAllDisabled: Z,
|
|
@@ -328,12 +328,12 @@ function B(n) {
|
|
|
328
328
|
count: B ?? Q.getRowModel().rows.length,
|
|
329
329
|
estimateSize: () => 40,
|
|
330
330
|
getScrollElement: () => $.current,
|
|
331
|
-
measureElement: typeof window < "u" && navigator.userAgent.
|
|
331
|
+
measureElement: typeof window < "u" && !navigator.userAgent.includes("Firefox") ? (e) => e?.getBoundingClientRect().height : void 0,
|
|
332
332
|
overscan: 5
|
|
333
333
|
});
|
|
334
334
|
function fe(e) {
|
|
335
335
|
let { id: t, isDisabled: n, isVersionableEntity: r, entityType: i } = e, { currentSelectedVersion: a } = e;
|
|
336
|
-
n || (r && f === _.REQUIRED && a == null && Object.
|
|
336
|
+
n || (r && f === _.REQUIRED && a == null && Object.hasOwn(e, "versionNumber") && (F(i, e) || (a = e.versionNumber)), b({
|
|
337
337
|
targetId: t,
|
|
338
338
|
targetVersionNumber: a
|
|
339
339
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DetailsView.js","names":[],"sources":["../../../../../src/components/EntityFinder/details/view/DetailsView.tsx"],"sourcesContent":["import { getEntityVersions } from '@/synapse-client/SynapseClient'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n getEntityTypeFromHeader,\n isContainerType,\n isTableType,\n isVersionableEntityType,\n} from '@/utils/functions/EntityTypeUtils'\nimport { TABLE_VERSION_IN_PROGRESS } from '@/utils/SynapseConstants'\nimport { Checkbox, Tooltip } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n EntityChildrenRequest,\n EntityHeader,\n Reference,\n} from '@sage-bionetworks/synapse-types'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n CellContext,\n createColumnHelper,\n getCoreRowModel,\n OnChangeFn,\n SortingState,\n Table,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { ReactNode, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n BlockingLoader,\n SynapseSpinner,\n} from '../../../LoadingScreen/LoadingScreen'\nimport ColumnHeader from '../../../TanStackTable/ColumnHeader'\nimport StyledVirtualTanStackTable from '../../../TanStackTable/StyledVirtualTanStackTable'\nimport { useFetchNextPageOnScrollToBottom } from '../../../TanStackTable/useFetchNextPageOnScrollToBottom'\nimport { EntityFinderHeader } from '../../EntityFinderHeader'\nimport { EntitySelectionMapType } from '../../useEntitySelection'\nimport { VersionSelectionType } from '../../VersionSelectionType'\nimport { EntityDetailsListSharedProps } from '../EntityDetailsList'\nimport { AddFileToDownloadListCell } from './table/AddToDownloadListCell'\nimport { CreatedOnCell } from './table/CreatedOnCell'\nimport { EntityBadgeIconsCell } from './table/EntityBadgeIconsCell'\nimport { EntityFinderCheckboxCell } from './table/EntityFinderCheckboxCell'\nimport { EntityFinderVersionCell } from './table/EntityFinderVersionCell'\nimport { EntityTypeCell } from './table/EntityTypeCell'\nimport { FileEntityDirectDownloadCell } from './table/FileEntityDirectDownloadCell'\nimport { FileEntityMD5Cell } from './table/FileEntityMD5Cell'\nimport { FileEntitySizeCell } from './table/FileEntitySizeCell'\nimport { ModifiedByCell } from './table/ModifiedByCell'\nimport { ModifiedOnCell } from './table/ModifiedOnCell'\nimport { VersionColumnHeader } from './VersionColumnHeader'\n\n/**\n * Check if a table type entity has the \"in progress\" version label.\n */\nfunction hasInProgressTableVersion(\n entityType: EntityType,\n header: EntityFinderHeader | EntityFinderTableViewRowData,\n): boolean {\n return (\n isTableType(entityType) &&\n 'versionLabel' in header &&\n header.versionLabel === TABLE_VERSION_IN_PROGRESS\n )\n}\n\n/**\n * Set of all columns that can be shown in the DetailsView\n * Note: Some of these values are used as accessors, so ensure that those columns match the accessor key in the row data\n */\nexport enum DetailsViewColumn {\n NAME = 'name',\n ENTITY_TYPE = 'entityType',\n ID = 'id',\n CREATED_ON = 'createdOn',\n MODIFIED_ON = 'modifiedOn',\n MODIFIED_BY = 'modifiedBy',\n ADD_TO_DOWNLOAD_CART = 'addToDownloadCart',\n DIRECT_DOWNLOAD = 'directDownload',\n SELECTED = 'selected',\n VERSION = 'version',\n SIZE = 'size',\n MD5 = 'md5',\n BADGES = 'badges',\n}\n\nexport type DetailsViewProps = EntityDetailsListSharedProps & {\n entities: EntityFinderHeader[]\n isLoading: boolean\n hasNextPage?: boolean\n fetchNextPage?: () => Promise<unknown>\n isFetchingNextPage?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n sortableColumns?: DetailsViewColumn[]\n /** The current sort of the view. */\n sorting?: SortingState\n /** If enableSorting is true, `setSort` will be invoked when the user tries to change the sort */\n onSortingChange?: OnChangeFn<SortingState>\n noResultsPlaceholder?: ReactNode\n /** We defer to the configuration component to determine this */\n selectAllIsChecked?: boolean\n /** This request object is only used to tell react-query to cancel fetching all children at once. */\n getChildrenInfiniteRequestObject?: EntityChildrenRequest\n /** The total number of entities that can be retrieved */\n totalEntities?: number\n}\n\n/**\n * Describes the shape of the data passed to the BaseTable\n */\nexport type EntityFinderTableViewRowData = EntityFinderHeader & {\n entityId: string\n versionNumber?: number\n entityType: EntityType\n isSelected: boolean\n isDisabled: boolean\n isVersionableEntity: boolean\n currentSelectedVersion?: number\n}\n\nconst columnHelper = createColumnHelper<EntityFinderTableViewRowData>()\n\nfunction NameRenderer(props: {\n context: CellContext<EntityFinderTableViewRowData, string>\n setCurrentContainer?: (containerId: string) => void\n}) {\n const { context, setCurrentContainer } = props\n const { row, getValue } = context\n const rowName = getValue()\n if (setCurrentContainer && isContainerType(row.original.entityType)) {\n return (\n <span\n role=\"link\"\n className=\"EntityFinderTableCellContainerLink\"\n onClick={e => {\n e.stopPropagation()\n setCurrentContainer(row.original.id)\n }}\n >\n <Tooltip title={rowName}>\n <span className=\"nameColumnCell\">{rowName}</span>\n </Tooltip>\n </span>\n )\n } else {\n return (\n <Tooltip title={rowName}>\n <span className=\"nameColumnCell\">{rowName}</span>\n </Tooltip>\n )\n }\n}\n\nfunction SelectAllCheckboxRenderer(props: {\n isVisible: boolean\n disabled: boolean\n checked: boolean\n onSelectAll: () => void\n}) {\n const { isVisible, disabled, checked, onSelectAll } = props\n if (!isVisible) {\n return null\n }\n\n return (\n <Checkbox\n inputProps={{ 'aria-label': 'Select All' }}\n checked={checked}\n disabled={disabled}\n onChange={() => {\n onSelectAll()\n }}\n />\n )\n}\n\nfunction getColumns(opts: {\n setCurrentContainer?: (containerId: string) => void\n isSelectAllVisible: boolean\n isSelectAllDisabled: boolean\n isSelectAllChecked: boolean\n onSelectAll: () => void\n versionSelection: VersionSelectionType\n toggleSelection: (entity: Reference | Reference[]) => void\n setInitialVersion: (entityId: string, version: number) => void\n sortableColumns?: DetailsViewColumn[]\n}) {\n const {\n setCurrentContainer,\n isSelectAllVisible,\n isSelectAllDisabled,\n isSelectAllChecked,\n onSelectAll,\n versionSelection,\n toggleSelection,\n setInitialVersion,\n sortableColumns = [],\n } = opts\n return [\n columnHelper.display({\n id: DetailsViewColumn.SELECTED,\n minSize: 50,\n maxSize: 50,\n size: 50,\n header: () => (\n <SelectAllCheckboxRenderer\n isVisible={isSelectAllVisible}\n disabled={isSelectAllDisabled}\n checked={isSelectAllChecked}\n onSelectAll={onSelectAll}\n />\n ),\n cell: EntityFinderCheckboxCell,\n }),\n\n columnHelper.accessor(DetailsViewColumn.ENTITY_TYPE, {\n minSize: 45,\n maxSize: 45,\n size: 45,\n header: () => null,\n enableResizing: false,\n cell: EntityTypeCell,\n meta: {\n textAlign: 'center',\n },\n }),\n columnHelper.accessor(DetailsViewColumn.NAME, {\n size: 300,\n enableSorting: sortableColumns.includes(DetailsViewColumn.NAME),\n // sortable: sort != null,\n // resizable: true,\n header: props => <ColumnHeader {...props} title={'Name'} />,\n cell: context => (\n <NameRenderer\n context={context}\n setCurrentContainer={setCurrentContainer}\n />\n ),\n enableColumnFilter: false,\n }),\n columnHelper.display({\n id: DetailsViewColumn.BADGES,\n minSize: 75,\n maxSize: 75,\n size: 75,\n header: () => null,\n cell: EntityBadgeIconsCell,\n }),\n columnHelper.accessor(DetailsViewColumn.ID, {\n size: 130,\n header: props => <ColumnHeader {...props} title={'ID'} />,\n minSize: 130,\n enableColumnFilter: false,\n enableSorting: sortableColumns.includes(DetailsViewColumn.ID),\n }),\n columnHelper.display({\n id: DetailsViewColumn.VERSION,\n minSize: 150,\n size: 200,\n header: () => <VersionColumnHeader versionSelection={versionSelection} />,\n cell: context => (\n <EntityFinderVersionCell\n versionSelection={versionSelection}\n toggleSelection={toggleSelection}\n setInitialVersion={setInitialVersion}\n context={context}\n />\n ),\n }),\n columnHelper.accessor(DetailsViewColumn.CREATED_ON, {\n header: props => <ColumnHeader {...props} title={'Created On'} />,\n size: 220,\n minSize: 170,\n cell: CreatedOnCell,\n enableColumnFilter: false,\n enableSorting: sortableColumns.includes(DetailsViewColumn.CREATED_ON),\n }),\n columnHelper.accessor(DetailsViewColumn.MODIFIED_ON, {\n header: props => <ColumnHeader {...props} title={'Modified On'} />,\n size: 220,\n minSize: 170,\n enableColumnFilter: false,\n cell: ModifiedOnCell,\n enableSorting: sortableColumns.includes(DetailsViewColumn.MODIFIED_ON),\n }),\n columnHelper.accessor(DetailsViewColumn.MODIFIED_BY, {\n header: props => <ColumnHeader {...props} title={'Modified By'} />,\n size: 250,\n enableResizing: true,\n cell: ModifiedByCell,\n enableColumnFilter: false,\n enableSorting: sortableColumns.includes(DetailsViewColumn.MODIFIED_BY),\n }),\n columnHelper.display({\n id: DetailsViewColumn.SIZE,\n header: props => <ColumnHeader {...props} title={'Size'} />,\n size: 120,\n minSize: 85,\n enableSorting: false,\n enableResizing: true,\n cell: FileEntitySizeCell,\n }),\n columnHelper.display({\n id: DetailsViewColumn.MD5,\n header: props => <ColumnHeader {...props} title={'MD5'} />,\n size: 200,\n enableSorting: false,\n enableResizing: true,\n cell: FileEntityMD5Cell,\n }),\n columnHelper.display({\n id: DetailsViewColumn.ADD_TO_DOWNLOAD_CART,\n header: () => null,\n size: 45,\n minSize: 45,\n enableSorting: false,\n enableResizing: false,\n cell: AddFileToDownloadListCell,\n }),\n columnHelper.display({\n id: DetailsViewColumn.DIRECT_DOWNLOAD,\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n size: 75,\n minSize: 75,\n enableSorting: false,\n enableResizing: false,\n cell: FileEntityDirectDownloadCell,\n }),\n ]\n}\n\ntype DetailsViewRowAppearance = 'hidden' | 'disabled' | 'selected' | 'default'\n\nconst determineRowAppearance = (args: {\n visibleTypes: EntityType[]\n selectableTypes: EntityType[]\n selected: EntitySelectionMapType\n entity: EntityFinderHeader\n}): DetailsViewRowAppearance => {\n const { visibleTypes, selectableTypes, selected, entity } = args\n if (!visibleTypes.includes(getEntityTypeFromHeader(entity))) {\n return 'hidden'\n } else if (!selectableTypes.includes(getEntityTypeFromHeader(entity))) {\n return 'disabled'\n } else if (selected.has(entity.id)) {\n return 'selected'\n } else {\n return 'default'\n }\n}\n\nconst DEFAULT_HIDDEN_COLUMNS = [DetailsViewColumn.DIRECT_DOWNLOAD]\n\n/**\n * Displays a list of entities in a table.\n *\n * If the list of entities is paginated, the `hasNextPage` prop can be set to indicate that there is more data to load.\n * When the view is ready to load more data, the `fetchNextPage` callback will be invoked. The view is designed to handle\n * an \"infinite scroll\" pattern, so entities should not be removed from the list when loading the next page.\n */\nexport function DetailsView(props: DetailsViewProps) {\n const {\n entities,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage,\n versionSelection,\n selectColumnType,\n selected,\n visibleTypes,\n selectableTypes,\n toggleSelection,\n setInitialVersion,\n enableSorting,\n enableMultiSort,\n sortableColumns,\n sorting,\n onSortingChange,\n noResultsPlaceholder,\n enableSelectAll,\n selectAllIsChecked = false,\n getChildrenInfiniteRequestObject,\n totalEntities,\n setCurrentContainer,\n hiddenColumns = DEFAULT_HIDDEN_COLUMNS,\n } = props\n const queryClient = useQueryClient()\n\n const { accessToken, keyFactory: queryClientKeyFactory } = useSynapseContext()\n\n const showSelectColumn = selectColumnType !== 'none'\n\n const [shouldSelectAll, setShouldSelectAll] = useState(false)\n const [showLoadingScreen, setShowLoadingScreen] = useState(false)\n\n const cancelQuery = () => {\n // It's likely that the user will be throttled by the Synapse backend and may be waiting a\n // noticeable amount of time for the current request, so cancel it (in addition to cancelling future requests)\n void queryClient.cancelQueries({\n queryKey: queryClientKeyFactory.getEntityChildrenQueryKey(\n getChildrenInfiniteRequestObject!,\n true,\n ),\n })\n setShowLoadingScreen(false)\n setShouldSelectAll(false)\n }\n\n useEffect(() => {\n async function handleSelectAll() {\n if (shouldSelectAll) {\n if (hasNextPage && fetchNextPage) {\n // Show the loading screen since we must fetch data (potentially a lot) to finish the task\n setShowLoadingScreen(true)\n if (!isFetchingNextPage) {\n void fetchNextPage()\n // The effect will re-run after fetch completes, and the next page (if it exists) will be fetched.\n }\n } else {\n if (selectAllIsChecked) {\n // All the items are selected, so we will deselect all\n toggleSelection(\n entities\n .filter(e => {\n // Collect just entities that are selected\n // An entity may be in the list and unselected because it isn't of a selectable type\n return selected.has(e.id)\n })\n .map(e => selected.get(e.id)!),\n )\n } else {\n // Not all the items are selected, so we will select all\n toggleSelection(\n await Promise.all(\n entities\n .filter(e => {\n // must filter just selectable types or else any entities of unselectable types will get selected\n const type = getEntityTypeFromHeader(e)\n // also exclude already-selected entities, since we don't want to toggle those\n return (\n !selected.has(e.id) &&\n selectableTypes.includes(type) &&\n visibleTypes.includes(type)\n )\n })\n .map(async e => {\n let latestVersion: number | undefined\n const entityType = getEntityTypeFromHeader(e)\n if (\n versionSelection === VersionSelectionType.REQUIRED &&\n isVersionableEntityType(entityType)\n ) {\n // If VersionSelectionType.REQUIRED, then we need to supply a version with the entity.\n // We may already have the version from the header, but only use it if it's a valid snapshot\n // (table types with \"in progress\" are not valid)\n if (\n Object.prototype.hasOwnProperty.call(\n e,\n 'versionNumber',\n ) &&\n !hasInProgressTableVersion(\n entityType,\n e as EntityHeader,\n )\n ) {\n latestVersion = (e as EntityHeader).versionNumber\n }\n if (!latestVersion) {\n // Failsafe if we didn't get the version in the header. This is rare/unlikely, since the only cases we're sure we don't get versions are:\n // - ProjectHeaders (which are versionless)\n // - Search Results (for which we don't support Select All)\n // - Table types, whose entity headers report the \"in progress\" version rather than the latest stable snapshot\n // For large lists, there's a good chance for this to trigger throttling.\n\n // Show the loading screen since we must fetch data (potentially a lot) to finish the task\n setShowLoadingScreen(true)\n\n const versionsQueryOffset = 0\n const versionsQueryLimit = 1\n const versions = await queryClient.fetchQuery({\n queryKey:\n queryClientKeyFactory.getPaginatedEntityVersionsQueryKey(\n e.id,\n versionsQueryLimit,\n versionsQueryOffset,\n ),\n queryFn: () =>\n getEntityVersions(\n e.id,\n accessToken,\n versionsQueryOffset,\n versionsQueryLimit,\n ),\n })\n // we pick the first version in the list because it is the most recent\n latestVersion = versions.results[0]?.versionNumber\n }\n }\n return {\n targetId: e.id,\n targetVersionNumber: latestVersion,\n }\n }),\n ),\n )\n }\n setShouldSelectAll(false)\n setShowLoadingScreen(false)\n }\n }\n }\n handleSelectAll()\n }, [\n accessToken,\n entities,\n fetchNextPage,\n hasNextPage,\n versionSelection,\n queryClient,\n isFetchingNextPage,\n selectAllIsChecked,\n selectableTypes,\n selected,\n shouldSelectAll,\n toggleSelection,\n visibleTypes,\n queryClientKeyFactory,\n ])\n\n const tableData = useMemo(\n () =>\n entities.reduce((entities: EntityFinderTableViewRowData[], entity) => {\n const appearance = determineRowAppearance({\n visibleTypes,\n selectableTypes,\n selected,\n entity,\n })\n if (appearance !== 'hidden') {\n // only include entities that should not be hidden\n const entityType = getEntityTypeFromHeader(entity)\n\n const currentSelectedVersion = selected.get(\n entity.id,\n )?.targetVersionNumber\n let versionNumber: number | undefined = undefined\n if ('versionNumber' in entity) {\n if (currentSelectedVersion != null) {\n // if a version is selected, the row should show that version's data\n versionNumber = currentSelectedVersion\n } else if (versionSelection === VersionSelectionType.REQUIRED) {\n // if a version is not selected, but version selection is required, the row should show the latest version's data\n // Only use EntityHeader's version if it's a valid snapshot (table types with \"in progress\" are not valid)\n if (!hasInProgressTableVersion(entityType, entity)) {\n versionNumber = entity.versionNumber\n }\n }\n // otherwise, show the current version's data (versionNumber is undefined)\n }\n\n entities.push({\n ...entity,\n entityId: entity.id,\n versionNumber: versionNumber,\n entityType: entityType,\n isSelected: appearance === 'selected',\n isDisabled: appearance === 'disabled',\n isVersionableEntity: isVersionableEntityType(entityType),\n currentSelectedVersion: currentSelectedVersion,\n })\n }\n return entities\n }, []),\n [entities, selectableTypes, selected, versionSelection, visibleTypes],\n )\n\n const isSelectAllVisible = enableSelectAll\n\n // Enabled if there's at least one visible & selectable entity, OR there's a page we haven't fetched\n const isSelectAllDisabled = !(\n hasNextPage ||\n entities.filter(\n e =>\n selectableTypes.includes(getEntityTypeFromHeader(e)) &&\n visibleTypes.includes(getEntityTypeFromHeader(e)),\n ).length > 0\n )\n\n const columns = useMemo(\n () =>\n getColumns({\n setCurrentContainer,\n isSelectAllVisible: isSelectAllVisible,\n isSelectAllDisabled: isSelectAllDisabled,\n isSelectAllChecked: selectAllIsChecked,\n onSelectAll: () => {\n setShouldSelectAll(true)\n },\n versionSelection,\n toggleSelection,\n setInitialVersion,\n sortableColumns,\n }),\n [\n isSelectAllDisabled,\n isSelectAllVisible,\n selectAllIsChecked,\n setCurrentContainer,\n setInitialVersion,\n sortableColumns,\n toggleSelection,\n versionSelection,\n ],\n )\n\n const hideColumnOverrides = useMemo(() => {\n return hiddenColumns.reduce(\n (acc: Partial<Record<DetailsViewColumn, boolean>>, column) => {\n acc[column] = false\n return acc\n },\n {},\n )\n }, [hiddenColumns])\n\n const table: Table<EntityFinderTableViewRowData> =\n useReactTable<EntityFinderTableViewRowData>({\n data: tableData,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n manualSorting: true,\n enableSorting,\n enableMultiSort,\n onSortingChange,\n state: {\n sorting,\n columnVisibility: {\n [DetailsViewColumn.SELECTED]: showSelectColumn,\n [DetailsViewColumn.VERSION]:\n versionSelection !== VersionSelectionType.DISALLOWED,\n [DetailsViewColumn.SIZE]: visibleTypes.includes(EntityType.file),\n [DetailsViewColumn.MD5]: visibleTypes.includes(EntityType.file),\n [DetailsViewColumn.ADD_TO_DOWNLOAD_CART]: visibleTypes.includes(\n EntityType.file,\n ),\n [DetailsViewColumn.DIRECT_DOWNLOAD]: visibleTypes.includes(\n EntityType.file,\n ),\n ...hideColumnOverrides,\n },\n },\n })\n\n const tableContainerRef = useRef<HTMLDivElement>(null)\n\n const rowVirtualizer = useVirtualizer({\n count: totalEntities ?? table.getRowModel().rows.length,\n estimateSize: () => 40, // estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n // measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' &&\n navigator.userAgent.indexOf('Firefox') === -1\n ? element => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n function onRowClick(rowData: EntityFinderTableViewRowData) {\n const { id, isDisabled, isVersionableEntity, entityType } = rowData\n let { currentSelectedVersion } = rowData\n if (!isDisabled) {\n if (\n isVersionableEntity &&\n versionSelection === VersionSelectionType.REQUIRED &&\n currentSelectedVersion == null &&\n Object.prototype.hasOwnProperty.call(rowData, 'versionNumber')\n ) {\n // Only use EntityHeader's version if it's a valid snapshot (table types with \"in progress\" are not valid)\n if (!hasInProgressTableVersion(entityType, rowData)) {\n currentSelectedVersion = rowData.versionNumber\n }\n // Note that here we aren't handling the case where the header doesn't have a version, e.g. a search result\n // That case is actually handled by the VersionRenderer, which has an effect that will toggle the selection after data is fetched.\n }\n\n toggleSelection({\n targetId: id,\n targetVersionNumber: currentSelectedVersion,\n })\n }\n }\n\n //called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useFetchNextPageOnScrollToBottom({\n containerRef: tableContainerRef,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n data: entities,\n })\n\n return (\n <div className=\"EntityFinderDetailsView\">\n <BlockingLoader\n show={showLoadingScreen}\n currentProgress={entities.length}\n totalProgress={totalEntities}\n hintText={\n totalEntities\n ? `${entities.length.toLocaleString()} of ${totalEntities?.toLocaleString()}`\n : `Fetching ${entities.length.toLocaleString()}`\n }\n headlineText={'Fetching selected items'}\n onCancel={cancelQuery}\n />\n {!isLoading && entities.length > 0 && (\n <StyledVirtualTanStackTable<EntityFinderTableViewRowData>\n styledTableContainerProps={{\n className: 'DetailsViewTable',\n ref: tableContainerRef,\n height: '100%',\n }}\n onTableContainerScroll={target =>\n fetchMoreOnBottomReached(target as HTMLDivElement)\n }\n table={table}\n rowVirtualizer={rowVirtualizer}\n slotProps={{\n Tr: ownerState => {\n const { tableRow } = ownerState\n\n return {\n className: `EntityFinderDetailsViewRow`,\n ['aria-selected']: tableRow?.original.isSelected,\n ['aria-disabled']: tableRow?.original.isDisabled,\n onClick: () => {\n if (tableRow) {\n onRowClick(tableRow.original)\n }\n },\n }\n },\n }}\n striped\n />\n )}\n {isLoading && (\n <div className=\"EntityFinderDetailsViewPlaceholder\">\n <SynapseSpinner size={30} />\n </div>\n )}\n {!isLoading && entities.length === 0 && (\n <div className=\"EntityFinderDetailsViewPlaceholder\">\n {noResultsPlaceholder || <div>Empty</div>}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DetailsView.js","names":[],"sources":["../../../../../src/components/EntityFinder/details/view/DetailsView.tsx"],"sourcesContent":["import { getEntityVersions } from '@/synapse-client/SynapseClient'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport {\n getEntityTypeFromHeader,\n isContainerType,\n isTableType,\n isVersionableEntityType,\n} from '@/utils/functions/EntityTypeUtils'\nimport { TABLE_VERSION_IN_PROGRESS } from '@/utils/SynapseConstants'\nimport { Checkbox, Tooltip } from '@mui/material'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n EntityChildrenRequest,\n EntityHeader,\n Reference,\n} from '@sage-bionetworks/synapse-types'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n CellContext,\n createColumnHelper,\n getCoreRowModel,\n OnChangeFn,\n SortingState,\n Table,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { ReactNode, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n BlockingLoader,\n SynapseSpinner,\n} from '../../../LoadingScreen/LoadingScreen'\nimport ColumnHeader from '../../../TanStackTable/ColumnHeader'\nimport StyledVirtualTanStackTable from '../../../TanStackTable/StyledVirtualTanStackTable'\nimport { useFetchNextPageOnScrollToBottom } from '../../../TanStackTable/useFetchNextPageOnScrollToBottom'\nimport { EntityFinderHeader } from '../../EntityFinderHeader'\nimport { EntitySelectionMapType } from '../../useEntitySelection'\nimport { VersionSelectionType } from '../../VersionSelectionType'\nimport { EntityDetailsListSharedProps } from '../EntityDetailsList'\nimport { AddFileToDownloadListCell } from './table/AddToDownloadListCell'\nimport { CreatedOnCell } from './table/CreatedOnCell'\nimport { EntityBadgeIconsCell } from './table/EntityBadgeIconsCell'\nimport { EntityFinderCheckboxCell } from './table/EntityFinderCheckboxCell'\nimport { EntityFinderVersionCell } from './table/EntityFinderVersionCell'\nimport { EntityTypeCell } from './table/EntityTypeCell'\nimport { FileEntityDirectDownloadCell } from './table/FileEntityDirectDownloadCell'\nimport { FileEntityMD5Cell } from './table/FileEntityMD5Cell'\nimport { FileEntitySizeCell } from './table/FileEntitySizeCell'\nimport { ModifiedByCell } from './table/ModifiedByCell'\nimport { ModifiedOnCell } from './table/ModifiedOnCell'\nimport { VersionColumnHeader } from './VersionColumnHeader'\n\n/**\n * Check if a table type entity has the \"in progress\" version label.\n */\nfunction hasInProgressTableVersion(\n entityType: EntityType,\n header: EntityFinderHeader | EntityFinderTableViewRowData,\n): boolean {\n return (\n isTableType(entityType) &&\n 'versionLabel' in header &&\n header.versionLabel === TABLE_VERSION_IN_PROGRESS\n )\n}\n\n/**\n * Set of all columns that can be shown in the DetailsView\n * Note: Some of these values are used as accessors, so ensure that those columns match the accessor key in the row data\n */\nexport enum DetailsViewColumn {\n NAME = 'name',\n ENTITY_TYPE = 'entityType',\n ID = 'id',\n CREATED_ON = 'createdOn',\n MODIFIED_ON = 'modifiedOn',\n MODIFIED_BY = 'modifiedBy',\n ADD_TO_DOWNLOAD_CART = 'addToDownloadCart',\n DIRECT_DOWNLOAD = 'directDownload',\n SELECTED = 'selected',\n VERSION = 'version',\n SIZE = 'size',\n MD5 = 'md5',\n BADGES = 'badges',\n}\n\nexport type DetailsViewProps = EntityDetailsListSharedProps & {\n entities: EntityFinderHeader[]\n isLoading: boolean\n hasNextPage?: boolean\n fetchNextPage?: () => Promise<unknown>\n isFetchingNextPage?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n sortableColumns?: DetailsViewColumn[]\n /** The current sort of the view. */\n sorting?: SortingState\n /** If enableSorting is true, `setSort` will be invoked when the user tries to change the sort */\n onSortingChange?: OnChangeFn<SortingState>\n noResultsPlaceholder?: ReactNode\n /** We defer to the configuration component to determine this */\n selectAllIsChecked?: boolean\n /** This request object is only used to tell react-query to cancel fetching all children at once. */\n getChildrenInfiniteRequestObject?: EntityChildrenRequest\n /** The total number of entities that can be retrieved */\n totalEntities?: number\n}\n\n/**\n * Describes the shape of the data passed to the BaseTable\n */\nexport type EntityFinderTableViewRowData = EntityFinderHeader & {\n entityId: string\n versionNumber?: number\n entityType: EntityType\n isSelected: boolean\n isDisabled: boolean\n isVersionableEntity: boolean\n currentSelectedVersion?: number\n}\n\nconst columnHelper = createColumnHelper<EntityFinderTableViewRowData>()\n\nfunction NameRenderer(props: {\n context: CellContext<EntityFinderTableViewRowData, string>\n setCurrentContainer?: (containerId: string) => void\n}) {\n const { context, setCurrentContainer } = props\n const { row, getValue } = context\n const rowName = getValue()\n if (setCurrentContainer && isContainerType(row.original.entityType)) {\n return (\n <span\n role=\"link\"\n className=\"EntityFinderTableCellContainerLink\"\n onClick={e => {\n e.stopPropagation()\n setCurrentContainer(row.original.id)\n }}\n >\n <Tooltip title={rowName}>\n <span className=\"nameColumnCell\">{rowName}</span>\n </Tooltip>\n </span>\n )\n } else {\n return (\n <Tooltip title={rowName}>\n <span className=\"nameColumnCell\">{rowName}</span>\n </Tooltip>\n )\n }\n}\n\nfunction SelectAllCheckboxRenderer(props: {\n isVisible: boolean\n disabled: boolean\n checked: boolean\n onSelectAll: () => void\n}) {\n const { isVisible, disabled, checked, onSelectAll } = props\n if (!isVisible) {\n return null\n }\n\n return (\n <Checkbox\n inputProps={{ 'aria-label': 'Select All' }}\n checked={checked}\n disabled={disabled}\n onChange={() => {\n onSelectAll()\n }}\n />\n )\n}\n\nfunction getColumns(opts: {\n setCurrentContainer?: (containerId: string) => void\n isSelectAllVisible: boolean\n isSelectAllDisabled: boolean\n isSelectAllChecked: boolean\n onSelectAll: () => void\n versionSelection: VersionSelectionType\n toggleSelection: (entity: Reference | Reference[]) => void\n setInitialVersion: (entityId: string, version: number) => void\n sortableColumns?: DetailsViewColumn[]\n}) {\n const {\n setCurrentContainer,\n isSelectAllVisible,\n isSelectAllDisabled,\n isSelectAllChecked,\n onSelectAll,\n versionSelection,\n toggleSelection,\n setInitialVersion,\n sortableColumns = [],\n } = opts\n return [\n columnHelper.display({\n id: DetailsViewColumn.SELECTED,\n minSize: 50,\n maxSize: 50,\n size: 50,\n header: () => (\n <SelectAllCheckboxRenderer\n isVisible={isSelectAllVisible}\n disabled={isSelectAllDisabled}\n checked={isSelectAllChecked}\n onSelectAll={onSelectAll}\n />\n ),\n cell: EntityFinderCheckboxCell,\n }),\n\n columnHelper.accessor(DetailsViewColumn.ENTITY_TYPE, {\n minSize: 45,\n maxSize: 45,\n size: 45,\n header: () => null,\n enableResizing: false,\n cell: EntityTypeCell,\n meta: {\n textAlign: 'center',\n },\n }),\n columnHelper.accessor(DetailsViewColumn.NAME, {\n size: 300,\n enableSorting: sortableColumns.includes(DetailsViewColumn.NAME),\n // sortable: sort != null,\n // resizable: true,\n header: props => <ColumnHeader {...props} title={'Name'} />,\n cell: context => (\n <NameRenderer\n context={context}\n setCurrentContainer={setCurrentContainer}\n />\n ),\n enableColumnFilter: false,\n }),\n columnHelper.display({\n id: DetailsViewColumn.BADGES,\n minSize: 75,\n maxSize: 75,\n size: 75,\n header: () => null,\n cell: EntityBadgeIconsCell,\n }),\n columnHelper.accessor(DetailsViewColumn.ID, {\n size: 130,\n header: props => <ColumnHeader {...props} title={'ID'} />,\n minSize: 130,\n enableColumnFilter: false,\n enableSorting: sortableColumns.includes(DetailsViewColumn.ID),\n }),\n columnHelper.display({\n id: DetailsViewColumn.VERSION,\n minSize: 150,\n size: 200,\n header: () => <VersionColumnHeader versionSelection={versionSelection} />,\n cell: context => (\n <EntityFinderVersionCell\n versionSelection={versionSelection}\n toggleSelection={toggleSelection}\n setInitialVersion={setInitialVersion}\n context={context}\n />\n ),\n }),\n columnHelper.accessor(DetailsViewColumn.CREATED_ON, {\n header: props => <ColumnHeader {...props} title={'Created On'} />,\n size: 220,\n minSize: 170,\n cell: CreatedOnCell,\n enableColumnFilter: false,\n enableSorting: sortableColumns.includes(DetailsViewColumn.CREATED_ON),\n }),\n columnHelper.accessor(DetailsViewColumn.MODIFIED_ON, {\n header: props => <ColumnHeader {...props} title={'Modified On'} />,\n size: 220,\n minSize: 170,\n enableColumnFilter: false,\n cell: ModifiedOnCell,\n enableSorting: sortableColumns.includes(DetailsViewColumn.MODIFIED_ON),\n }),\n columnHelper.accessor(DetailsViewColumn.MODIFIED_BY, {\n header: props => <ColumnHeader {...props} title={'Modified By'} />,\n size: 250,\n enableResizing: true,\n cell: ModifiedByCell,\n enableColumnFilter: false,\n enableSorting: sortableColumns.includes(DetailsViewColumn.MODIFIED_BY),\n }),\n columnHelper.display({\n id: DetailsViewColumn.SIZE,\n header: props => <ColumnHeader {...props} title={'Size'} />,\n size: 120,\n minSize: 85,\n enableSorting: false,\n enableResizing: true,\n cell: FileEntitySizeCell,\n }),\n columnHelper.display({\n id: DetailsViewColumn.MD5,\n header: props => <ColumnHeader {...props} title={'MD5'} />,\n size: 200,\n enableSorting: false,\n enableResizing: true,\n cell: FileEntityMD5Cell,\n }),\n columnHelper.display({\n id: DetailsViewColumn.ADD_TO_DOWNLOAD_CART,\n header: () => null,\n size: 45,\n minSize: 45,\n enableSorting: false,\n enableResizing: false,\n cell: AddFileToDownloadListCell,\n }),\n columnHelper.display({\n id: DetailsViewColumn.DIRECT_DOWNLOAD,\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n size: 75,\n minSize: 75,\n enableSorting: false,\n enableResizing: false,\n cell: FileEntityDirectDownloadCell,\n }),\n ]\n}\n\ntype DetailsViewRowAppearance = 'hidden' | 'disabled' | 'selected' | 'default'\n\nconst determineRowAppearance = (args: {\n visibleTypes: EntityType[]\n selectableTypes: EntityType[]\n selected: EntitySelectionMapType\n entity: EntityFinderHeader\n}): DetailsViewRowAppearance => {\n const { visibleTypes, selectableTypes, selected, entity } = args\n if (!visibleTypes.includes(getEntityTypeFromHeader(entity))) {\n return 'hidden'\n } else if (!selectableTypes.includes(getEntityTypeFromHeader(entity))) {\n return 'disabled'\n } else if (selected.has(entity.id)) {\n return 'selected'\n } else {\n return 'default'\n }\n}\n\nconst DEFAULT_HIDDEN_COLUMNS = [DetailsViewColumn.DIRECT_DOWNLOAD]\n\n/**\n * Displays a list of entities in a table.\n *\n * If the list of entities is paginated, the `hasNextPage` prop can be set to indicate that there is more data to load.\n * When the view is ready to load more data, the `fetchNextPage` callback will be invoked. The view is designed to handle\n * an \"infinite scroll\" pattern, so entities should not be removed from the list when loading the next page.\n */\nexport function DetailsView(props: DetailsViewProps) {\n const {\n entities,\n isLoading,\n hasNextPage,\n fetchNextPage,\n isFetchingNextPage,\n versionSelection,\n selectColumnType,\n selected,\n visibleTypes,\n selectableTypes,\n toggleSelection,\n setInitialVersion,\n enableSorting,\n enableMultiSort,\n sortableColumns,\n sorting,\n onSortingChange,\n noResultsPlaceholder,\n enableSelectAll,\n selectAllIsChecked = false,\n getChildrenInfiniteRequestObject,\n totalEntities,\n setCurrentContainer,\n hiddenColumns = DEFAULT_HIDDEN_COLUMNS,\n } = props\n const queryClient = useQueryClient()\n\n const { accessToken, keyFactory: queryClientKeyFactory } = useSynapseContext()\n\n const showSelectColumn = selectColumnType !== 'none'\n\n const [shouldSelectAll, setShouldSelectAll] = useState(false)\n const [showLoadingScreen, setShowLoadingScreen] = useState(false)\n\n const cancelQuery = () => {\n // It's likely that the user will be throttled by the Synapse backend and may be waiting a\n // noticeable amount of time for the current request, so cancel it (in addition to cancelling future requests)\n void queryClient.cancelQueries({\n queryKey: queryClientKeyFactory.getEntityChildrenQueryKey(\n getChildrenInfiniteRequestObject!,\n true,\n ),\n })\n setShowLoadingScreen(false)\n setShouldSelectAll(false)\n }\n\n useEffect(() => {\n async function handleSelectAll() {\n if (shouldSelectAll) {\n if (hasNextPage && fetchNextPage) {\n // Show the loading screen since we must fetch data (potentially a lot) to finish the task\n setShowLoadingScreen(true)\n if (!isFetchingNextPage) {\n void fetchNextPage()\n // The effect will re-run after fetch completes, and the next page (if it exists) will be fetched.\n }\n } else {\n if (selectAllIsChecked) {\n // All the items are selected, so we will deselect all\n toggleSelection(\n entities\n .filter(e => {\n // Collect just entities that are selected\n // An entity may be in the list and unselected because it isn't of a selectable type\n return selected.has(e.id)\n })\n .map(e => selected.get(e.id)!),\n )\n } else {\n // Not all the items are selected, so we will select all\n toggleSelection(\n await Promise.all(\n entities\n .filter(e => {\n // must filter just selectable types or else any entities of unselectable types will get selected\n const type = getEntityTypeFromHeader(e)\n // also exclude already-selected entities, since we don't want to toggle those\n return (\n !selected.has(e.id) &&\n selectableTypes.includes(type) &&\n visibleTypes.includes(type)\n )\n })\n .map(async e => {\n let latestVersion: number | undefined\n const entityType = getEntityTypeFromHeader(e)\n if (\n versionSelection === VersionSelectionType.REQUIRED &&\n isVersionableEntityType(entityType)\n ) {\n // If VersionSelectionType.REQUIRED, then we need to supply a version with the entity.\n // We may already have the version from the header, but only use it if it's a valid snapshot\n // (table types with \"in progress\" are not valid)\n if (\n Object.hasOwn(e, 'versionNumber') &&\n !hasInProgressTableVersion(\n entityType,\n e as EntityHeader,\n )\n ) {\n latestVersion = (e as EntityHeader).versionNumber\n }\n if (!latestVersion) {\n // Failsafe if we didn't get the version in the header. This is rare/unlikely, since the only cases we're sure we don't get versions are:\n // - ProjectHeaders (which are versionless)\n // - Search Results (for which we don't support Select All)\n // - Table types, whose entity headers report the \"in progress\" version rather than the latest stable snapshot\n // For large lists, there's a good chance for this to trigger throttling.\n\n // Show the loading screen since we must fetch data (potentially a lot) to finish the task\n setShowLoadingScreen(true)\n\n const versionsQueryOffset = 0\n const versionsQueryLimit = 1\n const versions = await queryClient.fetchQuery({\n queryKey:\n queryClientKeyFactory.getPaginatedEntityVersionsQueryKey(\n e.id,\n versionsQueryLimit,\n versionsQueryOffset,\n ),\n queryFn: () =>\n getEntityVersions(\n e.id,\n accessToken,\n versionsQueryOffset,\n versionsQueryLimit,\n ),\n })\n // we pick the first version in the list because it is the most recent\n latestVersion = versions.results[0]?.versionNumber\n }\n }\n return {\n targetId: e.id,\n targetVersionNumber: latestVersion,\n }\n }),\n ),\n )\n }\n setShouldSelectAll(false)\n setShowLoadingScreen(false)\n }\n }\n }\n handleSelectAll()\n }, [\n accessToken,\n entities,\n fetchNextPage,\n hasNextPage,\n versionSelection,\n queryClient,\n isFetchingNextPage,\n selectAllIsChecked,\n selectableTypes,\n selected,\n shouldSelectAll,\n toggleSelection,\n visibleTypes,\n queryClientKeyFactory,\n ])\n\n const tableData = useMemo(\n () =>\n entities.reduce((entities: EntityFinderTableViewRowData[], entity) => {\n const appearance = determineRowAppearance({\n visibleTypes,\n selectableTypes,\n selected,\n entity,\n })\n if (appearance !== 'hidden') {\n // only include entities that should not be hidden\n const entityType = getEntityTypeFromHeader(entity)\n\n const currentSelectedVersion = selected.get(\n entity.id,\n )?.targetVersionNumber\n let versionNumber: number | undefined = undefined\n if ('versionNumber' in entity) {\n if (currentSelectedVersion != null) {\n // if a version is selected, the row should show that version's data\n versionNumber = currentSelectedVersion\n } else if (versionSelection === VersionSelectionType.REQUIRED) {\n // if a version is not selected, but version selection is required, the row should show the latest version's data\n // Only use EntityHeader's version if it's a valid snapshot (table types with \"in progress\" are not valid)\n if (!hasInProgressTableVersion(entityType, entity)) {\n versionNumber = entity.versionNumber\n }\n }\n // otherwise, show the current version's data (versionNumber is undefined)\n }\n\n entities.push({\n ...entity,\n entityId: entity.id,\n versionNumber: versionNumber,\n entityType: entityType,\n isSelected: appearance === 'selected',\n isDisabled: appearance === 'disabled',\n isVersionableEntity: isVersionableEntityType(entityType),\n currentSelectedVersion: currentSelectedVersion,\n })\n }\n return entities\n }, []),\n [entities, selectableTypes, selected, versionSelection, visibleTypes],\n )\n\n const isSelectAllVisible = enableSelectAll\n\n // Enabled if there's at least one visible & selectable entity, OR there's a page we haven't fetched\n const isSelectAllDisabled = !(\n hasNextPage ||\n entities.some(\n e =>\n selectableTypes.includes(getEntityTypeFromHeader(e)) &&\n visibleTypes.includes(getEntityTypeFromHeader(e)),\n )\n )\n\n const columns = useMemo(\n () =>\n getColumns({\n setCurrentContainer,\n isSelectAllVisible: isSelectAllVisible,\n isSelectAllDisabled: isSelectAllDisabled,\n isSelectAllChecked: selectAllIsChecked,\n onSelectAll: () => {\n setShouldSelectAll(true)\n },\n versionSelection,\n toggleSelection,\n setInitialVersion,\n sortableColumns,\n }),\n [\n isSelectAllDisabled,\n isSelectAllVisible,\n selectAllIsChecked,\n setCurrentContainer,\n setInitialVersion,\n sortableColumns,\n toggleSelection,\n versionSelection,\n ],\n )\n\n const hideColumnOverrides = useMemo(() => {\n return hiddenColumns.reduce(\n (acc: Partial<Record<DetailsViewColumn, boolean>>, column) => {\n acc[column] = false\n return acc\n },\n {},\n )\n }, [hiddenColumns])\n\n const table: Table<EntityFinderTableViewRowData> =\n useReactTable<EntityFinderTableViewRowData>({\n data: tableData,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n manualSorting: true,\n enableSorting,\n enableMultiSort,\n onSortingChange,\n state: {\n sorting,\n columnVisibility: {\n [DetailsViewColumn.SELECTED]: showSelectColumn,\n [DetailsViewColumn.VERSION]:\n versionSelection !== VersionSelectionType.DISALLOWED,\n [DetailsViewColumn.SIZE]: visibleTypes.includes(EntityType.file),\n [DetailsViewColumn.MD5]: visibleTypes.includes(EntityType.file),\n [DetailsViewColumn.ADD_TO_DOWNLOAD_CART]: visibleTypes.includes(\n EntityType.file,\n ),\n [DetailsViewColumn.DIRECT_DOWNLOAD]: visibleTypes.includes(\n EntityType.file,\n ),\n ...hideColumnOverrides,\n },\n },\n })\n\n const tableContainerRef = useRef<HTMLDivElement>(null)\n\n const rowVirtualizer = useVirtualizer({\n count: totalEntities ?? table.getRowModel().rows.length,\n estimateSize: () => 40, // estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n // measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && !navigator.userAgent.includes('Firefox')\n ? element => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n function onRowClick(rowData: EntityFinderTableViewRowData) {\n const { id, isDisabled, isVersionableEntity, entityType } = rowData\n let { currentSelectedVersion } = rowData\n if (!isDisabled) {\n if (\n isVersionableEntity &&\n versionSelection === VersionSelectionType.REQUIRED &&\n currentSelectedVersion == null &&\n Object.hasOwn(rowData, 'versionNumber')\n ) {\n // Only use EntityHeader's version if it's a valid snapshot (table types with \"in progress\" are not valid)\n if (!hasInProgressTableVersion(entityType, rowData)) {\n currentSelectedVersion = rowData.versionNumber\n }\n // Note that here we aren't handling the case where the header doesn't have a version, e.g. a search result\n // That case is actually handled by the VersionRenderer, which has an effect that will toggle the selection after data is fetched.\n }\n\n toggleSelection({\n targetId: id,\n targetVersionNumber: currentSelectedVersion,\n })\n }\n }\n\n //called on scroll and possibly on mount to fetch more data as the user scrolls and reaches bottom of table\n const fetchMoreOnBottomReached = useFetchNextPageOnScrollToBottom({\n containerRef: tableContainerRef,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n data: entities,\n })\n\n return (\n <div className=\"EntityFinderDetailsView\">\n <BlockingLoader\n show={showLoadingScreen}\n currentProgress={entities.length}\n totalProgress={totalEntities}\n hintText={\n totalEntities\n ? `${entities.length.toLocaleString()} of ${totalEntities?.toLocaleString()}`\n : `Fetching ${entities.length.toLocaleString()}`\n }\n headlineText={'Fetching selected items'}\n onCancel={cancelQuery}\n />\n {!isLoading && entities.length > 0 && (\n <StyledVirtualTanStackTable<EntityFinderTableViewRowData>\n styledTableContainerProps={{\n className: 'DetailsViewTable',\n ref: tableContainerRef,\n height: '100%',\n }}\n onTableContainerScroll={target =>\n fetchMoreOnBottomReached(target as HTMLDivElement)\n }\n table={table}\n rowVirtualizer={rowVirtualizer}\n slotProps={{\n Tr: ownerState => {\n const { tableRow } = ownerState\n\n return {\n className: `EntityFinderDetailsViewRow`,\n ['aria-selected']: tableRow?.original.isSelected,\n ['aria-disabled']: tableRow?.original.isDisabled,\n onClick: () => {\n if (tableRow) {\n onRowClick(tableRow.original)\n }\n },\n }\n },\n }}\n striped\n />\n )}\n {isLoading && (\n <div className=\"EntityFinderDetailsViewPlaceholder\">\n <SynapseSpinner size={30} />\n </div>\n )}\n {!isLoading && entities.length === 0 && (\n <div className=\"EntityFinderDetailsViewPlaceholder\">\n {noResultsPlaceholder || <div>Empty</div>}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizedTree.d.ts","sourceRoot":"","sources":["../../../../src/components/EntityFinder/tree/VirtualizedTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"VirtualizedTree.d.ts","sourceRoot":"","sources":["../../../../src/components/EntityFinder/tree/VirtualizedTree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,9 @@ import { cloneDeep as p } from "lodash-es";
|
|
|
14
14
|
import { Skeleton as m, Tooltip as h, Typography as g } from "@mui/material";
|
|
15
15
|
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
16
16
|
import { useQueryClient as b } from "@tanstack/react-query";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
17
|
+
import x from "dayjs";
|
|
18
|
+
import S from "@mui/icons-material/ChevronRight";
|
|
19
|
+
import C from "@mui/icons-material/ExpandMore";
|
|
19
20
|
import { useInView as w } from "react-intersection-observer";
|
|
20
21
|
import T from "react-virtualized-auto-sizer";
|
|
21
22
|
import { VariableSizeTree as E } from "react-vtree";
|
|
@@ -111,12 +112,12 @@ function I(e) {
|
|
|
111
112
|
"modifiedOn" in n && /* @__PURE__ */ y(_, { children: [
|
|
112
113
|
/* @__PURE__ */ v("br", {}),
|
|
113
114
|
/* @__PURE__ */ v("b", { children: "Modified On: " }),
|
|
114
|
-
a(
|
|
115
|
+
a(x(n.modifiedOn))
|
|
115
116
|
] })
|
|
116
117
|
]
|
|
117
118
|
})
|
|
118
119
|
}));
|
|
119
|
-
let U = N ?
|
|
120
|
+
let U = N ? C : S;
|
|
120
121
|
return /* @__PURE__ */ y("div", {
|
|
121
122
|
className: `Node ${E === 0 ? "SelectNode" : "BrowseNode"}`,
|
|
122
123
|
"aria-selected": D,
|