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
@@ -1,62 +1,69 @@
1
- import { useGetDataAccessRequestForUpdate as e, useGetResearchProject as t, useUpdateDataAccessRequest as ee, useUpdateResearchProject as n } from "../../../../synapse-queries/dataaccess/useAccessRequirements.js";
1
+ import { useGetDataAccessRequestForUpdate as e, useGetResearchProject as t, useUpdateDataAccessRequest as n, useUpdateResearchProject as ee } from "../../../../synapse-queries/dataaccess/useAccessRequirements.js";
2
+ import { useGetUserProfile as r } from "../../../../synapse-queries/user/useUserBundle.js";
2
3
  import "../../../../synapse-queries/index.js";
3
- import r from "../../../IconSvg/IconSvg.js";
4
- import i, { getWordCount as a } from "../../../TextField/TextFieldWithWordLimit.js";
5
- import te from "../../../UserSearchBox/UserSearchBox.js";
6
- import ne from "../ManagedACTAccessRequirementFormWikiWrapper.js";
7
- import o from "../../../HelpPopover/index.js";
8
- import { useEffect as s, useRef as c, useState as l } from "react";
9
- import { Alert as re, Box as u, Button as d, DialogActions as ie, DialogContent as f, DialogTitle as p, IconButton as m, Stack as h, TextField as g, Typography as _ } from "@mui/material";
10
- import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
4
+ import i from "../../../IconSvg/IconSvg.js";
5
+ import a, { getWordCount as o } from "../../../TextField/TextFieldWithWordLimit.js";
6
+ import s from "../../../UserSearchBox/UserSearchBox.js";
7
+ import te from "../ManagedACTAccessRequirementFormWikiWrapper.js";
8
+ import c from "../../../HelpPopover/index.js";
9
+ import { useEffect as l, useRef as ne, useState as u } from "react";
10
+ import { Alert as re, Box as d, Button as f, DialogActions as p, DialogContent as m, DialogTitle as ie, IconButton as h, Stack as g, TextField as _, Typography as v } from "@mui/material";
11
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
11
12
  import { TYPE_FILTER as ae } from "@sage-bionetworks/synapse-types";
