synapse-react-client 4.0.33 → 4.0.35

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 (179) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/assets/icons/curie-head.svg +21 -0
  3. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +29 -3
  4. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  5. package/dist/components/AccessRequirementList/AccessRequirementList.js +153 -84
  6. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  7. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js +1 -0
  8. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts +1 -0
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +49 -42
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts +6 -0
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +161 -155
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +21 -0
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -0
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +164 -0
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -0
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +22 -0
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -0
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +264 -0
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -0
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js +1 -0
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +105 -96
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.d.ts +13 -0
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.d.ts.map +1 -0
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +122 -0
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -0
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +17 -0
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -0
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +112 -0
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -0
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +27 -0
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -0
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +194 -0
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -0
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.d.ts +1 -0
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.d.ts.map +1 -1
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js +7 -7
  45. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  46. package/dist/components/DraggableDialog/DraggableDialog.d.ts +2 -1
  47. package/dist/components/DraggableDialog/DraggableDialog.d.ts.map +1 -1
  48. package/dist/components/DraggableDialog/DraggableDialog.js +42 -33
  49. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  50. package/dist/components/EntityTreeTable/hooks/useTableColumns.d.ts.map +1 -1
  51. package/dist/components/EntityTreeTable/hooks/useTableColumns.js +12 -6
  52. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  53. package/dist/components/ExperimentalMode/ExperimentalMode.js +2 -1
  54. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  55. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  56. package/dist/components/FilePreview/PdfPreview.js +23 -20
  57. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  58. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  59. package/dist/components/GenericCard/SynapseCardLabel.js +100 -99
  60. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  61. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  62. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +64 -55
  63. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  64. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  65. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js +4 -1
  66. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  67. package/dist/components/StorybookComponentWrapper.d.ts.map +1 -1
  68. package/dist/components/StorybookComponentWrapper.js +16 -13
  69. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  70. package/dist/components/SynapseChat/GridAgentChat.js +6 -6
  71. package/dist/components/SynapseChat/SynapseChat.d.ts +2 -1
  72. package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
  73. package/dist/components/SynapseChat/SynapseChat.js +118 -74
  74. package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
  75. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts +3 -1
  76. package/dist/components/SynapseChat/SynapseChatInteraction.d.ts.map +1 -1
  77. package/dist/components/SynapseChat/SynapseChatInteraction.js +21 -21
  78. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  79. package/dist/components/SynapseChat/SynapseChatMessage.d.ts +1 -0
  80. package/dist/components/SynapseChat/SynapseChatMessage.d.ts.map +1 -1
  81. package/dist/components/SynapseChat/SynapseChatMessage.js +9 -8
  82. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  83. package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -1
  84. package/dist/components/SynapseChat/SynapsePortalChatDialog.js +2 -1
  85. package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
  86. package/dist/components/TanStackTable/TanStackTableUtils.d.ts.map +1 -1
  87. package/dist/components/TanStackTable/TanStackTableUtils.js +6 -6
  88. package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
  89. package/dist/components/dataaccess/AccessRequirementDashboard.d.ts.map +1 -1
  90. package/dist/components/dataaccess/AccessRequirementDashboard.js +55 -55
  91. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  92. package/dist/components/dataaccess/EDucTemplateTable.d.ts +3 -0
  93. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -0
  94. package/dist/components/dataaccess/EDucTemplateTable.js +213 -0
  95. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -0
  96. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  97. package/dist/components/dataaccess/ReviewerDashboard.js +44 -34
  98. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  99. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts +12 -0
  100. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -0
  101. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +84 -0
  102. package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -0
  103. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.d.ts.map +1 -1
  104. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js +20 -18
  105. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
  106. package/dist/components/entity/page/CreatedByModifiedBy.d.ts.map +1 -1
  107. package/dist/components/entity/page/CreatedByModifiedBy.js +43 -61
  108. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  109. package/dist/components/entity/page/createdByModifiedByTooltips.d.ts +7 -0
  110. package/dist/components/entity/page/createdByModifiedByTooltips.d.ts.map +1 -0
  111. package/dist/components/entity/page/createdByModifiedByTooltips.js +36 -0
  112. package/dist/components/entity/page/createdByModifiedByTooltips.js.map +1 -0
  113. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.d.ts.map +1 -1
  114. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js +130 -65
  115. package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
  116. package/dist/components/widgets/Range.js +8 -2
  117. package/dist/components/widgets/Range.js.map +1 -1
  118. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +2 -0
  119. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  120. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -40
  121. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  122. package/dist/components/widgets/query-filter/RangeFacetFilter.d.ts.map +1 -1
  123. package/dist/components/widgets/query-filter/RangeFacetFilter.js +2 -1
  124. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  125. package/dist/components/widgets/query-filter/RangeFacetFilterUI.d.ts.map +1 -1
  126. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +19 -19
  127. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  128. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  129. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +48 -23
  130. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  131. package/dist/mocks/msw/handlers/eDucTemplateHandlers.d.ts.map +1 -1
  132. package/dist/mocks/msw/handlers/eDucTemplateHandlers.js +9 -9
  133. package/dist/mocks/msw/handlers/eDucTemplateHandlers.js.map +1 -1
  134. package/dist/mocks/msw/handlers/fileHandlers.d.ts.map +1 -1
  135. package/dist/mocks/msw/handlers/fileHandlers.js +22 -22
  136. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  137. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  138. package/dist/mocks/msw/handlers/userProfileHandlers.js +36 -36
  139. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  140. package/dist/mocks/user/mock_user_profile.d.ts +1 -0
  141. package/dist/mocks/user/mock_user_profile.d.ts.map +1 -1
  142. package/dist/mocks/user/mock_user_profile.js +45 -45
  143. package/dist/mocks/user/mock_user_profile.js.map +1 -1
  144. package/dist/style/components/facet_nav/_facet-nav-panel.scss +0 -6
  145. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  146. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  147. package/dist/synapse-queries/KeyFactory.js +3 -0
  148. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  149. package/dist/synapse-queries/dataaccess/index.js +4 -4
  150. package/dist/synapse-queries/dataaccess/useEDuc.d.ts +13 -1
  151. package/dist/synapse-queries/dataaccess/useEDuc.d.ts.map +1 -1
  152. package/dist/synapse-queries/dataaccess/useEDuc.js +67 -49
  153. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  154. package/dist/synapse-queries/index.js +185 -184
  155. package/dist/tsconfig.build.tsbuildinfo +1 -1
  156. package/dist/utils/APIConstants.d.ts +6 -0
  157. package/dist/utils/APIConstants.d.ts.map +1 -1
  158. package/dist/utils/APIConstants.js +2 -2
  159. package/dist/utils/APIConstants.js.map +1 -1
  160. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  161. package/dist/utils/AppUtils/session/ApplicationSessionManager.js +20 -19
  162. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  163. package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
  164. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  165. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  166. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  167. package/dist/utils/functions/RegularExpressions.d.ts +7 -0
  168. package/dist/utils/functions/RegularExpressions.d.ts.map +1 -1
  169. package/dist/utils/functions/RegularExpressions.js +5 -4
  170. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  171. package/dist/utils/hooks/useFetchBlobUrl.d.ts +9 -0
  172. package/dist/utils/hooks/useFetchBlobUrl.d.ts.map +1 -0
  173. package/dist/utils/hooks/useFetchBlobUrl.js +19 -0
  174. package/dist/utils/hooks/useFetchBlobUrl.js.map +1 -0
  175. package/dist/utils/hooks/useIsHydrated.d.ts +9 -0
  176. package/dist/utils/hooks/useIsHydrated.d.ts.map +1 -0
  177. package/dist/utils/hooks/useIsHydrated.js +10 -0
  178. package/dist/utils/hooks/useIsHydrated.js.map +1 -0
  179. package/package.json +2 -2
