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,49 +1,50 @@
|
|
|
1
1
|
import { jsx as t, jsxs as h } from "react/jsx-runtime";
|
|
2
|
-
import { updateEvaluationRound as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
/* @__PURE__ */ t(
|
|
2
|
+
import { updateEvaluationRound as Q, createEvaluationRound as V, deleteEvaluationRound as X } from "../../synapse-client/SynapseClient.js";
|
|
3
|
+
import { useGlobalIsEditingContext as Z } from "../../utils/context/GlobalIsEditingContext.js";
|
|
4
|
+
import { useSynapseContext as _ } from "../../utils/context/SynapseContext.js";
|
|
5
|
+
import { useListState as ee } from "../../utils/hooks/useListState.js";
|
|
6
|
+
import { Card as te, CardContent as re, Box as u, Grid as b, TextField as se, Button as N, Alert as ie } from "@mui/material";
|
|
7
|
+
import c from "dayjs";
|
|
8
|
+
import ne from "dayjs/plugin/isSameOrAfter";
|
|
9
|
+
import oe from "dayjs/plugin/utc";
|
|
10
|
+
import { upperFirst as ae } from "lodash-es";
|
|
11
|
+
import { useState as l, useEffect as A } from "react";
|
|
12
|
+
import O from "../DateTimePicker/DateTimePicker.js";
|
|
13
|
+
import { ErrorBanner as de } from "../error/ErrorBanner.js";
|
|
14
|
+
import le from "../IconSvg/IconSvg.js";
|
|
15
|
+
import { EvaluationRoundEditorDropdown as ce } from "./EvaluationRoundEditorDropdown.js";
|
|
16
|
+
import { convertEvaluationRoundToInput as me } from "./input_models/models.js";
|
|
17
|
+
import { EvaluationRoundLimitOptionsList as ue } from "./round_limits/EvaluationRoundLimitOptionsList.js";
|
|
18
|
+
c.extend(oe);
|
|
19
|
+
c.extend(ne);
|
|
20
|
+
const he = (e) => {
|
|
21
|
+
const o = e.startOf("day");
|
|
22
|
+
return (n) => n.isSameOrAfter(o);
|
|
23
|
+
}, B = (e, o) => {
|
|
24
|
+
let n, i, a;
|
|
25
|
+
const d = c();
|
|
26
|
+
return d.isSameOrAfter(e) ? d.isBefore(o) ? (n = "status-in-progress", i = { icon: "sync" }, a = "IN PROGRESS") : (n = "status-completed", i = { icon: "clipboardCheck" }, a = "COMPLETED") : (n = "status-not-yet-started", i = void 0, a = "NOT YET STARTED"), /* @__PURE__ */ t("div", { className: n, children: /* @__PURE__ */ h("div", { className: "status", children: [
|
|
27
|
+
i && /* @__PURE__ */ t(le, { ...i }),
|
|
28
|
+
/* @__PURE__ */ t("span", { children: a })
|
|
28
29
|
] }) });
|
|
29
|
-
},
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
32
|
-
const
|
|
33
|
-
if (Number.isNaN(
|
|
30
|
+
}, P = (e, o, n, i, a) => {
|
|
31
|
+
const d = [];
|
|
32
|
+
if (i) {
|
|
33
|
+
const s = Number(i);
|
|
34
|
+
if (Number.isNaN(s))
|
|
34
35
|
throw TypeError("Total Submission is not an integer");
|
|
35
|
-
|
|
36
|
+
d.push({
|
|
36
37
|
limitType: "TOTAL",
|
|
37
|
-
maximumSubmissions:
|
|
38
|
+
maximumSubmissions: s
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
|
-
return
|
|
41
|
-
if (
|
|
42
|
-
const m = Number(
|
|
41
|
+
return a.forEach((s) => {
|
|
42
|
+
if (s.maxSubmissionString) {
|
|
43
|
+
const m = Number(s.maxSubmissionString);
|
|
43
44
|
if (Number.isNaN(m))
|
|
44
|
-
throw TypeError(
|
|
45
|
-
|
|
46
|
-
limitType:
|
|
45
|
+
throw TypeError(s.type + " Limit is not an integer");
|
|
46
|
+
d.push({
|
|
47
|
+
limitType: s.type,
|
|
47
48
|
maximumSubmissions: m
|
|
48
49
|
});
|
|
49
50
|
}
|
|
@@ -51,116 +52,122 @@ const ae = (e) => {
|
|
|
51
52
|
id: e.id,
|
|
52
53
|
etag: e.etag,
|
|
53
54
|
evaluationId: e.evaluationId,
|
|
54
|
-
roundStart:
|
|
55
|
-
roundEnd:
|
|
56
|
-
limits:
|
|
55
|
+
roundStart: c.utc(o).toJSON(),
|
|
56
|
+
roundEnd: c.utc(n).toJSON(),
|
|
57
|
+
limits: d
|
|
57
58
|
};
|
|
58
59
|
};
|
|
59
|
-
function
|
|
60
|
-
return
|
|
60
|
+
function w(e, o) {
|
|
61
|
+
return o == null ? null : o === "disablePast" ? `${ae(e)} date cannot be in the past` : "Invalid date";
|
|
61
62
|
}
|
|
62
|
-
function
|
|
63
|
+
function Be({
|
|
63
64
|
evaluationRoundInput: e,
|
|
64
|
-
onSave:
|
|
65
|
-
onDelete:
|
|
65
|
+
onSave: o,
|
|
66
|
+
onDelete: n
|
|
66
67
|
}) {
|
|
67
|
-
const { accessToken:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}, [
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
e.
|
|
75
|
-
), [
|
|
68
|
+
const { accessToken: i } = _(), { setIsEditing: a } = Z(), [d, s] = l(!1), [m, f] = l(), [k, S] = l(!1);
|
|
69
|
+
A(() => (a(d), () => {
|
|
70
|
+
a(!1);
|
|
71
|
+
}), [d, a]), A(() => {
|
|
72
|
+
m && S(!1);
|
|
73
|
+
}, [m]);
|
|
74
|
+
const [T, F] = l(
|
|
75
|
+
e.roundStart ? c(e.roundStart) : null
|
|
76
|
+
), [E, M] = l(
|
|
77
|
+
e.roundEnd ? c(e.roundEnd) : null
|
|
78
|
+
), [y, j] = l(
|
|
76
79
|
e.totalSubmissionLimit
|
|
77
|
-
), [
|
|
78
|
-
list:
|
|
79
|
-
handleListRemove:
|
|
80
|
-
handleListChange:
|
|
81
|
-
appendToList:
|
|
82
|
-
} =
|
|
83
|
-
const
|
|
80
|
+
), [g, L] = l(!1), [R, U] = l(null), [z, G] = l(null), {
|
|
81
|
+
list: v,
|
|
82
|
+
handleListRemove: J,
|
|
83
|
+
handleListChange: H,
|
|
84
|
+
appendToList: I
|
|
85
|
+
} = ee(e.otherLimits), K = (...r) => (s(!0), H(...r)), W = (...r) => (s(!0), I(...r)), Y = (r) => {
|
|
86
|
+
const p = J(r);
|
|
84
87
|
return () => {
|
|
85
|
-
|
|
88
|
+
s(!0), p(), v.length === 1 && L(!1);
|
|
86
89
|
};
|
|
87
|
-
},
|
|
88
|
-
|
|
90
|
+
}, C = () => {
|
|
91
|
+
S(!1);
|
|
89
92
|
let r;
|
|
90
93
|
try {
|
|
91
|
-
r =
|
|
94
|
+
r = P(
|
|
92
95
|
e,
|
|
93
|
-
x,
|
|
94
|
-
S,
|
|
95
96
|
T,
|
|
96
|
-
|
|
97
|
+
E,
|
|
98
|
+
y,
|
|
99
|
+
v
|
|
97
100
|
);
|
|
98
|
-
} catch (
|
|
99
|
-
|
|
101
|
+
} catch (p) {
|
|
102
|
+
f(p);
|
|
100
103
|
}
|
|
101
|
-
r && (r.id ?
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
+
r && (r.id ? Q(r, i) : V(r, i)).then((x) => {
|
|
105
|
+
const q = me(
|
|
106
|
+
x,
|
|
104
107
|
e.reactListKey
|
|
105
108
|
);
|
|
106
|
-
|
|
107
|
-
}).catch((
|
|
108
|
-
},
|
|
109
|
-
e.id ?
|
|
109
|
+
f(void 0), S(!0), s(!1), o(q);
|
|
110
|
+
}).catch((x) => f(x));
|
|
111
|
+
}, $ = () => {
|
|
112
|
+
e.id ? X(
|
|
110
113
|
e.evaluationId,
|
|
111
114
|
e.id,
|
|
112
|
-
|
|
113
|
-
).then(() =>
|
|
114
|
-
},
|
|
115
|
+
i
|
|
116
|
+
).then(() => n()).catch((r) => f(r)) : n();
|
|
117
|
+
}, D = c().isSameOrAfter(
|
|
115
118
|
e.roundStart
|
|
116
119
|
);
|
|
117
|
-
return /* @__PURE__ */ t("div", { className: "evaluation-round-editor", children: /* @__PURE__ */ t(
|
|
120
|
+
return /* @__PURE__ */ t("div", { className: "evaluation-round-editor", children: /* @__PURE__ */ t(te, { children: /* @__PURE__ */ t(re, { sx: { p: 3 }, children: /* @__PURE__ */ h("form", { "aria-label": "Evaluation Round Form", children: [
|
|
118
121
|
/* @__PURE__ */ h(u, { sx: { display: "flex", justifyContent: "space-between" }, children: [
|
|
119
122
|
/* @__PURE__ */ h("h5", { children: [
|
|
120
123
|
"ROUND STATUS",
|
|
121
124
|
e.id && " (" + e.id + ")"
|
|
122
125
|
] }),
|
|
123
126
|
/* @__PURE__ */ t(
|
|
124
|
-
|
|
127
|
+
ce,
|
|
125
128
|
{
|
|
126
|
-
onDelete:
|
|
127
|
-
onSave:
|
|
129
|
+
onDelete: $,
|
|
130
|
+
onSave: C
|
|
128
131
|
}
|
|
129
132
|
)
|
|
130
133
|
] }),
|
|
131
|
-
/* @__PURE__ */ t(u, { className: "round-status", sx: { mb: 2 }, children:
|
|
134
|
+
/* @__PURE__ */ t(u, { className: "round-status", sx: { mb: 2 }, children: B(
|
|
132
135
|
e.roundStart,
|
|
133
136
|
e.roundEnd
|
|
134
137
|
) }),
|
|
135
138
|
/* @__PURE__ */ t("h5", { children: "DURATION" }),
|
|
136
|
-
/* @__PURE__ */ h(
|
|
137
|
-
/* @__PURE__ */ t(
|
|
138
|
-
|
|
139
|
+
/* @__PURE__ */ h(b, { container: !0, children: [
|
|
140
|
+
/* @__PURE__ */ t(b, { size: 6, children: /* @__PURE__ */ t(
|
|
141
|
+
O,
|
|
139
142
|
{
|
|
140
143
|
label: "Round Start",
|
|
141
|
-
value:
|
|
142
|
-
onChange:
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
value: T,
|
|
145
|
+
onChange: (r) => {
|
|
146
|
+
F(r), s(!0);
|
|
147
|
+
},
|
|
148
|
+
onError: (r) => U(r),
|
|
149
|
+
disabled: D,
|
|
150
|
+
disablePast: !D,
|
|
146
151
|
slotProps: {
|
|
147
152
|
textField: {
|
|
148
|
-
helperText:
|
|
153
|
+
helperText: w("start", R)
|
|
149
154
|
}
|
|
150
155
|
}
|
|
151
156
|
}
|
|
152
157
|
) }),
|
|
153
|
-
/* @__PURE__ */ t(
|
|
154
|
-
|
|
158
|
+
/* @__PURE__ */ t(b, { size: 6, children: /* @__PURE__ */ t(
|
|
159
|
+
O,
|
|
155
160
|
{
|
|
156
161
|
label: "Round End",
|
|
157
|
-
value:
|
|
158
|
-
onChange:
|
|
159
|
-
|
|
160
|
-
|
|
162
|
+
value: E,
|
|
163
|
+
onChange: (r) => {
|
|
164
|
+
M(r), s(!0);
|
|
165
|
+
},
|
|
166
|
+
onError: (r) => G(r),
|
|
167
|
+
disablePast: !c(E).isSame(e.roundEnd),
|
|
161
168
|
slotProps: {
|
|
162
169
|
textField: {
|
|
163
|
-
helperText:
|
|
170
|
+
helperText: w("end", z)
|
|
164
171
|
}
|
|
165
172
|
}
|
|
166
173
|
}
|
|
@@ -168,12 +175,14 @@ function Le({
|
|
|
168
175
|
] }),
|
|
169
176
|
/* @__PURE__ */ t("h5", { style: { marginTop: "20px" }, children: "SUBMISSION LIMITS" }),
|
|
170
177
|
/* @__PURE__ */ t(
|
|
171
|
-
|
|
178
|
+
se,
|
|
172
179
|
{
|
|
173
180
|
fullWidth: !0,
|
|
174
181
|
label: "Total Submissions / Round",
|
|
175
|
-
value:
|
|
176
|
-
onChange: (r) =>
|
|
182
|
+
value: y,
|
|
183
|
+
onChange: (r) => {
|
|
184
|
+
j(r.target.value), s(!0);
|
|
185
|
+
},
|
|
177
186
|
autoComplete: "new-password",
|
|
178
187
|
slotProps: {
|
|
179
188
|
htmlInput: {
|
|
@@ -188,26 +197,26 @@ function Le({
|
|
|
188
197
|
variant: "outlined",
|
|
189
198
|
color: "primary",
|
|
190
199
|
size: "small",
|
|
191
|
-
onClick: () =>
|
|
200
|
+
onClick: () => L(!g),
|
|
192
201
|
children: "Advanced Limits"
|
|
193
202
|
}
|
|
194
203
|
) }),
|
|
195
|
-
|
|
196
|
-
|
|
204
|
+
g && /* @__PURE__ */ t(
|
|
205
|
+
ue,
|
|
197
206
|
{
|
|
198
|
-
limitInputs:
|
|
199
|
-
handleChange:
|
|
200
|
-
handleDeleteLimit:
|
|
201
|
-
onAddNewLimit:
|
|
207
|
+
limitInputs: v,
|
|
208
|
+
handleChange: K,
|
|
209
|
+
handleDeleteLimit: Y,
|
|
210
|
+
onAddNewLimit: W
|
|
202
211
|
}
|
|
203
212
|
),
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
213
|
+
m && /* @__PURE__ */ t(u, { sx: { my: 3 }, children: /* @__PURE__ */ t(de, { error: m }) }),
|
|
214
|
+
k && /* @__PURE__ */ t(u, { sx: { my: 3 }, children: /* @__PURE__ */ t(
|
|
215
|
+
ie,
|
|
207
216
|
{
|
|
208
217
|
className: "save-success-alert",
|
|
209
218
|
severity: "success",
|
|
210
|
-
onClose: () =>
|
|
219
|
+
onClose: () => S(!1),
|
|
211
220
|
sx: { mb: "20px" },
|
|
212
221
|
children: "Successfully saved."
|
|
213
222
|
}
|
|
@@ -217,19 +226,19 @@ function Le({
|
|
|
217
226
|
{
|
|
218
227
|
variant: "contained",
|
|
219
228
|
color: "primary",
|
|
220
|
-
onClick:
|
|
229
|
+
onClick: C,
|
|
221
230
|
children: "Save"
|
|
222
231
|
}
|
|
223
232
|
) })
|
|
224
233
|
] }) }) }) });
|
|
225
234
|
}
|
|
226
|
-
const
|
|
227
|
-
disallowCalendarDateBefore:
|
|
228
|
-
determineRoundStatus:
|
|
229
|
-
convertInputsToEvaluationRound:
|
|
235
|
+
const Pe = {
|
|
236
|
+
disallowCalendarDateBefore: he,
|
|
237
|
+
determineRoundStatus: B,
|
|
238
|
+
convertInputsToEvaluationRound: P
|
|
230
239
|
};
|
|
231
240
|
export {
|
|
232
|
-
|
|
233
|
-
|
|
241
|
+
Be as EvaluationRoundEditor,
|
|
242
|
+
Pe as HelpersToTest
|
|
234
243
|
};
|
|
235
244
|
//# sourceMappingURL=EvaluationRoundEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvaluationRoundEditor.js","sources":["../../../src/components/Evaluation/EvaluationRoundEditor.tsx"],"sourcesContent":["import {\n createEvaluationRound,\n deleteEvaluationRound,\n updateEvaluationRound,\n} from '@/synapse-client/SynapseClient'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { useListState } from '@/utils/hooks/useListState'\nimport {\n Alert,\n Box,\n Button,\n Card,\n CardContent,\n Grid as Grid2,\n TextField,\n} from '@mui/material'\nimport { DateTimeValidationError } from '@mui/x-date-pickers'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n EvaluationRound,\n EvaluationRoundLimit,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs, { Dayjs } from 'dayjs'\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter'\nimport utc from 'dayjs/plugin/utc'\nimport { upperFirst } from 'lodash-es'\nimport { useEffect, useState } from 'react'\nimport DateTimePicker from '../DateTimePicker/DateTimePicker'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport IconSvg, { IconSvgProps } from '../IconSvg/IconSvg'\nimport { EvaluationRoundEditorDropdown } from './EvaluationRoundEditorDropdown'\nimport {\n convertEvaluationRoundToInput,\n EvaluationRoundInput,\n EvaluationRoundLimitInput,\n} from './input_models/models'\nimport { EvaluationRoundLimitOptionsList } from './round_limits/EvaluationRoundLimitOptionsList'\n\ndayjs.extend(utc)\ndayjs.extend(isSameOrAfter)\n\nexport type EvaluationRoundEditorProps = {\n evaluationRoundInput: EvaluationRoundInput\n onDelete: () => void\n onSave: (evaluationRound: EvaluationRoundInput) => void\n}\n\nconst disallowCalendarDateBefore = (date: Dayjs) => {\n const startOfDay = date.startOf('day')\n return (currentDate: Dayjs) => currentDate.isSameOrAfter(startOfDay)\n}\n\nconst determineRoundStatus = (\n roundStart: Dayjs | string,\n roundEnd: Dayjs | string,\n) => {\n let className: string\n let iconProps: IconSvgProps | undefined\n let status: string\n const now = dayjs()\n // based off of start/end datetime from props so that users making\n // unsaved changes to the start/end dates do not change the status\n if (now.isSameOrAfter(roundStart)) {\n if (now.isBefore(roundEnd)) {\n className = 'status-in-progress'\n iconProps = { icon: 'sync' }\n status = 'IN PROGRESS'\n } else {\n className = 'status-completed'\n iconProps = { icon: 'clipboardCheck' }\n status = 'COMPLETED'\n }\n } else {\n className = 'status-not-yet-started'\n iconProps = undefined\n status = 'NOT YET STARTED'\n }\n\n return (\n <div className={className}>\n <div className=\"status\">\n {iconProps && <IconSvg {...iconProps} />}\n <span>{status}</span>\n </div>\n </div>\n )\n}\n\nconst convertInputsToEvaluationRound = (\n evaluationRoundInputProp: EvaluationRoundInput,\n startDate: string | Dayjs | null,\n endDate: string | Dayjs | null,\n totalSubmissionLimit: string,\n advancedLimits: EvaluationRoundLimitInput[],\n): EvaluationRound => {\n const limits: EvaluationRoundLimit[] = []\n if (totalSubmissionLimit) {\n const totalSubmissionLimitInt = Number(totalSubmissionLimit)\n if (Number.isNaN(totalSubmissionLimitInt)) {\n throw TypeError('Total Submission is not an integer')\n }\n limits.push({\n limitType: 'TOTAL',\n maximumSubmissions: totalSubmissionLimitInt,\n })\n }\n advancedLimits.forEach(limitInput => {\n if (limitInput.maxSubmissionString) {\n const maxSubmissionInt = Number(limitInput.maxSubmissionString)\n if (Number.isNaN(maxSubmissionInt)) {\n throw TypeError(limitInput.type + ' Limit is not an integer')\n }\n limits.push({\n limitType: limitInput.type,\n maximumSubmissions: maxSubmissionInt,\n })\n }\n })\n\n return {\n id: evaluationRoundInputProp.id,\n etag: evaluationRoundInputProp.etag,\n evaluationId: evaluationRoundInputProp.evaluationId,\n roundStart: dayjs.utc(startDate).toJSON(),\n roundEnd: dayjs.utc(endDate).toJSON(),\n limits: limits,\n }\n}\n\nfunction getDateErrorMessage(\n dateField: 'start' | 'end',\n error: DateTimeValidationError | null,\n): string | null {\n if (error == null) return null\n switch (error) {\n case 'disablePast':\n return `${upperFirst(dateField)} date cannot be in the past`\n case 'invalidDate':\n default:\n return 'Invalid date'\n }\n}\n\nexport function EvaluationRoundEditor({\n evaluationRoundInput,\n onSave,\n onDelete,\n}: EvaluationRoundEditorProps) {\n const { accessToken } = useSynapseContext()\n const [error, setError] = useState<string | SynapseClientError | undefined>()\n const [showSaveSuccess, setShowSaveSuccess] = useState<boolean>(false)\n\n useEffect(() => {\n if (error) {\n setShowSaveSuccess(false)\n }\n }, [error])\n\n const [startDate, setStartDate] = useState<Dayjs | null>(\n evaluationRoundInput.roundStart\n ? dayjs(evaluationRoundInput.roundStart)\n : null,\n )\n const [endDate, setEndDate] = useState<Dayjs | null>(\n evaluationRoundInput.roundEnd ? dayjs(evaluationRoundInput.roundEnd) : null,\n )\n\n const [totalSubmissionLimit, setTotalSubmissionLimit] = useState<string>(\n evaluationRoundInput.totalSubmissionLimit,\n )\n\n const [advancedMode, setAdvancedMode] = useState<boolean>(false)\n\n const [startDateError, setStartDateError] =\n useState<DateTimeValidationError | null>(null)\n const [endDateError, setEndDateError] =\n useState<DateTimeValidationError | null>(null)\n\n const {\n list: advancedLimits,\n handleListRemove,\n handleListChange: handleAdvancedLimitsChange,\n appendToList: addAdvancedLimit,\n } = useListState<EvaluationRoundLimitInput>(evaluationRoundInput.otherLimits)\n\n // if we remove the last advanced limit, hide the advanced limits\n const handleAdvancedLimitsRemove = (index: number) => {\n const generatedRemoveFunc = handleListRemove(index)\n return () => {\n //we are deleting the last advanced limit\n\n generatedRemoveFunc()\n if (advancedLimits.length === 1) {\n // NOTE: we dont check for length == 0 because we don't modify the original list,\n // instead the generated function will setState() with a NEW empty list\n // so the original list we reference still has 1 element\n setAdvancedMode(false)\n }\n }\n }\n\n const onSaveButtonClick = () => {\n setShowSaveSuccess(false)\n let evaluationRound\n try {\n evaluationRound = convertInputsToEvaluationRound(\n evaluationRoundInput,\n startDate,\n endDate,\n totalSubmissionLimit,\n advancedLimits,\n )\n } catch (err) {\n // error thrown if number\n setError(err)\n }\n if (evaluationRound) {\n const promise = evaluationRound.id\n ? updateEvaluationRound(evaluationRound, accessToken)\n : createEvaluationRound(evaluationRound, accessToken)\n\n promise\n .then(createdOrUpdatedRound => {\n const newInput = convertEvaluationRoundToInput(\n createdOrUpdatedRound,\n evaluationRoundInput.reactListKey,\n )\n //clear out previous error if any\n setError(undefined)\n setShowSaveSuccess(true)\n onSave(newInput)\n })\n .catch(error => setError(error))\n }\n }\n\n const onDeleteButtonClick = () => {\n if (evaluationRoundInput.id) {\n deleteEvaluationRound(\n evaluationRoundInput.evaluationId,\n evaluationRoundInput.id,\n accessToken,\n )\n .then(() => onDelete())\n .catch(error => setError(error))\n } else {\n onDelete()\n }\n }\n\n const disableStartInput = dayjs().isSameOrAfter(\n evaluationRoundInput.roundStart,\n )\n\n return (\n <div className=\"evaluation-round-editor\">\n <Card>\n <CardContent sx={{ p: 3 }}>\n <form aria-label={'Evaluation Round Form'}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <h5>\n ROUND STATUS\n {evaluationRoundInput.id &&\n ' (' + evaluationRoundInput.id + ')'}\n </h5>\n <EvaluationRoundEditorDropdown\n onDelete={onDeleteButtonClick}\n onSave={onSaveButtonClick}\n />\n </Box>\n <Box className=\"round-status\" sx={{ mb: 2 }}>\n {determineRoundStatus(\n evaluationRoundInput.roundStart,\n evaluationRoundInput.roundEnd,\n )}\n </Box>\n <h5>DURATION</h5>\n\n <Grid2 container>\n <Grid2 size={6}>\n <DateTimePicker\n label=\"Round Start\"\n value={startDate}\n onChange={setStartDate}\n onError={error => setStartDateError(error)}\n disabled={disableStartInput}\n // Don't allow the value to be a past date only if the input is not disabled.\n // i.e. allow a past date if the round has already started\n disablePast={!disableStartInput}\n slotProps={{\n textField: {\n helperText: getDateErrorMessage('start', startDateError),\n },\n }}\n />\n </Grid2>\n <Grid2 size={6}>\n <DateTimePicker\n label=\"Round End\"\n value={endDate}\n onChange={setEndDate}\n onError={error => setEndDateError(error)}\n disablePast={\n !dayjs(endDate).isSame(evaluationRoundInput.roundEnd)\n }\n slotProps={{\n textField: {\n helperText: getDateErrorMessage('end', endDateError),\n },\n }}\n />\n </Grid2>\n </Grid2>\n <h5 style={{ marginTop: '20px' }}>SUBMISSION LIMITS</h5>\n <TextField\n fullWidth\n label=\"Total Submissions / Round\"\n value={totalSubmissionLimit}\n onChange={event => setTotalSubmissionLimit(event.target.value)}\n // Chrome for some reason decides to autofill this input box with email address, so we must disable autofill\n // this is a hacky, but consistent way to disable autofill because Chrome does not respect the spec :(\n // https://bugs.chromium.org/p/chromium/issues/detail?id=914451\n autoComplete=\"new-password\"\n slotProps={{\n htmlInput: {\n pattern: '[0-9]*',\n },\n }}\n />\n <Box sx={{ my: 2 }}>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n size={'small'}\n onClick={() => setAdvancedMode(!advancedMode)}\n >\n Advanced Limits\n </Button>\n </Box>\n {advancedMode && (\n <EvaluationRoundLimitOptionsList\n limitInputs={advancedLimits}\n handleChange={handleAdvancedLimitsChange}\n handleDeleteLimit={handleAdvancedLimitsRemove}\n onAddNewLimit={addAdvancedLimit}\n />\n )}\n\n {error && (\n <Box sx={{ my: 3 }}>\n <ErrorBanner error={error} />\n </Box>\n )}\n\n {showSaveSuccess && (\n <Box sx={{ my: 3 }}>\n <Alert\n className=\"save-success-alert\"\n severity=\"success\"\n onClose={() => setShowSaveSuccess(false)}\n sx={{ mb: '20px' }}\n >\n Successfully saved.\n </Alert>\n </Box>\n )}\n\n <Box sx={{ mt: 3, textAlign: 'right' }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onSaveButtonClick}\n >\n Save\n </Button>\n </Box>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n}\n\nexport const HelpersToTest = {\n disallowCalendarDateBefore,\n determineRoundStatus,\n convertInputsToEvaluationRound,\n}\n"],"names":["dayjs","utc","isSameOrAfter","disallowCalendarDateBefore","date","startOfDay","currentDate","determineRoundStatus","roundStart","roundEnd","className","iconProps","status","now","jsxs","jsx","IconSvg","convertInputsToEvaluationRound","evaluationRoundInputProp","startDate","endDate","totalSubmissionLimit","advancedLimits","limits","totalSubmissionLimitInt","limitInput","maxSubmissionInt","getDateErrorMessage","dateField","error","upperFirst","EvaluationRoundEditor","evaluationRoundInput","onSave","onDelete","accessToken","useSynapseContext","setError","useState","showSaveSuccess","setShowSaveSuccess","useEffect","setStartDate","setEndDate","setTotalSubmissionLimit","advancedMode","setAdvancedMode","startDateError","setStartDateError","endDateError","setEndDateError","handleListRemove","handleAdvancedLimitsChange","addAdvancedLimit","useListState","handleAdvancedLimitsRemove","index","generatedRemoveFunc","onSaveButtonClick","evaluationRound","err","updateEvaluationRound","createEvaluationRound","createdOrUpdatedRound","newInput","convertEvaluationRoundToInput","onDeleteButtonClick","deleteEvaluationRound","disableStartInput","Card","CardContent","Box","EvaluationRoundEditorDropdown","Grid2","DateTimePicker","TextField","event","Button","EvaluationRoundLimitOptionsList","ErrorBanner","Alert","HelpersToTest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EvaluationRoundEditor.js","sources":["../../../src/components/Evaluation/EvaluationRoundEditor.tsx"],"sourcesContent":["import {\n createEvaluationRound,\n deleteEvaluationRound,\n updateEvaluationRound,\n} from '@/synapse-client/SynapseClient'\nimport { useGlobalIsEditingContext } from '@/utils/context/GlobalIsEditingContext'\nimport { useSynapseContext } from '@/utils/context/SynapseContext'\nimport { useListState } from '@/utils/hooks/useListState'\nimport {\n Alert,\n Box,\n Button,\n Card,\n CardContent,\n Grid as Grid2,\n TextField,\n} from '@mui/material'\nimport { DateTimeValidationError } from '@mui/x-date-pickers'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n EvaluationRound,\n EvaluationRoundLimit,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs, { Dayjs } from 'dayjs'\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter'\nimport utc from 'dayjs/plugin/utc'\nimport { upperFirst } from 'lodash-es'\nimport { useEffect, useState } from 'react'\nimport DateTimePicker from '../DateTimePicker/DateTimePicker'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport IconSvg, { IconSvgProps } from '../IconSvg/IconSvg'\nimport { EvaluationRoundEditorDropdown } from './EvaluationRoundEditorDropdown'\nimport {\n convertEvaluationRoundToInput,\n EvaluationRoundInput,\n EvaluationRoundLimitInput,\n} from './input_models/models'\nimport { EvaluationRoundLimitOptionsList } from './round_limits/EvaluationRoundLimitOptionsList'\n\ndayjs.extend(utc)\ndayjs.extend(isSameOrAfter)\n\nexport type EvaluationRoundEditorProps = {\n evaluationRoundInput: EvaluationRoundInput\n onDelete: () => void\n onSave: (evaluationRound: EvaluationRoundInput) => void\n}\n\nconst disallowCalendarDateBefore = (date: Dayjs) => {\n const startOfDay = date.startOf('day')\n return (currentDate: Dayjs) => currentDate.isSameOrAfter(startOfDay)\n}\n\nconst determineRoundStatus = (\n roundStart: Dayjs | string,\n roundEnd: Dayjs | string,\n) => {\n let className: string\n let iconProps: IconSvgProps | undefined\n let status: string\n const now = dayjs()\n // based off of start/end datetime from props so that users making\n // unsaved changes to the start/end dates do not change the status\n if (now.isSameOrAfter(roundStart)) {\n if (now.isBefore(roundEnd)) {\n className = 'status-in-progress'\n iconProps = { icon: 'sync' }\n status = 'IN PROGRESS'\n } else {\n className = 'status-completed'\n iconProps = { icon: 'clipboardCheck' }\n status = 'COMPLETED'\n }\n } else {\n className = 'status-not-yet-started'\n iconProps = undefined\n status = 'NOT YET STARTED'\n }\n\n return (\n <div className={className}>\n <div className=\"status\">\n {iconProps && <IconSvg {...iconProps} />}\n <span>{status}</span>\n </div>\n </div>\n )\n}\n\nconst convertInputsToEvaluationRound = (\n evaluationRoundInputProp: EvaluationRoundInput,\n startDate: string | Dayjs | null,\n endDate: string | Dayjs | null,\n totalSubmissionLimit: string,\n advancedLimits: EvaluationRoundLimitInput[],\n): EvaluationRound => {\n const limits: EvaluationRoundLimit[] = []\n if (totalSubmissionLimit) {\n const totalSubmissionLimitInt = Number(totalSubmissionLimit)\n if (Number.isNaN(totalSubmissionLimitInt)) {\n throw TypeError('Total Submission is not an integer')\n }\n limits.push({\n limitType: 'TOTAL',\n maximumSubmissions: totalSubmissionLimitInt,\n })\n }\n advancedLimits.forEach(limitInput => {\n if (limitInput.maxSubmissionString) {\n const maxSubmissionInt = Number(limitInput.maxSubmissionString)\n if (Number.isNaN(maxSubmissionInt)) {\n throw TypeError(limitInput.type + ' Limit is not an integer')\n }\n limits.push({\n limitType: limitInput.type,\n maximumSubmissions: maxSubmissionInt,\n })\n }\n })\n\n return {\n id: evaluationRoundInputProp.id,\n etag: evaluationRoundInputProp.etag,\n evaluationId: evaluationRoundInputProp.evaluationId,\n roundStart: dayjs.utc(startDate).toJSON(),\n roundEnd: dayjs.utc(endDate).toJSON(),\n limits: limits,\n }\n}\n\nfunction getDateErrorMessage(\n dateField: 'start' | 'end',\n error: DateTimeValidationError | null,\n): string | null {\n if (error == null) return null\n switch (error) {\n case 'disablePast':\n return `${upperFirst(dateField)} date cannot be in the past`\n case 'invalidDate':\n default:\n return 'Invalid date'\n }\n}\n\nexport function EvaluationRoundEditor({\n evaluationRoundInput,\n onSave,\n onDelete,\n}: EvaluationRoundEditorProps) {\n const { accessToken } = useSynapseContext()\n const { setIsEditing } = useGlobalIsEditingContext()\n const [isDirty, setIsDirty] = useState(false)\n const [error, setError] = useState<string | SynapseClientError | undefined>()\n const [showSaveSuccess, setShowSaveSuccess] = useState<boolean>(false)\n\n useEffect(() => {\n setIsEditing(isDirty)\n return () => {\n setIsEditing(false)\n }\n }, [isDirty, setIsEditing])\n\n useEffect(() => {\n if (error) {\n setShowSaveSuccess(false)\n }\n }, [error])\n\n const [startDate, setStartDate] = useState<Dayjs | null>(\n evaluationRoundInput.roundStart\n ? dayjs(evaluationRoundInput.roundStart)\n : null,\n )\n const [endDate, setEndDate] = useState<Dayjs | null>(\n evaluationRoundInput.roundEnd ? dayjs(evaluationRoundInput.roundEnd) : null,\n )\n\n const [totalSubmissionLimit, setTotalSubmissionLimit] = useState<string>(\n evaluationRoundInput.totalSubmissionLimit,\n )\n\n const [advancedMode, setAdvancedMode] = useState<boolean>(false)\n\n const [startDateError, setStartDateError] =\n useState<DateTimeValidationError | null>(null)\n const [endDateError, setEndDateError] =\n useState<DateTimeValidationError | null>(null)\n\n const {\n list: advancedLimits,\n handleListRemove,\n handleListChange: handleAdvancedLimitsChangeBase,\n appendToList: appendAdvancedLimit,\n } = useListState<EvaluationRoundLimitInput>(evaluationRoundInput.otherLimits)\n\n const handleAdvancedLimitsChange = (\n ...args: Parameters<typeof handleAdvancedLimitsChangeBase>\n ) => {\n setIsDirty(true)\n return handleAdvancedLimitsChangeBase(...args)\n }\n\n const addAdvancedLimit = (\n ...args: Parameters<typeof appendAdvancedLimit>\n ) => {\n setIsDirty(true)\n return appendAdvancedLimit(...args)\n }\n\n // if we remove the last advanced limit, hide the advanced limits\n const handleAdvancedLimitsRemove = (index: number) => {\n const generatedRemoveFunc = handleListRemove(index)\n return () => {\n //we are deleting the last advanced limit\n setIsDirty(true)\n generatedRemoveFunc()\n if (advancedLimits.length === 1) {\n // NOTE: we dont check for length == 0 because we don't modify the original list,\n // instead the generated function will setState() with a NEW empty list\n // so the original list we reference still has 1 element\n setAdvancedMode(false)\n }\n }\n }\n\n const onSaveButtonClick = () => {\n setShowSaveSuccess(false)\n let evaluationRound\n try {\n evaluationRound = convertInputsToEvaluationRound(\n evaluationRoundInput,\n startDate,\n endDate,\n totalSubmissionLimit,\n advancedLimits,\n )\n } catch (err) {\n // error thrown if number\n setError(err)\n }\n if (evaluationRound) {\n const promise = evaluationRound.id\n ? updateEvaluationRound(evaluationRound, accessToken)\n : createEvaluationRound(evaluationRound, accessToken)\n\n promise\n .then(createdOrUpdatedRound => {\n const newInput = convertEvaluationRoundToInput(\n createdOrUpdatedRound,\n evaluationRoundInput.reactListKey,\n )\n //clear out previous error if any\n setError(undefined)\n setShowSaveSuccess(true)\n setIsDirty(false)\n onSave(newInput)\n })\n .catch(error => setError(error))\n }\n }\n\n const onDeleteButtonClick = () => {\n if (evaluationRoundInput.id) {\n deleteEvaluationRound(\n evaluationRoundInput.evaluationId,\n evaluationRoundInput.id,\n accessToken,\n )\n .then(() => onDelete())\n .catch(error => setError(error))\n } else {\n onDelete()\n }\n }\n\n const disableStartInput = dayjs().isSameOrAfter(\n evaluationRoundInput.roundStart,\n )\n\n return (\n <div className=\"evaluation-round-editor\">\n <Card>\n <CardContent sx={{ p: 3 }}>\n <form aria-label={'Evaluation Round Form'}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>\n <h5>\n ROUND STATUS\n {evaluationRoundInput.id &&\n ' (' + evaluationRoundInput.id + ')'}\n </h5>\n <EvaluationRoundEditorDropdown\n onDelete={onDeleteButtonClick}\n onSave={onSaveButtonClick}\n />\n </Box>\n <Box className=\"round-status\" sx={{ mb: 2 }}>\n {determineRoundStatus(\n evaluationRoundInput.roundStart,\n evaluationRoundInput.roundEnd,\n )}\n </Box>\n <h5>DURATION</h5>\n\n <Grid2 container>\n <Grid2 size={6}>\n <DateTimePicker\n label=\"Round Start\"\n value={startDate}\n onChange={date => {\n setStartDate(date)\n setIsDirty(true)\n }}\n onError={error => setStartDateError(error)}\n disabled={disableStartInput}\n // Don't allow the value to be a past date only if the input is not disabled.\n // i.e. allow a past date if the round has already started\n disablePast={!disableStartInput}\n slotProps={{\n textField: {\n helperText: getDateErrorMessage('start', startDateError),\n },\n }}\n />\n </Grid2>\n <Grid2 size={6}>\n <DateTimePicker\n label=\"Round End\"\n value={endDate}\n onChange={date => {\n setEndDate(date)\n setIsDirty(true)\n }}\n onError={error => setEndDateError(error)}\n disablePast={\n !dayjs(endDate).isSame(evaluationRoundInput.roundEnd)\n }\n slotProps={{\n textField: {\n helperText: getDateErrorMessage('end', endDateError),\n },\n }}\n />\n </Grid2>\n </Grid2>\n <h5 style={{ marginTop: '20px' }}>SUBMISSION LIMITS</h5>\n <TextField\n fullWidth\n label=\"Total Submissions / Round\"\n value={totalSubmissionLimit}\n onChange={event => {\n setTotalSubmissionLimit(event.target.value)\n setIsDirty(true)\n }}\n // Chrome for some reason decides to autofill this input box with email address, so we must disable autofill\n // this is a hacky, but consistent way to disable autofill because Chrome does not respect the spec :(\n // https://bugs.chromium.org/p/chromium/issues/detail?id=914451\n autoComplete=\"new-password\"\n slotProps={{\n htmlInput: {\n pattern: '[0-9]*',\n },\n }}\n />\n <Box sx={{ my: 2 }}>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n size={'small'}\n onClick={() => setAdvancedMode(!advancedMode)}\n >\n Advanced Limits\n </Button>\n </Box>\n {advancedMode && (\n <EvaluationRoundLimitOptionsList\n limitInputs={advancedLimits}\n handleChange={handleAdvancedLimitsChange}\n handleDeleteLimit={handleAdvancedLimitsRemove}\n onAddNewLimit={addAdvancedLimit}\n />\n )}\n\n {error && (\n <Box sx={{ my: 3 }}>\n <ErrorBanner error={error} />\n </Box>\n )}\n\n {showSaveSuccess && (\n <Box sx={{ my: 3 }}>\n <Alert\n className=\"save-success-alert\"\n severity=\"success\"\n onClose={() => setShowSaveSuccess(false)}\n sx={{ mb: '20px' }}\n >\n Successfully saved.\n </Alert>\n </Box>\n )}\n\n <Box sx={{ mt: 3, textAlign: 'right' }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={onSaveButtonClick}\n >\n Save\n </Button>\n </Box>\n </form>\n </CardContent>\n </Card>\n </div>\n )\n}\n\nexport const HelpersToTest = {\n disallowCalendarDateBefore,\n determineRoundStatus,\n convertInputsToEvaluationRound,\n}\n"],"names":["dayjs","utc","isSameOrAfter","disallowCalendarDateBefore","date","startOfDay","currentDate","determineRoundStatus","roundStart","roundEnd","className","iconProps","status","now","jsxs","jsx","IconSvg","convertInputsToEvaluationRound","evaluationRoundInputProp","startDate","endDate","totalSubmissionLimit","advancedLimits","limits","totalSubmissionLimitInt","limitInput","maxSubmissionInt","getDateErrorMessage","dateField","error","upperFirst","EvaluationRoundEditor","evaluationRoundInput","onSave","onDelete","accessToken","useSynapseContext","setIsEditing","useGlobalIsEditingContext","isDirty","setIsDirty","useState","setError","showSaveSuccess","setShowSaveSuccess","useEffect","setStartDate","setEndDate","setTotalSubmissionLimit","advancedMode","setAdvancedMode","startDateError","setStartDateError","endDateError","setEndDateError","handleListRemove","handleAdvancedLimitsChangeBase","appendAdvancedLimit","useListState","handleAdvancedLimitsChange","args","addAdvancedLimit","handleAdvancedLimitsRemove","index","generatedRemoveFunc","onSaveButtonClick","evaluationRound","err","updateEvaluationRound","createEvaluationRound","createdOrUpdatedRound","newInput","convertEvaluationRoundToInput","onDeleteButtonClick","deleteEvaluationRound","disableStartInput","Card","CardContent","Box","EvaluationRoundEditorDropdown","Grid2","DateTimePicker","TextField","event","Button","EvaluationRoundLimitOptionsList","ErrorBanner","Alert","HelpersToTest"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import m from "../../synapse-queries/entity/useEntityBundle.js";
|
|
3
3
|
import { useResolveLinkEntity as l } from "../../utils/functions/ResolveLinkEntity.js";
|
|
4
4
|
import { isFileEntity as L } from "../../utils/types/IsType.js";
|
|
5
5
|
import { ALL_ENTITY_BUNDLE_FIELDS as u } from "@sage-bionetworks/synapse-types";
|
|
@@ -3,7 +3,7 @@ import "../../synapse-client/SynapseClient.js";
|
|
|
3
3
|
import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
|
|
4
4
|
import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
|
|
5
5
|
import "@sage-bionetworks/synapse-client/util/SynapseClientError";
|
|
6
|
-
import { ObjectType as
|
|
6
|
+
import { ObjectType as D } from "@sage-bionetworks/synapse-types";
|
|
7
7
|
import "../../utils/functions/EntityTypeUtils.js";
|
|
8
8
|
import { copyStringToClipboard as I } from "../../utils/functions/StringUtils.js";
|
|
9
9
|
import "../../utils/SynapseConstants.js";
|
|
@@ -29,13 +29,13 @@ import "lodash-es/xorWith";
|
|
|
29
29
|
import "react-router";
|
|
30
30
|
import "@sage-bionetworks/synapse-client";
|
|
31
31
|
import "../../utils/types/IsType.js";
|
|
32
|
-
import
|
|
32
|
+
import E from "../../synapse-queries/entity/useEntityBundle.js";
|
|
33
33
|
import { useGetCurrentUserProfile as S } from "../../synapse-queries/user/useUserBundle.js";
|
|
34
34
|
import { useGetReply as B, useDeleteReply as U } from "../../synapse-queries/forum/useReply.js";
|
|
35
35
|
import { formatDate as j } from "../../utils/functions/DateFormatter.js";
|
|
36
36
|
import v from "dayjs";
|
|
37
37
|
import m from "../IconSvg/IconSvg.js";
|
|
38
|
-
import {
|
|
38
|
+
import { Markdown as A } from "../Markdown/MarkdownSynapse.js";
|
|
39
39
|
import { SkeletonTable as Y } from "../Skeleton/SkeletonTable.js";
|
|
40
40
|
import { WarningDialog as P } from "../SynapseForm/WarningDialog.js";
|
|
41
41
|
import { displayToast as u } from "../ToastMessage/ToastMessage.js";
|
|
@@ -49,15 +49,15 @@ const _ = (i) => {
|
|
|
49
49
|
);
|
|
50
50
|
};
|
|
51
51
|
function Ue(i) {
|
|
52
|
-
const { reply: e, isReplyAuthorModerator: n = !1 } = i, [y, d] = c(!1), [h, l] = c(!1), { data: b } = S(), { data:
|
|
52
|
+
const { reply: e, isReplyAuthorModerator: n = !1 } = i, [y, d] = c(!1), [h, l] = c(!1), { data: b } = S(), { data: w } = E(e.projectId), { data: s, isLoading: C } = B(e), r = M(null), { mutate: g } = U({
|
|
53
53
|
onSuccess: () => {
|
|
54
54
|
l(!1), u("A reply has been deleted.", "info");
|
|
55
55
|
}
|
|
56
56
|
}), R = e.createdBy == b?.ownerId;
|
|
57
57
|
return x(() => {
|
|
58
|
-
const
|
|
58
|
+
const k = new URLSearchParams(window.location.search).get(f);
|
|
59
59
|
let a;
|
|
60
|
-
return
|
|
60
|
+
return k === e.id && r.current && (r.current.style.transition = "background-color 1s ease", r.current.style.backgroundColor = "#fbf4e0", r.current.style.borderColor = "#f4dda3", a = setTimeout(() => {
|
|
61
61
|
r.current && (r.current.style.backgroundColor = "#f9f9f9", r.current.style.borderColor = "#ccc");
|
|
62
62
|
}, 2e3)), () => {
|
|
63
63
|
a && clearTimeout(a);
|
|
@@ -69,7 +69,7 @@ function Ue(i) {
|
|
|
69
69
|
id: `reply._${e.id}`,
|
|
70
70
|
ref: r,
|
|
71
71
|
role: "article",
|
|
72
|
-
children:
|
|
72
|
+
children: C ? /* @__PURE__ */ o(Y, { numCols: 1, numRows: 4 }) : /* @__PURE__ */ o(p, { children: s && /* @__PURE__ */ t(p, { children: [
|
|
73
73
|
/* @__PURE__ */ t("div", { children: [
|
|
74
74
|
/* @__PURE__ */ o(
|
|
75
75
|
$,
|
|
@@ -86,7 +86,7 @@ function Ue(i) {
|
|
|
86
86
|
A,
|
|
87
87
|
{
|
|
88
88
|
markdown: s,
|
|
89
|
-
objectType:
|
|
89
|
+
objectType: D.REPLY
|
|
90
90
|
}
|
|
91
91
|
),
|
|
92
92
|
/* @__PURE__ */ t("span", { children: [
|
|
@@ -106,7 +106,7 @@ function Ue(i) {
|
|
|
106
106
|
children: [
|
|
107
107
|
/* @__PURE__ */ o("button", { onClick: () => _(e.id), children: /* @__PURE__ */ o(m, { icon: "link", label: "Copy link to this reply" }) }),
|
|
108
108
|
R && /* @__PURE__ */ o("button", { onClick: () => d(!0), children: /* @__PURE__ */ o(m, { icon: "edit", label: "Edit reply" }) }),
|
|
109
|
-
|
|
109
|
+
w?.permissions.canModerate && /* @__PURE__ */ o("button", { onClick: () => l(!0), children: /* @__PURE__ */ o(m, { icon: "delete", label: "Delete reply" }) })
|
|
110
110
|
]
|
|
111
111
|
}
|
|
112
112
|
)
|
|
@@ -132,7 +132,7 @@ function Ue(i) {
|
|
|
132
132
|
onCancel: () => {
|
|
133
133
|
l(!1);
|
|
134
134
|
},
|
|
135
|
-
onConfirm: () =>
|
|
135
|
+
onConfirm: () => g({
|
|
136
136
|
forumId: e.forumId,
|
|
137
137
|
threadId: e.threadId,
|
|
138
138
|
replyId: e.id
|