synapse-react-client 4.0.45 → 4.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.js +1 -1
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts +1 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.d.ts.map +1 -1
- package/dist/aridhia-queries/AridhiaKeyFactory.js +3 -0
- package/dist/aridhia-queries/AridhiaKeyFactory.js.map +1 -1
- package/dist/aridhia-queries/aridhiaTokenExchange.js +6 -6
- package/dist/aridhia-queries/index.d.ts +1 -0
- package/dist/aridhia-queries/index.d.ts.map +1 -1
- package/dist/aridhia-queries/index.js +11 -10
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts +19 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.d.ts.map +1 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js +14 -0
- package/dist/aridhia-queries/useGetAridhiaVocabularyTerm.js.map +1 -0
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +6 -4
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/AccessorRequirementHelpText.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +11 -8
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSectionForm.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js +17 -13
- package/dist/components/Aridhia/DarWizard/DarSectionForm.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts +3 -3
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +33 -34
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.js +1 -1
- package/dist/components/Aridhia/fairFormToRjsf.js.map +1 -1
- package/dist/components/Authentication/LastLoginInfo.js +1 -1
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +6 -6
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.d.ts.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js +4 -4
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +4 -4
- package/dist/components/CitationPopover/CitationPopoverContent.js +4 -4
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/ComponentCollapse.d.ts.map +1 -1
- package/dist/components/ComponentCollapse.js +2 -1
- package/dist/components/ComponentCollapse.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +231 -219
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.d.ts.map +1 -1
- package/dist/components/DataGrid/SyncGridWithSourceButton.js +5 -4
- package/dist/components/DataGrid/SyncGridWithSourceButton.js.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +7 -5
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js +4 -4
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsButton.js +4 -4
- package/dist/components/DataGrid/components/ReorderColumnsButton.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +12 -8
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js +5 -5
- package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.js +14 -14
- package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.js +22 -13
- package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +2 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +1 -3
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +16 -10
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
- package/dist/components/EntityFinder/EntityFinder.js +4 -4
- package/dist/components/EntityFinder/EntityIdTextField.js +1 -1
- package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.d.ts.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js +5 -4
- package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.d.ts.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js +2 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.d.ts.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.js +11 -7
- package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.d.ts.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js +4 -3
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +2 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +2 -1
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.js +2 -1
- package/dist/components/FormTemplateEditor/FieldLibrary.js.map +1 -1
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js +4 -4
- package/dist/components/FormTemplateEditor/FieldLibraryRow.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormStructurePanel.js +1 -1
- package/dist/components/FormTemplateEditor/FormStructurePanel.js.map +1 -1
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js +1 -1
- package/dist/components/FormTemplateEditor/FormTemplateEditorForm.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/StepCard.js +15 -10
- package/dist/components/FormTemplateEditor/StepCard.js.map +1 -1
- package/dist/components/FormTemplateEditor/StepFieldRow.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/StepFieldRow.js +11 -6
- package/dist/components/FormTemplateEditor/StepFieldRow.js.map +1 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.d.ts.map +1 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js +2 -1
- package/dist/components/FormTemplateEditor/TemplateFileHandleField.js.map +1 -1
- package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +45 -45
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js +5 -5
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/HelpPopover/HelpPopover.js +1 -1
- package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
- package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
- package/dist/components/IconSvg/IconSvg.js +154 -47
- package/dist/components/IconSvg/IconSvg.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js +19 -16
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +2 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts +9 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.d.ts.map +1 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js +21 -0
- package/dist/components/JsonSchemaForm/widgets/PhoneWidget.js.map +1 -0
- package/dist/components/Markdown/MarkdownCollapse.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownCollapse.js +3 -1
- package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/OAuthClientManagement/OAuthManagement.js +14 -13
- package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
- package/dist/components/PortalList/PortalCard.d.ts.map +1 -1
- package/dist/components/PortalList/PortalCard.js +6 -5
- package/dist/components/PortalList/PortalCard.js.map +1 -1
- package/dist/components/PortalList/PortalList.js +4 -4
- package/dist/components/PortalList/PortalList.js.map +1 -1
- package/dist/components/ProjectVisibilityChip/ProjectVisibilityChip.js +6 -6
- package/dist/components/QueryBuilder/FilterConditionRow.js +4 -4
- package/dist/components/QueryCountButton/QueryCountButton.js +5 -5
- package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardLarge.js +5 -5
- package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/ShareThisPage/ShareThisPage.js +4 -4
- package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
- package/dist/components/SustainabilityScorecard/DialLayout.js +1 -1
- package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.js +1 -1
- package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js +2 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
- package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js +1 -1
- package/dist/components/SynapseChat/components/ChatInputArea/ChatInputArea.js.map +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.d.ts.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +2 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js +4 -4
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +4 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +12 -9
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +140 -140
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +9 -9
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js +6 -4
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.d.ts.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js +4 -3
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js +1 -1
- package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementDashboard.js +4 -4
- package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
- package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -1
- package/dist/components/dataaccess/EDucTemplateTable.js +13 -11
- package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -1
- package/dist/components/dataaccess/FormTemplateTable.js +6 -6
- package/dist/components/dataaccess/FormTemplateTable.js.map +1 -1
- package/dist/components/dataaccess/ReviewerDashboard.js +17 -17
- package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +4 -4
- package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/download_list/DownloadDetails.d.ts.map +1 -1
- package/dist/components/download_list/DownloadDetails.js +12 -10
- package/dist/components/download_list/DownloadDetails.js.map +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
- package/dist/components/error/ErrorChip.d.ts.map +1 -1
- package/dist/components/error/ErrorChip.js +2 -1
- package/dist/components/error/ErrorChip.js.map +1 -1
- package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +14 -14
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +4 -4
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -1
- package/dist/features/curator/dashboard/components/NextStepButton.js +7 -6
- package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +8 -8
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +4 -4
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +4 -4
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +4 -4
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskCategoryCard.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskFormHeader.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +10 -10
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +8 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +52 -41
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.js +70 -67
- package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/gridHandlers.js +2 -2
- package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
- package/dist/mocks/msw/server.d.ts.map +1 -1
- package/dist/mocks/msw/server.js +4 -2
- package/dist/mocks/msw/server.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.d.ts.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
- package/dist/theme/DefaultTheme.d.ts.map +1 -1
- package/dist/theme/DefaultTheme.js +4 -1
- package/dist/theme/DefaultTheme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/AppUtils/AppUtils.js +1 -1
- package/dist/utils/AppUtils/AppUtils.js.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
- package/package.json +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RJSFInputLabel.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RJSFInputLabel.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,QAAQ,EACR,UAAU,EACV,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,iBAAiB,EAAY,MAAM,OAAO,CAAA;AAEnD,KAAK,mBAAmB,CACtB,CAAC,GAAG,GAAG,EACP,CAAC,SAAS,gBAAgB,GAAG,UAAU,EACvC,CAAC,SAAS,eAAe,GAAG,GAAG,IAC7B,iBAAiB,CAAC;IACpB;wBACoB;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,sCAAsC;IACtC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,4CAA4C;IAC5C,WAAW,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,4BAA4B;IAC5B,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAC5B,CAAC,CAAA;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,GAAG,GAAG,EACP,CAAC,SAAS,gBAAgB,GAAG,UAAU,EACvC,CAAC,SAAS,eAAe,GAAG,GAAG,EAC/B,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2CAsDpC"}
|
|
@@ -2,7 +2,8 @@ import { StyledPopover as e } from "../../styled/StyledPopover.js";
|
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { Collapse as n, IconButton as r, Tooltip as i } from "@mui/material";
|
|
4
4
|
import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
-
import
|
|
5
|
+
import c from "@mui/icons-material/HelpOutline";
|
|
6
|
+
import l from "@mui/icons-material/HelpTwoTone";
|
|
6
7
|
//#region src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx
|
|
7
8
|
function u(u) {
|
|
8
9
|
let { hideLabel: d = !1, fieldLabel: f, description: p, registry: m, children: h } = u, g = m.formContext.descriptionVariant || "popover", [_, v] = t(!1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RJSFInputLabel.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx"],"sourcesContent":["import { StyledPopover } from '@/components/styled/StyledPopover'\nimport
|
|
1
|
+
{"version":3,"file":"RJSFInputLabel.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx"],"sourcesContent":["import { StyledPopover } from '@/components/styled/StyledPopover'\nimport HelpOutline from '@mui/icons-material/HelpOutline'\nimport HelpTwoTone from '@mui/icons-material/HelpTwoTone'\nimport { Collapse, IconButton, Tooltip } from '@mui/material'\nimport {\n FormContextType,\n Registry,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\nimport { PropsWithChildren, useState } from 'react'\n\ntype RJSFInputLabelProps<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n> = PropsWithChildren<{\n /** If true, the label will not be shown\n * @default false */\n hideLabel?: boolean\n /** The rendered label of the field */\n fieldLabel: React.ReactNode\n /** The rendered description of the field */\n description: React.ReactNode\n /** The `registry` object */\n registry: Registry<T, S, F>\n}>\n\n/**\n * Component that handles rendering our custom input label and description fields for RJSF.\n */\nexport function RJSFInputLabelWrapper<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: RJSFInputLabelProps<T, S, F>) {\n const {\n hideLabel = false,\n fieldLabel,\n description,\n registry,\n children,\n } = props\n const descriptionVariant =\n registry.formContext.descriptionVariant || 'popover'\n\n const [showDetails, setShowDetails] = useState(false)\n\n const expandButton = (\n <Tooltip title={'More Info'}>\n <IconButton\n onClick={e => {\n e.preventDefault()\n setShowDetails(!showDetails)\n }}\n aria-expanded={showDetails}\n size={'small'}\n >\n <HelpOutline color={'primary'} sx={{ width: '16px', height: '16px' }} />\n </IconButton>\n </Tooltip>\n )\n\n const popoverButton = (\n <StyledPopover popoverContent={description} maxWidth=\"350px\">\n <HelpTwoTone className={`HelpButton`} />\n </StyledPopover>\n )\n\n return (\n <>\n {!hideLabel && (\n <div className=\"LabelContainer\">\n {fieldLabel}\n {description && descriptionVariant === 'popover' && popoverButton}\n {description && descriptionVariant === 'expand' && expandButton}\n </div>\n )}\n {!hideLabel && descriptionVariant === 'inline' && description && (\n <div className=\"field-description-inline\">{description}</div>\n )}\n {children}\n {!hideLabel && descriptionVariant === 'expand' && (\n <Collapse className=\"field-description\" in={showDetails}>\n {description}\n </Collapse>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;AA+BA,SAAgB,EAId,GAAqC;CACrC,IAAM,EACJ,eAAY,IACZ,eACA,gBACA,aACA,gBACE,GACE,IACJ,EAAS,YAAY,sBAAsB,WAEvC,CAAC,GAAa,KAAkB,EAAS,EAAK;CAuBpD,OACE,kBAAA,GAAA,EAAA,UAAA;EACG,CAAC,KACA,kBAAC,OAAD;GAAK,WAAU;aAAf;IACG;IACA,KAAe,MAAuB,aAV7C,kBAAC,GAAD;KAAe,gBAAgB;KAAa,UAAS;eACnD,kBAAC,GAAD,EAAa,WAAW,aAAe,CAAA;IAC1B,CAQ2C;IACnD,KAAe,MAAuB,YA1B7C,kBAAC,GAAD;KAAS,OAAO;eACd,kBAAC,GAAD;MACE,UAAS,MAAK;OAEZ,AADA,EAAE,eAAe,GACjB,EAAe,CAAC,CAAW;MAC7B;MACA,iBAAe;MACf,MAAM;gBAEN,kBAAC,GAAD;OAAa,OAAO;OAAW,IAAI;QAAE,OAAO;QAAQ,QAAQ;OAAO;MAAI,CAAA;KAC7D,CAAA;IACL,CAegD;GAChD;;EAEN,CAAC,KAAa,MAAuB,YAAY,KAChD,kBAAC,OAAD;GAAK,WAAU;aAA4B;EAAiB,CAAA;EAE7D;EACA,CAAC,KAAa,MAAuB,YACpC,kBAAC,GAAD;GAAU,WAAU;GAAoB,IAAI;aACzC;EACO,CAAA;CAEZ,EAAA,CAAA;AAEN"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Widget } from '@rjsf/utils';
|
|
2
|
+
export declare const PHONE_DEFAULT_COUNTRY = "US";
|
|
3
|
+
export declare const PHONE_PREFERRED_COUNTRIES: ["GB", "US"];
|
|
4
|
+
/**
|
|
5
|
+
* International phone number widget: a country dropdown (flag, name, calling code) with a
|
|
6
|
+
* numeric-only, country-formatted number input. The calling code is always part of the value.
|
|
7
|
+
*/
|
|
8
|
+
export declare const PhoneWidget: Widget;
|
|
9
|
+
//# sourceMappingURL=PhoneWidget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneWidget.d.ts","sourceRoot":"","sources":["../../../../src/components/JsonSchemaForm/widgets/PhoneWidget.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,aAAa,CAAA;AAGjD,eAAO,MAAM,qBAAqB,OAAO,CAAA;AACzC,eAAO,MAAM,yBAAyB,EAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAErE;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MA6BzB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { MuiTelInput as t } from "mui-tel-input";
|
|
3
|
+
//#region src/components/JsonSchemaForm/widgets/PhoneWidget.tsx
|
|
4
|
+
var n = "US", r = ["GB", "US"], i = ({ id: n, disabled: i, readonly: a, required: o, value: s, onChange: c, onBlur: l, onFocus: u }) => /* @__PURE__ */ e(t, {
|
|
5
|
+
fullWidth: !0,
|
|
6
|
+
id: n,
|
|
7
|
+
required: o,
|
|
8
|
+
disabled: i,
|
|
9
|
+
slotProps: { htmlInput: { readOnly: a } },
|
|
10
|
+
value: typeof s == "string" ? s : "",
|
|
11
|
+
defaultCountry: "US",
|
|
12
|
+
preferredCountries: r,
|
|
13
|
+
forceCallingCode: !0,
|
|
14
|
+
onChange: (e, t) => c(t.nationalNumber ? e : void 0),
|
|
15
|
+
onBlur: () => l(n, s),
|
|
16
|
+
onFocus: () => u(n, s)
|
|
17
|
+
});
|
|
18
|
+
//#endregion
|
|
19
|
+
export { n as PHONE_DEFAULT_COUNTRY, r as PHONE_PREFERRED_COUNTRIES, i as PhoneWidget };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=PhoneWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneWidget.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/widgets/PhoneWidget.tsx"],"sourcesContent":["import { Widget, WidgetProps } from '@rjsf/utils'\nimport { MuiTelInput } from 'mui-tel-input'\n\nexport const PHONE_DEFAULT_COUNTRY = 'US'\nexport const PHONE_PREFERRED_COUNTRIES = ['GB', 'US'] as ['GB', 'US']\n\n/**\n * International phone number widget: a country dropdown (flag, name, calling code) with a\n * numeric-only, country-formatted number input. The calling code is always part of the value.\n */\nexport const PhoneWidget: Widget = ({\n id,\n disabled,\n readonly,\n required,\n value,\n onChange,\n onBlur,\n onFocus,\n}: WidgetProps) => {\n return (\n <MuiTelInput\n fullWidth\n id={id}\n required={required}\n disabled={disabled}\n slotProps={{ htmlInput: { readOnly: readonly } }}\n value={typeof value === 'string' ? value : ''}\n defaultCountry={PHONE_DEFAULT_COUNTRY}\n preferredCountries={PHONE_PREFERRED_COUNTRIES}\n forceCallingCode\n // A bare calling code is not an answer; report it as empty so `required` still applies.\n onChange={(newValue, info) =>\n onChange(info.nationalNumber ? newValue : undefined)\n }\n onBlur={() => onBlur(id, value)}\n onFocus={() => onFocus(id, value)}\n />\n )\n}\n"],"mappings":";;;AAGA,IAAa,IAAwB,MACxB,IAA4B,CAAC,MAAM,IAAI,GAMvC,KAAuB,EAClC,OACA,aACA,aACA,aACA,UACA,aACA,WACA,iBAGE,kBAAC,GAAD;CACE,WAAA;CACI;CACM;CACA;CACV,WAAW,EAAE,WAAW,EAAE,UAAU,EAAS,EAAE;CAC/C,OAAO,OAAO,KAAU,WAAW,IAAQ;CAC3C,gBAAA;CACA,oBAAoB;CACpB,kBAAA;CAEA,WAAW,GAAU,MACnB,EAAS,EAAK,iBAAiB,IAAW,KAAA,CAAS;CAErD,cAAc,EAAO,GAAI,CAAK;CAC9B,eAAe,EAAQ,GAAI,CAAK;AACjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownCollapse.d.ts","sourceRoot":"","sources":["../../../src/components/Markdown/MarkdownCollapse.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAwB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"MarkdownCollapse.d.ts","sourceRoot":"","sources":["../../../src/components/Markdown/MarkdownCollapse.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAwB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AASzE,MAAM,MAAM,qBAAqB,GAAG;IAElC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD,GAAG,oBAAoB,CAAA;AAExB;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,qBAAqB,KAC3B,KAAK,CAAC,SAmHR,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -5,7 +5,9 @@ import { Markdown as r } from "./MarkdownSynapse.js";
|
|
|
5
5
|
import { useState as i } from "react";
|
|
6
6
|
import { Box as a, Collapse as o, Typography as s } from "@mui/material";
|
|
7
7
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
|
-
import
|
|
8
|
+
import u from "@mui/icons-material/ContentCopyTwoTone";
|
|
9
|
+
import d from "@mui/icons-material/KeyboardArrowDownTwoTone";
|
|
10
|
+
import f from "@mui/icons-material/KeyboardArrowUpTwoTone";
|
|
9
11
|
//#region src/components/Markdown/MarkdownCollapse.tsx
|
|
10
12
|
var p = (p) => {
|
|
11
13
|
let [m, h] = i(!1), [g, _] = i(), [v, y] = i(), b = (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownCollapse.js","names":[],"sources":["../../../src/components/Markdown/MarkdownCollapse.tsx"],"sourcesContent":["import React from 'react'\nimport { useState } from 'react'\nimport MarkdownSynapse, { MarkdownSynapseProps } from './MarkdownSynapse'\nimport { displayToast } from '../ToastMessage/ToastMessage'\nimport { Box, Collapse, SxProps, Typography } from '@mui/material'\nimport
|
|
1
|
+
{"version":3,"file":"MarkdownCollapse.js","names":[],"sources":["../../../src/components/Markdown/MarkdownCollapse.tsx"],"sourcesContent":["import React from 'react'\nimport { useState } from 'react'\nimport MarkdownSynapse, { MarkdownSynapseProps } from './MarkdownSynapse'\nimport { displayToast } from '../ToastMessage/ToastMessage'\nimport { Box, Collapse, SxProps, Typography } from '@mui/material'\nimport ContentCopyTwoTone from '@mui/icons-material/ContentCopyTwoTone'\nimport KeyboardArrowDownTwoTone from '@mui/icons-material/KeyboardArrowDownTwoTone'\nimport KeyboardArrowUpTwoTone from '@mui/icons-material/KeyboardArrowUpTwoTone'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\nimport { stripHTML } from './MarkdownUtils'\n\nexport type MarkdownCollapseProps = {\n // The text that should be shown. If not given, will default to \"full text\"\n textDescription?: string\n showCopyPlainText?: boolean\n title?: string\n setPlainTextResult?: (plainText: string) => void\n} & MarkdownSynapseProps\n\n/**\n * Wraps a MarkdownSynapse in a Collapse area, with customizable text description.\n * Will pass down all properties to the MarkdownSynapse component, so this can be used in\n * the portal detail pages.\n * @param props\n */\nexport const MarkdownCollapse = (\n props: MarkdownCollapseProps,\n): React.ReactNode => {\n const [show, setShow] = useState(false)\n const [wordCount, setWordCount] = useState<number>()\n const [plainText, setPlainText] = useState<string>()\n\n const onMarkdownProcessingDone: (\n htmlContent: string | null | undefined,\n ) => void = htmlContent => {\n if (htmlContent) {\n const textContent = stripHTML(htmlContent)\n if (textContent.trim() !== plainText) {\n setPlainText(textContent.trim())\n setWordCount(textContent.trim().split(/\\s+/).length)\n if (props.setPlainTextResult) {\n props.setPlainTextResult(textContent.trim())\n }\n }\n }\n }\n\n const {\n textDescription = 'full text',\n showCopyPlainText,\n markdown,\n ownerId,\n title,\n } = props\n if (markdown == undefined && ownerId == undefined) {\n return\n }\n const iconSx: SxProps = {\n color: 'grey.700',\n marginBottom: '-5px !important',\n height: '18px',\n }\n return (\n <div\n className=\"MarkdownCollapse\"\n style={{\n display: wordCount != undefined && wordCount > 0 ? 'block' : 'none',\n }}\n >\n {title && (\n <Typography variant=\"subtitle1\" sx={{ margin: '20px 0px 10px 0px' }}>\n {title}\n </Typography>\n )}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n backgroundColor: 'grey.200',\n padding: '15px',\n }}\n >\n <Typography\n variant=\"smallLink\"\n onClick={() => setShow(!show)}\n aria-controls=\"collapse-text\"\n aria-expanded={show}\n sx={{\n '&:hover': {\n cursor: 'pointer',\n },\n }}\n >\n {show ? 'Hide' : 'View'} {textDescription}{' '}\n {wordCount ? `(${wordCount} words)` : ''}\n {show ? (\n <KeyboardArrowUpTwoTone sx={iconSx} />\n ) : (\n <KeyboardArrowDownTwoTone sx={iconSx} />\n )}\n </Typography>\n {showCopyPlainText && (\n <Box>\n <Typography\n variant=\"smallLink\"\n onClick={() => {\n if (plainText) {\n copyStringToClipboard(plainText).then(\n () => {\n displayToast('Successfully copied to the clipboard')\n },\n err => {\n console.error(err)\n },\n )\n }\n }}\n sx={{\n '&:hover': {\n cursor: 'pointer',\n },\n }}\n >\n <ContentCopyTwoTone sx={iconSx} />\n Copy {textDescription} to clipboard\n </Typography>\n </Box>\n )}\n </Box>\n\n <Collapse in={show}>\n <Box sx={{ backgroundColor: 'grey.100', padding: '25px' }}>\n <div id=\"collapse-text\">\n <MarkdownSynapse\n {...props}\n onMarkdownProcessingDone={onMarkdownProcessingDone}\n />\n </div>\n </Box>\n </Collapse>\n </div>\n )\n}\n\nexport default MarkdownCollapse\n"],"mappings":";;;;;;;;;;;AAyBA,IAAa,KACX,MACoB;CACpB,IAAM,CAAC,GAAM,KAAW,EAAS,EAAK,GAChC,CAAC,GAAW,KAAgB,EAAiB,GAC7C,CAAC,GAAW,KAAgB,EAAiB,GAE7C,KAEM,MAAe;EACzB,IAAI,GAAa;GACf,IAAM,IAAc,EAAU,CAAW;GACzC,AAAI,EAAY,KAAK,MAAM,MACzB,EAAa,EAAY,KAAK,CAAC,GAC/B,EAAa,EAAY,KAAK,EAAE,MAAM,KAAK,EAAE,MAAM,GAC/C,EAAM,sBACR,EAAM,mBAAmB,EAAY,KAAK,CAAC;EAGjD;CACF,GAEM,EACJ,qBAAkB,aAClB,sBACA,aACA,YACA,aACE;CACJ,IAAI,KAAY,QAAa,KAAW,MACtC;CAEF,IAAM,IAAkB;EACtB,OAAO;EACP,cAAc;EACd,QAAQ;CACV;CACA,OACE,kBAAC,OAAD;EACE,WAAU;EACV,OAAO,EACL,SAAS,KAAa,QAAa,IAAY,IAAI,UAAU,OAC/D;YAJF;GAMG,KACC,kBAAC,GAAD;IAAY,SAAQ;IAAY,IAAI,EAAE,QAAQ,oBAAoB;cAC/D;GACS,CAAA;GAEd,kBAAC,GAAD;IACE,IAAI;KACF,SAAS;KACT,gBAAgB;KAChB,iBAAiB;KACjB,SAAS;IACX;cANF,CAQE,kBAAC,GAAD;KACE,SAAQ;KACR,eAAe,EAAQ,CAAC,CAAI;KAC5B,iBAAc;KACd,iBAAe;KACf,IAAI,EACF,WAAW,EACT,QAAQ,UACV,EACF;eATF;MAWG,IAAO,SAAS;MAAO;MAAE;MAAiB;MAC1C,IAAY,IAAI,EAAU,WAAW;MAEpC,EADD,IACE,IAEA,GAFD,EAAwB,IAAI,EAAS,CAEE;KAE/B;QACX,KACC,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KACE,SAAQ;KACR,eAAe;MACb,AAAI,KACF,EAAsB,CAAS,EAAE,WACzB;OACJ,EAAa,sCAAsC;MACrD,IACA,MAAO;OACL,QAAQ,MAAM,CAAG;MACnB,CACF;KAEJ;KACA,IAAI,EACF,WAAW,EACT,QAAQ,UACV,EACF;eAlBF;MAoBE,kBAAC,GAAD,EAAoB,IAAI,EAAS,CAAA;MAAC;MAC5B;MAAgB;KACZ;OACT,CAAA,CAEJ;;GAEL,kBAAC,GAAD;IAAU,IAAI;cACZ,kBAAC,GAAD;KAAK,IAAI;MAAE,iBAAiB;MAAY,SAAS;KAAO;eACtD,kBAAC,OAAD;MAAK,IAAG;gBACN,kBAAC,GAAD;OACE,GAAI;OACsB;MAC3B,CAAA;KACE,CAAA;IACF,CAAA;GACG,CAAA;EACP;;AAET"}
|
|
@@ -6,7 +6,7 @@ import "../../synapse-queries/index.js";
|
|
|
6
6
|
import { HelpPopover as n } from "../HelpPopover/HelpPopover.js";
|
|
7
7
|
import { Typography as r } from "@mui/material";
|
|
8
8
|
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
9
|
-
import
|
|
9
|
+
import s from "@mui/icons-material/WarningSharp";
|
|
10
10
|
//#region src/components/MissingQueryResultsWarning/MissingQueryResultsWarning.tsx
|
|
11
11
|
var c = "Files may be unavailable because you do not have permission to see them, they have been deleted, or the Dataset has been misconfigured.", l = "Files may be unavailable because you do not have permission to see them or the Dataset was misconfigured.";
|
|
12
12
|
function u({ entity: u }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MissingQueryResultsWarning.js","names":[],"sources":["../../../src/components/MissingQueryResultsWarning/MissingQueryResultsWarning.tsx"],"sourcesContent":["import { useGetQueryResultBundleWithAsyncStatus } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport { isEntityRefCollectionView } from '@/utils/functions/EntityTypeUtils'\nimport
|
|
1
|
+
{"version":3,"file":"MissingQueryResultsWarning.js","names":[],"sources":["../../../src/components/MissingQueryResultsWarning/MissingQueryResultsWarning.tsx"],"sourcesContent":["import { useGetQueryResultBundleWithAsyncStatus } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport { isEntityRefCollectionView } from '@/utils/functions/EntityTypeUtils'\nimport WarningSharp from '@mui/icons-material/WarningSharp'\nimport { Typography } from '@mui/material'\nimport { QueryBundleRequest, Table } from '@sage-bionetworks/synapse-types'\nimport { HelpPopover } from '../HelpPopover/HelpPopover'\n\nconst DATASETS_CURRENT_VERSION_HELP =\n 'Files may be unavailable because you do not have permission to see them, they have been deleted, or the Dataset has been misconfigured.'\n\n// Help text for snapshot does not indicate that files were deleted, because the deleted file would have been captured in the snapshot\nconst DATASETS_SNAPSHOT_HELP =\n 'Files may be unavailable because you do not have permission to see them or the Dataset was misconfigured.'\n\nexport type MissingQueryResultsWarningProps = {\n entity: Table\n versionNumber?: number\n}\n\n/**\n * If possible, this component will render a warning message if results may be missing from the query due to user permissions or\n * entities being deleted. If not possible, it will render an empty fragment.\n */\nfunction MissingQueryResultsWarning({\n entity,\n}: MissingQueryResultsWarningProps) {\n // Currently, Datasets and Dataset collections are the only table type for which we can reliably get this info.\n // Other cases will need a new service, tracked by PLFM-7046\n const isMissingResultsCalculable = entity && isEntityRefCollectionView(entity)\n\n const request: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n query: {\n sql: `SELECT * FROM ${entity.id!}${\n !entity.isLatestVersion && entity.versionNumber\n ? `.${entity.versionNumber}`\n : ''\n }`,\n },\n entityId: entity.id!,\n partMask: SynapseConstants.BUNDLE_MASK_QUERY_COUNT,\n }\n\n const { data: queryResult } = useGetQueryResultBundleWithAsyncStatus(\n request,\n {\n enabled: isMissingResultsCalculable,\n },\n )\n if (isMissingResultsCalculable && queryResult && entity) {\n const totalVisibleResults = queryResult.responseBody!.queryCount!\n const totalResults = entity.items?.length ?? 0\n\n if (totalVisibleResults >= totalResults) {\n // All the results are visible, so there is no need to show a warning.\n // SWC-6727 / PLFM-8326 - `totalVisibleResults` should never be greater than `totalResults`, but in case it is (e.g. stale cache),\n // don't show the warning.\n return <></>\n }\n\n const difference = totalResults - totalVisibleResults\n\n let helpMessage = ''\n\n if (entity.isLatestVersion) {\n helpMessage = DATASETS_CURRENT_VERSION_HELP\n } else {\n helpMessage = DATASETS_SNAPSHOT_HELP\n }\n\n return (\n <Typography\n component={'div'}\n className=\"SRC-centerContent\"\n style={{\n marginLeft: 10,\n }}\n variant=\"smallText1\"\n color=\"textSecondary\"\n >\n <WarningSharp\n className=\"SRC-color-warning\"\n style={{ fontSize: '16px' }}\n />\n {difference.toLocaleString() + ' Unavailable'}\n <HelpPopover\n className=\"SRC-margin-left-5\"\n markdownText={helpMessage}\n placement=\"right\"\n ></HelpPopover>\n </Typography>\n )\n } else {\n return <></>\n }\n}\n\nexport default MissingQueryResultsWarning\n"],"mappings":";;;;;;;;;;AAQA,IAAM,IACJ,2IAGI,IACJ;AAWF,SAAS,EAA2B,EAClC,aACkC;CAGlC,IAAM,IAA6B,KAAU,EAA0B,CAAM,GAevE,EAAE,MAAM,MAAgB,EAC5B;EAbA,cAAc;EACd,OAAO,EACL,KAAK,iBAAiB,EAAO,KAC3B,CAAC,EAAO,mBAAmB,EAAO,gBAC9B,IAAI,EAAO,kBACX,KAER;EACA,UAAU,EAAO;EACjB,UAAU;CAIV,GACA,EACE,SAAS,EACX,CACF;CACA,IAAI,KAA8B,KAAe,GAAQ;EACvD,IAAM,IAAsB,EAAY,aAAc,YAChD,IAAe,EAAO,OAAO,UAAU;EAE7C,IAAI,KAAuB,GAIzB,OAAO,kBAAA,GAAA,CAAI,CAAA;EAGb,IAAM,IAAa,IAAe,GAE9B,IAAc;EAQlB,OANA,AAGE,IAHE,EAAO,kBACK,IAEA,GAId,kBAAC,GAAD;GACE,WAAW;GACX,WAAU;GACV,OAAO,EACL,YAAY,GACd;GACA,SAAQ;GACR,OAAM;aAPR;IASE,kBAAC,GAAD;KACE,WAAU;KACV,OAAO,EAAE,UAAU,OAAO;IAC3B,CAAA;IACA,EAAW,eAAe,IAAI;IAC/B,kBAAC,GAAD;KACE,WAAU;KACV,cAAc;KACd,WAAU;IACE,CAAA;GACJ;;CAEhB,OACE,OAAO,kBAAA,GAAA,CAAI,CAAA;AAEf"}
|
|
@@ -17,11 +17,12 @@ import f from "../OAuthClientAclEditor/OAuthAclEditorModal.js";
|
|
|
17
17
|
import { useMemo as p, useState as m } from "react";
|
|
18
18
|
import { Box as h, Button as g, IconButton as _, Link as v, Menu as y, MenuItem as b } from "@mui/material";
|
|
19
19
|
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import { createColumnHelper as
|
|
20
|
+
import w from "@mui/icons-material/AddCircleTwoTone";
|
|
21
|
+
import T from "dayjs";
|
|
22
|
+
import { createColumnHelper as E, getCoreRowModel as D, useReactTable as O } from "@tanstack/react-table";
|
|
23
|
+
import k from "@mui/icons-material/MoreVert";
|
|
23
24
|
//#region src/components/OAuthClientManagement/OAuthManagement.tsx
|
|
24
|
-
var A =
|
|
25
|
+
var A = E();
|
|
25
26
|
function j(e) {
|
|
26
27
|
let { setIsShowingVerification: t, setSelectedClient: n, setIsShowingSecretWarning: r, setIsEdit: i, setIsShowingCreateClientModal: a, setIsShowingSharingSettings: o } = e;
|
|
27
28
|
return [
|
|
@@ -30,14 +31,14 @@ function j(e) {
|
|
|
30
31
|
...e,
|
|
31
32
|
title: "Created"
|
|
32
33
|
}),
|
|
33
|
-
cell: (e) => s(
|
|
34
|
+
cell: (e) => s(T(e.getValue()))
|
|
34
35
|
}),
|
|
35
36
|
A.accessor("modifiedOn", {
|
|
36
37
|
header: (e) => /* @__PURE__ */ S(l, {
|
|
37
38
|
...e,
|
|
38
39
|
title: "Modified"
|
|
39
40
|
}),
|
|
40
|
-
cell: (e) => s(
|
|
41
|
+
cell: (e) => s(T(e.getValue()))
|
|
41
42
|
}),
|
|
42
43
|
A.accessor("client_id", { header: (e) => /* @__PURE__ */ S(l, {
|
|
43
44
|
...e,
|
|
@@ -88,7 +89,7 @@ function M({ row: e, setSelectedClient: t, setIsEdit: n, setIsShowingCreateClien
|
|
|
88
89
|
"aria-haspopup": "true",
|
|
89
90
|
onClick: l,
|
|
90
91
|
size: "small",
|
|
91
|
-
children: /* @__PURE__ */ S(
|
|
92
|
+
children: /* @__PURE__ */ S(k, {})
|
|
92
93
|
}), /* @__PURE__ */ C(y, {
|
|
93
94
|
id: `actions-menu-${e.id}`,
|
|
94
95
|
anchorEl: o,
|
|
@@ -125,15 +126,15 @@ function M({ row: e, setSelectedClient: t, setIsEdit: n, setIsShowingCreateClien
|
|
|
125
126
|
})] });
|
|
126
127
|
}
|
|
127
128
|
function N() {
|
|
128
|
-
let { accessToken: s } = n(), [l, _] = m(!1), [y, b] = m(!1), [T, E] = m(!1), [
|
|
129
|
+
let { accessToken: s } = n(), [l, _] = m(!1), [y, b] = m(!1), [T, E] = m(!1), [k, A] = m(), [M, N] = m(!1), [P, F] = m(!1), [I, L] = m(!1), [R, z] = m(), [B, V] = m(!1), { data: H, isLoading: U, hasNextPage: W, fetchNextPage: G, isFetchingNextPage: K } = r(), q = p(() => H?.pages.flatMap((e) => e.results || []) || [], [H]), J = async () => {
|
|
129
130
|
F(!1);
|
|
130
131
|
try {
|
|
131
|
-
let e = await t.createOAuthClientSecret(s,
|
|
132
|
+
let e = await t.createOAuthClientSecret(s, k?.client_id);
|
|
132
133
|
A(void 0), L(!0), z(e.client_secret);
|
|
133
134
|
} catch (t) {
|
|
134
135
|
e(t.reason, "danger");
|
|
135
136
|
}
|
|
136
|
-
}, Y =
|
|
137
|
+
}, Y = O({
|
|
137
138
|
data: q,
|
|
138
139
|
columns: p(() => j({
|
|
139
140
|
setIsShowingVerification: V,
|
|
@@ -146,7 +147,7 @@ function N() {
|
|
|
146
147
|
getRowId: (e) => e.client_id,
|
|
147
148
|
enableRowSelection: !0,
|
|
148
149
|
enableSorting: !1,
|
|
149
|
-
getCoreRowModel:
|
|
150
|
+
getCoreRowModel: D(),
|
|
150
151
|
columnResizeMode: "onChange"
|
|
151
152
|
}), X = !U && Y.getRowModel().rows.length === 0;
|
|
152
153
|
return /* @__PURE__ */ C("div", { children: [
|
|
@@ -183,7 +184,7 @@ function N() {
|
|
|
183
184
|
b(!1);
|
|
184
185
|
},
|
|
185
186
|
isShowingModal: y,
|
|
186
|
-
client: T ?
|
|
187
|
+
client: T ? k : void 0,
|
|
187
188
|
isEdit: T,
|
|
188
189
|
setIsShowingConfirmModal: N,
|
|
189
190
|
isShowingConfirmModal: M,
|
|
@@ -213,7 +214,7 @@ function N() {
|
|
|
213
214
|
] })
|
|
214
215
|
}),
|
|
215
216
|
/* @__PURE__ */ S(f, {
|
|
216
|
-
clientId:
|
|
217
|
+
clientId: k?.client_id,
|
|
217
218
|
open: l,
|
|
218
219
|
onClose: () => _(!1)
|
|
219
220
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthManagement.js","names":[],"sources":["../../../src/components/OAuthClientManagement/OAuthManagement.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport SynapseClient from '@/synapse-client'\nimport { useGetOAuthClientInfinite } from '@/synapse-queries'\nimport { MoreVert } from '@mui/icons-material'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { Box, Button, Link, IconButton, Menu, MenuItem } from '@mui/material'\nimport { OAuthClient } from '@sage-bionetworks/synapse-client/generated/models/OAuthClient'\nimport {\n createColumnHelper,\n getCoreRowModel,\n Row,\n Table,\n useReactTable,\n} from '@tanstack/react-table'\nimport dayjs from 'dayjs'\nimport { useMemo, useState } from 'react'\nimport CopyToClipboardInput from '../CopyToClipboardInput/CopyToClipboardInput'\nimport { DialogBase } from '../DialogBase'\nimport WarningDialog from '../SynapseForm/WarningDialog'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { displayToast } from '../ToastMessage'\nimport { CreateOAuthModal } from './CreateOAuthClient'\nimport OAuthAclEditorModal from '../OAuthClientAclEditor/OAuthAclEditorModal'\n\nconst columnHelper = createColumnHelper<OAuthClient>()\nfunction getColumns(columnOptions: {\n setIsShowingVerification: (value: boolean) => void\n setSelectedClient: (value: OAuthClient) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const {\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n } = columnOptions\n return [\n columnHelper.accessor('createdOn', {\n header: props => <ColumnHeader {...props} title={'Created'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('modifiedOn', {\n header: props => <ColumnHeader {...props} title={'Modified'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('client_id', {\n header: props => <ColumnHeader {...props} title={'ID'} />,\n }),\n columnHelper.accessor('client_name', {\n header: props => <ColumnHeader {...props} title={'Client'} />,\n }),\n columnHelper.accessor('verified', {\n header: props => <ColumnHeader {...props} title={'Verified'} />,\n cell: ({ getValue }) =>\n getValue() ? (\n 'Yes'\n ) : (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setIsShowingVerification(true)}\n >\n Submit Verification\n </Button>\n ),\n }),\n columnHelper.display({\n id: 'actions',\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n cell: ({ row }) => (\n <ActionsMenuCell\n row={row}\n setSelectedClient={setSelectedClient}\n setIsEdit={setIsEdit}\n setIsShowingCreateClientModal={setIsShowingCreateClientModal}\n setIsShowingSecretWarning={setIsShowingSecretWarning}\n setIsShowingSharingSettings={setIsShowingSharingSettings}\n />\n ),\n }),\n ]\n}\n\nfunction ActionsMenuCell({\n row,\n setSelectedClient,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSecretWarning,\n setIsShowingSharingSettings,\n}: {\n row: Row<OAuthClient>\n setSelectedClient: (value: OAuthClient) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleMenuClose = () => {\n setAnchorEl(null)\n }\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls={`actions-menu-${row.id}`}\n aria-haspopup=\"true\"\n onClick={handleMenuOpen}\n size=\"small\"\n >\n <MoreVert />\n </IconButton>\n <Menu\n id={`actions-menu-${row.id}`}\n anchorEl={anchorEl}\n open={open}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsEdit(true)\n setIsShowingCreateClientModal(true)\n handleMenuClose()\n }}\n >\n Edit\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSecretWarning(true)\n handleMenuClose()\n }}\n >\n Generate Secret\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSharingSettings(true)\n handleMenuClose()\n }}\n >\n Sharing Settings\n </MenuItem>\n </Menu>\n </>\n )\n}\n\nexport function OAuthManagement() {\n const { accessToken } = useSynapseContext()\n const [isShowingSharingSettings, setIsShowingSharingSettings] =\n useState(false)\n const [isShowingCreateClientModal, setIsShowingCreateClientModal] =\n useState(false)\n const [isEdit, setIsEdit] = useState<boolean>(false)\n const [selectedClient, setSelectedClient] = useState<OAuthClient>()\n const [isShowingConfirmModal, setIsShowingConfirmModal] = useState(false)\n const [isShowingSecretWarning, setIsShowingSecretWarning] = useState(false)\n const [isShowingSecret, setIsShowingSecret] = useState(false)\n const [secret, setSecret] = useState<string>()\n const [isShowingVerification, setIsShowingVerification] = useState(false)\n\n const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useGetOAuthClientInfinite()\n const oAuthClientList = useMemo(\n () => data?.pages.flatMap(page => page.results || []) || [],\n [data],\n )\n\n const warningHeader = 'Are you absolutely sure?'\n const warningBody =\n 'If you have an existing secret, generating a new secret will make your application invalid after generation. This action cannot be undone.'\n\n const onShowSecret = async () => {\n setIsShowingSecretWarning(false)\n try {\n const secret = await SynapseClient.createOAuthClientSecret(\n accessToken!,\n selectedClient?.client_id!,\n )\n setSelectedClient(undefined)\n setIsShowingSecret(true)\n setSecret(secret.client_secret)\n } catch (err: any) {\n displayToast(err.reason as string, 'danger')\n }\n }\n\n const columns = useMemo(\n () =>\n getColumns({\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n }),\n [],\n )\n\n const table: Table<OAuthClient> = useReactTable<OAuthClient>({\n data: oAuthClientList,\n columns,\n getRowId: row => row.client_id!,\n enableRowSelection: true,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n const isEmpty = !isLoading && table.getRowModel().rows.length === 0\n\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n justifyContent: 'flex-end',\n mb: 2,\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setIsShowingCreateClientModal(true)\n setIsEdit(false)\n }}\n sx={{ float: 'right' }}\n startIcon={<AddCircleTwoTone />}\n >\n Create New Client\n </Button>\n </Box>\n <InfiniteTableLayout\n table={<StyledTanStackTable table={table} />}\n isLoading={isLoading}\n isEmpty={isEmpty}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n void fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n <CreateOAuthModal\n onClose={() => {\n setIsShowingCreateClientModal(false)\n }}\n isShowingModal={isShowingCreateClientModal}\n client={isEdit ? selectedClient : undefined}\n isEdit={isEdit}\n setIsShowingConfirmModal={setIsShowingConfirmModal}\n isShowingConfirmModal={isShowingConfirmModal}\n setIsShowingModal={setIsShowingCreateClientModal}\n />\n <DialogBase\n open={isShowingVerification}\n onCancel={() => setIsShowingVerification(false)}\n title=\"Submit Verification\"\n content={\n <>\n <p>\n In order to verify an OAuth client please submit a request to the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://sagebionetworks.jira.com/servicedesk/customer/portal/9\"\n >\n Synapse Service Desk.\n </Link>\n </p>\n <b>Please list the following items in your request:</b>\n <ul>\n <li>Your name</li>\n <li>\n The ID of the client to be verified <br />\n </li>\n <li>A description of your application</li>\n </ul>\n {/* <p>\n Verification can take up to X weeks and we will notify you via X.\n </p> */}\n </>\n }\n />\n <OAuthAclEditorModal\n clientId={selectedClient?.client_id!}\n open={isShowingSharingSettings}\n onClose={() => setIsShowingSharingSettings(false)}\n />\n <WarningDialog\n open={isShowingSecretWarning}\n title={warningHeader}\n content={warningBody}\n onCancel={() => {\n setIsShowingSecretWarning(false)\n setSelectedClient(undefined)\n }}\n onConfirm={onShowSecret}\n confirmButtonColor=\"error\"\n confirmButtonText=\"Yes, Continue\"\n />\n {secret && (\n <DialogBase\n open={isShowingSecret}\n title=\"App Secret\"\n onCancel={() => {\n setIsShowingSecret(false)\n setSecret(undefined)\n }}\n content={\n <>\n <p>\n <b>This secret will not be able to be retrieved again.</b> If\n needed, in order to generate a new secret select Generate from\n the Client List.\n </p>\n <CopyToClipboardInput value={secret} inputWidth={'400px'} />\n </>\n }\n />\n )}\n </div>\n )\n}\n\nexport default OAuthManagement\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OAuthManagement.js","names":[],"sources":["../../../src/components/OAuthClientManagement/OAuthManagement.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport SynapseClient from '@/synapse-client'\nimport { useGetOAuthClientInfinite } from '@/synapse-queries'\nimport MoreVert from '@mui/icons-material/MoreVert'\nimport { useSynapseContext } from '@/utils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport AddCircleTwoTone from '@mui/icons-material/AddCircleTwoTone'\nimport { Box, Button, Link, IconButton, Menu, MenuItem } from '@mui/material'\nimport { OAuthClient } from '@sage-bionetworks/synapse-client/generated/models/OAuthClient'\nimport {\n createColumnHelper,\n getCoreRowModel,\n Row,\n Table,\n useReactTable,\n} from '@tanstack/react-table'\nimport dayjs from 'dayjs'\nimport { useMemo, useState } from 'react'\nimport CopyToClipboardInput from '../CopyToClipboardInput/CopyToClipboardInput'\nimport { DialogBase } from '../DialogBase'\nimport WarningDialog from '../SynapseForm/WarningDialog'\nimport ColumnHeader from '../TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { displayToast } from '../ToastMessage'\nimport { CreateOAuthModal } from './CreateOAuthClient'\nimport OAuthAclEditorModal from '../OAuthClientAclEditor/OAuthAclEditorModal'\n\nconst columnHelper = createColumnHelper<OAuthClient>()\nfunction getColumns(columnOptions: {\n setIsShowingVerification: (value: boolean) => void\n setSelectedClient: (value: OAuthClient) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const {\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n } = columnOptions\n return [\n columnHelper.accessor('createdOn', {\n header: props => <ColumnHeader {...props} title={'Created'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('modifiedOn', {\n header: props => <ColumnHeader {...props} title={'Modified'} />,\n cell: info => formatDate(dayjs(info.getValue())),\n }),\n columnHelper.accessor('client_id', {\n header: props => <ColumnHeader {...props} title={'ID'} />,\n }),\n columnHelper.accessor('client_name', {\n header: props => <ColumnHeader {...props} title={'Client'} />,\n }),\n columnHelper.accessor('verified', {\n header: props => <ColumnHeader {...props} title={'Verified'} />,\n cell: ({ getValue }) =>\n getValue() ? (\n 'Yes'\n ) : (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setIsShowingVerification(true)}\n >\n Submit Verification\n </Button>\n ),\n }),\n columnHelper.display({\n id: 'actions',\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n cell: ({ row }) => (\n <ActionsMenuCell\n row={row}\n setSelectedClient={setSelectedClient}\n setIsEdit={setIsEdit}\n setIsShowingCreateClientModal={setIsShowingCreateClientModal}\n setIsShowingSecretWarning={setIsShowingSecretWarning}\n setIsShowingSharingSettings={setIsShowingSharingSettings}\n />\n ),\n }),\n ]\n}\n\nfunction ActionsMenuCell({\n row,\n setSelectedClient,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSecretWarning,\n setIsShowingSharingSettings,\n}: {\n row: Row<OAuthClient>\n setSelectedClient: (value: OAuthClient) => void\n setIsEdit: (value: boolean) => void\n setIsShowingCreateClientModal: (value: boolean) => void\n setIsShowingSecretWarning: (value: boolean) => void\n setIsShowingSharingSettings: (value: boolean) => void\n}) {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const open = Boolean(anchorEl)\n const handleMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n const handleMenuClose = () => {\n setAnchorEl(null)\n }\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls={`actions-menu-${row.id}`}\n aria-haspopup=\"true\"\n onClick={handleMenuOpen}\n size=\"small\"\n >\n <MoreVert />\n </IconButton>\n <Menu\n id={`actions-menu-${row.id}`}\n anchorEl={anchorEl}\n open={open}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsEdit(true)\n setIsShowingCreateClientModal(true)\n handleMenuClose()\n }}\n >\n Edit\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSecretWarning(true)\n handleMenuClose()\n }}\n >\n Generate Secret\n </MenuItem>\n <MenuItem\n onClick={() => {\n setSelectedClient(row.original)\n setIsShowingSharingSettings(true)\n handleMenuClose()\n }}\n >\n Sharing Settings\n </MenuItem>\n </Menu>\n </>\n )\n}\n\nexport function OAuthManagement() {\n const { accessToken } = useSynapseContext()\n const [isShowingSharingSettings, setIsShowingSharingSettings] =\n useState(false)\n const [isShowingCreateClientModal, setIsShowingCreateClientModal] =\n useState(false)\n const [isEdit, setIsEdit] = useState<boolean>(false)\n const [selectedClient, setSelectedClient] = useState<OAuthClient>()\n const [isShowingConfirmModal, setIsShowingConfirmModal] = useState(false)\n const [isShowingSecretWarning, setIsShowingSecretWarning] = useState(false)\n const [isShowingSecret, setIsShowingSecret] = useState(false)\n const [secret, setSecret] = useState<string>()\n const [isShowingVerification, setIsShowingVerification] = useState(false)\n\n const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useGetOAuthClientInfinite()\n const oAuthClientList = useMemo(\n () => data?.pages.flatMap(page => page.results || []) || [],\n [data],\n )\n\n const warningHeader = 'Are you absolutely sure?'\n const warningBody =\n 'If you have an existing secret, generating a new secret will make your application invalid after generation. This action cannot be undone.'\n\n const onShowSecret = async () => {\n setIsShowingSecretWarning(false)\n try {\n const secret = await SynapseClient.createOAuthClientSecret(\n accessToken!,\n selectedClient?.client_id!,\n )\n setSelectedClient(undefined)\n setIsShowingSecret(true)\n setSecret(secret.client_secret)\n } catch (err: any) {\n displayToast(err.reason as string, 'danger')\n }\n }\n\n const columns = useMemo(\n () =>\n getColumns({\n setIsShowingVerification,\n setSelectedClient,\n setIsShowingSecretWarning,\n setIsEdit,\n setIsShowingCreateClientModal,\n setIsShowingSharingSettings,\n }),\n [],\n )\n\n const table: Table<OAuthClient> = useReactTable<OAuthClient>({\n data: oAuthClientList,\n columns,\n getRowId: row => row.client_id!,\n enableRowSelection: true,\n enableSorting: false,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n const isEmpty = !isLoading && table.getRowModel().rows.length === 0\n\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n width: '100%',\n justifyContent: 'flex-end',\n mb: 2,\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setIsShowingCreateClientModal(true)\n setIsEdit(false)\n }}\n sx={{ float: 'right' }}\n startIcon={<AddCircleTwoTone />}\n >\n Create New Client\n </Button>\n </Box>\n <InfiniteTableLayout\n table={<StyledTanStackTable table={table} />}\n isLoading={isLoading}\n isEmpty={isEmpty}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n void fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n <CreateOAuthModal\n onClose={() => {\n setIsShowingCreateClientModal(false)\n }}\n isShowingModal={isShowingCreateClientModal}\n client={isEdit ? selectedClient : undefined}\n isEdit={isEdit}\n setIsShowingConfirmModal={setIsShowingConfirmModal}\n isShowingConfirmModal={isShowingConfirmModal}\n setIsShowingModal={setIsShowingCreateClientModal}\n />\n <DialogBase\n open={isShowingVerification}\n onCancel={() => setIsShowingVerification(false)}\n title=\"Submit Verification\"\n content={\n <>\n <p>\n In order to verify an OAuth client please submit a request to the{' '}\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://sagebionetworks.jira.com/servicedesk/customer/portal/9\"\n >\n Synapse Service Desk.\n </Link>\n </p>\n <b>Please list the following items in your request:</b>\n <ul>\n <li>Your name</li>\n <li>\n The ID of the client to be verified <br />\n </li>\n <li>A description of your application</li>\n </ul>\n {/* <p>\n Verification can take up to X weeks and we will notify you via X.\n </p> */}\n </>\n }\n />\n <OAuthAclEditorModal\n clientId={selectedClient?.client_id!}\n open={isShowingSharingSettings}\n onClose={() => setIsShowingSharingSettings(false)}\n />\n <WarningDialog\n open={isShowingSecretWarning}\n title={warningHeader}\n content={warningBody}\n onCancel={() => {\n setIsShowingSecretWarning(false)\n setSelectedClient(undefined)\n }}\n onConfirm={onShowSecret}\n confirmButtonColor=\"error\"\n confirmButtonText=\"Yes, Continue\"\n />\n {secret && (\n <DialogBase\n open={isShowingSecret}\n title=\"App Secret\"\n onCancel={() => {\n setIsShowingSecret(false)\n setSecret(undefined)\n }}\n content={\n <>\n <p>\n <b>This secret will not be able to be retrieved again.</b> If\n needed, in order to generate a new secret select Generate from\n the Client List.\n </p>\n <CopyToClipboardInput value={secret} inputWidth={'400px'} />\n </>\n }\n />\n )}\n </div>\n )\n}\n\nexport default OAuthManagement\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortalCard.d.ts","sourceRoot":"","sources":["../../../src/components/PortalList/PortalCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"PortalCard.d.ts","sourceRoot":"","sources":["../../../src/components/PortalList/PortalCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAuBzD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CAyJvE;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -8,8 +8,9 @@ import a from "../PortalAclEditor/PortalAclEditorModal.js";
|
|
|
8
8
|
import { useState as o } from "react";
|
|
9
9
|
import { Box as s, Card as c, CardContent as l, IconButton as u, Link as d, Typography as f } from "@mui/material";
|
|
10
10
|
import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
11
|
+
import g from "dayjs";
|
|
12
|
+
import _ from "@mui/icons-material/Settings";
|
|
13
|
+
import v from "@mui/icons-material/Delete";
|
|
13
14
|
//#region src/components/PortalList/PortalCard.tsx
|
|
14
15
|
var y = "1";
|
|
15
16
|
function b({ portal: b }) {
|
|
@@ -46,7 +47,7 @@ function b({ portal: b }) {
|
|
|
46
47
|
"aria-label": "Delete portal",
|
|
47
48
|
title: "Delete portal",
|
|
48
49
|
color: "error",
|
|
49
|
-
children: /* @__PURE__ */ m(
|
|
50
|
+
children: /* @__PURE__ */ m(v, { fontSize: "small" })
|
|
50
51
|
})]
|
|
51
52
|
})]
|
|
52
53
|
}), C && /* @__PURE__ */ m(d, {
|
|
@@ -85,7 +86,7 @@ function b({ portal: b }) {
|
|
|
85
86
|
T && /* @__PURE__ */ h(f, {
|
|
86
87
|
variant: "caption",
|
|
87
88
|
color: "text.secondary",
|
|
88
|
-
children: ["on ",
|
|
89
|
+
children: ["on ", g(T).format("MMMM D, YYYY")]
|
|
89
90
|
})
|
|
90
91
|
]
|
|
91
92
|
}),
|
|
@@ -106,7 +107,7 @@ function b({ portal: b }) {
|
|
|
106
107
|
D && /* @__PURE__ */ h(f, {
|
|
107
108
|
variant: "caption",
|
|
108
109
|
color: "text.secondary",
|
|
109
|
-
children: ["on ",
|
|
110
|
+
children: ["on ", g(D).format("MMMM D, YYYY")]
|
|
110
111
|
})
|
|
111
112
|
]
|
|
112
113
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortalCard.js","names":[],"sources":["../../../src/components/PortalList/PortalCard.tsx"],"sourcesContent":["import { Portal } from '@sage-bionetworks/synapse-client'\nimport {\n Card,\n CardContent,\n Typography,\n Box,\n Link as MuiLink,\n IconButton,\n} from '@mui/material'\nimport styles from './PortalCard.module.scss'\nimport UserCard from '../UserCard/UserCard'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport PortalAclEditorModal from '../PortalAclEditor/PortalAclEditorModal'\nimport
|
|
1
|
+
{"version":3,"file":"PortalCard.js","names":[],"sources":["../../../src/components/PortalList/PortalCard.tsx"],"sourcesContent":["import { Portal } from '@sage-bionetworks/synapse-client'\nimport {\n Card,\n CardContent,\n Typography,\n Box,\n Link as MuiLink,\n IconButton,\n} from '@mui/material'\nimport styles from './PortalCard.module.scss'\nimport UserCard from '../UserCard/UserCard'\nimport dayjs from 'dayjs'\nimport { useState } from 'react'\nimport PortalAclEditorModal from '../PortalAclEditor/PortalAclEditorModal'\nimport Settings from '@mui/icons-material/Settings'\nimport Delete from '@mui/icons-material/Delete'\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'\nimport { useDeletePortal } from '@/synapse-queries/portal/usePortal'\nimport { displayToast } from '../ToastMessage'\n\n// Synapse itself is portal ID 1 and should not have ACL management\nconst SYNAPSE_PORTAL_ID = '1'\n\nexport type PortalCardProps = {\n portal: Portal\n}\n\nexport function PortalCard({ portal }: PortalCardProps): React.ReactNode {\n const { id, name, url, createdBy, createdOn, modifiedBy, modifiedOn } = portal\n const [isAclEditorOpen, setIsAclEditorOpen] = useState(false)\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false)\n const showAclEditor = id && id !== SYNAPSE_PORTAL_ID\n const showDeleteButton = id && id !== SYNAPSE_PORTAL_ID\n\n const { mutate: deletePortal } = useDeletePortal({\n onSuccess: () => {\n displayToast(`Portal \"${name}\" was successfully deleted`, 'success')\n setIsDeleteDialogOpen(false)\n },\n onError: error => {\n displayToast(`Failed to delete portal: ${error.reason}`, 'danger')\n },\n })\n\n return (\n <>\n <Card className={styles.portalCard}>\n <CardContent>\n <Box className={styles.header}>\n <Box className={styles.titleRow}>\n <Typography variant=\"h6\" component=\"h3\">\n {name}\n </Typography>\n <Box className={styles.actions}>\n {showAclEditor && (\n <IconButton\n size=\"small\"\n onClick={() => setIsAclEditorOpen(true)}\n aria-label=\"Manage portal permissions\"\n title=\"Manage portal permissions\"\n >\n <Settings fontSize=\"small\" />\n </IconButton>\n )}\n {showDeleteButton && (\n <IconButton\n size=\"small\"\n onClick={() => setIsDeleteDialogOpen(true)}\n aria-label=\"Delete portal\"\n title=\"Delete portal\"\n color=\"error\"\n >\n <Delete fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n </Box>\n {url && (\n <MuiLink\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.url}\n >\n {url}\n </MuiLink>\n )}\n </Box>\n\n <Box className={styles.metadata}>\n {id && (\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>ID:</strong> {id}\n </Typography>\n )}\n\n {createdBy && (\n <Box className={styles.userInfo}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>Created by:</strong>\n </Typography>\n <UserCard\n ownerId={createdBy}\n size=\"SMALL USER CARD\"\n hideEmail\n disableLink={false}\n />\n {createdOn && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n on {dayjs(createdOn).format('MMMM D, YYYY')}\n </Typography>\n )}\n </Box>\n )}\n\n {modifiedBy && (\n <Box className={styles.userInfo}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <strong>Last modified by:</strong>\n </Typography>\n <UserCard\n ownerId={modifiedBy}\n size=\"SMALL USER CARD\"\n hideEmail\n disableLink={false}\n />\n {modifiedOn && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n on {dayjs(modifiedOn).format('MMMM D, YYYY')}\n </Typography>\n )}\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n\n {showAclEditor && id && (\n <PortalAclEditorModal\n portalId={id}\n open={isAclEditorOpen}\n onClose={() => setIsAclEditorOpen(false)}\n />\n )}\n\n {id && (\n <ConfirmationDialog\n open={isDeleteDialogOpen}\n title=\"Delete Portal\"\n content={\n <Box>\n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n Are you sure you want to delete this portal?\n </Typography>\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n <strong>Name:</strong> {name}\n </Typography>\n {url && (\n <Typography variant=\"body2\">\n <strong>URL:</strong> {url}\n </Typography>\n )}\n </Box>\n }\n confirmButtonProps={{\n children: 'Delete',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n if (id) {\n deletePortal(id)\n }\n }}\n onCancel={() => setIsDeleteDialogOpen(false)}\n maxWidth=\"sm\"\n />\n )}\n </>\n )\n}\n\nexport default PortalCard\n"],"mappings":"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"}
|
|
@@ -5,11 +5,11 @@ import r from "./PortalList.module.js";
|
|
|
5
5
|
import { Fragment as i, useEffect as a, useState as o } from "react";
|
|
6
6
|
import { Alert as s, Box as c, Button as l, CircularProgress as u, Typography as d } from "@mui/material";
|
|
7
7
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
8
|
+
import { useInView as m } from "react-intersection-observer";
|
|
9
|
+
import h from "@mui/icons-material/Add";
|
|
10
10
|
//#region src/components/PortalList/PortalList.tsx
|
|
11
11
|
function g() {
|
|
12
|
-
let { ref: g, inView: _ } =
|
|
12
|
+
let { ref: g, inView: _ } = m(), [v, y] = o(!1), { data: b, status: x, error: S, isLoading: C, hasNextPage: w, isFetchingNextPage: T, fetchNextPage: E } = e({ throwOnError: !1 });
|
|
13
13
|
a(() => {
|
|
14
14
|
x === "success" && !T && w && E && _ && E();
|
|
15
15
|
}, [
|
|
@@ -37,7 +37,7 @@ function g() {
|
|
|
37
37
|
}), /* @__PURE__ */ f(l, {
|
|
38
38
|
variant: "contained",
|
|
39
39
|
color: "primary",
|
|
40
|
-
startIcon: /* @__PURE__ */ f(
|
|
40
|
+
startIcon: /* @__PURE__ */ f(h, {}),
|
|
41
41
|
onClick: () => y(!0),
|
|
42
42
|
children: "Create New Portal"
|
|
43
43
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortalList.js","names":[],"sources":["../../../src/components/PortalList/PortalList.tsx"],"sourcesContent":["import { useListPortalsInfinite } from '@/synapse-queries/portal/useListPortals'\nimport { Box, Typography, CircularProgress, Alert, Button } from '@mui/material'\nimport { Fragment, useEffect, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport PortalCard from './PortalCard'\nimport CreatePortalModal from './CreatePortalModal'\nimport styles from './PortalList.module.scss'\nimport
|
|
1
|
+
{"version":3,"file":"PortalList.js","names":[],"sources":["../../../src/components/PortalList/PortalList.tsx"],"sourcesContent":["import { useListPortalsInfinite } from '@/synapse-queries/portal/useListPortals'\nimport { Box, Typography, CircularProgress, Alert, Button } from '@mui/material'\nimport { Fragment, useEffect, useState } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport PortalCard from './PortalCard'\nimport CreatePortalModal from './CreatePortalModal'\nimport styles from './PortalList.module.scss'\nimport Add from '@mui/icons-material/Add'\n\nexport function PortalList(): React.ReactNode {\n const { ref, inView } = useInView()\n const [isCreateModalOpen, setIsCreateModalOpen] = useState(false)\n\n const {\n data,\n status,\n error,\n isLoading,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n } = useListPortalsInfinite({\n throwOnError: false,\n })\n\n useEffect(() => {\n if (\n status === 'success' &&\n !isFetchingNextPage &&\n hasNextPage &&\n fetchNextPage &&\n inView\n ) {\n fetchNextPage()\n }\n }, [status, hasNextPage, isFetchingNextPage, fetchNextPage, inView])\n\n const allPortals = data?.pages.flatMap(page => page.page ?? []) ?? []\n\n if (error) {\n return (\n <Alert severity=\"error\" className={styles.errorAlert}>\n Error loading portals: {error.message}\n </Alert>\n )\n }\n\n return (\n <Box className={styles.portalListContainer}>\n <Box className={styles.header}>\n <Typography variant=\"h4\" component=\"h2\" className={styles.title}>\n Portals\n </Typography>\n <Button\n variant=\"contained\"\n color=\"primary\"\n startIcon={<Add />}\n onClick={() => setIsCreateModalOpen(true)}\n >\n Create New Portal\n </Button>\n </Box>\n\n {isLoading && (\n <Box className={styles.loadingContainer}>\n <CircularProgress />\n </Box>\n )}\n\n {!isLoading && allPortals.length === 0 && (\n <Typography variant=\"body1\" color=\"text.secondary\">\n No portals found.\n </Typography>\n )}\n\n {allPortals.length > 0 && (\n <Box className={styles.portalGrid}>\n {allPortals.map(portal => (\n <Fragment key={portal.id ?? JSON.stringify(portal)}>\n <PortalCard portal={portal} />\n </Fragment>\n ))}\n </Box>\n )}\n\n {/* Trigger for loading next page */}\n {hasNextPage && <div ref={ref} className={styles.loadMoreTrigger} />}\n\n {isFetchingNextPage && (\n <Box className={styles.loadingMoreContainer}>\n <CircularProgress size={32} />\n </Box>\n )}\n\n <CreatePortalModal\n open={isCreateModalOpen}\n onClose={() => setIsCreateModalOpen(false)}\n />\n </Box>\n )\n}\n\nexport default PortalList\n"],"mappings":";;;;;;;;;;AASA,SAAgB,IAA8B;CAC5C,IAAM,EAAE,QAAK,cAAW,EAAU,GAC5B,CAAC,GAAmB,KAAwB,EAAS,EAAK,GAE1D,EACJ,SACA,WACA,UACA,cACA,gBACA,uBACA,qBACE,EAAuB,EACzB,cAAc,GAChB,CAAC;CAED,QAAgB;EACd,AACE,MAAW,aACX,CAAC,KACD,KACA,KACA,KAEA,EAAc;CAElB,GAAG;EAAC;EAAQ;EAAa;EAAoB;EAAe;CAAM,CAAC;CAEnE,IAAM,IAAa,GAAM,MAAM,SAAQ,MAAQ,EAAK,QAAQ,CAAC,CAAC,KAAK,CAAC;CAUpE,OARI,IAEA,kBAAC,GAAD;EAAO,UAAS;EAAQ,WAAW,EAAO;YAA1C,CAAsD,2BAC5B,EAAM,OACzB;MAKT,kBAAC,GAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,GAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,GAAD;KAAY,SAAQ;KAAK,WAAU;KAAK,WAAW,EAAO;eAAO;IAErD,CAAA,GACZ,kBAAC,GAAD;KACE,SAAQ;KACR,OAAM;KACN,WAAW,kBAAC,GAAD,CAAM,CAAA;KACjB,eAAe,EAAqB,EAAI;eACzC;IAEO,CAAA,CACL;;GAEJ,KACC,kBAAC,GAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD,CAAmB,CAAA;GAChB,CAAA;GAGN,CAAC,KAAa,EAAW,WAAW,KACnC,kBAAC,GAAD;IAAY,SAAQ;IAAQ,OAAM;cAAiB;GAEvC,CAAA;GAGb,EAAW,SAAS,KACnB,kBAAC,GAAD;IAAK,WAAW,EAAO;cACpB,EAAW,KAAI,MACd,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAoB,UAAS,CAAA,EACrB,GAFK,EAAO,MAAM,KAAK,UAAU,CAAM,CAEvC,CACX;GACE,CAAA;GAIN,KAAe,kBAAC,OAAD;IAAU;IAAK,WAAW,EAAO;GAAkB,CAAA;GAElE,KACC,kBAAC,GAAD;IAAK,WAAW,EAAO;cACrB,kBAAC,GAAD,EAAkB,MAAM,GAAK,CAAA;GAC1B,CAAA;GAGP,kBAAC,GAAD;IACE,MAAM;IACN,eAAe,EAAqB,EAAK;GAC1C,CAAA;EACE;;AAET"}
|
|
@@ -4,9 +4,9 @@ import "../../synapse-queries/index.js";
|
|
|
4
4
|
import { getProjectVisibilityFromACL as n } from "./getProjectVisibilityFromACL.js";
|
|
5
5
|
import { Chip as r, Skeleton as i, Typography as a } from "@mui/material";
|
|
6
6
|
import { jsx as o } from "react/jsx-runtime";
|
|
7
|
-
import s from "@mui/icons-material/
|
|
8
|
-
import c from "@mui/icons-material/
|
|
9
|
-
import l from "@mui/icons-material/
|
|
7
|
+
import s from "@mui/icons-material/LockOutlined";
|
|
8
|
+
import c from "@mui/icons-material/VisibilityOutlined";
|
|
9
|
+
import l from "@mui/icons-material/LanguageOutlined";
|
|
10
10
|
//#region src/components/ProjectVisibilityChip/ProjectVisibilityChip.tsx
|
|
11
11
|
var u = {
|
|
12
12
|
fill: "var(--synapse-gray-900)",
|
|
@@ -15,17 +15,17 @@ var u = {
|
|
|
15
15
|
PRIVATE: {
|
|
16
16
|
label: "Private Project",
|
|
17
17
|
color: "#FAC3C3",
|
|
18
|
-
icon: /* @__PURE__ */ o(
|
|
18
|
+
icon: /* @__PURE__ */ o(s, { sx: u })
|
|
19
19
|
},
|
|
20
20
|
DISCOVERABLE: {
|
|
21
21
|
label: "Discoverable Project",
|
|
22
22
|
color: "#FDEFC1",
|
|
23
|
-
icon: /* @__PURE__ */ o(
|
|
23
|
+
icon: /* @__PURE__ */ o(c, { sx: u })
|
|
24
24
|
},
|
|
25
25
|
PUBLIC: {
|
|
26
26
|
label: "Public Project",
|
|
27
27
|
color: "#D4EFD4",
|
|
28
|
-
icon: /* @__PURE__ */ o(
|
|
28
|
+
icon: /* @__PURE__ */ o(l, { sx: u })
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
function f({ visibility: e }) {
|
|
@@ -8,11 +8,11 @@ import { QBDragHandle as u } from "./QBDragHandle.js";
|
|
|
8
8
|
import { useCallback as d, useMemo as f, useState as p } from "react";
|
|
9
9
|
import { Autocomplete as m, IconButton as h, InputLabel as g, MenuItem as _, Select as v, TextField as y, ToggleButton as b, ToggleButtonGroup as x, Tooltip as S } from "@mui/material";
|
|
10
10
|
import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
11
|
-
import
|
|
12
|
-
import D from "@
|
|
11
|
+
import E from "@mui/icons-material/DeleteOutline";
|
|
12
|
+
import { useSortable as D } from "@dnd-kit/react/sortable";
|
|
13
13
|
//#region src/components/QueryBuilder/FilterConditionRow.tsx
|
|
14
14
|
function O(e) {
|
|
15
|
-
let { condition: i, parentGroupId: d, index: p } = e, { columnModels: b, facetResults: x, onlyFacetedColumns: O, getColumnDisplayName: A, updateConditionAt: j, removeConditionAt: P } = s(), { ref: F, handleRef: I, isDragSource: L } =
|
|
15
|
+
let { condition: i, parentGroupId: d, index: p } = e, { columnModels: b, facetResults: x, onlyFacetedColumns: O, getColumnDisplayName: A, updateConditionAt: j, removeConditionAt: P } = s(), { ref: F, handleRef: I, isDragSource: L } = D({
|
|
16
16
|
id: i.id,
|
|
17
17
|
index: p,
|
|
18
18
|
group: d,
|
|
@@ -45,7 +45,7 @@ function O(e) {
|
|
|
45
45
|
className: c.remove,
|
|
46
46
|
"aria-label": "Remove condition",
|
|
47
47
|
onClick: () => P(i.id),
|
|
48
|
-
children: /* @__PURE__ */ w(
|
|
48
|
+
children: /* @__PURE__ */ w(E, { fontSize: "small" })
|
|
49
49
|
})
|
|
50
50
|
}),
|
|
51
51
|
/* @__PURE__ */ w(m, {
|
|
@@ -4,11 +4,11 @@ import t from "../../synapse-queries/entity/useGetQueryResultBundle.js";
|
|
|
4
4
|
import n from "react";
|
|
5
5
|
import { Box as r, Button as i } from "@mui/material";
|
|
6
6
|
import { jsx as a } from "react/jsx-runtime";
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
7
|
+
import { Link as o, useInRouterContext as s } from "react-router";
|
|
8
|
+
import c from "@mui/icons-material/NavigateNext";
|
|
9
9
|
//#region src/components/QueryCountButton/QueryCountButton.tsx
|
|
10
10
|
function l(l) {
|
|
11
|
-
let { sql: u, href: d, prefixText: f = "", suffixText: p = "", ...m } = l, h = e(u), g =
|
|
11
|
+
let { sql: u, href: d, prefixText: f = "", suffixText: p = "", ...m } = l, h = e(u), g = s(), { data: _, isLoading: v } = t({
|
|
12
12
|
concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
|
|
13
13
|
query: { sql: u },
|
|
14
14
|
entityId: h,
|
|
@@ -21,7 +21,7 @@ function l(l) {
|
|
|
21
21
|
component: "a"
|
|
22
22
|
} : g ? {
|
|
23
23
|
to: d,
|
|
24
|
-
component:
|
|
24
|
+
component: o
|
|
25
25
|
} : {
|
|
26
26
|
href: d,
|
|
27
27
|
component: "a"
|
|
@@ -44,7 +44,7 @@ function l(l) {
|
|
|
44
44
|
width: 24,
|
|
45
45
|
height: 24
|
|
46
46
|
},
|
|
47
|
-
children: /* @__PURE__ */ a(
|
|
47
|
+
children: /* @__PURE__ */ a(c, { sx: {
|
|
48
48
|
color: "primary.main",
|
|
49
49
|
fontSize: 20
|
|
50
50
|
} })
|