@@ -0,0 +1,122 @@
1
+ import { UserBadge as e } from "../../UserCard/UserBadge.js";
2
+ import { longFieldLabelSx as t } from "./styles.js";
3
+ import { Accordion as n, AccordionDetails as r, AccordionSummary as i, Box as a, Stack as o, Typography as s } from "@mui/material";
4
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ import { ExpandMore as u } from "@mui/icons-material";
6
+ //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.tsx
7
+ function d(d) {
8
+ let { accessorChanges: f, principalInvestigator: p, signingOfficial: m, isLoading: h = !1 } = d;
9
+ return /* @__PURE__ */ l(n, {
10
+ defaultExpanded: !1,
11
+ disableGutters: !0,
12
+ sx: {
13
+ boxShadow: "none",
14
+ border: "1px solid",
15
+ borderColor: "grey.300",
16
+ "&:before": { display: "none" }
17
+ },
18
+ children: [/* @__PURE__ */ c(i, {
19
+ expandIcon: /* @__PURE__ */ c(u, {}),
20
+ "aria-controls": "review-collaborators-so-content",
21
+ id: "review-collaborators-so-header",
22
+ children: /* @__PURE__ */ c(s, {
23
+ variant: "headline3",
24
+ children: "Review your collaborators & signing official"
25
+ })
26
+ }), /* @__PURE__ */ l(r, { children: [
27
+ /* @__PURE__ */ c(s, {
28
+ variant: "body1",
29
+ sx: {
30
+ ...t,
31
+ fontWeight: 700,
32
+ mb: 1
33
+ },
34
+ children: "Your collaborators:"
35
+ }),
36
+ /* @__PURE__ */ l(o, {
37
+ sx: {
38
+ mb: 3,
39
+ gap: 1
40
+ },
41
+ children: [f.length === 0 && !h && /* @__PURE__ */ c(s, {
42
+ variant: "body1",
43
+ sx: t,
44
+ children: "No collaborators added."
45
+ }), f.map((t) => /* @__PURE__ */ c(e, {
46
+ userId: t.userId,
47
+ showAccountLevelIcon: !0,
48
+ disableLink: !0,
49
+ showFullName: !0
50
+ }, t.userId))]
51
+ }),
52
+ /* @__PURE__ */ c(s, {
53
+ variant: "body1",
54
+ sx: {
55
+ ...t,
56
+ fontWeight: 700,
57
+ mb: 1
58
+ },
59
+ children: "Your Project Lead or PI:"
60
+ }),
61
+ /* @__PURE__ */ c(s, {
62
+ variant: "body1",
63
+ sx: {
64
+ ...t,
65
+ mb: 1
66
+ },
67
+ children: "Your Project Lead or PI will also receive access to the requested data."
68
+ }),
69
+ /* @__PURE__ */ l(a, {
70
+ sx: { mb: 3 },
71
+ children: [
72
+ p?.userId && /* @__PURE__ */ c(e, {
73
+ userId: p.userId,
74
+ showAccountLevelIcon: !0,
75
+ disableLink: !0,
76
+ showFullName: !0
77
+ }),
78
+ p?.name && /* @__PURE__ */ c(s, {
79
+ variant: "body1",
80
+ sx: t,
81
+ children: p.name
82
+ }),
83
+ p?.institutionalEmail && /* @__PURE__ */ c(s, {
84
+ variant: "body1",
85
+ sx: t,
86
+ children: p.institutionalEmail
87
+ })
88
+ ]
89
+ }),
90
+ /* @__PURE__ */ c(s, {
91
+ variant: "body1",
92
+ sx: {
93
+ ...t,
94
+ fontWeight: 700,
95
+ mb: 1
96
+ },
97
+ children: "Your signing official:"
98
+ }),
99
+ /* @__PURE__ */ c(s, {
100
+ variant: "body1",
101
+ sx: {
102
+ ...t,
103
+ mb: 1
104
+ },
105
+ children: "A member of your institution who is NOT part of the study team (i.e., not the Project Lead, not a Data Requester or Collaborator, and not the Project Lead or PI)."
106
+ }),
107
+ /* @__PURE__ */ l(a, { children: [m?.name && /* @__PURE__ */ c(s, {
108
+ variant: "body1",
109
+ sx: t,
110
+ children: m.name
111
+ }), m?.institutionalEmail && /* @__PURE__ */ c(s, {
112
+ variant: "body1",
113
+ sx: t,
114
+ children: m.institutionalEmail
115
+ })] })
116
+ ] })]
117
+ });
118
+ }
119
+ //#endregion
120
+ export { d as ReviewCollaboratorsAndSigningOfficialAccordion };
121
+
122
+ //# sourceMappingURL=ReviewCollaboratorsAndSigningOfficialAccordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewCollaboratorsAndSigningOfficialAccordion.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.tsx"],"sourcesContent":["import { ExpandMore } from '@mui/icons-material'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessorChange,\n PrincipalInvestigator,\n SigningOfficial,\n} from '@sage-bionetworks/synapse-types'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport { longFieldLabelSx } from './styles'\n\nexport type ReviewCollaboratorsAndSigningOfficialAccordionProps = {\n accessorChanges: AccessorChange[]\n principalInvestigator?: PrincipalInvestigator\n signingOfficial?: SigningOfficial\n isLoading?: boolean\n}\n\n/**\n * Collapsible summary of the DAR's collaborators, PI, and signing official.\n * Shared by ReviewDucStep and ManualUploadDucStep.\n */\nexport function ReviewCollaboratorsAndSigningOfficialAccordion(\n props: ReviewCollaboratorsAndSigningOfficialAccordionProps,\n) {\n const {\n accessorChanges,\n principalInvestigator: pi,\n signingOfficial: so,\n isLoading = false,\n } = props\n\n return (\n <Accordion\n defaultExpanded={false}\n disableGutters\n sx={{\n boxShadow: 'none',\n border: '1px solid',\n borderColor: 'grey.300',\n '&:before': { display: 'none' },\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"review-collaborators-so-content\"\n id=\"review-collaborators-so-header\"\n >\n <Typography variant={'headline3'}>\n Review your collaborators &amp; signing official\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your collaborators:\n </Typography>\n <Stack sx={{ mb: 3, gap: 1 }}>\n {accessorChanges.length === 0 && !isLoading && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n No collaborators added.\n </Typography>\n )}\n {accessorChanges.map(ac => (\n <UserBadge\n key={ac.userId}\n userId={ac.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n ))}\n </Stack>\n\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your Project Lead or PI:\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n Your Project Lead or PI will also receive access to the requested\n data.\n </Typography>\n <Box sx={{ mb: 3 }}>\n {pi?.userId && (\n <UserBadge\n userId={pi.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n )}\n {pi?.name && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {pi.name}\n </Typography>\n )}\n {pi?.institutionalEmail && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {pi.institutionalEmail}\n </Typography>\n )}\n </Box>\n\n <Typography\n variant={'body1'}\n sx={{ ...longFieldLabelSx, fontWeight: 700, mb: 1 }}\n >\n Your signing official:\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n A member of your institution who is NOT part of the study team (i.e.,\n not the Project Lead, not a Data Requester or Collaborator, and not\n the Project Lead or PI).\n </Typography>\n <Box>\n {so?.name && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {so.name}\n </Typography>\n )}\n {so?.institutionalEmail && (\n <Typography variant={'body1'} sx={longFieldLabelSx}>\n {so.institutionalEmail}\n </Typography>\n )}\n </Box>\n </AccordionDetails>\n </Accordion>\n )\n}\n"],"mappings":";;;;;;AA4BA,SAAgB,EACd,GACA;CACA,IAAM,EACJ,oBACA,uBAAuB,GACvB,iBAAiB,GACjB,eAAY,OACV;CAEJ,OACE,kBAAC,GAAD;EACE,iBAAiB;EACjB,gBAAA;EACA,IAAI;GACF,WAAW;GACX,QAAQ;GACR,aAAa;GACb,YAAY,EAAE,SAAS,OAAO;EAChC;YARF,CAUE,kBAAC,GAAD;GACE,YAAY,kBAAC,GAAD,CAAa,CAAA;GACzB,iBAAc;GACd,IAAG;aAEH,kBAAC,GAAD;IAAY,SAAS;cAAa;GAEtB,CAAA;EACI,CAAA,GAClB,kBAAC,GAAD,EAAA,UAAA;GACE,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAO,IAAI;KAAE,IAAI;KAAG,KAAK;IAAE;cAA3B,CACG,EAAgB,WAAW,KAAK,CAAC,KAChC,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;eAAkB;IAExC,CAAA,GAEb,EAAgB,KAAI,MACnB,kBAAC,GAAD;KAEE,QAAQ,EAAG;KACX,sBAAsB;KACtB,aAAa;KACb,cAAc;IACf,GALM,EAAG,MAKT,CACF,CACI;;GAEP,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;KAAE,GAAG;KAAkB,IAAI;IAAE;cAAG;GAGtD,CAAA;GACZ,kBAAC,GAAD;IAAK,IAAI,EAAE,IAAI,EAAE;cAAjB;KACG,GAAI,UACH,kBAAC,GAAD;MACE,QAAQ,EAAG;MACX,sBAAsB;MACtB,aAAa;MACb,cAAc;KACf,CAAA;KAEF,GAAI,QACH,kBAAC,GAAD;MAAY,SAAS;MAAS,IAAI;gBAC/B,EAAG;KACM,CAAA;KAEb,GAAI,sBACH,kBAAC,GAAD;MAAY,SAAS;MAAS,IAAI;gBAC/B,EAAG;KACM,CAAA;IAEX;;GAEL,kBAAC,GAAD;IACE,SAAS;IACT,IAAI;KAAE,GAAG;KAAkB,YAAY;KAAK,IAAI;IAAE;cACnD;GAEW,CAAA;GACZ,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;KAAE,GAAG;KAAkB,IAAI;IAAE;cAAG;GAItD,CAAA;GACZ,kBAAC,GAAD,EAAA,UAAA,CACG,GAAI,QACH,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;cAC/B,EAAG;GACM,CAAA,GAEb,GAAI,sBACH,kBAAC,GAAD;IAAY,SAAS;IAAS,IAAI;cAC/B,EAAG;GACM,CAAA,CAEX,EAAA,CAAA;EACW,EAAA,CAAA,CACT;;AAEf"}
@@ -0,0 +1,17 @@
1
+ import { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types';
2
+ export type ReviewDucStepProps = {
3
+ managedACTAccessRequirement: ManagedACTAccessRequirement;
4
+ onHide: () => void;
5
+ onBackClicked: () => void;
6
+ /**
7
+ * Called when the user clicks "Create a DUC". The parent advances to the eDUC preview step
8
+ * (PORTALS-4377), where the generated document is displayed for review before signing.
9
+ */
10
+ onCreateDuc: () => void;
11
+ };
12
+ /**
13
+ * Wizard step shown after accessors/files (PORTALS-4375) and before the eDUC preview (PORTALS-4377).
14
+ * Lets the user confirm their collaborators, PI, and Signing Official before generating the DUC.
15
+ */
16
+ export default function ReviewDucStep(props: ReviewDucStepProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=ReviewDucStep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewDucStep.d.ts","sourceRoot":"","sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAA;AAM7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB;;;OAGG;IACH,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CA8E9D"}
@@ -0,0 +1,112 @@
1
+ import { useGetDataAccessRequestForUpdate as e } from "../../../../synapse-queries/dataaccess/useAccessRequirements.js";
2
+ import "../../../../synapse-queries/index.js";
3
+ import t from "../../../IconSvg/IconSvg.js";
4
+ import { longFieldLabelSx as n } from "../styles.js";
5
+ import r from "../ManagedACTAccessRequirementFormWikiWrapper.js";
6
+ import { ReviewCollaboratorsAndSigningOfficialAccordion as i } from "../ReviewCollaboratorsAndSigningOfficialAccordion.js";
7
+ import { Box as a, Button as o, DialogActions as s, DialogContent as c, DialogTitle as l, IconButton as u, Stack as d, Typography as f } from "@mui/material";
8
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
9
+ //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.tsx
10
+ function g(g) {
11
+ let { managedACTAccessRequirement: _, onHide: v, onBackClicked: y, onCreateDuc: b } = g, { data: x, isLoading: S } = e(String(_.id), {
12
+ staleTime: Infinity,
13
+ throwOnError: !0
14
+ }), C = x?.accessorChanges ?? [], w = x?.principalInvestigator, T = x?.signingOfficial;
15
+ return /* @__PURE__ */ h(p, { children: [
16
+ /* @__PURE__ */ m(l, { children: /* @__PURE__ */ h(d, {
17
+ direction: "row",
18
+ sx: {
19
+ alignItems: "center",
20
+ gap: "5px"
21
+ },
22
+ children: [
23
+ "Request Access",
24
+ /* @__PURE__ */ m(a, { sx: { flexGrow: 1 } }),
25
+ /* @__PURE__ */ m(u, {
26
+ "aria-label": "Close",
27
+ onClick: v,
28
+ children: /* @__PURE__ */ m(t, {
29
+ icon: "close",
30
+ wrap: !1,
31
+ sx: { color: "grey.700" }
32
+ })
33
+ })
34
+ ]
35
+ }) }),
36
+ /* @__PURE__ */ m(c, { children: /* @__PURE__ */ m(r, {
37
+ managedACTAccessRequirementId: String(_.id),
38
+ children: /* @__PURE__ */ h(a, { children: [
39
+ /* @__PURE__ */ m(f, {
40
+ variant: "headline3",
41
+ sx: { mb: 2 },
42
+ children: "Sign a Data Use Certificate (DUC)"
43
+ }),
44
+ /* @__PURE__ */ m(f, {
45
+ variant: "body1",
46
+ sx: {
47
+ ...n,
48
+ mb: 2
49
+ },
50
+ children: "The DUC may be signed electronically."
51
+ }),
52
+ /* @__PURE__ */ m(f, {
53
+ variant: "body1",
54
+ sx: {
55
+ ...n,
56
+ mb: 2
57
+ },
58
+ children: "Please verify the information of each data requester listed in the previous step. Ensure all email addresses are accurate. You can click the BACK button, below, to modify your list of collaborators and Signing Official if necessary."
59
+ }),
60
+ /* @__PURE__ */ m(f, {
61
+ variant: "body1",
62
+ sx: {
63
+ ...n,
64
+ mb: 2
65
+ },
66
+ children: "If any information is incorrect, the request will be rejected."
67
+ }),
68
+ /* @__PURE__ */ h(f, {
69
+ variant: "body1",
70
+ sx: {
71
+ ...n,
72
+ mb: 3
73
+ },
74
+ children: [
75
+ "Click ",
76
+ /* @__PURE__ */ m("strong", { children: "Create a DUC" }),
77
+ " to generate a document and review it before sending it to your collaborators, PI, and Signing Official."
78
+ ]
79
+ }),
80
+ /* @__PURE__ */ m(i, {
81
+ accessorChanges: C,
82
+ principalInvestigator: w,
83
+ signingOfficial: T,
84
+ isLoading: S
85
+ })
86
+ ] })
87
+ }) }),
88
+ /* @__PURE__ */ h(s, { children: [
89
+ /* @__PURE__ */ m(o, {
90
+ variant: "outlined",
91
+ onClick: y,
92
+ children: "Back"
93
+ }),
94
+ /* @__PURE__ */ m(a, { sx: { flexGrow: 1 } }),
95
+ /* @__PURE__ */ m(o, {
96
+ variant: "outlined",
97
+ onClick: v,
98
+ children: "Cancel"
99
+ }),
100
+ /* @__PURE__ */ m(o, {
101
+ variant: "contained",
102
+ disabled: S,
103
+ onClick: b,
104
+ children: "Create a DUC"
105
+ })
106
+ ] })
107
+ ] });
108
+ }
109
+ //#endregion
110
+ export { g as default };
111
+
112
+ //# sourceMappingURL=ReviewDucStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewDucStep.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.tsx"],"sourcesContent":["import { useGetDataAccessRequestForUpdate } from '@/synapse-queries'\nimport {\n Box,\n Button,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Stack,\n Typography,\n} from '@mui/material'\nimport { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types'\nimport IconSvg from '../../../IconSvg/IconSvg'\nimport ManagedACTAccessRequirementFormWikiWrapper from '../ManagedACTAccessRequirementFormWikiWrapper'\nimport { ReviewCollaboratorsAndSigningOfficialAccordion } from '../ReviewCollaboratorsAndSigningOfficialAccordion'\nimport { longFieldLabelSx } from '../styles'\n\nexport type ReviewDucStepProps = {\n managedACTAccessRequirement: ManagedACTAccessRequirement\n onHide: () => void\n onBackClicked: () => void\n /**\n * Called when the user clicks \"Create a DUC\". The parent advances to the eDUC preview step\n * (PORTALS-4377), where the generated document is displayed for review before signing.\n */\n onCreateDuc: () => void\n}\n\n/**\n * Wizard step shown after accessors/files (PORTALS-4375) and before the eDUC preview (PORTALS-4377).\n * Lets the user confirm their collaborators, PI, and Signing Official before generating the DUC.\n */\nexport default function ReviewDucStep(props: ReviewDucStepProps) {\n const { managedACTAccessRequirement, onHide, onBackClicked, onCreateDuc } =\n props\n\n const { data: dataAccessRequest, isLoading } =\n useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n staleTime: Infinity,\n throwOnError: true,\n })\n\n const accessorChanges = dataAccessRequest?.accessorChanges ?? []\n const pi = dataAccessRequest?.principalInvestigator\n const so = dataAccessRequest?.signingOfficial\n\n return (\n <>\n <DialogTitle>\n <Stack direction=\"row\" sx={{ alignItems: 'center', gap: '5px' }}>\n Request Access\n <Box sx={{ flexGrow: 1 }} />\n <IconButton aria-label={'Close'} onClick={onHide}>\n <IconSvg icon={'close'} wrap={false} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n </DialogTitle>\n <DialogContent>\n <ManagedACTAccessRequirementFormWikiWrapper\n managedACTAccessRequirementId={String(managedACTAccessRequirement.id)}\n >\n <Box>\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Sign a Data Use Certificate (DUC)\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n The DUC may be signed electronically.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n Please verify the information of each data requester listed in the\n previous step. Ensure all email addresses are accurate. You can\n click the BACK button, below, to modify your list of collaborators\n and Signing Official if necessary.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n If any information is incorrect, the request will be rejected.\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 3 }}>\n Click <strong>Create a DUC</strong> to generate a document and\n review it before sending it to your collaborators, PI, and Signing\n Official.\n </Typography>\n\n <ReviewCollaboratorsAndSigningOfficialAccordion\n accessorChanges={accessorChanges}\n principalInvestigator={pi}\n signingOfficial={so}\n isLoading={isLoading}\n />\n </Box>\n </ManagedACTAccessRequirementFormWikiWrapper>\n </DialogContent>\n <DialogActions>\n <Button variant={'outlined'} onClick={onBackClicked}>\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }} />\n <Button variant={'outlined'} onClick={onHide}>\n Cancel\n </Button>\n <Button\n variant={'contained'}\n disabled={isLoading}\n onClick={onCreateDuc}\n >\n Create a DUC\n </Button>\n </DialogActions>\n </>\n )\n}\n"],"mappings":";;;;;;;;;AAgCA,SAAwB,EAAc,GAA2B;CAC/D,IAAM,EAAE,gCAA6B,WAAQ,kBAAe,mBAC1D,GAEI,EAAE,MAAM,GAAmB,iBAC/B,EAAiC,OAAO,EAA4B,EAAE,GAAG;EACvE,WAAW;EACX,cAAc;CAChB,CAAC,GAEG,IAAkB,GAAmB,mBAAmB,CAAC,GACzD,IAAK,GAAmB,uBACxB,IAAK,GAAmB;CAE9B,OACE,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GAAO,WAAU;GAAM,IAAI;IAAE,YAAY;IAAU,KAAK;GAAM;aAA9D;IAAiE;IAE/D,kBAAC,GAAD,EAAK,IAAI,EAAE,UAAU,EAAE,EAAI,CAAA;IAC3B,kBAAC,GAAD;KAAY,cAAY;KAAS,SAAS;eACxC,kBAAC,GAAD;MAAS,MAAM;MAAS,MAAM;MAAO,IAAI,EAAE,OAAO,WAAW;KAAI,CAAA;IACvD,CAAA;GACP;KACI,CAAA;EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;GACE,+BAA+B,OAAO,EAA4B,EAAE;aAEpE,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,GAAD;KAAY,SAAS;KAAa,IAAI,EAAE,IAAI,EAAE;eAAG;IAErC,CAAA;IACZ,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;MAAE,GAAG;MAAkB,IAAI;KAAE;eAAG;IAEtD,CAAA;IACZ,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;MAAE,GAAG;MAAkB,IAAI;KAAE;eAAG;IAKtD,CAAA;IACZ,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;MAAE,GAAG;MAAkB,IAAI;KAAE;eAAG;IAEtD,CAAA;IACZ,kBAAC,GAAD;KAAY,SAAS;KAAS,IAAI;MAAE,GAAG;MAAkB,IAAI;KAAE;eAA/D;MAAkE;MAC1D,kBAAC,UAAD,EAAA,UAAQ,eAAoB,CAAA;MAAC;KAGzB;;IAEZ,kBAAC,GAAD;KACmB;KACjB,uBAAuB;KACvB,iBAAiB;KACN;IACZ,CAAA;GACE,EAAA,CAAA;EACqC,CAAA,EAC/B,CAAA;EACf,kBAAC,GAAD,EAAA,UAAA;GACE,kBAAC,GAAD;IAAQ,SAAS;IAAY,SAAS;cAAe;GAE7C,CAAA;GACR,kBAAC,GAAD,EAAK,IAAI,EAAE,UAAU,EAAE,EAAI,CAAA;GAC3B,kBAAC,GAAD;IAAQ,SAAS;IAAY,SAAS;cAAQ;GAEtC,CAAA;GACR,kBAAC,GAAD;IACE,SAAS;IACT,UAAU;IACV,SAAS;cACV;GAEO,CAAA;EACK,EAAA,CAAA;CACf,EAAA,CAAA;AAEN"}
@@ -0,0 +1,27 @@
1
+ import { ManagedACTAccessRequirement, RestrictableObjectType } from '@sage-bionetworks/synapse-types';
2
+ export type SignatureStatusStepProps = {
3
+ managedACTAccessRequirement: ManagedACTAccessRequirement;
4
+ subjectId: string;
5
+ subjectType: RestrictableObjectType;
6
+ onHide: () => void;
7
+ /**
8
+ * Called when the user clicks the Back button. When omitted, the Back button is hidden —
9
+ * used when the step is reached via direct entry (e.g. a deep-link route) rather than
10
+ * through the wizard flow, so there is no meaningful previous step to return to.
11
+ */
12
+ onBackClicked?: () => void;
13
+ onSubmissionCreated: (submissionId: string) => void;
14
+ /**
15
+ * Optional href override for the "View DUC" link. When set, the preview file handle fetch
16
+ * is skipped and this URL is used directly. Used by stories and tests where the portal
17
+ * servlet is not available.
18
+ */
19
+ viewDucHrefOverride?: string;
20
+ };
21
+ /**
22
+ * Wizard step shown after the user has routed the eDUC for electronic signature
23
+ * (PORTALS-4380). Polls the DocuSign envelope status, lists the pending signers,
24
+ * and enables submission once every signer has signed.
25
+ */
26
+ export default function SignatureStatusStep(props: SignatureStatusStepProps): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=SignatureStatusStep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureStatusStep.d.ts","sourceRoot":"","sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx"],"names":[],"mappings":"AA8BA,OAAO,EAEL,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,iCAAiC,CAAA;AAKxC,MAAM,MAAM,wBAAwB,GAAG;IACrC,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,sBAAsB,CAAA;IACnC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CAiP1E"}
@@ -0,0 +1,194 @@
1
+ import { PRODUCTION_ENDPOINT_CONFIG as e } from "../../../../utils/functions/getEndpoint.js";
2
+ import t from "../../../../synapse-client/index.js";
3
+ import { useSubmitDataAccessRequest as n } from "../../../../synapse-queries/dataaccess/useDataAccessSubmission.js";
4
+ import { useGetDataAccessRequestForUpdate as r, useUpdateDataAccessRequest as i } from "../../../../synapse-queries/dataaccess/useAccessRequirements.js";
5
+ import { useGetDataAccessRequestPreview as a, useGetDataAccessRequestSignatureStatus as o, useGetDataAccessRequestSignedFileHandleId as s } from "../../../../synapse-queries/dataaccess/useEDuc.js";
6
+ import "../../../../synapse-queries/index.js";
7
+ import c from "../../../IconSvg/IconSvg.js";
8
+ import { longFieldLabelSx as l } from "../styles.js";
9
+ import { useState as u } from "react";
10
+ import { Alert as d, Box as f, Button as p, DialogActions as m, DialogContent as ee, DialogTitle as te, IconButton as h, Link as g, Skeleton as _, Stack as v, Typography as y } from "@mui/material";
11
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
12
+ import { FileHandleAssociateType as C } from "@sage-bionetworks/synapse-types";
13
+ import { CheckCircleOutline as w, HourglassEmpty as T, OpenInNew as E, Refresh as D } from "@mui/icons-material";
14
+ //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx
15
+ function O(e) {
16
+ let { managedACTAccessRequirement: O, subjectId: ne, subjectType: re, onHide: ie, onBackClicked: A, onSubmissionCreated: j, viewDucHrefOverride: M } = e, { data: N, isLoading: P } = r(String(O.id), {
17
+ staleTime: Infinity,
18
+ throwOnError: !0
19
+ }), F = N?.id ?? "", { data: I, isLoading: L, isRefetching: R, error: z, refetch: B } = o(F, { enabled: !!F }), V = I?.signerStatus ?? [], H = V.filter((e) => e.status === "done").length, U = V.length, W = U > 0 && H === U, G = V.filter((e) => e.status !== "done"), { data: K } = a(F, { enabled: !!F && !M }), q = M ?? (K?.fileHandleId && F ? t.getPortalFileHandleServletUrl(K.fileHandleId, F, C.DataAccessRequestAttachment) : void 0), { data: J } = s(F, { enabled: !!F && W }), [Y, X] = u(), [Z, Q] = u(), { mutateAsync: ae, isPending: oe } = i({ onError: (e) => X(e.reason) }), { mutate: se, isPending: $ } = n({
20
+ onSuccess: (e) => j(e.submissionId),
21
+ onError: (e) => Q(e.reason)
22
+ }), ce = P || L || R || !N || !W || !J?.fileHandleId || oe || $, le = async () => {
23
+ if (!N || !J?.fileHandleId) return;
24
+ X(void 0), Q(void 0);
25
+ let e = await ae({
26
+ ...N,
27
+ ducFileHandleId: J.fileHandleId
28
+ }).catch(() => null);
29
+ e && se({
30
+ request: {
31
+ requestId: e.id,
32
+ requestEtag: e.etag,
33
+ subjectId: ne,
34
+ subjectType: re
35
+ },
36
+ accessRequirementId: String(O.id)
37
+ });
38
+ };
39
+ return /* @__PURE__ */ S(b, { children: [
40
+ /* @__PURE__ */ x(te, { children: /* @__PURE__ */ S(v, {
41
+ direction: "row",
42
+ sx: {
43
+ alignItems: "center",
44
+ gap: "5px"
45
+ },
46
+ children: [
47
+ "Request Access",
48
+ /* @__PURE__ */ x(f, { sx: { flexGrow: 1 } }),
49
+ /* @__PURE__ */ x(h, {
50
+ "aria-label": "Close",
51
+ onClick: ie,
52
+ children: /* @__PURE__ */ x(c, {
53
+ icon: "close",
54
+ wrap: !1,
55
+ sx: { color: "grey.700" }
56
+ })
57
+ })
58
+ ]
59
+ }) }),
60
+ /* @__PURE__ */ S(ee, { children: [
61
+ /* @__PURE__ */ x(y, {
62
+ variant: "headline3",
63
+ sx: { mb: 2 },
64
+ children: "Sign a Data Use Certificate (DUC)"
65
+ }),
66
+ /* @__PURE__ */ x(y, {
67
+ variant: "body1",
68
+ sx: {
69
+ ...l,
70
+ mb: 2
71
+ },
72
+ children: "Your DUC has been emailed to your Collaborators. Once all signatures (including the Signing Official) have been collected, you can submit the Data Access Request."
73
+ }),
74
+ L && /* @__PURE__ */ x(_, {
75
+ variant: "rectangular",
76
+ width: "100%",
77
+ height: 120,
78
+ "data-testid": "SignatureStatusStep-loading"
79
+ }),
80
+ z && /* @__PURE__ */ S(d, {
81
+ severity: "error",
82
+ children: [
83
+ /* @__PURE__ */ x("strong", { children: "Sorry, we couldn't load the current signature status." }),
84
+ /* @__PURE__ */ x("br", {}),
85
+ z.reason
86
+ ]
87
+ }),
88
+ !L && !z && I && /* @__PURE__ */ S(b, { children: [
89
+ /* @__PURE__ */ S(v, {
90
+ direction: "row",
91
+ sx: {
92
+ alignItems: "center",
93
+ gap: 1,
94
+ mb: 1
95
+ },
96
+ children: [
97
+ W ? /* @__PURE__ */ x(w, { color: "success" }) : /* @__PURE__ */ x(T, { sx: { color: "grey.700" } }),
98
+ /* @__PURE__ */ x(y, {
99
+ variant: "body1",
100
+ sx: { fontWeight: 700 },
101
+ children: W ? "All signatures collected." : `${H} out of ${U} signatures collected.`
102
+ }),
103
+ /* @__PURE__ */ x(f, { sx: { flexGrow: 1 } }),
104
+ q && /* @__PURE__ */ S(g, {
105
+ href: q,
106
+ target: "_blank",
107
+ rel: "noopener",
108
+ sx: {
109
+ display: "inline-flex",
110
+ alignItems: "center",
111
+ gap: .5
112
+ },
113
+ children: ["View DUC", /* @__PURE__ */ x(E, { fontSize: "small" })]
114
+ })
115
+ ]
116
+ }),
117
+ G.length > 0 && /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(y, {
118
+ variant: "body1",
119
+ sx: { mb: 1 },
120
+ children: "You're still waiting for signatures from"
121
+ }), /* @__PURE__ */ x(f, {
122
+ component: "ul",
123
+ sx: {
124
+ mt: 0,
125
+ mb: 2,
126
+ pl: 3
127
+ },
128
+ children: G.map((e, t) => /* @__PURE__ */ x("li", { children: /* @__PURE__ */ x(k, { signer: e }) }, e.userId ?? `${e.name}-${t}`))
129
+ })] }),
130
+ /* @__PURE__ */ x(p, {
131
+ variant: "outlined",
132
+ startIcon: /* @__PURE__ */ x(D, {}),
133
+ loading: R,
134
+ onClick: () => {
135
+ B();
136
+ },
137
+ children: "Refresh"
138
+ })
139
+ ] }),
140
+ Y && /* @__PURE__ */ S(d, {
141
+ severity: "error",
142
+ sx: { mt: 2 },
143
+ children: [
144
+ /* @__PURE__ */ x("strong", { children: "Sorry, we couldn't save your change." }),
145
+ /* @__PURE__ */ x("br", {}),
146
+ Y
147
+ ]
148
+ }),
149
+ Z && /* @__PURE__ */ S(d, {
150
+ severity: "error",
151
+ sx: { mt: 2 },
152
+ children: [
153
+ /* @__PURE__ */ x("strong", { children: "Sorry, we couldn't submit your request." }),
154
+ /* @__PURE__ */ x("br", {}),
155
+ Z
156
+ ]
157
+ })
158
+ ] }),
159
+ /* @__PURE__ */ S(m, { children: [
160
+ A && /* @__PURE__ */ x(p, {
161
+ variant: "outlined",
162
+ onClick: A,
163
+ children: "Back"
164
+ }),
165
+ /* @__PURE__ */ x(f, { sx: { flexGrow: 1 } }),
166
+ /* @__PURE__ */ x(p, {
167
+ variant: "contained",
168
+ disabled: ce,
169
+ loading: $,
170
+ onClick: () => {
171
+ le();
172
+ },
173
+ children: "Submit"
174
+ })
175
+ ] })
176
+ ] });
177
+ }
178
+ function k(t) {
179
+ let { signer: n } = t, r = n.name ?? "Unnamed signer";
180
+ return /* @__PURE__ */ S(y, {
181
+ variant: "body1",
182
+ component: "span",
183
+ children: [n.userId ? /* @__PURE__ */ x(g, {
184
+ href: `${e.PORTAL}Profile:${n.userId}`,
185
+ target: "_blank",
186
+ rel: "noopener",
187
+ children: r
188
+ }) : /* @__PURE__ */ x(b, { children: r }), n.status && n.status !== "pending" && n.status !== "done" ? ` (${n.status})` : ""]
189
+ });
190
+ }
191
+ //#endregion
192
+ export { O as default };
193
+
194
+ //# sourceMappingURL=SignatureStatusStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignatureStatusStep.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetDataAccessRequestPreview,\n useGetDataAccessRequestSignatureStatus,\n useGetDataAccessRequestSignedFileHandleId,\n useSubmitDataAccessRequest,\n useUpdateDataAccessRequest,\n} from '@/synapse-queries'\nimport SynapseClient from '@/synapse-client'\nimport { PRODUCTION_ENDPOINT_CONFIG } from '@/utils/functions/getEndpoint'\nimport {\n CheckCircleOutline,\n HourglassEmpty,\n OpenInNew,\n Refresh,\n} from '@mui/icons-material'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Link,\n Skeleton,\n Stack,\n Typography,\n} from '@mui/material'\nimport { EDucSignerStatus } from '@sage-bionetworks/synapse-client'\nimport {\n FileHandleAssociateType,\n ManagedACTAccessRequirement,\n RestrictableObjectType,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport IconSvg from '../../../IconSvg/IconSvg'\nimport { longFieldLabelSx } from '../styles'\n\nexport type SignatureStatusStepProps = {\n managedACTAccessRequirement: ManagedACTAccessRequirement\n subjectId: string\n subjectType: RestrictableObjectType\n onHide: () => void\n /**\n * Called when the user clicks the Back button. When omitted, the Back button is hidden —\n * used when the step is reached via direct entry (e.g. a deep-link route) rather than\n * through the wizard flow, so there is no meaningful previous step to return to.\n */\n onBackClicked?: () => void\n onSubmissionCreated: (submissionId: string) => void\n /**\n * Optional href override for the \"View DUC\" link. When set, the preview file handle fetch\n * is skipped and this URL is used directly. Used by stories and tests where the portal\n * servlet is not available.\n */\n viewDucHrefOverride?: string\n}\n\n/**\n * Wizard step shown after the user has routed the eDUC for electronic signature\n * (PORTALS-4380). Polls the DocuSign envelope status, lists the pending signers,\n * and enables submission once every signer has signed.\n */\nexport default function SignatureStatusStep(props: SignatureStatusStepProps) {\n const {\n managedACTAccessRequirement,\n subjectId,\n subjectType,\n onHide,\n onBackClicked,\n onSubmissionCreated,\n viewDucHrefOverride,\n } = props\n\n const { data: dataAccessRequest, isLoading: isLoadingDar } =\n useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n staleTime: Infinity,\n throwOnError: true,\n })\n\n const requestId = dataAccessRequest?.id ?? ''\n\n const {\n data: signatureStatus,\n isLoading: isLoadingStatus,\n isRefetching: isRefetchingStatus,\n error: statusError,\n refetch: refetchStatus,\n } = useGetDataAccessRequestSignatureStatus(requestId, {\n enabled: Boolean(requestId),\n })\n\n const signers: EDucSignerStatus[] = signatureStatus?.signerStatus ?? []\n const collectedCount = signers.filter(s => s.status === 'done').length\n const totalCount = signers.length\n const allCollected = totalCount > 0 && collectedCount === totalCount\n const outstandingSigners = signers.filter(s => s.status !== 'done')\n\n const { data: previewFileHandle } = useGetDataAccessRequestPreview(\n requestId,\n { enabled: Boolean(requestId) && !viewDucHrefOverride },\n )\n const viewDucHref =\n viewDucHrefOverride ??\n (previewFileHandle?.fileHandleId && requestId\n ? SynapseClient.getPortalFileHandleServletUrl(\n previewFileHandle.fileHandleId,\n requestId,\n FileHandleAssociateType.DataAccessRequestAttachment,\n )\n : undefined)\n\n const { data: signedFileHandle } = useGetDataAccessRequestSignedFileHandleId(\n requestId,\n { enabled: Boolean(requestId) && allCollected },\n )\n\n const [updateDarError, setUpdateDarError] = useState<string | undefined>()\n const [submitDarError, setSubmitDarError] = useState<string | undefined>()\n\n const { mutateAsync: updateDarAsync, isPending: isUpdating } =\n useUpdateDataAccessRequest({\n onError: e => setUpdateDarError(e.reason),\n })\n\n const { mutate: submit, isPending: isSubmitting } =\n useSubmitDataAccessRequest({\n onSuccess: submission => onSubmissionCreated(submission.submissionId),\n onError: e => setSubmitDarError(e.reason),\n })\n\n const isSubmitDisabled =\n isLoadingDar ||\n isLoadingStatus ||\n isRefetchingStatus ||\n !dataAccessRequest ||\n !allCollected ||\n !signedFileHandle?.fileHandleId ||\n isUpdating ||\n isSubmitting\n\n const handleSubmit = async () => {\n if (!dataAccessRequest || !signedFileHandle?.fileHandleId) return\n setUpdateDarError(undefined)\n setSubmitDarError(undefined)\n const updated = await updateDarAsync({\n ...dataAccessRequest,\n ducFileHandleId: signedFileHandle.fileHandleId,\n }).catch(() => null)\n if (!updated) return\n submit({\n request: {\n requestId: updated.id,\n requestEtag: updated.etag,\n subjectId,\n subjectType,\n },\n accessRequirementId: String(managedACTAccessRequirement.id),\n })\n }\n\n return (\n <>\n <DialogTitle>\n <Stack direction=\"row\" sx={{ alignItems: 'center', gap: '5px' }}>\n Request Access\n <Box sx={{ flexGrow: 1 }} />\n <IconButton aria-label={'Close'} onClick={onHide}>\n <IconSvg icon={'close'} wrap={false} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n </DialogTitle>\n <DialogContent>\n <Typography variant={'headline3'} sx={{ mb: 2 }}>\n Sign a Data Use Certificate (DUC)\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 2 }}>\n Your DUC has been emailed to your Collaborators. Once all signatures\n (including the Signing Official) have been collected, you can submit\n the Data Access Request.\n </Typography>\n {/* TODO: restore once the backend precheck allows editing collaborators mid-signature (PORTALS-4380 notes).\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 3 }}>\n You can update the list of Collaborators by pressing{' '}\n <strong>Back</strong>.\n </Typography>\n */}\n\n {isLoadingStatus && (\n <Skeleton\n variant={'rectangular'}\n width={'100%'}\n height={120}\n data-testid={'SignatureStatusStep-loading'}\n />\n )}\n\n {statusError && (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn&apos;t load the current signature status.\n </strong>\n <br />\n {statusError.reason}\n </Alert>\n )}\n\n {!isLoadingStatus && !statusError && signatureStatus && (\n <>\n <Stack\n direction={'row'}\n sx={{ alignItems: 'center', gap: 1, mb: 1 }}\n >\n {allCollected ? (\n <CheckCircleOutline color={'success'} />\n ) : (\n <HourglassEmpty sx={{ color: 'grey.700' }} />\n )}\n <Typography variant={'body1'} sx={{ fontWeight: 700 }}>\n {allCollected\n ? 'All signatures collected.'\n : `${collectedCount} out of ${totalCount} signatures collected.`}\n </Typography>\n <Box sx={{ flexGrow: 1 }} />\n {viewDucHref && (\n <Link\n href={viewDucHref}\n target={'_blank'}\n rel={'noopener'}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n }}\n >\n View DUC\n <OpenInNew fontSize={'small'} />\n </Link>\n )}\n </Stack>\n\n {outstandingSigners.length > 0 && (\n <>\n <Typography variant={'body1'} sx={{ mb: 1 }}>\n You&apos;re still waiting for signatures from\n </Typography>\n <Box component={'ul'} sx={{ mt: 0, mb: 2, pl: 3 }}>\n {outstandingSigners.map((signer, index) => (\n <li key={signer.userId ?? `${signer.name}-${index}`}>\n <SignerLine signer={signer} />\n </li>\n ))}\n </Box>\n </>\n )}\n\n <Button\n variant={'outlined'}\n startIcon={<Refresh />}\n loading={isRefetchingStatus}\n onClick={() => {\n refetchStatus()\n }}\n >\n Refresh\n </Button>\n </>\n )}\n\n {updateDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t save your change.</strong>\n <br />\n {updateDarError}\n </Alert>\n )}\n {submitDarError && (\n <Alert severity={'error'} sx={{ mt: 2 }}>\n <strong>Sorry, we couldn&apos;t submit your request.</strong>\n <br />\n {submitDarError}\n </Alert>\n )}\n </DialogContent>\n <DialogActions>\n {onBackClicked && (\n <Button variant={'outlined'} onClick={onBackClicked}>\n Back\n </Button>\n )}\n <Box sx={{ flexGrow: 1 }} />\n <Button\n variant={'contained'}\n disabled={isSubmitDisabled}\n loading={isSubmitting}\n onClick={() => {\n handleSubmit()\n }}\n >\n Submit\n </Button>\n </DialogActions>\n </>\n )\n}\n\nfunction SignerLine(props: { signer: EDucSignerStatus }) {\n const { signer } = props\n const displayName = signer.name ?? 'Unnamed signer'\n const nameNode = signer.userId ? (\n <Link\n href={`${PRODUCTION_ENDPOINT_CONFIG.PORTAL}Profile:${signer.userId}`}\n target={'_blank'}\n rel={'noopener'}\n >\n {displayName}\n </Link>\n ) : (\n <>{displayName}</>\n )\n // Only surface non-pending problem states inline; pending is implied by the section header.\n const statusLabel =\n signer.status && signer.status !== 'pending' && signer.status !== 'done'\n ? ` (${signer.status})`\n : ''\n return (\n <Typography variant={'body1'} component={'span'}>\n {nameNode}\n {statusLabel}\n </Typography>\n )\n}\n"],"mappings":"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"}
@@ -8,6 +8,7 @@ type UploadDocumentFieldProps = {
8
8
  isMultiFileUpload?: boolean;
9
9
  onClearAttachment?: (fileHandleId: string) => void;
10
10
  isLoading?: boolean;
11
+ disabled?: boolean;
11
12
  uploadBtnVariant?: ButtonProps['variant'];
12
13
  };
