synapse-react-client 4.0.35 → 4.0.37
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 +24 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.js +49 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -0
- package/dist/aridhia-queries/FairFormPayload.d.ts +45 -0
- package/dist/aridhia-queries/FairFormPayload.d.ts.map +1 -0
- package/dist/aridhia-queries/FairFormPayload.js +0 -0
- package/dist/aridhia-queries/TransferType.d.ts +10 -0
- package/dist/aridhia-queries/TransferType.d.ts.map +1 -0
- package/dist/aridhia-queries/TransferType.js +0 -0
- package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
- package/dist/aridhia-queries/index.d.ts +12 -0
- package/dist/aridhia-queries/index.d.ts.map +1 -1
- package/dist/aridhia-queries/index.js +12 -2
- package/dist/aridhia-queries/useAridhiaQuery.d.ts +38 -0
- package/dist/aridhia-queries/useAridhiaQuery.d.ts.map +1 -0
- package/dist/aridhia-queries/useAridhiaQuery.js +78 -0
- package/dist/aridhia-queries/useAridhiaQuery.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.d.ts +6 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.js +13 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetCatalogue.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetSettings.d.ts +6 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetSettings.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetSettings.js +13 -0
- package/dist/aridhia-queries/useGetAridhiaDatasetSettings.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaDictionaries.d.ts +6 -0
- package/dist/aridhia-queries/useGetAridhiaDictionaries.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaDictionaries.js +13 -0
- package/dist/aridhia-queries/useGetAridhiaDictionaries.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaRequests.d.ts +5 -4
- package/dist/aridhia-queries/useGetAridhiaRequests.d.ts.map +1 -1
- package/dist/aridhia-queries/useGetAridhiaRequests.js +11 -18
- package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
- package/dist/aridhia-queries/useGetAridhiaWorkflow.d.ts +13 -0
- package/dist/aridhia-queries/useGetAridhiaWorkflow.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkflow.js +19 -0
- package/dist/aridhia-queries/useGetAridhiaWorkflow.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.d.ts +6 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.js +13 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceLocations.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.d.ts +19 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.js +17 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaceRequestForm.js.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaces.d.ts +6 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaces.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaces.js +19 -0
- package/dist/aridhia-queries/useGetAridhiaWorkspaces.js.map +1 -0
- package/dist/aridhia-queries/useSubmitAridhiaDar.d.ts +27 -0
- package/dist/aridhia-queries/useSubmitAridhiaDar.d.ts.map +1 -0
- package/dist/aridhia-queries/useSubmitAridhiaDar.js +38 -0
- package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -0
- package/dist/assets/icons/emailWithNotification.js +15 -15
- package/dist/assets/icons/emailWithNotification.js.map +1 -1
- package/dist/assets/icons/emailWithNotification.svg +13 -13
- package/dist/components/AccessRequirement/EntityActionsRequired.d.ts +0 -1
- package/dist/components/AccessRequirement/EntityActionsRequired.d.ts.map +1 -1
- package/dist/components/AccessRequirement/EntityActionsRequired.js +3 -6
- package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js +65 -57
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +67 -57
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +33 -32
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +39 -18
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts +32 -0
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js +285 -0
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarAboutStep.d.ts +4 -0
- package/dist/components/Aridhia/DarWizard/DarAboutStep.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarAboutStep.js +17 -0
- package/dist/components/Aridhia/DarWizard/DarAboutStep.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarCompleteStep.d.ts +27 -0
- package/dist/components/Aridhia/DarWizard/DarCompleteStep.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarCompleteStep.js +96 -0
- package/dist/components/Aridhia/DarWizard/DarCompleteStep.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarDestinationStep.d.ts +28 -0
- package/dist/components/Aridhia/DarWizard/DarDestinationStep.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarDestinationStep.js +128 -0
- package/dist/components/Aridhia/DarWizard/DarDestinationStep.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarProjectStep.d.ts +4 -0
- package/dist/components/Aridhia/DarWizard/DarProjectStep.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarProjectStep.js +17 -0
- package/dist/components/Aridhia/DarWizard/DarProjectStep.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts +13 -0
- package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js +23 -0
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +11 -0
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +47 -0
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.d.ts +16 -0
- package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.js +33 -0
- package/dist/components/Aridhia/DarWizard/DarWorkspaceStep.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/useDarDraft.d.ts +32 -0
- package/dist/components/Aridhia/DarWizard/useDarDraft.d.ts.map +1 -0
- package/dist/components/Aridhia/DarWizard/useDarDraft.js +44 -0
- package/dist/components/Aridhia/DarWizard/useDarDraft.js.map +1 -0
- package/dist/components/Aridhia/FairLabelField.d.ts +8 -0
- package/dist/components/Aridhia/FairLabelField.d.ts.map +1 -0
- package/dist/components/Aridhia/FairLabelField.js +13 -0
- package/dist/components/Aridhia/FairLabelField.js.map +1 -0
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +3 -3
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.d.ts +36 -0
- package/dist/components/Aridhia/fairFormToRjsf.d.ts.map +1 -0
- package/dist/components/Aridhia/fairFormToRjsf.js +137 -0
- package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -0
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.d.ts.map +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +2 -2
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
- package/dist/components/CardContainer/CardConfiguration.d.ts +8 -0
- package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
- package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
- package/dist/components/CardContainer/CardContainer.js +1 -1
- package/dist/components/CardContainer/CardContainer.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js +2 -2
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.d.ts.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +3 -3
- package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +1 -1
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
- package/dist/components/ChangePassword/ChangePasswordWithToken.d.ts.map +1 -1
- package/dist/components/ChangePassword/ChangePasswordWithToken.js +58 -23
- package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
- package/dist/components/ChangePassword/useChangePasswordFormState.d.ts.map +1 -1
- package/dist/components/ChangePassword/useChangePasswordFormState.js +13 -3
- package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
- package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js +2 -2
- package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
- package/dist/components/CreateTableViewWizard/TableNameForm.d.ts.map +1 -1
- package/dist/components/CreateTableViewWizard/TableNameForm.js +11 -14
- package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +121 -117
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.js +55 -61
- package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
- package/dist/components/DataGrid/columns/DateTimeColumn.d.ts +21 -1
- package/dist/components/DataGrid/columns/DateTimeColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/DateTimeColumn.js +73 -29
- package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/NumberColumn.d.ts +31 -0
- package/dist/components/DataGrid/columns/NumberColumn.d.ts.map +1 -0
- package/dist/components/DataGrid/columns/NumberColumn.js +27 -0
- package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -0
- package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts +1 -0
- package/dist/components/DataGrid/components/ReorderColumnsButton.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsButton.js +17 -16
- package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts +2 -0
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +104 -65
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/DataGrid/components/contextMenu.d.ts.map +1 -1
- package/dist/components/DataGrid/components/contextMenu.js +15 -15
- package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.js +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithSource.d.ts +1 -5
- package/dist/components/DataGrid/useMergeGridWithSource.d.ts.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithSource.js +21 -28
- package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +55 -51
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/computeDefaultColumnOrder.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js +9 -8
- package/dist/components/DataGrid/utils/computeDefaultColumnOrder.js.map +1 -1
- package/dist/components/DatasetHosting/DatasetDownloadButton.d.ts +40 -0
- package/dist/components/DatasetHosting/DatasetDownloadButton.d.ts.map +1 -0
- package/dist/components/DatasetHosting/DatasetDownloadButton.js +124 -0
- package/dist/components/DatasetHosting/DatasetDownloadButton.js.map +1 -0
- package/dist/components/DatasetHosting/DatasetHosting.d.ts +97 -0
- package/dist/components/DatasetHosting/DatasetHosting.d.ts.map +1 -0
- package/dist/components/DatasetHosting/DatasetHosting.js +64 -0
- package/dist/components/DatasetHosting/DatasetHosting.js.map +1 -0
- package/dist/components/DatasetHosting/DatasetHostingAdornment.d.ts +15 -0
- package/dist/components/DatasetHosting/DatasetHostingAdornment.d.ts.map +1 -0
- package/dist/components/DatasetHosting/DatasetHostingAdornment.js +23 -0
- package/dist/components/DatasetHosting/DatasetHostingAdornment.js.map +1 -0
- package/dist/components/DatasetHosting/index.d.ts +7 -0
- package/dist/components/DatasetHosting/index.d.ts.map +1 -0
- package/dist/components/DatasetHosting/index.js +4 -0
- package/dist/components/DownloadCart/ActionRequiredListItem.d.ts +0 -2
- package/dist/components/DownloadCart/ActionRequiredListItem.d.ts.map +1 -1
- package/dist/components/DownloadCart/ActionRequiredListItem.js +2 -3
- package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.d.ts +1 -2
- package/dist/components/DownloadCart/DownloadCartPage.d.ts.map +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js +49 -49
- package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
- package/dist/components/DownloadCart/DownloadListActionsRequired.d.ts +1 -5
- package/dist/components/DownloadCart/DownloadListActionsRequired.d.ts.map +1 -1
- package/dist/components/DownloadCart/DownloadListActionsRequired.js +5 -6
- package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
- package/dist/components/DownloadCart/RequestDownloadCard.d.ts +0 -2
- package/dist/components/DownloadCart/RequestDownloadCard.d.ts.map +1 -1
- package/dist/components/DownloadCart/RequestDownloadCard.js +28 -32
- package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
- package/dist/components/DownloadCart/TableQueryActionsRequired.d.ts +0 -2
- package/dist/components/DownloadCart/TableQueryActionsRequired.d.ts.map +1 -1
- package/dist/components/DownloadCart/TableQueryActionsRequired.js +7 -8
- package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
- package/dist/components/DownloadCart/index.d.ts +1 -2
- package/dist/components/DownloadCart/index.d.ts.map +1 -1
- package/dist/components/DropdownSelect/DropdownSelect.d.ts.map +1 -1
- package/dist/components/DropdownSelect/DropdownSelect.js +1 -1
- package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
- package/dist/components/EntityFinder/tree/EntityTree.d.ts.map +1 -1
- package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
- package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
- package/dist/components/GenericCard/CardActionButtonStyleContext.d.ts +10 -0
- package/dist/components/GenericCard/CardActionButtonStyleContext.d.ts.map +1 -0
- package/dist/components/GenericCard/CardActionButtonStyleContext.js +10 -0
- package/dist/components/GenericCard/CardActionButtonStyleContext.js.map +1 -0
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +41 -41
- package/dist/components/GenericCard/GenericCardActionButton.d.ts +5 -0
- package/dist/components/GenericCard/GenericCardActionButton.d.ts.map +1 -1
- package/dist/components/GenericCard/GenericCardActionButton.js +28 -11
- package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.d.ts +24 -0
- package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +158 -137
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/JSONArrayEditor/JSONArrayEditor.d.ts.map +1 -1
- package/dist/components/JSONArrayEditor/JSONArrayEditor.js +42 -42
- package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
- package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +9 -0
- package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -0
- package/dist/components/JsonSchemaForm/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.js +15 -13
- package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +5 -0
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -0
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +109 -0
- package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/FieldTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/FieldTemplate.js +6 -6
- package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/DateWidget.d.ts +9 -0
- package/dist/components/JsonSchemaForm/widgets/DateWidget.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm/widgets/DateWidget.js +23 -0
- package/dist/components/JsonSchemaForm/widgets/DateWidget.js.map +1 -0
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.css +1 -1
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.d.ts +3 -2
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.d.ts.map +1 -1
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js +10 -12
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.js +8 -7
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.js.map +1 -1
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.module.scss +12 -2
- package/dist/components/Markdown/MarkdownEditor.js +1 -1
- package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js +46 -46
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderTypes.d.ts +39 -0
- package/dist/components/QueryBuilder/QueryBuilderTypes.d.ts.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderTypes.js +11 -0
- package/dist/components/QueryBuilder/QueryBuilderTypes.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +48 -0
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderTranslation.js +256 -0
- package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -0
- package/dist/components/QueryContext/QueryContext.d.ts +0 -1
- package/dist/components/QueryContext/QueryContext.d.ts.map +1 -1
- package/dist/components/QueryContext/QueryContext.js.map +1 -1
- package/dist/components/QueryWrapper/QueryWrapper.d.ts +0 -1
- package/dist/components/QueryWrapper/QueryWrapper.d.ts.map +1 -1
- package/dist/components/QueryWrapper/QueryWrapper.js +52 -53
- package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.js +4 -11
- package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +1 -1
- package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -2
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +27 -25
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.d.ts +0 -9
- package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.d.ts.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js +23 -31
- package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.d.ts.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js +126 -125
- package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.d.ts.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js +6 -5
- package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +2 -0
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +18 -13
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryWrapper.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js +0 -1
- package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
- package/dist/components/ShareThisPage/ShareThisPage.js +30 -29
- package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
- package/dist/components/StatisticsPlot.d.ts.map +1 -1
- package/dist/components/StatisticsPlot.js +1 -1
- package/dist/components/StatisticsPlot.js.map +1 -1
- package/dist/components/SynapseChat/GridAgentChat.d.ts.map +1 -1
- package/dist/components/SynapseChat/GridAgentChat.js +29 -31
- package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormWrapper.js +1 -1
- package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
- package/dist/components/SynapseHomepageV2/HotdropsAndNews.css +1 -1
- package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.js +9 -9
- package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.js.map +1 -1
- package/dist/components/SynapseHomepageV2/HotdropsAndNews.module.scss +14 -0
- package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTable.d.ts.map +1 -1
- package/dist/components/SynapseTable/SynapseTable.js +2 -1
- 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 +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts +4 -0
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +71 -69
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.d.ts.map +1 -1
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +29 -30
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +4 -0
- package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.js +14 -13
- package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js +4 -4
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.d.ts +7 -0
- package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.js +68 -48
- package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
- package/dist/components/TanStackTable/TableCellRenderer.d.ts.map +1 -1
- package/dist/components/TanStackTable/TableCellRenderer.js +1 -1
- package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
- package/dist/components/TanStackTable/useSyncedTopScrollbar.d.ts +13 -0
- package/dist/components/TanStackTable/useSyncedTopScrollbar.d.ts.map +1 -0
- package/dist/components/TanStackTable/useSyncedTopScrollbar.js +32 -0
- package/dist/components/TanStackTable/useSyncedTopScrollbar.js.map +1 -0
- package/dist/components/TermsAndConditions/TermsAndConditions.js +1 -1
- package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
- package/dist/components/Webhook/CreateWebhookModal.d.ts.map +1 -1
- package/dist/components/Webhook/CreateWebhookModal.js +1 -1
- package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +172 -61
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.d.ts +3 -0
- package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.js +2 -2
- package/dist/components/dataaccess/UserAccessRequestHistory/RouteConstants.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js +11 -9
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +74 -43
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js +2 -2
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js +15 -18
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/entity/metadata/EntityModal.js +1 -1
- package/dist/components/entity/metadata/EntityModal.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js +2 -2
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +144 -140
- package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/menu/DropdownMenu.js +7 -7
- package/dist/components/menu/DropdownMenu.js.map +1 -1
- package/dist/components/row_renderers/Dataset.js +1 -1
- package/dist/components/row_renderers/Dataset.js.map +1 -1
- package/dist/components/styled/LeftRightPanel.d.ts +8 -0
- package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
- package/dist/components/styled/LeftRightPanel.js +10 -1
- package/dist/components/styled/LeftRightPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +5 -5
- package/dist/index.js +174 -171
- package/dist/index.js.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +73 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +119 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -0
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +31 -27
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.js +4 -4
- package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.d.ts +1 -0
- package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js +7 -1
- package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js +6 -2
- package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers.js +72 -69
- package/dist/mocks/msw/handlers.js.map +1 -1
- package/dist/style/components/_all.scss +0 -1
- package/dist/style/components/_cards.scss +4 -2
- package/dist/style/components/_terms-and-conditions.scss +25 -3
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +1 -0
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +3 -0
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/dataaccess/index.js +4 -4
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts +7 -0
- package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/useEDuc.js +11 -3
- package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
- package/dist/synapse-queries/index.js +190 -189
- package/dist/testutils/RjsfFormTestUtils.js +12 -0
- package/dist/testutils/RjsfFormTestUtils.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts +1 -0
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js +2 -2
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts +2 -4
- package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/functions/QueryFilterUtils.js +1 -1
- package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
- package/dist/utils/functions/RegularExpressions.d.ts +10 -0
- package/dist/utils/functions/RegularExpressions.d.ts.map +1 -1
- package/dist/utils/functions/RegularExpressions.js +7 -1
- package/dist/utils/functions/RegularExpressions.js.map +1 -1
- package/dist/utils/functions/SqlFunctions.d.ts.map +1 -1
- package/dist/utils/functions/SqlFunctions.js +20 -4
- package/dist/utils/functions/SqlFunctions.js.map +1 -1
- package/dist/utils/functions/queryUtils.js +1 -1
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/dist/utils/hooks/useDetectSSOCode.d.ts.map +1 -1
- package/dist/utils/hooks/useDetectSSOCode.js +1 -1
- package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
- package/dist/utils/index.js +16 -16
- package/dist/utils/jsonschema/SchemaAnnotationUtils.js +1 -1
- package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +22 -0
- package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -0
- package/dist/utils/jsonschema/collectTopLevelProperties.js +31 -0
- package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -0
- package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
- package/dist/utils/types/IsType.d.ts +4 -1
- package/dist/utils/types/IsType.d.ts.map +1 -1
- package/dist/utils/types/IsType.js +4 -4
- package/dist/utils/types/IsType.js.map +1 -1
- package/dist/utils/types/index.js +2 -2
- package/package.json +5 -5
- package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts +0 -12
- package/dist/components/DataGrid/useMergeGridWithRecordSet.d.ts.map +0 -1
- package/dist/components/DataGrid/useMergeGridWithRecordSet.js +0 -25
- package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +0 -1
- package/dist/style/components/_annotations.scss +0 -110
|
@@ -1,52 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import { SynapseChat as i } from "./SynapseChat.js";
|
|
6
|
-
import a from "../DraggableDialog/DraggableDialog.js";
|
|
1
|
+
import { useChatState as e } from "./useChatState.js";
|
|
2
|
+
import { ForwardRef as t } from "../../assets/illustrations/curie_avatar_head.js";
|
|
3
|
+
import { SynapseChat as n } from "./SynapseChat.js";
|
|
4
|
+
import r from "../DraggableDialog/DraggableDialog.js";
|
|
7
5
|
import "./index.js";
|
|
8
|
-
import { useState as
|
|
9
|
-
import { jsx as
|
|
10
|
-
import { AgentAccessLevel as
|
|
6
|
+
import { useState as i } from "react";
|
|
7
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
8
|
+
import { AgentAccessLevel as o } from "@sage-bionetworks/synapse-types";
|
|
11
9
|
//#region src/components/SynapseChat/GridAgentChat.tsx
|
|
12
|
-
var
|
|
10
|
+
var s = [
|
|
13
11
|
"Help me fill this out",
|
|
14
12
|
"Help me understand this",
|
|
15
13
|
"Find missing fields"
|
|
16
14
|
];
|
|
17
|
-
function
|
|
18
|
-
let [
|
|
19
|
-
return /* @__PURE__ */
|
|
20
|
-
open:
|
|
21
|
-
onClose:
|
|
22
|
-
title:
|
|
23
|
-
children: /* @__PURE__ */
|
|
24
|
-
agentAvatar: /* @__PURE__ */
|
|
15
|
+
function c({ gridSessionId: c, usersReplicaId: l, chatbotName: u = "Grid Assistant", initialMessage: d, open: f, onClose: p, agentRegistrationId: m }) {
|
|
16
|
+
let [h, g] = i(), _ = e(h);
|
|
17
|
+
return /* @__PURE__ */ a(r, {
|
|
18
|
+
open: f,
|
|
19
|
+
onClose: p,
|
|
20
|
+
title: u,
|
|
21
|
+
children: /* @__PURE__ */ a(n, {
|
|
22
|
+
agentAvatar: /* @__PURE__ */ a(t, {
|
|
25
23
|
width: 35,
|
|
26
24
|
height: "auto"
|
|
27
25
|
}),
|
|
28
|
-
agentRegistrationId:
|
|
29
|
-
chatbotName:
|
|
30
|
-
initialMessage:
|
|
26
|
+
agentRegistrationId: m,
|
|
27
|
+
chatbotName: u,
|
|
28
|
+
initialMessage: d,
|
|
31
29
|
sessionContext: {
|
|
32
30
|
concreteType: "org.sagebionetworks.repo.model.agent.GridAgentSessionContext",
|
|
33
|
-
gridSessionId:
|
|
34
|
-
usersReplicaId:
|
|
35
|
-
experimental:
|
|
31
|
+
gridSessionId: c,
|
|
32
|
+
usersReplicaId: l,
|
|
33
|
+
experimental: !0
|
|
36
34
|
},
|
|
37
35
|
textboxPositionOffset: "16px",
|
|
38
36
|
hideTitle: !0,
|
|
39
37
|
showAccessLevelMenu: !1,
|
|
40
|
-
defaultAgentAccessLevel:
|
|
41
|
-
externalSession:
|
|
42
|
-
setExternalSession:
|
|
43
|
-
externalChatState:
|
|
44
|
-
suggestedPrompts:
|
|
45
|
-
allowAttachments:
|
|
38
|
+
defaultAgentAccessLevel: o.WRITE_YOUR_PRIVATE_DATA,
|
|
39
|
+
externalSession: h,
|
|
40
|
+
setExternalSession: g,
|
|
41
|
+
externalChatState: _,
|
|
42
|
+
suggestedPrompts: s,
|
|
43
|
+
allowAttachments: !0
|
|
46
44
|
})
|
|
47
45
|
});
|
|
48
46
|
}
|
|
49
47
|
//#endregion
|
|
50
|
-
export {
|
|
48
|
+
export { c as GridAgentChat, c as default };
|
|
51
49
|
|
|
52
50
|
//# sourceMappingURL=GridAgentChat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridAgentChat.js","names":[],"sources":["../../../src/components/SynapseChat/GridAgentChat.tsx"],"sourcesContent":["import { useChatState } from '@/components/SynapseChat/useChatState'\nimport {\n AgentSession,\n GridAgentSessionContext,\n} from '@sage-bionetworks/synapse-client'\nimport { AgentAccessLevel } from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport DraggableDialog from '../DraggableDialog/DraggableDialog'\nimport { SynapseChat } from './index'\nimport { ReactComponent as CurieAvatarHead } from '@/assets/illustrations/curie_avatar_head.svg'\
|
|
1
|
+
{"version":3,"file":"GridAgentChat.js","names":[],"sources":["../../../src/components/SynapseChat/GridAgentChat.tsx"],"sourcesContent":["import { useChatState } from '@/components/SynapseChat/useChatState'\nimport {\n AgentSession,\n GridAgentSessionContext,\n} from '@sage-bionetworks/synapse-client'\nimport { AgentAccessLevel } from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport DraggableDialog from '../DraggableDialog/DraggableDialog'\nimport { SynapseChat } from './index'\nimport { ReactComponent as CurieAvatarHead } from '@/assets/illustrations/curie_avatar_head.svg'\n\nconst suggestedPrompts = [\n 'Help me fill this out',\n 'Help me understand this',\n 'Find missing fields',\n]\n\nexport type GridAgentChatProps = {\n gridSessionId: string\n usersReplicaId: number\n chatbotName?: string\n initialMessage?: string\n open: boolean\n onClose: () => void\n /** Optional ID to use a different agent registered in Synapse */\n agentRegistrationId?: string\n}\n\nexport function GridAgentChat({\n gridSessionId,\n usersReplicaId,\n chatbotName = 'Grid Assistant',\n initialMessage,\n open,\n onClose,\n agentRegistrationId,\n}: GridAgentChatProps) {\n // Storing state for the chat session here preserves chat history while the dialog is opened and closed.\n const [agentSession, setAgentSession] = useState<AgentSession | undefined>()\n const chatState = useChatState(agentSession)\n\n // Create session context for grid sessions\n const sessionContext: GridAgentSessionContext = {\n concreteType:\n 'org.sagebionetworks.repo.model.agent.GridAgentSessionContext',\n gridSessionId,\n usersReplicaId,\n experimental: true,\n }\n\n return (\n <DraggableDialog open={open} onClose={onClose} title={chatbotName}>\n <SynapseChat\n agentAvatar={<CurieAvatarHead width={35} height=\"auto\" />}\n agentRegistrationId={agentRegistrationId}\n chatbotName={chatbotName}\n initialMessage={initialMessage}\n sessionContext={sessionContext}\n textboxPositionOffset=\"16px\"\n hideTitle={true}\n showAccessLevelMenu={false}\n defaultAgentAccessLevel={AgentAccessLevel.WRITE_YOUR_PRIVATE_DATA}\n // lift state: allow GridAgentChat to control the agent session and interactions\n externalSession={agentSession}\n setExternalSession={setAgentSession}\n externalChatState={chatState}\n suggestedPrompts={suggestedPrompts}\n allowAttachments={true}\n />\n </DraggableDialog>\n )\n}\n\nexport default GridAgentChat\n"],"mappings":";;;;;;;;;AAWA,IAAM,IAAmB;CACvB;CACA;CACA;AACF;AAaA,SAAgB,EAAc,EAC5B,kBACA,mBACA,iBAAc,kBACd,mBACA,SACA,YACA,0BACqB;CAErB,IAAM,CAAC,GAAc,KAAmB,EAAmC,GACrE,IAAY,EAAa,CAAY;CAW3C,OACE,kBAAC,GAAD;EAAuB;EAAe;EAAS,OAAO;YACpD,kBAAC,GAAD;GACE,aAAa,kBAAC,GAAD;IAAiB,OAAO;IAAI,QAAO;GAAQ,CAAA;GACnC;GACR;GACG;GACA,gBAAA;IAdpB,cACE;IACF;IACA;IACA,cAAc;GAUM;GAChB,uBAAsB;GACtB,WAAW;GACX,qBAAqB;GACrB,yBAAyB,EAAiB;GAE1C,iBAAiB;GACjB,oBAAoB;GACpB,mBAAmB;GACD;GAClB,kBAAkB;EACnB,CAAA;CACc,CAAA;AAErB"}
|
|
@@ -37,7 +37,7 @@ var h = class extends s {
|
|
|
37
37
|
let n = {}, r = this.props.dataFileHandleId, i = this.props.submitted, a, s, c;
|
|
38
38
|
if (r) {
|
|
39
39
|
let o = await t.getFileHandleContentFromID(r, e);
|
|
40
|
-
n = JSON.parse(o), i && n
|
|
40
|
+
n = JSON.parse(o), i && n?.metadata && ({formSchemaVersion: a, uiSchemaVersion: s, navSchemaVersion: c} = n.metadata);
|
|
41
41
|
}
|
|
42
42
|
let l = [
|
|
43
43
|
this.getFileEntityDataDereferenced(e, this.props.formSchemaEntityId, a),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseFormWrapper.js","names":[],"sources":["../../../src/components/SynapseForm/SynapseFormWrapper.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { SRC_SIGN_IN_CLASS } from '@/utils/SynapseConstants'\nimport $RefParser from '@apidevtools/json-schema-ref-parser'\nimport { Button } from '@mui/material'\nimport { UiSchema } from '@rjsf/utils'\nimport { FormData } from '@sage-bionetworks/synapse-types'\nimport { get, includes } from 'lodash-es'\nimport { Component } from 'react'\nimport FullWidthAlert from '../FullWidthAlert'\nimport SynapseForm from './SynapseForm'\nimport { getFileEntityData } from './SynapseFormUtils'\nimport { StatusEnum } from './types'\n\n/**\n * TODO: SWC-5612 - Replace token prop with SynapseContext.accessToken\n *\n * This wasn't done because Enzyme's shallow renderer is not currently\n * compatible with the `contextType` field in the React 16+ context API.\n *\n * This can be fixed by rewriting tests to not rely on the shallow renderer.\n *\n * See here: https://github.com/enzymejs/enzyme/issues/1553\n */\n\nexport type SynapseFormWrapperProps = {\n // Provide the parent container (folder/project), that should contain a folder (named <user_id>) that this user can write to.\n formSchemaEntityId: string // Synapse file that contains the form schema.\n formUiSchemaEntityId: string // Synapse file that contains the form ui schema.\n formNavSchemaEntityId: string //Synapse file that consists screen nav schema\n token?: string // user's access token\n isWizardMode?: boolean // if we are displaying the form in wizard mode\n fileNamePath: string // path in data to specify the name of saved file\n formTitle: string //for UI customization\n formClass?: string // to support potential theming\n\n formDataId?: string //formDataId for user data form data\n dataFileHandleId?: string //fileHandle to get userData\n submitted?: boolean // if the file has been submitted\n formGroupId: string\n}\n\ntype SynapseFormWrapperState = {\n notification?: Notification\n isLoading?: boolean\n formDataId?: string // file holding user form data\n formData?: any // form data that prepopulates the form\n formSchema?: any // schema that drives the form\n formUiSchema?: UiSchema // ui schema that directs how to render the form elements\n formNavSchema?: any // drives the steps left panel\n\n status?: StatusEnum\n}\n\ntype Error = {\n name?: string\n message?: string\n}\n\ninterface Notification extends Error {\n type: StatusEnum\n}\n\nclass _SynapseFormWrapper extends Component<\n SynapseFormWrapperProps,\n SynapseFormWrapperState\n> {\n constructor(props: SynapseFormWrapperProps) {\n super(props)\n this.state = {\n isLoading: true,\n formDataId: this.props?.formDataId,\n }\n }\n\n componentDidMount() {\n this.getData(this.props.token)\n }\n\n componentDidUpdate(prevProps: SynapseFormWrapperProps) {\n const shouldUpdate = this.props.token !== prevProps.token\n if (shouldUpdate) {\n this.getData(this.props.token)\n }\n }\n\n //same as above but also uses $RefParser to convert json $refs to regular json\n getFileEntityDataDereferenced = async (\n token: string,\n entityId: string,\n versionNumber?: string,\n ): Promise<{ version?: number; content: JSON }> => {\n const { version, content } = await getFileEntityData(\n token,\n entityId,\n versionNumber,\n this.onError,\n )\n const derefContent = await $RefParser.dereference<JSON>(content)\n return {\n version: version,\n content: derefContent,\n }\n }\n\n getData = async (token?: string): Promise<void> => {\n if (!token) {\n return\n }\n try {\n let formData: Record<string, any> = {}\n const dataFileHandleId = this.props.dataFileHandleId\n const submitted = this.props.submitted\n let formSchemaVersion = undefined\n let uiSchemaVersion = undefined\n let navSchemaVersion = undefined\n\n //for not new form we need to get the data\n //and if it is submitted form we need to pull appropriate schema versions\n //for new form (no dataFileHandleId) we need to populate schema versions\n\n if (dataFileHandleId) {\n const fileData = await SynapseClient.getFileHandleContentFromID(\n dataFileHandleId,\n token,\n )\n formData = JSON.parse(fileData)\n if (submitted && formData && formData['metadata']) {\n ;({ formSchemaVersion, uiSchemaVersion, navSchemaVersion } =\n formData['metadata'])\n }\n }\n\n const promises = [\n this.getFileEntityDataDereferenced(\n token,\n this.props.formSchemaEntityId,\n formSchemaVersion,\n ),\n getFileEntityData(\n token,\n this.props.formUiSchemaEntityId,\n uiSchemaVersion,\n this.onError,\n ),\n getFileEntityData(\n token,\n this.props.formNavSchemaEntityId,\n navSchemaVersion,\n this.onError,\n ),\n ]\n const configData = await Promise.all(promises)\n\n if (!dataFileHandleId) {\n //if we are creating a new file - store the versions\n formData = {\n metadata: {\n formSchemaVersion: configData[0].version,\n uiSchemaVersion: configData[1].version,\n navSchemaVersion: configData[2].version,\n },\n }\n }\n this.setState({\n formData: formData,\n formSchema: configData[0].content,\n formUiSchema: configData[1].content as unknown as UiSchema,\n formNavSchema: configData[2].content,\n isLoading: false,\n })\n } catch (error) {\n this.onError({ message: error })\n } finally {\n this.setState({\n isLoading: false,\n })\n }\n }\n\n finishedProcessing = (status: StatusEnum, message?: string) => {\n this.setState({\n isLoading: false,\n notification: { type: status, message: message },\n status: status,\n })\n //this will show the update message for 7 seconds\n setTimeout(() => {\n this.setState({ status: undefined })\n }, 7000)\n }\n\n onError = (error: Error) => {\n this.setState({\n notification: {\n type: StatusEnum.ERROR,\n message: error.message,\n name: error.name,\n },\n status: StatusEnum.ERROR,\n isLoading: false,\n })\n }\n\n submitForm = async (formData: any) => {\n await this.saveToFile(formData)\n\n this.setState({\n isLoading: true,\n })\n\n await SynapseClient.submitFormData(this.state.formDataId!, this.props.token)\n this.finishedProcessing(StatusEnum.SUBMIT_SUCCESS, 'File Submitted')\n }\n\n createOrUpdateFormDataFile = async (\n fileName: string,\n fileContentsBlob: Blob,\n ): Promise<FormData> => {\n fileName = `${fileName}.json`\n const fileUploadComplete = await SynapseClient.uploadFile(\n this.props.token,\n fileName,\n fileContentsBlob,\n )\n const formGroupId = this.props.formGroupId\n if (!formGroupId) {\n console.error('formGroupId must be defined')\n throw new Error('formGroupId must be defined')\n }\n try {\n // do we need to create a new file entity, or update an existing file entity?\n const newFileHandleId = fileUploadComplete.fileHandleId\n\n let formData\n if (this.state.formDataId) {\n formData = await SynapseClient.updateFormData(\n this.state.formDataId,\n fileName,\n newFileHandleId,\n this.props.token!,\n )\n } else {\n formData = await SynapseClient.createFormData(\n formGroupId,\n fileName,\n newFileHandleId,\n this.props.token!,\n )\n }\n\n return formData\n } catch (error) {\n this.onError(error)\n throw error\n }\n }\n\n saveToFile = async (data: any) => {\n const fileName = get(data, this.props.fileNamePath)\n this.setState({\n status: StatusEnum.PROGRESS,\n notification: { type: StatusEnum.PROGRESS, message: 'Progress' },\n isLoading: true,\n })\n\n if (!fileName) {\n // try to find corresponding property. By convention it should be first level property\n // and follow pattern screen.prop\n let errorTitle = 'File Name'\n try {\n // get it to the schema format\n const searchString = `${this.props.fileNamePath.replace(\n '.',\n '.properties.',\n )}.title`\n errorTitle = get(\n this.state.formSchema.properties,\n searchString,\n errorTitle,\n )\n } finally {\n const error = new Error(\n `Please Provide the ${errorTitle} before saving`,\n )\n this.onError(error)\n }\n return\n }\n\n try {\n const fileContent: Blob = new Blob([JSON.stringify(data)], {\n type: 'text/json',\n })\n\n const formData = await this.createOrUpdateFormDataFile(\n fileName,\n fileContent,\n )\n this.setState({\n formDataId: formData.formDataId,\n })\n\n this.finishedProcessing(StatusEnum.SAVE_SUCCESS, 'File Saved')\n } catch (error) {\n this.onError(error)\n }\n }\n\n isReadyToDisplayForm = (state: SynapseFormWrapperState): boolean => {\n return (\n this.state.status !== StatusEnum.ERROR_CRITICAL &&\n state.formSchema &&\n state.formUiSchema &&\n state.formNavSchema &&\n state.formData\n )\n }\n\n renderLoader = (\n state: SynapseFormWrapperState,\n props: SynapseFormWrapperProps,\n ) => {\n if (\n includes([StatusEnum.ERROR, StatusEnum.ERROR_CRITICAL], state.status) &&\n props.token &&\n state.isLoading\n ) {\n return (\n <div className=\"text-center\">\n <span className={'spinner'} />\n </div>\n )\n } else {\n return <></>\n }\n }\n\n renderNotification = (notification?: Notification) => {\n if (!notification) {\n return <></>\n }\n if (notification.type === StatusEnum.ERROR) {\n return (\n <FullWidthAlert\n variant=\"danger\"\n title=\"Error\"\n isGlobal={false}\n description={\n <>\n {notification.name} {notification.message}\n </>\n }\n onClose={() => this.setState({ status: undefined })}\n />\n )\n }\n\n return <></>\n }\n\n renderUnauthenticatedView = (token: string | undefined) => {\n if (token) {\n return <></>\n } else {\n return (\n <div className=\"panel padding-full unauthenticated text-center\">\n Please\n <Button\n variant=\"text\"\n color=\"primary\"\n sx={{\n mx: 1,\n fontSize: '1.4rem',\n verticalAlign: 'baseline',\n textTransform: 'none',\n }}\n className={`${SRC_SIGN_IN_CLASS}`}\n >\n sign in\n </Button>\n to initiate or continue your submission\n </div>\n )\n }\n }\n\n render() {\n return (\n <div className={`theme-${this.props.formClass}`}>\n <div className=\"SRC-ReactJsonForm\">\n {this.renderNotification(this.state.notification)}\n {this.renderLoader(this.state, this.props)}\n {this.renderUnauthenticatedView(this.props.token)}\n\n {this.isReadyToDisplayForm(this.state) && (\n <div>\n <SynapseForm\n schema={this.state.formSchema}\n uiSchema={this.state.formUiSchema!}\n formData={this.state.formData}\n navSchema={this.state.formNavSchema}\n isWizardMode={this.props.isWizardMode}\n formTitle={this.props.formTitle}\n formClass={this.props.formClass}\n callbackStatus={this.state.status}\n onSave={(data: any) => {\n this.saveToFile(data)\n }}\n onSubmit={(data: any) => {\n this.submitForm(data)\n }}\n isSubmitted={this.props.submitted}\n />\n </div>\n )}\n </div>\n </div>\n )\n }\n}\n\nexport function SynapseFormWrapper(props: SynapseFormWrapperProps) {\n const synapseContext = useSynapseContext()\n\n return <_SynapseFormWrapper {...props} token={synapseContext.accessToken} />\n}\n\nexport default SynapseFormWrapper\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SynapseFormWrapper.js","names":[],"sources":["../../../src/components/SynapseForm/SynapseFormWrapper.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { useSynapseContext } from '@/utils'\nimport { SRC_SIGN_IN_CLASS } from '@/utils/SynapseConstants'\nimport $RefParser from '@apidevtools/json-schema-ref-parser'\nimport { Button } from '@mui/material'\nimport { UiSchema } from '@rjsf/utils'\nimport { FormData } from '@sage-bionetworks/synapse-types'\nimport { get, includes } from 'lodash-es'\nimport { Component } from 'react'\nimport FullWidthAlert from '../FullWidthAlert'\nimport SynapseForm from './SynapseForm'\nimport { getFileEntityData } from './SynapseFormUtils'\nimport { StatusEnum } from './types'\n\n/**\n * TODO: SWC-5612 - Replace token prop with SynapseContext.accessToken\n *\n * This wasn't done because Enzyme's shallow renderer is not currently\n * compatible with the `contextType` field in the React 16+ context API.\n *\n * This can be fixed by rewriting tests to not rely on the shallow renderer.\n *\n * See here: https://github.com/enzymejs/enzyme/issues/1553\n */\n\nexport type SynapseFormWrapperProps = {\n // Provide the parent container (folder/project), that should contain a folder (named <user_id>) that this user can write to.\n formSchemaEntityId: string // Synapse file that contains the form schema.\n formUiSchemaEntityId: string // Synapse file that contains the form ui schema.\n formNavSchemaEntityId: string //Synapse file that consists screen nav schema\n token?: string // user's access token\n isWizardMode?: boolean // if we are displaying the form in wizard mode\n fileNamePath: string // path in data to specify the name of saved file\n formTitle: string //for UI customization\n formClass?: string // to support potential theming\n\n formDataId?: string //formDataId for user data form data\n dataFileHandleId?: string //fileHandle to get userData\n submitted?: boolean // if the file has been submitted\n formGroupId: string\n}\n\ntype SynapseFormWrapperState = {\n notification?: Notification\n isLoading?: boolean\n formDataId?: string // file holding user form data\n formData?: any // form data that prepopulates the form\n formSchema?: any // schema that drives the form\n formUiSchema?: UiSchema // ui schema that directs how to render the form elements\n formNavSchema?: any // drives the steps left panel\n\n status?: StatusEnum\n}\n\ntype Error = {\n name?: string\n message?: string\n}\n\ninterface Notification extends Error {\n type: StatusEnum\n}\n\nclass _SynapseFormWrapper extends Component<\n SynapseFormWrapperProps,\n SynapseFormWrapperState\n> {\n constructor(props: SynapseFormWrapperProps) {\n super(props)\n this.state = {\n isLoading: true,\n formDataId: this.props?.formDataId,\n }\n }\n\n componentDidMount() {\n this.getData(this.props.token)\n }\n\n componentDidUpdate(prevProps: SynapseFormWrapperProps) {\n const shouldUpdate = this.props.token !== prevProps.token\n if (shouldUpdate) {\n this.getData(this.props.token)\n }\n }\n\n //same as above but also uses $RefParser to convert json $refs to regular json\n getFileEntityDataDereferenced = async (\n token: string,\n entityId: string,\n versionNumber?: string,\n ): Promise<{ version?: number; content: JSON }> => {\n const { version, content } = await getFileEntityData(\n token,\n entityId,\n versionNumber,\n this.onError,\n )\n const derefContent = await $RefParser.dereference<JSON>(content)\n return {\n version: version,\n content: derefContent,\n }\n }\n\n getData = async (token?: string): Promise<void> => {\n if (!token) {\n return\n }\n try {\n let formData: Record<string, any> = {}\n const dataFileHandleId = this.props.dataFileHandleId\n const submitted = this.props.submitted\n let formSchemaVersion = undefined\n let uiSchemaVersion = undefined\n let navSchemaVersion = undefined\n\n //for not new form we need to get the data\n //and if it is submitted form we need to pull appropriate schema versions\n //for new form (no dataFileHandleId) we need to populate schema versions\n\n if (dataFileHandleId) {\n const fileData = await SynapseClient.getFileHandleContentFromID(\n dataFileHandleId,\n token,\n )\n formData = JSON.parse(fileData)\n if (submitted && formData?.['metadata']) {\n ;({ formSchemaVersion, uiSchemaVersion, navSchemaVersion } =\n formData['metadata'])\n }\n }\n\n const promises = [\n this.getFileEntityDataDereferenced(\n token,\n this.props.formSchemaEntityId,\n formSchemaVersion,\n ),\n getFileEntityData(\n token,\n this.props.formUiSchemaEntityId,\n uiSchemaVersion,\n this.onError,\n ),\n getFileEntityData(\n token,\n this.props.formNavSchemaEntityId,\n navSchemaVersion,\n this.onError,\n ),\n ]\n const configData = await Promise.all(promises)\n\n if (!dataFileHandleId) {\n //if we are creating a new file - store the versions\n formData = {\n metadata: {\n formSchemaVersion: configData[0].version,\n uiSchemaVersion: configData[1].version,\n navSchemaVersion: configData[2].version,\n },\n }\n }\n this.setState({\n formData: formData,\n formSchema: configData[0].content,\n formUiSchema: configData[1].content as unknown as UiSchema,\n formNavSchema: configData[2].content,\n isLoading: false,\n })\n } catch (error) {\n this.onError({ message: error })\n } finally {\n this.setState({\n isLoading: false,\n })\n }\n }\n\n finishedProcessing = (status: StatusEnum, message?: string) => {\n this.setState({\n isLoading: false,\n notification: { type: status, message: message },\n status: status,\n })\n //this will show the update message for 7 seconds\n setTimeout(() => {\n this.setState({ status: undefined })\n }, 7000)\n }\n\n onError = (error: Error) => {\n this.setState({\n notification: {\n type: StatusEnum.ERROR,\n message: error.message,\n name: error.name,\n },\n status: StatusEnum.ERROR,\n isLoading: false,\n })\n }\n\n submitForm = async (formData: any) => {\n await this.saveToFile(formData)\n\n this.setState({\n isLoading: true,\n })\n\n await SynapseClient.submitFormData(this.state.formDataId!, this.props.token)\n this.finishedProcessing(StatusEnum.SUBMIT_SUCCESS, 'File Submitted')\n }\n\n createOrUpdateFormDataFile = async (\n fileName: string,\n fileContentsBlob: Blob,\n ): Promise<FormData> => {\n fileName = `${fileName}.json`\n const fileUploadComplete = await SynapseClient.uploadFile(\n this.props.token,\n fileName,\n fileContentsBlob,\n )\n const formGroupId = this.props.formGroupId\n if (!formGroupId) {\n console.error('formGroupId must be defined')\n throw new Error('formGroupId must be defined')\n }\n try {\n // do we need to create a new file entity, or update an existing file entity?\n const newFileHandleId = fileUploadComplete.fileHandleId\n\n let formData\n if (this.state.formDataId) {\n formData = await SynapseClient.updateFormData(\n this.state.formDataId,\n fileName,\n newFileHandleId,\n this.props.token!,\n )\n } else {\n formData = await SynapseClient.createFormData(\n formGroupId,\n fileName,\n newFileHandleId,\n this.props.token!,\n )\n }\n\n return formData\n } catch (error) {\n this.onError(error)\n throw error\n }\n }\n\n saveToFile = async (data: any) => {\n const fileName = get(data, this.props.fileNamePath)\n this.setState({\n status: StatusEnum.PROGRESS,\n notification: { type: StatusEnum.PROGRESS, message: 'Progress' },\n isLoading: true,\n })\n\n if (!fileName) {\n // try to find corresponding property. By convention it should be first level property\n // and follow pattern screen.prop\n let errorTitle = 'File Name'\n try {\n // get it to the schema format\n const searchString = `${this.props.fileNamePath.replace(\n '.',\n '.properties.',\n )}.title`\n errorTitle = get(\n this.state.formSchema.properties,\n searchString,\n errorTitle,\n )\n } finally {\n const error = new Error(\n `Please Provide the ${errorTitle} before saving`,\n )\n this.onError(error)\n }\n return\n }\n\n try {\n const fileContent: Blob = new Blob([JSON.stringify(data)], {\n type: 'text/json',\n })\n\n const formData = await this.createOrUpdateFormDataFile(\n fileName,\n fileContent,\n )\n this.setState({\n formDataId: formData.formDataId,\n })\n\n this.finishedProcessing(StatusEnum.SAVE_SUCCESS, 'File Saved')\n } catch (error) {\n this.onError(error)\n }\n }\n\n isReadyToDisplayForm = (state: SynapseFormWrapperState): boolean => {\n return (\n this.state.status !== StatusEnum.ERROR_CRITICAL &&\n state.formSchema &&\n state.formUiSchema &&\n state.formNavSchema &&\n state.formData\n )\n }\n\n renderLoader = (\n state: SynapseFormWrapperState,\n props: SynapseFormWrapperProps,\n ) => {\n if (\n includes([StatusEnum.ERROR, StatusEnum.ERROR_CRITICAL], state.status) &&\n props.token &&\n state.isLoading\n ) {\n return (\n <div className=\"text-center\">\n <span className={'spinner'} />\n </div>\n )\n } else {\n return <></>\n }\n }\n\n renderNotification = (notification?: Notification) => {\n if (!notification) {\n return <></>\n }\n if (notification.type === StatusEnum.ERROR) {\n return (\n <FullWidthAlert\n variant=\"danger\"\n title=\"Error\"\n isGlobal={false}\n description={\n <>\n {notification.name} {notification.message}\n </>\n }\n onClose={() => this.setState({ status: undefined })}\n />\n )\n }\n\n return <></>\n }\n\n renderUnauthenticatedView = (token: string | undefined) => {\n if (token) {\n return <></>\n } else {\n return (\n <div className=\"panel padding-full unauthenticated text-center\">\n Please\n <Button\n variant=\"text\"\n color=\"primary\"\n sx={{\n mx: 1,\n fontSize: '1.4rem',\n verticalAlign: 'baseline',\n textTransform: 'none',\n }}\n className={`${SRC_SIGN_IN_CLASS}`}\n >\n sign in\n </Button>\n to initiate or continue your submission\n </div>\n )\n }\n }\n\n render() {\n return (\n <div className={`theme-${this.props.formClass}`}>\n <div className=\"SRC-ReactJsonForm\">\n {this.renderNotification(this.state.notification)}\n {this.renderLoader(this.state, this.props)}\n {this.renderUnauthenticatedView(this.props.token)}\n\n {this.isReadyToDisplayForm(this.state) && (\n <div>\n <SynapseForm\n schema={this.state.formSchema}\n uiSchema={this.state.formUiSchema!}\n formData={this.state.formData}\n navSchema={this.state.formNavSchema}\n isWizardMode={this.props.isWizardMode}\n formTitle={this.props.formTitle}\n formClass={this.props.formClass}\n callbackStatus={this.state.status}\n onSave={(data: any) => {\n this.saveToFile(data)\n }}\n onSubmit={(data: any) => {\n this.submitForm(data)\n }}\n isSubmitted={this.props.submitted}\n />\n </div>\n )}\n </div>\n </div>\n )\n }\n}\n\nexport function SynapseFormWrapper(props: SynapseFormWrapperProps) {\n const synapseContext = useSynapseContext()\n\n return <_SynapseFormWrapper {...props} token={synapseContext.accessToken} />\n}\n\nexport default SynapseFormWrapper\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.
|
|
1
|
+
._container_1ocs6_1{background-color:#fff3;border-radius:9px;grid-template-columns:100%;justify-items:start;max-width:1300px;margin:auto;padding-top:0;padding-bottom:40px;display:grid}@media (width>=600px){._container_1ocs6_1{grid-template-columns:50% 50%;padding-top:80px;padding-bottom:60px}}._item_1ocs6_20{border-right:1px solid var(--synapse-gray-400);border-bottom:1px solid var(--synapse-gray-400);border-left:1px solid var(--synapse-gray-400);grid-template-columns:80% 20%;display:grid}._item_1ocs6_20:first-child{border-top:1px solid var(--synapse-gray-400)}@media (width>=600px){._item_1ocs6_20{border-top:none;border-left:none}._item_1ocs6_20:nth-child(odd){border-left:1px solid var(--synapse-gray-400)}._item_1ocs6_20:nth-child(-n+2){border-top:1px solid var(--synapse-gray-400)}}._item_1ocs6_20{background-color:#ffffffe6;width:100%;padding:15px 0;text-decoration:none}._item_1ocs6_20:hover{cursor:pointer;background-color:#e9f3fef2;text-decoration:none!important}._item_1ocs6_20 ._itemTitle_1ocs6_53{color:var(--synapse-gray-900);font-size:16px;font-weight:700}._item_1ocs6_20 ._itemMeta_1ocs6_58{color:var(--synapse-gray-700)}._adkpVariant_1ocs6_62{grid-template-columns:100%;background-color:#0000!important}@media (width>=600px){._adkpVariant_1ocs6_62{padding-top:0}}._adkpVariant_1ocs6_62 ._item_1ocs6_20{border-left:1px solid var(--synapse-gray-400);border-top:none}._adkpVariant_1ocs6_62 ._item_1ocs6_20:first-child{border-top:1px solid var(--synapse-gray-400)}._adkpVariant_1ocs6_62 ._item_1ocs6_20:hover{background:linear-gradient(91deg,#7761b7 5.34%,#9067b6 24.31%,#816dc8 91.15%)}._adkpVariant_1ocs6_62 ._item_1ocs6_20:hover ._itemTitle_1ocs6_53,._adkpVariant_1ocs6_62 ._item_1ocs6_20:hover ._itemMeta_1ocs6_58,._adkpVariant_1ocs6_62 ._item_1ocs6_20:hover ._itemDescription_1ocs6_83{color:#fff}._itemContent_1ocs6_87{color:var(--synapse-gray-900);padding-left:15px;padding-right:10px}._itemAction_1ocs6_93{place-self:start end;padding-right:15px}._chip_1ocs6_99.MuiChip-root{border-radius:5px;height:24px}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import './HotdropsAndNews.css';var e = {
|
|
2
|
-
container: "
|
|
3
|
-
item: "
|
|
4
|
-
itemTitle: "
|
|
5
|
-
itemMeta: "
|
|
6
|
-
adkpVariant: "
|
|
7
|
-
itemDescription: "
|
|
8
|
-
itemContent: "
|
|
9
|
-
itemAction: "
|
|
10
|
-
chip: "
|
|
2
|
+
container: "_container_1ocs6_1",
|
|
3
|
+
item: "_item_1ocs6_20",
|
|
4
|
+
itemTitle: "_itemTitle_1ocs6_53",
|
|
5
|
+
itemMeta: "_itemMeta_1ocs6_58",
|
|
6
|
+
adkpVariant: "_adkpVariant_1ocs6_62",
|
|
7
|
+
itemDescription: "_itemDescription_1ocs6_83",
|
|
8
|
+
itemContent: "_itemContent_1ocs6_87",
|
|
9
|
+
itemAction: "_itemAction_1ocs6_93",
|
|
10
|
+
chip: "_chip_1ocs6_99"
|
|
11
11
|
};
|
|
12
12
|
//#endregion
|
|
13
13
|
export { e as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HotdropsAndNews.module.js","names":[],"sources":["../../../src/components/SynapseHomepageV2/HotdropsAndNews.module.scss"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Grid container (SynapseHotDrops / WordPressNews outer wrapper)\n// ---------------------------------------------------------------------------\n\n.container {\n display: grid;\n justify-items: start;\n background-color: rgba(255, 255, 255, 0.2);\n border-radius: 9px;\n max-width: 1300px;\n margin: auto;\n\n // Mobile-first: single column\n grid-template-columns: 100%;\n padding-top: 0;\n padding-bottom: 40px;\n\n // ≥ MUI 'sm' breakpoint (600px)\n @media (min-width: 600px) {\n grid-template-columns: 50% 50%;\n padding-top: 80px;\n padding-bottom: 60px;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Individual item row\n// ---------------------------------------------------------------------------\n\n.item {\n display: grid;\n grid-template-columns: 80% 20%;\n // Each item provides its own right + bottom edge.\n // Leading edges (top/left) are added selectively to avoid doubling.\n border-right: 1px solid var(--synapse-gray-400); // lighter interior border\n border-bottom: 1px solid var(--synapse-gray-400);\n\n // Mobile: single column — every item is the left edge; only the first has a top edge.\n border-left: 1px solid var(--synapse-gray-400);\n &:first-child {\n border-top: 1px solid var(--synapse-gray-400);\n }\n\n // Desktop: two columns — left edge belongs to odd items (col 1); top edge to the first two (row 1).\n @media (min-width: 600px) {\n border-left: none;\n border-top: none;\n\n &:nth-child(odd) {\n border-left: 1px solid var(--synapse-gray-400);\n }\n\n &:nth-child(-n + 2) {\n border-top: 1px solid var(--synapse-gray-400);\n }\n }\n\n width: 100%;\n background-color: rgba(255, 255, 255, 0.9);\n padding: 15px 0;\n\n text-decoration: none;\n\n &:hover {\n background-color: rgba(233, 243, 254, 0.95);\n cursor: pointer;\n text-decoration: none !important;\n }\n\n .itemTitle {\n color: var(--synapse-gray-900);\n font-size: 16px;\n font-weight: 700;\n }\n .itemMeta {\n color: var(--synapse-gray-700);\n }\n}\n\n.adkpVariant {\n background-color: transparent !important;\n\n .item:hover {\n background: linear-gradient(\n 91deg,\n #7761b7 5.34%,\n #9067b6 24.31%,\n #816dc8 91.15%\n );\n\n .itemTitle,\n .itemMeta,\n .itemDescription {\n color: #fff;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Item: left content area\n// ---------------------------------------------------------------------------\n\n.itemContent {\n color: var(--synapse-gray-900);\n padding-left: 15px;\n padding-right: 10px;\n}\n\n// ---------------------------------------------------------------------------\n// Item: right action area (chip container)\n// ---------------------------------------------------------------------------\n\n.itemAction {\n justify-self: end;\n align-self: start;\n padding-right: 15px;\n}\n\n// ---------------------------------------------------------------------------\n// Category / type chip\n// ---------------------------------------------------------------------------\n\n.chip:global(.MuiChip-root) {\n border-radius: 5px;\n height: 24px;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"HotdropsAndNews.module.js","names":[],"sources":["../../../src/components/SynapseHomepageV2/HotdropsAndNews.module.scss"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Grid container (SynapseHotDrops / WordPressNews outer wrapper)\n// ---------------------------------------------------------------------------\n\n.container {\n display: grid;\n justify-items: start;\n background-color: rgba(255, 255, 255, 0.2);\n border-radius: 9px;\n max-width: 1300px;\n margin: auto;\n\n // Mobile-first: single column\n grid-template-columns: 100%;\n padding-top: 0;\n padding-bottom: 40px;\n\n // ≥ MUI 'sm' breakpoint (600px)\n @media (min-width: 600px) {\n grid-template-columns: 50% 50%;\n padding-top: 80px;\n padding-bottom: 60px;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Individual item row\n// ---------------------------------------------------------------------------\n\n.item {\n display: grid;\n grid-template-columns: 80% 20%;\n // Each item provides its own right + bottom edge.\n // Leading edges (top/left) are added selectively to avoid doubling.\n border-right: 1px solid var(--synapse-gray-400); // lighter interior border\n border-bottom: 1px solid var(--synapse-gray-400);\n\n // Mobile: single column — every item is the left edge; only the first has a top edge.\n border-left: 1px solid var(--synapse-gray-400);\n &:first-child {\n border-top: 1px solid var(--synapse-gray-400);\n }\n\n // Desktop: two columns — left edge belongs to odd items (col 1); top edge to the first two (row 1).\n @media (min-width: 600px) {\n border-left: none;\n border-top: none;\n\n &:nth-child(odd) {\n border-left: 1px solid var(--synapse-gray-400);\n }\n\n &:nth-child(-n + 2) {\n border-top: 1px solid var(--synapse-gray-400);\n }\n }\n\n width: 100%;\n background-color: rgba(255, 255, 255, 0.9);\n padding: 15px 0;\n\n text-decoration: none;\n\n &:hover {\n background-color: rgba(233, 243, 254, 0.95);\n cursor: pointer;\n text-decoration: none !important;\n }\n\n .itemTitle {\n color: var(--synapse-gray-900);\n font-size: 16px;\n font-weight: 700;\n }\n .itemMeta {\n color: var(--synapse-gray-700);\n }\n}\n\n.adkpVariant {\n background-color: transparent !important;\n grid-template-columns: 100%;\n\n @media (min-width: 600px) {\n padding-top: 0;\n }\n\n .item {\n border-left: 1px solid var(--synapse-gray-400);\n border-top: none;\n\n &:first-child {\n border-top: 1px solid var(--synapse-gray-400);\n }\n }\n\n .item:hover {\n background: linear-gradient(\n 91deg,\n #7761b7 5.34%,\n #9067b6 24.31%,\n #816dc8 91.15%\n );\n\n .itemTitle,\n .itemMeta,\n .itemDescription {\n color: #fff;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Item: left content area\n// ---------------------------------------------------------------------------\n\n.itemContent {\n color: var(--synapse-gray-900);\n padding-left: 15px;\n padding-right: 10px;\n}\n\n// ---------------------------------------------------------------------------\n// Item: right action area (chip container)\n// ---------------------------------------------------------------------------\n\n.itemAction {\n justify-self: end;\n align-self: start;\n padding-right: 15px;\n}\n\n// ---------------------------------------------------------------------------\n// Category / type chip\n// ---------------------------------------------------------------------------\n\n.chip:global(.MuiChip-root) {\n border-radius: 5px;\n height: 24px;\n}\n"],"mappings":""}
|
|
@@ -79,6 +79,20 @@
|
|
|
79
79
|
|
|
80
80
|
.adkpVariant {
|
|
81
81
|
background-color: transparent !important;
|
|
82
|
+
grid-template-columns: 100%;
|
|
83
|
+
|
|
84
|
+
@media (min-width: 600px) {
|
|
85
|
+
padding-top: 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.item {
|
|
89
|
+
border-left: 1px solid var(--synapse-gray-400);
|
|
90
|
+
border-top: none;
|
|
91
|
+
|
|
92
|
+
&:first-child {
|
|
93
|
+
border-top: 1px solid var(--synapse-gray-400);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
82
96
|
|
|
83
97
|
.item:hover {
|
|
84
98
|
background: linear-gradient(
|
|
@@ -8,7 +8,7 @@ function f({ gotoPlace: f }) {
|
|
|
8
8
|
let p = l(), [m, h] = n(""), [g, _] = n(""), [v, y] = n(0), b = () => {
|
|
9
9
|
if (v == 0) {
|
|
10
10
|
let n = m.toLowerCase().trim(), r = e(n);
|
|
11
|
-
if (r
|
|
11
|
+
if (r?.targetVersionNumber) {
|
|
12
12
|
f(`/Synapse:${`${r.targetId}.${r.targetVersionNumber}`}`);
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseHomepageChatSearch.js","names":[],"sources":["../../../src/components/SynapseHomepageV2/SynapseHomepageChatSearch.tsx"],"sourcesContent":["import {\n Box,\n FormControl,\n InputAdornment,\n MenuItem,\n OutlinedInput,\n Select,\n useTheme,\n} from '@mui/material'\nimport { Color } from '@mui/material/styles'\nimport { FormEventHandler, KeyboardEventHandler, useState } from 'react'\nimport { getSearchToken } from '../SynapseNavDrawer/SynapseNavDrawer'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\n\nexport type SynapseHomepageChatSearchProps = {\n gotoPlace: (href: string) => void\n}\nenum SearchMode {\n SEARCH = 0,\n CHAT = 1,\n}\n\n/**\n * Synapse Homepage Search component with a dropdown \"autocomplete\" menu of options.\n * SWC-7005: Not used in the current implementation of the Home Page, but there are plans to utilize it later.\n * @returns\n */\nexport function SynapseHomepageChatSearch({\n gotoPlace,\n}: SynapseHomepageChatSearchProps) {\n const theme = useTheme()\n const [searchValue, setSearchValue] = useState('')\n const [chatValue, setChatValue] = useState('')\n const [mode, setMode] = useState(SearchMode.SEARCH)\n\n const executeSearch = () => {\n if (mode == SearchMode.SEARCH) {\n const searchValueCleaned = searchValue.toLowerCase().trim()\n\n // Check if the input is a valid Synapse ID with version\n const parsedSynId = parseSynId(searchValueCleaned)\n if (parsedSynId
|
|
1
|
+
{"version":3,"file":"SynapseHomepageChatSearch.js","names":[],"sources":["../../../src/components/SynapseHomepageV2/SynapseHomepageChatSearch.tsx"],"sourcesContent":["import {\n Box,\n FormControl,\n InputAdornment,\n MenuItem,\n OutlinedInput,\n Select,\n useTheme,\n} from '@mui/material'\nimport { Color } from '@mui/material/styles'\nimport { FormEventHandler, KeyboardEventHandler, useState } from 'react'\nimport { getSearchToken } from '../SynapseNavDrawer/SynapseNavDrawer'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\n\nexport type SynapseHomepageChatSearchProps = {\n gotoPlace: (href: string) => void\n}\nenum SearchMode {\n SEARCH = 0,\n CHAT = 1,\n}\n\n/**\n * Synapse Homepage Search component with a dropdown \"autocomplete\" menu of options.\n * SWC-7005: Not used in the current implementation of the Home Page, but there are plans to utilize it later.\n * @returns\n */\nexport function SynapseHomepageChatSearch({\n gotoPlace,\n}: SynapseHomepageChatSearchProps) {\n const theme = useTheme()\n const [searchValue, setSearchValue] = useState('')\n const [chatValue, setChatValue] = useState('')\n const [mode, setMode] = useState(SearchMode.SEARCH)\n\n const executeSearch = () => {\n if (mode == SearchMode.SEARCH) {\n const searchValueCleaned = searchValue.toLowerCase().trim()\n\n // Check if the input is a valid Synapse ID with version\n const parsedSynId = parseSynId(searchValueCleaned)\n if (parsedSynId?.targetVersionNumber) {\n const synIdWithVersion = `${parsedSynId.targetId}.${parsedSynId.targetVersionNumber}`\n gotoPlace(`/Synapse:${synIdWithVersion}`)\n return\n }\n gotoPlace(\n `/SearchV2:default?query=${getSearchToken(\n searchValueCleaned.split(/[ ,]+/),\n )}`,\n )\n } else {\n gotoPlace(`/Chat:initialMessage=${encodeURIComponent(chatValue)}`)\n }\n }\n const handleSubmit: FormEventHandler<HTMLFormElement> = event => {\n event.preventDefault()\n executeSearch()\n }\n const handleKeyDown: KeyboardEventHandler<\n HTMLTextAreaElement | HTMLInputElement\n > = event => {\n if (event.key === 'Enter') {\n event.preventDefault()\n executeSearch()\n }\n }\n\n return (\n <Box component=\"form\" onSubmit={handleSubmit}>\n <FormControl fullWidth sx={{ m: 1 }}>\n <OutlinedInput\n value={mode == SearchMode.SEARCH ? searchValue : chatValue}\n startAdornment={\n <InputAdornment\n position=\"start\"\n sx={{ p: '0px', ml: '7px', mr: '13px' }}\n >\n <Select\n value={mode}\n sx={{\n fontSize: '24px',\n fontWeight: 400,\n minWidth: '125px',\n color: (theme.palette.secondary as unknown as Color)[600],\n '& div[role=\"combobox\"]': {\n p: '14px 12px',\n },\n }}\n onChange={v => {\n setMode(v.target.value as SearchMode)\n //restore search or chat value\n }}\n >\n <MenuItem value={SearchMode.SEARCH}>Search</MenuItem>\n <MenuItem value={SearchMode.CHAT}>Chat</MenuItem>\n </Select>\n </InputAdornment>\n }\n placeholder={\n mode == SearchMode.SEARCH ? 'Search Synapse' : 'Ask a question'\n }\n sx={{ fontSize: '24px', borderRadius: 96.6 }}\n onChange={event => {\n if (mode == SearchMode.SEARCH) {\n setSearchValue(event.target.value)\n } else {\n setChatValue(event.target.value)\n }\n }}\n onKeyDown={handleKeyDown}\n />\n </FormControl>\n </Box>\n )\n}\n"],"mappings":";;;;;;AA2BA,SAAgB,EAA0B,EACxC,gBACiC;CACjC,IAAM,IAAQ,EAAS,GACjB,CAAC,GAAa,KAAkB,EAAS,EAAE,GAC3C,CAAC,GAAW,KAAgB,EAAS,EAAE,GACvC,CAAC,GAAM,KAAW,EAAA,CAA0B,GAE5C,UAAsB;EAC1B,IAAI,KAAA,GAA2B;GAC7B,IAAM,IAAqB,EAAY,YAAY,EAAE,KAAK,GAGpD,IAAc,EAAW,CAAkB;GACjD,IAAI,GAAa,qBAAqB;IAEpC,EAAU,YAAY,GADM,EAAY,SAAS,GAAG,EAAY,uBACxB;IACxC;GACF;GACA,EACE,2BAA2B,EACzB,EAAmB,MAAM,OAAO,CAClC,GACF;EACF,OACE,EAAU,wBAAwB,mBAAmB,CAAS,GAAG;CAErE;CAcA,OACE,kBAAC,GAAD;EAAK,WAAU;EAAO,WAdgC,MAAS;GAE/D,AADA,EAAM,eAAe,GACrB,EAAc;EAChB;YAYI,kBAAC,GAAD;GAAa,WAAA;GAAU,IAAI,EAAE,GAAG,EAAE;aAChC,kBAAC,GAAD;IACE,OAAO,KAAA,IAA4B,IAAc;IACjD,gBACE,kBAAC,GAAD;KACE,UAAS;KACT,IAAI;MAAE,GAAG;MAAO,IAAI;MAAO,IAAI;KAAO;eAEtC,kBAAC,GAAD;MACE,OAAO;MACP,IAAI;OACF,UAAU;OACV,YAAY;OACZ,UAAU;OACV,OAAQ,EAAM,QAAQ,UAA+B;OACrD,4BAA0B,EACxB,GAAG,YACL;MACF;MACA,WAAU,MAAK;OACb,EAAQ,EAAE,OAAO,KAAmB;MAEtC;gBAdF,CAgBE,kBAAC,GAAD;OAAU,OAAA;iBAA0B;MAAgB,CAAA,GACpD,kBAAC,GAAD;OAAU,OAAA;iBAAwB;MAAc,CAAA,CAC1C;;IACM,CAAA;IAElB,aACE,KAAA,IAA4B,mBAAmB;IAEjD,IAAI;KAAE,UAAU;KAAQ,cAAc;IAAK;IAC3C,WAAU,MAAS;KACjB,AAAI,KAAA,IACF,EAAe,EAAM,OAAO,KAAK,IAEjC,EAAa,EAAM,OAAO,KAAK;IAEnC;IACA,YAjDJ,MAAS;KACX,AAAI,EAAM,QAAQ,YAChB,EAAM,eAAe,GACrB,EAAc;IAElB;GA6CO,CAAA;EACU,CAAA;CACV,CAAA;AAET"}
|
|
@@ -28,7 +28,7 @@ function d() {
|
|
|
28
28
|
}, [g]), g ? null : /* @__PURE__ */ l(a, {
|
|
29
29
|
query: m,
|
|
30
30
|
setQuery: (t) => {
|
|
31
|
-
d((n) => (t
|
|
31
|
+
d((n) => (t?.queryTerm && t.queryTerm.length > 0 ? n.set(e, JSON.stringify(t)) : n.delete(e), n));
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseSearchPage.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router'\nimport { SEARCH_PAGE_QUERY_PARAM } from '@/utils/SynapseConstants'\nimport { SynapseSearchPageResults } from './SynapseSearchPageResults'\nimport SynapseSearchPageRouter, {\n SynapseSearchPageRouterProps,\n} from './SynapseSearchPageRouter'\nimport { SearchQuery } from '@sage-bionetworks/synapse-types'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport { useEffect, useMemo } from 'react'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions'\n\nfunction SearchPageInternal() {\n const [searchParams, setSearchParams] = useSearchParams()\n\n // Parse SearchQuery object from URL parameter\n const queryParam = searchParams.get(SEARCH_PAGE_QUERY_PARAM) || ''\n let parsedURLQuery = {}\n try {\n parsedURLQuery = queryParam ? JSON.parse(queryParam) : {}\n } catch (error) {\n console.error('Error parsing search query from URL:', error)\n }\n\n const query: SearchQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...parsedURLQuery,\n }\n\n const queryTerm = query?.queryTerm?.[0] || ''\n const parsedSynId = useMemo(() => parseSynId(queryTerm), [queryTerm])\n\n useEffect(() => {\n if (parsedSynId) {\n const entityPath = parsedSynId.targetVersionNumber\n ? `${parsedSynId.targetId}.${parsedSynId.targetVersionNumber}`\n : parsedSynId.targetId\n\n window.location.assign(\n `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${entityPath}`,\n )\n }\n }, [parsedSynId])\n\n // Store the whole SearchQuery object as JSON in URL\n const handleQueryChange = (newQuery: SearchQuery) => {\n setSearchParams(prev => {\n if (newQuery
|
|
1
|
+
{"version":3,"file":"SynapseSearchPage.js","names":[],"sources":["../../../src/components/SynapseSearchPageResults/SynapseSearchPage.tsx"],"sourcesContent":["import { useSearchParams } from 'react-router'\nimport { SEARCH_PAGE_QUERY_PARAM } from '@/utils/SynapseConstants'\nimport { SynapseSearchPageResults } from './SynapseSearchPageResults'\nimport SynapseSearchPageRouter, {\n SynapseSearchPageRouterProps,\n} from './SynapseSearchPageRouter'\nimport { SearchQuery } from '@sage-bionetworks/synapse-types'\nimport { DEFAULT_SEARCH_QUERY } from '@/utils/searchDefaults'\nimport { useEffect, useMemo } from 'react'\nimport { parseSynId } from '@/utils/functions/RegularExpressions'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions'\n\nfunction SearchPageInternal() {\n const [searchParams, setSearchParams] = useSearchParams()\n\n // Parse SearchQuery object from URL parameter\n const queryParam = searchParams.get(SEARCH_PAGE_QUERY_PARAM) || ''\n let parsedURLQuery = {}\n try {\n parsedURLQuery = queryParam ? JSON.parse(queryParam) : {}\n } catch (error) {\n console.error('Error parsing search query from URL:', error)\n }\n\n const query: SearchQuery = {\n ...DEFAULT_SEARCH_QUERY,\n ...parsedURLQuery,\n }\n\n const queryTerm = query?.queryTerm?.[0] || ''\n const parsedSynId = useMemo(() => parseSynId(queryTerm), [queryTerm])\n\n useEffect(() => {\n if (parsedSynId) {\n const entityPath = parsedSynId.targetVersionNumber\n ? `${parsedSynId.targetId}.${parsedSynId.targetVersionNumber}`\n : parsedSynId.targetId\n\n window.location.assign(\n `${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}Synapse:${entityPath}`,\n )\n }\n }, [parsedSynId])\n\n // Store the whole SearchQuery object as JSON in URL\n const handleQueryChange = (newQuery: SearchQuery) => {\n setSearchParams(prev => {\n if (newQuery?.queryTerm && newQuery.queryTerm.length > 0) {\n prev.set(SEARCH_PAGE_QUERY_PARAM, JSON.stringify(newQuery))\n } else {\n prev.delete(SEARCH_PAGE_QUERY_PARAM)\n }\n return prev\n })\n }\n\n if (parsedSynId) {\n return null\n }\n\n // Render search results with new query\n return <SynapseSearchPageResults query={query} setQuery={handleQueryChange} />\n}\n\nexport type SynapseSearchPageProps = Omit<\n SynapseSearchPageRouterProps,\n 'children'\n>\n\nexport default function SynapseSearchPage(props: SynapseSearchPageProps) {\n return (\n <SynapseSearchPageRouter {...props}>\n <SearchPageInternal />\n </SynapseSearchPageRouter>\n )\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAS,IAAqB;CAC5B,IAAM,CAAC,GAAc,KAAmB,EAAgB,GAGlD,IAAa,EAAa,IAAA,OAA2B,KAAK,IAC5D,IAAiB,CAAC;CACtB,IAAI;EACF,IAAiB,IAAa,KAAK,MAAM,CAAU,IAAI,CAAC;CAC1D,SAAS,GAAO;EACd,QAAQ,MAAM,wCAAwC,CAAK;CAC7D;CAEA,IAAM,IAAqB;EACzB,GAAG;EACH,GAAG;CACL,GAEM,IAAY,GAAO,YAAY,MAAM,IACrC,IAAc,QAAc,EAAW,CAAS,GAAG,CAAC,CAAS,CAAC;CAiCpE,OA/BA,QAAgB;EACd,IAAI,GAAa;GACf,IAAM,IAAa,EAAY,sBAC3B,GAAG,EAAY,SAAS,GAAG,EAAY,wBACvC,EAAY;GAEhB,OAAO,SAAS,OACd,GAAG,EACD,EAAuB,eACzB,EAAE,UAAU,GACd;EACF;CACF,GAAG,CAAC,CAAW,CAAC,GAcZ,IACK,OAIF,kBAAC,GAAD;EAAiC;EAAO,WAhBpB,MAA0B;GACnD,GAAgB,OACV,GAAU,aAAa,EAAS,UAAU,SAAS,IACrD,EAAK,IAAI,GAAyB,KAAK,UAAU,CAAQ,CAAC,IAE1D,EAAK,OAAO,CAAuB,GAE9B,EACR;EACH;CAO6E,CAAA;AAC/E;AAOA,SAAwB,EAAkB,GAA+B;CACvE,OACE,kBAAC,GAAD;EAAyB,GAAI;YAC3B,kBAAC,GAAD,CAAqB,CAAA;CACE,CAAA;AAE7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseTable.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseTable/SynapseTable.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,GAAG,EACH,MAAM,EAEP,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAEL,SAAS,EAKV,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAyBvD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,GACzB,MAAM,CAuBR;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,iBAAiB,EACf,kBAAkB,GAClB,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,cAAc,GACd,0BAA0B,GAC1B,6BAA6B,GAC7B,aAAa,GACb,eAAe,CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,gBAAgB,EAAE,OAAO,CAAA;IACzB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAA;IACrC,2JAA2J;IAC3J,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2JAA2J;IAC3J,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,8DAA8D;IAC9D,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,yFAAyF;IACzF,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,CAAA;AAID,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"SynapseTable.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseTable/SynapseTable.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,GAAG,EACH,MAAM,EAEP,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAEL,SAAS,EAKV,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAyBvD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,GACzB,MAAM,CAuBR;AAED,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,iBAAiB,EACf,kBAAkB,GAClB,wBAAwB,GACxB,wBAAwB,GACxB,oBAAoB,GACpB,cAAc,GACd,0BAA0B,GAC1B,6BAA6B,GAC7B,aAAa,GACb,eAAe,CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,gBAAgB,EAAE,OAAO,CAAA;IACzB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAA;IACrC,2JAA2J;IAC3J,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,2JAA2J;IAC3J,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,8DAA8D;IAC9D,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,yFAAyF;IACzF,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,CAAA;AAID,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA4MpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseTable.js","names":[],"sources":["../../../src/components/SynapseTable/SynapseTable.tsx"],"sourcesContent":["import { useGetEntity } from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport {\n ColumnTypeEnum,\n Row,\n RowSet,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport {\n Cell,\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n VisibilityState,\n} from '@tanstack/react-table'\nimport { useAtomValue } from 'jotai'\nimport { useMemo, useState } from 'react'\nimport { LabelLinkConfig } from '../CardContainerLogic'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { SynapseTableContext } from './SynapseTableContext'\nimport {\n accessColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n rowSelectionColumn,\n TableDataCell,\n TableDataColumnHeader,\n} from './SynapseTableRenderers'\nimport {\n isEntityViewOrDatasetOrCollection,\n isFileViewOrDataset,\n isSortableColumn,\n} from './SynapseTableUtils'\nimport { usePrefetchResourcesInTable } from './usePrefetchTableData'\nimport { useTableSort } from './useTableSort'\n\nconst DEFAULT_CUSTOM_COLUMNS: ColumnDef<Row, any>[] = []\n\n/**\n * Returns the minimum column width (in px) for a Synapse table column\n * based on its type and name.\n */\nexport function getColumnMinSize(\n columnName: string,\n columnType: ColumnTypeEnum,\n): number {\n const nameLower = columnName.toLowerCase()\n if (nameLower.includes('name') || nameLower.includes('description')) {\n return 250\n }\n switch (columnType) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.EVALUATIONID:\n case ColumnTypeEnum.SUBMISSIONID:\n return 180\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n return 120\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n return 100\n default:\n return 60\n }\n}\n\nexport type SynapseTableConfiguration = Pick<\n SynapseTableProps,\n | 'showAccessColumn'\n | 'showExternalAccessIcon'\n | 'showAccessColumnHeader'\n | 'showDownloadColumn'\n | 'hideDownload'\n | 'showDirectDownloadColumn'\n | 'hideAddToDownloadListColumn'\n | 'columnLinks'\n | 'customColumns'\n>\n\nexport type SynapseTableProps = {\n /** The row data shown in the table. */\n rowSet: RowSet\n /** Whether a new page of data is being loaded */\n isLoadingNewPage: boolean\n /** Custom columns to render in the table */\n customColumns?: ColumnDef<Row, any>[]\n /** If true and entity is a view or dataset, renders a column that represents if the caller has permission to download the entity represented by the row */\n showAccessColumn?: boolean\n /**\n * If true, the component will show enhanced UI for the case where\n * - the entity is a FileEntity, AND\n * - the caller has permission to fetch the dataFileHandle, AND\n * - the dataFileHandle is an instance of ExternalFileHandleInterface (i.e. the file is not controlled by Synapse)\n * Note that this requires an additional API call that cannot be batched, so it should be avoided in bulk contexts if possible.\n * @default false\n */\n showExternalAccessIcon?: boolean\n showAccessColumnHeader?: boolean\n /** @deprecated use showDirectDownloadColumn */\n showDownloadColumn?: boolean\n /** @deprecated use hideAddToDownloadListColumn */\n hideDownload?: boolean\n /** If true and entity is a file view or dataset, renders a column that allows the logged-in user to directly download the file, if they have permission */\n showDirectDownloadColumn?: boolean\n /** If true, the add to download list column will be hidden */\n hideAddToDownloadListColumn?: boolean\n /** Configuration to override cell renderers with e.g. a link to a portals detail page */\n columnLinks?: LabelLinkConfig\n}\n\nconst columnHelper = createColumnHelper<Row>()\n\nexport function SynapseTable(props: SynapseTableProps) {\n const { showDownloadColumn, hideDownload } = props\n const {\n rowSet,\n isLoadingNewPage,\n customColumns = DEFAULT_CUSTOM_COLUMNS,\n showAccessColumn,\n showExternalAccessIcon,\n showAccessColumnHeader,\n showDirectDownloadColumn = showDownloadColumn,\n hideAddToDownloadListColumn = hideDownload,\n columnLinks,\n } = props\n const {\n entityId,\n versionNumber,\n getCurrentQueryRequest,\n fileIdColumnName,\n fileVersionColumnName,\n } = useQueryContext()\n const queryRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n\n const selectColumns = rowSet.headers\n\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n\n const { columnsToShowInTable, NoContentPlaceholder } =\n useQueryVisualizationContext()\n const synapseTableContext = useMemo(\n () => ({\n columnLinks,\n showExternalAccessIcon,\n }),\n [columnLinks, showExternalAccessIcon],\n )\n const { isAuthenticated } = useSynapseContext()\n\n const [isExportTableDownloadOpen, setIsExportTableDownloadOpen] =\n useState(false)\n\n const { sort, setSort } = useTableSort()\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const isShowingAccessColumn: boolean = Boolean(\n showAccessColumn &&\n entity &&\n ((isEntityViewOrDatasetOrCollection(entity) && allRowsHaveId(rowSet)) ||\n fileIdColumnName),\n )\n const rowsAreDownloadable =\n entity &&\n isAuthenticated &&\n ((isFileViewOrDataset(entity) && allRowsHaveId(rowSet)) || fileIdColumnName)\n\n const isShowingDirectDownloadColumn = Boolean(\n rowsAreDownloadable && showDirectDownloadColumn,\n )\n\n const isShowingAddToV2DownloadListColumn: boolean = Boolean(\n rowsAreDownloadable &&\n !hideAddToDownloadListColumn &&\n !isRowSelectionVisible,\n )\n const rowEntityIDColumnIndex = fileIdColumnName\n ? rowSet.headers.findIndex(col => col.name == fileIdColumnName)\n : undefined\n const rowEntityVersionColumnIndex = fileVersionColumnName\n ? rowSet.headers.findIndex(col => col.name == fileVersionColumnName)\n : undefined\n\n const columns = useMemo(\n () => [\n ...customColumns,\n rowSelectionColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n {\n ...accessColumn,\n header: showAccessColumn && showAccessColumnHeader ? 'Access' : '',\n },\n ...(selectColumns.map((selectColumn, index) => {\n return columnHelper.accessor(row => row.values[index], {\n id: selectColumn.name,\n enableSorting: isSortableColumn(selectColumn.columnType),\n enableResizing: true,\n minSize: getColumnMinSize(\n selectColumn.name,\n selectColumn.columnType as ColumnTypeEnum,\n ),\n header: TableDataColumnHeader,\n cell: TableDataCell,\n })\n }) ?? []),\n ],\n [customColumns, selectColumns, showAccessColumn, showAccessColumnHeader],\n )\n\n const prependColumnVisibility: VisibilityState = useMemo(\n () => ({\n [rowSelectionColumn.id as string]: isRowSelectionVisible,\n [addToDownloadListColumn.id as string]:\n isShowingAddToV2DownloadListColumn,\n [directDownloadColumn.id as string]: isShowingDirectDownloadColumn,\n [accessColumn.id as string]: isShowingAccessColumn,\n }),\n [\n isRowSelectionVisible,\n isShowingAccessColumn,\n isShowingAddToV2DownloadListColumn,\n isShowingDirectDownloadColumn,\n ],\n )\n\n // Transform our `columnsToShowInTable` to @tanstack/react-table's `VisibilityState`\n const columnVisibility: VisibilityState = useMemo(\n () =>\n selectColumns.reduce((prev: VisibilityState, curr) => {\n return {\n ...prev,\n [curr.name]: columnsToShowInTable.includes(curr.name),\n }\n }, prependColumnVisibility),\n [columnsToShowInTable, selectColumns, prependColumnVisibility],\n )\n\n const { dataHasBeenPrefetched } = usePrefetchResourcesInTable(rowSet)\n const renderTableDataPlaceholder = isLoadingNewPage || !dataHasBeenPrefetched\n\n const table = useReactTable({\n data: rowSet.rows,\n columns,\n defaultColumn: { minSize: 60 },\n getCoreRowModel: getCoreRowModel(),\n manualSorting: true,\n manualFiltering: true,\n onSortingChange: setSort,\n enableMultiSort: true,\n columnResizeMode: 'onChange',\n state: {\n sorting: sort,\n columnVisibility: columnVisibility,\n },\n meta: {\n rowSet,\n // make the rowEntityIDColumnIndex available to all cell renderers\n rowEntityIDColumnIndex,\n rowEntityVersionColumnIndex,\n renderPlaceholderData: renderTableDataPlaceholder,\n getWrapInExpandableTd: (cell: Cell<Row, unknown>) => {\n const selectColumn = selectColumns.find(\n cm => cm.name === cell.column.id,\n )\n return Boolean(\n selectColumn &&\n /* JSON handles its own overflow*/\n selectColumn.columnType !== ColumnTypeEnum.JSON,\n )\n },\n },\n })\n\n /**\n * Display the view\n */\n if (!rowSet) {\n return <></>\n }\n const hasResults = (rowSet.rows?.length ?? 0) > 0\n // Show the No Results UI if the current page has no rows, and this is the first page of data (offset === 0 or null/undefined).\n if (\n !hasResults &&\n (queryRequest.query.offset === 0 || queryRequest.query.offset == null)\n ) {\n return <NoContentPlaceholder />\n }\n\n return (\n <SynapseTableContext.Provider value={synapseTableContext}>\n <div>\n {isExportTableDownloadOpen && (\n <ModalDownload\n onClose={() => {\n setIsExportTableDownloadOpen(false)\n }}\n queryBundleRequest={queryRequest}\n />\n )}\n <StyledTanStackTable\n styledTableContainerProps={{\n className: 'SynapseTable',\n ['data-testid']: 'SynapseTable',\n density: 'default',\n }}\n table={table}\n fullWidth={false}\n autoColumnSizing={true}\n />\n </div>\n </SynapseTableContext.Provider>\n )\n}\n\n/**\n * If this is a view/dataset and rows have an ID, then rows represent individual objects in Synapse.\n * Presence of row IDs also indicates that the query is also necessarily not summary data, e.g. the query does\n * not include an operation like GROUP BY, DISTINCT, etc., that would cause rows to not map 1:1 to Synapse Entities\n */\nfunction allRowsHaveId(rowSet: RowSet): boolean {\n return Boolean(rowSet.rows?.every(row => !!row.rowId))\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SynapseTable.js","names":[],"sources":["../../../src/components/SynapseTable/SynapseTable.tsx"],"sourcesContent":["import { useGetEntity } from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport {\n ColumnTypeEnum,\n Row,\n RowSet,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport {\n Cell,\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n VisibilityState,\n} from '@tanstack/react-table'\nimport { useAtomValue } from 'jotai'\nimport { useMemo, useState } from 'react'\nimport { LabelLinkConfig } from '../CardContainerLogic'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { SynapseTableContext } from './SynapseTableContext'\nimport {\n accessColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n rowSelectionColumn,\n TableDataCell,\n TableDataColumnHeader,\n} from './SynapseTableRenderers'\nimport {\n isEntityViewOrDatasetOrCollection,\n isFileViewOrDataset,\n isSortableColumn,\n} from './SynapseTableUtils'\nimport { usePrefetchResourcesInTable } from './usePrefetchTableData'\nimport { useTableSort } from './useTableSort'\n\nconst DEFAULT_CUSTOM_COLUMNS: ColumnDef<Row, any>[] = []\n\n/**\n * Returns the minimum column width (in px) for a Synapse table column\n * based on its type and name.\n */\nexport function getColumnMinSize(\n columnName: string,\n columnType: ColumnTypeEnum,\n): number {\n const nameLower = columnName.toLowerCase()\n if (nameLower.includes('name') || nameLower.includes('description')) {\n return 250\n }\n switch (columnType) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.EVALUATIONID:\n case ColumnTypeEnum.SUBMISSIONID:\n return 180\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n return 120\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n return 100\n default:\n return 60\n }\n}\n\nexport type SynapseTableConfiguration = Pick<\n SynapseTableProps,\n | 'showAccessColumn'\n | 'showExternalAccessIcon'\n | 'showAccessColumnHeader'\n | 'showDownloadColumn'\n | 'hideDownload'\n | 'showDirectDownloadColumn'\n | 'hideAddToDownloadListColumn'\n | 'columnLinks'\n | 'customColumns'\n>\n\nexport type SynapseTableProps = {\n /** The row data shown in the table. */\n rowSet: RowSet\n /** Whether a new page of data is being loaded */\n isLoadingNewPage: boolean\n /** Custom columns to render in the table */\n customColumns?: ColumnDef<Row, any>[]\n /** If true and entity is a view or dataset, renders a column that represents if the caller has permission to download the entity represented by the row */\n showAccessColumn?: boolean\n /**\n * If true, the component will show enhanced UI for the case where\n * - the entity is a FileEntity, AND\n * - the caller has permission to fetch the dataFileHandle, AND\n * - the dataFileHandle is an instance of ExternalFileHandleInterface (i.e. the file is not controlled by Synapse)\n * Note that this requires an additional API call that cannot be batched, so it should be avoided in bulk contexts if possible.\n * @default false\n */\n showExternalAccessIcon?: boolean\n showAccessColumnHeader?: boolean\n /** @deprecated use showDirectDownloadColumn */\n showDownloadColumn?: boolean\n /** @deprecated use hideAddToDownloadListColumn */\n hideDownload?: boolean\n /** If true and entity is a file view or dataset, renders a column that allows the logged-in user to directly download the file, if they have permission */\n showDirectDownloadColumn?: boolean\n /** If true, the add to download list column will be hidden */\n hideAddToDownloadListColumn?: boolean\n /** Configuration to override cell renderers with e.g. a link to a portals detail page */\n columnLinks?: LabelLinkConfig\n}\n\nconst columnHelper = createColumnHelper<Row>()\n\nexport function SynapseTable(props: SynapseTableProps) {\n const { showDownloadColumn, hideDownload } = props\n const {\n rowSet,\n isLoadingNewPage,\n customColumns = DEFAULT_CUSTOM_COLUMNS,\n showAccessColumn,\n showExternalAccessIcon,\n showAccessColumnHeader,\n showDirectDownloadColumn = showDownloadColumn,\n hideAddToDownloadListColumn = hideDownload,\n columnLinks,\n } = props\n const {\n entityId,\n versionNumber,\n getCurrentQueryRequest,\n fileIdColumnName,\n fileVersionColumnName,\n } = useQueryContext()\n const queryRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n\n const selectColumns = rowSet.headers\n\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n\n const { columnsToShowInTable, NoContentPlaceholder } =\n useQueryVisualizationContext()\n const synapseTableContext = useMemo(\n () => ({\n columnLinks,\n showExternalAccessIcon,\n }),\n [columnLinks, showExternalAccessIcon],\n )\n const { isAuthenticated } = useSynapseContext()\n\n const [isExportTableDownloadOpen, setIsExportTableDownloadOpen] =\n useState(false)\n\n const { sort, setSort } = useTableSort()\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const isShowingAccessColumn: boolean = Boolean(\n showAccessColumn &&\n entity &&\n ((isEntityViewOrDatasetOrCollection(entity) && allRowsHaveId(rowSet)) ||\n fileIdColumnName),\n )\n const rowsAreDownloadable =\n entity &&\n isAuthenticated &&\n ((isFileViewOrDataset(entity) && allRowsHaveId(rowSet)) || fileIdColumnName)\n\n const isShowingDirectDownloadColumn = Boolean(\n rowsAreDownloadable && showDirectDownloadColumn,\n )\n\n const isShowingAddToV2DownloadListColumn: boolean = Boolean(\n rowsAreDownloadable &&\n !hideAddToDownloadListColumn &&\n !isRowSelectionVisible,\n )\n const rowEntityIDColumnIndex = fileIdColumnName\n ? rowSet.headers.findIndex(col => col.name == fileIdColumnName)\n : undefined\n const rowEntityVersionColumnIndex = fileVersionColumnName\n ? rowSet.headers.findIndex(col => col.name == fileVersionColumnName)\n : undefined\n\n const columns = useMemo(\n () => [\n ...customColumns,\n rowSelectionColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n {\n ...accessColumn,\n header: showAccessColumn && showAccessColumnHeader ? 'Access' : '',\n },\n ...(selectColumns.map((selectColumn, index) => {\n return columnHelper.accessor(row => row.values[index], {\n id: selectColumn.name,\n enableSorting: isSortableColumn(selectColumn.columnType),\n enableResizing: true,\n minSize: getColumnMinSize(\n selectColumn.name,\n selectColumn.columnType as ColumnTypeEnum,\n ),\n header: TableDataColumnHeader,\n cell: TableDataCell,\n })\n }) ?? []),\n ],\n [customColumns, selectColumns, showAccessColumn, showAccessColumnHeader],\n )\n\n const prependColumnVisibility: VisibilityState = useMemo(\n () => ({\n [rowSelectionColumn.id as string]: isRowSelectionVisible,\n [addToDownloadListColumn.id as string]:\n isShowingAddToV2DownloadListColumn,\n [directDownloadColumn.id as string]: isShowingDirectDownloadColumn,\n [accessColumn.id as string]: isShowingAccessColumn,\n }),\n [\n isRowSelectionVisible,\n isShowingAccessColumn,\n isShowingAddToV2DownloadListColumn,\n isShowingDirectDownloadColumn,\n ],\n )\n\n // Transform our `columnsToShowInTable` to @tanstack/react-table's `VisibilityState`\n const columnVisibility: VisibilityState = useMemo(\n () =>\n selectColumns.reduce((prev: VisibilityState, curr) => {\n return {\n ...prev,\n [curr.name]: columnsToShowInTable.includes(curr.name),\n }\n }, prependColumnVisibility),\n [columnsToShowInTable, selectColumns, prependColumnVisibility],\n )\n\n const { dataHasBeenPrefetched } = usePrefetchResourcesInTable(rowSet)\n const renderTableDataPlaceholder = isLoadingNewPage || !dataHasBeenPrefetched\n\n const table = useReactTable({\n data: rowSet.rows,\n columns,\n defaultColumn: { minSize: 60 },\n getCoreRowModel: getCoreRowModel(),\n manualSorting: true,\n manualFiltering: true,\n onSortingChange: setSort,\n enableMultiSort: true,\n columnResizeMode: 'onChange',\n state: {\n sorting: sort,\n columnVisibility: columnVisibility,\n },\n meta: {\n rowSet,\n // make the rowEntityIDColumnIndex available to all cell renderers\n rowEntityIDColumnIndex,\n rowEntityVersionColumnIndex,\n renderPlaceholderData: renderTableDataPlaceholder,\n getWrapInExpandableTd: (cell: Cell<Row, unknown>) => {\n const selectColumn = selectColumns.find(\n cm => cm.name === cell.column.id,\n )\n return Boolean(\n selectColumn &&\n /* JSON handles its own overflow*/\n selectColumn.columnType !== ColumnTypeEnum.JSON,\n )\n },\n },\n })\n\n /**\n * Display the view\n */\n if (!rowSet) {\n return <></>\n }\n const hasResults = (rowSet.rows?.length ?? 0) > 0\n // Show the No Results UI if the current page has no rows, and this is the first page of data (offset === 0 or null/undefined).\n if (\n !hasResults &&\n (queryRequest.query.offset === 0 || queryRequest.query.offset == null)\n ) {\n return <NoContentPlaceholder />\n }\n\n return (\n <SynapseTableContext.Provider value={synapseTableContext}>\n <div>\n {isExportTableDownloadOpen && (\n <ModalDownload\n onClose={() => {\n setIsExportTableDownloadOpen(false)\n }}\n queryBundleRequest={queryRequest}\n />\n )}\n <StyledTanStackTable\n styledTableContainerProps={{\n className: 'SynapseTable',\n ['data-testid']: 'SynapseTable',\n density: 'default',\n }}\n table={table}\n fullWidth={false}\n autoColumnSizing={true}\n showTopScrollbar={true}\n />\n </div>\n </SynapseTableContext.Provider>\n )\n}\n\n/**\n * If this is a view/dataset and rows have an ID, then rows represent individual objects in Synapse.\n * Presence of row IDs also indicates that the query is also necessarily not summary data, e.g. the query does\n * not include an operation like GROUP BY, DISTINCT, etc., that would cause rows to not map 1:1 to Synapse Entities\n */\nfunction allRowsHaveId(rowSet: RowSet): boolean {\n return Boolean(rowSet.rows?.every(row => !!row.rowId))\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseTableRenderers.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseTable/SynapseTableRenderers.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,GAAG,EACJ,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,WAAW,EAEX,aAAa,EACd,MAAM,uBAAuB,CAAA;AA2D9B,eAAO,MAAM,kBAAkB,gEAQ7B,CAAA;AAuBF,eAAO,MAAM,uBAAuB,gEAQlC,CAAA;AAiBF,eAAO,MAAM,oBAAoB,gEAQ/B,CAAA;AAyEF,eAAO,MAAM,YAAY,gEAQvB,CAAA;AAEF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"SynapseTableRenderers.d.ts","sourceRoot":"","sources":["../../../src/components/SynapseTable/SynapseTableRenderers.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,GAAG,EACJ,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,WAAW,EAEX,aAAa,EACd,MAAM,uBAAuB,CAAA;AA2D9B,eAAO,MAAM,kBAAkB,gEAQ7B,CAAA;AAuBF,eAAO,MAAM,uBAAuB,gEAQlC,CAAA;AAiBF,eAAO,MAAM,oBAAoB,gEAQ/B,CAAA;AAyEF,eAAO,MAAM,YAAY,gEAQvB,CAAA;AAEF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,2CAgEzC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,2CAyCnE"}
|
|
@@ -113,7 +113,7 @@ var I = T.display({
|
|
|
113
113
|
meta: { textAlign: "center" }
|
|
114
114
|
});
|
|
115
115
|
function L(e) {
|
|
116
|
-
let { column: i } = e, { lockedColumn: a } = t(), { data: o } = n(), s = o?.columnModels ?? [], c = (o?.selectColumns ?? []).find((e) => e.name === i.id), l = s.find((e) => e.name === i.id), p = o?.facets ?? [], { getColumnDisplayName: h, getHelpText: g } = r(), b = c ? h(c.name) : i.id, x = c ? g(c.name) : void 0, S = p.findIndex((e) => e.columnName === l?.name && e.jsonPath == null), C = S !== -1 && p[S].facetType === "enumeration", w = p[S], T = c && c.name.toLowerCase() === a?.columnName?.toLowerCase(), E = c
|
|
116
|
+
let { column: i } = e, { lockedColumn: a } = t(), { data: o } = n(), s = o?.columnModels ?? [], c = (o?.selectColumns ?? []).find((e) => e.name === i.id), l = s.find((e) => e.name === i.id), p = o?.facets ?? [], { getColumnDisplayName: h, getHelpText: g } = r(), b = c ? h(c.name) : i.id, x = c ? g(c.name) : void 0, S = p.findIndex((e) => e.columnName === l?.name && e.jsonPath == null), C = S !== -1 && p[S].facetType === "enumeration", w = p[S], T = c && c.name.toLowerCase() === a?.columnName?.toLowerCase(), E = c?.name == "id" && c.columnType == y.ENTITYID;
|
|
117
117
|
return e.column.getCanFilter = m(() => !!(C && !T && l), [
|
|
118
118
|
C,
|
|
119
119
|
T,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseTableRenderers.js","names":[],"sources":["../../../src/components/SynapseTable/SynapseTableRenderers.tsx"],"sourcesContent":["import { useGetEntityHeader } from '@/synapse-queries'\nimport { Checkbox } from '@mui/material'\nimport {\n ColumnTypeEnum,\n FacetColumnResult,\n FacetColumnResultValues,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport {\n CellContext,\n createColumnHelper,\n HeaderContext,\n} from '@tanstack/react-table'\nimport { useAtom, useAtomValue } from 'jotai'\nimport { isEqual } from 'lodash-es'\nimport { useCallback } from 'react'\nimport AddToDownloadListV2 from '../AddToDownloadListV2'\nimport FileEntityDirectDownload from '../DirectDownload/FileEntityDirectDownload'\nimport HasAccessV2 from '../HasAccess'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport {\n isRowSelectedAtom,\n selectedRowsAtom,\n} from '../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../QueryWrapper/useGetQueryMetadata'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport { EnumFacetFilter } from '../widgets/query-filter/EnumFacetFilter/EnumFacetFilter'\nimport EntityIDColumnCopyIcon from './EntityIDColumnCopyIcon'\nimport SynapseTableCell from './SynapseTableCell'\nimport { useSynapseTableContext } from './SynapseTableContext'\nimport { useInView } from 'react-intersection-observer'\n\n// Add a prefix to these column IDs so they don't collide with actual column names\nconst columnIdPrefix =\n 'org.sagebionetworks.web.client.SynapseTablePredefinedColumn'\n\nconst columnHelper = createColumnHelper<Row>()\n\nfunction RowSelectionCell<TValue = unknown>(props: CellContext<Row, TValue>) {\n const { row, table } = props\n const rowSet = table.options.meta?.rowSet\n\n const isRowSelected = useAtomValue(isRowSelectedAtom)\n const [selectedRows, setSelectedRows] = useAtom(selectedRowsAtom)\n\n return (\n <div>\n <Checkbox\n inputProps={{ 'aria-label': 'Select row' }}\n checked={isRowSelected(row.original, rowSet!.headers)}\n onChange={(_event, checked) => {\n const cloneSelectedRows = [...selectedRows]\n if (checked) {\n cloneSelectedRows.push(row.original)\n } else {\n const index = cloneSelectedRows.findIndex(selectedRow =>\n isEqual(selectedRow, row.original),\n )\n if (index > -1) {\n cloneSelectedRows.splice(index, 1)\n }\n }\n // update context on change\n setSelectedRows(cloneSelectedRows)\n }}\n />\n </div>\n )\n}\n\nexport const rowSelectionColumn = columnHelper.display({\n id: `${columnIdPrefix}.RowSelectionColumn`,\n enableResizing: false,\n cell: RowSelectionCell,\n maxSize: 36,\n meta: {\n textAlign: 'center',\n },\n})\n\nfunction AddToDownloadListCell<TValue = unknown>(\n props: CellContext<Row, TValue>,\n) {\n const entityId = getEntityOrRowId(props)!\n const versionNumberString = getEntityOrRowVersion(props)\n const versionNumber = versionNumberString\n ? parseInt(versionNumberString)\n : undefined\n const { data: entityHeader } = useGetEntityHeader(entityId)\n return (\n <div data-testid={'AddToDownloadListCell'}>\n {entityHeader?.type === 'org.sagebionetworks.repo.model.FileEntity' && (\n <AddToDownloadListV2\n entityId={entityId}\n entityVersionNumber={versionNumber}\n />\n )}\n </div>\n )\n}\n\nexport const addToDownloadListColumn = columnHelper.display({\n id: `${columnIdPrefix}.AddToDownloadListColumn`,\n enableResizing: false,\n cell: AddToDownloadListCell,\n maxSize: 50,\n meta: {\n textAlign: 'center',\n },\n})\n\nfunction DirectDownloadCell<TValue = unknown>(props: CellContext<Row, TValue>) {\n const entityId = getEntityOrRowId(props)!\n const versionNumber = getEntityOrRowVersion(props)\n\n return (\n <div data-testid={'DirectDownloadCell'}>\n <FileEntityDirectDownload\n entityId={entityId}\n entityVersionNumber={versionNumber}\n iconSvgPropOverrides={{ sx: { color: 'primary.main' } }}\n />\n </div>\n )\n}\n\nexport const directDownloadColumn = columnHelper.display({\n id: `${columnIdPrefix}.DirectDownload`,\n enableResizing: false,\n cell: DirectDownloadCell,\n maxSize: 50,\n meta: {\n textAlign: 'center',\n },\n})\n\n/**\n * Given the (tanstack react) Table CellContext, return the rowId of the current Synapse Table Row.\n * If a rowEntityIDColumnName was provided in the table config, then instead return the entityID found in\n * that cell of the current Row.\n */\nfunction getEntityOrRowId<TValue = unknown>(\n props: CellContext<Row, TValue>,\n): string | undefined {\n const { row, table } = props\n const rowEntityIDColumnIndex = table.options.meta?.rowEntityIDColumnIndex\n const entityId =\n rowEntityIDColumnIndex !== undefined\n ? row.original.values[rowEntityIDColumnIndex]!\n : row.original.rowId?.toString()\n return entityId\n}\n\n/**\n * Given the (tanstack react) Table CellContext, return true if the table configuration defines a row entity version column name.\n * This will be used as the entity that represents the current Row.\n * @param props\n * @returns\n */\nfunction isRowEntityColumn<TValue = unknown>(\n props: CellContext<Row, TValue>,\n): boolean {\n const { table } = props\n return table.options.meta?.rowEntityVersionColumnIndex !== undefined\n}\n\n/**\n * Given the (tanstack react) Table CellContext, return the version of the current Synapse Table Row.\n * If a rowEntityVersionColumnName was provided in the table config, then instead return the version found in\n * that cell of the current Row.\n */\nfunction getEntityOrRowVersion<TValue = unknown>(\n props: CellContext<Row, TValue>,\n): string | undefined {\n const { row, table } = props\n const rowEntityVersionColumnIndex =\n table.options.meta?.rowEntityVersionColumnIndex\n const versionNumber =\n rowEntityVersionColumnIndex !== undefined\n ? row.original.values[rowEntityVersionColumnIndex]!\n : row.original.versionNumber?.toString()\n return versionNumber\n}\n\nfunction AccessCell<TValue = unknown>(props: CellContext<Row, TValue>) {\n const { showExternalAccessIcon } = useSynapseTableContext()\n const { ref, inView } = useInView({ triggerOnce: true })\n const entityId = getEntityOrRowId(props)!\n\n // If showExternalAccessIcon is true, defer rendering until the cell is in view to limit simultaneous API calls\n const canRenderAccessIcon =\n !showExternalAccessIcon || (showExternalAccessIcon && inView)\n\n return (\n <div ref={ref} data-testid=\"AccessCell\">\n {canRenderAccessIcon && (\n <HasAccessV2\n key={entityId}\n entityId={entityId}\n showButtonText={false}\n showExternalAccessIcon={showExternalAccessIcon}\n />\n )}\n </div>\n )\n}\n\nexport const accessColumn = columnHelper.display({\n id: `${columnIdPrefix}.Access`,\n enableResizing: false,\n cell: AccessCell,\n maxSize: 50,\n meta: {\n textAlign: 'center',\n },\n})\n\nexport function TableDataColumnHeader(\n props: HeaderContext<Row, string | null>,\n) {\n const { column } = props\n const { lockedColumn } = useQueryContext()\n const { data: queryMetadata } = useGetQueryMetadata()\n const columnModels = queryMetadata?.columnModels ?? []\n const selectColumns = queryMetadata?.selectColumns ?? []\n const selectColumn = selectColumns.find(sc => sc.name === column.id)\n const columnModel = columnModels.find(cm => cm.name === column.id)\n const facets = queryMetadata?.facets ?? []\n const { getColumnDisplayName, getHelpText } = useQueryVisualizationContext()\n\n const displayColumnName = selectColumn\n ? getColumnDisplayName(selectColumn.name)\n : column.id\n const columnHelpText = selectColumn\n ? getHelpText(selectColumn.name)\n : undefined\n // we have to figure out if the current column is a facet selection\n const facetIndex: number = facets.findIndex(\n (facetColumnResult: FacetColumnResult) => {\n return (\n facetColumnResult.columnName === columnModel?.name &&\n // Exclude JSON subcolumn facets, since there may be more than one on a given column\n facetColumnResult.jsonPath == undefined\n )\n },\n )\n // the header must be included in the facets and it has to be enumerable for current rendering capabilities\n const isFacetSelection: boolean =\n facetIndex !== -1 && facets[facetIndex].facetType === 'enumeration'\n const facet = facets[facetIndex] as FacetColumnResultValues\n const isLockedColumn =\n selectColumn &&\n selectColumn.name.toLowerCase() === lockedColumn?.columnName?.toLowerCase() // used in details page to disable filter the column\n const isEntityIDColumn =\n selectColumn &&\n selectColumn.name == 'id' &&\n selectColumn.columnType == ColumnTypeEnum.ENTITYID\n\n // TODO: enableFiltering should be specified on the column, but for now it's easier to override `getCanFilter` here where we have the facet information\n props.column.getCanFilter = useCallback(\n () => Boolean(isFacetSelection && !isLockedColumn && columnModel),\n [isFacetSelection, isLockedColumn, columnModel],\n )\n\n return (\n <ColumnHeader\n {...props}\n title={displayColumnName}\n helpText={columnHelpText}\n filterControl={\n <span>\n <EnumFacetFilter\n containerAs=\"Dropdown\"\n facet={facet}\n defaultShowAllValues={true}\n />\n </span>\n }\n additionalButtons={\n <>{isEntityIDColumn && <EntityIDColumnCopyIcon size={'small'} />}</>\n }\n />\n )\n}\n\nexport function TableDataCell(props: CellContext<Row, string | null>) {\n const { cell, table } = props\n const { data: queryMetadata } = useGetQueryMetadata()\n const entityOrRowId = getEntityOrRowId(props)\n const entityOrRowVersion = getEntityOrRowVersion(props)\n const versionNumber =\n entityOrRowVersion !== undefined ? parseInt(entityOrRowVersion) : undefined\n const selectColumns = table.options.meta?.rowSet?.headers ?? []\n const selectColumn = selectColumns.find(cm => cm.name === cell.column.id)\n const columnModels = queryMetadata?.columnModels ?? []\n const { columnLinks } = useSynapseTableContext()\n if (selectColumn) {\n const columnLinkConfig = (columnLinks ?? []).find(el => {\n return el.matchColumnName === selectColumn.name\n })\n // Prefer the authoritative ColumnModel type over the SelectColumn type.\n // For regular table queries the two are always identical. For search queries,\n // SelectColumn types are fabricated as 'STRING' during the conversion from\n // SearchQueryResults, but columnModels (from the entity bundle) carry the\n // correct types (DATE, USERID, etc.) and are available once that bundle loads.\n const columnType =\n columnModels.find(cm => cm.name === selectColumn.name)?.columnType ??\n selectColumn.columnType\n const isBold = cell.column.getIsSorted() ? 'SRC-boldText' : ''\n return (\n <SynapseTableCell\n key={cell.id}\n columnType={columnType}\n columnValue={cell.getValue()}\n isBold={isBold}\n columnLinkConfig={columnLinkConfig}\n columnName={selectColumn.name}\n rowData={cell.row.original.values}\n selectColumns={selectColumns}\n columnModels={columnModels}\n rowId={entityOrRowId}\n rowVersionNumber={versionNumber}\n isRowEntityColumn={isRowEntityColumn(props)}\n />\n )\n } else return <td key={cell.id}></td>\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SynapseTableRenderers.js","names":[],"sources":["../../../src/components/SynapseTable/SynapseTableRenderers.tsx"],"sourcesContent":["import { useGetEntityHeader } from '@/synapse-queries'\nimport { Checkbox } from '@mui/material'\nimport {\n ColumnTypeEnum,\n FacetColumnResult,\n FacetColumnResultValues,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport {\n CellContext,\n createColumnHelper,\n HeaderContext,\n} from '@tanstack/react-table'\nimport { useAtom, useAtomValue } from 'jotai'\nimport { isEqual } from 'lodash-es'\nimport { useCallback } from 'react'\nimport AddToDownloadListV2 from '../AddToDownloadListV2'\nimport FileEntityDirectDownload from '../DirectDownload/FileEntityDirectDownload'\nimport HasAccessV2 from '../HasAccess'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport {\n isRowSelectedAtom,\n selectedRowsAtom,\n} from '../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../QueryWrapper/useGetQueryMetadata'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport { EnumFacetFilter } from '../widgets/query-filter/EnumFacetFilter/EnumFacetFilter'\nimport EntityIDColumnCopyIcon from './EntityIDColumnCopyIcon'\nimport SynapseTableCell from './SynapseTableCell'\nimport { useSynapseTableContext } from './SynapseTableContext'\nimport { useInView } from 'react-intersection-observer'\n\n// Add a prefix to these column IDs so they don't collide with actual column names\nconst columnIdPrefix =\n 'org.sagebionetworks.web.client.SynapseTablePredefinedColumn'\n\nconst columnHelper = createColumnHelper<Row>()\n\nfunction RowSelectionCell<TValue = unknown>(props: CellContext<Row, TValue>) {\n const { row, table } = props\n const rowSet = table.options.meta?.rowSet\n\n const isRowSelected = useAtomValue(isRowSelectedAtom)\n const [selectedRows, setSelectedRows] = useAtom(selectedRowsAtom)\n\n return (\n <div>\n <Checkbox\n inputProps={{ 'aria-label': 'Select row' }}\n checked={isRowSelected(row.original, rowSet!.headers)}\n onChange={(_event, checked) => {\n const cloneSelectedRows = [...selectedRows]\n if (checked) {\n cloneSelectedRows.push(row.original)\n } else {\n const index = cloneSelectedRows.findIndex(selectedRow =>\n isEqual(selectedRow, row.original),\n )\n if (index > -1) {\n cloneSelectedRows.splice(index, 1)\n }\n }\n // update context on change\n setSelectedRows(cloneSelectedRows)\n }}\n />\n </div>\n )\n}\n\nexport const rowSelectionColumn = columnHelper.display({\n id: `${columnIdPrefix}.RowSelectionColumn`,\n enableResizing: false,\n cell: RowSelectionCell,\n maxSize: 36,\n meta: {\n textAlign: 'center',\n },\n})\n\nfunction AddToDownloadListCell<TValue = unknown>(\n props: CellContext<Row, TValue>,\n) {\n const entityId = getEntityOrRowId(props)!\n const versionNumberString = getEntityOrRowVersion(props)\n const versionNumber = versionNumberString\n ? parseInt(versionNumberString)\n : undefined\n const { data: entityHeader } = useGetEntityHeader(entityId)\n return (\n <div data-testid={'AddToDownloadListCell'}>\n {entityHeader?.type === 'org.sagebionetworks.repo.model.FileEntity' && (\n <AddToDownloadListV2\n entityId={entityId}\n entityVersionNumber={versionNumber}\n />\n )}\n </div>\n )\n}\n\nexport const addToDownloadListColumn = columnHelper.display({\n id: `${columnIdPrefix}.AddToDownloadListColumn`,\n enableResizing: false,\n cell: AddToDownloadListCell,\n maxSize: 50,\n meta: {\n textAlign: 'center',\n },\n})\n\nfunction DirectDownloadCell<TValue = unknown>(props: CellContext<Row, TValue>) {\n const entityId = getEntityOrRowId(props)!\n const versionNumber = getEntityOrRowVersion(props)\n\n return (\n <div data-testid={'DirectDownloadCell'}>\n <FileEntityDirectDownload\n entityId={entityId}\n entityVersionNumber={versionNumber}\n iconSvgPropOverrides={{ sx: { color: 'primary.main' } }}\n />\n </div>\n )\n}\n\nexport const directDownloadColumn = columnHelper.display({\n id: `${columnIdPrefix}.DirectDownload`,\n enableResizing: false,\n cell: DirectDownloadCell,\n maxSize: 50,\n meta: {\n textAlign: 'center',\n },\n})\n\n/**\n * Given the (tanstack react) Table CellContext, return the rowId of the current Synapse Table Row.\n * If a rowEntityIDColumnName was provided in the table config, then instead return the entityID found in\n * that cell of the current Row.\n */\nfunction getEntityOrRowId<TValue = unknown>(\n props: CellContext<Row, TValue>,\n): string | undefined {\n const { row, table } = props\n const rowEntityIDColumnIndex = table.options.meta?.rowEntityIDColumnIndex\n const entityId =\n rowEntityIDColumnIndex !== undefined\n ? row.original.values[rowEntityIDColumnIndex]!\n : row.original.rowId?.toString()\n return entityId\n}\n\n/**\n * Given the (tanstack react) Table CellContext, return true if the table configuration defines a row entity version column name.\n * This will be used as the entity that represents the current Row.\n * @param props\n * @returns\n */\nfunction isRowEntityColumn<TValue = unknown>(\n props: CellContext<Row, TValue>,\n): boolean {\n const { table } = props\n return table.options.meta?.rowEntityVersionColumnIndex !== undefined\n}\n\n/**\n * Given the (tanstack react) Table CellContext, return the version of the current Synapse Table Row.\n * If a rowEntityVersionColumnName was provided in the table config, then instead return the version found in\n * that cell of the current Row.\n */\nfunction getEntityOrRowVersion<TValue = unknown>(\n props: CellContext<Row, TValue>,\n): string | undefined {\n const { row, table } = props\n const rowEntityVersionColumnIndex =\n table.options.meta?.rowEntityVersionColumnIndex\n const versionNumber =\n rowEntityVersionColumnIndex !== undefined\n ? row.original.values[rowEntityVersionColumnIndex]!\n : row.original.versionNumber?.toString()\n return versionNumber\n}\n\nfunction AccessCell<TValue = unknown>(props: CellContext<Row, TValue>) {\n const { showExternalAccessIcon } = useSynapseTableContext()\n const { ref, inView } = useInView({ triggerOnce: true })\n const entityId = getEntityOrRowId(props)!\n\n // If showExternalAccessIcon is true, defer rendering until the cell is in view to limit simultaneous API calls\n const canRenderAccessIcon =\n !showExternalAccessIcon || (showExternalAccessIcon && inView)\n\n return (\n <div ref={ref} data-testid=\"AccessCell\">\n {canRenderAccessIcon && (\n <HasAccessV2\n key={entityId}\n entityId={entityId}\n showButtonText={false}\n showExternalAccessIcon={showExternalAccessIcon}\n />\n )}\n </div>\n )\n}\n\nexport const accessColumn = columnHelper.display({\n id: `${columnIdPrefix}.Access`,\n enableResizing: false,\n cell: AccessCell,\n maxSize: 50,\n meta: {\n textAlign: 'center',\n },\n})\n\nexport function TableDataColumnHeader(\n props: HeaderContext<Row, string | null>,\n) {\n const { column } = props\n const { lockedColumn } = useQueryContext()\n const { data: queryMetadata } = useGetQueryMetadata()\n const columnModels = queryMetadata?.columnModels ?? []\n const selectColumns = queryMetadata?.selectColumns ?? []\n const selectColumn = selectColumns.find(sc => sc.name === column.id)\n const columnModel = columnModels.find(cm => cm.name === column.id)\n const facets = queryMetadata?.facets ?? []\n const { getColumnDisplayName, getHelpText } = useQueryVisualizationContext()\n\n const displayColumnName = selectColumn\n ? getColumnDisplayName(selectColumn.name)\n : column.id\n const columnHelpText = selectColumn\n ? getHelpText(selectColumn.name)\n : undefined\n // we have to figure out if the current column is a facet selection\n const facetIndex: number = facets.findIndex(\n (facetColumnResult: FacetColumnResult) => {\n return (\n facetColumnResult.columnName === columnModel?.name &&\n // Exclude JSON subcolumn facets, since there may be more than one on a given column\n facetColumnResult.jsonPath == undefined\n )\n },\n )\n // the header must be included in the facets and it has to be enumerable for current rendering capabilities\n const isFacetSelection: boolean =\n facetIndex !== -1 && facets[facetIndex].facetType === 'enumeration'\n const facet = facets[facetIndex] as FacetColumnResultValues\n const isLockedColumn =\n selectColumn &&\n selectColumn.name.toLowerCase() === lockedColumn?.columnName?.toLowerCase() // used in details page to disable filter the column\n const isEntityIDColumn =\n selectColumn?.name == 'id' &&\n selectColumn.columnType == ColumnTypeEnum.ENTITYID\n\n // TODO: enableFiltering should be specified on the column, but for now it's easier to override `getCanFilter` here where we have the facet information\n props.column.getCanFilter = useCallback(\n () => Boolean(isFacetSelection && !isLockedColumn && columnModel),\n [isFacetSelection, isLockedColumn, columnModel],\n )\n\n return (\n <ColumnHeader\n {...props}\n title={displayColumnName}\n helpText={columnHelpText}\n filterControl={\n <span>\n <EnumFacetFilter\n containerAs=\"Dropdown\"\n facet={facet}\n defaultShowAllValues={true}\n />\n </span>\n }\n additionalButtons={\n <>{isEntityIDColumn && <EntityIDColumnCopyIcon size={'small'} />}</>\n }\n />\n )\n}\n\nexport function TableDataCell(props: CellContext<Row, string | null>) {\n const { cell, table } = props\n const { data: queryMetadata } = useGetQueryMetadata()\n const entityOrRowId = getEntityOrRowId(props)\n const entityOrRowVersion = getEntityOrRowVersion(props)\n const versionNumber =\n entityOrRowVersion !== undefined ? parseInt(entityOrRowVersion) : undefined\n const selectColumns = table.options.meta?.rowSet?.headers ?? []\n const selectColumn = selectColumns.find(cm => cm.name === cell.column.id)\n const columnModels = queryMetadata?.columnModels ?? []\n const { columnLinks } = useSynapseTableContext()\n if (selectColumn) {\n const columnLinkConfig = (columnLinks ?? []).find(el => {\n return el.matchColumnName === selectColumn.name\n })\n // Prefer the authoritative ColumnModel type over the SelectColumn type.\n // For regular table queries the two are always identical. For search queries,\n // SelectColumn types are fabricated as 'STRING' during the conversion from\n // SearchQueryResults, but columnModels (from the entity bundle) carry the\n // correct types (DATE, USERID, etc.) and are available once that bundle loads.\n const columnType =\n columnModels.find(cm => cm.name === selectColumn.name)?.columnType ??\n selectColumn.columnType\n const isBold = cell.column.getIsSorted() ? 'SRC-boldText' : ''\n return (\n <SynapseTableCell\n key={cell.id}\n columnType={columnType}\n columnValue={cell.getValue()}\n isBold={isBold}\n columnLinkConfig={columnLinkConfig}\n columnName={selectColumn.name}\n rowData={cell.row.original.values}\n selectColumns={selectColumns}\n columnModels={columnModels}\n rowId={entityOrRowId}\n rowVersionNumber={versionNumber}\n isRowEntityColumn={isRowEntityColumn(props)}\n />\n )\n } else return <td key={cell.id}></td>\n}\n"],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ import { ReactNode } from 'react';
|
|
|
4
4
|
export type TopLevelControlsProps = {
|
|
5
5
|
name?: string;
|
|
6
6
|
hideDownload?: boolean;
|
|
7
|
+
/** If true, the "Add ... files to Download List" option in the Download menu will be hidden */
|
|
8
|
+
hideAddToDownloadListMenuItem?: boolean;
|
|
9
|
+
/** If true, the "Programmatic Options" option in the Download menu will be hidden */
|
|
10
|
+
hideProgrammaticOptionsMenuItem?: boolean;
|
|
7
11
|
hideVisualizationsControl?: boolean;
|
|
8
12
|
hideFacetFilterControl?: boolean;
|
|
9
13
|
hideQueryCount?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopLevelControls.d.ts","sourceRoot":"","sources":["../../../../src/components/SynapseTable/TopLevelControls/TopLevelControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,GAAG,EAEJ,MAAM,iCAAiC,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AA4B3C,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,SAAS,CAAA;IACjE,YAAY,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAA;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,QAAA,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,KAAG,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"TopLevelControls.d.ts","sourceRoot":"","sources":["../../../../src/components/SynapseTable/TopLevelControls/TopLevelControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,GAAG,EAEJ,MAAM,iCAAiC,CAAA;AAGxC,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AA4B3C,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,+FAA+F;IAC/F,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,qFAAqF;IACrF,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,SAAS,CAAA;IACjE,YAAY,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B,CAAA;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAA;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,QAAA,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,KAAG,KAAK,CAAC,SAmR9D,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|