synapse-react-client 4.0.10 → 4.0.11

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.
Files changed (89) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/CloudWarning.d.ts +5 -0
  3. package/dist/assets/icons/CloudWarning.d.ts.map +1 -0
  4. package/dist/assets/icons/CloudWarning.js +47 -0
  5. package/dist/assets/icons/CloudWarning.js.map +1 -0
  6. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.d.ts.map +1 -1
  7. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +143 -140
  8. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  9. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  10. package/dist/components/DataGrid/columns/AutocompleteColumn.js +66 -55
  11. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  12. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  13. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +1 -1
  14. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  15. package/dist/components/DataGrid/utils/applyModelChange.d.ts +1 -1
  16. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  17. package/dist/components/DataGrid/utils/applyModelChange.js +27 -24
  18. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  19. package/dist/components/DataGrid/utils/columnFactory.d.ts +8 -0
  20. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  21. package/dist/components/DataGrid/utils/columnFactory.js +47 -44
  22. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  23. package/dist/components/DataGrid/utils/getEmptyValue.d.ts +2 -0
  24. package/dist/components/DataGrid/utils/getEmptyValue.d.ts.map +1 -0
  25. package/dist/components/DataGrid/utils/getEmptyValue.js +8 -0
  26. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -0
  27. package/dist/components/DataGrid/utils/modelColsToGrid.d.ts.map +1 -1
  28. package/dist/components/DataGrid/utils/modelColsToGrid.js +2 -1
  29. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  30. package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts +32 -0
  31. package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts.map +1 -0
  32. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js +22 -0
  33. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -0
  34. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.css +1 -0
  35. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  36. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +199 -132
  37. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  38. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js +22 -0
  39. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -0
  40. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +170 -0
  41. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts.map +1 -1
  42. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -0
  43. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  44. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.d.ts.map +1 -1
  45. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js +15 -14
  46. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  47. package/dist/components/Forum/DiscussionReply.d.ts +1 -0
  48. package/dist/components/Forum/DiscussionReply.d.ts.map +1 -1
  49. package/dist/components/Forum/DiscussionReply.js +19 -19
  50. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  51. package/dist/components/Forum/DiscussionThread.d.ts +1 -0
  52. package/dist/components/Forum/DiscussionThread.d.ts.map +1 -1
  53. package/dist/components/Forum/DiscussionThread.js +73 -72
  54. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  55. package/dist/components/GenericCard/BioregistryRules.d.ts.map +1 -1
  56. package/dist/components/GenericCard/BioregistryRules.js +7 -3
  57. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  58. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  59. package/dist/components/IconSvg/IconSvg.js +2 -1
  60. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  61. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.d.ts.map +1 -1
  62. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +157 -148
  63. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  64. package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
  65. package/dist/components/doi/CreateOrUpdateDoiModal.js +20 -19
  66. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  67. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -1
  68. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  69. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  70. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  71. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  72. package/dist/synapse-queries/KeyFactory.js +3 -0
  73. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  74. package/dist/synapse-queries/forum/useThread.d.ts +1 -0
  75. package/dist/synapse-queries/forum/useThread.d.ts.map +1 -1
  76. package/dist/synapse-queries/forum/useThread.js +19 -12
  77. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  78. package/dist/tsconfig.build.tsbuildinfo +1 -1
  79. package/dist/utils/APIConstants.d.ts +1 -0
  80. package/dist/utils/APIConstants.d.ts.map +1 -1
  81. package/dist/utils/APIConstants.js +2 -2
  82. package/dist/utils/APIConstants.js.map +1 -1
  83. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  84. package/dist/utils/AppUtils/session/ApplicationSessionManager.js +7 -4
  85. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  86. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  87. package/dist/utils/functions/EntityTypeUtils.js +15 -4
  88. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  89. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"SubmissionPage.js","names":[],"sources":["../../../../src/components/dataaccess/SubmissionPage/SubmissionPage.tsx"],"sourcesContent":["import AccessRequirementList from '@/components/AccessRequirementList/AccessRequirementList'\nimport { CancelDataAccessRequestConfirmationModal } from '@/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal'\nimport { ApproveSubmissionConfirmationModal } from '@/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal'\nimport { displayToast } from '@/components/ToastMessage'\nimport {\n useGetAccessRequirementACL,\n useGetAccessRequirements,\n useGetAccessRequirementWikiPageKey,\n} from '@/synapse-queries/dataaccess/useAccessRequirements'\nimport useGetDataAccessSubmission from '@/synapse-queries/dataaccess/useDataAccessSubmission'\nimport { useGetCurrentUserProfile } from '@/synapse-queries/user'\nimport { useGetUserAccessApproval } from '@/synapse-queries/dataaccess/useAccessApprovals'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { ACT_TEAM_ID } from '@/utils/SynapseConstants'\nimport { Button, Grid, Skeleton, Stack, Typography } from '@mui/material'\nimport {\n ACCESS_TYPE,\n FileHandleAssociateType,\n ManagedACTAccessRequirement,\n Submission,\n SubmissionState,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport { isEmpty, toLower, upperFirst } from 'lodash-es'\nimport { Fragment, ReactNode, useMemo, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport { SynapseErrorBoundary } from '../../error/ErrorBanner'\nimport MarkdownSynapse from '../../Markdown/MarkdownSynapse'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport UserOrTeamBadge from '../../UserOrTeamBadge/UserOrTeamBadge'\nimport { FileHandleLink } from '../../widgets/FileHandleLink'\nimport RejectDataAccessRequestModal from '../RejectDataAccessRequestModal'\n\ndayjs.extend(duration)\n\nexport type SubmissionPageProps = {\n /** The ID of the submission to view */\n submissionId: string | number\n /** If true, display reviewer controls on the page */\n isReviewer: boolean // There is currently no API to check if a user has review permissions on a specific submission ID\n}\n\nfunction DataAccessSubmissionFileHandleLink(props: {\n submissionId: string\n fileHandleId: string\n}) {\n const { submissionId, fileHandleId } = props\n const fileHandleAssociation = useMemo(\n () => ({\n fileHandleId: fileHandleId,\n associateObjectId: submissionId,\n associateObjectType:\n FileHandleAssociateType.DataAccessSubmissionAttachment,\n }),\n [fileHandleId, submissionId],\n )\n return (\n <FileHandleLink\n key={fileHandleId}\n showDownloadIcon={true}\n fileHandleAssociation={fileHandleAssociation}\n />\n )\n}\n\ntype AccessRequirementWikiType = {\n accessRequirementId: string\n}\n\nfunction AccessRequirementWiki(props: AccessRequirementWikiType) {\n const { data: wikiPageKey } = useGetAccessRequirementWikiPageKey(\n props.accessRequirementId,\n {\n throwOnError: true,\n },\n )\n\n return wikiPageKey ? (\n <div className=\"AccessRequirementWikiContainer\">\n <div className=\"AccessRequirementWikiContent\">\n <Typography variant=\"headline1\">Access Requirement</Typography>\n <hr />\n <MarkdownSynapse\n wikiId={wikiPageKey?.wikiPageId}\n ownerId={wikiPageKey?.ownerObjectId}\n objectType={wikiPageKey?.ownerObjectType}\n />\n </div>\n </div>\n ) : (\n <Skeleton width={'100%'} height={'600px'} />\n )\n}\n\n/**\n * returns true iff the userId is a requester and/or listed on the accessor changes on the submission.\n * @param userId\n * @param submission\n */\nfunction isRequesterOnSubmission(userId: string, submission: Submission) {\n return (\n submission.submittedBy === userId ||\n Boolean(submission.accessorChanges.find(acc => acc.userId === userId))\n )\n}\n\n/**\n * Page for a Data Access Submission. Supports the following user types:\n * - ACT member or other designated reviewer can view, and choose to approve or reject.\n * - Data Access Request submitter can view and modify their own submission.\n * - Data Access Request requester (who is not a submitter) can view their own submission.\n */\nexport default function SubmissionPage(props: SubmissionPageProps) {\n const { submissionId, isReviewer } = props\n const [showRejectionDialog, setShowRejectionDialog] = useState(false)\n\n const { data: currentUserProfile } = useGetCurrentUserProfile()\n\n const { data: submission, isLoading: isLoadingSubmission } =\n useGetDataAccessSubmission(submissionId, {\n throwOnError: true,\n })\n const isRequester = Boolean(\n submission &&\n currentUserProfile &&\n isRequesterOnSubmission(currentUserProfile.ownerId, submission),\n )\n\n const { data: accessApproval, isLoading: isLoadingAccessApproval } =\n useGetUserAccessApproval(String(submissionId), {\n enabled:\n isRequester &&\n submission &&\n submission.state === SubmissionState.APPROVED,\n })\n\n const isExpired = Boolean(\n accessApproval && dayjs(accessApproval.expiredOn).isBefore(dayjs()),\n )\n\n const isSubmitter =\n submission && submission.submittedBy === currentUserProfile?.ownerId\n\n const { data: accessRequirement } =\n useGetAccessRequirements<ManagedACTAccessRequirement>(\n parseInt(submission?.accessRequirementId!),\n { enabled: !!submission },\n )\n\n const { data: acl, isLoading: isLoadingACL } = useGetAccessRequirementACL(\n submission?.accessRequirementId!,\n { enabled: !!submission, throwOnError: true },\n )\n\n const [showUpdateRequestDialog, setShowUpdateRequestDialog] = useState(false)\n const [\n showCancelRequestConfirmationDialog,\n setShowCancelRequestConfirmationDialog,\n ] = useState(false)\n const [showApprovalConfirmation, setShowApprovalConfirmation] =\n useState(false)\n\n const navigate = useNavigate()\n\n const reviewerIds = acl?.resourceAccess\n .filter(ra => ra.accessType.includes(ACCESS_TYPE.REVIEW_SUBMISSIONS))\n .map(ra => ra.principalId)\n\n const displayedSubmissionState: ReactNode = useMemo(() => {\n if (submission && !isLoadingAccessApproval) {\n if (isExpired) {\n return 'Expired'\n }\n return submission.state\n }\n return <Skeleton width={100} />\n }, [isExpired, isLoadingAccessApproval, submission])\n\n return (\n <Grid container={true} spacing={4} className=\"SubmissionPage\">\n {showUpdateRequestDialog && accessRequirement && (\n <AccessRequirementList\n renderAsModal={true}\n accessRequirementFromProps={[accessRequirement]}\n onHide={() => setShowUpdateRequestDialog(false)}\n onSubmissionCreated={submissionId => {\n setShowUpdateRequestDialog(false)\n displayToast('Data access request submitted', 'success', {\n primaryButtonConfig: {\n text: 'View Request',\n onClick: () => {\n navigate('/submissions/' + submissionId)\n },\n },\n })\n }}\n />\n )}\n <ApproveSubmissionConfirmationModal\n open={showApprovalConfirmation}\n onClose={() => {\n setShowApprovalConfirmation(false)\n }}\n submissionId={String(submissionId)}\n />\n {showRejectionDialog && (\n <RejectDataAccessRequestModal\n // Previously, we used a 'key' prop to reset the modal form when it was opened,\n // but removing the key and re-rendering the JSX achieves the same functionality in a more straightforward way.\n submissionId={submissionId}\n open={showRejectionDialog}\n onClose={() => setShowRejectionDialog(false)}\n />\n )}\n <Grid\n className=\"SubmissionSummary\"\n size={{\n xs: 12,\n sm: 4,\n lg: 3,\n }}\n >\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Status\n </Typography>\n <Typography\n variant=\"headline3\"\n sx={{ textTransform: 'uppercase' }}\n gutterBottom\n >\n {displayedSubmissionState}\n </Typography>\n <br />\n {isLoadingSubmission && <Skeleton width={200} />}\n {submission &&\n isReviewer &&\n submission.state === SubmissionState.SUBMITTED && (\n <div className=\"ButtonContainer\">\n <Button\n onClick={() => {\n setShowApprovalConfirmation(true)\n }}\n color=\"success\"\n variant=\"contained\"\n >\n Approve\n </Button>\n <Button\n onClick={() => {\n setShowRejectionDialog(true)\n }}\n color=\"error\"\n variant=\"contained\"\n >\n Reject\n </Button>\n </div>\n )}\n\n {submission && isSubmitter && (\n <div className=\"ButtonContainer\">\n <CancelDataAccessRequestConfirmationModal\n open={showCancelRequestConfirmationDialog}\n submissionId={String(submissionId)}\n accessRequirementId={submission?.accessRequirementId || ''}\n onClose={() => setShowCancelRequestConfirmationDialog(false)}\n />\n {submission.state === SubmissionState.SUBMITTED && (\n <Button\n onClick={() => {\n setShowCancelRequestConfirmationDialog(true)\n }}\n color=\"primary\"\n variant=\"outlined\"\n >\n Cancel Request\n </Button>\n )}\n {submission.state !== SubmissionState.SUBMITTED && (\n <Button\n onClick={() => {\n setShowUpdateRequestDialog(true)\n }}\n color=\"primary\"\n variant=\"outlined\"\n >\n {submission.state === SubmissionState.APPROVED\n ? 'Update'\n : 'Modify'}{' '}\n Request\n </Button>\n )}\n </div>\n )}\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Access Requirement Name\n </Typography>\n\n <Typography variant=\"smallText1\" gutterBottom>\n {accessRequirement?.name ?? <Skeleton width={100} />}\n </Typography>\n <br />\n\n {isReviewer && (\n <>\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Assigned Reviewer\n </Typography>\n <Stack>\n {isLoadingACL && <Skeleton width={100} />}\n {!isLoadingACL &&\n !isEmpty(reviewerIds) &&\n reviewerIds!.map(id => {\n return <UserOrTeamBadge key={id} principalId={id} />\n })}\n {!isLoadingACL && isEmpty(reviewerIds) && (\n <UserOrTeamBadge principalId={ACT_TEAM_ID} />\n )}\n </Stack>\n <br />\n </>\n )}\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Conditions\n </Typography>\n {accessRequirement ? (\n <Typography variant=\"smallText1\" component={'div'} gutterBottom>\n <ul>\n <li>\n Expiration period:{' '}\n {dayjs\n .duration({\n milliseconds: accessRequirement.expirationPeriod,\n })\n .asDays()}{' '}\n day(s)\n {accessRequirement.expirationPeriod === 0 && ' (no expiration)'}\n </li>\n\n {accessRequirement.isCertifiedUserRequired && (\n <li>User must be Certified</li>\n )}\n {accessRequirement.isValidatedProfileRequired && (\n <li>User Profile must be Validated</li>\n )}\n {accessRequirement.isDUCRequired && <li>DUC is required</li>}\n {accessRequirement.isIDURequired && <li>IDU is required</li>}\n {accessRequirement.isIDUPublic && (\n <li>IDU will be made public</li>\n )}\n {accessRequirement.isIRBApprovalRequired && (\n <li>IRB Approval is required</li>\n )}\n {accessRequirement.areOtherAttachmentsRequired && (\n <li>Other attachments are required</li>\n )}\n </ul>\n </Typography>\n ) : (\n <Skeleton width={100} />\n )}\n <br />\n <div className=\"SubmissionSummaryGrid\">\n <Typography variant=\"dataFieldKey\">Submitted By</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n <UserBadge userId={submission.submittedBy} />\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n <Typography variant=\"dataFieldKey\">Submitted On</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n formatDate(dayjs(submission.submittedOn))\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n {isReviewer && (\n <>\n <Typography variant=\"dataFieldKey\">Modified By</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n <UserBadge userId={submission.modifiedBy} />\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n </>\n )}\n <Typography variant=\"dataFieldKey\">Modified On</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n formatDate(dayjs(submission.modifiedOn))\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n <Typography className=\"Key\" variant=\"dataFieldKey\">\n Data Requesters\n {`${submission ? ` (${submission.accessorChanges.length})` : ''}`}\n </Typography>\n {submission ? (\n submission.accessorChanges.map(accessorChange => (\n <Fragment key={accessorChange.userId}>\n <Typography className=\"Key DataAccessor\" variant=\"smallText1\">\n <span style={{ whiteSpace: 'nowrap' }}>\n <UserBadge\n key={accessorChange.userId}\n userId={accessorChange.userId}\n />\n </span>\n </Typography>\n <Typography className=\"Value DataAccessor\" variant=\"smallText1\">\n {upperFirst(\n toLower(\n accessorChange.type.substring(\n 0,\n accessorChange.type.indexOf('_'),\n ),\n ),\n )}\n </Typography>\n </Fragment>\n ))\n ) : (\n <Skeleton width={100} />\n )}\n <Typography className=\"Key\" variant=\"dataFieldKey\">\n Institution\n </Typography>\n <Typography className=\"Value\" variant=\"smallText1\">\n {submission ? (\n submission.researchProjectSnapshot.institution\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n <Typography className=\"Key\" variant=\"dataFieldKey\">\n Project Lead\n </Typography>\n <Typography className=\"Value\" variant=\"smallText1\">\n {submission ? (\n submission.researchProjectSnapshot.projectLead\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n </div>\n </Grid>\n <Grid\n size={{\n xs: 12,\n sm: 8,\n lg: 9,\n }}\n >\n <Stack sx={{ gap: 2 }}>\n <SynapseErrorBoundary>\n {submission ? (\n <AccessRequirementWiki\n accessRequirementId={submission.accessRequirementId}\n />\n ) : (\n <></>\n )}\n </SynapseErrorBoundary>\n {submission?.rejectedReason && (\n <section>\n <Typography variant=\"headline1\" gutterBottom>\n Reason for rejection given by reviewer\n </Typography>\n <hr />\n <Typography\n variant=\"body1\"\n style={{ whiteSpace: 'pre-line' }}\n gutterBottom\n >\n {submission.rejectedReason}\n </Typography>\n </section>\n )}\n <section>\n <Typography variant=\"headline1\">\n Contents of the Access Request\n <hr />\n </Typography>\n <Stack\n sx={{\n gap: 2,\n }}\n >\n {submission?.researchProjectSnapshot\n ?.intendedDataUseStatement && (\n <section>\n <Typography variant=\"headline2\" gutterBottom>\n Intended Data Use Statement\n </Typography>\n <Typography\n variant=\"body1\"\n style={{ whiteSpace: 'pre-line' }}\n gutterBottom\n >\n {\n submission.researchProjectSnapshot\n .intendedDataUseStatement\n }\n </Typography>\n </section>\n )}\n <Typography variant=\"headline2\" gutterBottom>\n Documents\n </Typography>\n {submission?.ducFileHandleId && (\n <section>\n <Typography variant=\"smallText2\">\n Data Use Certificate (DUC)\n </Typography>\n <DataAccessSubmissionFileHandleLink\n submissionId={submission.id}\n fileHandleId={submission.ducFileHandleId}\n />\n </section>\n )}\n {submission?.irbFileHandleId && (\n <section>\n <Typography variant=\"smallText2\" gutterBottom>\n IRB Approval Letter\n </Typography>\n <DataAccessSubmissionFileHandleLink\n submissionId={submission.id}\n fileHandleId={submission.irbFileHandleId}\n />\n </section>\n )}\n {submission?.attachments && (\n <section>\n <Typography variant=\"smallText2\" gutterBottom>\n Other Attachments\n </Typography>\n {submission.attachments.map(fileHandleId => (\n <Fragment key={fileHandleId}>\n <DataAccessSubmissionFileHandleLink\n submissionId={submission.id}\n fileHandleId={fileHandleId}\n />\n <br />\n </Fragment>\n ))}\n </section>\n )}\n </Stack>\n </section>\n </Stack>\n </Grid>\n </Grid>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SubmissionPage.js","names":[],"sources":["../../../../src/components/dataaccess/SubmissionPage/SubmissionPage.tsx"],"sourcesContent":["import AccessRequirementList from '@/components/AccessRequirementList/AccessRequirementList'\nimport { CancelDataAccessRequestConfirmationModal } from '@/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal'\nimport { ApproveSubmissionConfirmationModal } from '@/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal'\nimport { displayToast } from '@/components/ToastMessage'\nimport {\n useGetAccessRequirementACL,\n useGetAccessRequirements,\n useGetAccessRequirementWikiPageKey,\n} from '@/synapse-queries/dataaccess/useAccessRequirements'\nimport useGetDataAccessSubmission from '@/synapse-queries/dataaccess/useDataAccessSubmission'\nimport { useGetThreadForSubmission } from '@/synapse-queries/forum/useThread'\nimport { useGetCurrentUserProfile } from '@/synapse-queries/user'\nimport { useGetUserAccessApproval } from '@/synapse-queries/dataaccess/useAccessApprovals'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { ACT_TEAM_ID } from '@/utils/SynapseConstants'\nimport { Button, Grid, Skeleton, Stack, Typography } from '@mui/material'\nimport {\n ACCESS_TYPE,\n FileHandleAssociateType,\n ManagedACTAccessRequirement,\n Submission,\n SubmissionState,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport { isEmpty, toLower, upperFirst } from 'lodash-es'\nimport { Fragment, ReactNode, useMemo, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport { SynapseErrorBoundary } from '../../error/ErrorBanner'\nimport MarkdownSynapse from '../../Markdown/MarkdownSynapse'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport UserOrTeamBadge from '../../UserOrTeamBadge/UserOrTeamBadge'\nimport { FileHandleLink } from '../../widgets/FileHandleLink'\nimport RejectDataAccessRequestModal from '../RejectDataAccessRequestModal'\nimport { DiscussionThread } from '@/components/Forum'\n\ndayjs.extend(duration)\n\nexport type SubmissionPageProps = {\n /** The ID of the submission to view */\n submissionId: string | number\n /** If true, display reviewer controls on the page */\n isReviewer: boolean // There is currently no API to check if a user has review permissions on a specific submission ID\n}\n\nconst THREAD_BODY =\n 'Use this thread to communicate with the reviewers about this access request.'\n\nfunction DataAccessSubmissionFileHandleLink(props: {\n submissionId: string\n fileHandleId: string\n}) {\n const { submissionId, fileHandleId } = props\n const fileHandleAssociation = useMemo(\n () => ({\n fileHandleId: fileHandleId,\n associateObjectId: submissionId,\n associateObjectType:\n FileHandleAssociateType.DataAccessSubmissionAttachment,\n }),\n [fileHandleId, submissionId],\n )\n return (\n <FileHandleLink\n key={fileHandleId}\n showDownloadIcon={true}\n fileHandleAssociation={fileHandleAssociation}\n />\n )\n}\n\ntype AccessRequirementWikiType = {\n accessRequirementId: string\n}\n\nfunction AccessRequirementWiki(props: AccessRequirementWikiType) {\n const { data: wikiPageKey } = useGetAccessRequirementWikiPageKey(\n props.accessRequirementId,\n {\n throwOnError: true,\n },\n )\n\n return wikiPageKey ? (\n <div className=\"AccessRequirementWikiContainer\">\n <div className=\"AccessRequirementWikiContent\">\n <Typography variant=\"headline1\">Access Requirement</Typography>\n <hr />\n <MarkdownSynapse\n wikiId={wikiPageKey?.wikiPageId}\n ownerId={wikiPageKey?.ownerObjectId}\n objectType={wikiPageKey?.ownerObjectType}\n />\n </div>\n </div>\n ) : (\n <Skeleton width={'100%'} height={'600px'} />\n )\n}\n\n/**\n * returns true iff the userId is a requester and/or listed on the accessor changes on the submission.\n * @param userId\n * @param submission\n */\nfunction isRequesterOnSubmission(userId: string, submission: Submission) {\n return (\n submission.submittedBy === userId ||\n Boolean(submission.accessorChanges.find(acc => acc.userId === userId))\n )\n}\n\n/**\n * Page for a Data Access Submission. Supports the following user types:\n * - ACT member or other designated reviewer can view, and choose to approve or reject.\n * - Data Access Request submitter can view and modify their own submission.\n * - Data Access Request requester (who is not a submitter) can view their own submission.\n */\nexport default function SubmissionPage(props: SubmissionPageProps) {\n const { submissionId, isReviewer } = props\n const [showRejectionDialog, setShowRejectionDialog] = useState(false)\n\n const { data: currentUserProfile } = useGetCurrentUserProfile()\n\n const { data: submission, isLoading: isLoadingSubmission } =\n useGetDataAccessSubmission(submissionId, {\n throwOnError: true,\n })\n const isRequester = Boolean(\n submission &&\n currentUserProfile &&\n isRequesterOnSubmission(currentUserProfile.ownerId, submission),\n )\n\n const { data: accessApproval, isLoading: isLoadingAccessApproval } =\n useGetUserAccessApproval(String(submissionId), {\n enabled:\n isRequester &&\n submission &&\n submission.state === SubmissionState.APPROVED,\n })\n\n const isExpired = Boolean(\n accessApproval && dayjs(accessApproval.expiredOn).isBefore(dayjs()),\n )\n\n const isSubmitter =\n submission && submission.submittedBy === currentUserProfile?.ownerId\n\n const { data: accessRequirement } =\n useGetAccessRequirements<ManagedACTAccessRequirement>(\n parseInt(submission?.accessRequirementId!),\n { enabled: !!submission },\n )\n\n const { data: acl, isLoading: isLoadingACL } = useGetAccessRequirementACL(\n submission?.accessRequirementId!,\n { enabled: !!submission, throwOnError: true },\n )\n\n const { data: thread } = useGetThreadForSubmission(submissionId)\n\n const [showUpdateRequestDialog, setShowUpdateRequestDialog] = useState(false)\n const [\n showCancelRequestConfirmationDialog,\n setShowCancelRequestConfirmationDialog,\n ] = useState(false)\n const [showApprovalConfirmation, setShowApprovalConfirmation] =\n useState(false)\n\n const navigate = useNavigate()\n\n const reviewerIds = acl?.resourceAccess\n .filter(ra => ra.accessType.includes(ACCESS_TYPE.REVIEW_SUBMISSIONS))\n .map(ra => ra.principalId)\n\n const displayedSubmissionState: ReactNode = useMemo(() => {\n if (submission && !isLoadingAccessApproval) {\n if (isExpired) {\n return 'Expired'\n }\n return submission.state\n }\n return <Skeleton width={100} />\n }, [isExpired, isLoadingAccessApproval, submission])\n\n return (\n <Grid container={true} spacing={4} className=\"SubmissionPage\">\n {showUpdateRequestDialog && accessRequirement && (\n <AccessRequirementList\n renderAsModal={true}\n accessRequirementFromProps={[accessRequirement]}\n onHide={() => setShowUpdateRequestDialog(false)}\n onSubmissionCreated={submissionId => {\n setShowUpdateRequestDialog(false)\n displayToast('Data access request submitted', 'success', {\n primaryButtonConfig: {\n text: 'View Request',\n onClick: () => {\n navigate('/submissions/' + submissionId)\n },\n },\n })\n }}\n />\n )}\n <ApproveSubmissionConfirmationModal\n open={showApprovalConfirmation}\n onClose={() => {\n setShowApprovalConfirmation(false)\n }}\n submissionId={String(submissionId)}\n />\n {showRejectionDialog && (\n <RejectDataAccessRequestModal\n // Previously, we used a 'key' prop to reset the modal form when it was opened,\n // but removing the key and re-rendering the JSX achieves the same functionality in a more straightforward way.\n submissionId={submissionId}\n open={showRejectionDialog}\n onClose={() => setShowRejectionDialog(false)}\n />\n )}\n <Grid\n className=\"SubmissionSummary\"\n size={{\n xs: 12,\n sm: 4,\n lg: 3,\n }}\n >\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Status\n </Typography>\n <Typography\n variant=\"headline3\"\n sx={{ textTransform: 'uppercase' }}\n gutterBottom\n >\n {displayedSubmissionState}\n </Typography>\n <br />\n {isLoadingSubmission && <Skeleton width={200} />}\n {submission &&\n isReviewer &&\n submission.state === SubmissionState.SUBMITTED && (\n <div className=\"ButtonContainer\">\n <Button\n onClick={() => {\n setShowApprovalConfirmation(true)\n }}\n color=\"success\"\n variant=\"contained\"\n >\n Approve\n </Button>\n <Button\n onClick={() => {\n setShowRejectionDialog(true)\n }}\n color=\"error\"\n variant=\"contained\"\n >\n Reject\n </Button>\n </div>\n )}\n\n {submission && isSubmitter && (\n <div className=\"ButtonContainer\">\n <CancelDataAccessRequestConfirmationModal\n open={showCancelRequestConfirmationDialog}\n submissionId={String(submissionId)}\n accessRequirementId={submission?.accessRequirementId || ''}\n onClose={() => setShowCancelRequestConfirmationDialog(false)}\n />\n {submission.state === SubmissionState.SUBMITTED && (\n <Button\n onClick={() => {\n setShowCancelRequestConfirmationDialog(true)\n }}\n color=\"primary\"\n variant=\"outlined\"\n >\n Cancel Request\n </Button>\n )}\n {submission.state !== SubmissionState.SUBMITTED && (\n <Button\n onClick={() => {\n setShowUpdateRequestDialog(true)\n }}\n color=\"primary\"\n variant=\"outlined\"\n >\n {submission.state === SubmissionState.APPROVED\n ? 'Update'\n : 'Modify'}{' '}\n Request\n </Button>\n )}\n </div>\n )}\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Access Requirement Name\n </Typography>\n\n <Typography variant=\"smallText1\" gutterBottom>\n {accessRequirement?.name ?? <Skeleton width={100} />}\n </Typography>\n <br />\n\n {isReviewer && (\n <>\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Assigned Reviewer\n </Typography>\n <Stack>\n {isLoadingACL && <Skeleton width={100} />}\n {!isLoadingACL &&\n !isEmpty(reviewerIds) &&\n reviewerIds!.map(id => {\n return <UserOrTeamBadge key={id} principalId={id} />\n })}\n {!isLoadingACL && isEmpty(reviewerIds) && (\n <UserOrTeamBadge principalId={ACT_TEAM_ID} />\n )}\n </Stack>\n <br />\n </>\n )}\n <Typography variant=\"dataFieldKey\" gutterBottom>\n Conditions\n </Typography>\n {accessRequirement ? (\n <Typography variant=\"smallText1\" component={'div'} gutterBottom>\n <ul>\n <li>\n Expiration period:{' '}\n {dayjs\n .duration({\n milliseconds: accessRequirement.expirationPeriod,\n })\n .asDays()}{' '}\n day(s)\n {accessRequirement.expirationPeriod === 0 && ' (no expiration)'}\n </li>\n\n {accessRequirement.isCertifiedUserRequired && (\n <li>User must be Certified</li>\n )}\n {accessRequirement.isValidatedProfileRequired && (\n <li>User Profile must be Validated</li>\n )}\n {accessRequirement.isDUCRequired && <li>DUC is required</li>}\n {accessRequirement.isIDURequired && <li>IDU is required</li>}\n {accessRequirement.isIDUPublic && (\n <li>IDU will be made public</li>\n )}\n {accessRequirement.isIRBApprovalRequired && (\n <li>IRB Approval is required</li>\n )}\n {accessRequirement.areOtherAttachmentsRequired && (\n <li>Other attachments are required</li>\n )}\n </ul>\n </Typography>\n ) : (\n <Skeleton width={100} />\n )}\n <br />\n <div className=\"SubmissionSummaryGrid\">\n <Typography variant=\"dataFieldKey\">Submitted By</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n <UserBadge userId={submission.submittedBy} />\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n <Typography variant=\"dataFieldKey\">Submitted On</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n formatDate(dayjs(submission.submittedOn))\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n {isReviewer && (\n <>\n <Typography variant=\"dataFieldKey\">Modified By</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n <UserBadge userId={submission.modifiedBy} />\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n </>\n )}\n <Typography variant=\"dataFieldKey\">Modified On</Typography>\n <Typography variant=\"smallText1\">\n {submission ? (\n formatDate(dayjs(submission.modifiedOn))\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n <Typography className=\"Key\" variant=\"dataFieldKey\">\n Data Requesters\n {`${submission ? ` (${submission.accessorChanges.length})` : ''}`}\n </Typography>\n {submission ? (\n submission.accessorChanges.map(accessorChange => (\n <Fragment key={accessorChange.userId}>\n <Typography className=\"Key DataAccessor\" variant=\"smallText1\">\n <span style={{ whiteSpace: 'nowrap' }}>\n <UserBadge\n key={accessorChange.userId}\n userId={accessorChange.userId}\n />\n </span>\n </Typography>\n <Typography className=\"Value DataAccessor\" variant=\"smallText1\">\n {upperFirst(\n toLower(\n accessorChange.type.substring(\n 0,\n accessorChange.type.indexOf('_'),\n ),\n ),\n )}\n </Typography>\n </Fragment>\n ))\n ) : (\n <Skeleton width={100} />\n )}\n <Typography className=\"Key\" variant=\"dataFieldKey\">\n Institution\n </Typography>\n <Typography className=\"Value\" variant=\"smallText1\">\n {submission ? (\n submission.researchProjectSnapshot.institution\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n <Typography className=\"Key\" variant=\"dataFieldKey\">\n Project Lead\n </Typography>\n <Typography className=\"Value\" variant=\"smallText1\">\n {submission ? (\n submission.researchProjectSnapshot.projectLead\n ) : (\n <Skeleton width={100} />\n )}\n </Typography>\n </div>\n </Grid>\n <Grid\n size={{\n xs: 12,\n sm: 8,\n lg: 9,\n }}\n >\n <Stack sx={{ gap: 2 }}>\n <SynapseErrorBoundary>\n {submission ? (\n <AccessRequirementWiki\n accessRequirementId={submission.accessRequirementId}\n />\n ) : (\n <></>\n )}\n </SynapseErrorBoundary>\n {submission?.rejectedReason && (\n <section>\n <Typography variant=\"headline1\" gutterBottom>\n Reason for rejection given by reviewer\n </Typography>\n <hr />\n <Typography\n variant=\"body1\"\n style={{ whiteSpace: 'pre-line' }}\n gutterBottom\n >\n {submission.rejectedReason}\n </Typography>\n </section>\n )}\n <section>\n <Typography variant=\"headline1\">\n Contents of the Access Request\n <hr />\n </Typography>\n <Stack\n sx={{\n gap: 2,\n }}\n >\n {submission?.researchProjectSnapshot\n ?.intendedDataUseStatement && (\n <section>\n <Typography variant=\"headline2\" gutterBottom>\n Intended Data Use Statement\n </Typography>\n <Typography\n variant=\"body1\"\n style={{ whiteSpace: 'pre-line' }}\n gutterBottom\n >\n {\n submission.researchProjectSnapshot\n .intendedDataUseStatement\n }\n </Typography>\n </section>\n )}\n <Typography variant=\"headline2\" gutterBottom>\n Documents\n </Typography>\n {submission?.ducFileHandleId && (\n <section>\n <Typography variant=\"smallText2\">\n Data Use Certificate (DUC)\n </Typography>\n <DataAccessSubmissionFileHandleLink\n submissionId={submission.id}\n fileHandleId={submission.ducFileHandleId}\n />\n </section>\n )}\n {submission?.irbFileHandleId && (\n <section>\n <Typography variant=\"smallText2\" gutterBottom>\n IRB Approval Letter\n </Typography>\n <DataAccessSubmissionFileHandleLink\n submissionId={submission.id}\n fileHandleId={submission.irbFileHandleId}\n />\n </section>\n )}\n {submission?.attachments && (\n <section>\n <Typography variant=\"smallText2\" gutterBottom>\n Other Attachments\n </Typography>\n {submission.attachments.map(fileHandleId => (\n <Fragment key={fileHandleId}>\n <DataAccessSubmissionFileHandleLink\n submissionId={submission.id}\n fileHandleId={fileHandleId}\n />\n <br />\n </Fragment>\n ))}\n </section>\n )}\n </Stack>\n </section>\n {thread?.id && (\n <DiscussionThread\n threadId={thread.id}\n limit={25}\n emptyBodyContent={THREAD_BODY}\n />\n )}\n </Stack>\n </Grid>\n </Grid>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrUpdateDoiModal.d.ts","sourceRoot":"","sources":["../../../src/components/doi/CreateOrUpdateDoiModal.tsx"],"names":[],"mappings":"AAuCA,OAAO,EACL,aAAa,EAKd,MAAM,kCAAkC,CAAA;AAOzC,MAAM,MAAM,2BAA2B,GAAG;IACxC,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,yBAAyB;IACzB,UAAU,EAAE,aAAa,CAAA;IACzB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAmDD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CA4WxE;AAED,eAAe,sBAAsB,CAAA"}
1
+ {"version":3,"file":"CreateOrUpdateDoiModal.d.ts","sourceRoot":"","sources":["../../../src/components/doi/CreateOrUpdateDoiModal.tsx"],"names":[],"mappings":"AAuCA,OAAO,EACL,aAAa,EAKd,MAAM,kCAAkC,CAAA;AAOzC,MAAM,MAAM,2BAA2B,GAAG;IACxC,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAA;IACb,iDAAiD;IACjD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,yBAAyB;IACzB,UAAU,EAAE,aAAa,CAAA;IACzB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAmDD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,2CA+WxE;AAED,eAAe,sBAAsB,CAAA"}
@@ -4,15 +4,15 @@ import { BackendDestinationEnum as te, getEndpoint as ne } from "../../utils/fun
4
4
  import { entityTypeToFriendlyName as re, isDataset as ie, isTable as ae, isVersionableEntity as oe } from "../../utils/functions/EntityTypeUtils.js";
5
5
  import { useGetRealmPrincipals as se } from "../../synapse-queries/realm/useRealmPrincipals.js";
6
6
  import { useGlobalIsEditingContext as ce } from "../../utils/context/GlobalIsEditingContext.js";
7
- import { SynapseSpinner as t } from "../LoadingScreen/LoadingScreen.js";
8
- import n from "../../synapse-queries/entity/useEntityBundle.js";
9
- import { useGetVersions as r } from "../../synapse-queries/entity/useEntity.js";
10
- import { useGetPortal as i } from "../../synapse-queries/portal/usePortal.js";
11
- import { useGetCurrentUserProfile as a } from "../../synapse-queries/user/useUserBundle.js";
12
- import { useCreateOrUpdateDOI as le, useGetDOI as ue } from "../../synapse-queries/doi/useDOI.js";
13
- import { MarkdownPopover as o } from "../Markdown/MarkdownPopover.js";
14
- import { DialogBase as de } from "../DialogBase.js";
15
- import { StyledFormControl as fe } from "../styled/StyledFormControl.js";
7
+ import { SynapseSpinner as le } from "../LoadingScreen/LoadingScreen.js";
8
+ import t from "../../synapse-queries/entity/useEntityBundle.js";
9
+ import { useGetVersions as n } from "../../synapse-queries/entity/useEntity.js";
10
+ import { useGetPortal as r } from "../../synapse-queries/portal/usePortal.js";
11
+ import { useGetCurrentUserProfile as i } from "../../synapse-queries/user/useUserBundle.js";
12
+ import { useCreateOrUpdateDOI as a, useGetDOI as ue } from "../../synapse-queries/doi/useDOI.js";
13
+ import { MarkdownPopover as de } from "../Markdown/MarkdownPopover.js";
14
+ import { DialogBase as fe } from "../DialogBase.js";
15
+ import { StyledFormControl as o } from "../styled/StyledFormControl.js";
16
16
  import pe from "../Dialog/ConfirmCloseWithoutSavingDialog.js";
17
17
  import { doiFormSchema as me, doiFormUiSchema as he } from "./DoiFormSchemas.js";
18
18
  import { PrivateEntityDoiWarning as ge } from "./PrivateEntityDoiWarning.js";
@@ -55,10 +55,10 @@ function E(u) {
55
55
  function I() {
56
56
  Te ? j(!0) : E();
57
57
  }
58
- let [L, R] = l(k), { data: Ee } = i(A, { enabled: !!A }), [z, B] = l({
58
+ let [L, R] = l(k), { data: Ee } = r(A, { enabled: !!A }), [z, B] = l({
59
59
  titles: [""],
60
60
  creators: [""]
61
- }), { data: V, isLoading: De } = a(), { data: H, isLoading: Oe } = n(O, L, {
61
+ }), { data: V, isLoading: De } = i(), { data: H, isLoading: Oe } = t(O, L, {
62
62
  includeEntity: !0,
63
63
  includeBenefactorACL: !0
64
64
  }, {
@@ -73,11 +73,12 @@ function E(u) {
73
73
  }, {
74
74
  staleTime: Infinity,
75
75
  throwOnError: !0
76
- }), G = ye(() => y && W === null && H?.benefactorAcl && U && !ve(H.benefactorAcl.resourceAccess, U), [
76
+ }), G = ye(() => D === v.ENTITY ? y && W === null && H?.benefactorAcl && U && !ve(H.benefactorAcl.resourceAccess, U) : !1, [
77
77
  y,
78
78
  W,
79
79
  H,
80
- U
80
+ U,
81
+ D
81
82
  ]);
82
83
  s(() => {
83
84
  y && !P.current && W !== void 0 && G !== void 0 ? (N(G ? "warning" : "form"), P.current = !0) : y || (N(null), P.current = !1);
@@ -86,7 +87,7 @@ function E(u) {
86
87
  y,
87
88
  W
88
89
  ]);
89
- let K = D === v.ENTITY && H?.entity && oe(H.entity), { data: q } = r(O, void 0, void 0, { enabled: K }), J = c(null), Y = re(H?.entityType ?? b.file), X = `A DOI can be associated with a specific version of this ${Y}.
90
+ let K = D === v.ENTITY && H?.entity && oe(H.entity), { data: q } = n(O, void 0, void 0, { enabled: K }), J = c(null), Y = re(H?.entityType ?? b.file), X = `A DOI can be associated with a specific version of this ${Y}.
90
91
 
91
92
  Versioned DOIs will link to the specified version of the ${Y}.
92
93
 
@@ -97,7 +98,7 @@ function E(u) {
97
98
  X += `\n\nTo create a DOI that will always link to the current set of data in the ${Y},
98
99
  create a new ${e} and mint a DOI for that ${e}.`;
99
100
  }
100
- let { mutate: je, isPending: Me, error: Z } = le({ onSuccess: () => {
101
+ let { mutate: je, isPending: Me, error: Z } = a({ onSuccess: () => {
101
102
  e("The DOI was successfully updated.", "success"), E();
102
103
  } }), Q = Me || De || Oe || Ae || ke, $ = !!(W && w(W));
103
104
  s(() => {
@@ -152,7 +153,7 @@ function E(u) {
152
153
  value: Ee?.name || "",
153
154
  disabled: !0
154
155
  }),
155
- K && /* @__PURE__ */ _(fe, {
156
+ K && /* @__PURE__ */ _(o, {
156
157
  className: "limit-type",
157
158
  fullWidth: !0,
158
159
  sx: { my: 2 },
@@ -164,7 +165,7 @@ function E(u) {
164
165
  justifyContent: "space-between",
165
166
  width: "100%"
166
167
  },
167
- children: [/* @__PURE__ */ g("span", { children: "Version" }), /* @__PURE__ */ g(o, {
168
+ children: [/* @__PURE__ */ g("span", { children: "Version" }), /* @__PURE__ */ g(de, {
168
169
  contentProps: { markdown: X },
169
170
  maxWidth: "350px",
170
171
  children: /* @__PURE__ */ g(x, { className: "HelpButton" })
@@ -234,11 +235,11 @@ function E(u) {
234
235
  onConfirm: () => {
235
236
  j(!1), E();
236
237
  }
237
- }), /* @__PURE__ */ g(de, {
238
+ }), /* @__PURE__ */ g(fe, {
238
239
  open: y,
239
240
  onCancel: I,
240
241
  title: M === "warning" ? "This page is private" : "Create or Update a DOI",
241
- content: M ? /* @__PURE__ */ _(h, { children: [M === "warning" && /* @__PURE__ */ g(ge, {}), M === "form" && Pe] }) : /* @__PURE__ */ g(t, {}),
242
+ content: M ? /* @__PURE__ */ _(h, { children: [M === "warning" && /* @__PURE__ */ g(ge, {}), M === "form" && Pe] }) : /* @__PURE__ */ g(le, {}),
242
243
  actions: /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(f, {
243
244
  variant: "outlined",
244
245
  disabled: Q,
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrUpdateDoiModal.js","names":[],"sources":["../../../src/components/doi/CreateOrUpdateDoiModal.tsx"],"sourcesContent":["import ConfirmCloseWithoutSavingDialog from '@/components/Dialog/ConfirmCloseWithoutSavingDialog'\nimport { DialogBase } from '@/components/DialogBase'\nimport { doiFormSchema, doiFormUiSchema } from '@/components/doi/DoiFormSchemas'\nimport { PrivateEntityDoiWarning } from '@/components/doi/PrivateEntityDoiWarning'\nimport { JsonSchemaForm } from '@/components/JsonSchemaForm/JsonSchemaForm'\nimport { MarkdownPopover } from '@/components/Markdown/MarkdownPopover'\nimport { StyledFormControl } from '@/components/styled/StyledFormControl'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport { useCreateOrUpdateDOI, useGetDOI } from '@/synapse-queries/doi/useDOI'\nimport { useGetVersions } from '@/synapse-queries/entity/useEntity'\nimport { useGetEntityBundle } from '@/synapse-queries/entity/useEntityBundle'\nimport { useGetPortal } from '@/synapse-queries/portal/usePortal'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport { useGetCurrentUserProfile } from '@/synapse-queries/user/useUserBundle'\nimport { useGlobalIsEditingContext } from '@/utils/context/GlobalIsEditingContext'\nimport { isEntityPublic } from '@/utils/functions/AccessControlListUtils'\nimport {\n entityTypeToFriendlyName,\n isDataset,\n isTable,\n isVersionableEntity,\n} from '@/utils/functions/EntityTypeUtils'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { DATA_CATALOG_PATH_SEGMENT } from '@/utils/SynapseConstants'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Button,\n InputLabel,\n Link,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from '@mui/material'\nimport RJSF from '@rjsf/core'\nimport {\n DoiObjectType,\n DoiResourceTypeGeneral,\n DoiResourceTypeResourceTypeGeneralEnum,\n EntityType,\n V2Doi,\n} from '@sage-bionetworks/synapse-client'\nimport { isEmpty } from 'lodash-es'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\n\ntype CreateOrUpdateDoiModalStep = 'warning' | 'form'\n\nexport type CreateOrUpdateDoiModalProps = {\n /** Whether the dialog is open */\n open: boolean\n /** Callback to call when the dialog is closed */\n onClose: () => void\n /** The type of object */\n objectType: DoiObjectType\n /** The ID of the object */\n objectId: string\n /** The optional version number of the object used to populate the form. */\n defaultVersionNumber?: number\n /** If minting a DOI for a portal, the ID of the portal object in Synapse */\n portalId?: string\n}\n\ntype DoiFormData = {\n titles?: string[]\n creators?: string[]\n resourceTypeGeneral?: DoiResourceTypeResourceTypeGeneralEnum\n publicationYear?: number\n}\n\nfunction getSuggestedResourceTypeGeneral(\n type: EntityType,\n): DoiResourceTypeGeneral {\n if (type === EntityType.project || type === EntityType.folder) {\n return DoiResourceTypeGeneral.Collection\n } else {\n return DoiResourceTypeGeneral.Dataset\n }\n}\n\nfunction convertDoiToFormData(doi: V2Doi): DoiFormData {\n return {\n titles: (doi.titles || []).map(title => title.title!),\n creators: (doi.creators || []).map(creator => creator.creatorName!),\n resourceTypeGeneral: doi.resourceType?.resourceTypeGeneral,\n publicationYear: doi.publicationYear,\n }\n}\n\n/**\n * Returns true if the DOI has fields that are not exposed in the UI, so we can let the user know that any changes\n * may be destructive to hidden fields.\n */\nfunction getWasModifiedViaAPI(doi: V2Doi) {\n if (doi.creators?.some(creator => !isEmpty(creator.nameIdentifiers))) {\n return true\n }\n return false\n}\n\nfunction convertFormDataToDoi(formData: DoiFormData): V2Doi {\n return {\n titles: formData.titles?.map(title => ({ title })) || [],\n creators:\n formData.creators?.map(creator => ({ creatorName: creator })) || [],\n resourceType: {\n resourceTypeGeneral: formData.resourceTypeGeneral,\n },\n publicationYear: formData.publicationYear,\n }\n}\n\nexport function CreateOrUpdateDoiModal(props: CreateOrUpdateDoiModalProps) {\n const {\n open,\n onClose,\n objectType,\n objectId,\n defaultVersionNumber,\n portalId,\n } = props\n\n const [showConfirmCloseModal, setShowConfirmCloseDialog] = useState(false)\n const [currentStep, setCurrentStep] =\n useState<CreateOrUpdateDoiModalStep | null>(null)\n const hasSetInitialStepForThisSession = useRef(false)\n const { isEditing, setIsEditing } = useGlobalIsEditingContext()\n useEffect(() => {\n setIsEditing(open)\n\n return () => {\n setIsEditing(false)\n }\n }, [open, setIsEditing])\n\n function handleClose() {\n if (isEditing) {\n setShowConfirmCloseDialog(true)\n } else {\n onClose()\n }\n }\n\n const [selectedVersionNumber, setSelectedVersionNumber] =\n useState(defaultVersionNumber)\n\n const { data: portal } = useGetPortal(portalId!, {\n enabled: Boolean(portalId),\n })\n\n const [formData, setFormData] = useState<DoiFormData>({\n titles: [''],\n creators: [''],\n })\n const { data: currentUser, isLoading: isLoadingCurrentUser } =\n useGetCurrentUserProfile()\n const { data: entityBundle, isLoading: isLoadingEntity } = useGetEntityBundle(\n objectId,\n selectedVersionNumber,\n {\n includeEntity: true,\n includeBenefactorACL: true,\n },\n {\n enabled: objectType === DoiObjectType.ENTITY,\n staleTime: Infinity,\n throwOnError: true,\n },\n )\n const { data: realmPrincipals, isLoading: isLoadingRealmPrincipals } =\n useGetRealmPrincipals()\n const { data: doi, isLoading: isLoadingDoi } = useGetDOI(\n {\n id: objectId,\n version: selectedVersionNumber,\n type: objectType,\n portalId: portalId,\n },\n {\n staleTime: Infinity,\n throwOnError: true,\n },\n )\n\n const shouldShowWarning = useMemo(() => {\n return (\n open &&\n doi === null && // Creating new DOI\n entityBundle?.benefactorAcl &&\n realmPrincipals &&\n !isEntityPublic(\n entityBundle.benefactorAcl.resourceAccess,\n realmPrincipals,\n )\n )\n }, [open, doi, entityBundle, realmPrincipals])\n\n useEffect(() => {\n if (\n open &&\n !hasSetInitialStepForThisSession.current &&\n doi !== undefined && // Wait for DOI query to resolve before determining step\n shouldShowWarning !== undefined\n ) {\n const newStep = shouldShowWarning ? 'warning' : 'form'\n setCurrentStep(newStep)\n hasSetInitialStepForThisSession.current = true\n } else if (!open) {\n setCurrentStep(null)\n hasSetInitialStepForThisSession.current = false\n }\n }, [shouldShowWarning, open, doi])\n\n const doiCanBeAppliedToVersion =\n objectType === DoiObjectType.ENTITY &&\n entityBundle?.entity &&\n isVersionableEntity(entityBundle.entity)\n\n const { data: entityVersions } = useGetVersions(\n objectId,\n undefined,\n undefined,\n {\n enabled: doiCanBeAppliedToVersion,\n },\n )\n const formRef = useRef<RJSF>(null)\n\n const entityType = entityBundle?.entityType ?? EntityType.file\n const entityTypeDisplay = entityTypeToFriendlyName(entityType)\n let versionHelpMarkdown = `A DOI can be associated with a specific version of this ${entityTypeDisplay}.\n \n Versioned DOIs will link to the specified version of the ${entityTypeDisplay}.\n \n A DOI without a version will always link to the newest version of this ${entityTypeDisplay},\n so the data that someone retrieves using the DOI may change over time.`\n if (entityBundle?.entity && isTable(entityBundle.entity)) {\n const tableVersionCopy = isDataset(entityBundle.entity)\n ? 'version'\n : 'snapshot'\n versionHelpMarkdown += `\\n\\nTo create a DOI that will always link to the current set of data in the ${entityTypeDisplay},\n create a new ${tableVersionCopy} and mint a DOI for that ${tableVersionCopy}.`\n }\n\n const {\n mutate: createOrUpdateDoi,\n isPending: updateIsPending,\n error: updateDoiError,\n } = useCreateOrUpdateDOI({\n onSuccess: () => {\n displayToast('The DOI was successfully updated.', 'success')\n onClose()\n },\n })\n\n const isLoading =\n updateIsPending ||\n isLoadingCurrentUser ||\n isLoadingEntity ||\n isLoadingDoi ||\n isLoadingRealmPrincipals\n\n const wasModifiedViaAPI = Boolean(doi && getWasModifiedViaAPI(doi))\n\n useEffect(() => {\n if (doi) {\n setFormData(convertDoiToFormData(doi))\n }\n // If there is no DOI, then pre-fill the form.\n if (currentUser && entityBundle?.entity && doi === null) {\n const newFormData = {\n titles: [entityBundle.entity.name],\n creators: new Array<string>(),\n resourceTypeGeneral: getSuggestedResourceTypeGeneral(\n entityBundle.entityType,\n ),\n publicationYear: new Date().getFullYear(),\n } satisfies DoiFormData\n if (currentUser.lastName && currentUser.firstName) {\n newFormData.creators.push(\n `${currentUser.lastName}, ${currentUser.firstName}`,\n )\n }\n setFormData(newFormData)\n }\n }, [currentUser, doi, entityBundle])\n\n function onSave() {\n if (formRef.current && formRef.current.validateForm()) {\n const requestDoi: V2Doi = convertFormDataToDoi(formData)\n requestDoi.objectType = objectType\n requestDoi.objectId = objectId\n requestDoi.objectVersion = selectedVersionNumber\n requestDoi.etag = doi?.etag\n requestDoi.portalId = portalId\n createOrUpdateDoi({\n doi: requestDoi,\n concreteType: 'org.sagebionetworks.repo.model.doi.v2.DoiRequest',\n })\n }\n }\n\n const dialogContent = (\n <>\n <Typography variant={'body1'} gutterBottom>\n Minting a DOI allows you to credit contributors and makes it easy to\n cite your work.\n </Typography>\n <Typography variant={'body1'} gutterBottom sx={{ mb: 2 }}>\n Note that while the DOI and its associated metadata will be publicly\n visible outside of Synapse, your data will still adhere to its existing\n access conditions. If your data is private, it will remain restricted,\n but the DOI will still be listed. Resources with DOIs may be added to\n the{' '}\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}${DATA_CATALOG_PATH_SEGMENT}`}\n target=\"_blank\"\n rel=\"noopener\"\n >\n Synapse Data Catalog\n </Link>\n .\n </Typography>\n {portalId && (\n <TextField\n label={'Publisher'}\n fullWidth\n value={portal?.name || ''}\n disabled\n />\n )}\n {doiCanBeAppliedToVersion && (\n <StyledFormControl className=\"limit-type\" fullWidth sx={{ my: 2 }}>\n <InputLabel\n htmlFor=\"doi-version-select\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <span>Version</span>\n <MarkdownPopover\n contentProps={{ markdown: versionHelpMarkdown }}\n maxWidth=\"350px\"\n >\n <HelpTwoTone className={`HelpButton`} />\n </MarkdownPopover>\n </InputLabel>\n <Select\n id=\"doi-version-select\"\n value={selectedVersionNumber ?? -1}\n onChange={e => {\n if (e.target.value === -1) {\n setSelectedVersionNumber(undefined)\n } else {\n setSelectedVersionNumber(e.target.value)\n }\n }}\n >\n <MenuItem value={-1}>No version</MenuItem>\n {entityVersions &&\n entityVersions.results.map(version => (\n <MenuItem\n key={version.versionNumber}\n value={version.versionNumber}\n >\n Version {version.versionNumber}\n {/* display the version label if it exists & is different from the number itself */}\n {version.versionLabel &&\n version.versionLabel !== String(version.versionNumber)\n ? ` / ${version.versionLabel}`\n : ''}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n )}\n <div className=\"JsonSchemaFormContainer\">\n <JsonSchemaForm\n formRef={formRef}\n disabled={isLoading || wasModifiedViaAPI}\n schema={doiFormSchema}\n formData={formData}\n onChange={e => {\n setFormData(e.formData)\n }}\n uiSchema={doiFormUiSchema}\n showErrorList={false}\n />\n </div>\n {doi && (\n <Alert severity={'warning'}>\n <Typography variant={'body1'}>\n A DOI has already been created. Updating the DOI information will\n cause old information to be lost!\n </Typography>\n </Alert>\n )}\n {wasModifiedViaAPI && (\n <Alert severity={'warning'} sx={{ my: 1 }}>\n <Typography variant={'body1'}>\n The metadata for this DOI was modified using a programmatic client,\n so data may be hidden from this view. Any changes may result in\n metadata being lost.\n </Typography>\n </Alert>\n )}\n {updateDoiError && (\n <Alert severity={'error'} sx={{ mt: 1 }}>\n <Typography variant={'body1'}>{updateDoiError.message}</Typography>\n </Alert>\n )}\n </>\n )\n\n const dialogActions = (\n <>\n <Button variant=\"outlined\" disabled={isLoading} onClick={handleClose}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n disabled={isLoading}\n onClick={\n currentStep === 'warning'\n ? () => setCurrentStep('form')\n : e => {\n // SWC-7055 - The default action may trigger `beforeunload` and erroneously warn the user about leaving the page.\n e.preventDefault()\n onSave()\n }\n }\n >\n {currentStep === 'warning' ? 'Continue' : 'Save'}\n </Button>\n </>\n )\n\n return (\n <>\n <ConfirmCloseWithoutSavingDialog\n open={showConfirmCloseModal}\n onCancel={() => {\n setShowConfirmCloseDialog(false)\n }}\n onConfirm={() => {\n setShowConfirmCloseDialog(false)\n onClose()\n }}\n />\n <DialogBase\n open={open}\n onCancel={handleClose}\n title={\n currentStep === 'warning'\n ? 'This page is private'\n : 'Create or Update a DOI'\n }\n content={\n !currentStep ? (\n <SynapseSpinner />\n ) : (\n <>\n {currentStep === 'warning' && <PrivateEntityDoiWarning />}\n {currentStep === 'form' && dialogContent}\n </>\n )\n }\n actions={dialogActions}\n />\n </>\n )\n}\n\nexport default CreateOrUpdateDoiModal\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateOrUpdateDoiModal.js","names":[],"sources":["../../../src/components/doi/CreateOrUpdateDoiModal.tsx"],"sourcesContent":["import ConfirmCloseWithoutSavingDialog from '@/components/Dialog/ConfirmCloseWithoutSavingDialog'\nimport { DialogBase } from '@/components/DialogBase'\nimport { doiFormSchema, doiFormUiSchema } from '@/components/doi/DoiFormSchemas'\nimport { PrivateEntityDoiWarning } from '@/components/doi/PrivateEntityDoiWarning'\nimport { JsonSchemaForm } from '@/components/JsonSchemaForm/JsonSchemaForm'\nimport { MarkdownPopover } from '@/components/Markdown/MarkdownPopover'\nimport { StyledFormControl } from '@/components/styled/StyledFormControl'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport { useCreateOrUpdateDOI, useGetDOI } from '@/synapse-queries/doi/useDOI'\nimport { useGetVersions } from '@/synapse-queries/entity/useEntity'\nimport { useGetEntityBundle } from '@/synapse-queries/entity/useEntityBundle'\nimport { useGetPortal } from '@/synapse-queries/portal/usePortal'\nimport { useGetRealmPrincipals } from '@/synapse-queries/realm/useRealmPrincipals'\nimport { useGetCurrentUserProfile } from '@/synapse-queries/user/useUserBundle'\nimport { useGlobalIsEditingContext } from '@/utils/context/GlobalIsEditingContext'\nimport { isEntityPublic } from '@/utils/functions/AccessControlListUtils'\nimport {\n entityTypeToFriendlyName,\n isDataset,\n isTable,\n isVersionableEntity,\n} from '@/utils/functions/EntityTypeUtils'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { DATA_CATALOG_PATH_SEGMENT } from '@/utils/SynapseConstants'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Button,\n InputLabel,\n Link,\n MenuItem,\n Select,\n TextField,\n Typography,\n} from '@mui/material'\nimport RJSF from '@rjsf/core'\nimport {\n DoiObjectType,\n DoiResourceTypeGeneral,\n DoiResourceTypeResourceTypeGeneralEnum,\n EntityType,\n V2Doi,\n} from '@sage-bionetworks/synapse-client'\nimport { isEmpty } from 'lodash-es'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\n\ntype CreateOrUpdateDoiModalStep = 'warning' | 'form'\n\nexport type CreateOrUpdateDoiModalProps = {\n /** Whether the dialog is open */\n open: boolean\n /** Callback to call when the dialog is closed */\n onClose: () => void\n /** The type of object */\n objectType: DoiObjectType\n /** The ID of the object */\n objectId: string\n /** The optional version number of the object used to populate the form. */\n defaultVersionNumber?: number\n /** If minting a DOI for a portal, the ID of the portal object in Synapse */\n portalId?: string\n}\n\ntype DoiFormData = {\n titles?: string[]\n creators?: string[]\n resourceTypeGeneral?: DoiResourceTypeResourceTypeGeneralEnum\n publicationYear?: number\n}\n\nfunction getSuggestedResourceTypeGeneral(\n type: EntityType,\n): DoiResourceTypeGeneral {\n if (type === EntityType.project || type === EntityType.folder) {\n return DoiResourceTypeGeneral.Collection\n } else {\n return DoiResourceTypeGeneral.Dataset\n }\n}\n\nfunction convertDoiToFormData(doi: V2Doi): DoiFormData {\n return {\n titles: (doi.titles || []).map(title => title.title!),\n creators: (doi.creators || []).map(creator => creator.creatorName!),\n resourceTypeGeneral: doi.resourceType?.resourceTypeGeneral,\n publicationYear: doi.publicationYear,\n }\n}\n\n/**\n * Returns true if the DOI has fields that are not exposed in the UI, so we can let the user know that any changes\n * may be destructive to hidden fields.\n */\nfunction getWasModifiedViaAPI(doi: V2Doi) {\n if (doi.creators?.some(creator => !isEmpty(creator.nameIdentifiers))) {\n return true\n }\n return false\n}\n\nfunction convertFormDataToDoi(formData: DoiFormData): V2Doi {\n return {\n titles: formData.titles?.map(title => ({ title })) || [],\n creators:\n formData.creators?.map(creator => ({ creatorName: creator })) || [],\n resourceType: {\n resourceTypeGeneral: formData.resourceTypeGeneral,\n },\n publicationYear: formData.publicationYear,\n }\n}\n\nexport function CreateOrUpdateDoiModal(props: CreateOrUpdateDoiModalProps) {\n const {\n open,\n onClose,\n objectType,\n objectId,\n defaultVersionNumber,\n portalId,\n } = props\n\n const [showConfirmCloseModal, setShowConfirmCloseDialog] = useState(false)\n const [currentStep, setCurrentStep] =\n useState<CreateOrUpdateDoiModalStep | null>(null)\n const hasSetInitialStepForThisSession = useRef(false)\n const { isEditing, setIsEditing } = useGlobalIsEditingContext()\n useEffect(() => {\n setIsEditing(open)\n\n return () => {\n setIsEditing(false)\n }\n }, [open, setIsEditing])\n\n function handleClose() {\n if (isEditing) {\n setShowConfirmCloseDialog(true)\n } else {\n onClose()\n }\n }\n\n const [selectedVersionNumber, setSelectedVersionNumber] =\n useState(defaultVersionNumber)\n\n const { data: portal } = useGetPortal(portalId!, {\n enabled: Boolean(portalId),\n })\n\n const [formData, setFormData] = useState<DoiFormData>({\n titles: [''],\n creators: [''],\n })\n const { data: currentUser, isLoading: isLoadingCurrentUser } =\n useGetCurrentUserProfile()\n const { data: entityBundle, isLoading: isLoadingEntity } = useGetEntityBundle(\n objectId,\n selectedVersionNumber,\n {\n includeEntity: true,\n includeBenefactorACL: true,\n },\n {\n enabled: objectType === DoiObjectType.ENTITY,\n staleTime: Infinity,\n throwOnError: true,\n },\n )\n const { data: realmPrincipals, isLoading: isLoadingRealmPrincipals } =\n useGetRealmPrincipals()\n const { data: doi, isLoading: isLoadingDoi } = useGetDOI(\n {\n id: objectId,\n version: selectedVersionNumber,\n type: objectType,\n portalId: portalId,\n },\n {\n staleTime: Infinity,\n throwOnError: true,\n },\n )\n\n const shouldShowWarning = useMemo(() => {\n if (objectType !== DoiObjectType.ENTITY) {\n return false\n }\n return (\n open &&\n doi === null && // Creating new DOI\n entityBundle?.benefactorAcl &&\n realmPrincipals &&\n !isEntityPublic(\n entityBundle.benefactorAcl.resourceAccess,\n realmPrincipals,\n )\n )\n }, [open, doi, entityBundle, realmPrincipals, objectType])\n\n useEffect(() => {\n if (\n open &&\n !hasSetInitialStepForThisSession.current &&\n doi !== undefined && // Wait for DOI query to resolve before determining step\n shouldShowWarning !== undefined\n ) {\n const newStep = shouldShowWarning ? 'warning' : 'form'\n setCurrentStep(newStep)\n hasSetInitialStepForThisSession.current = true\n } else if (!open) {\n setCurrentStep(null)\n hasSetInitialStepForThisSession.current = false\n }\n }, [shouldShowWarning, open, doi])\n\n const doiCanBeAppliedToVersion =\n objectType === DoiObjectType.ENTITY &&\n entityBundle?.entity &&\n isVersionableEntity(entityBundle.entity)\n\n const { data: entityVersions } = useGetVersions(\n objectId,\n undefined,\n undefined,\n {\n enabled: doiCanBeAppliedToVersion,\n },\n )\n const formRef = useRef<RJSF>(null)\n\n const entityType = entityBundle?.entityType ?? EntityType.file\n const entityTypeDisplay = entityTypeToFriendlyName(entityType)\n let versionHelpMarkdown = `A DOI can be associated with a specific version of this ${entityTypeDisplay}.\n \n Versioned DOIs will link to the specified version of the ${entityTypeDisplay}.\n \n A DOI without a version will always link to the newest version of this ${entityTypeDisplay},\n so the data that someone retrieves using the DOI may change over time.`\n if (entityBundle?.entity && isTable(entityBundle.entity)) {\n const tableVersionCopy = isDataset(entityBundle.entity)\n ? 'version'\n : 'snapshot'\n versionHelpMarkdown += `\\n\\nTo create a DOI that will always link to the current set of data in the ${entityTypeDisplay},\n create a new ${tableVersionCopy} and mint a DOI for that ${tableVersionCopy}.`\n }\n\n const {\n mutate: createOrUpdateDoi,\n isPending: updateIsPending,\n error: updateDoiError,\n } = useCreateOrUpdateDOI({\n onSuccess: () => {\n displayToast('The DOI was successfully updated.', 'success')\n onClose()\n },\n })\n\n const isLoading =\n updateIsPending ||\n isLoadingCurrentUser ||\n isLoadingEntity ||\n isLoadingDoi ||\n isLoadingRealmPrincipals\n\n const wasModifiedViaAPI = Boolean(doi && getWasModifiedViaAPI(doi))\n\n useEffect(() => {\n if (doi) {\n setFormData(convertDoiToFormData(doi))\n }\n // If there is no DOI, then pre-fill the form.\n if (currentUser && entityBundle?.entity && doi === null) {\n const newFormData = {\n titles: [entityBundle.entity.name],\n creators: new Array<string>(),\n resourceTypeGeneral: getSuggestedResourceTypeGeneral(\n entityBundle.entityType,\n ),\n publicationYear: new Date().getFullYear(),\n } satisfies DoiFormData\n if (currentUser.lastName && currentUser.firstName) {\n newFormData.creators.push(\n `${currentUser.lastName}, ${currentUser.firstName}`,\n )\n }\n setFormData(newFormData)\n }\n }, [currentUser, doi, entityBundle])\n\n function onSave() {\n if (formRef.current && formRef.current.validateForm()) {\n const requestDoi: V2Doi = convertFormDataToDoi(formData)\n requestDoi.objectType = objectType\n requestDoi.objectId = objectId\n requestDoi.objectVersion = selectedVersionNumber\n requestDoi.etag = doi?.etag\n requestDoi.portalId = portalId\n createOrUpdateDoi({\n doi: requestDoi,\n concreteType: 'org.sagebionetworks.repo.model.doi.v2.DoiRequest',\n })\n }\n }\n\n const dialogContent = (\n <>\n <Typography variant={'body1'} gutterBottom>\n Minting a DOI allows you to credit contributors and makes it easy to\n cite your work.\n </Typography>\n <Typography variant={'body1'} gutterBottom sx={{ mb: 2 }}>\n Note that while the DOI and its associated metadata will be publicly\n visible outside of Synapse, your data will still adhere to its existing\n access conditions. If your data is private, it will remain restricted,\n but the DOI will still be listed. Resources with DOIs may be added to\n the{' '}\n <Link\n href={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}${DATA_CATALOG_PATH_SEGMENT}`}\n target=\"_blank\"\n rel=\"noopener\"\n >\n Synapse Data Catalog\n </Link>\n .\n </Typography>\n {portalId && (\n <TextField\n label={'Publisher'}\n fullWidth\n value={portal?.name || ''}\n disabled\n />\n )}\n {doiCanBeAppliedToVersion && (\n <StyledFormControl className=\"limit-type\" fullWidth sx={{ my: 2 }}>\n <InputLabel\n htmlFor=\"doi-version-select\"\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n }}\n >\n <span>Version</span>\n <MarkdownPopover\n contentProps={{ markdown: versionHelpMarkdown }}\n maxWidth=\"350px\"\n >\n <HelpTwoTone className={`HelpButton`} />\n </MarkdownPopover>\n </InputLabel>\n <Select\n id=\"doi-version-select\"\n value={selectedVersionNumber ?? -1}\n onChange={e => {\n if (e.target.value === -1) {\n setSelectedVersionNumber(undefined)\n } else {\n setSelectedVersionNumber(e.target.value)\n }\n }}\n >\n <MenuItem value={-1}>No version</MenuItem>\n {entityVersions &&\n entityVersions.results.map(version => (\n <MenuItem\n key={version.versionNumber}\n value={version.versionNumber}\n >\n Version {version.versionNumber}\n {/* display the version label if it exists & is different from the number itself */}\n {version.versionLabel &&\n version.versionLabel !== String(version.versionNumber)\n ? ` / ${version.versionLabel}`\n : ''}\n </MenuItem>\n ))}\n </Select>\n </StyledFormControl>\n )}\n <div className=\"JsonSchemaFormContainer\">\n <JsonSchemaForm\n formRef={formRef}\n disabled={isLoading || wasModifiedViaAPI}\n schema={doiFormSchema}\n formData={formData}\n onChange={e => {\n setFormData(e.formData)\n }}\n uiSchema={doiFormUiSchema}\n showErrorList={false}\n />\n </div>\n {doi && (\n <Alert severity={'warning'}>\n <Typography variant={'body1'}>\n A DOI has already been created. Updating the DOI information will\n cause old information to be lost!\n </Typography>\n </Alert>\n )}\n {wasModifiedViaAPI && (\n <Alert severity={'warning'} sx={{ my: 1 }}>\n <Typography variant={'body1'}>\n The metadata for this DOI was modified using a programmatic client,\n so data may be hidden from this view. Any changes may result in\n metadata being lost.\n </Typography>\n </Alert>\n )}\n {updateDoiError && (\n <Alert severity={'error'} sx={{ mt: 1 }}>\n <Typography variant={'body1'}>{updateDoiError.message}</Typography>\n </Alert>\n )}\n </>\n )\n\n const dialogActions = (\n <>\n <Button variant=\"outlined\" disabled={isLoading} onClick={handleClose}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n disabled={isLoading}\n onClick={\n currentStep === 'warning'\n ? () => setCurrentStep('form')\n : e => {\n // SWC-7055 - The default action may trigger `beforeunload` and erroneously warn the user about leaving the page.\n e.preventDefault()\n onSave()\n }\n }\n >\n {currentStep === 'warning' ? 'Continue' : 'Save'}\n </Button>\n </>\n )\n\n return (\n <>\n <ConfirmCloseWithoutSavingDialog\n open={showConfirmCloseModal}\n onCancel={() => {\n setShowConfirmCloseDialog(false)\n }}\n onConfirm={() => {\n setShowConfirmCloseDialog(false)\n onClose()\n }}\n />\n <DialogBase\n open={open}\n onCancel={handleClose}\n title={\n currentStep === 'warning'\n ? 'This page is private'\n : 'Create or Update a DOI'\n }\n content={\n !currentStep ? (\n <SynapseSpinner />\n ) : (\n <>\n {currentStep === 'warning' && <PrivateEntityDoiWarning />}\n {currentStep === 'form' && dialogContent}\n </>\n )\n }\n actions={dialogActions}\n />\n </>\n )\n}\n\nexport default CreateOrUpdateDoiModal\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTasksTableAssigneeCell.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAK7D,MAAM,MAAM,mCAAmC,GAAG;IAChD,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,8BAA8B,CACpD,KAAK,EAAE,mCAAmC,2CAwH3C"}
1
+ {"version":3,"file":"MetadataTasksTableAssigneeCell.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAK7D,MAAM,MAAM,mCAAmC,GAAG;IAChD,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,8BAA8B,CACpD,KAAK,EAAE,mCAAmC,2CA0H3C"}
@@ -39,7 +39,7 @@ function _(_) {
39
39
  /* @__PURE__ */ p(f, {
40
40
  variant: "body1",
41
41
  gutterBottom: !0,
42
- children: "Assign this task to a team or an individual user. All members of a team will be able to collaborate in the same Curator session."
42
+ children: "Use the Assignee field to organize work by assigning a task to a specific person or team. This field is only for task organization and filtering. It does not control project access or permission levels."
43
43
  }),
44
44
  /* @__PURE__ */ p(r, {
45
45
  defaultValue: x,
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTasksTableAssigneeCell.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport UserOrTeamBadge from '@/components/UserOrTeamBadge/UserOrTeamBadge'\nimport UserSearchBox from '@/components/UserSearchBox/UserSearchBox'\nimport { displayToast } from '@/index'\nimport { useUpdateCurationTask } from '@/synapse-queries/curation/task/useCurationTask'\nimport { EditTwoTone } from '@mui/icons-material'\nimport { Alert, Box, IconButton, Stack, Typography } from '@mui/material'\nimport { TaskBundle } from '@sage-bionetworks/synapse-client'\nimport { TYPE_FILTER } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useState } from 'react'\nimport taskHasAssignee from '../utils/taskHasAssignee'\n\nexport type MetadataTasksTableAssigneeCellProps = {\n taskBundle: TaskBundle\n canEdit: boolean\n}\n\nexport default function MetadataTasksTableAssigneeCell(\n props: MetadataTasksTableAssigneeCellProps,\n) {\n const { taskBundle, canEdit } = props\n const curationTask = taskBundle.task!\n const { assigneePrincipalId } = curationTask\n const [showUserPicker, setShowUserPicker] = useState(false)\n const [selectedPrincipalId, setSelectedPrincipalId] = useState<string | null>(\n assigneePrincipalId ?? null,\n )\n const [isHoveringOnCell, setIsHoveringOnCell] = useState(false)\n\n const { mutateAsync: updateCurationTask, isPending: updateTaskIsPending } =\n useUpdateCurationTask({\n onError: error => {\n displayToast('Error updating task assignee: ' + error.message, 'danger')\n },\n })\n\n let assigneeDisplay = (\n <Box\n component=\"span\"\n sx={{ flexGrow: 1, fontStyle: 'italic', color: 'grey.700' }}\n >\n Unassigned\n </Box>\n )\n\n const hasAssignee = taskHasAssignee(curationTask)\n if (hasAssignee) {\n assigneeDisplay = <UserOrTeamBadge principalId={assigneePrincipalId} />\n }\n\n const onConfirmUpdateAssignee = useCallback(\n async (assigneeId: string | undefined) => {\n await updateCurationTask({\n ...curationTask,\n assigneePrincipalId: assigneeId,\n })\n setShowUserPicker(false)\n },\n [curationTask, updateCurationTask],\n )\n\n const editDialog = (\n <ConfirmationDialog\n title=\"Set Assignee\"\n open={showUserPicker}\n content={\n <Stack gap={2}>\n <Typography variant=\"body1\" gutterBottom>\n Assign this task to a team or an individual user. All members of a\n team will be able to collaborate in the same Curator session.\n </Typography>\n <UserSearchBox\n key={showUserPicker.toString()}\n defaultValue={assigneePrincipalId}\n onChange={principalId => setSelectedPrincipalId(principalId)}\n typeFilter={TYPE_FILTER.ALL}\n />\n {taskBundle.status?.executionDetails?.activeSessionId && (\n <Alert severity=\"warning\">\n This task has an active Curator session. If you change the\n assignee, these effects could happen:\n <ul>\n <li>\n Current assignee(s) may lose access to the session, unsaved\n changes will be lost, and they may not be able to complete\n their work.\n </li>\n <li>\n New assignee(s) may not have permission to access the current\n session\n </li>\n </ul>\n To avoid these issues, a data manager should create a new task.\n </Alert>\n )}\n </Stack>\n }\n confirmButtonProps={{\n children: 'Save',\n loading: updateTaskIsPending,\n }}\n onConfirm={() => {\n onConfirmUpdateAssignee(selectedPrincipalId ?? undefined)\n }}\n onCancel={() => setShowUserPicker(false)}\n />\n )\n\n const editButton = (\n <div>\n <IconButton\n aria-label=\"Edit assignee\"\n size=\"small\"\n onClick={() => setShowUserPicker(true)}\n >\n <EditTwoTone fontSize=\"inherit\" />\n </IconButton>\n </div>\n )\n\n return (\n <Stack\n direction={'row'}\n alignItems={'center'}\n justifyContent={'space-between'}\n spacing={1}\n onMouseOver={() => {\n setIsHoveringOnCell(true)\n }}\n onMouseLeave={() => {\n setIsHoveringOnCell(false)\n }}\n >\n <span style={{ overflow: 'hidden' }}>{assigneeDisplay}</span>\n {isHoveringOnCell && canEdit && editButton}\n {editDialog}\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,eAAY,GAC1B,IAAe,EAAW,MAC1B,EAAE,2BAAwB,GAC1B,CAAC,GAAgB,KAAqB,EAAS,GAAM,EACrD,CAAC,GAAqB,KAA0B,EACpD,KAAuB,KACxB,EACK,CAAC,GAAkB,KAAuB,EAAS,GAAM,EAEzD,EAAE,aAAa,GAAoB,WAAW,MAClD,EAAsB,EACpB,UAAS,MAAS;AAChB,IAAa,mCAAmC,EAAM,SAAS,SAAS;IAE3E,CAAC,EAEA,IACF,kBAAC,GAAD;EACE,WAAU;EACV,IAAI;GAAE,UAAU;GAAG,WAAW;GAAU,OAAO;GAAY;YAC5D;EAEK,CAAA;AAIR,CADoB,EAAgB,EAChC,KACF,IAAkB,kBAAC,GAAD,EAAiB,aAAa,GAAuB,CAAA;CAGzE,IAAM,IAA0B,EAC9B,OAAO,MAAmC;AAKxC,EAJA,MAAM,EAAmB;GACvB,GAAG;GACH,qBAAqB;GACtB,CAAC,EACF,EAAkB,GAAM;IAE1B,CAAC,GAAc,EAAmB,CACnC,EAEK,IACJ,kBAAC,GAAD;EACE,OAAM;EACN,MAAM;EACN,SACE,kBAAC,GAAD;GAAO,KAAK;aAAZ;IACE,kBAAC,GAAD;KAAY,SAAQ;KAAQ,cAAA;eAAa;KAG5B,CAAA;IACb,kBAAC,GAAD;KAEE,cAAc;KACd,WAAU,MAAe,EAAuB,EAAY;KAC5D,YAAY,EAAY;KACxB,EAJK,EAAe,UAAU,CAI9B;IACD,EAAW,QAAQ,kBAAkB,mBACpC,kBAAC,GAAD;KAAO,UAAS;eAAhB;MAA0B;MAGxB,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,MAAD,EAAA,UAAI,sIAIC,CAAA,EACL,kBAAC,MAAD,EAAA,UAAI,yEAGC,CAAA,CACF,EAAA,CAAA;;MAEC;;IAEJ;;EAEV,oBAAoB;GAClB,UAAU;GACV,SAAS;GACV;EACD,iBAAiB;AACf,KAAwB,KAAuB,KAAA,EAAU;;EAE3D,gBAAgB,EAAkB,GAAM;EACxC,CAAA;AAeJ,QACE,kBAAC,GAAD;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACT,mBAAmB;AACjB,KAAoB,GAAK;;EAE3B,oBAAoB;AAClB,KAAoB,GAAM;;YAT9B;GAYE,kBAAC,QAAD;IAAM,OAAO,EAAE,UAAU,UAAU;cAAG;IAAuB,CAAA;GAC5D,KAAoB,KAzBvB,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;IACE,cAAW;IACX,MAAK;IACL,eAAe,EAAkB,GAAK;cAEtC,kBAAC,GAAD,EAAa,UAAS,WAAY,CAAA;IACvB,CAAA,EACT,CAiB4B;GAC/B;GACK"}
1
+ {"version":3,"file":"MetadataTasksTableAssigneeCell.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport UserOrTeamBadge from '@/components/UserOrTeamBadge/UserOrTeamBadge'\nimport UserSearchBox from '@/components/UserSearchBox/UserSearchBox'\nimport { displayToast } from '@/index'\nimport { useUpdateCurationTask } from '@/synapse-queries/curation/task/useCurationTask'\nimport { EditTwoTone } from '@mui/icons-material'\nimport { Alert, Box, IconButton, Stack, Typography } from '@mui/material'\nimport { TaskBundle } from '@sage-bionetworks/synapse-client'\nimport { TYPE_FILTER } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useState } from 'react'\nimport taskHasAssignee from '../utils/taskHasAssignee'\n\nexport type MetadataTasksTableAssigneeCellProps = {\n taskBundle: TaskBundle\n canEdit: boolean\n}\n\nexport default function MetadataTasksTableAssigneeCell(\n props: MetadataTasksTableAssigneeCellProps,\n) {\n const { taskBundle, canEdit } = props\n const curationTask = taskBundle.task!\n const { assigneePrincipalId } = curationTask\n const [showUserPicker, setShowUserPicker] = useState(false)\n const [selectedPrincipalId, setSelectedPrincipalId] = useState<string | null>(\n assigneePrincipalId ?? null,\n )\n const [isHoveringOnCell, setIsHoveringOnCell] = useState(false)\n\n const { mutateAsync: updateCurationTask, isPending: updateTaskIsPending } =\n useUpdateCurationTask({\n onError: error => {\n displayToast('Error updating task assignee: ' + error.message, 'danger')\n },\n })\n\n let assigneeDisplay = (\n <Box\n component=\"span\"\n sx={{ flexGrow: 1, fontStyle: 'italic', color: 'grey.700' }}\n >\n Unassigned\n </Box>\n )\n\n const hasAssignee = taskHasAssignee(curationTask)\n if (hasAssignee) {\n assigneeDisplay = <UserOrTeamBadge principalId={assigneePrincipalId} />\n }\n\n const onConfirmUpdateAssignee = useCallback(\n async (assigneeId: string | undefined) => {\n await updateCurationTask({\n ...curationTask,\n assigneePrincipalId: assigneeId,\n })\n setShowUserPicker(false)\n },\n [curationTask, updateCurationTask],\n )\n\n const editDialog = (\n <ConfirmationDialog\n title=\"Set Assignee\"\n open={showUserPicker}\n content={\n <Stack gap={2}>\n <Typography variant=\"body1\" gutterBottom>\n Use the Assignee field to organize work by assigning a task to a\n specific person or team. This field is only for task organization\n and filtering. It does not control project access or permission\n levels.\n </Typography>\n <UserSearchBox\n key={showUserPicker.toString()}\n defaultValue={assigneePrincipalId}\n onChange={principalId => setSelectedPrincipalId(principalId)}\n typeFilter={TYPE_FILTER.ALL}\n />\n {taskBundle.status?.executionDetails?.activeSessionId && (\n <Alert severity=\"warning\">\n This task has an active Curator session. If you change the\n assignee, these effects could happen:\n <ul>\n <li>\n Current assignee(s) may lose access to the session, unsaved\n changes will be lost, and they may not be able to complete\n their work.\n </li>\n <li>\n New assignee(s) may not have permission to access the current\n session\n </li>\n </ul>\n To avoid these issues, a data manager should create a new task.\n </Alert>\n )}\n </Stack>\n }\n confirmButtonProps={{\n children: 'Save',\n loading: updateTaskIsPending,\n }}\n onConfirm={() => {\n onConfirmUpdateAssignee(selectedPrincipalId ?? undefined)\n }}\n onCancel={() => setShowUserPicker(false)}\n />\n )\n\n const editButton = (\n <div>\n <IconButton\n aria-label=\"Edit assignee\"\n size=\"small\"\n onClick={() => setShowUserPicker(true)}\n >\n <EditTwoTone fontSize=\"inherit\" />\n </IconButton>\n </div>\n )\n\n return (\n <Stack\n direction={'row'}\n alignItems={'center'}\n justifyContent={'space-between'}\n spacing={1}\n onMouseOver={() => {\n setIsHoveringOnCell(true)\n }}\n onMouseLeave={() => {\n setIsHoveringOnCell(false)\n }}\n >\n <span style={{ overflow: 'hidden' }}>{assigneeDisplay}</span>\n {isHoveringOnCell && canEdit && editButton}\n {editDialog}\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,eAAY,GAC1B,IAAe,EAAW,MAC1B,EAAE,2BAAwB,GAC1B,CAAC,GAAgB,KAAqB,EAAS,GAAM,EACrD,CAAC,GAAqB,KAA0B,EACpD,KAAuB,KACxB,EACK,CAAC,GAAkB,KAAuB,EAAS,GAAM,EAEzD,EAAE,aAAa,GAAoB,WAAW,MAClD,EAAsB,EACpB,UAAS,MAAS;AAChB,IAAa,mCAAmC,EAAM,SAAS,SAAS;IAE3E,CAAC,EAEA,IACF,kBAAC,GAAD;EACE,WAAU;EACV,IAAI;GAAE,UAAU;GAAG,WAAW;GAAU,OAAO;GAAY;YAC5D;EAEK,CAAA;AAIR,CADoB,EAAgB,EAChC,KACF,IAAkB,kBAAC,GAAD,EAAiB,aAAa,GAAuB,CAAA;CAGzE,IAAM,IAA0B,EAC9B,OAAO,MAAmC;AAKxC,EAJA,MAAM,EAAmB;GACvB,GAAG;GACH,qBAAqB;GACtB,CAAC,EACF,EAAkB,GAAM;IAE1B,CAAC,GAAc,EAAmB,CACnC,EAEK,IACJ,kBAAC,GAAD;EACE,OAAM;EACN,MAAM;EACN,SACE,kBAAC,GAAD;GAAO,KAAK;aAAZ;IACE,kBAAC,GAAD;KAAY,SAAQ;KAAQ,cAAA;eAAa;KAK5B,CAAA;IACb,kBAAC,GAAD;KAEE,cAAc;KACd,WAAU,MAAe,EAAuB,EAAY;KAC5D,YAAY,EAAY;KACxB,EAJK,EAAe,UAAU,CAI9B;IACD,EAAW,QAAQ,kBAAkB,mBACpC,kBAAC,GAAD;KAAO,UAAS;eAAhB;MAA0B;MAGxB,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,MAAD,EAAA,UAAI,sIAIC,CAAA,EACL,kBAAC,MAAD,EAAA,UAAI,yEAGC,CAAA,CACF,EAAA,CAAA;;MAEC;;IAEJ;;EAEV,oBAAoB;GAClB,UAAU;GACV,SAAS;GACV;EACD,iBAAiB;AACf,KAAwB,KAAuB,KAAA,EAAU;;EAE3D,gBAAgB,EAAkB,GAAM;EACxC,CAAA;AAeJ,QACE,kBAAC,GAAD;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,SAAS;EACT,mBAAmB;AACjB,KAAoB,GAAK;;EAE3B,oBAAoB;AAClB,KAAoB,GAAM;;YAT9B;GAYE,kBAAC,QAAD;IAAM,OAAO,EAAE,UAAU,UAAU;cAAG;IAAuB,CAAA;GAC5D,KAAoB,KAzBvB,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;IACE,cAAW;IACX,MAAK;IACL,eAAe,EAAkB,GAAK;cAEtC,kBAAC,GAAD,EAAa,UAAS,WAAY,CAAA;IACvB,CAAA,EACT,CAiB4B;GAC/B;GACK"}
@@ -95,6 +95,7 @@ export declare class KeyFactory {
95
95
  getRepliesQueryKey(threadId: string, ascending?: boolean, limit?: number, sort?: DiscussionReplyOrder, filter?: DiscussionFilter): readonly unknown[];
96
96
  getReplyQueryKey(threadId: string, replyId: string, messageKey: string): readonly unknown[];
97
97
  getThreadQueryKey(threadId: string): readonly unknown[];
98
+ getThreadForSubmissionQueryKey(submissionId: string | number): readonly unknown[];
98
99
  getThreadBodyQueryKey(threadId: string, messageKey: string): readonly unknown[];
99
100
  getMyOAuthClientsQueryKey(): readonly unknown[];
100
101
  getOAuthClientQueryKey(clientId: string): readonly unknown[];
@@ -1 +1 @@
1
- {"version":3,"file":"KeyFactory.d.ts","sourceRoot":"","sources":["../../src/synapse-queries/KeyFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeyFactory.d.ts","sourceRoot":"","sources":["../../src/synapse-queries/KeyFactory.ts"],"names":[],"mappings":"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"}
@@ -335,6 +335,9 @@ var i = {
335
335
  getThreadQueryKey(e) {
336
336
  return this.getKey("thread", e);
337
337
  }
338
+ getThreadForSubmissionQueryKey(e) {
339
+ return this.getKey("thread", "submission", e);
340
+ }
338
341
  getThreadBodyQueryKey(e, t) {
339
342
  return this.getKey("thread", e, t);
340
343
  }