13
14
  export declare function UploadDocumentField(props: UploadDocumentFieldProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadDocumentField.d.ts","sourceRoot":"","sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,iCAAiC,CAAA;AAMxC,KAAK,wBAAwB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAElD,sBAAsB,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CAC1C,CAAA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CA2FlE"}
1
+ {"version":3,"file":"UploadDocumentField.d.ts","sourceRoot":"","sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,iCAAiC,CAAA;AAMxC,KAAK,wBAAwB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAElD,sBAAsB,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CAC1C,CAAA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CA4FlE"}
@@ -7,7 +7,7 @@ import { Box as a, Button as o } from "@mui/material";
7
7
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
8
8
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.tsx
9
9
  function l(l) {
10
- let { fileHandleAssociations: u = [], uploadCallback: d, id: f, documentName: p, isMultiFileUpload: m = !1, onClearAttachment: h, isLoading: g = !1, uploadBtnVariant: _ = "outlined" } = l, [v, y] = i(!1), { data: b } = e({
10
+ let { fileHandleAssociations: u = [], uploadCallback: d, id: f, documentName: p, isMultiFileUpload: m = !1, onClearAttachment: h, isLoading: g = !1, disabled: _ = !1, uploadBtnVariant: v = "outlined" } = l, [y, b] = i(!1), { data: x } = e({
11
11
  includeFileHandles: !0,
12
12
  includePreSignedURLs: !1,
13
13
  includePreviewPreSignedURLs: !1,
@@ -26,14 +26,14 @@ function l(l) {
26
26
  children: [
27
27
  /* @__PURE__ */ s(r, {
28
28
  id: `${f}-upload`,
29
- onUploadStart: () => y(!0),
29
+ onUploadStart: () => b(!0),
30
30
  onComplete: (e) => {
31
- y(!1), d(e);
31
+ b(!1), d(e);
32
32
  },
33
33
  label: `Upload ${p}`,
34
34
  buttonProps: {
35
- disabled: g,
36
- variant: _,
35
+ disabled: g || _,
36
+ variant: v,
37
37
  endIcon: /* @__PURE__ */ s(t, {
38
38
  icon: "upload",
39
39
  wrap: !1
@@ -41,7 +41,7 @@ function l(l) {
41
41
  }
42
42
  }),
43
43
  u.map((e, r) => {
44
- let i = b?.requestedFiles.find((t) => t.fileHandleId === e.fileHandleId)?.fileHandle;
44
+ let i = x?.requestedFiles.find((t) => t.fileHandleId === e.fileHandleId)?.fileHandle;
45
45
  return /* @__PURE__ */ c(a, { children: [/* @__PURE__ */ s(n, {
46
46
  id: `${f}-download-${r}`,
47
47
  variant: "text",
@@ -60,7 +60,7 @@ function l(l) {
60
60
  children: /* @__PURE__ */ s(t, { icon: "clear" })
61
61
  })] }, e.fileHandleId);
62
62
  }),
63
- v && /* @__PURE__ */ s(o, {
63
+ y && /* @__PURE__ */ s(o, {
64
64
  disabled: !0,
65
65
  variant: "text",
66
66
  endIcon: /* @__PURE__ */ s(t, {
@@ -1 +1 @@
1
- {"version":3,"file":"UploadDocumentField.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.tsx"],"sourcesContent":["import { useGetFileBatch } from '@/synapse-queries/file/useFiles'\nimport { Box, Button, ButtonProps } from '@mui/material'\nimport {\n FileHandleAssociation,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport DirectDownloadButton from '../../DirectDownloadButton'\nimport FileUpload from '../../FileUpload/FileUpload'\nimport IconSvg from '../../IconSvg/IconSvg'\n\ntype UploadDocumentFieldProps = {\n id: string\n documentName: string\n uploadCallback: (data: UploadCallbackResp) => void\n /* The fileHandleAssociations corresponding to an existing upload */\n fileHandleAssociations?: FileHandleAssociation[]\n isMultiFileUpload?: boolean\n onClearAttachment?: (fileHandleId: string) => void\n isLoading?: boolean\n uploadBtnVariant?: ButtonProps['variant']\n}\n\nexport function UploadDocumentField(props: UploadDocumentFieldProps) {\n const {\n fileHandleAssociations = [],\n uploadCallback,\n id,\n documentName,\n isMultiFileUpload = false,\n onClearAttachment,\n isLoading = false,\n uploadBtnVariant = 'outlined',\n } = props\n const [isUploading, setIsUploading] = useState(false)\n\n const { data: fileData } = useGetFileBatch(\n {\n includeFileHandles: true,\n includePreSignedURLs: false,\n includePreviewPreSignedURLs: false,\n requestedFiles: fileHandleAssociations,\n },\n { enabled: fileHandleAssociations.length > 0 },\n )\n\n return (\n <Box\n id={id}\n sx={{\n display: 'flex',\n flexDirection: isMultiFileUpload ? 'column' : 'row',\n alignItems: isMultiFileUpload ? 'flex-start' : 'center',\n justifyContent: 'flex-start',\n gap: 2,\n my: 2,\n }}\n >\n <FileUpload\n id={`${id}-upload`}\n onUploadStart={() => setIsUploading(true)}\n onComplete={res => {\n setIsUploading(false)\n uploadCallback(res)\n }}\n label={`Upload ${documentName}`}\n buttonProps={{\n disabled: isLoading,\n variant: uploadBtnVariant,\n endIcon: <IconSvg icon={'upload'} wrap={false} />,\n }}\n />\n {fileHandleAssociations.map((fha, index) => {\n const fileHandle = fileData?.requestedFiles.find(\n result => result.fileHandleId === fha.fileHandleId,\n )?.fileHandle\n return (\n <Box key={fha.fileHandleId}>\n <DirectDownloadButton\n key={index}\n id={`${id}-download-${index}`}\n variant={'text'}\n endIcon={<IconSvg icon={'download'} wrap={false} />}\n color={'primary'}\n fileHandleAssociation={fha}\n fileName={fileHandle?.fileName}\n sx={{\n /* Do not apply text-transform because the text is a raw filename */\n textTransform: 'none',\n }}\n />\n {onClearAttachment && (\n <Button\n className={'clear-x'}\n variant={'text'}\n onClick={() => onClearAttachment(fha.fileHandleId)}\n >\n <IconSvg icon=\"clear\" />\n </Button>\n )}\n </Box>\n )\n })}\n {isUploading && (\n <Button\n disabled={true}\n variant={'text'}\n endIcon={<IconSvg icon={'download'} wrap={false} />}\n >\n Uploading...\n </Button>\n )}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EACJ,4BAAyB,CAAC,GAC1B,mBACA,OACA,iBACA,uBAAoB,IACpB,sBACA,eAAY,IACZ,sBAAmB,eACjB,GACE,CAAC,GAAa,KAAkB,EAAS,EAAK,GAE9C,EAAE,MAAM,MAAa,EACzB;EACE,oBAAoB;EACpB,sBAAsB;EACtB,6BAA6B;EAC7B,gBAAgB;CAClB,GACA,EAAE,SAAS,EAAuB,SAAS,EAAE,CAC/C;CAEA,OACE,kBAAC,GAAD;EACM;EACJ,IAAI;GACF,SAAS;GACT,eAAe,IAAoB,WAAW;GAC9C,YAAY,IAAoB,eAAe;GAC/C,gBAAgB;GAChB,KAAK;GACL,IAAI;EACN;YATF;GAWE,kBAAC,GAAD;IACE,IAAI,GAAG,EAAG;IACV,qBAAqB,EAAe,EAAI;IACxC,aAAY,MAAO;KAEjB,AADA,EAAe,EAAK,GACpB,EAAe,CAAG;IACpB;IACA,OAAO,UAAU;IACjB,aAAa;KACX,UAAU;KACV,SAAS;KACT,SAAS,kBAAC,GAAD;MAAS,MAAM;MAAU,MAAM;KAAQ,CAAA;IAClD;GACD,CAAA;GACA,EAAuB,KAAK,GAAK,MAAU;IAC1C,IAAM,IAAa,GAAU,eAAe,MAC1C,MAAU,EAAO,iBAAiB,EAAI,YACxC,GAAG;IACH,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAEE,IAAI,GAAG,EAAG,YAAY;KACtB,SAAS;KACT,SAAS,kBAAC,GAAD;MAAS,MAAM;MAAY,MAAM;KAAQ,CAAA;KAClD,OAAO;KACP,uBAAuB;KACvB,UAAU,GAAY;KACtB,IAAI,EAEF,eAAe,OACjB;IACD,GAXM,CAWN,GACA,KACC,kBAAC,GAAD;KACE,WAAW;KACX,SAAS;KACT,eAAe,EAAkB,EAAI,YAAY;eAEjD,kBAAC,GAAD,EAAS,MAAK,QAAS,CAAA;IACjB,CAAA,CAEP,EAAA,GAvBK,EAAI,YAuBT;GAET,CAAC;GACA,KACC,kBAAC,GAAD;IACE,UAAU;IACV,SAAS;IACT,SAAS,kBAAC,GAAD;KAAS,MAAM;KAAY,MAAM;IAAQ,CAAA;cACnD;GAEO,CAAA;EAEP;;AAET"}
1
+ {"version":3,"file":"UploadDocumentField.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.tsx"],"sourcesContent":["import { useGetFileBatch } from '@/synapse-queries/file/useFiles'\nimport { Box, Button, ButtonProps } from '@mui/material'\nimport {\n FileHandleAssociation,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport DirectDownloadButton from '../../DirectDownloadButton'\nimport FileUpload from '../../FileUpload/FileUpload'\nimport IconSvg from '../../IconSvg/IconSvg'\n\ntype UploadDocumentFieldProps = {\n id: string\n documentName: string\n uploadCallback: (data: UploadCallbackResp) => void\n /* The fileHandleAssociations corresponding to an existing upload */\n fileHandleAssociations?: FileHandleAssociation[]\n isMultiFileUpload?: boolean\n onClearAttachment?: (fileHandleId: string) => void\n isLoading?: boolean\n disabled?: boolean\n uploadBtnVariant?: ButtonProps['variant']\n}\n\nexport function UploadDocumentField(props: UploadDocumentFieldProps) {\n const {\n fileHandleAssociations = [],\n uploadCallback,\n id,\n documentName,\n isMultiFileUpload = false,\n onClearAttachment,\n isLoading = false,\n disabled = false,\n uploadBtnVariant = 'outlined',\n } = props\n const [isUploading, setIsUploading] = useState(false)\n\n const { data: fileData } = useGetFileBatch(\n {\n includeFileHandles: true,\n includePreSignedURLs: false,\n includePreviewPreSignedURLs: false,\n requestedFiles: fileHandleAssociations,\n },\n { enabled: fileHandleAssociations.length > 0 },\n )\n\n return (\n <Box\n id={id}\n sx={{\n display: 'flex',\n flexDirection: isMultiFileUpload ? 'column' : 'row',\n alignItems: isMultiFileUpload ? 'flex-start' : 'center',\n justifyContent: 'flex-start',\n gap: 2,\n my: 2,\n }}\n >\n <FileUpload\n id={`${id}-upload`}\n onUploadStart={() => setIsUploading(true)}\n onComplete={res => {\n setIsUploading(false)\n uploadCallback(res)\n }}\n label={`Upload ${documentName}`}\n buttonProps={{\n disabled: isLoading || disabled,\n variant: uploadBtnVariant,\n endIcon: <IconSvg icon={'upload'} wrap={false} />,\n }}\n />\n {fileHandleAssociations.map((fha, index) => {\n const fileHandle = fileData?.requestedFiles.find(\n result => result.fileHandleId === fha.fileHandleId,\n )?.fileHandle\n return (\n <Box key={fha.fileHandleId}>\n <DirectDownloadButton\n key={index}\n id={`${id}-download-${index}`}\n variant={'text'}\n endIcon={<IconSvg icon={'download'} wrap={false} />}\n color={'primary'}\n fileHandleAssociation={fha}\n fileName={fileHandle?.fileName}\n sx={{\n /* Do not apply text-transform because the text is a raw filename */\n textTransform: 'none',\n }}\n />\n {onClearAttachment && (\n <Button\n className={'clear-x'}\n variant={'text'}\n onClick={() => onClearAttachment(fha.fileHandleId)}\n >\n <IconSvg icon=\"clear\" />\n </Button>\n )}\n </Box>\n )\n })}\n {isUploading && (\n <Button\n disabled={true}\n variant={'text'}\n endIcon={<IconSvg icon={'download'} wrap={false} />}\n >\n Uploading...\n </Button>\n )}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EACJ,4BAAyB,CAAC,GAC1B,mBACA,OACA,iBACA,uBAAoB,IACpB,sBACA,eAAY,IACZ,cAAW,IACX,sBAAmB,eACjB,GACE,CAAC,GAAa,KAAkB,EAAS,EAAK,GAE9C,EAAE,MAAM,MAAa,EACzB;EACE,oBAAoB;EACpB,sBAAsB;EACtB,6BAA6B;EAC7B,gBAAgB;CAClB,GACA,EAAE,SAAS,EAAuB,SAAS,EAAE,CAC/C;CAEA,OACE,kBAAC,GAAD;EACM;EACJ,IAAI;GACF,SAAS;GACT,eAAe,IAAoB,WAAW;GAC9C,YAAY,IAAoB,eAAe;GAC/C,gBAAgB;GAChB,KAAK;GACL,IAAI;EACN;YATF;GAWE,kBAAC,GAAD;IACE,IAAI,GAAG,EAAG;IACV,qBAAqB,EAAe,EAAI;IACxC,aAAY,MAAO;KAEjB,AADA,EAAe,EAAK,GACpB,EAAe,CAAG;IACpB;IACA,OAAO,UAAU;IACjB,aAAa;KACX,UAAU,KAAa;KACvB,SAAS;KACT,SAAS,kBAAC,GAAD;MAAS,MAAM;MAAU,MAAM;KAAQ,CAAA;IAClD;GACD,CAAA;GACA,EAAuB,KAAK,GAAK,MAAU;IAC1C,IAAM,IAAa,GAAU,eAAe,MAC1C,MAAU,EAAO,iBAAiB,EAAI,YACxC,GAAG;IACH,OACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAEE,IAAI,GAAG,EAAG,YAAY;KACtB,SAAS;KACT,SAAS,kBAAC,GAAD;MAAS,MAAM;MAAY,MAAM;KAAQ,CAAA;KAClD,OAAO;KACP,uBAAuB;KACvB,UAAU,GAAY;KACtB,IAAI,EAEF,eAAe,OACjB;IACD,GAXM,CAWN,GACA,KACC,kBAAC,GAAD;KACE,WAAW;KACX,SAAS;KACT,eAAe,EAAkB,EAAI,YAAY;eAEjD,kBAAC,GAAD,EAAS,MAAK,QAAS,CAAA;IACjB,CAAA,CAEP,EAAA,GAvBK,EAAI,YAuBT;GAET,CAAC;GACA,KACC,kBAAC,GAAD;IACE,UAAU;IACV,SAAS;IACT,SAAS,kBAAC,GAAD;KAAS,MAAM;KAAY,MAAM;IAAQ,CAAA;cACnD;GAEO,CAAA;EAEP;;AAET"}