12
- import x from "lodash-es/isEmpty";
13
- import { InfoTwoTone as S } from "@mui/icons-material";
13
+ import S from "lodash-es/isEmpty";
14
+ import { InfoTwoTone as C } from "@mui/icons-material";
14
15
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.tsx
15
- var C = 50, w = 750;
16
- function T(T) {
17
- let { onSave: D, managedACTAccessRequirement: O, onHide: k } = T, A = !!O.eDucTemplateId, [j, M] = l(""), [N, P] = l(""), [F, I] = l(""), [L, R] = l(null), [z, B] = l(""), [V, H] = l(), [U, W] = l(!1), { data: G, isLoading: K } = t(String(O.id), { staleTime: Infinity }), { data: q, isLoading: oe } = e(String(O.id), {
16
+ var w = 50, T = 750;
17
+ function E(E) {
18
+ let { onSave: D, managedACTAccessRequirement: O, onHide: k } = E, A = !!O.eDucTemplateId, [j, M] = u(""), [N, P] = u(""), [F, I] = u(""), [L, R] = u(null), [z, B] = u(""), [V, H] = u(), [U, W] = u(!1), { data: G, isLoading: K } = t(String(O.id), { staleTime: Infinity }), { data: q, isLoading: se } = e(String(O.id), {
18
19
  enabled: A,
19
20
  staleTime: Infinity
20
- }), J = c(q);
21
- s(() => {
21
+ }), J = ne(q);
22
+ l(() => {
22
23
  J.current = q;
23
- }, [q]), s(() => {
24
- x(j) && G?.projectLead && M(G?.projectLead), x(N) && G?.institution && P(G?.institution), x(F) && G?.intendedDataUseStatement && I(G?.intendedDataUseStatement);
24
+ }, [q]), l(() => {
25
+ S(j) && G?.projectLead && M(G?.projectLead), S(N) && G?.institution && P(G?.institution), S(F) && G?.intendedDataUseStatement && I(G?.intendedDataUseStatement);
25
26
  }, [
26
27
  G?.institution,
27
28
  G?.intendedDataUseStatement,
28
29
  G?.projectLead
29
- ]), s(() => {
30
+ ]), l(() => {
30
31
  if (!A || !q) return;
31
32
  let e = q.principalInvestigator;
32
- L === null && e?.userId && R(e.userId), x(z) && e?.institutionalEmail && B(e.institutionalEmail);
33
+ L === null && e?.userId && R(e.userId), S(z) && e?.institutionalEmail && B(e.institutionalEmail);
33
34
  }, [
34
35
  A,
35
36
  q?.principalInvestigator?.userId,
36
37
  q?.principalInvestigator?.institutionalEmail
37
38
  ]);
38
- let { mutateAsync: se, isPending: Y } = n({ onError: (e) => {
39
+ let { data: Y } = r(L ?? "", { enabled: !!L });
40
+ l(() => {
41
+ if (!Y || !S(j)) return;
42
+ let e = [Y.firstName, Y.lastName].filter(Boolean).join(" ").trim();
43
+ e && M(e);
44
+ }, [Y]);
45
+ let { mutateAsync: ce, isPending: X } = ee({ onError: (e) => {
39
46
  console.log("RequestDataAccessStep1: Error updating research project data: ", e), H({
40
47
  key: "error",
41
- message: Z(e.reason)
48
+ message: Q(e.reason)
42
49
  });
43
- } }), { mutateAsync: ce, isPending: le } = ee({ onError: (e) => {
50
+ } }), { mutateAsync: le, isPending: ue } = n({ onError: (e) => {
44
51
  console.log("RequestDataAccessStep1: Error updating data access request: ", e), H({
45
52
  key: "error",
46
- message: Z(e.reason)
53
+ message: Q(e.reason)
47
54
  });
48
- } }), X = K || A && oe || Y || le, Z = (e = "") => /* @__PURE__ */ b(v, { children: [
49
- /* @__PURE__ */ y("strong", { children: "Unable to update research project data." }),
50
- /* @__PURE__ */ y("br", {}),
55
+ } }), Z = K || A && se || X || ue, Q = (e = "") => /* @__PURE__ */ x(y, { children: [
56
+ /* @__PURE__ */ b("strong", { children: "Unable to update research project data." }),
57
+ /* @__PURE__ */ b("br", {}),
51
58
  e
52
- ] }), Q = async (e) => {
59
+ ] }), $ = async (e) => {
53
60
  if (e.preventDefault(), !U) {
54
61
  W(!0);
55
62
  return;
56
63
  }
57
64
  let t;
58
65
  try {
59
- t = await se({
66
+ t = await ce({
60
67
  ...G,
61
68
  accessRequirementId: String(O.id),
62
69
  institution: N,
@@ -68,17 +75,18 @@ function T(T) {
68
75
  return;
69
76
  }
70
77
  if (A && J.current) {
71
- let e = J.current, t = {
78
+ let e = J.current, n = {
72
79
  ...e.principalInvestigator,
73
80
  userId: L ?? void 0,
74
81
  name: j || void 0,
75
82
  institutionalEmail: z || void 0
76
83
  };
77
84
  try {
78
- await ce({
85
+ await le({
79
86
  ...e,
87
+ researchProjectId: e.researchProjectId ?? t.id,
80
88
  institution: N,
81
- principalInvestigator: t
89
+ principalInvestigator: n
82
90
  });
83
91
  } catch {
84
92
  W(!1);
@@ -86,9 +94,9 @@ function T(T) {
86
94
  }
87
95
  }
88
96
  D && D(t);
89
- }, $ = j && N && (!A || L && z) && (!O.isIDURequired || F && a(F) >= C && a(F) <= w);
90
- return /* @__PURE__ */ b(v, { children: [
91
- /* @__PURE__ */ y(p, { children: /* @__PURE__ */ b(h, {
97
+ }, de = j && N && (!A || L && z) && (!O.isIDURequired || F && o(F) >= w && o(F) <= T);
98
+ return /* @__PURE__ */ x(y, { children: [
99
+ /* @__PURE__ */ b(ie, { children: /* @__PURE__ */ x(g, {
92
100
  direction: "row",
93
101
  sx: {
94
102
  alignItems: "center",
@@ -96,10 +104,11 @@ function T(T) {
96
104
  },
97
105
  children: [
98
106
  "Request Access",
99
- /* @__PURE__ */ y(u, { sx: { flexGrow: 1 } }),
100
- /* @__PURE__ */ y(m, {
107
+ /* @__PURE__ */ b(d, { sx: { flexGrow: 1 } }),
108
+ /* @__PURE__ */ b(h, {
109
+ "aria-label": "Close",
101
110
  onClick: k,
102
- children: /* @__PURE__ */ y(r, {
111
+ children: /* @__PURE__ */ b(i, {
103
112
  icon: "close",
104
113
  wrap: !1,
105
114
  sx: { color: "grey.700" }
@@ -107,50 +116,39 @@ function T(T) {
107
116
  })
108
117
  ]
109
118
  }) }),
110
- U && /* @__PURE__ */ y(E, { isIDURequired: O.isIDURequired }),
111
- !U && /* @__PURE__ */ b(f, { children: [/* @__PURE__ */ y(ne, {
119
+ U && /* @__PURE__ */ b(oe, { isIDURequired: O.isIDURequired }),
120
+ !U && /* @__PURE__ */ x(m, { children: [/* @__PURE__ */ b(te, {
112
121
  managedACTAccessRequirementId: String(O.id),
113
- children: /* @__PURE__ */ b(u, {
122
+ children: /* @__PURE__ */ x(d, {
114
123
  component: "form",
115
124
  onSubmit: (e) => {
116
- Q(e);
125
+ $(e);
117
126
  },
118
127
  sx: { "& .MuiTextField-root": { marginBottom: "20px" } },
119
128
  children: [
120
- /* @__PURE__ */ y(g, {
129
+ /* @__PURE__ */ b(_, {
121
130
  id: "project-lead",
122
- label: /* @__PURE__ */ b(u, {
131
+ label: /* @__PURE__ */ x(d, {
123
132
  sx: { display: "inline" },
124
- children: [/* @__PURE__ */ y("span", { children: "First and last names of your Project Lead or PI" }), /* @__PURE__ */ y(o, {
125
- Icon: S,
133
+ children: [/* @__PURE__ */ b("span", { children: "First and last names of your Project Lead or PI" }), /* @__PURE__ */ b(c, {
134
+ Icon: C,
126
135
  containerSx: { float: "right" },
127
136
  markdownText: "This field is required.\n\nProvide the name of one person who serves as the project leader or PI."
128
137
  })]
129
138
  }),
130
139
  placeholder: "First and last name of individual leading the project, ex: Jane Smith",
131
140
  fullWidth: !0,
132
- disabled: X,
141
+ disabled: Z,
133
142
  type: "text",
134
143
  value: j,
135
144
  required: !0,
136
145
  onChange: (e) => M(e.target.value),
137
146
  slotProps: { inputLabel: { sx: { width: "100%" } } }
138
147
  }),
139
- /* @__PURE__ */ y(g, {
140
- id: "institution",
141
- label: "Your Institution",
142
- placeholder: "Full, unabbreviated name of the institution you are affiliated with",
143
- fullWidth: !0,
144
- type: "text",
145
- disabled: X,
146
- value: N,
147
- required: !0,
148
- onChange: (e) => P(e.target.value)
149
- }),
150
- A && /* @__PURE__ */ b(u, {
148
+ A && /* @__PURE__ */ x(d, {
151
149
  sx: { mb: "20px" },
152
150
  children: [
153
- /* @__PURE__ */ b(_, {
151
+ /* @__PURE__ */ x(v, {
154
152
  component: "label",
155
153
  htmlFor: "pi-user",
156
154
  variant: "body1",
@@ -158,26 +156,26 @@ function T(T) {
158
156
  display: "block",
159
157
  mb: 1
160
158
  },
161
- children: ["Synapse username of your Project Lead or PI", /* @__PURE__ */ b(u, {
159
+ children: ["Synapse username of your Project Lead or PI", /* @__PURE__ */ x(d, {
162
160
  component: "span",
163
161
  sx: { color: "error.main" },
164
162
  children: [" ", "*"]
165
163
  })]
166
164
  }),
167
- /* @__PURE__ */ y(te, {
165
+ /* @__PURE__ */ b(s, {
168
166
  inputId: "pi-user",
169
167
  typeFilter: ae.USERS_ONLY,
170
168
  value: L,
171
169
  onChange: (e) => R(e),
172
170
  placeholder: "Search Synapse for your Project Lead or PI"
173
171
  }),
174
- /* @__PURE__ */ y(g, {
172
+ /* @__PURE__ */ b(_, {
175
173
  id: "pi-email",
176
174
  label: "Institutional Email of your Project Lead or PI",
177
175
  type: "email",
178
176
  placeholder: "pi@example.edu",
179
177
  fullWidth: !0,
180
- disabled: X,
178
+ disabled: Z,
181
179
  value: z,
182
180
  required: !0,
183
181
  onChange: (e) => B(e.target.value),
@@ -185,14 +183,25 @@ function T(T) {
185
183
  })
186
184
  ]
187
185
  }),
188
- O.isIDURequired && /* @__PURE__ */ y(i, {
186
+ /* @__PURE__ */ b(_, {
187
+ id: "institution",
188
+ label: "Your Institution",
189
+ placeholder: "Full, unabbreviated name of the institution you are affiliated with",
190
+ fullWidth: !0,
191
+ type: "text",
192
+ disabled: Z,
193
+ value: N,
194
+ required: !0,
195
+ onChange: (e) => P(e.target.value)
196
+ }),
197
+ O.isIDURequired && /* @__PURE__ */ b(a, {
189
198
  id: "data-use",
190
- minWords: C,
191
- maxWords: w,
192
- label: /* @__PURE__ */ b(u, {
199
+ minWords: w,
200
+ maxWords: T,
201
+ label: /* @__PURE__ */ x(d, {
193
202
  sx: { display: "inline" },
194
- children: [/* @__PURE__ */ y("span", { children: "Intended Data Use (IDU)" }), /* @__PURE__ */ y(o, {
195
- Icon: S,
203
+ children: [/* @__PURE__ */ b("span", { children: "Intended Data Use (IDU)" }), /* @__PURE__ */ b(c, {
204
+ Icon: C,
196
205
  containerSx: { float: "right" },
197
206
  markdownText: "This field is required.\n\nCheck the instructions for data access for information on completing the IDU statement."
198
207
  })]
@@ -203,97 +212,97 @@ function T(T) {
203
212
  required: !0,
204
213
  multiline: !0,
205
214
  rows: 9,
206
- disabled: X,
215
+ disabled: Z,
207
216
  value: F,
208
217
  onChange: (e) => I(e.target.value)
209
218
  })
210
219
  ]
211
220
  })
212
- }), V && /* @__PURE__ */ y(re, {
221
+ }), V && /* @__PURE__ */ b(re, {
213
222
  severity: V.key,
214
223
  children: V.message
215
224
  })] }),
216
- /* @__PURE__ */ b(ie, { children: [
217
- U && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(d, {
225
+ /* @__PURE__ */ x(p, { children: [
226
+ U && /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(f, {
218
227
  variant: "outlined",
219
228
  onClick: () => {
220
229
  W(!1);
221
230
  },
222
231
  children: "Back"
223
- }), /* @__PURE__ */ y(u, { sx: { flexGrow: 1 } })] }),
224
- /* @__PURE__ */ y(d, {
232
+ }), /* @__PURE__ */ b(d, { sx: { flexGrow: 1 } })] }),
233
+ /* @__PURE__ */ b(f, {
225
234
  variant: "outlined",
226
- disabled: X,
235
+ disabled: Z,
227
236
  onClick: k,
228
237
  children: "Cancel"
229
238
  }),
230
- /* @__PURE__ */ y(d, {
239
+ /* @__PURE__ */ b(f, {
231
240
  variant: "contained",
232
241
  type: "submit",
233
- disabled: X || !$,
242
+ disabled: Z || !de,
234
243
  onClick: (e) => {
235
- Q(e);
244
+ $(e);
236
245
  },
237
- children: Y ? "Saving..." : "Save and Continue"
246
+ children: X ? "Saving..." : "Save and Continue"
238
247
  })
239
248
  ] })
240
249
  ] });
241
250
  }
242
- function E(e) {
251
+ function oe(e) {
243
252
  let { isIDURequired: t } = e;
244
- return /* @__PURE__ */ b(f, { children: [
245
- /* @__PURE__ */ y(_, {
253
+ return /* @__PURE__ */ x(m, { children: [
254
+ /* @__PURE__ */ b(v, {
246
255
  variant: "body1",
247
256
  gutterBottom: !0,
248
257
  sx: { fontWeight: 700 },
249
258
  children: "Double-check your submission before continuing!"
250
259
  }),
251
- /* @__PURE__ */ y(_, {
260
+ /* @__PURE__ */ b(v, {
252
261
  variant: "body1",
253
262
  gutterBottom: !0,
254
263
  children: "Here are some common reasons a request is rejected:"
255
264
  }),
256
- /* @__PURE__ */ b(u, {
265
+ /* @__PURE__ */ x(d, {
257
266
  component: "ul",
258
267
  children: [
259
- /* @__PURE__ */ b(_, {
268
+ /* @__PURE__ */ x(v, {
260
269
  component: "li",
261
270
  variant: "body1",
262
271
  gutterBottom: !0,
263
272
  children: [
264
273
  "Is your ",
265
- /* @__PURE__ */ y("i", { children: "Project Lead" }),
274
+ /* @__PURE__ */ b("i", { children: "Project Lead" }),
266
275
  " a full name (first and last)?"
267
276
  ]
268
277
  }),
269
- /* @__PURE__ */ b(_, {
278
+ /* @__PURE__ */ x(v, {
270
279
  component: "li",
271
280
  variant: "body1",
272
281
  gutterBottom: !0,
273
282
  children: [
274
283
  "Is the ",
275
- /* @__PURE__ */ y("i", { children: "Institution" }),
284
+ /* @__PURE__ */ b("i", { children: "Institution" }),
276
285
  " name you provided unabbreviated and verifiable? You must give the full name of your institution, so we can look it up."
277
286
  ]
278
287
  }),
279
- t && /* @__PURE__ */ b(_, {
288
+ t && /* @__PURE__ */ x(v, {
280
289
  component: "li",
281
290
  variant: "body1",
282
291
  gutterBottom: !0,
283
292
  children: [
284
293
  "Did you provide clear ",
285
- /* @__PURE__ */ y("i", { children: "study objectives" }),
294
+ /* @__PURE__ */ b("i", { children: "study objectives" }),
286
295
  " and your",
287
296
  " ",
288
- /* @__PURE__ */ y("i", { children: "study design" }),
297
+ /* @__PURE__ */ b("i", { children: "study design" }),
289
298
  " and ",
290
- /* @__PURE__ */ y("i", { children: "analysis plan" }),
299
+ /* @__PURE__ */ b("i", { children: "analysis plan" }),
291
300
  " in the IDU section?"
292
301
  ]
293
302
  })
294
303
  ]
295
304
  }),
296
- /* @__PURE__ */ y(_, {
305
+ /* @__PURE__ */ b(v, {
297
306
  variant: "body1",
298
307
  gutterBottom: !0,
299
308
  children: "Please take a minute to make sure your submission is correct. If your submission is rejected, you’ll have to resubmit after a few days!"
@@ -301,6 +310,6 @@ function E(e) {
301
310
  ] });
302
311
  }
303
312
  //#endregion
304
- export { T as default };
313
+ export { E as default };
305
314
 
306
315
  //# sourceMappingURL=ResearchProjectForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResearchProjectForm.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetResearchProject,\n useUpdateDataAccessRequest,\n useUpdateResearchProject,\n} from '@/synapse-queries'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ManagedACTAccessRequirement,\n PrincipalInvestigator,\n Renewal,\n Request,\n ResearchProject,\n TYPE_FILTER,\n} from '@sage-bionetworks/synapse-types'\nimport isEmpty from 'lodash-es/isEmpty'\nimport { FormEvent, useEffect, useRef, useState } from 'react'\nimport HelpPopover from '../../../HelpPopover'\nimport IconSvg from '../../../IconSvg/IconSvg'\nimport TextFieldWithWordLimit, {\n getWordCount,\n} from '../../../TextField/TextFieldWithWordLimit'\nimport UserSearchBox from '../../../UserSearchBox/UserSearchBox'\nimport { AlertProps } from '../DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm'\nimport ManagedACTAccessRequirementFormWikiWrapper from '../ManagedACTAccessRequirementFormWikiWrapper'\n\nconst INTENDED_DATA_USE_MIN_WORD_COUNT = 50\nconst INTENDED_DATA_USE_MAX_WORD_COUNT = 750 // SWC-7526\n\nexport type ResearchProjectFormProps = {\n /* The access requirement to which the research project refers */\n managedACTAccessRequirement: ManagedACTAccessRequirement\n onSave?: (researchProject: ResearchProject) => void\n onHide?: () => void\n}\n\n/**\n * Step 1 of the Data Access Request/Renewal flow prompts the user to provide information about their ResearchProject.\n */\nexport default function ResearchProjectForm(props: ResearchProjectFormProps) {\n const { onSave, managedACTAccessRequirement, onHide } = props\n const isEDucEnabled = Boolean(managedACTAccessRequirement.eDucTemplateId)\n const [projectLead, setProjectLead] = useState<string>('')\n const [institution, setInstitution] = useState<string>('')\n const [intendedDataUseStatement, setIntendedDataUseStatement] =\n useState<string>('')\n const [piUserId, setPiUserId] = useState<string | null>(null)\n const [piEmail, setPiEmail] = useState<string>('')\n const [alert, setAlert] = useState<AlertProps | undefined>()\n\n const [showConfirmationScreen, setShowConfirmationScreen] = useState(false)\n\n const { data: existingResearchProject, isLoading: isLoadingInitialData } =\n useGetResearchProject(String(managedACTAccessRequirement.id), {\n // Infinite staleTime ensures this won't be refetched unless explicitly invalidated by the mutation\n staleTime: Infinity,\n })\n\n const {\n data: existingDataAccessRequest,\n isLoading: isLoadingDataAccessRequest,\n } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n enabled: isEDucEnabled,\n staleTime: Infinity,\n })\n const existingDarRef = useRef(existingDataAccessRequest)\n useEffect(() => {\n existingDarRef.current = existingDataAccessRequest\n }, [existingDataAccessRequest])\n\n // Populate the form with existing data if it exists\n useEffect(() => {\n if (isEmpty(projectLead) && existingResearchProject?.projectLead) {\n setProjectLead(existingResearchProject?.projectLead)\n }\n if (isEmpty(institution) && existingResearchProject?.institution) {\n setInstitution(existingResearchProject?.institution)\n }\n if (\n isEmpty(intendedDataUseStatement) &&\n existingResearchProject?.intendedDataUseStatement\n ) {\n setIntendedDataUseStatement(\n existingResearchProject?.intendedDataUseStatement,\n )\n }\n }, [\n existingResearchProject?.institution,\n existingResearchProject?.intendedDataUseStatement,\n existingResearchProject?.projectLead,\n // PORTALS-3774: initialize from existingResearchProject, but do not reset institution,\n // projectLead, or intendedDataUseStatement if they have been modified\n ])\n\n // Prefill eDUC-only PI fields from any previously-saved DAR values.\n useEffect(() => {\n if (!isEDucEnabled || !existingDataAccessRequest) return\n const pi = existingDataAccessRequest.principalInvestigator\n if (piUserId === null && pi?.userId) {\n setPiUserId(pi.userId)\n }\n if (isEmpty(piEmail) && pi?.institutionalEmail) {\n setPiEmail(pi.institutionalEmail)\n }\n // PORTALS-4375: initialize from existingDataAccessRequest, but do not reset\n // fields once the user has interacted with them.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isEDucEnabled,\n existingDataAccessRequest?.principalInvestigator?.userId,\n existingDataAccessRequest?.principalInvestigator?.institutionalEmail,\n ])\n\n const { mutateAsync: updateResearchProject, isPending: updateIsPending } =\n useUpdateResearchProject({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating research project data: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const {\n mutateAsync: updateDataAccessRequest,\n isPending: updateDarIsPending,\n } = useUpdateDataAccessRequest({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating data access request: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const isLoading =\n isLoadingInitialData ||\n (isEDucEnabled && isLoadingDataAccessRequest) ||\n updateIsPending ||\n updateDarIsPending\n\n const getErrorMessage = (reason: string = '') => {\n return (\n <>\n <strong>Unable to update research project data.</strong>\n <br />\n {reason}\n </>\n )\n }\n\n const handleSubmit = async (e: FormEvent<HTMLElement>) => {\n e.preventDefault()\n if (!showConfirmationScreen) {\n setShowConfirmationScreen(true)\n return\n }\n let updatedResearchProject: ResearchProject\n try {\n updatedResearchProject = await updateResearchProject({\n ...existingResearchProject,\n accessRequirementId: String(managedACTAccessRequirement.id),\n institution: institution,\n projectLead: projectLead,\n intendedDataUseStatement: intendedDataUseStatement || undefined,\n })\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n if (isEDucEnabled && existingDarRef.current) {\n const existingDar = existingDarRef.current\n const nextPi: PrincipalInvestigator = {\n ...existingDar.principalInvestigator,\n userId: piUserId ?? undefined,\n name: projectLead || undefined,\n institutionalEmail: piEmail || undefined,\n }\n try {\n await updateDataAccessRequest({\n ...existingDar,\n institution: institution,\n principalInvestigator: nextPi,\n } as Request | Renewal)\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n }\n if (onSave) {\n onSave(updatedResearchProject)\n }\n }\n\n const formIsValid =\n projectLead &&\n institution &&\n (!isEDucEnabled || (piUserId && piEmail)) &&\n (!managedACTAccessRequirement.isIDURequired ||\n (intendedDataUseStatement &&\n getWordCount(intendedDataUseStatement) >=\n INTENDED_DATA_USE_MIN_WORD_COUNT &&\n getWordCount(intendedDataUseStatement) <=\n INTENDED_DATA_USE_MAX_WORD_COUNT))\n\n return (\n <>\n <DialogTitle>\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: '5px',\n }}\n >\n Request Access\n <Box sx={{ flexGrow: 1 }} />\n <IconButton onClick={onHide}>\n <IconSvg icon={'close'} wrap={false} sx={{ color: 'grey.700' }} />\n </IconButton>\n </Stack>\n </DialogTitle>\n {showConfirmationScreen && (\n <ConfirmationScreenContent\n isIDURequired={managedACTAccessRequirement.isIDURequired}\n />\n )}\n {!showConfirmationScreen && (\n <DialogContent>\n <ManagedACTAccessRequirementFormWikiWrapper\n managedACTAccessRequirementId={String(\n managedACTAccessRequirement.id,\n )}\n >\n <Box\n component={'form'}\n onSubmit={e => {\n void handleSubmit(e)\n }}\n sx={{\n '& .MuiTextField-root': {\n marginBottom: '20px',\n },\n }}\n >\n <TextField\n id={'project-lead'}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>First and last names of your Project Lead or PI</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nProvide the name of one person who serves as the project leader or PI.`}\n />\n </Box>\n }\n placeholder={\n 'First and last name of individual leading the project, ex: Jane Smith'\n }\n fullWidth\n disabled={isLoading}\n type=\"text\"\n value={projectLead}\n required\n onChange={e => setProjectLead(e.target.value)}\n slotProps={{\n inputLabel: {\n // allows floating the help popover all the way to the right\n sx: { width: '100%' },\n },\n }}\n />\n <TextField\n id={'institution'}\n label={'Your Institution'}\n placeholder={\n 'Full, unabbreviated name of the institution you are affiliated with'\n }\n fullWidth\n type=\"text\"\n disabled={isLoading}\n value={institution}\n required\n onChange={e => setInstitution(e.target.value)}\n />\n\n {isEDucEnabled && (\n <Box sx={{ mb: '20px' }}>\n <Typography\n component=\"label\"\n htmlFor=\"pi-user\"\n variant=\"body1\"\n sx={{ display: 'block', mb: 1 }}\n >\n Synapse username of your Project Lead or PI\n <Box component=\"span\" sx={{ color: 'error.main' }}>\n {' '}\n *\n </Box>\n </Typography>\n <UserSearchBox\n inputId=\"pi-user\"\n typeFilter={TYPE_FILTER.USERS_ONLY}\n value={piUserId}\n onChange={principalId => setPiUserId(principalId)}\n placeholder=\"Search Synapse for your Project Lead or PI\"\n />\n <TextField\n id=\"pi-email\"\n label=\"Institutional Email of your Project Lead or PI\"\n type=\"email\"\n placeholder=\"pi@example.edu\"\n fullWidth\n disabled={isLoading}\n value={piEmail}\n required\n onChange={e => setPiEmail(e.target.value)}\n sx={{ mt: 2 }}\n />\n </Box>\n )}\n\n {managedACTAccessRequirement.isIDURequired && (\n <TextFieldWithWordLimit\n id={'data-use'}\n minWords={INTENDED_DATA_USE_MIN_WORD_COUNT}\n maxWords={INTENDED_DATA_USE_MAX_WORD_COUNT}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>Intended Data Use (IDU)</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nCheck the instructions for data access for information on completing the IDU statement.`}\n />\n </Box>\n }\n helperText={\n managedACTAccessRequirement.isIDUPublic\n ? 'This will be visible to the public'\n : undefined\n }\n placeholder={\n 'Outline the objectives of your proposed research involving this data, and your study design and analysis plan.'\n }\n fullWidth\n required\n multiline\n rows={9}\n disabled={isLoading}\n value={intendedDataUseStatement}\n onChange={e => setIntendedDataUseStatement(e.target.value)}\n />\n )}\n </Box>\n </ManagedACTAccessRequirementFormWikiWrapper>\n {alert && <Alert severity={alert.key}>{alert.message}</Alert>}\n </DialogContent>\n )}\n <DialogActions>\n {showConfirmationScreen && (\n <>\n <Button\n variant={'outlined'}\n onClick={() => {\n setShowConfirmationScreen(false)\n }}\n >\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }}>{/* spacer */}</Box>\n </>\n )}\n <Button variant=\"outlined\" disabled={isLoading} onClick={onHide}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n type=\"submit\"\n disabled={isLoading || !formIsValid}\n onClick={e => {\n void handleSubmit(e)\n }}\n >\n {updateIsPending ? 'Saving...' : 'Save and Continue'}\n </Button>\n </DialogActions>\n </>\n )\n}\n\nfunction ConfirmationScreenContent(props: { isIDURequired: boolean }) {\n const { isIDURequired } = props\n return (\n <DialogContent>\n <Typography\n variant=\"body1\"\n gutterBottom\n sx={{\n fontWeight: 700,\n }}\n >\n Double-check your submission before continuing!\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Here are some common reasons a request is rejected:\n </Typography>\n <Box component=\"ul\">\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is your <i>Project Lead</i> a full name (first and last)?\n </Typography>\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is the <i>Institution</i> name you provided unabbreviated and\n verifiable? You must give the full name of your institution, so we can\n look it up.\n </Typography>\n {isIDURequired && (\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Did you provide clear <i>study objectives</i> and your{' '}\n <i>study design</i> and <i>analysis plan</i> in the IDU section?\n </Typography>\n )}\n </Box>\n <Typography variant=\"body1\" gutterBottom>\n Please take a minute to make sure your submission is correct. If your\n submission is rejected, you’ll have to resubmit after a few days!\n </Typography>\n </DialogContent>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResearchProjectForm.js","names":[],"sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.tsx"],"sourcesContent":["import {\n useGetDataAccessRequestForUpdate,\n useGetResearchProject,\n useGetUserProfile,\n useUpdateDataAccessRequest,\n useUpdateResearchProject,\n} from '@/synapse-queries'\nimport { InfoTwoTone } from '@mui/icons-material'\nimport {\n Alert,\n Box,\n Button,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport {\n ManagedACTAccessRequirement,\n PrincipalInvestigator,\n Renewal,\n Request,\n ResearchProject,\n TYPE_FILTER,\n} from '@sage-bionetworks/synapse-types'\nimport isEmpty from 'lodash-es/isEmpty'\nimport { FormEvent, useEffect, useRef, useState } from 'react'\nimport HelpPopover from '../../../HelpPopover'\nimport IconSvg from '../../../IconSvg/IconSvg'\nimport TextFieldWithWordLimit, {\n getWordCount,\n} from '../../../TextField/TextFieldWithWordLimit'\nimport UserSearchBox from '../../../UserSearchBox/UserSearchBox'\nimport { AlertProps } from '../DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm'\nimport ManagedACTAccessRequirementFormWikiWrapper from '../ManagedACTAccessRequirementFormWikiWrapper'\n\nconst INTENDED_DATA_USE_MIN_WORD_COUNT = 50\nconst INTENDED_DATA_USE_MAX_WORD_COUNT = 750 // SWC-7526\n\nexport type ResearchProjectFormProps = {\n /* The access requirement to which the research project refers */\n managedACTAccessRequirement: ManagedACTAccessRequirement\n onSave?: (researchProject: ResearchProject) => void\n onHide?: () => void\n}\n\n/**\n * Step 1 of the Data Access Request/Renewal flow prompts the user to provide information about their ResearchProject.\n */\nexport default function ResearchProjectForm(props: ResearchProjectFormProps) {\n const { onSave, managedACTAccessRequirement, onHide } = props\n const isEDucEnabled = Boolean(managedACTAccessRequirement.eDucTemplateId)\n const [projectLead, setProjectLead] = useState<string>('')\n const [institution, setInstitution] = useState<string>('')\n const [intendedDataUseStatement, setIntendedDataUseStatement] =\n useState<string>('')\n const [piUserId, setPiUserId] = useState<string | null>(null)\n const [piEmail, setPiEmail] = useState<string>('')\n const [alert, setAlert] = useState<AlertProps | undefined>()\n\n const [showConfirmationScreen, setShowConfirmationScreen] = useState(false)\n\n const { data: existingResearchProject, isLoading: isLoadingInitialData } =\n useGetResearchProject(String(managedACTAccessRequirement.id), {\n // Infinite staleTime ensures this won't be refetched unless explicitly invalidated by the mutation\n staleTime: Infinity,\n })\n\n const {\n data: existingDataAccessRequest,\n isLoading: isLoadingDataAccessRequest,\n } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {\n enabled: isEDucEnabled,\n staleTime: Infinity,\n })\n const existingDarRef = useRef(existingDataAccessRequest)\n useEffect(() => {\n existingDarRef.current = existingDataAccessRequest\n }, [existingDataAccessRequest])\n\n // Populate the form with existing data if it exists\n useEffect(() => {\n if (isEmpty(projectLead) && existingResearchProject?.projectLead) {\n setProjectLead(existingResearchProject?.projectLead)\n }\n if (isEmpty(institution) && existingResearchProject?.institution) {\n setInstitution(existingResearchProject?.institution)\n }\n if (\n isEmpty(intendedDataUseStatement) &&\n existingResearchProject?.intendedDataUseStatement\n ) {\n setIntendedDataUseStatement(\n existingResearchProject?.intendedDataUseStatement,\n )\n }\n }, [\n existingResearchProject?.institution,\n existingResearchProject?.intendedDataUseStatement,\n existingResearchProject?.projectLead,\n // PORTALS-3774: initialize from existingResearchProject, but do not reset institution,\n // projectLead, or intendedDataUseStatement if they have been modified\n ])\n\n // Prefill eDUC-only PI fields from any previously-saved DAR values.\n useEffect(() => {\n if (!isEDucEnabled || !existingDataAccessRequest) return\n const pi = existingDataAccessRequest.principalInvestigator\n if (piUserId === null && pi?.userId) {\n setPiUserId(pi.userId)\n }\n if (isEmpty(piEmail) && pi?.institutionalEmail) {\n setPiEmail(pi.institutionalEmail)\n }\n // PORTALS-4375: initialize from existingDataAccessRequest, but do not reset\n // fields once the user has interacted with them.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isEDucEnabled,\n existingDataAccessRequest?.principalInvestigator?.userId,\n existingDataAccessRequest?.principalInvestigator?.institutionalEmail,\n ])\n\n const { data: piUserProfile } = useGetUserProfile(piUserId ?? '', {\n enabled: Boolean(piUserId),\n })\n\n useEffect(() => {\n if (!piUserProfile || !isEmpty(projectLead)) return\n const fullName = [piUserProfile.firstName, piUserProfile.lastName]\n .filter(Boolean)\n .join(' ')\n .trim()\n if (fullName) {\n setProjectLead(fullName)\n }\n // Only populate when projectLead is empty; do not overwrite user edits.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [piUserProfile])\n\n const { mutateAsync: updateResearchProject, isPending: updateIsPending } =\n useUpdateResearchProject({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating research project data: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const {\n mutateAsync: updateDataAccessRequest,\n isPending: updateDarIsPending,\n } = useUpdateDataAccessRequest({\n onError: e => {\n console.log(\n 'RequestDataAccessStep1: Error updating data access request: ',\n e,\n )\n setAlert({\n key: 'error',\n message: getErrorMessage(e.reason),\n })\n },\n })\n\n const isLoading =\n isLoadingInitialData ||\n (isEDucEnabled && isLoadingDataAccessRequest) ||\n updateIsPending ||\n updateDarIsPending\n\n const getErrorMessage = (reason: string = '') => {\n return (\n <>\n <strong>Unable to update research project data.</strong>\n <br />\n {reason}\n </>\n )\n }\n\n const handleSubmit = async (e: FormEvent<HTMLElement>) => {\n e.preventDefault()\n if (!showConfirmationScreen) {\n setShowConfirmationScreen(true)\n return\n }\n let updatedResearchProject: ResearchProject\n try {\n updatedResearchProject = await updateResearchProject({\n ...existingResearchProject,\n accessRequirementId: String(managedACTAccessRequirement.id),\n institution: institution,\n projectLead: projectLead,\n intendedDataUseStatement: intendedDataUseStatement || undefined,\n })\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n if (isEDucEnabled && existingDarRef.current) {\n const existingDar = existingDarRef.current\n const nextPi: PrincipalInvestigator = {\n ...existingDar.principalInvestigator,\n userId: piUserId ?? undefined,\n name: projectLead || undefined,\n institutionalEmail: piEmail || undefined,\n }\n try {\n await updateDataAccessRequest({\n ...existingDar,\n // The DAR is fetched before the ResearchProject exists, so it may not have an id yet\n researchProjectId:\n existingDar.researchProjectId ?? updatedResearchProject.id,\n institution: institution,\n principalInvestigator: nextPi,\n } as Request | Renewal)\n } catch {\n setShowConfirmationScreen(false)\n return\n }\n }\n if (onSave) {\n onSave(updatedResearchProject)\n }\n }\n\n const formIsValid =\n projectLead &&\n institution &&\n (!isEDucEnabled || (piUserId && piEmail)) &&\n (!managedACTAccessRequirement.isIDURequired ||\n (intendedDataUseStatement &&\n getWordCount(intendedDataUseStatement) >=\n INTENDED_DATA_USE_MIN_WORD_COUNT &&\n getWordCount(intendedDataUseStatement) <=\n INTENDED_DATA_USE_MAX_WORD_COUNT))\n\n return (\n <>\n <DialogTitle>\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: '5px',\n }}\n >\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 {showConfirmationScreen && (\n <ConfirmationScreenContent\n isIDURequired={managedACTAccessRequirement.isIDURequired}\n />\n )}\n {!showConfirmationScreen && (\n <DialogContent>\n <ManagedACTAccessRequirementFormWikiWrapper\n managedACTAccessRequirementId={String(\n managedACTAccessRequirement.id,\n )}\n >\n <Box\n component={'form'}\n onSubmit={e => {\n void handleSubmit(e)\n }}\n sx={{\n '& .MuiTextField-root': {\n marginBottom: '20px',\n },\n }}\n >\n <TextField\n id={'project-lead'}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>First and last names of your Project Lead or PI</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nProvide the name of one person who serves as the project leader or PI.`}\n />\n </Box>\n }\n placeholder={\n 'First and last name of individual leading the project, ex: Jane Smith'\n }\n fullWidth\n disabled={isLoading}\n type=\"text\"\n value={projectLead}\n required\n onChange={e => setProjectLead(e.target.value)}\n slotProps={{\n inputLabel: {\n // allows floating the help popover all the way to the right\n sx: { width: '100%' },\n },\n }}\n />\n {isEDucEnabled && (\n <Box sx={{ mb: '20px' }}>\n <Typography\n component=\"label\"\n htmlFor=\"pi-user\"\n variant=\"body1\"\n sx={{ display: 'block', mb: 1 }}\n >\n Synapse username of your Project Lead or PI\n <Box component=\"span\" sx={{ color: 'error.main' }}>\n {' '}\n *\n </Box>\n </Typography>\n <UserSearchBox\n inputId=\"pi-user\"\n typeFilter={TYPE_FILTER.USERS_ONLY}\n value={piUserId}\n onChange={principalId => setPiUserId(principalId)}\n placeholder=\"Search Synapse for your Project Lead or PI\"\n />\n <TextField\n id=\"pi-email\"\n label=\"Institutional Email of your Project Lead or PI\"\n type=\"email\"\n placeholder=\"pi@example.edu\"\n fullWidth\n disabled={isLoading}\n value={piEmail}\n required\n onChange={e => setPiEmail(e.target.value)}\n sx={{ mt: 2 }}\n />\n </Box>\n )}\n\n <TextField\n id={'institution'}\n label={'Your Institution'}\n placeholder={\n 'Full, unabbreviated name of the institution you are affiliated with'\n }\n fullWidth\n type=\"text\"\n disabled={isLoading}\n value={institution}\n required\n onChange={e => setInstitution(e.target.value)}\n />\n\n {managedACTAccessRequirement.isIDURequired && (\n <TextFieldWithWordLimit\n id={'data-use'}\n minWords={INTENDED_DATA_USE_MIN_WORD_COUNT}\n maxWords={INTENDED_DATA_USE_MAX_WORD_COUNT}\n label={\n <Box sx={{ display: 'inline' }}>\n <span>Intended Data Use (IDU)</span>\n <HelpPopover\n Icon={InfoTwoTone}\n containerSx={{ float: 'right' }}\n markdownText={`This field is required.\\n\\nCheck the instructions for data access for information on completing the IDU statement.`}\n />\n </Box>\n }\n helperText={\n managedACTAccessRequirement.isIDUPublic\n ? 'This will be visible to the public'\n : undefined\n }\n placeholder={\n 'Outline the objectives of your proposed research involving this data, and your study design and analysis plan.'\n }\n fullWidth\n required\n multiline\n rows={9}\n disabled={isLoading}\n value={intendedDataUseStatement}\n onChange={e => setIntendedDataUseStatement(e.target.value)}\n />\n )}\n </Box>\n </ManagedACTAccessRequirementFormWikiWrapper>\n {alert && <Alert severity={alert.key}>{alert.message}</Alert>}\n </DialogContent>\n )}\n <DialogActions>\n {showConfirmationScreen && (\n <>\n <Button\n variant={'outlined'}\n onClick={() => {\n setShowConfirmationScreen(false)\n }}\n >\n Back\n </Button>\n <Box sx={{ flexGrow: 1 }}>{/* spacer */}</Box>\n </>\n )}\n <Button variant=\"outlined\" disabled={isLoading} onClick={onHide}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n type=\"submit\"\n disabled={isLoading || !formIsValid}\n onClick={e => {\n void handleSubmit(e)\n }}\n >\n {updateIsPending ? 'Saving...' : 'Save and Continue'}\n </Button>\n </DialogActions>\n </>\n )\n}\n\nfunction ConfirmationScreenContent(props: { isIDURequired: boolean }) {\n const { isIDURequired } = props\n return (\n <DialogContent>\n <Typography\n variant=\"body1\"\n gutterBottom\n sx={{\n fontWeight: 700,\n }}\n >\n Double-check your submission before continuing!\n </Typography>\n <Typography variant=\"body1\" gutterBottom>\n Here are some common reasons a request is rejected:\n </Typography>\n <Box component=\"ul\">\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is your <i>Project Lead</i> a full name (first and last)?\n </Typography>\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Is the <i>Institution</i> name you provided unabbreviated and\n verifiable? You must give the full name of your institution, so we can\n look it up.\n </Typography>\n {isIDURequired && (\n <Typography component={'li'} variant=\"body1\" gutterBottom>\n Did you provide clear <i>study objectives</i> and your{' '}\n <i>study design</i> and <i>analysis plan</i> in the IDU section?\n </Typography>\n )}\n </Box>\n <Typography variant=\"body1\" gutterBottom>\n Please take a minute to make sure your submission is correct. If your\n submission is rejected, you’ll have to resubmit after a few days!\n </Typography>\n </DialogContent>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AccessorChange, PrincipalInvestigator, SigningOfficial } from '@sage-bionetworks/synapse-types';
2
+ export type ReviewCollaboratorsAndSigningOfficialAccordionProps = {
3
+ accessorChanges: AccessorChange[];
4
+ principalInvestigator?: PrincipalInvestigator;
5
+ signingOfficial?: SigningOfficial;
6
+ isLoading?: boolean;
7
+ };
8
+ /**
9
+ * Collapsible summary of the DAR's collaborators, PI, and signing official.
10
+ * Shared by ReviewDucStep and ManualUploadDucStep.
11
+ */
12
+ export declare function ReviewCollaboratorsAndSigningOfficialAccordion(props: ReviewCollaboratorsAndSigningOfficialAccordionProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=ReviewCollaboratorsAndSigningOfficialAccordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewCollaboratorsAndSigningOfficialAccordion.d.ts","sourceRoot":"","sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.tsx"],"names":[],"mappings":"AASA,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,eAAe,EAChB,MAAM,iCAAiC,CAAA;AAIxC,MAAM,MAAM,mDAAmD,GAAG;IAChE,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAgB,8CAA8C,CAC5D,KAAK,EAAE,mDAAmD,2CA8G3D"}