synapse-react-client 4.0.33 → 4.0.34

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 (87) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts +5 -1
  3. package/dist/components/AccessRequirementList/AccessRequirementList.d.ts.map +1 -1
  4. package/dist/components/AccessRequirementList/AccessRequirementList.js +152 -85
  5. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  6. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js +1 -0
  7. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
  8. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts +1 -0
  9. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.d.ts.map +1 -1
  10. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js +49 -42
  11. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  12. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts +6 -0
  13. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.d.ts.map +1 -1
  14. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js +161 -155
  15. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
  16. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts +21 -0
  17. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.d.ts.map +1 -0
  18. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js +163 -0
  19. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/EDucPreviewStep/EDucPreviewStep.js.map +1 -0
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts +22 -0
  21. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.d.ts.map +1 -0
  22. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js +264 -0
  23. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManualUploadDucStep/ManualUploadDucStep.js.map +1 -0
  24. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js +1 -0
  25. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
  26. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.d.ts.map +1 -1
  27. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js +105 -96
  28. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
  29. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.d.ts +13 -0
  30. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.d.ts.map +1 -0
  31. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js +122 -0
  32. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewCollaboratorsAndSigningOfficialAccordion.js.map +1 -0
  33. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts +17 -0
  34. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.d.ts.map +1 -0
  35. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js +112 -0
  36. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ReviewDucStep/ReviewDucStep.js.map +1 -0
  37. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts +22 -0
  38. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.d.ts.map +1 -0
  39. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js +193 -0
  40. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/SignatureStatusStep/SignatureStatusStep.js.map +1 -0
  41. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.d.ts +1 -0
  42. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.d.ts.map +1 -1
  43. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js +7 -7
  44. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
  45. package/dist/components/FilePreview/PdfPreview.d.ts.map +1 -1
  46. package/dist/components/FilePreview/PdfPreview.js +23 -20
  47. package/dist/components/FilePreview/PdfPreview.js.map +1 -1
  48. package/dist/components/GenericCard/SynapseCardLabel.d.ts.map +1 -1
  49. package/dist/components/GenericCard/SynapseCardLabel.js +100 -99
  50. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  51. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.d.ts.map +1 -1
  52. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js +4 -1
  53. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  54. package/dist/components/StorybookComponentWrapper.d.ts.map +1 -1
  55. package/dist/components/StorybookComponentWrapper.js +1 -3
  56. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  57. package/dist/components/dataaccess/AccessRequirementDashboard.d.ts.map +1 -1
  58. package/dist/components/dataaccess/AccessRequirementDashboard.js +55 -55
  59. package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
  60. package/dist/components/dataaccess/EDucTemplateTable.d.ts +3 -0
  61. package/dist/components/dataaccess/EDucTemplateTable.d.ts.map +1 -0
  62. package/dist/components/dataaccess/EDucTemplateTable.js +213 -0
  63. package/dist/components/dataaccess/EDucTemplateTable.js.map +1 -0
  64. package/dist/components/dataaccess/ReviewerDashboard.d.ts.map +1 -1
  65. package/dist/components/dataaccess/ReviewerDashboard.js +44 -34
  66. package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
  67. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +2 -0
  68. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  69. package/dist/components/widgets/facet-nav/FacetNavPanel.js +35 -40
  70. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  71. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.d.ts.map +1 -1
  72. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js +48 -23
  73. package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
  74. package/dist/mocks/msw/handlers/eDucTemplateHandlers.d.ts.map +1 -1
  75. package/dist/mocks/msw/handlers/eDucTemplateHandlers.js +9 -9
  76. package/dist/mocks/msw/handlers/eDucTemplateHandlers.js.map +1 -1
  77. package/dist/style/components/facet_nav/_facet-nav-panel.scss +0 -6
  78. package/dist/tsconfig.build.tsbuildinfo +1 -1
  79. package/dist/utils/APIConstants.d.ts +5 -0
  80. package/dist/utils/APIConstants.d.ts.map +1 -1
  81. package/dist/utils/APIConstants.js +2 -2
  82. package/dist/utils/APIConstants.js.map +1 -1
  83. package/dist/utils/hooks/useFetchBlobUrl.d.ts +9 -0
  84. package/dist/utils/hooks/useFetchBlobUrl.d.ts.map +1 -0
  85. package/dist/utils/hooks/useFetchBlobUrl.js +19 -0
  86. package/dist/utils/hooks/useFetchBlobUrl.js.map +1 -0
  87. package/package.json +2 -2
