synapse-react-client 4.0.3 → 4.0.5-b
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/assets/DefaultColorfulPortalCardBackground.svg +14 -0
- package/dist/assets/DefaultColorfulPortalCardBackground.svg.js +7 -0
- package/dist/assets/DefaultColorfulPortalCardBackground.svg.js.map +1 -0
- package/dist/assets/homepage/nih-aging.svg +27 -27
- package/dist/assets/homepage/nih-aging.svg.js +1 -1
- package/dist/assets/homepage/nih-aging.svg.js.map +1 -1
- package/dist/assets/homepage/nih-heart.svg +39 -46
- package/dist/assets/homepage/nih-heart.svg.js +3 -3
- package/dist/assets/homepage/nih-heart.svg.js.map +1 -1
- package/dist/assets/homepage/nih-nci.svg +6 -0
- package/dist/assets/homepage/nih-nci.svg.js +7 -0
- package/dist/assets/homepage/nih-nci.svg.js.map +1 -0
- package/dist/assets/homepage/nih-nimh.svg +14 -0
- package/dist/assets/homepage/nih-nimh.svg.js +7 -0
- package/dist/assets/homepage/nih-nimh.svg.js.map +1 -0
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js +4 -4
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +8 -7
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js +4 -4
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js +11 -11
- package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js +9 -9
- package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js +5 -5
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.d.ts.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js +33 -32
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.js +8 -8
- package/dist/components/AclEditor/AclEditor.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.test-utils.js +34 -34
- package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
- package/dist/components/Authentication/AuthenticationMethodSelection.js +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js +6 -5
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
- package/dist/components/BasePortalCard/BasePortalCard.css +1 -1
- package/dist/components/BasePortalCard/BasePortalCard.d.ts +1 -1
- package/dist/components/BasePortalCard/BasePortalCard.d.ts.map +1 -1
- package/dist/components/BasePortalCard/BasePortalCard.js +12 -12
- package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
- package/dist/components/BasePortalCard/BasePortalCard.module.scss +6 -0
- package/dist/components/BasePortalCard/BasePortalCard.module.scss.js +1 -1
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.css +1 -1
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.d.ts.map +1 -1
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js +24 -23
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss +15 -5
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.module.scss.js +1 -1
- package/dist/components/CardContainer/CardLink.d.ts +12 -0
- package/dist/components/CardContainer/CardLink.d.ts.map +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js +12 -12
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.d.ts.map +1 -1
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js +7 -7
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverContent.d.ts.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverContent.js +13 -12
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/CookiesNotification/CookiesNotification.js +1 -1
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +3 -4
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
- package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +2 -2
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +35 -35
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +2 -2
- package/dist/components/DataGrid/hooks/useExportDataGridToCsv.d.ts.map +1 -1
- package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js +9 -7
- package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
- package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js +1 -1
- package/dist/components/DownloadCart/RequestDownloadCard.js +1 -1
- package/dist/components/Ecosystem/EcosystemSkeleton.js +2 -2
- package/dist/components/Ecosystem/TableQueryEcosystem.js +1 -1
- package/dist/components/EntityAclEditor/EntityAclEditorModal.js +1 -1
- package/dist/components/EntityAclEditor/OpenData.js +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.d.ts.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +113 -127
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
- package/dist/components/EntityCitation/EntityCitation.js +1 -1
- package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/EntityNameCell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js +1 -1
- package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js +1 -1
- package/dist/components/EntityFinder/tree/EntityTree.js +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.d.ts.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js +39 -39
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts +8 -0
- package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.d.ts.map +1 -0
- package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js +46 -0
- package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -0
- package/dist/components/Evaluation/EvaluationCard.d.ts.map +1 -1
- package/dist/components/Evaluation/EvaluationCard.js +35 -41
- package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
- package/dist/components/Evaluation/EvaluationEditor.d.ts.map +1 -1
- package/dist/components/Evaluation/EvaluationEditor.js +95 -90
- package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditor.d.ts.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditor.js +133 -124
- package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
- package/dist/components/FilePreview/EntityPreview.js +1 -1
- package/dist/components/Forum/DiscussionReply.js +10 -10
- package/dist/components/Forum/DiscussionThread.js +21 -21
- package/dist/components/GenericCard/CardUtils.d.ts.map +1 -1
- package/dist/components/GenericCard/CardUtils.js +36 -36
- package/dist/components/GenericCard/CardUtils.js.map +1 -1
- package/dist/components/GenericCard/CollapsibleDescription.js +25 -25
- package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
- package/dist/components/GenericCard/SynapseCardLabel.js +72 -67
- package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.d.ts +4 -1
- package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +98 -96
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.Desktop.d.ts.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.Desktop.js +14 -15
- package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
- package/dist/components/GoogleAnalytics/GoogleAnalytics.js +1 -1
- package/dist/components/HasAccess/HasAccessV2.js +1 -1
- package/dist/components/HasAccess/useHasAccess.js +1 -1
- package/dist/components/IDUReport/IDUReportSubmissionInfo.js +23 -23
- package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
- package/dist/components/JSONArrayEditor/useParseCsv.d.ts +1 -1
- package/dist/components/JSONArrayEditor/useParseCsv.d.ts.map +1 -1
- package/dist/components/JSONArrayEditor/useParseCsv.js +9 -9
- package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
- package/dist/components/Markdown/MarkdownCollapse.js +7 -7
- package/dist/components/Markdown/MarkdownEditor.js +11 -11
- package/dist/components/Markdown/MarkdownGithub.js +1 -1
- package/dist/components/Markdown/MarkdownPopover.js +6 -6
- package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
- package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownSynapse.js +139 -135
- package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
- package/dist/components/Markdown/MarkdownUtils.d.ts +8 -0
- package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownUtils.js +139 -65
- package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
- package/dist/components/Markdown/UserMentionModal.js +18 -18
- package/dist/components/Markdown/UserMentionModal.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownButton.js +3 -3
- package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.d.ts.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js +9 -8
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/Plot/SynapsePlot.css +1 -0
- package/dist/components/Plot/SynapsePlot.d.ts +2 -0
- package/dist/components/Plot/SynapsePlot.d.ts.map +1 -1
- package/dist/components/Plot/SynapsePlot.js +43 -39
- package/dist/components/Plot/SynapsePlot.js.map +1 -1
- package/dist/components/Plot/SynapsePlot.scss +8 -0
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +114 -113
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
- package/dist/components/Resources/Resources.Desktop.js +7 -7
- package/dist/components/Resources/Resources.Mobile.js +6 -6
- package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js +3 -3
- package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js +10 -10
- package/dist/components/SynapseChat/SynapseChatInteraction.js +5 -5
- package/dist/components/SynapseForm/WarningDialog.d.ts +1 -0
- package/dist/components/SynapseForm/WarningDialog.d.ts.map +1 -1
- package/dist/components/SynapseForm/WarningDialog.js +18 -16
- package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePartners.d.ts.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePartners.js +17 -12
- package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.d.ts.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js +39 -39
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/HasAccessChip.js +1 -1
- package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.d.ts.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js +21 -22
- package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js +5 -5
- package/dist/components/SynapseTable/ExpandableTableDataCell.d.ts.map +1 -1
- package/dist/components/SynapseTable/ExpandableTableDataCell.js +3 -1
- package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTable.js +4 -4
- package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.d.ts.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js +122 -122
- package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +5 -5
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
- package/dist/components/TableFeedCards/TableFeedCards.js +9 -9
- package/dist/components/TermsAndConditions/TermsAndConditionsItem.js +10 -10
- package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js +9 -9
- package/dist/components/UserSearchBox/UserSearchBox.d.ts +23 -0
- package/dist/components/UserSearchBox/UserSearchBox.d.ts.map +1 -0
- package/dist/components/UserSearchBox/UserSearchBox.js +146 -0
- package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -0
- package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js +13 -13
- package/dist/components/WizardChoiceButton/WizardChoiceButton.js +3 -3
- package/dist/components/dataaccess/AccessHistoryDashboard.js +5 -5
- package/dist/components/dataaccess/AccessHistoryDashboard.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/AccessSubmissionDashboard.js +1 -1
- package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +5 -5
- package/dist/components/dataaccess/UseAccessRequirementTable.js +3 -3
- package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js +1 -1
- package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +2 -2
- package/dist/components/entity/metadata/EntityModal.js +1 -1
- package/dist/components/entity/metadata/MetadataTable.js +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +1 -1
- package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js +1 -1
- package/dist/components/entity/page/title_bar/TitleBarProperties.js +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +27 -26
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
- package/dist/components/index.js +109 -107
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/InfiniteTableLayout.js +1 -1
- package/dist/components/styled/HoverPopover.css +1 -0
- package/dist/components/styled/HoverPopover.d.ts +28 -0
- package/dist/components/styled/HoverPopover.d.ts.map +1 -0
- package/dist/components/styled/HoverPopover.js +104 -0
- package/dist/components/styled/HoverPopover.js.map +1 -0
- package/dist/components/styled/HoverPopover.module.scss +10 -0
- package/dist/components/styled/HoverPopover.module.scss.js +10 -0
- package/dist/components/styled/HoverPopover.module.scss.js.map +1 -0
- package/dist/components/styled/index.d.ts +2 -0
- package/dist/components/styled/index.d.ts.map +1 -1
- package/dist/components/styled/index.js +11 -9
- package/dist/components/styled/index.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvPreview.js +2 -2
- package/dist/components/table/CsvPreview/CsvPreviewDialog.js +2 -2
- package/dist/components/widgets/Range.js +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -32
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.js +69 -68
- package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.js +24 -21
- package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js +3 -3
- package/dist/features/curator/GridPage/GridPage.js +2 -2
- package/dist/features/curator/GridPage/components/GridPageTitle.js +2 -2
- package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
- package/dist/index.js +157 -155
- package/dist/index.js.map +1 -1
- package/dist/mocks/msw/handlers/accessRequirementHandlers.js +5 -5
- package/dist/mocks/msw/handlers/projectStorageHandlers.js +5 -5
- package/dist/mocks/msw/handlers/wikiHandlers.js +1 -1
- package/dist/mocks/msw/handlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers.js +67 -59
- package/dist/mocks/msw/handlers.js.map +1 -1
- package/dist/style/base/_core.scss +0 -1
- package/dist/style/components/_all.scss +0 -1
- package/dist/style/components/_entity-badge.scss +0 -2
- package/dist/style/components/_expandable_table_data.scss +3 -3
- package/dist/style/components/facet_nav/_facet-nav-panel.scss +3 -0
- package/dist/style/components/facet_nav/_facet-nav.scss +4 -0
- package/dist/style/main.css +1 -1
- package/dist/synapse-client/SynapseClient.js +118 -118
- package/dist/synapse-client/SynapseClient.js.map +1 -1
- package/dist/synapse-queries/auth/useOIDC.js +1 -1
- package/dist/synapse-queries/auth/useTwoFactorEnrollment.js +1 -1
- package/dist/synapse-queries/entity/index.js +6 -6
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
- package/dist/synapse-queries/index.js +1 -1
- package/dist/synapse-queries/user/usePersonalAccessToken.js +1 -1
- package/dist/testutils/vitest.setup.js +10 -11
- package/dist/testutils/vitest.setup.js.map +1 -1
- package/dist/theme/DefaultTheme.js +1 -1
- package/dist/theme/ThemeProvider.d.ts +2 -1
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +11 -10
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/mergeTheme.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/AppUtils/AppUtils.js +1 -1
- package/dist/utils/functions/SanitizeHtmlUtils.d.ts.map +1 -1
- package/dist/utils/functions/SanitizeHtmlUtils.js +34 -40
- package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
- package/dist/utils/functions/deepLinkingUtils.js +10 -10
- package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
- package/dist/utils/hooks/index.js +6 -6
- package/dist/utils/hooks/useDetectSSOCode.js +3 -3
- package/dist/utils/hooks/useGetEntityMetadata.js +1 -1
- package/dist/utils/hooks/useNativeSearchParams.d.ts.map +1 -1
- package/dist/utils/hooks/useNativeSearchParams.js +1 -1
- package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
- package/dist/utils/hooks/useOneSageURL.d.ts.map +1 -1
- package/dist/utils/hooks/useOneSageURL.js +15 -15
- package/dist/utils/hooks/useOneSageURL.js.map +1 -1
- package/dist/utils/hooks/useSourceAppConfigs.d.ts +1 -0
- package/dist/utils/hooks/useSourceAppConfigs.d.ts.map +1 -1
- package/dist/utils/hooks/useSourceAppConfigs.js +79 -77
- package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
- package/dist/utils/index.js +4 -4
- package/package.json +17 -18
- package/dist/_virtual/index.js +0 -6
- package/dist/_virtual/index.js.map +0 -1
- package/dist/_virtual/index2.js +0 -5
- package/dist/_virtual/index2.js.map +0 -1
- package/dist/_virtual/index3.js +0 -5
- package/dist/_virtual/index3.js.map +0 -1
- package/dist/_virtual/index4.js +0 -5
- package/dist/_virtual/index4.js.map +0 -1
- package/dist/_virtual/index5.js +0 -5
- package/dist/_virtual/index5.js.map +0 -1
- package/dist/assets/homepage/nci.svg +0 -6
- package/dist/assets/homepage/nci.svg.js +0 -7
- package/dist/assets/homepage/nci.svg.js.map +0 -1
- package/dist/assets/homepage/nih-mental.svg +0 -9
- package/dist/assets/homepage/nih-mental.svg.js +0 -7
- package/dist/assets/homepage/nih-mental.svg.js.map +0 -1
- package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts +0 -21
- package/dist/components/UserSearchBox/UserSearchBoxV2.d.ts.map +0 -1
- package/dist/components/UserSearchBox/UserSearchBoxV2.js +0 -144
- package/dist/components/UserSearchBox/UserSearchBoxV2.js.map +0 -1
- package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js +0 -53
- package/dist/node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js.map +0 -1
- package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js +0 -948
- package/dist/node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js.map +0 -1
- package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js +0 -30
- package/dist/node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js.map +0 -1
- package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js +0 -15
- package/dist/node_modules/.pnpm/vite-plugin-node-polyfills@0.17.0_rollup@4.55.1_vite@7.3.1_@types_node@22.19.13_sass@1._2da6e8f78437c36f3eb7db51bdd4d89e/node_modules/vite-plugin-node-polyfills/shims/dist/index.js.map +0 -1
- package/dist/style/components/_user-search-box.scss +0 -30
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsx as n, Fragment as B, jsxs as r } from "react/jsx-runtime";
|
|
2
2
|
import L from "../../assets/icons/AddAd.js";
|
|
3
3
|
import { StyledTableContainer as re } from "../styled/StyledTableContainer.js";
|
|
4
|
-
import { useGetEntityHeaders as
|
|
5
|
-
import { entityTypeToFriendlyName as
|
|
4
|
+
import { useGetEntityHeaders as se } from "../../synapse-queries/entity/useGetEntityHeaders.js";
|
|
5
|
+
import { entityTypeToFriendlyName as le, getEntityTypeFromHeader as ae, normalizeSynPrefix as V } from "../../utils/functions/EntityTypeUtils.js";
|
|
6
6
|
import { SYNAPSE_ENTITY_ID_REGEX as j } from "../../utils/functions/RegularExpressions.js";
|
|
7
|
-
import { AddCircleTwoTone as
|
|
8
|
-
import { Box as a, Typography as O, Button as M, IconButton as U, InputLabel as
|
|
7
|
+
import { AddCircleTwoTone as ce } from "@mui/icons-material";
|
|
8
|
+
import { Box as a, Typography as O, Button as M, IconButton as U, InputLabel as de, TextField as me, Tooltip as pe, Alert as ue, AlertTitle as ge } from "@mui/material";
|
|
9
9
|
import { useReactTable as ye, getFacetedMinMaxValues as he, getFacetedUniqueValues as fe, getFacetedRowModel as xe, getSortedRowModel as Ce, getFilteredRowModel as we, getCoreRowModel as Se, flexRender as _ } from "@tanstack/react-table";
|
|
10
10
|
import { noop as Ie, upperFirst as Ee } from "lodash-es";
|
|
11
|
-
import
|
|
11
|
+
import Fe from "papaparse";
|
|
12
12
|
import Re from "pluralize";
|
|
13
13
|
import { useState as $, useCallback as E, useMemo as F, useEffect as De, Fragment as Te } from "react";
|
|
14
14
|
import { EntityFinderModal as be } from "../EntityFinder/EntityFinderModal.js";
|
|
@@ -20,12 +20,12 @@ import { SkeletonTable as He } from "../Skeleton/SkeletonTable.js";
|
|
|
20
20
|
import { CheckBoxCell as ke, CheckBoxHeader as ze, EntityHeaderNameCell as Ne, EntityHeaderIDCell as Pe, EntityHeaderTypeCell as Be } from "./EntityHeaderTableCellRenderers.js";
|
|
21
21
|
import { Filter as Le } from "./Filter.js";
|
|
22
22
|
import { useEntityHeaderTableState as Ve } from "./useEntityHeaderTableState.js";
|
|
23
|
-
const je = {
|
|
23
|
+
const { parse: je } = Fe, Oe = {
|
|
24
24
|
selectMultiple: !0,
|
|
25
25
|
versionSelection: Me.DISALLOWED,
|
|
26
26
|
initialScope: ve.ALL_PROJECTS,
|
|
27
27
|
initialContainer: "root"
|
|
28
|
-
},
|
|
28
|
+
}, Ue = 10, mt = (G) => {
|
|
29
29
|
const {
|
|
30
30
|
references: W,
|
|
31
31
|
isEditable: p,
|
|
@@ -35,11 +35,11 @@ const je = {
|
|
|
35
35
|
onUpdateEntityIDsTextbox: J,
|
|
36
36
|
objectNameCopy: Y = "entity",
|
|
37
37
|
hideTextFieldToPasteValue: R = !1,
|
|
38
|
-
entityFinderConfiguration: X =
|
|
38
|
+
entityFinderConfiguration: X = Oe
|
|
39
39
|
} = G, [K, Q] = $([]), [Z, h] = $(!1), {
|
|
40
40
|
rowSelection: f,
|
|
41
41
|
setRowSelection: ee,
|
|
42
|
-
refsInState:
|
|
42
|
+
refsInState: s,
|
|
43
43
|
setRefsInState: g,
|
|
44
44
|
newEntityIDs: i,
|
|
45
45
|
setNewEntityIDs: x,
|
|
@@ -55,11 +55,11 @@ const je = {
|
|
|
55
55
|
const e = t.map((o) => ({
|
|
56
56
|
targetId: o.trim()
|
|
57
57
|
}));
|
|
58
|
-
g([...
|
|
58
|
+
g([...s, ...e]);
|
|
59
59
|
},
|
|
60
|
-
[
|
|
60
|
+
[s, g]
|
|
61
61
|
), te = E(() => {
|
|
62
|
-
i ? i.includes(",") ?
|
|
62
|
+
i ? i.includes(",") ? je(i, {
|
|
63
63
|
complete: (t) => {
|
|
64
64
|
if (t.errors.length > 0) {
|
|
65
65
|
const e = t.errors.map(
|
|
@@ -68,7 +68,7 @@ const je = {
|
|
|
68
68
|
y(e);
|
|
69
69
|
} else {
|
|
70
70
|
const e = t.data[0], o = e.filter(
|
|
71
|
-
(
|
|
71
|
+
(d) => !d.trim().match(j)
|
|
72
72
|
);
|
|
73
73
|
o.length > 0 ? D(o) : T(e);
|
|
74
74
|
}
|
|
@@ -104,7 +104,7 @@ const je = {
|
|
|
104
104
|
header: "SynID"
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
|
-
accessorFn: (t) => t.isDummy ? "-" :
|
|
107
|
+
accessorFn: (t) => t.isDummy ? "-" : le(ae(t)),
|
|
108
108
|
id: "type",
|
|
109
109
|
header: "Type",
|
|
110
110
|
cell: Be,
|
|
@@ -119,18 +119,18 @@ const je = {
|
|
|
119
119
|
data: v,
|
|
120
120
|
isSuccess: oe,
|
|
121
121
|
isLoading: z
|
|
122
|
-
} =
|
|
122
|
+
} = se(s, {
|
|
123
123
|
throwOnError: !0
|
|
124
124
|
}), w = F(() => {
|
|
125
125
|
const t = v ? v?.results : [], e = /* @__PURE__ */ new Set();
|
|
126
126
|
t.forEach(
|
|
127
|
-
(
|
|
127
|
+
(l) => e.add(V(l.id))
|
|
128
128
|
);
|
|
129
|
-
const
|
|
130
|
-
(
|
|
131
|
-
).map((
|
|
132
|
-
id:
|
|
133
|
-
name:
|
|
129
|
+
const d = s.filter(
|
|
130
|
+
(l) => !e.has(V(l.targetId))
|
|
131
|
+
).map((l) => ({
|
|
132
|
+
id: l.targetId,
|
|
133
|
+
name: l.targetId,
|
|
134
134
|
benefactorId: -1,
|
|
135
135
|
type: "org.sagebionetworks.repo.model.Project",
|
|
136
136
|
createdOn: "",
|
|
@@ -140,8 +140,8 @@ const je = {
|
|
|
140
140
|
isLatestVersion: !0,
|
|
141
141
|
isDummy: !0
|
|
142
142
|
}));
|
|
143
|
-
return t.concat(
|
|
144
|
-
}, [
|
|
143
|
+
return t.concat(d);
|
|
144
|
+
}, [s, v]), c = ye({
|
|
145
145
|
data: w,
|
|
146
146
|
columns: ne,
|
|
147
147
|
state: {
|
|
@@ -163,18 +163,18 @@ const je = {
|
|
|
163
163
|
columnResizeMode: "onChange"
|
|
164
164
|
}), ie = E(() => {
|
|
165
165
|
const e = w.filter(
|
|
166
|
-
(o,
|
|
166
|
+
(o, d) => f[d] !== !0
|
|
167
167
|
).map((o) => ({
|
|
168
168
|
targetId: o.id
|
|
169
169
|
}));
|
|
170
170
|
g(e);
|
|
171
|
-
}, [w, f, g]), N = k > 0, S = w.length, P =
|
|
171
|
+
}, [w, f, g]), N = k > 0, S = w.length, P = c.getPrePaginationRowModel().rows.length, I = S > Ue;
|
|
172
172
|
return De(
|
|
173
173
|
function() {
|
|
174
|
-
I ||
|
|
174
|
+
I || c.setColumnFilters([]);
|
|
175
175
|
},
|
|
176
|
-
[
|
|
177
|
-
), z ? /* @__PURE__ */ n(He, { numCols: 3, numRows: Math.min(10,
|
|
176
|
+
[c, I]
|
|
177
|
+
), z ? /* @__PURE__ */ n(He, { numCols: 3, numRows: Math.min(10, s.length) }) : oe ? /* @__PURE__ */ r("div", { children: [
|
|
178
178
|
/* @__PURE__ */ r(
|
|
179
179
|
a,
|
|
180
180
|
{
|
|
@@ -192,7 +192,7 @@ const je = {
|
|
|
192
192
|
P < S ? `(${P} visible)` : "",
|
|
193
193
|
N && /* @__PURE__ */ n("span", { children: ` (${k} selected)` })
|
|
194
194
|
] }),
|
|
195
|
-
p &&
|
|
195
|
+
p && s.length > 0 && /* @__PURE__ */ n(
|
|
196
196
|
M,
|
|
197
197
|
{
|
|
198
198
|
variant: "contained",
|
|
@@ -211,8 +211,8 @@ const je = {
|
|
|
211
211
|
display: "flex",
|
|
212
212
|
pb: 2
|
|
213
213
|
},
|
|
214
|
-
children:
|
|
215
|
-
(t) => t.headers.map((e) => e.isPlaceholder ? null : /* @__PURE__ */ n(Te, { children: e.column.getCanFilter() && I ? /* @__PURE__ */ n(a, { sx: { flexGrow: 1 }, children: /* @__PURE__ */ n(Le, { column: e.column, table:
|
|
214
|
+
children: c.getHeaderGroups().map(
|
|
215
|
+
(t) => t.headers.map((e) => e.isPlaceholder ? null : /* @__PURE__ */ n(Te, { children: e.column.getCanFilter() && I ? /* @__PURE__ */ n(a, { sx: { flexGrow: 1 }, children: /* @__PURE__ */ n(Le, { column: e.column, table: c }) }) : null }, e.column.id))
|
|
216
216
|
)
|
|
217
217
|
}
|
|
218
218
|
),
|
|
@@ -226,7 +226,7 @@ const je = {
|
|
|
226
226
|
}
|
|
227
227
|
},
|
|
228
228
|
children: /* @__PURE__ */ r("table", { style: { borderCollapse: "collapse", width: "100%" }, children: [
|
|
229
|
-
/* @__PURE__ */ n("thead", { children:
|
|
229
|
+
/* @__PURE__ */ n("thead", { children: c.getHeaderGroups().map((t) => /* @__PURE__ */ n("tr", { children: t.headers.map((e) => {
|
|
230
230
|
let o = "5%";
|
|
231
231
|
switch (e.id) {
|
|
232
232
|
case "name":
|
|
@@ -308,7 +308,7 @@ const je = {
|
|
|
308
308
|
e.id
|
|
309
309
|
);
|
|
310
310
|
}) }, t.id)) }),
|
|
311
|
-
/* @__PURE__ */ n("tbody", { children:
|
|
311
|
+
/* @__PURE__ */ n("tbody", { children: c.getRowModel().rows.map((t) => /* @__PURE__ */ n("tr", { style: { height: "30px" }, children: t.getVisibleCells().map((e) => /* @__PURE__ */ n(
|
|
312
312
|
"td",
|
|
313
313
|
{
|
|
314
314
|
style: {
|
|
@@ -334,13 +334,13 @@ const je = {
|
|
|
334
334
|
confirmButtonCopy: `Add ${m}`,
|
|
335
335
|
onConfirm: (t) => {
|
|
336
336
|
if (R) {
|
|
337
|
-
const e = [...
|
|
337
|
+
const e = [...s, ...t];
|
|
338
338
|
g(e), A(e);
|
|
339
339
|
} else {
|
|
340
|
-
const e = t.map((
|
|
340
|
+
const e = t.map((l) => l.targetId), d = (i.trim().length > 0 ? i.concat(",") : i).concat(
|
|
341
341
|
e.join(",")
|
|
342
342
|
);
|
|
343
|
-
x(
|
|
343
|
+
x(d);
|
|
344
344
|
}
|
|
345
345
|
h(!1);
|
|
346
346
|
},
|
|
@@ -364,7 +364,7 @@ const je = {
|
|
|
364
364
|
}
|
|
365
365
|
),
|
|
366
366
|
!R && /* @__PURE__ */ r(B, { children: [
|
|
367
|
-
/* @__PURE__ */ n(
|
|
367
|
+
/* @__PURE__ */ n(de, { htmlFor: "synIDs", children: "Add Synapse IDs" }),
|
|
368
368
|
/* @__PURE__ */ r(
|
|
369
369
|
a,
|
|
370
370
|
{
|
|
@@ -400,7 +400,7 @@ const je = {
|
|
|
400
400
|
variant: "outlined",
|
|
401
401
|
onClick: te,
|
|
402
402
|
disabled: z || i.trim().length == 0 || u,
|
|
403
|
-
startIcon: /* @__PURE__ */ n(
|
|
403
|
+
startIcon: /* @__PURE__ */ n(ce, {}),
|
|
404
404
|
children: [
|
|
405
405
|
"Add ",
|
|
406
406
|
m
|
|
@@ -430,6 +430,6 @@ const je = {
|
|
|
430
430
|
] }) : /* @__PURE__ */ n(B, {});
|
|
431
431
|
};
|
|
432
432
|
export {
|
|
433
|
-
|
|
433
|
+
mt as EntityHeaderTable
|
|
434
434
|
};
|
|
435
435
|
//# sourceMappingURL=EntityHeaderTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityHeaderTable.js","sources":["../../../src/components/EntityHeaderTable/EntityHeaderTable.tsx"],"sourcesContent":["import React from 'react'\nimport AddAd from '@/assets/icons/AddAd'\nimport { StyledTableContainer } from '@/components/styled/StyledTableContainer'\nimport { useGetEntityHeaders } from '@/synapse-queries/entity/useGetEntityHeaders'\nimport {\n entityTypeToFriendlyName,\n getEntityTypeFromHeader,\n normalizeSynPrefix,\n} from '@/utils/functions/EntityTypeUtils'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n IconButton,\n InputLabel,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { EntityHeader, ReferenceList } from '@sage-bionetworks/synapse-types'\nimport {\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { noop, upperFirst } from 'lodash-es'\nimport { parse } from 'papaparse'\nimport pluralize from 'pluralize'\nimport { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n EntityFinderModal,\n EntityFinderModalProps,\n} from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '../EntityFinder/VersionSelectionType'\nimport IconSvg from '../IconSvg'\nimport { SkeletonTable } from '../Skeleton'\nimport {\n CheckBoxCell,\n CheckBoxHeader,\n EntityHeaderIDCell,\n EntityHeaderNameCell,\n EntityHeaderTypeCell,\n} from './EntityHeaderTableCellRenderers'\nimport { Filter } from './Filter'\nimport { useEntityHeaderTableState } from './useEntityHeaderTableState'\n\nconst DEFAULT_FINDER_CONFIG: EntityFinderModalProps['configuration'] = {\n selectMultiple: true,\n versionSelection: VersionSelectionType.DISALLOWED,\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n}\n\nexport type EntityHeaderTableProps = {\n references: ReferenceList\n isEditable: boolean\n disabled?: boolean\n onUpdate?: (updatedRefs: ReferenceList) => void // when the references are updated, EntityHeaderTable will call this function with the updated list\n removeSelectedRowsButtonText?: string\n onUpdateEntityIDsTextbox?: (value: string) => void // when the entity IDs text box is updated, this is called\n /* The word used to describe the items in the table. Default 'entity' */\n objectNameCopy?: string\n // If true, the text field where IDs are pasted is hidden, and confirming the entity finder will immediately call `onUpdate`\n hideTextFieldToPasteValue?: boolean\n entityFinderConfiguration?: EntityFinderModalProps['configuration']\n}\n\nconst UNMANAGEABLE_SUBJECT_COUNT = 10\n\n// extend EntityHeader to create dummy EntityHeader rows for those that the current user cannot view\nexport type EntityHeaderOrDummy = EntityHeader & { isDummy?: boolean }\n\n/**\n * Renders a sortable/filterable table for a set of entity references. If editable, onUpdate will be called back\n * on any entity added/removed.\n */\nexport const EntityHeaderTable = (\n props: EntityHeaderTableProps,\n): React.ReactNode => {\n const {\n references,\n isEditable,\n disabled,\n onUpdate = noop,\n removeSelectedRowsButtonText = 'Remove Selected Rows',\n onUpdateEntityIDsTextbox,\n objectNameCopy = 'entity',\n hideTextFieldToPasteValue = false,\n entityFinderConfiguration = DEFAULT_FINDER_CONFIG,\n } = props\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [showEntityFinder, setShowEntityFinder] = useState<boolean>(false)\n\n const {\n rowSelection,\n setRowSelection,\n refsInState,\n setRefsInState,\n newEntityIDs,\n setNewEntityIDs,\n parseErrors,\n setParseErrors,\n } = useEntityHeaderTableState(references, onUpdateEntityIDsTextbox, onUpdate)\n\n const setInvalidEntityIDError = useCallback(\n (invalidEntityIDs: string[]) => {\n setParseErrors([`Invalid Synapse ID(s): ${invalidEntityIDs.join(',')}`])\n },\n [setParseErrors],\n )\n\n const addRefsFromEntityIDs = useCallback(\n (entityIDs: string[]) => {\n const newReferences: ReferenceList = entityIDs.map(id => {\n return {\n targetId: id.trim(),\n }\n })\n setRefsInState([...refsInState, ...newReferences])\n },\n [refsInState, setRefsInState],\n )\n\n const addPastedValuesToArray = useCallback(() => {\n if (newEntityIDs) {\n if (newEntityIDs.includes(',')) {\n parse<string[]>(newEntityIDs, {\n complete: result => {\n if (result.errors.length > 0) {\n const newParseErrors = result.errors.map(\n parseError => parseError.message,\n )\n setParseErrors(newParseErrors)\n } else {\n const newParsedEntityIDs = result.data[0]\n const invalidEntityIDs = newParsedEntityIDs.filter(\n id => !id.trim().match(SYNAPSE_ENTITY_ID_REGEX),\n )\n if (invalidEntityIDs.length > 0) {\n setInvalidEntityIDError(invalidEntityIDs)\n } else {\n addRefsFromEntityIDs(newParsedEntityIDs)\n }\n }\n },\n })\n } else {\n // single item\n if (!newEntityIDs.trim().match(SYNAPSE_ENTITY_ID_REGEX)) {\n setInvalidEntityIDError([newEntityIDs])\n } else {\n addRefsFromEntityIDs([newEntityIDs])\n }\n }\n } else {\n setParseErrors([])\n setNewEntityIDs('')\n }\n }, [\n addRefsFromEntityIDs,\n newEntityIDs,\n setInvalidEntityIDError,\n setNewEntityIDs,\n setParseErrors,\n ])\n\n const pluralObjectName = upperFirst(pluralize(objectNameCopy))\n\n const selectColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n id: 'select',\n header: CheckBoxHeader,\n cell: CheckBoxCell,\n },\n ],\n [],\n )\n\n const entityHeaderColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.name,\n id: 'name',\n cell: EntityHeaderNameCell,\n header: 'Name',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.id,\n id: 'id',\n cell: EntityHeaderIDCell,\n header: 'SynID',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) =>\n row.isDummy\n ? '-'\n : entityTypeToFriendlyName(getEntityTypeFromHeader(row)),\n id: 'type',\n header: 'Type',\n cell: EntityHeaderTypeCell,\n filterFn: 'includesString',\n },\n ],\n [],\n )\n\n const columns = useMemo<ColumnDef<EntityHeaderOrDummy, any>[]>(\n () =>\n isEditable\n ? selectColumns.concat(entityHeaderColumns)\n : entityHeaderColumns,\n [entityHeaderColumns, isEditable, selectColumns],\n )\n const selectionCount = Object.keys(rowSelection).length\n const {\n data: results,\n isSuccess,\n isLoading,\n } = useGetEntityHeaders(refsInState, {\n throwOnError: true,\n })\n\n const data = useMemo(() => {\n //create dummy entries for values that were not returned by the getEntityHeaders call!\n const newData = results ? results?.results : []\n const newDataEntityIds = new Set()\n newData.forEach(entityHeader =>\n newDataEntityIds.add(normalizeSynPrefix(entityHeader.id)),\n )\n const missingRefs = refsInState.filter(\n ref => !newDataEntityIds.has(normalizeSynPrefix(ref.targetId)),\n )\n const dummyEntityHeaders: EntityHeaderOrDummy[] = missingRefs.map(ref => {\n return {\n id: ref.targetId,\n name: ref.targetId,\n benefactorId: -1,\n type: 'org.sagebionetworks.repo.model.Project',\n createdOn: '',\n modifiedOn: '',\n createdBy: '',\n modifiedBy: '',\n isLatestVersion: true,\n isDummy: true,\n }\n })\n return newData.concat(dummyEntityHeaders)\n }, [refsInState, results])\n const table = useReactTable({\n data,\n columns,\n state: {\n rowSelection,\n columnFilters,\n },\n enableRowSelection: isEditable,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n // debugTable: true,\n // debugHeaders: true,\n // debugColumns: false,\n columnResizeMode: 'onChange',\n })\n\n const onRemove = useCallback(() => {\n // rowSelection looks like {3: true. 5: true} where the key is the row index.\n // Create a new ReferenceList based on the entityHeaders in the current table.\n const updatedData = data.filter(\n (_value, index) => !(rowSelection[index] === true),\n )\n const newRowRefs: ReferenceList = updatedData.map(entityHeader => {\n return {\n targetId: entityHeader.id,\n }\n })\n setRefsInState(newRowRefs)\n }, [data, rowSelection, setRefsInState])\n\n const isSelection = selectionCount > 0\n const totalRowCount = data.length\n const filteredRowCount = table.getPrePaginationRowModel().rows.length\n const showFilterControls = totalRowCount > UNMANAGEABLE_SUBJECT_COUNT\n\n /**\n * Reset the column filters when the filter controls are hidden.\n * This handles the following edge case:\n * 1. List contains 100 items of type \"A\" and 1 of type \"B\"\n * 2. User filters to show just \"A\" items\n * 3. User removes all \"A\" items\n * 4. Only the single \"B\" item remains, but the filter is still present on type \"A\".\n * The filter controls are hidden, so the user cannot see the \"B\" item.\n *\n * This effect will clear the filters when the filter controls are hidden, preventing this scenario.\n */\n useEffect(\n function resetFiltersWhenFilterControlsAreHidden() {\n if (!showFilterControls) {\n table.setColumnFilters([])\n }\n },\n [table, showFilterControls],\n )\n\n if (isLoading) {\n return (\n <SkeletonTable numCols={3} numRows={Math.min(10, refsInState.length)} />\n )\n } else if (!isSuccess) {\n return <></>\n }\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n p: '12px 10px 10px 5px',\n }}\n >\n {showFilterControls && (\n <Typography variant=\"body1\" sx={{ marginBottom: '10px' }}>\n {totalRowCount} {pluralObjectName}{' '}\n {filteredRowCount < totalRowCount\n ? `(${filteredRowCount} visible)`\n : ''}\n {isSelection && <span>{` (${selectionCount} selected)`}</span>}\n </Typography>\n )}\n {isEditable && refsInState.length > 0 && (\n <Button\n variant=\"contained\"\n disabled={!isSelection || disabled}\n onClick={onRemove}\n >\n {removeSelectedRowsButtonText}\n </Button>\n )}\n </Box>\n <Box\n sx={{\n display: 'flex',\n pb: 2,\n }}\n >\n {table.getHeaderGroups().map(headerGroup =>\n headerGroup.headers.map(header => {\n return header.isPlaceholder ? null : (\n <Fragment key={header.column.id}>\n {header.column.getCanFilter() && showFilterControls ? (\n <Box sx={{ flexGrow: 1 }}>\n <Filter column={header.column} table={table} />\n </Box>\n ) : null}\n </Fragment>\n )\n }),\n )}\n </Box>\n {totalRowCount > 0 && (\n <StyledTableContainer\n sx={{\n th: {\n zIndex: 100,\n maxHeight: '250px',\n },\n }}\n >\n <table style={{ borderCollapse: 'collapse', width: '100%' }}>\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(header => {\n let columnSize: string = '5%'\n switch (header.id) {\n case 'name':\n columnSize = '50%'\n break\n case 'id':\n columnSize = '22%'\n break\n case 'type':\n columnSize = '22%'\n break\n default:\n break\n }\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n style={{\n width: columnSize,\n position: 'sticky',\n top: '0px',\n }}\n >\n {header.isPlaceholder ? null : (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n <Box\n sx={{\n mx: 'auto',\n }}\n />\n {header.column.getCanSort() && (\n <IconButton\n onClick={header.column.getToggleSortingHandler()}\n size={'small'}\n sx={{\n marginLeft: 'auto',\n marginRight: '16px',\n }}\n >\n <IconSvg\n icon={\n header.column.getIsSorted() === 'asc'\n ? 'sortUp'\n : 'sortDown'\n }\n wrap={false}\n fontSize={'inherit'}\n sx={{\n color: header.column.getIsSorted()\n ? 'primary.main'\n : 'grey.700',\n backgroundColor: 'none',\n }}\n />\n </IconButton>\n )}\n </Box>\n )}\n {header.column.getCanResize() && (\n <div\n className={`resizer ${\n header.column.getIsResizing() ? 'isResizing' : ''\n }`}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id} style={{ height: '30px' }}>\n {row.getVisibleCells().map(cell => {\n return (\n <td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </StyledTableContainer>\n )}\n <EntityFinderModal\n configuration={entityFinderConfiguration}\n promptCopy={`Select ${pluralObjectName} to add to the Synapse ID list`}\n show={showEntityFinder}\n title={`Select ${pluralObjectName}`}\n confirmButtonCopy={`Add ${pluralObjectName}`}\n onConfirm={items => {\n if (hideTextFieldToPasteValue) {\n const newRefs = [...refsInState, ...items]\n setRefsInState(newRefs)\n onUpdate(newRefs)\n } else {\n const newEntityIDsArray = items.map(ref => ref.targetId)\n const newEntityIDsString =\n newEntityIDs.trim().length > 0\n ? newEntityIDs.concat(',')\n : newEntityIDs\n const newValue = newEntityIDsString.concat(\n newEntityIDsArray.join(','),\n )\n setNewEntityIDs(newValue)\n }\n setShowEntityFinder(false)\n }}\n onCancel={() => setShowEntityFinder(false)}\n />\n {isEditable && (\n <Box sx={{ marginTop: '10px' }}>\n {hideTextFieldToPasteValue && (\n <Button\n variant=\"outlined\"\n onClick={() => {\n setShowEntityFinder(true)\n }}\n startIcon={<AddAd />}\n disabled={disabled}\n >\n Add {pluralObjectName}\n </Button>\n )}\n {!hideTextFieldToPasteValue && (\n <>\n <InputLabel htmlFor=\"synIDs\">Add Synapse IDs</InputLabel>\n <Box\n sx={{ display: 'grid', gridTemplateColumns: 'auto 50px 150px' }}\n >\n <TextField\n id=\"synIDs\"\n name=\"synIDs\"\n fullWidth\n onChange={e => {\n setNewEntityIDs(e.target.value)\n }}\n value={newEntityIDs}\n placeholder=\"Enter a list of Synapse IDs (i.e. 'syn123, syn456')\"\n disabled={disabled}\n />\n <Box sx={{ padding: '5px 0px 0px 5px' }}>\n {/* Entity finder button. On select, append the selected entity ID to the newSynIDs list */}\n <Tooltip title=\"Add a Synapse ID to the list via the Entity Finder\">\n <IconButton\n disabled={disabled}\n onClick={() => {\n setShowEntityFinder(true)\n }}\n >\n <AddAd />\n </IconButton>\n </Tooltip>\n </Box>\n <Button\n variant=\"outlined\"\n onClick={addPastedValuesToArray}\n disabled={\n isLoading || newEntityIDs.trim().length == 0 || disabled\n }\n startIcon={<AddCircleTwoTone />}\n >\n Add {pluralObjectName}\n </Button>\n </Box>\n </>\n )}\n {parseErrors && parseErrors.length > 0 && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n <AlertTitle>Parsing errors encountered:</AlertTitle>\n <ul>\n {parseErrors.map((error, index) => {\n return (\n <Typography\n component={parseErrors.length > 1 ? 'li' : 'span'}\n key={index}\n variant={'smallText1'}\n sx={{\n lineHeight: 1.5,\n }}\n >\n {error}\n </Typography>\n )\n })}\n </ul>\n </Alert>\n )}\n </Box>\n )}\n </div>\n )\n}\n"],"names":["DEFAULT_FINDER_CONFIG","VersionSelectionType","FinderScope","UNMANAGEABLE_SUBJECT_COUNT","EntityHeaderTable","props","references","isEditable","disabled","onUpdate","noop","removeSelectedRowsButtonText","onUpdateEntityIDsTextbox","objectNameCopy","hideTextFieldToPasteValue","entityFinderConfiguration","columnFilters","setColumnFilters","useState","showEntityFinder","setShowEntityFinder","rowSelection","setRowSelection","refsInState","setRefsInState","newEntityIDs","setNewEntityIDs","parseErrors","setParseErrors","useEntityHeaderTableState","setInvalidEntityIDError","useCallback","invalidEntityIDs","addRefsFromEntityIDs","entityIDs","newReferences","id","addPastedValuesToArray","parse","result","newParseErrors","parseError","newParsedEntityIDs","SYNAPSE_ENTITY_ID_REGEX","pluralObjectName","upperFirst","pluralize","selectColumns","useMemo","CheckBoxHeader","CheckBoxCell","entityHeaderColumns","row","EntityHeaderNameCell","EntityHeaderIDCell","entityTypeToFriendlyName","getEntityTypeFromHeader","EntityHeaderTypeCell","columns","selectionCount","results","isSuccess","isLoading","useGetEntityHeaders","data","newData","newDataEntityIds","normalizeSynPrefix","entityHeader","dummyEntityHeaders","ref","table","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues","onRemove","newRowRefs","_value","index","isSelection","totalRowCount","filteredRowCount","showFilterControls","useEffect","jsx","SkeletonTable","jsxs","Box","Typography","Button","headerGroup","header","Fragment","Filter","StyledTableContainer","columnSize","flexRender","IconButton","IconSvg","cell","EntityFinderModal","items","newRefs","newEntityIDsArray","newValue","AddAd","InputLabel","TextField","e","Tooltip","AddCircleTwoTone","Alert","AlertTitle","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityHeaderTable.js","sources":["../../../src/components/EntityHeaderTable/EntityHeaderTable.tsx"],"sourcesContent":["import React from 'react'\nimport AddAd from '@/assets/icons/AddAd'\nimport { StyledTableContainer } from '@/components/styled/StyledTableContainer'\nimport { useGetEntityHeaders } from '@/synapse-queries/entity/useGetEntityHeaders'\nimport {\n entityTypeToFriendlyName,\n getEntityTypeFromHeader,\n normalizeSynPrefix,\n} from '@/utils/functions/EntityTypeUtils'\nimport { SYNAPSE_ENTITY_ID_REGEX } from '@/utils/functions/RegularExpressions'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n IconButton,\n InputLabel,\n TextField,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport { EntityHeader, ReferenceList } from '@sage-bionetworks/synapse-types'\nimport {\n ColumnDef,\n ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFacetedMinMaxValues,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { noop, upperFirst } from 'lodash-es'\nimport papaparseLib from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse } = papaparseLib\nimport pluralize from 'pluralize'\nimport { Fragment, useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n EntityFinderModal,\n EntityFinderModalProps,\n} from '../EntityFinder/EntityFinderModal'\nimport { FinderScope } from '../EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '../EntityFinder/VersionSelectionType'\nimport IconSvg from '../IconSvg'\nimport { SkeletonTable } from '../Skeleton'\nimport {\n CheckBoxCell,\n CheckBoxHeader,\n EntityHeaderIDCell,\n EntityHeaderNameCell,\n EntityHeaderTypeCell,\n} from './EntityHeaderTableCellRenderers'\nimport { Filter } from './Filter'\nimport { useEntityHeaderTableState } from './useEntityHeaderTableState'\n\nconst DEFAULT_FINDER_CONFIG: EntityFinderModalProps['configuration'] = {\n selectMultiple: true,\n versionSelection: VersionSelectionType.DISALLOWED,\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n}\n\nexport type EntityHeaderTableProps = {\n references: ReferenceList\n isEditable: boolean\n disabled?: boolean\n onUpdate?: (updatedRefs: ReferenceList) => void // when the references are updated, EntityHeaderTable will call this function with the updated list\n removeSelectedRowsButtonText?: string\n onUpdateEntityIDsTextbox?: (value: string) => void // when the entity IDs text box is updated, this is called\n /* The word used to describe the items in the table. Default 'entity' */\n objectNameCopy?: string\n // If true, the text field where IDs are pasted is hidden, and confirming the entity finder will immediately call `onUpdate`\n hideTextFieldToPasteValue?: boolean\n entityFinderConfiguration?: EntityFinderModalProps['configuration']\n}\n\nconst UNMANAGEABLE_SUBJECT_COUNT = 10\n\n// extend EntityHeader to create dummy EntityHeader rows for those that the current user cannot view\nexport type EntityHeaderOrDummy = EntityHeader & { isDummy?: boolean }\n\n/**\n * Renders a sortable/filterable table for a set of entity references. If editable, onUpdate will be called back\n * on any entity added/removed.\n */\nexport const EntityHeaderTable = (\n props: EntityHeaderTableProps,\n): React.ReactNode => {\n const {\n references,\n isEditable,\n disabled,\n onUpdate = noop,\n removeSelectedRowsButtonText = 'Remove Selected Rows',\n onUpdateEntityIDsTextbox,\n objectNameCopy = 'entity',\n hideTextFieldToPasteValue = false,\n entityFinderConfiguration = DEFAULT_FINDER_CONFIG,\n } = props\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [showEntityFinder, setShowEntityFinder] = useState<boolean>(false)\n\n const {\n rowSelection,\n setRowSelection,\n refsInState,\n setRefsInState,\n newEntityIDs,\n setNewEntityIDs,\n parseErrors,\n setParseErrors,\n } = useEntityHeaderTableState(references, onUpdateEntityIDsTextbox, onUpdate)\n\n const setInvalidEntityIDError = useCallback(\n (invalidEntityIDs: string[]) => {\n setParseErrors([`Invalid Synapse ID(s): ${invalidEntityIDs.join(',')}`])\n },\n [setParseErrors],\n )\n\n const addRefsFromEntityIDs = useCallback(\n (entityIDs: string[]) => {\n const newReferences: ReferenceList = entityIDs.map(id => {\n return {\n targetId: id.trim(),\n }\n })\n setRefsInState([...refsInState, ...newReferences])\n },\n [refsInState, setRefsInState],\n )\n\n const addPastedValuesToArray = useCallback(() => {\n if (newEntityIDs) {\n if (newEntityIDs.includes(',')) {\n parse<string[]>(newEntityIDs, {\n complete: result => {\n if (result.errors.length > 0) {\n const newParseErrors = result.errors.map(\n parseError => parseError.message,\n )\n setParseErrors(newParseErrors)\n } else {\n const newParsedEntityIDs = result.data[0]\n const invalidEntityIDs = newParsedEntityIDs.filter(\n id => !id.trim().match(SYNAPSE_ENTITY_ID_REGEX),\n )\n if (invalidEntityIDs.length > 0) {\n setInvalidEntityIDError(invalidEntityIDs)\n } else {\n addRefsFromEntityIDs(newParsedEntityIDs)\n }\n }\n },\n })\n } else {\n // single item\n if (!newEntityIDs.trim().match(SYNAPSE_ENTITY_ID_REGEX)) {\n setInvalidEntityIDError([newEntityIDs])\n } else {\n addRefsFromEntityIDs([newEntityIDs])\n }\n }\n } else {\n setParseErrors([])\n setNewEntityIDs('')\n }\n }, [\n addRefsFromEntityIDs,\n newEntityIDs,\n setInvalidEntityIDError,\n setNewEntityIDs,\n setParseErrors,\n ])\n\n const pluralObjectName = upperFirst(pluralize(objectNameCopy))\n\n const selectColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n id: 'select',\n header: CheckBoxHeader,\n cell: CheckBoxCell,\n },\n ],\n [],\n )\n\n const entityHeaderColumns: ColumnDef<EntityHeaderOrDummy, any>[] = useMemo(\n () => [\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.name,\n id: 'name',\n cell: EntityHeaderNameCell,\n header: 'Name',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) => row.id,\n id: 'id',\n cell: EntityHeaderIDCell,\n header: 'SynID',\n },\n {\n accessorFn: (row: EntityHeaderOrDummy) =>\n row.isDummy\n ? '-'\n : entityTypeToFriendlyName(getEntityTypeFromHeader(row)),\n id: 'type',\n header: 'Type',\n cell: EntityHeaderTypeCell,\n filterFn: 'includesString',\n },\n ],\n [],\n )\n\n const columns = useMemo<ColumnDef<EntityHeaderOrDummy, any>[]>(\n () =>\n isEditable\n ? selectColumns.concat(entityHeaderColumns)\n : entityHeaderColumns,\n [entityHeaderColumns, isEditable, selectColumns],\n )\n const selectionCount = Object.keys(rowSelection).length\n const {\n data: results,\n isSuccess,\n isLoading,\n } = useGetEntityHeaders(refsInState, {\n throwOnError: true,\n })\n\n const data = useMemo(() => {\n //create dummy entries for values that were not returned by the getEntityHeaders call!\n const newData = results ? results?.results : []\n const newDataEntityIds = new Set()\n newData.forEach(entityHeader =>\n newDataEntityIds.add(normalizeSynPrefix(entityHeader.id)),\n )\n const missingRefs = refsInState.filter(\n ref => !newDataEntityIds.has(normalizeSynPrefix(ref.targetId)),\n )\n const dummyEntityHeaders: EntityHeaderOrDummy[] = missingRefs.map(ref => {\n return {\n id: ref.targetId,\n name: ref.targetId,\n benefactorId: -1,\n type: 'org.sagebionetworks.repo.model.Project',\n createdOn: '',\n modifiedOn: '',\n createdBy: '',\n modifiedBy: '',\n isLatestVersion: true,\n isDummy: true,\n }\n })\n return newData.concat(dummyEntityHeaders)\n }, [refsInState, results])\n const table = useReactTable({\n data,\n columns,\n state: {\n rowSelection,\n columnFilters,\n },\n enableRowSelection: isEditable,\n onRowSelectionChange: setRowSelection,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getFacetedMinMaxValues: getFacetedMinMaxValues(),\n // debugTable: true,\n // debugHeaders: true,\n // debugColumns: false,\n columnResizeMode: 'onChange',\n })\n\n const onRemove = useCallback(() => {\n // rowSelection looks like {3: true. 5: true} where the key is the row index.\n // Create a new ReferenceList based on the entityHeaders in the current table.\n const updatedData = data.filter(\n (_value, index) => !(rowSelection[index] === true),\n )\n const newRowRefs: ReferenceList = updatedData.map(entityHeader => {\n return {\n targetId: entityHeader.id,\n }\n })\n setRefsInState(newRowRefs)\n }, [data, rowSelection, setRefsInState])\n\n const isSelection = selectionCount > 0\n const totalRowCount = data.length\n const filteredRowCount = table.getPrePaginationRowModel().rows.length\n const showFilterControls = totalRowCount > UNMANAGEABLE_SUBJECT_COUNT\n\n /**\n * Reset the column filters when the filter controls are hidden.\n * This handles the following edge case:\n * 1. List contains 100 items of type \"A\" and 1 of type \"B\"\n * 2. User filters to show just \"A\" items\n * 3. User removes all \"A\" items\n * 4. Only the single \"B\" item remains, but the filter is still present on type \"A\".\n * The filter controls are hidden, so the user cannot see the \"B\" item.\n *\n * This effect will clear the filters when the filter controls are hidden, preventing this scenario.\n */\n useEffect(\n function resetFiltersWhenFilterControlsAreHidden() {\n if (!showFilterControls) {\n table.setColumnFilters([])\n }\n },\n [table, showFilterControls],\n )\n\n if (isLoading) {\n return (\n <SkeletonTable numCols={3} numRows={Math.min(10, refsInState.length)} />\n )\n } else if (!isSuccess) {\n return <></>\n }\n return (\n <div>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n p: '12px 10px 10px 5px',\n }}\n >\n {showFilterControls && (\n <Typography variant=\"body1\" sx={{ marginBottom: '10px' }}>\n {totalRowCount} {pluralObjectName}{' '}\n {filteredRowCount < totalRowCount\n ? `(${filteredRowCount} visible)`\n : ''}\n {isSelection && <span>{` (${selectionCount} selected)`}</span>}\n </Typography>\n )}\n {isEditable && refsInState.length > 0 && (\n <Button\n variant=\"contained\"\n disabled={!isSelection || disabled}\n onClick={onRemove}\n >\n {removeSelectedRowsButtonText}\n </Button>\n )}\n </Box>\n <Box\n sx={{\n display: 'flex',\n pb: 2,\n }}\n >\n {table.getHeaderGroups().map(headerGroup =>\n headerGroup.headers.map(header => {\n return header.isPlaceholder ? null : (\n <Fragment key={header.column.id}>\n {header.column.getCanFilter() && showFilterControls ? (\n <Box sx={{ flexGrow: 1 }}>\n <Filter column={header.column} table={table} />\n </Box>\n ) : null}\n </Fragment>\n )\n }),\n )}\n </Box>\n {totalRowCount > 0 && (\n <StyledTableContainer\n sx={{\n th: {\n zIndex: 100,\n maxHeight: '250px',\n },\n }}\n >\n <table style={{ borderCollapse: 'collapse', width: '100%' }}>\n <thead>\n {table.getHeaderGroups().map(headerGroup => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map(header => {\n let columnSize: string = '5%'\n switch (header.id) {\n case 'name':\n columnSize = '50%'\n break\n case 'id':\n columnSize = '22%'\n break\n case 'type':\n columnSize = '22%'\n break\n default:\n break\n }\n return (\n <th\n key={header.id}\n colSpan={header.colSpan}\n style={{\n width: columnSize,\n position: 'sticky',\n top: '0px',\n }}\n >\n {header.isPlaceholder ? null : (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n <Box\n sx={{\n mx: 'auto',\n }}\n />\n {header.column.getCanSort() && (\n <IconButton\n onClick={header.column.getToggleSortingHandler()}\n size={'small'}\n sx={{\n marginLeft: 'auto',\n marginRight: '16px',\n }}\n >\n <IconSvg\n icon={\n header.column.getIsSorted() === 'asc'\n ? 'sortUp'\n : 'sortDown'\n }\n wrap={false}\n fontSize={'inherit'}\n sx={{\n color: header.column.getIsSorted()\n ? 'primary.main'\n : 'grey.700',\n backgroundColor: 'none',\n }}\n />\n </IconButton>\n )}\n </Box>\n )}\n {header.column.getCanResize() && (\n <div\n className={`resizer ${\n header.column.getIsResizing() ? 'isResizing' : ''\n }`}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n />\n )}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id} style={{ height: '30px' }}>\n {row.getVisibleCells().map(cell => {\n return (\n <td\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </StyledTableContainer>\n )}\n <EntityFinderModal\n configuration={entityFinderConfiguration}\n promptCopy={`Select ${pluralObjectName} to add to the Synapse ID list`}\n show={showEntityFinder}\n title={`Select ${pluralObjectName}`}\n confirmButtonCopy={`Add ${pluralObjectName}`}\n onConfirm={items => {\n if (hideTextFieldToPasteValue) {\n const newRefs = [...refsInState, ...items]\n setRefsInState(newRefs)\n onUpdate(newRefs)\n } else {\n const newEntityIDsArray = items.map(ref => ref.targetId)\n const newEntityIDsString =\n newEntityIDs.trim().length > 0\n ? newEntityIDs.concat(',')\n : newEntityIDs\n const newValue = newEntityIDsString.concat(\n newEntityIDsArray.join(','),\n )\n setNewEntityIDs(newValue)\n }\n setShowEntityFinder(false)\n }}\n onCancel={() => setShowEntityFinder(false)}\n />\n {isEditable && (\n <Box sx={{ marginTop: '10px' }}>\n {hideTextFieldToPasteValue && (\n <Button\n variant=\"outlined\"\n onClick={() => {\n setShowEntityFinder(true)\n }}\n startIcon={<AddAd />}\n disabled={disabled}\n >\n Add {pluralObjectName}\n </Button>\n )}\n {!hideTextFieldToPasteValue && (\n <>\n <InputLabel htmlFor=\"synIDs\">Add Synapse IDs</InputLabel>\n <Box\n sx={{ display: 'grid', gridTemplateColumns: 'auto 50px 150px' }}\n >\n <TextField\n id=\"synIDs\"\n name=\"synIDs\"\n fullWidth\n onChange={e => {\n setNewEntityIDs(e.target.value)\n }}\n value={newEntityIDs}\n placeholder=\"Enter a list of Synapse IDs (i.e. 'syn123, syn456')\"\n disabled={disabled}\n />\n <Box sx={{ padding: '5px 0px 0px 5px' }}>\n {/* Entity finder button. On select, append the selected entity ID to the newSynIDs list */}\n <Tooltip title=\"Add a Synapse ID to the list via the Entity Finder\">\n <IconButton\n disabled={disabled}\n onClick={() => {\n setShowEntityFinder(true)\n }}\n >\n <AddAd />\n </IconButton>\n </Tooltip>\n </Box>\n <Button\n variant=\"outlined\"\n onClick={addPastedValuesToArray}\n disabled={\n isLoading || newEntityIDs.trim().length == 0 || disabled\n }\n startIcon={<AddCircleTwoTone />}\n >\n Add {pluralObjectName}\n </Button>\n </Box>\n </>\n )}\n {parseErrors && parseErrors.length > 0 && (\n <Alert severity={'error'} sx={{ my: 2 }}>\n <AlertTitle>Parsing errors encountered:</AlertTitle>\n <ul>\n {parseErrors.map((error, index) => {\n return (\n <Typography\n component={parseErrors.length > 1 ? 'li' : 'span'}\n key={index}\n variant={'smallText1'}\n sx={{\n lineHeight: 1.5,\n }}\n >\n {error}\n </Typography>\n )\n })}\n </ul>\n </Alert>\n )}\n </Box>\n )}\n </div>\n )\n}\n"],"names":["parse","papaparseLib","DEFAULT_FINDER_CONFIG","VersionSelectionType","FinderScope","UNMANAGEABLE_SUBJECT_COUNT","EntityHeaderTable","props","references","isEditable","disabled","onUpdate","noop","removeSelectedRowsButtonText","onUpdateEntityIDsTextbox","objectNameCopy","hideTextFieldToPasteValue","entityFinderConfiguration","columnFilters","setColumnFilters","useState","showEntityFinder","setShowEntityFinder","rowSelection","setRowSelection","refsInState","setRefsInState","newEntityIDs","setNewEntityIDs","parseErrors","setParseErrors","useEntityHeaderTableState","setInvalidEntityIDError","useCallback","invalidEntityIDs","addRefsFromEntityIDs","entityIDs","newReferences","id","addPastedValuesToArray","result","newParseErrors","parseError","newParsedEntityIDs","SYNAPSE_ENTITY_ID_REGEX","pluralObjectName","upperFirst","pluralize","selectColumns","useMemo","CheckBoxHeader","CheckBoxCell","entityHeaderColumns","row","EntityHeaderNameCell","EntityHeaderIDCell","entityTypeToFriendlyName","getEntityTypeFromHeader","EntityHeaderTypeCell","columns","selectionCount","results","isSuccess","isLoading","useGetEntityHeaders","data","newData","newDataEntityIds","normalizeSynPrefix","entityHeader","dummyEntityHeaders","ref","table","useReactTable","getCoreRowModel","getFilteredRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getFacetedMinMaxValues","onRemove","newRowRefs","_value","index","isSelection","totalRowCount","filteredRowCount","showFilterControls","useEffect","jsx","SkeletonTable","jsxs","Box","Typography","Button","headerGroup","header","Fragment","Filter","StyledTableContainer","columnSize","flexRender","IconButton","IconSvg","cell","EntityFinderModal","items","newRefs","newEntityIDsArray","newValue","AddAd","InputLabel","TextField","e","Tooltip","AddCircleTwoTone","Alert","AlertTitle","error"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type DeleteEvaluationQueueConfirmationDialogProps = {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onConfirm: () => void;
|
|
4
|
+
onCancel: () => void;
|
|
5
|
+
};
|
|
6
|
+
export declare function DeleteEvaluationQueueConfirmationDialog({ open, onConfirm, onCancel, }: DeleteEvaluationQueueConfirmationDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=DeleteEvaluationQueueConfirmationDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteEvaluationQueueConfirmationDialog.d.ts","sourceRoot":"","sources":["../../../src/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.tsx"],"names":[],"mappings":"AAIA,KAAK,4CAA4C,GAAG;IAClD,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,wBAAgB,uCAAuC,CAAC,EACtD,IAAI,EACJ,SAAS,EACT,QAAQ,GACT,EAAE,4CAA4C,2CAgC9C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as e, jsxs as t, Fragment as s } from "react/jsx-runtime";
|
|
2
|
+
import { Typography as c, FormControlLabel as u, Checkbox as m } from "@mui/material";
|
|
3
|
+
import { useState as d } from "react";
|
|
4
|
+
import { WarningDialog as h } from "../SynapseForm/WarningDialog.js";
|
|
5
|
+
function C({
|
|
6
|
+
open: n,
|
|
7
|
+
onConfirm: r,
|
|
8
|
+
onCancel: i
|
|
9
|
+
}) {
|
|
10
|
+
const [o, a] = d(!1);
|
|
11
|
+
return /* @__PURE__ */ e(
|
|
12
|
+
h,
|
|
13
|
+
{
|
|
14
|
+
title: "Delete Evaluation Queue?",
|
|
15
|
+
content: /* @__PURE__ */ t(s, { children: [
|
|
16
|
+
/* @__PURE__ */ t(c, { pb: 2, children: [
|
|
17
|
+
/* @__PURE__ */ e("strong", { children: "Warning" }),
|
|
18
|
+
": Deleting this evaluation queue will also permanently erase all associated submissions and scores. This action is irreversible."
|
|
19
|
+
] }),
|
|
20
|
+
/* @__PURE__ */ e(
|
|
21
|
+
u,
|
|
22
|
+
{
|
|
23
|
+
control: /* @__PURE__ */ e(
|
|
24
|
+
m,
|
|
25
|
+
{
|
|
26
|
+
checked: o,
|
|
27
|
+
onChange: (l) => a(l.target.checked)
|
|
28
|
+
}
|
|
29
|
+
),
|
|
30
|
+
label: "I understand and wish to proceed."
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
] }),
|
|
34
|
+
open: n,
|
|
35
|
+
confirmButtonText: "Delete",
|
|
36
|
+
confirmButtonColor: "error",
|
|
37
|
+
confirmButtonDisabled: !o,
|
|
38
|
+
onConfirm: r,
|
|
39
|
+
onCancel: i
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
C as DeleteEvaluationQueueConfirmationDialog
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=DeleteEvaluationQueueConfirmationDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteEvaluationQueueConfirmationDialog.js","sources":["../../../src/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.tsx"],"sourcesContent":["import { Checkbox, FormControlLabel, Typography } from '@mui/material'\nimport { useState } from 'react'\nimport WarningDialog from '../SynapseForm/WarningDialog'\n\ntype DeleteEvaluationQueueConfirmationDialogProps = {\n open: boolean\n onConfirm: () => void\n onCancel: () => void\n}\n\nexport function DeleteEvaluationQueueConfirmationDialog({\n open,\n onConfirm,\n onCancel,\n}: DeleteEvaluationQueueConfirmationDialogProps) {\n const [isChecked, setIsChecked] = useState(false)\n\n return (\n <WarningDialog\n title=\"Delete Evaluation Queue?\"\n content={\n <>\n <Typography pb={2}>\n <strong>Warning</strong>: Deleting this evaluation queue will also\n permanently erase all associated submissions and scores. This action\n is irreversible.\n </Typography>\n <FormControlLabel\n control={\n <Checkbox\n checked={isChecked}\n onChange={e => setIsChecked(e.target.checked)}\n />\n }\n label=\"I understand and wish to proceed.\"\n />\n </>\n }\n open={open}\n confirmButtonText=\"Delete\"\n confirmButtonColor=\"error\"\n confirmButtonDisabled={!isChecked}\n onConfirm={onConfirm}\n onCancel={onCancel}\n />\n )\n}\n"],"names":["DeleteEvaluationQueueConfirmationDialog","open","onConfirm","onCancel","isChecked","setIsChecked","useState","jsx","WarningDialog","jsxs","Fragment","Typography","FormControlLabel","Checkbox","e"],"mappings":";;;;AAUO,SAASA,EAAwC;AAAA,EACtD,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AACF,GAAiD;AAC/C,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK;AAEhD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,QAAA,gBAAAD,EAACE,GAAA,EAAW,IAAI,GACd,UAAA;AAAA,UAAA,gBAAAJ,EAAC,YAAO,UAAA,UAAA,CAAO;AAAA,UAAS;AAAA,QAAA,GAG1B;AAAA,QACA,gBAAAA;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SACE,gBAAAL;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAST;AAAA,gBACT,UAAU,CAAAU,MAAKT,EAAaS,EAAE,OAAO,OAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAGhD,OAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACR,GACF;AAAA,MAEF,MAAAb;AAAA,MACA,mBAAkB;AAAA,MAClB,oBAAmB;AAAA,MACnB,uBAAuB,CAACG;AAAA,MACxB,WAAAF;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvaluationCard.d.ts","sourceRoot":"","sources":["../../../src/components/Evaluation/EvaluationCard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAa5C,OAAO,EACL,UAAU,EAEX,MAAM,iCAAiC,CAAA;AAOxC,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,CACjD,UAAU,EACV,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAC1D,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,0CAA0C;IAC1C,UAAU,EAAE,kBAAkB,CAAA;IAC9B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,uEAAuE;IACvE,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oDAAoD;IACpD,eAAe,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,MAAM,EACN,cAAc,EACd,QAAQ,EACR,eAAe,GAChB,EAAE,mBAAmB,2CAqErB;
|
|
1
|
+
{"version":3,"file":"EvaluationCard.d.ts","sourceRoot":"","sources":["../../../src/components/Evaluation/EvaluationCard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAa5C,OAAO,EACL,UAAU,EAEX,MAAM,iCAAiC,CAAA;AAOxC,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,CACjD,UAAU,EACV,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAC1D,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,0CAA0C;IAC1C,UAAU,EAAE,kBAAkB,CAAA;IAC9B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,uEAAuE;IACvE,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oDAAoD;IACpD,eAAe,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,MAAM,EACN,cAAc,EACd,QAAQ,EACR,eAAe,GAChB,EAAE,mBAAmB,2CAqErB;AAiGD,eAAe,cAAc,CAAA"}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import { jsx as n, jsxs as o, Fragment as C } from "react/jsx-runtime";
|
|
2
2
|
import { getEvaluationPermissions as E, deleteEvaluation as D } from "../../synapse-client/SynapseClient.js";
|
|
3
3
|
import { useSynapseContext as g } from "../../utils/context/SynapseContext.js";
|
|
4
|
-
import { Card as b, CardContent as x, Box as
|
|
5
|
-
import { useState as
|
|
6
|
-
import { ErrorBanner as
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
4
|
+
import { Card as b, CardContent as x, Box as I, Button as S, IconButton as k, Menu as w, MenuItem as p, Divider as v } from "@mui/material";
|
|
5
|
+
import { useState as d, useEffect as y } from "react";
|
|
6
|
+
import { ErrorBanner as B } from "../error/ErrorBanner.js";
|
|
7
|
+
import P from "../IconSvg/IconSvg.js";
|
|
8
|
+
import { CreatedOnByUserDiv as A } from "./CreatedOnByUserDiv.js";
|
|
9
|
+
import { DeleteEvaluationQueueConfirmationDialog as M } from "./DeleteEvaluationQueueConfirmationDialog.js";
|
|
10
10
|
function q({
|
|
11
11
|
evaluation: e,
|
|
12
|
-
onEdit:
|
|
13
|
-
onModifyAccess:
|
|
14
|
-
onSubmit:
|
|
15
|
-
onDeleteSuccess:
|
|
12
|
+
onEdit: m,
|
|
13
|
+
onModifyAccess: h,
|
|
14
|
+
onSubmit: u,
|
|
15
|
+
onDeleteSuccess: s
|
|
16
16
|
}) {
|
|
17
|
-
const { accessToken: t } = g(), [i, r] =
|
|
18
|
-
return
|
|
17
|
+
const { accessToken: t } = g(), [i, r] = d(), [l, f] = d();
|
|
18
|
+
return y(() => {
|
|
19
19
|
r(void 0), E(e.id, t).then((a) => {
|
|
20
20
|
f(a);
|
|
21
21
|
}).catch((a) => r(a));
|
|
22
22
|
}, [e, t]), /* @__PURE__ */ n("div", { className: "evaluation-card", children: /* @__PURE__ */ n(b, { children: /* @__PURE__ */ o(x, { sx: { p: 3 }, children: [
|
|
23
|
-
i && /* @__PURE__ */ n(
|
|
23
|
+
i && /* @__PURE__ */ n(B, { error: i }),
|
|
24
24
|
l && /* @__PURE__ */ o(C, { children: [
|
|
25
|
-
/* @__PURE__ */ o(
|
|
25
|
+
/* @__PURE__ */ o(I, { sx: { display: "flex", justifyContent: "space-between" }, children: [
|
|
26
26
|
/* @__PURE__ */ n("label", { children: "EVALUATION QUEUE" }),
|
|
27
27
|
/* @__PURE__ */ n(
|
|
28
28
|
O,
|
|
29
29
|
{
|
|
30
30
|
permissions: l,
|
|
31
31
|
onDelete: () => {
|
|
32
|
-
r(void 0), D(e.id, t).then(
|
|
32
|
+
r(void 0), D(e.id, t).then(s).catch(r);
|
|
33
33
|
},
|
|
34
|
-
onEdit:
|
|
35
|
-
onModifyAccess:
|
|
34
|
+
onEdit: m,
|
|
35
|
+
onModifyAccess: h
|
|
36
36
|
}
|
|
37
37
|
)
|
|
38
38
|
] }),
|
|
@@ -47,19 +47,19 @@ function q({
|
|
|
47
47
|
/* @__PURE__ */ n("label", { children: "Instructions" }),
|
|
48
48
|
/* @__PURE__ */ n("p", { children: e.submissionInstructionsMessage }),
|
|
49
49
|
/* @__PURE__ */ n(
|
|
50
|
-
|
|
50
|
+
A,
|
|
51
51
|
{
|
|
52
52
|
userId: e.ownerId,
|
|
53
53
|
date: new Date(e.createdOn)
|
|
54
54
|
}
|
|
55
55
|
),
|
|
56
56
|
l?.canSubmit && /* @__PURE__ */ n(
|
|
57
|
-
|
|
57
|
+
S,
|
|
58
58
|
{
|
|
59
59
|
className: "submit-button",
|
|
60
60
|
color: "primary",
|
|
61
61
|
variant: "contained",
|
|
62
|
-
onClick:
|
|
62
|
+
onClick: u,
|
|
63
63
|
children: "Submit"
|
|
64
64
|
}
|
|
65
65
|
)
|
|
@@ -68,36 +68,30 @@ function q({
|
|
|
68
68
|
}
|
|
69
69
|
function O({
|
|
70
70
|
permissions: e,
|
|
71
|
-
onEdit:
|
|
72
|
-
onModifyAccess:
|
|
73
|
-
onDelete:
|
|
71
|
+
onEdit: m,
|
|
72
|
+
onModifyAccess: h,
|
|
73
|
+
onDelete: u
|
|
74
74
|
}) {
|
|
75
|
-
const [
|
|
75
|
+
const [s, t] = d(!1), [i, r] = d(null), l = !!i, f = (a) => {
|
|
76
76
|
r(a.currentTarget);
|
|
77
77
|
}, c = () => {
|
|
78
78
|
r(null);
|
|
79
79
|
};
|
|
80
80
|
return e.canEdit || e.canChangePermissions || e.canDelete ? /* @__PURE__ */ o(C, { children: [
|
|
81
81
|
e?.canDelete && /* @__PURE__ */ n(
|
|
82
|
-
|
|
82
|
+
M,
|
|
83
83
|
{
|
|
84
|
-
|
|
85
|
-
content: "Are you sure you want to delete the Evaluation Queue?",
|
|
86
|
-
open: h,
|
|
87
|
-
confirmButtonText: "Delete",
|
|
84
|
+
open: s,
|
|
88
85
|
onConfirm: () => {
|
|
89
|
-
|
|
86
|
+
u(), t(!1);
|
|
90
87
|
},
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
},
|
|
95
|
-
confirmButtonColor: "error"
|
|
96
|
-
}
|
|
88
|
+
onCancel: () => t(!1)
|
|
89
|
+
},
|
|
90
|
+
String(s)
|
|
97
91
|
),
|
|
98
|
-
/* @__PURE__ */ n(
|
|
92
|
+
/* @__PURE__ */ n(k, { onClick: f, "aria-label": "Options", children: /* @__PURE__ */ n(P, { icon: "verticalEllipsis", wrap: !1 }) }),
|
|
99
93
|
/* @__PURE__ */ o(
|
|
100
|
-
|
|
94
|
+
w,
|
|
101
95
|
{
|
|
102
96
|
anchorEl: i,
|
|
103
97
|
open: l,
|
|
@@ -109,7 +103,7 @@ function O({
|
|
|
109
103
|
{
|
|
110
104
|
role: "menuitem",
|
|
111
105
|
onClick: () => {
|
|
112
|
-
c(),
|
|
106
|
+
c(), m();
|
|
113
107
|
},
|
|
114
108
|
children: "Edit"
|
|
115
109
|
}
|
|
@@ -119,12 +113,12 @@ function O({
|
|
|
119
113
|
{
|
|
120
114
|
role: "menuitem",
|
|
121
115
|
onClick: () => {
|
|
122
|
-
c(),
|
|
116
|
+
c(), h();
|
|
123
117
|
},
|
|
124
118
|
children: "Modify Access"
|
|
125
119
|
}
|
|
126
120
|
),
|
|
127
|
-
e.canDelete && /* @__PURE__ */ n(
|
|
121
|
+
e.canDelete && /* @__PURE__ */ n(v, {}),
|
|
128
122
|
e.canDelete && /* @__PURE__ */ n(
|
|
129
123
|
p,
|
|
130
124
|
{
|