@@ -4,32 +4,30 @@ import t from "../../IconSvg/IconSvg.js";
4
4
  import { UserBadge as n } from "../../UserCard/UserBadge.js";
5
5
  import r from "../../UserSearchBox/UserSearchBox.js";
6
6
  import { longFieldLabelSx as i } from "./styles.js";
7
- import { Button as a, FormControlLabel as o, Radio as s, RadioGroup as c, Stack as l, Typography as u } from "@mui/material";
8
- import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
9
- import { AccessType as m, TYPE_FILTER as h } from "@sage-bionetworks/synapse-types";
7
+ import { Alert as a, Button as o, FormControlLabel as s, Radio as c, RadioGroup as l, Stack as u, Typography as d } from "@mui/material";
8
+ import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
9
+ import { AccessType as h, TYPE_FILTER as g } from "@sage-bionetworks/synapse-types";
10
10
  //#region src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.tsx
11
- function g(g) {
12
- let { accessorChanges: _, onChange: v, isRenewal: y, helpText: b } = g, { data: x } = e(), S = (e, t) => {
13
- t && v((e) => {
14
- if (!e.map((e) => e.userId).includes(t.ownerId)) {
15
- let n = {
16
- userId: t.ownerId,
17
- type: m.GAIN_ACCESS
18
- };
19
- e.push(n);
20
- }
21
- return e;
11
+ function _(_) {
12
+ let { accessorChanges: v, onChange: y, isRenewal: b, helpText: x, collaboratorLimit: S } = _, { data: C } = e(), w = S !== void 0 && v.filter((e) => e.userId !== C?.ownerId).length >= S, T = (e, t) => {
13
+ t && y((e) => {
14
+ if (e.map((e) => e.userId).includes(t.ownerId) || S !== void 0 && e.filter((e) => e.userId !== C?.ownerId).length >= S) return e;
15
+ let n = {
16
+ userId: t.ownerId,
17
+ type: h.GAIN_ACCESS
18
+ };
19
+ return e.push(n), e;
22
20
  });
23
- }, C = (e) => {
24
- v((t) => t.filter((t) => t.userId !== e));
25
- }, w = (e, t) => {
26
- v((n) => {
21
+ }, E = (e) => {
22
+ y((t) => t.filter((t) => t.userId !== e));
23
+ }, D = (e, t) => {
24
+ y((n) => {
27
25
  let r = n.findIndex((e) => e.userId === t);
28
26
  return n[r].type = e, n;
29
27
  });
30
28
  };
31
- return /* @__PURE__ */ p(d, { children: [
32
- /* @__PURE__ */ f(u, {
29
+ return /* @__PURE__ */ m(f, { children: [
30
+ /* @__PURE__ */ p(d, {
33
31
  variant: "headline3",
34
32
  sx: {
35
33
  mt: 4,
@@ -37,7 +35,7 @@ function g(g) {
37
35
  },
38
36
  children: "Collaborators"
39
37
  }),
40
- /* @__PURE__ */ f(u, {
38
+ /* @__PURE__ */ p(d, {
41
39
  variant: "body1",
42
40
  sx: {
43
41
  ...i,
@@ -45,7 +43,7 @@ function g(g) {
45
43
  },
46
44
  children: "List the Synapse usernames of all collaborators at your institution included in this data access request. Each collaborator must have a Synapse account and be able to receive messages at their registered email address."
47
45
  }),
48
- /* @__PURE__ */ f(u, {
46
+ /* @__PURE__ */ p(d, {
49
47
  component: "div",
50
48
  variant: "body1",
51
49
  sx: {
@@ -53,50 +51,59 @@ function g(g) {
53
51
  mb: 1
54
52
  },
55
53
  className: "requester-label",
56
- children: b
54
+ children: x
57
55
  }),
58
- /* @__PURE__ */ f(r, {
56
+ w && /* @__PURE__ */ m(a, {
57
+ severity: "warning",
58
+ sx: { mb: 1 },
59
+ children: [
60
+ "You have reached the maximum of ",
61
+ S,
62
+ " collaborators for this request. Remove a collaborator to add another."
63
+ ]
64
+ }),
65
+ !w && /* @__PURE__ */ p(r, {
59
66
  inputId: "requesters",
60
- typeFilter: h.USERS_ONLY,
61
- onChange: S,
62
- filterPredicate: (e) => !_.map((e) => e.userId).includes(e.ownerId),
67
+ typeFilter: g.USERS_ONLY,
68
+ onChange: T,
69
+ filterPredicate: (e) => !v.map((e) => e.userId).includes(e.ownerId),
63
70
  value: null
64
71
  }),
65
- /* @__PURE__ */ f(l, {
72
+ /* @__PURE__ */ p(u, {
66
73
  sx: {
67
74
  my: 1,
68
75
  gap: 1
69
76
  },
70
- children: _.map((e, r) => /* @__PURE__ */ p("div", {
77
+ children: v.map((e, r) => /* @__PURE__ */ m("div", {
71
78
  className: "list-items",
72
79
  children: [
73
- /* @__PURE__ */ f(n, {
80
+ /* @__PURE__ */ p(n, {
74
81
  userId: e.userId,
75
82
  showAccountLevelIcon: !0,
76
83
  disableLink: !0,
77
84
  showFullName: !0
78
85
  }),
79
- x?.ownerId !== e.userId && e.type === m.GAIN_ACCESS && /* @__PURE__ */ f(a, {
86
+ C?.ownerId !== e.userId && e.type === h.GAIN_ACCESS && /* @__PURE__ */ p(o, {
80
87
  "aria-label": "Remove user",
81
88
  variant: "text",
82
89
  sx: {
83
90
  ml: 1,
84
91
  px: 0
85
92
  },
86
- onClick: () => C(e.userId),
87
- children: /* @__PURE__ */ f(t, { icon: "clear" })
93
+ onClick: () => E(e.userId),
94
+ children: /* @__PURE__ */ p(t, { icon: "clear" })
88
95
  }),
89
- y && x?.ownerId !== e.userId && e.type !== m.GAIN_ACCESS && /* @__PURE__ */ f(d, { children: /* @__PURE__ */ p(c, {
96
+ b && C?.ownerId !== e.userId && e.type !== h.GAIN_ACCESS && /* @__PURE__ */ p(f, { children: /* @__PURE__ */ m(l, {
90
97
  value: e.type,
91
- onChange: (t, n) => w(n, e.userId),
92
- children: [/* @__PURE__ */ f(o, {
93
- control: /* @__PURE__ */ f(s, {}),
98
+ onChange: (t, n) => D(n, e.userId),
99
+ children: [/* @__PURE__ */ p(s, {
100
+ control: /* @__PURE__ */ p(c, {}),
94
101
  label: "Renew",
95
- value: m.RENEW_ACCESS
96
- }), /* @__PURE__ */ f(o, {
97
- control: /* @__PURE__ */ f(s, {}),
102
+ value: h.RENEW_ACCESS
103
+ }), /* @__PURE__ */ p(s, {
104
+ control: /* @__PURE__ */ p(c, {}),
98
105
  label: "Revoke",
99
- value: m.REVOKE_ACCESS
106
+ value: h.REVOKE_ACCESS
100
107
  })]
101
108
  }) })
102
109
  ]
@@ -105,6 +112,6 @@ function g(g) {
105
112
  ] });
106
113
  }
107
114
  //#endregion
108
- export { g as default };
115
+ export { _ as default };
109
116
 
110
117
  //# sourceMappingURL=DataAccessRequestAccessorsEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataAccessRequestAccessorsEditor.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.tsx"],"sourcesContent":["import { useGetCurrentUserProfile } from '@/synapse-queries'\nimport {\n Button,\n FormControlLabel,\n Radio,\n RadioGroup,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessorChange,\n AccessType,\n TYPE_FILTER,\n UserGroupHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { ReactNode } from 'react'\nimport IconSvg from '../../IconSvg/IconSvg'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport UserSearchBox from '../../UserSearchBox/UserSearchBox'\nimport { longFieldLabelSx } from './styles'\n\nexport type DataAccessRequestAccessorsEditorProps = {\n /* The current set of accessor changes for a data access request */\n accessorChanges: AccessorChange[]\n /* Invoked when the set of accessors is updated */\n onChange: (updater: (prevValue: AccessorChange[]) => AccessorChange[]) => void\n /* Whether this request is a renewal */\n isRenewal: boolean\n /* Text to show to inform the user about requirements accessors may need to meet */\n helpText: ReactNode\n}\n\n/**\n * Component that handles adding/removing/revoking accessors for a data access request.\n */\nexport default function DataAccessRequestAccessorsEditor(\n props: DataAccessRequestAccessorsEditorProps,\n) {\n const { accessorChanges, onChange, isRenewal, helpText } = props\n const { data: user } = useGetCurrentUserProfile()\n\n const onSelectUserCallback = (\n id: string | null,\n ugh: UserGroupHeader | null,\n ) => {\n if (ugh) {\n onChange(previousValue => {\n const currentAccessorIds = previousValue.map(ac => ac.userId)\n // if user is not already in the accessor list (prevent duplicates in accessor list)\n if (!currentAccessorIds.includes(ugh.ownerId)) {\n const selectedAccessor: AccessorChange = {\n userId: ugh.ownerId,\n type: AccessType.GAIN_ACCESS,\n }\n previousValue.push(selectedAccessor)\n }\n return previousValue\n })\n }\n }\n\n const onClearAccessor = (userId: string) => {\n onChange(previousValue => {\n return previousValue.filter(item => item.userId !== userId)\n })\n }\n\n // For renewal only\n const onAccessorAccessTypeChange = (\n accessType: AccessType,\n userId: string,\n ) => {\n onChange(previousValue => {\n const indexOfUser = previousValue.findIndex(\n item => item.userId === userId,\n )\n previousValue[indexOfUser].type = accessType\n return previousValue\n })\n }\n\n return (\n <>\n <Typography variant={'headline3'} sx={{ mt: 4, mb: 2 }}>\n Collaborators\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n List the Synapse usernames of all collaborators at your institution\n included in this data access request. Each collaborator must have a\n Synapse account and be able to receive messages at their registered\n email address.\n </Typography>\n <Typography\n component={'div'}\n variant={'body1'}\n sx={{ ...longFieldLabelSx, mb: 1 }}\n className={'requester-label'}\n >\n {helpText}\n </Typography>\n <UserSearchBox\n inputId={'requesters'}\n typeFilter={TYPE_FILTER.USERS_ONLY}\n onChange={onSelectUserCallback}\n filterPredicate={userGroupHeader =>\n !accessorChanges\n .map(ac => ac.userId)\n .includes(userGroupHeader.ownerId)\n }\n value={null}\n />\n <Stack sx={{ my: 1, gap: 1 }}>\n {accessorChanges.map((ac, i) => {\n return (\n <div className={'list-items'} key={`accessor-${i}`}>\n <UserBadge\n userId={ac.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n {\n // only display delete button if the user profile is not the current user and has not had access before\n user?.ownerId !== ac.userId &&\n ac.type === AccessType.GAIN_ACCESS && (\n <Button\n aria-label={`Remove user`}\n variant={'text'}\n sx={{\n ml: 1,\n px: 0,\n }}\n onClick={() => onClearAccessor(ac.userId)}\n >\n <IconSvg icon=\"clear\" />\n </Button>\n )\n }\n {\n // Renewal/Revoke data access, only display if isRenewal is true\n // TODO: It's possible to that the accessors list is in an illegal state with no way to recover -- see PLFM-7893\n isRenewal &&\n user?.ownerId !== ac.userId &&\n ac.type !== AccessType.GAIN_ACCESS && (\n <>\n <RadioGroup\n value={ac.type}\n onChange={(_event, value) =>\n onAccessorAccessTypeChange(\n value as AccessType,\n ac.userId,\n )\n }\n >\n <FormControlLabel\n control={<Radio />}\n label={'Renew'}\n value={AccessType.RENEW_ACCESS}\n />\n <FormControlLabel\n control={<Radio />}\n label={'Revoke'}\n value={AccessType.REVOKE_ACCESS}\n />\n </RadioGroup>\n </>\n )\n }\n </div>\n )\n })}\n </Stack>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;AAmCA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,oBAAiB,aAAU,cAAW,gBAAa,GACrD,EAAE,MAAM,MAAS,EAAyB,GAE1C,KACJ,GACA,MACG;EACH,AAAI,KACF,GAAS,MAAiB;GAGxB,IAAI,CAFuB,EAAc,KAAI,MAAM,EAAG,MAEjD,EAAmB,SAAS,EAAI,OAAO,GAAG;IAC7C,IAAM,IAAmC;KACvC,QAAQ,EAAI;KACZ,MAAM,EAAW;IACnB;IACA,EAAc,KAAK,CAAgB;GACrC;GACA,OAAO;EACT,CAAC;CAEL,GAEM,KAAmB,MAAmB;EAC1C,GAAS,MACA,EAAc,QAAO,MAAQ,EAAK,WAAW,CAAM,CAC3D;CACH,GAGM,KACJ,GACA,MACG;EACH,GAAS,MAAiB;GACxB,IAAM,IAAc,EAAc,WAChC,MAAQ,EAAK,WAAW,CAC1B;GAEA,OADA,EAAc,GAAa,OAAO,GAC3B;EACT,CAAC;CACH;CAEA,OACE,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,GAAD;GAAY,SAAS;GAAa,IAAI;IAAE,IAAI;IAAG,IAAI;GAAE;aAAG;EAE5C,CAAA;EACZ,kBAAC,GAAD;GAAY,SAAS;GAAS,IAAI;IAAE,GAAG;IAAkB,IAAI;GAAE;aAAG;EAKtD,CAAA;EACZ,kBAAC,GAAD;GACE,WAAW;GACX,SAAS;GACT,IAAI;IAAE,GAAG;IAAkB,IAAI;GAAE;GACjC,WAAW;aAEV;EACS,CAAA;EACZ,kBAAC,GAAD;GACE,SAAS;GACT,YAAY,EAAY;GACxB,UAAU;GACV,kBAAiB,MACf,CAAC,EACE,KAAI,MAAM,EAAG,MAAM,EACnB,SAAS,EAAgB,OAAO;GAErC,OAAO;EACR,CAAA;EACD,kBAAC,GAAD;GAAO,IAAI;IAAE,IAAI;IAAG,KAAK;GAAE;aACxB,EAAgB,KAAK,GAAI,MAEtB,kBAAC,OAAD;IAAK,WAAW;cAAhB;KACE,kBAAC,GAAD;MACE,QAAQ,EAAG;MACX,sBAAsB;MACtB,aAAa;MACb,cAAc;KACf,CAAA;KAGC,GAAM,YAAY,EAAG,UACnB,EAAG,SAAS,EAAW,eACrB,kBAAC,GAAD;MACE,cAAY;MACZ,SAAS;MACT,IAAI;OACF,IAAI;OACJ,IAAI;MACN;MACA,eAAe,EAAgB,EAAG,MAAM;gBAExC,kBAAC,GAAD,EAAS,MAAK,QAAS,CAAA;KACjB,CAAA;KAMZ,KACE,GAAM,YAAY,EAAG,UACrB,EAAG,SAAS,EAAW,eACrB,kBAAA,GAAA,EAAA,UACE,kBAAC,GAAD;MACE,OAAO,EAAG;MACV,WAAW,GAAQ,MACjB,EACE,GACA,EAAG,MACL;gBANJ,CASE,kBAAC,GAAD;OACE,SAAS,kBAAC,GAAD,CAAQ,CAAA;OACjB,OAAO;OACP,OAAO,EAAW;MACnB,CAAA,GACD,kBAAC,GAAD;OACE,SAAS,kBAAC,GAAD,CAAQ,CAAA;OACjB,OAAO;OACP,OAAO,EAAW;MACnB,CAAA,CACS;QACZ,CAAA;IAGL;MAtD8B,YAAY,GAsD1C,CAER;EACI,CAAA;CACP,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"DataAccessRequestAccessorsEditor.js","names":[],"sources":["../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.tsx"],"sourcesContent":["import { useGetCurrentUserProfile } from '@/synapse-queries'\nimport {\n Alert,\n Button,\n FormControlLabel,\n Radio,\n RadioGroup,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessorChange,\n AccessType,\n TYPE_FILTER,\n UserGroupHeader,\n} from '@sage-bionetworks/synapse-types'\nimport { ReactNode } from 'react'\nimport IconSvg from '../../IconSvg/IconSvg'\nimport { UserBadge } from '../../UserCard/UserBadge'\nimport UserSearchBox from '../../UserSearchBox/UserSearchBox'\nimport { longFieldLabelSx } from './styles'\n\nexport type DataAccessRequestAccessorsEditorProps = {\n /* The current set of accessor changes for a data access request */\n accessorChanges: AccessorChange[]\n /* Invoked when the set of accessors is updated */\n onChange: (updater: (prevValue: AccessorChange[]) => AccessorChange[]) => void\n /* Whether this request is a renewal */\n isRenewal: boolean\n /* Text to show to inform the user about requirements accessors may need to meet */\n helpText: ReactNode\n /* Optional cap on the number of collaborators the user may add (excludes the submitter, who is auto-added) */\n collaboratorLimit?: number\n}\n\n/**\n * Component that handles adding/removing/revoking accessors for a data access request.\n */\nexport default function DataAccessRequestAccessorsEditor(\n props: DataAccessRequestAccessorsEditorProps,\n) {\n const { accessorChanges, onChange, isRenewal, helpText, collaboratorLimit } =\n props\n const { data: user } = useGetCurrentUserProfile()\n\n // The submitter (current user) is auto-added and does not count toward the collaborator limit.\n const isAtCollaboratorLimit =\n collaboratorLimit !== undefined &&\n accessorChanges.filter(ac => ac.userId !== user?.ownerId).length >=\n collaboratorLimit\n\n const onSelectUserCallback = (\n id: string | null,\n ugh: UserGroupHeader | null,\n ) => {\n if (ugh) {\n onChange(previousValue => {\n const currentAccessorIds = previousValue.map(ac => ac.userId)\n // if user is not already in the accessor list (prevent duplicates in accessor list)\n if (currentAccessorIds.includes(ugh.ownerId)) {\n return previousValue\n }\n if (\n collaboratorLimit !== undefined &&\n previousValue.filter(ac => ac.userId !== user?.ownerId).length >=\n collaboratorLimit\n ) {\n return previousValue\n }\n const selectedAccessor: AccessorChange = {\n userId: ugh.ownerId,\n type: AccessType.GAIN_ACCESS,\n }\n previousValue.push(selectedAccessor)\n return previousValue\n })\n }\n }\n\n const onClearAccessor = (userId: string) => {\n onChange(previousValue => {\n return previousValue.filter(item => item.userId !== userId)\n })\n }\n\n // For renewal only\n const onAccessorAccessTypeChange = (\n accessType: AccessType,\n userId: string,\n ) => {\n onChange(previousValue => {\n const indexOfUser = previousValue.findIndex(\n item => item.userId === userId,\n )\n previousValue[indexOfUser].type = accessType\n return previousValue\n })\n }\n\n return (\n <>\n <Typography variant={'headline3'} sx={{ mt: 4, mb: 2 }}>\n Collaborators\n </Typography>\n <Typography variant={'body1'} sx={{ ...longFieldLabelSx, mb: 1 }}>\n List the Synapse usernames of all collaborators at your institution\n included in this data access request. Each collaborator must have a\n Synapse account and be able to receive messages at their registered\n email address.\n </Typography>\n <Typography\n component={'div'}\n variant={'body1'}\n sx={{ ...longFieldLabelSx, mb: 1 }}\n className={'requester-label'}\n >\n {helpText}\n </Typography>\n {isAtCollaboratorLimit && (\n <Alert severity=\"warning\" sx={{ mb: 1 }}>\n You have reached the maximum of {collaboratorLimit} collaborators for\n this request. Remove a collaborator to add another.\n </Alert>\n )}\n {!isAtCollaboratorLimit && (\n <UserSearchBox\n inputId={'requesters'}\n typeFilter={TYPE_FILTER.USERS_ONLY}\n onChange={onSelectUserCallback}\n filterPredicate={userGroupHeader =>\n !accessorChanges\n .map(ac => ac.userId)\n .includes(userGroupHeader.ownerId)\n }\n value={null}\n />\n )}\n <Stack sx={{ my: 1, gap: 1 }}>\n {accessorChanges.map((ac, i) => {\n return (\n <div className={'list-items'} key={`accessor-${i}`}>\n <UserBadge\n userId={ac.userId}\n showAccountLevelIcon={true}\n disableLink={true}\n showFullName={true}\n />\n {\n // only display delete button if the user profile is not the current user and has not had access before\n user?.ownerId !== ac.userId &&\n ac.type === AccessType.GAIN_ACCESS && (\n <Button\n aria-label={`Remove user`}\n variant={'text'}\n sx={{\n ml: 1,\n px: 0,\n }}\n onClick={() => onClearAccessor(ac.userId)}\n >\n <IconSvg icon=\"clear\" />\n </Button>\n )\n }\n {\n // Renewal/Revoke data access, only display if isRenewal is true\n // TODO: It's possible to that the accessors list is in an illegal state with no way to recover -- see PLFM-7893\n isRenewal &&\n user?.ownerId !== ac.userId &&\n ac.type !== AccessType.GAIN_ACCESS && (\n <>\n <RadioGroup\n value={ac.type}\n onChange={(_event, value) =>\n onAccessorAccessTypeChange(\n value as AccessType,\n ac.userId,\n )\n }\n >\n <FormControlLabel\n control={<Radio />}\n label={'Renew'}\n value={AccessType.RENEW_ACCESS}\n />\n <FormControlLabel\n control={<Radio />}\n label={'Revoke'}\n value={AccessType.REVOKE_ACCESS}\n />\n </RadioGroup>\n </>\n )\n }\n </div>\n )\n })}\n </Stack>\n </>\n )\n}\n"],"mappings":";;;;;;;;;;AAsCA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,oBAAiB,aAAU,cAAW,aAAU,yBACtD,GACI,EAAE,MAAM,MAAS,EAAyB,GAG1C,IACJ,MAAsB,KAAA,KACtB,EAAgB,QAAO,MAAM,EAAG,WAAW,GAAM,OAAO,EAAE,UACxD,GAEE,KACJ,GACA,MACG;EACH,AAAI,KACF,GAAS,MAAiB;GAMxB,IAL2B,EAAc,KAAI,MAAM,EAAG,MAElD,EAAmB,SAAS,EAAI,OAAO,KAIzC,MAAsB,KAAA,KACtB,EAAc,QAAO,MAAM,EAAG,WAAW,GAAM,OAAO,EAAE,UACtD,GAEF,OAAO;GAET,IAAM,IAAmC;IACvC,QAAQ,EAAI;IACZ,MAAM,EAAW;GACnB;GAEA,OADA,EAAc,KAAK,CAAgB,GAC5B;EACT,CAAC;CAEL,GAEM,KAAmB,MAAmB;EAC1C,GAAS,MACA,EAAc,QAAO,MAAQ,EAAK,WAAW,CAAM,CAC3D;CACH,GAGM,KACJ,GACA,MACG;EACH,GAAS,MAAiB;GACxB,IAAM,IAAc,EAAc,WAChC,MAAQ,EAAK,WAAW,CAC1B;GAEA,OADA,EAAc,GAAa,OAAO,GAC3B;EACT,CAAC;CACH;CAEA,OACE,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,GAAD;GAAY,SAAS;GAAa,IAAI;IAAE,IAAI;IAAG,IAAI;GAAE;aAAG;EAE5C,CAAA;EACZ,kBAAC,GAAD;GAAY,SAAS;GAAS,IAAI;IAAE,GAAG;IAAkB,IAAI;GAAE;aAAG;EAKtD,CAAA;EACZ,kBAAC,GAAD;GACE,WAAW;GACX,SAAS;GACT,IAAI;IAAE,GAAG;IAAkB,IAAI;GAAE;GACjC,WAAW;aAEV;EACS,CAAA;EACX,KACC,kBAAC,GAAD;GAAO,UAAS;GAAU,IAAI,EAAE,IAAI,EAAE;aAAtC;IAAyC;IACN;IAAkB;GAE9C;;EAER,CAAC,KACA,kBAAC,GAAD;GACE,SAAS;GACT,YAAY,EAAY;GACxB,UAAU;GACV,kBAAiB,MACf,CAAC,EACE,KAAI,MAAM,EAAG,MAAM,EACnB,SAAS,EAAgB,OAAO;GAErC,OAAO;EACR,CAAA;EAEH,kBAAC,GAAD;GAAO,IAAI;IAAE,IAAI;IAAG,KAAK;GAAE;aACxB,EAAgB,KAAK,GAAI,MAEtB,kBAAC,OAAD;IAAK,WAAW;cAAhB;KACE,kBAAC,GAAD;MACE,QAAQ,EAAG;MACX,sBAAsB;MACtB,aAAa;MACb,cAAc;KACf,CAAA;KAGC,GAAM,YAAY,EAAG,UACnB,EAAG,SAAS,EAAW,eACrB,kBAAC,GAAD;MACE,cAAY;MACZ,SAAS;MACT,IAAI;OACF,IAAI;OACJ,IAAI;MACN;MACA,eAAe,EAAgB,EAAG,MAAM;gBAExC,kBAAC,GAAD,EAAS,MAAK,QAAS,CAAA;KACjB,CAAA;KAMZ,KACE,GAAM,YAAY,EAAG,UACrB,EAAG,SAAS,EAAW,eACrB,kBAAA,GAAA,EAAA,UACE,kBAAC,GAAD;MACE,OAAO,EAAG;MACV,WAAW,GAAQ,MACjB,EACE,GACA,EAAG,MACL;gBANJ,CASE,kBAAC,GAAD;OACE,SAAS,kBAAC,GAAD,CAAQ,CAAA;OACjB,OAAO;OACP,OAAO,EAAW;MACnB,CAAA,GACD,kBAAC,GAAD;OACE,SAAS,kBAAC,GAAD,CAAQ,CAAA;OACjB,OAAO;OACP,OAAO,EAAW;MACnB,CAAA,CACS;QACZ,CAAA;IAGL;MAtD8B,YAAY,GAsD1C,CAER;EACI,CAAA;CACP,EAAA,CAAA;AAEN"}
@@ -1,6 +1,7 @@
1
1
  import { AlertProps as MuiAlertProps } from '@mui/material';
2
2
  import { ManagedACTAccessRequirement, Renewal, Request, RestrictableObjectType } from '@sage-bionetworks/synapse-types';
3
3
  import { ReactNode } from 'react';
4
+ export declare const EDUC_COLLABORATOR_LIMIT = 97;
4
5
  export type DataAccessRequestAccessorsFilesFormProps = {
5
6
  /**
6
7
  * The ID of the object of interest. This corresponds to the subjectId of the {@link CreateSubmissionRequest}
@@ -14,6 +15,11 @@ export type DataAccessRequestAccessorsFilesFormProps = {
14
15
  onCancel: (modifiedDataAccessRequest: Request | Renewal) => void;
15
16
  /** Callback invoked when the 'Back' action button is clicked */
16
17
  onBackClicked: () => void;
18
+ /**
19
+ * When set (used for eDUC ARs), clicking the primary action saves the DAR and invokes this callback
20
+ * instead of creating a submission. Submission happens later in the eDUC flow.
21
+ */
22
+ onEDucContinue?: () => void;
17
23
  };
18
24
  export type AlertProps = {
19
25
  key: MuiAlertProps['severity'];
@@ -1 +1 @@
1
- {"version":3,"file":"DataAccessRequestAccessorsFilesForm.d.ts","sourceRoot":"","sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,IAAI,aAAa,EAY5B,MAAM,eAAe,CAAA;AAItB,OAAO,EAML,2BAA2B,EAC3B,OAAO,EACP,OAAO,EACP,sBAAsB,EAGvB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAA;AAiEtD,MAAM,MAAM,wCAAwC,GAAG;IACrD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB,WAAW,EAAE,sBAAsB,CAAA;IAEnC,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,iBAAiB,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,MAAM,IAAI,CAAA;IAElB,QAAQ,EAAE,CAAC,yBAAyB,EAAE,OAAO,GAAG,OAAO,KAAK,IAAI,CAAA;IAChE,gEAAgE;IAChE,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,mCAAmC,CACzD,KAAK,EAAE,wCAAwC,2CAskBhD"}
1
+ {"version":3,"file":"DataAccessRequestAccessorsFilesForm.d.ts","sourceRoot":"","sources":["../../../../../src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,IAAI,aAAa,EAY5B,MAAM,eAAe,CAAA;AAItB,OAAO,EAML,2BAA2B,EAC3B,OAAO,EACP,OAAO,EACP,sBAAsB,EAGvB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAA;AAmB9D,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAiDzC,MAAM,MAAM,wCAAwC,GAAG;IACrD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB,WAAW,EAAE,sBAAsB,CAAA;IAEnC,2BAA2B,EAAE,2BAA2B,CAAA;IACxD,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,iBAAiB,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,MAAM,IAAI,CAAA;IAElB,QAAQ,EAAE,CAAC,yBAAyB,EAAE,OAAO,GAAG,OAAO,KAAK,IAAI,CAAA;IAChE,gEAAgE;IAChE,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,mCAAmC,CACzD,KAAK,EAAE,wCAAwC,2CAylBhD"}