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
@@ -1,37 +1,40 @@
1
- import { BackendDestinationEnum as e, getEndpoint as t } from "../../utils/functions/getEndpoint.js";
2
- import { calculateFriendlyFileSize as n } from "../../utils/functions/calculateFriendlyFileSize.js";
3
- import r from "../../synapse-client/index.js";
4
- import "../../utils/functions/index.js";
5
- import { useRef as i } from "react";
6
- import { Alert as a } from "@mui/material";
7
- import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
1
+ import { calculateFriendlyFileSize as e } from "../../utils/functions/calculateFriendlyFileSize.js";
2
+ import t from "../../synapse-client/index.js";
3
+ import { useFetchBlobUrl as n } from "../../utils/hooks/useFetchBlobUrl.js";
4
+ import { Alert as r, Skeleton as i } from "@mui/material";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
8
6
  //#region src/components/FilePreview/PdfPreview.tsx
9
- var l = 1024 ** 2 * 30, u = n(l);
10
- function d(d) {
11
- let { fileHandle: f, fileHandleAssociation: p } = d, m = i(null), h = n(f.contentSize);
12
- if (f.contentSize > l) return /* @__PURE__ */ c(a, {
7
+ var s = 1024 ** 2 * 30, c = e(s);
8
+ function l(l) {
9
+ let { fileHandle: u, fileHandleAssociation: d } = l, { blobUrl: f, error: p } = n(u.contentSize > s ? void 0 : t.getPortalFileHandleServletUrl(d.fileHandleId, d.associateObjectId, d.associateObjectType)), m = e(u.contentSize);
10
+ return u.contentSize > s ? /* @__PURE__ */ o(r, {
13
11
  severity: "error",
14
12
  sx: { marginBottom: "20px" },
15
13
  children: [
16
14
  "The PDF preview was not shown because the file size (",
17
- h,
15
+ m,
18
16
  ") exceeds the maximum preview size (",
19
- u,
17
+ c,
20
18
  ")"
21
19
  ]
22
- });
23
- let g = r.getPortalFileHandleServletUrl(p.fileHandleId, p.associateObjectId, p.associateObjectType);
24
- return /* @__PURE__ */ s(o, { children: /* @__PURE__ */ s("iframe", {
25
- ref: m,
26
- src: `${t(e.PORTAL_ENDPOINT)}pdf.js/web/viewer.html?file=${encodeURIComponent(g)}`,
20
+ }) : p ? /* @__PURE__ */ o(r, {
21
+ severity: "error",
22
+ sx: { marginBottom: "20px" },
23
+ children: ["The PDF preview could not be loaded: ", p.message]
24
+ }) : f ? /* @__PURE__ */ a("iframe", {
25
+ src: f,
27
26
  height: "800px",
28
27
  style: {
29
28
  border: 0,
30
29
  width: "100%"
31
30
  }
32
- }) });
31
+ }) : /* @__PURE__ */ a(i, {
32
+ variant: "rectangular",
33
+ width: "100%",
34
+ height: "800px"
35
+ });
33
36
  }
34
37
  //#endregion
35
- export { d as default, l as maxPdfSize };
38
+ export { l as default, s as maxPdfSize };
36
39
 
37
40
  //# sourceMappingURL=PdfPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PdfPreview.js","names":[],"sources":["../../../src/components/FilePreview/PdfPreview.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { BackendDestinationEnum, getEndpoint } from '@/utils/functions'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { Alert } from '@mui/material'\nimport {\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { useRef } from 'react'\n\nexport type PdfPreviewProps = {\n fileHandle: FileHandle\n fileHandleAssociation: FileHandleAssociation\n}\n\nexport const maxPdfSize = Math.pow(1024, 2) * 30 // 30MB\nconst friendlyMaxPdfSize = calculateFriendlyFileSize(maxPdfSize) // 30MB\n\n/**\n * Renders raw HTML. Uses file handle data to determine if the content should be sanitized.\n * @param props\n * @returns\n */\nexport default function PdfPreview(props: PdfPreviewProps) {\n const { fileHandle, fileHandleAssociation: fha } = props\n const frameEl = useRef(null)\n\n const friendlyFileSize = calculateFriendlyFileSize(fileHandle.contentSize)\n if (fileHandle.contentSize > maxPdfSize) {\n return (\n <Alert severity=\"error\" sx={{ marginBottom: '20px' }}>\n The PDF preview was not shown because the file size ({friendlyFileSize})\n exceeds the maximum preview size ({friendlyMaxPdfSize})\n </Alert>\n )\n }\n const fhaUrl = SynapseClient.getPortalFileHandleServletUrl(\n fha.fileHandleId,\n fha.associateObjectId,\n fha.associateObjectType,\n )\n return (\n <>\n <iframe\n ref={frameEl}\n src={`${getEndpoint(\n BackendDestinationEnum.PORTAL_ENDPOINT,\n )}pdf.js/web/viewer.html?file=${encodeURIComponent(fhaUrl)}`}\n height=\"800px\"\n style={{ border: 0, width: '100%' }}\n />\n </>\n )\n}\n"],"mappings":";;;;;;;;AAeA,IAAa,IAAsB,QAAM,IAAK,IACxC,IAAqB,EAA0B,CAAU;AAO/D,SAAwB,EAAW,GAAwB;CACzD,IAAM,EAAE,eAAY,uBAAuB,MAAQ,GAC7C,IAAU,EAAO,IAAI,GAErB,IAAmB,EAA0B,EAAW,WAAW;CACzE,IAAI,EAAW,cAAc,GAC3B,OACE,kBAAC,GAAD;EAAO,UAAS;EAAQ,IAAI,EAAE,cAAc,OAAO;YAAnD;GAAsD;GACE;GAAiB;GACpC;GAAmB;EACjD;;CAGX,IAAM,IAAS,EAAc,8BAC3B,EAAI,cACJ,EAAI,mBACJ,EAAI,mBACN;CACA,OACE,kBAAA,GAAA,EAAA,UACE,kBAAC,UAAD;EACE,KAAK;EACL,KAAK,GAAG,EACN,EAAuB,eACzB,EAAE,8BAA8B,mBAAmB,CAAM;EACzD,QAAO;EACP,OAAO;GAAE,QAAQ;GAAG,OAAO;EAAO;CACnC,CAAA,EACD,CAAA;AAEN"}
1
+ {"version":3,"file":"PdfPreview.js","names":[],"sources":["../../../src/components/FilePreview/PdfPreview.tsx"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport { calculateFriendlyFileSize } from '@/utils/functions/calculateFriendlyFileSize'\nimport { Alert, Skeleton } from '@mui/material'\nimport {\n FileHandle,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { useFetchBlobUrl } from '@/utils/hooks/useFetchBlobUrl'\n\nexport type PdfPreviewProps = {\n fileHandle: FileHandle\n fileHandleAssociation: FileHandleAssociation\n}\n\nexport const maxPdfSize = Math.pow(1024, 2) * 30 // 30MB\nconst friendlyMaxPdfSize = calculateFriendlyFileSize(maxPdfSize) // 30MB\n\n/**\n * Renders raw HTML. Uses file handle data to determine if the content should be sanitized.\n * @param props\n * @returns\n */\nexport default function PdfPreview(props: PdfPreviewProps) {\n const { fileHandle, fileHandleAssociation: fha } = props\n\n const { blobUrl, error: blobError } = useFetchBlobUrl(\n fileHandle.contentSize > maxPdfSize\n ? undefined\n : SynapseClient.getPortalFileHandleServletUrl(\n fha.fileHandleId,\n fha.associateObjectId,\n fha.associateObjectType,\n ),\n )\n\n const friendlyFileSize = calculateFriendlyFileSize(fileHandle.contentSize)\n if (fileHandle.contentSize > maxPdfSize) {\n return (\n <Alert severity=\"error\" sx={{ marginBottom: '20px' }}>\n The PDF preview was not shown because the file size ({friendlyFileSize})\n exceeds the maximum preview size ({friendlyMaxPdfSize})\n </Alert>\n )\n }\n\n if (blobError) {\n return (\n <Alert severity=\"error\" sx={{ marginBottom: '20px' }}>\n The PDF preview could not be loaded: {blobError.message}\n </Alert>\n )\n }\n\n if (!blobUrl) {\n return <Skeleton variant=\"rectangular\" width=\"100%\" height=\"800px\" />\n }\n\n return (\n <iframe src={blobUrl} height=\"800px\" style={{ border: 0, width: '100%' }} />\n )\n}\n"],"mappings":";;;;;;AAcA,IAAa,IAAsB,QAAM,IAAK,IACxC,IAAqB,EAA0B,CAAU;AAO/D,SAAwB,EAAW,GAAwB;CACzD,IAAM,EAAE,eAAY,uBAAuB,MAAQ,GAE7C,EAAE,YAAS,OAAO,MAAc,EACpC,EAAW,cAAc,IACrB,KAAA,IACA,EAAc,8BACZ,EAAI,cACJ,EAAI,mBACJ,EAAI,mBACN,CACN,GAEM,IAAmB,EAA0B,EAAW,WAAW;CAsBzE,OArBI,EAAW,cAAc,IAEzB,kBAAC,GAAD;EAAO,UAAS;EAAQ,IAAI,EAAE,cAAc,OAAO;YAAnD;GAAsD;GACE;GAAiB;GACpC;GAAmB;EACjD;MAIP,IAEA,kBAAC,GAAD;EAAO,UAAS;EAAQ,IAAI,EAAE,cAAc,OAAO;YAAnD,CAAsD,yCACd,EAAU,OAC3C;MAIN,IAKH,kBAAC,UAAD;EAAQ,KAAK;EAAS,QAAO;EAAQ,OAAO;GAAE,QAAQ;GAAG,OAAO;EAAO;CAAI,CAAA,IAJpE,kBAAC,GAAD;EAAU,SAAQ;EAAc,OAAM;EAAO,QAAO;CAAS,CAAA;AAMxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseCardLabel.d.ts","sourceRoot":"","sources":["../../../src/components/GenericCard/SynapseCardLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAM9D,OAAO,EACL,WAAW,EAEX,GAAG,EACH,YAAY,EACb,MAAM,iCAAiC,CAAA;AAIxC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,WAAW,EACX,8BAA8B,EAC/B,MAAM,0CAA0C,CAAA;AASjD,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EACL,QAAQ,GACR,YAAY,GACZ,mBAAmB,GACnB,WAAW,GACX,8BAA8B,GAC9B,SAAS,CAAA;IACb,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA;IACzC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAA;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC,CAAA;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CA8Q5D"}
1
+ {"version":3,"file":"SynapseCardLabel.d.ts","sourceRoot":"","sources":["../../../src/components/GenericCard/SynapseCardLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAO9D,OAAO,EACL,WAAW,EAEX,GAAG,EACH,YAAY,EACb,MAAM,iCAAiC,CAAA;AAIxC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,WAAW,EACX,8BAA8B,EAC/B,MAAM,0CAA0C,CAAA;AASjD,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EACL,QAAQ,GACR,YAAY,GACZ,mBAAmB,GACnB,WAAW,GACX,8BAA8B,GAC9B,SAAS,CAAA;IACb,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA;IACzC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAA;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC,CAAA;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAiR5D"}
@@ -1,133 +1,134 @@
1
- import { getColumnIndex as e } from "../../utils/functions/SqlFunctions.js";
1
+ import { normalizeSynPrefix as e } from "../../utils/functions/EntityTypeUtils.js";
2
+ import { getColumnIndex as t } from "../../utils/functions/SqlFunctions.js";
2
3
  import "../../utils/functions/index.js";
3
- import { Markdown as t } from "../Markdown/MarkdownSynapse.js";
4
- import { formatDate as n } from "../../utils/functions/DateFormatter.js";
5
- import { TargetEnum as r } from "../../utils/html/TargetEnum.js";
6
- import { getValueOrMultiValue as i } from "./CardUtils.js";
7
- import { SmartLink as a } from "../SmartLink/SmartLink.js";
8
- import { EntityLink as o } from "../EntityLink.js";
9
- import { UserBadge as s } from "../UserCard/UserBadge.js";
10
- import { EntityColumnImage as c } from "../widgets/EntityColumnImage.js";
11
- import { LabelMaybeWithIcon as l } from "./LabelMaybeWithIcon.js";
12
- import u from "./Linkify.js";
13
- import { Fragment as d } from "react";
14
- import { isEmpty as f } from "lodash-es";
15
- import { Tooltip as p } from "@mui/material";
16
- import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
17
- import { ColumnTypeEnum as _ } from "@sage-bionetworks/synapse-types";
18
- import v from "dayjs";
4
+ import { Markdown as n } from "../Markdown/MarkdownSynapse.js";
5
+ import { formatDate as r } from "../../utils/functions/DateFormatter.js";
6
+ import { TargetEnum as i } from "../../utils/html/TargetEnum.js";
7
+ import { getValueOrMultiValue as a } from "./CardUtils.js";
8
+ import { SmartLink as o } from "../SmartLink/SmartLink.js";
9
+ import { EntityLink as s } from "../EntityLink.js";
10
+ import { UserBadge as c } from "../UserCard/UserBadge.js";
11
+ import { EntityColumnImage as l } from "../widgets/EntityColumnImage.js";
12
+ import { LabelMaybeWithIcon as u } from "./LabelMaybeWithIcon.js";
13
+ import d from "./Linkify.js";
14
+ import { Fragment as f } from "react";
15
+ import { isEmpty as p } from "lodash-es";
16
+ import { Tooltip as m } from "@mui/material";
17
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
18
+ import { ColumnTypeEnum as v } from "@sage-bionetworks/synapse-types";
19
+ import y from "dayjs";
19
20
  //#region src/components/GenericCard/SynapseCardLabel.tsx
20
- function y(y) {
21
- let { value: b, columnName: x, labelLink: S, selectColumns: C, columnModels: w, isHeader: T, className: E, rowData: D, rowId: O, columnIconOptions: k } = y;
22
- if (!b) return /* @__PURE__ */ h("p", { children: b });
23
- let { strList: A, str: j, selectColumn: M } = i({
24
- columnName: x,
25
- value: b,
26
- selectColumns: C,
27
- columnModels: w
28
- }), N = M?.columnType, P = k?.columns?.[x], F = ",\xA0\xA0";
29
- if (!j) return /* @__PURE__ */ h("p", { children: j });
30
- let I = E, L = {};
31
- if (T && (I = E?.concat(" ", "SRC-lightLink")), N === _.USERID_LIST && A) return /* @__PURE__ */ h("p", { children: A.map((e, t) => /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(s, {
21
+ function b(b) {
22
+ let { value: x, columnName: S, labelLink: C, selectColumns: w, columnModels: T, isHeader: E, className: D, rowData: O, rowId: k, columnIconOptions: A } = b;
23
+ if (!x) return /* @__PURE__ */ g("p", { children: x });
24
+ let { strList: j, str: M, selectColumn: N } = a({
25
+ columnName: S,
26
+ value: x,
27
+ selectColumns: w,
28
+ columnModels: T
29
+ }), P = N?.columnType, F = A?.columns?.[S], I = ",\xA0\xA0";
30
+ if (!M) return /* @__PURE__ */ g("p", { children: M });
31
+ let L = D, R = {};
32
+ if (E && (L = D?.concat(" ", "SRC-lightLink")), P === v.USERID_LIST && j) return /* @__PURE__ */ g("p", { children: j.map((e, t) => /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(c, {
32
33
  userId: e,
33
- className: I
34
- }), t < A.length - 1 && F] }, e)) });
35
- if (N === _.USERID && j) return /* @__PURE__ */ h(s, {
36
- userId: j,
37
- className: I
34
+ className: L
35
+ }), t < j.length - 1 && I] }, e)) });
36
+ if (P === v.USERID && M) return /* @__PURE__ */ g(c, {
37
+ userId: M,
38
+ className: L
38
39
  });
39
- if (N === _.ENTITYID_LIST && A) return /* @__PURE__ */ h("p", { children: A.map((e, t) => /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(o, {
40
+ if (P === v.ENTITYID_LIST && j) return /* @__PURE__ */ g("p", { children: j.map((e, t) => /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(s, {
40
41
  entity: e,
41
- className: I
42
- }), t < A.length - 1 && F] }, e)) });
43
- if (N === _.ENTITYID && j && !S) return /* @__PURE__ */ h(o, {
44
- entity: j,
45
- className: I
42
+ className: L
43
+ }), t < j.length - 1 && I] }, e)) });
44
+ if (P === v.ENTITYID && M && !C) return /* @__PURE__ */ g(s, {
45
+ entity: M,
46
+ className: L
46
47
  });
47
- if (N === _.DATE && j) return /* @__PURE__ */ h("p", { children: n(v(Number(j))) });
48
- if (!S) return A ? /* @__PURE__ */ h(m, { children: A.map((e, t) => /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(l, {
48
+ if (P === v.DATE && M) return /* @__PURE__ */ g("p", { children: r(y(Number(M))) });
49
+ if (!C) return j ? /* @__PURE__ */ g(h, { children: j.map((e, t) => /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(u, {
49
50
  value: e,
50
- iconConfig: P,
51
- children: /* @__PURE__ */ h(u, {
51
+ iconConfig: F,
52
+ children: /* @__PURE__ */ g(d, {
52
53
  text: e,
53
- className: I
54
+ className: L
54
55
  })
55
- }), t < A.length - 1 && F] }, e)) }) : /* @__PURE__ */ h(l, {
56
- value: j,
57
- iconConfig: P,
58
- children: /* @__PURE__ */ h(u, {
59
- text: j,
60
- className: I
56
+ }), t < j.length - 1 && I] }, e)) }) : /* @__PURE__ */ g(u, {
57
+ value: M,
58
+ iconConfig: F,
59
+ children: /* @__PURE__ */ g(d, {
60
+ text: M,
61
+ className: L
61
62
  })
62
63
  });
63
- if ("resolveEntityName" in S && S.resolveEntityName && j) return /* @__PURE__ */ h(o, {
64
- entity: j,
64
+ if ("resolveEntityName" in C && C.resolveEntityName && M) return /* @__PURE__ */ g(s, {
65
+ entity: M,
65
66
  showIcon: !1
66
67
  });
67
- let R;
68
- if ("isMapValueToReactNodeConfig" in S && S.isMapValueToReactNodeConfig) {
69
- let { Component: e } = S;
70
- R = /* @__PURE__ */ h(e, {
71
- value: A || j,
72
- selectColumn: M
68
+ let z;
69
+ if ("isMapValueToReactNodeConfig" in C && C.isMapValueToReactNodeConfig) {
70
+ let { Component: e } = C;
71
+ z = /* @__PURE__ */ g(e, {
72
+ value: j || M,
73
+ selectColumn: N
73
74
  });
74
- } else if ("isMarkdown" in S && S.isMarkdown) R = A ? /* @__PURE__ */ h("p", { children: A.map((e, n) => /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(t, {
75
+ } else if ("isMarkdown" in C && C.isMarkdown) z = j ? /* @__PURE__ */ g("p", { children: j.map((e, t) => /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(n, {
75
76
  renderInline: !0,
76
77
  markdown: e
77
- }, e), n < A.length - 1 && F] }, e)) }) : /* @__PURE__ */ h(t, {
78
+ }, e), t < j.length - 1 && I] }, e)) }) : /* @__PURE__ */ g(n, {
78
79
  renderInline: !0,
79
- markdown: b
80
+ markdown: x
80
81
  });
81
- else if ("isEntityImage" in S && S.isEntityImage) R = A ? /* @__PURE__ */ h("p", { children: A.map((e, t) => /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(c, { entityId: e }), t < A.length - 1 && F] }, e)) }) : /* @__PURE__ */ h(c, { entityId: b });
82
+ else if ("isEntityImage" in C && C.isEntityImage) z = j ? /* @__PURE__ */ g("p", { children: j.map((e, t) => /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(l, { entityId: e }), t < j.length - 1 && I] }, e)) }) : /* @__PURE__ */ g(l, { entityId: x });
82
83
  else {
83
- let t = A || j.split(","), n;
84
- if ("target" in S && (n = S.target), "linkColumnName" in S) {
85
- let i = e(S.linkColumnName, C, w);
86
- if (i == null) console.warn(`Could not determine column index of ${S.linkColumnName}`), R = /* @__PURE__ */ h(m, { children: b });
84
+ let n = j || M.split(","), r;
85
+ if ("target" in C && (r = C.target), "linkColumnName" in C) {
86
+ let e = t(C.linkColumnName, w, T);
87
+ if (e == null) console.warn(`Could not determine column index of ${C.linkColumnName}`), z = /* @__PURE__ */ g(h, { children: x });
87
88
  else {
88
- let e = D[i];
89
- R = f(e) ? /* @__PURE__ */ h(m, { children: b }) : /* @__PURE__ */ h("p", { children: t.map((i, o) => /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(a, {
90
- href: e ?? "",
91
- target: n ?? r.NEW_WINDOW,
92
- className: I,
93
- style: L,
94
- children: i
95
- }, i), o < t.length - 1 && /* @__PURE__ */ h("span", {
89
+ let t = O[e];
90
+ z = p(t) ? /* @__PURE__ */ g(h, { children: x }) : /* @__PURE__ */ g("p", { children: n.map((e, a) => /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(o, {
91
+ href: t ?? "",
92
+ target: r ?? i.NEW_WINDOW,
93
+ className: L,
94
+ style: R,
95
+ children: e
96
+ }, e), a < n.length - 1 && /* @__PURE__ */ g("span", {
96
97
  style: { marginRight: 4 },
97
98
  children: ", "
98
- })] }, i)) });
99
+ })] }, e)) });
99
100
  }
100
- } else R = /* @__PURE__ */ h("p", { children: t.map((i, o) => {
101
- let s = S, c = s.overrideValueWithRowID ? O : i, l = "";
102
- if ("baseURL" in s) {
103
- let { baseURL: e, URLColumnName: t, wrapValueWithParens: n, urlParamStyle: r = "query-param" } = s, i = n ? `(${c})` : c;
104
- l = r === "path-segment" ? `/${e}/${encodeURIComponent(String(i))}` : `/${e}?${t}=${i}`;
105
- } else if ("overrideLinkURLColumnName" in s) {
106
- let t = e(s.overrideLinkURLColumnName, C, w);
107
- if (t != null) {
108
- let e = D[t];
109
- e && (l = s.overrideLinkURLColumnTransform ? s.overrideLinkURLColumnTransform(e) : e);
101
+ } else z = /* @__PURE__ */ g("p", { children: n.map((a, s) => {
102
+ let c = C, l = c.overrideValueWithRowID && k ? e(k) : a, u = "";
103
+ if ("baseURL" in c) {
104
+ let { baseURL: e, URLColumnName: t, wrapValueWithParens: n, urlParamStyle: r = "query-param" } = c, i = n ? `(${l})` : l;
105
+ u = r === "path-segment" ? `/${e}/${encodeURIComponent(String(i))}` : `/${e}?${t}=${i}`;
106
+ } else if ("overrideLinkURLColumnName" in c) {
107
+ let e = t(c.overrideLinkURLColumnName, w, T);
108
+ if (e != null) {
109
+ let t = O[e];
110
+ t && (u = c.overrideLinkURLColumnTransform ? c.overrideLinkURLColumnTransform(t) : t);
110
111
  }
111
112
  }
112
- return /* @__PURE__ */ g(d, { children: [/* @__PURE__ */ h(a, {
113
- href: l,
114
- className: I,
115
- style: L,
116
- target: n ?? r.CURRENT_WINDOW,
117
- children: i
118
- }, i), o < t.length - 1 && /* @__PURE__ */ h("span", {
113
+ return /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(o, {
114
+ href: u,
115
+ className: L,
116
+ style: R,
117
+ target: r ?? i.CURRENT_WINDOW,
118
+ children: a
119
+ }, a), s < n.length - 1 && /* @__PURE__ */ g("span", {
119
120
  style: { marginRight: 4 },
120
121
  children: ", "
121
- })] }, i);
122
+ })] }, a);
122
123
  }) });
123
124
  }
124
- return "tooltipText" in S && S.tooltipText ? /* @__PURE__ */ h(p, {
125
- title: S.tooltipText,
125
+ return "tooltipText" in C && C.tooltipText ? /* @__PURE__ */ g(m, {
126
+ title: C.tooltipText,
126
127
  enterNextDelay: 300,
127
- children: /* @__PURE__ */ h("span", { children: R })
128
- }) : R;
128
+ children: /* @__PURE__ */ g("span", { children: z })
129
+ }) : z;
129
130
  }
130
131
  //#endregion
131
- export { y as SynapseCardLabel };
132
+ export { b as SynapseCardLabel };
132
133
 
133
134
  //# sourceMappingURL=SynapseCardLabel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseCardLabel.js","names":[],"sources":["../../../src/components/GenericCard/SynapseCardLabel.tsx"],"sourcesContent":["import { CardLink } from '@/components/CardContainer/CardLink'\nimport { getValueOrMultiValue } from '@/components/GenericCard/CardUtils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { getColumnIndex } from '@/utils/functions/index'\nimport { TargetEnum } from '@/utils/html/TargetEnum'\nimport { Tooltip } from '@mui/material'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n Row,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport { isEmpty } from 'lodash-es'\nimport { CSSProperties, Fragment, ReactNode } from 'react'\nimport {\n ColumnIconConfigs,\n ColumnSpecifiedLink,\n MarkdownLink,\n} from '../CardContainerLogic'\nimport {\n EntityImage,\n MapValueToReactComponentConfig,\n} from '../CardContainerLogic/CardContainerLogic'\nimport { EntityLink } from '../EntityLink'\nimport MarkdownSynapse from '../Markdown/MarkdownSynapse'\nimport { SmartLink } from '../SmartLink/SmartLink'\nimport { UserBadge } from '../UserCard/UserBadge'\nimport { EntityColumnImage } from '../widgets/EntityColumnImage'\nimport { LabelMaybeWithIcon } from './LabelMaybeWithIcon'\nimport Linkify from './Linkify'\n\ntype SynapseCardLabelProps = {\n value: string\n columnName: string\n labelLink:\n | CardLink\n | MarkdownLink\n | ColumnSpecifiedLink\n | EntityImage\n | MapValueToReactComponentConfig\n | undefined\n selectColumns: SelectColumn[] | undefined\n columnModels: ColumnModel[] | undefined\n isHeader: boolean\n className?: string\n rowData: Row['values']\n rowId?: string\n columnIconOptions?: ColumnIconConfigs\n}\nexport function SynapseCardLabel(props: SynapseCardLabelProps) {\n const {\n value,\n columnName,\n labelLink,\n selectColumns,\n columnModels,\n isHeader,\n className,\n rowData,\n rowId,\n columnIconOptions,\n } = props\n\n if (!value) {\n return <p>{value}</p>\n }\n const { strList, str, selectColumn } = getValueOrMultiValue({\n columnName,\n value,\n selectColumns,\n columnModels,\n })\n\n const columnModelType = selectColumn?.columnType\n const iconConfig = columnIconOptions?.columns?.[columnName]\n // \\u00a0 is a nbsp;\n const separator = ',\\u00a0\\u00a0'\n\n if (!str) {\n // the array came back empty\n return <p>{str}</p>\n }\n\n let newClassName = className\n const style: CSSProperties = {}\n if (isHeader) {\n newClassName = className?.concat(' ', 'SRC-lightLink')\n }\n // PORTALS-1913: special rendering for user ID lists\n if (columnModelType === ColumnTypeEnum.USERID_LIST && strList) {\n return (\n <p>\n {strList.map((val: string, index: number) => {\n return (\n <Fragment key={val}>\n <UserBadge userId={val} className={newClassName} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n }\n if (columnModelType === ColumnTypeEnum.USERID && str) {\n return <UserBadge userId={str} className={newClassName} />\n }\n\n if (columnModelType === ColumnTypeEnum.ENTITYID_LIST && strList) {\n return (\n <p>\n {strList.map((entityId: string, index: number) => {\n return (\n <Fragment key={entityId}>\n <EntityLink entity={entityId} className={newClassName} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n }\n\n if (columnModelType === ColumnTypeEnum.ENTITYID && str && !labelLink) {\n return <EntityLink entity={str} className={newClassName} />\n }\n\n // NFINT-906\n if (columnModelType === ColumnTypeEnum.DATE && str) {\n return <p>{formatDate(dayjs(Number(str)))}</p>\n }\n\n if (!labelLink) {\n if (strList) {\n return (\n <>\n {strList.map((el, index) => (\n <Fragment key={el}>\n <LabelMaybeWithIcon value={el} iconConfig={iconConfig}>\n <Linkify text={el} className={newClassName} />\n </LabelMaybeWithIcon>\n {index < strList.length - 1 && separator}\n </Fragment>\n ))}\n </>\n )\n }\n return (\n <LabelMaybeWithIcon value={str} iconConfig={iconConfig}>\n <Linkify text={str} className={newClassName} />\n </LabelMaybeWithIcon>\n )\n }\n\n if ('resolveEntityName' in labelLink && labelLink.resolveEntityName && str) {\n return <EntityLink entity={str} showIcon={false} />\n }\n\n let labelContent: ReactNode\n\n if (\n 'isMapValueToReactNodeConfig' in labelLink &&\n labelLink.isMapValueToReactNodeConfig\n ) {\n const { Component } = labelLink\n labelContent = (\n <Component value={strList || str} selectColumn={selectColumn!} />\n )\n } else if ('isMarkdown' in labelLink && labelLink.isMarkdown) {\n if (strList) {\n labelContent = (\n <p>\n {strList.map((el, index) => {\n return (\n <Fragment key={el}>\n <MarkdownSynapse key={el} renderInline={true} markdown={el} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n } else {\n labelContent = <MarkdownSynapse renderInline={true} markdown={value} />\n }\n } else if ('isEntityImage' in labelLink && labelLink.isEntityImage) {\n if (strList) {\n labelContent = (\n <p>\n {strList.map((el, index) => {\n return (\n <Fragment key={el}>\n <EntityColumnImage entityId={el} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n } else {\n labelContent = <EntityColumnImage entityId={value} />\n }\n } else {\n const split = strList ? strList : str.split(',')\n let linkTarget: TargetEnum | undefined = undefined\n if ('target' in labelLink) {\n linkTarget = labelLink.target!\n }\n if ('linkColumnName' in labelLink) {\n const linkIndex = getColumnIndex(\n labelLink.linkColumnName,\n selectColumns,\n columnModels,\n )\n if (linkIndex == null) {\n console.warn(\n `Could not determine column index of ${labelLink.linkColumnName}`,\n )\n labelContent = <>{value}</>\n } else {\n const href = rowData[linkIndex]\n\n if (isEmpty(href)) {\n labelContent = <>{value}</>\n } else {\n labelContent = (\n <p>\n {split.map((el, index) => {\n return (\n <Fragment key={el}>\n <SmartLink\n href={href ?? ''}\n target={linkTarget ?? TargetEnum.NEW_WINDOW}\n key={el}\n className={newClassName}\n style={style}\n >\n {el}\n </SmartLink>\n {index < split.length - 1 && (\n <span style={{ marginRight: 4 }}>, </span>\n )}\n </Fragment>\n )\n })}\n </p>\n )\n }\n }\n } else {\n labelContent = (\n <p>\n {split.map((el, index) => {\n const cardLink = labelLink as CardLink\n const elOrRowId = cardLink.overrideValueWithRowID ? rowId : el\n let href = ''\n if ('baseURL' in cardLink) {\n const {\n baseURL,\n URLColumnName,\n wrapValueWithParens,\n urlParamStyle = 'query-param',\n } = cardLink\n const value = wrapValueWithParens ? `(${elOrRowId})` : elOrRowId\n if (urlParamStyle === 'path-segment') {\n href = `/${baseURL}/${encodeURIComponent(String(value))}`\n } else {\n href = `/${baseURL}?${URLColumnName}=${value}`\n }\n } else if ('overrideLinkURLColumnName' in cardLink) {\n const overrideHrefIndex = getColumnIndex(\n cardLink.overrideLinkURLColumnName,\n selectColumns,\n columnModels,\n )\n if (overrideHrefIndex != null) {\n const overrideHrefData = rowData[overrideHrefIndex]\n if (overrideHrefData) {\n if (cardLink.overrideLinkURLColumnTransform) {\n href =\n cardLink.overrideLinkURLColumnTransform(overrideHrefData)\n } else {\n href = overrideHrefData\n }\n }\n }\n }\n\n return (\n <Fragment key={el}>\n <SmartLink\n href={href}\n key={el}\n className={newClassName}\n style={style}\n target={linkTarget ?? TargetEnum.CURRENT_WINDOW}\n >\n {el}\n </SmartLink>\n {index < split.length - 1 && (\n <span style={{ marginRight: 4 }}>, </span>\n )}\n </Fragment>\n )\n })}\n </p>\n )\n }\n }\n\n if ('tooltipText' in labelLink && labelLink.tooltipText) {\n // wrap in a tooltip\n return (\n <Tooltip title={labelLink.tooltipText} enterNextDelay={300}>\n <span>{labelContent}</span>\n </Tooltip>\n )\n } else {\n return labelContent\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SynapseCardLabel.js","names":[],"sources":["../../../src/components/GenericCard/SynapseCardLabel.tsx"],"sourcesContent":["import { CardLink } from '@/components/CardContainer/CardLink'\nimport { getValueOrMultiValue } from '@/components/GenericCard/CardUtils'\nimport { formatDate } from '@/utils/functions/DateFormatter'\nimport { normalizeSynPrefix } from '@/utils/functions/EntityTypeUtils'\nimport { getColumnIndex } from '@/utils/functions/index'\nimport { TargetEnum } from '@/utils/html/TargetEnum'\nimport { Tooltip } from '@mui/material'\nimport {\n ColumnModel,\n ColumnTypeEnum,\n Row,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\nimport dayjs from 'dayjs'\nimport { isEmpty } from 'lodash-es'\nimport { CSSProperties, Fragment, ReactNode } from 'react'\nimport {\n ColumnIconConfigs,\n ColumnSpecifiedLink,\n MarkdownLink,\n} from '../CardContainerLogic'\nimport {\n EntityImage,\n MapValueToReactComponentConfig,\n} from '../CardContainerLogic/CardContainerLogic'\nimport { EntityLink } from '../EntityLink'\nimport MarkdownSynapse from '../Markdown/MarkdownSynapse'\nimport { SmartLink } from '../SmartLink/SmartLink'\nimport { UserBadge } from '../UserCard/UserBadge'\nimport { EntityColumnImage } from '../widgets/EntityColumnImage'\nimport { LabelMaybeWithIcon } from './LabelMaybeWithIcon'\nimport Linkify from './Linkify'\n\ntype SynapseCardLabelProps = {\n value: string\n columnName: string\n labelLink:\n | CardLink\n | MarkdownLink\n | ColumnSpecifiedLink\n | EntityImage\n | MapValueToReactComponentConfig\n | undefined\n selectColumns: SelectColumn[] | undefined\n columnModels: ColumnModel[] | undefined\n isHeader: boolean\n className?: string\n rowData: Row['values']\n rowId?: string\n columnIconOptions?: ColumnIconConfigs\n}\nexport function SynapseCardLabel(props: SynapseCardLabelProps) {\n const {\n value,\n columnName,\n labelLink,\n selectColumns,\n columnModels,\n isHeader,\n className,\n rowData,\n rowId,\n columnIconOptions,\n } = props\n\n if (!value) {\n return <p>{value}</p>\n }\n const { strList, str, selectColumn } = getValueOrMultiValue({\n columnName,\n value,\n selectColumns,\n columnModels,\n })\n\n const columnModelType = selectColumn?.columnType\n const iconConfig = columnIconOptions?.columns?.[columnName]\n // \\u00a0 is a nbsp;\n const separator = ',\\u00a0\\u00a0'\n\n if (!str) {\n // the array came back empty\n return <p>{str}</p>\n }\n\n let newClassName = className\n const style: CSSProperties = {}\n if (isHeader) {\n newClassName = className?.concat(' ', 'SRC-lightLink')\n }\n // PORTALS-1913: special rendering for user ID lists\n if (columnModelType === ColumnTypeEnum.USERID_LIST && strList) {\n return (\n <p>\n {strList.map((val: string, index: number) => {\n return (\n <Fragment key={val}>\n <UserBadge userId={val} className={newClassName} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n }\n if (columnModelType === ColumnTypeEnum.USERID && str) {\n return <UserBadge userId={str} className={newClassName} />\n }\n\n if (columnModelType === ColumnTypeEnum.ENTITYID_LIST && strList) {\n return (\n <p>\n {strList.map((entityId: string, index: number) => {\n return (\n <Fragment key={entityId}>\n <EntityLink entity={entityId} className={newClassName} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n }\n\n if (columnModelType === ColumnTypeEnum.ENTITYID && str && !labelLink) {\n return <EntityLink entity={str} className={newClassName} />\n }\n\n // NFINT-906\n if (columnModelType === ColumnTypeEnum.DATE && str) {\n return <p>{formatDate(dayjs(Number(str)))}</p>\n }\n\n if (!labelLink) {\n if (strList) {\n return (\n <>\n {strList.map((el, index) => (\n <Fragment key={el}>\n <LabelMaybeWithIcon value={el} iconConfig={iconConfig}>\n <Linkify text={el} className={newClassName} />\n </LabelMaybeWithIcon>\n {index < strList.length - 1 && separator}\n </Fragment>\n ))}\n </>\n )\n }\n return (\n <LabelMaybeWithIcon value={str} iconConfig={iconConfig}>\n <Linkify text={str} className={newClassName} />\n </LabelMaybeWithIcon>\n )\n }\n\n if ('resolveEntityName' in labelLink && labelLink.resolveEntityName && str) {\n return <EntityLink entity={str} showIcon={false} />\n }\n\n let labelContent: ReactNode\n\n if (\n 'isMapValueToReactNodeConfig' in labelLink &&\n labelLink.isMapValueToReactNodeConfig\n ) {\n const { Component } = labelLink\n labelContent = (\n <Component value={strList || str} selectColumn={selectColumn!} />\n )\n } else if ('isMarkdown' in labelLink && labelLink.isMarkdown) {\n if (strList) {\n labelContent = (\n <p>\n {strList.map((el, index) => {\n return (\n <Fragment key={el}>\n <MarkdownSynapse key={el} renderInline={true} markdown={el} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n } else {\n labelContent = <MarkdownSynapse renderInline={true} markdown={value} />\n }\n } else if ('isEntityImage' in labelLink && labelLink.isEntityImage) {\n if (strList) {\n labelContent = (\n <p>\n {strList.map((el, index) => {\n return (\n <Fragment key={el}>\n <EntityColumnImage entityId={el} />\n {index < strList.length - 1 && separator}\n </Fragment>\n )\n })}\n </p>\n )\n } else {\n labelContent = <EntityColumnImage entityId={value} />\n }\n } else {\n const split = strList ? strList : str.split(',')\n let linkTarget: TargetEnum | undefined = undefined\n if ('target' in labelLink) {\n linkTarget = labelLink.target!\n }\n if ('linkColumnName' in labelLink) {\n const linkIndex = getColumnIndex(\n labelLink.linkColumnName,\n selectColumns,\n columnModels,\n )\n if (linkIndex == null) {\n console.warn(\n `Could not determine column index of ${labelLink.linkColumnName}`,\n )\n labelContent = <>{value}</>\n } else {\n const href = rowData[linkIndex]\n\n if (isEmpty(href)) {\n labelContent = <>{value}</>\n } else {\n labelContent = (\n <p>\n {split.map((el, index) => {\n return (\n <Fragment key={el}>\n <SmartLink\n href={href ?? ''}\n target={linkTarget ?? TargetEnum.NEW_WINDOW}\n key={el}\n className={newClassName}\n style={style}\n >\n {el}\n </SmartLink>\n {index < split.length - 1 && (\n <span style={{ marginRight: 4 }}>, </span>\n )}\n </Fragment>\n )\n })}\n </p>\n )\n }\n }\n } else {\n labelContent = (\n <p>\n {split.map((el, index) => {\n const cardLink = labelLink as CardLink\n const elOrRowId =\n cardLink.overrideValueWithRowID && rowId\n ? normalizeSynPrefix(rowId)\n : el\n let href = ''\n if ('baseURL' in cardLink) {\n const {\n baseURL,\n URLColumnName,\n wrapValueWithParens,\n urlParamStyle = 'query-param',\n } = cardLink\n const value = wrapValueWithParens ? `(${elOrRowId})` : elOrRowId\n if (urlParamStyle === 'path-segment') {\n href = `/${baseURL}/${encodeURIComponent(String(value))}`\n } else {\n href = `/${baseURL}?${URLColumnName}=${value}`\n }\n } else if ('overrideLinkURLColumnName' in cardLink) {\n const overrideHrefIndex = getColumnIndex(\n cardLink.overrideLinkURLColumnName,\n selectColumns,\n columnModels,\n )\n if (overrideHrefIndex != null) {\n const overrideHrefData = rowData[overrideHrefIndex]\n if (overrideHrefData) {\n if (cardLink.overrideLinkURLColumnTransform) {\n href =\n cardLink.overrideLinkURLColumnTransform(overrideHrefData)\n } else {\n href = overrideHrefData\n }\n }\n }\n }\n\n return (\n <Fragment key={el}>\n <SmartLink\n href={href}\n key={el}\n className={newClassName}\n style={style}\n target={linkTarget ?? TargetEnum.CURRENT_WINDOW}\n >\n {el}\n </SmartLink>\n {index < split.length - 1 && (\n <span style={{ marginRight: 4 }}>, </span>\n )}\n </Fragment>\n )\n })}\n </p>\n )\n }\n }\n\n if ('tooltipText' in labelLink && labelLink.tooltipText) {\n // wrap in a tooltip\n return (\n <Tooltip title={labelLink.tooltipText} enterNextDelay={300}>\n <span>{labelContent}</span>\n </Tooltip>\n )\n } else {\n return labelContent\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SetManagedAccessRequirementFields.d.ts","sourceRoot":"","sources":["../../../src/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.tsx"],"names":[],"mappings":"AAwCA,eAAO,MAAM,yBAAyB,oDACa,CAAA;AAEnD,eAAO,MAAM,sCAAsC,GACjD,sBAAsB,MAAM,oBAa7B,CAAA;AAED,MAAM,MAAM,uCAAuC,GAAG;IAEpD,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,sCAAsC,GAAG;IACnD,mBAAmB,EAAE,MAAM,CAAA;IAE3B,MAAM,EAAE,MAAM,IAAI,CAAA;IAElB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iCAAiC,4JAwT7C,CAAA"}
1
+ {"version":3,"file":"SetManagedAccessRequirementFields.d.ts","sourceRoot":"","sources":["../../../src/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.tsx"],"names":[],"mappings":"AAwCA,eAAO,MAAM,yBAAyB,oDACa,CAAA;AAEnD,eAAO,MAAM,sCAAsC,GACjD,sBAAsB,MAAM,oBAa7B,CAAA;AAED,MAAM,MAAM,uCAAuC,GAAG;IAEpD,IAAI,EAAE,MAAM,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,sCAAsC,GAAG;IACnD,mBAAmB,EAAE,MAAM,CAAA;IAE3B,MAAM,EAAE,MAAM,IAAI,CAAA;IAElB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iCAAiC,4JA2T7C,CAAA"}
@@ -42,7 +42,8 @@ var T = "There was an error uploading the DUC template. ", E = (t) => {
42
42
  let t = e.resp;
43
43
  R({
44
44
  ...L,
45
- ducTemplateFileHandleId: t.fileHandleId
45
+ ducTemplateFileHandleId: t.fileHandleId,
46
+ eDucTemplateId: void 0
46
47
  });
47
48
  } else !e.success && e.error && P(`${T} ${e.error.reason}`);
48
49
  }, { mutate: Y, isPending: X, error: Z } = i({
@@ -101,6 +102,7 @@ var T = "There was an error uploading the DUC template. ", E = (t) => {
101
102
  /* @__PURE__ */ C(t, { children: [/* @__PURE__ */ S(o, {
102
103
  id: "duc",
103
104
  isLoading: X,
105
+ disabled: !L.isDUCRequired,
104
106
  uploadCallback: (e) => J(e),
105
107
  documentName: "Template DUC",
106
108
  fileHandleAssociations: V ? [V] : void 0,
@@ -117,6 +119,7 @@ var T = "There was an error uploading the DUC template. ", E = (t) => {
117
119
  id: "eDucTemplate",
118
120
  options: K,
119
121
  loading: U,
122
+ disabled: !L.isDUCRequired,
120
123
  value: q,
121
124
  onChange: (e, t) => R({
122
125
  ...L,
@@ -1 +1 @@
1
- {"version":3,"file":"SetManagedAccessRequirementFields.js","names":[],"sources":["../../../src/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.tsx"],"sourcesContent":["import {\n useGetAccessRequirements,\n useListEDucTemplates,\n useUpdateAccessRequirement,\n} from '@/synapse-queries'\nimport { DAY_IN_MS } from '@/utils/SynapseConstants'\nimport {\n Alert,\n Autocomplete,\n Box,\n Checkbox,\n FormControlLabel,\n TextField,\n Typography,\n} from '@mui/material'\nimport { EDucTemplate } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n FileUploadComplete,\n ManagedACTAccessRequirement,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport {\n ForwardedRef,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { UploadDocumentField } from '../AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField'\nimport { SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport {\n AccessorRequirements,\n AccessRequirementWikiInstructions,\n} from '../SetBasicAccessRequirementFields'\n\nexport const DUC_TEMPLATE_UPLOAD_ERROR =\n 'There was an error uploading the DUC template. '\n\nexport const getValidExpirationPeriodOrErrorMessage = (\n expirationPeriodDays: string,\n) => {\n if (expirationPeriodDays === '') return 0\n\n const msgPrefix = 'Please enter a valid expiration period (in days): '\n if (/^[-]?\\d+$/.test(expirationPeriodDays)) {\n const num = Number(expirationPeriodDays)\n if (num < 0) {\n return `${msgPrefix}If expiration period is set, then it must be greater than 0.`\n }\n return num * DAY_IN_MS\n }\n return `${msgPrefix}For input string: \"${expirationPeriodDays}\"`\n}\n\nexport type SetManagedAccessRequirementFieldsHandle = {\n /* Allow the parent component to trigger saving the AR, so this may be embedded in an arbitrary modal. */\n save: () => void\n}\n\nexport type SetManagedAccessRequirementFieldsProps = {\n accessRequirementId: string\n /* Called when AR has been saved successfully */\n onSave: () => void\n /* Called when error saving AR */\n onError: () => void\n}\n\nexport const SetManagedAccessRequirementFields = forwardRef(\n function SetManagedAccessRequirementFields(\n props: SetManagedAccessRequirementFieldsProps,\n ref: ForwardedRef<SetManagedAccessRequirementFieldsHandle>,\n ) {\n const { accessRequirementId, onSave, onError } = props\n\n const { data: accessRequirement, error: getArError } =\n useGetAccessRequirements<ManagedACTAccessRequirement>(\n accessRequirementId,\n { staleTime: Infinity },\n )\n useEffect(() => {\n if (accessRequirement) {\n setUpdatedAr(accessRequirement)\n setExpirationPeriodDays(\n (accessRequirement.expirationPeriod / DAY_IN_MS).toString(),\n )\n }\n }, [accessRequirement])\n\n const [uploadDucTemplateError, setUploadDucTemplateError] = useState<\n string | null\n >(null)\n const [expirationPeriodError, setExpirationPeriodError] = useState<\n string | null\n >(null)\n\n const [updatedAr, setUpdatedAr] =\n useState<ManagedACTAccessRequirement | null>(null)\n const [expirationPeriodDays, setExpirationPeriodDays] = useState<string>('')\n\n const ducTemplateFileHandleAssociation = useMemo(() => {\n if (updatedAr?.ducTemplateFileHandleId) {\n const ducTemplateFileHandleAssociation: FileHandleAssociation = {\n fileHandleId: updatedAr.ducTemplateFileHandleId,\n associateObjectType:\n FileHandleAssociateType.AccessRequirementAttachment,\n associateObjectId: updatedAr.id.toString(),\n }\n return ducTemplateFileHandleAssociation\n }\n return undefined\n }, [updatedAr?.ducTemplateFileHandleId, updatedAr?.id])\n\n const {\n data: eDucTemplateData,\n isLoading: isLoadingEDucTemplates,\n hasNextPage: hasNextEDucTemplatePage,\n fetchNextPage: fetchNextEDucTemplatePage,\n } = useListEDucTemplates()\n // Auto-fetch all pages so the dropdown always shows the complete template list.\n useEffect(() => {\n if (hasNextEDucTemplatePage) {\n void fetchNextEDucTemplatePage()\n }\n }, [hasNextEDucTemplatePage, fetchNextEDucTemplatePage])\n const eDucTemplates = useMemo(\n () => eDucTemplateData?.pages.flatMap(page => page.results ?? []) ?? [],\n [eDucTemplateData],\n )\n const selectedEDucTemplate = useMemo(\n () =>\n eDucTemplates.find(\n template => template.templateId === updatedAr?.eDucTemplateId,\n ) ?? null,\n [eDucTemplates, updatedAr?.eDucTemplateId],\n )\n\n const uploadDucTemplateCallback = (data: UploadCallbackResp) => {\n if (data.resp && data.success && updatedAr) {\n setUploadDucTemplateError(null)\n // Files are uploaded and synced with the server immediately\n const uploadResponse: FileUploadComplete = data.resp\n setUpdatedAr({\n ...updatedAr,\n ducTemplateFileHandleId: uploadResponse.fileHandleId,\n })\n } else if (!data.success && data.error) {\n setUploadDucTemplateError(\n `${DUC_TEMPLATE_UPLOAD_ERROR} ${\n (data.error as SynapseClientError).reason\n }`,\n )\n }\n }\n\n const {\n mutate: updateAccessRequirement,\n isPending: isUpdatingAccessRequirement,\n error: updateArError,\n } = useUpdateAccessRequirement<ManagedACTAccessRequirement>({\n onSuccess: () => onSave(),\n onError: () => onError(),\n })\n\n useImperativeHandle(ref, () => {\n return {\n save() {\n if (updatedAr) {\n const expirationPeriodOrErrorMessage =\n getValidExpirationPeriodOrErrorMessage(expirationPeriodDays)\n if (typeof expirationPeriodOrErrorMessage === 'string') {\n setExpirationPeriodError(expirationPeriodOrErrorMessage)\n onError()\n } else {\n updateAccessRequirement({\n ...updatedAr,\n expirationPeriod: expirationPeriodOrErrorMessage,\n })\n }\n }\n },\n }\n }, [expirationPeriodDays, updatedAr, updateAccessRequirement, onError])\n\n if (!updatedAr) {\n if (getArError) {\n return <Alert severity=\"error\">{getArError.reason}</Alert>\n } else {\n return <SynapseSpinner />\n }\n }\n\n return (\n <>\n <AccessRequirementWikiInstructions accessRequirement={updatedAr} />\n <Box>\n <Typography\n sx={{\n bgcolor: '#f5f5f5',\n borderBottom: '1px solid #ddd',\n color: '#333',\n px: 2,\n py: 1,\n }}\n >\n Data Access Request Parameters\n </Typography>\n <Box\n sx={{\n mt: 2,\n mb: 4,\n }}\n >\n <AccessorRequirements\n accessRequirement={updatedAr}\n onChange={updatedAr =>\n setUpdatedAr(updatedAr as ManagedACTAccessRequirement)\n }\n />\n <Box\n sx={{\n mb: 2,\n }}\n >\n <Typography\n variant=\"body1\"\n sx={{\n fontWeight: 700,\n }}\n >\n DUC\n </Typography>\n <FormControlLabel\n control={<Checkbox />}\n label=\"DUC is required.\"\n checked={updatedAr.isDUCRequired}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n isDUCRequired: checked,\n })\n }\n />\n <SynapseErrorBoundary>\n <UploadDocumentField\n id=\"duc\"\n isLoading={isUpdatingAccessRequirement}\n uploadCallback={resp => uploadDucTemplateCallback(resp)}\n documentName=\"Template DUC\"\n fileHandleAssociations={\n ducTemplateFileHandleAssociation\n ? [ducTemplateFileHandleAssociation]\n : undefined\n }\n isMultiFileUpload={false}\n uploadBtnVariant=\"contained\"\n />\n {uploadDucTemplateError && (\n <Alert severity=\"error\" sx={{ marginTop: 2 }}>\n {uploadDucTemplateError}\n </Alert>\n )}\n </SynapseErrorBoundary>\n <Box sx={{ mt: 2 }}>\n <Autocomplete<EDucTemplate>\n id=\"eDucTemplate\"\n options={eDucTemplates}\n loading={isLoadingEDucTemplates}\n value={selectedEDucTemplate}\n onChange={(_event, template) =>\n setUpdatedAr({\n ...updatedAr,\n eDucTemplateId: template?.templateId,\n })\n }\n getOptionLabel={template => template.name ?? ''}\n isOptionEqualToValue={(option, value) =>\n option.templateId === value.templateId\n }\n renderInput={params => (\n <TextField\n {...params}\n label=\"eDUC template (electronic signing)\"\n helperText=\"Optional. Select a DocuSign template to enable the eDUC signing flow for this Access Requirement.\"\n />\n )}\n />\n </Box>\n <FormControlLabel\n label=\"IRB approval is required.\"\n checked={updatedAr.isIRBApprovalRequired}\n control={<Checkbox />}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n isIRBApprovalRequired: checked,\n })\n }\n sx={{ ml: 0 }}\n />\n <FormControlLabel\n control={<Checkbox />}\n label=\"Other documents are required.\"\n checked={updatedAr.areOtherAttachmentsRequired}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n areOtherAttachmentsRequired: checked,\n })\n }\n />\n <TextField\n id=\"expirationPeriod\"\n name=\"expirationPeriod\"\n label=\"Expiration period (days)\"\n value={expirationPeriodDays}\n error={Boolean(expirationPeriodError)}\n helperText={expirationPeriodError}\n sx={{ mt: 1 }}\n fullWidth\n onChange={event => {\n setExpirationPeriodError(null)\n setExpirationPeriodDays(event.target.value)\n }}\n onBlur={() => {\n const expirationPeriodOrErrorMessage =\n getValidExpirationPeriodOrErrorMessage(expirationPeriodDays)\n if (typeof expirationPeriodOrErrorMessage === 'string') {\n setExpirationPeriodError(expirationPeriodOrErrorMessage)\n }\n }}\n />\n <Box\n sx={{\n mt: 1,\n }}\n >\n <FormControlLabel\n control={<Checkbox />}\n label=\"Intended Data Use statement is required.\"\n checked={updatedAr.isIDURequired}\n onChange={(_event, checked: boolean) => {\n if (checked) {\n setUpdatedAr({\n ...updatedAr,\n isIDURequired: true,\n })\n } else {\n setUpdatedAr({\n ...updatedAr,\n isIDURequired: false,\n isIDUPublic: false,\n })\n }\n }}\n />\n <FormControlLabel\n control={<Checkbox />}\n label=\"Intended Data Use statements will be publicly available.\"\n checked={updatedAr.isIDUPublic}\n disabled={!updatedAr.isIDURequired}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n isIDUPublic: checked,\n })\n }\n />\n </Box>\n </Box>\n </Box>\n </Box>\n {updateArError && (\n <Alert severity=\"error\" sx={{ marginTop: 2 }}>\n {updateArError.reason}\n </Alert>\n )}\n </>\n )\n },\n)\n"],"mappings":"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"}
1
+ {"version":3,"file":"SetManagedAccessRequirementFields.js","names":[],"sources":["../../../src/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.tsx"],"sourcesContent":["import {\n useGetAccessRequirements,\n useListEDucTemplates,\n useUpdateAccessRequirement,\n} from '@/synapse-queries'\nimport { DAY_IN_MS } from '@/utils/SynapseConstants'\nimport {\n Alert,\n Autocomplete,\n Box,\n Checkbox,\n FormControlLabel,\n TextField,\n Typography,\n} from '@mui/material'\nimport { EDucTemplate } from '@sage-bionetworks/synapse-client'\nimport { SynapseClientError } from '@sage-bionetworks/synapse-client/util/SynapseClientError'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n FileUploadComplete,\n ManagedACTAccessRequirement,\n UploadCallbackResp,\n} from '@sage-bionetworks/synapse-types'\nimport {\n ForwardedRef,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { UploadDocumentField } from '../AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField'\nimport { SynapseErrorBoundary } from '../error/ErrorBanner'\nimport { SynapseSpinner } from '../LoadingScreen/LoadingScreen'\nimport {\n AccessorRequirements,\n AccessRequirementWikiInstructions,\n} from '../SetBasicAccessRequirementFields'\n\nexport const DUC_TEMPLATE_UPLOAD_ERROR =\n 'There was an error uploading the DUC template. '\n\nexport const getValidExpirationPeriodOrErrorMessage = (\n expirationPeriodDays: string,\n) => {\n if (expirationPeriodDays === '') return 0\n\n const msgPrefix = 'Please enter a valid expiration period (in days): '\n if (/^[-]?\\d+$/.test(expirationPeriodDays)) {\n const num = Number(expirationPeriodDays)\n if (num < 0) {\n return `${msgPrefix}If expiration period is set, then it must be greater than 0.`\n }\n return num * DAY_IN_MS\n }\n return `${msgPrefix}For input string: \"${expirationPeriodDays}\"`\n}\n\nexport type SetManagedAccessRequirementFieldsHandle = {\n /* Allow the parent component to trigger saving the AR, so this may be embedded in an arbitrary modal. */\n save: () => void\n}\n\nexport type SetManagedAccessRequirementFieldsProps = {\n accessRequirementId: string\n /* Called when AR has been saved successfully */\n onSave: () => void\n /* Called when error saving AR */\n onError: () => void\n}\n\nexport const SetManagedAccessRequirementFields = forwardRef(\n function SetManagedAccessRequirementFields(\n props: SetManagedAccessRequirementFieldsProps,\n ref: ForwardedRef<SetManagedAccessRequirementFieldsHandle>,\n ) {\n const { accessRequirementId, onSave, onError } = props\n\n const { data: accessRequirement, error: getArError } =\n useGetAccessRequirements<ManagedACTAccessRequirement>(\n accessRequirementId,\n { staleTime: Infinity },\n )\n useEffect(() => {\n if (accessRequirement) {\n setUpdatedAr(accessRequirement)\n setExpirationPeriodDays(\n (accessRequirement.expirationPeriod / DAY_IN_MS).toString(),\n )\n }\n }, [accessRequirement])\n\n const [uploadDucTemplateError, setUploadDucTemplateError] = useState<\n string | null\n >(null)\n const [expirationPeriodError, setExpirationPeriodError] = useState<\n string | null\n >(null)\n\n const [updatedAr, setUpdatedAr] =\n useState<ManagedACTAccessRequirement | null>(null)\n const [expirationPeriodDays, setExpirationPeriodDays] = useState<string>('')\n\n const ducTemplateFileHandleAssociation = useMemo(() => {\n if (updatedAr?.ducTemplateFileHandleId) {\n const ducTemplateFileHandleAssociation: FileHandleAssociation = {\n fileHandleId: updatedAr.ducTemplateFileHandleId,\n associateObjectType:\n FileHandleAssociateType.AccessRequirementAttachment,\n associateObjectId: updatedAr.id.toString(),\n }\n return ducTemplateFileHandleAssociation\n }\n return undefined\n }, [updatedAr?.ducTemplateFileHandleId, updatedAr?.id])\n\n const {\n data: eDucTemplateData,\n isLoading: isLoadingEDucTemplates,\n hasNextPage: hasNextEDucTemplatePage,\n fetchNextPage: fetchNextEDucTemplatePage,\n } = useListEDucTemplates()\n // Auto-fetch all pages so the dropdown always shows the complete template list.\n useEffect(() => {\n if (hasNextEDucTemplatePage) {\n void fetchNextEDucTemplatePage()\n }\n }, [hasNextEDucTemplatePage, fetchNextEDucTemplatePage])\n const eDucTemplates = useMemo(\n () => eDucTemplateData?.pages.flatMap(page => page.results ?? []) ?? [],\n [eDucTemplateData],\n )\n const selectedEDucTemplate = useMemo(\n () =>\n eDucTemplates.find(\n template => template.templateId === updatedAr?.eDucTemplateId,\n ) ?? null,\n [eDucTemplates, updatedAr?.eDucTemplateId],\n )\n\n const uploadDucTemplateCallback = (data: UploadCallbackResp) => {\n if (data.resp && data.success && updatedAr) {\n setUploadDucTemplateError(null)\n // Files are uploaded and synced with the server immediately\n const uploadResponse: FileUploadComplete = data.resp\n setUpdatedAr({\n ...updatedAr,\n ducTemplateFileHandleId: uploadResponse.fileHandleId,\n eDucTemplateId: undefined, // mutually exclusive with file upload\n })\n } else if (!data.success && data.error) {\n setUploadDucTemplateError(\n `${DUC_TEMPLATE_UPLOAD_ERROR} ${\n (data.error as SynapseClientError).reason\n }`,\n )\n }\n }\n\n const {\n mutate: updateAccessRequirement,\n isPending: isUpdatingAccessRequirement,\n error: updateArError,\n } = useUpdateAccessRequirement<ManagedACTAccessRequirement>({\n onSuccess: () => onSave(),\n onError: () => onError(),\n })\n\n useImperativeHandle(ref, () => {\n return {\n save() {\n if (updatedAr) {\n const expirationPeriodOrErrorMessage =\n getValidExpirationPeriodOrErrorMessage(expirationPeriodDays)\n if (typeof expirationPeriodOrErrorMessage === 'string') {\n setExpirationPeriodError(expirationPeriodOrErrorMessage)\n onError()\n } else {\n updateAccessRequirement({\n ...updatedAr,\n expirationPeriod: expirationPeriodOrErrorMessage,\n })\n }\n }\n },\n }\n }, [expirationPeriodDays, updatedAr, updateAccessRequirement, onError])\n\n if (!updatedAr) {\n if (getArError) {\n return <Alert severity=\"error\">{getArError.reason}</Alert>\n } else {\n return <SynapseSpinner />\n }\n }\n\n return (\n <>\n <AccessRequirementWikiInstructions accessRequirement={updatedAr} />\n <Box>\n <Typography\n sx={{\n bgcolor: '#f5f5f5',\n borderBottom: '1px solid #ddd',\n color: '#333',\n px: 2,\n py: 1,\n }}\n >\n Data Access Request Parameters\n </Typography>\n <Box\n sx={{\n mt: 2,\n mb: 4,\n }}\n >\n <AccessorRequirements\n accessRequirement={updatedAr}\n onChange={updatedAr =>\n setUpdatedAr(updatedAr as ManagedACTAccessRequirement)\n }\n />\n <Box\n sx={{\n mb: 2,\n }}\n >\n <Typography\n variant=\"body1\"\n sx={{\n fontWeight: 700,\n }}\n >\n DUC\n </Typography>\n <FormControlLabel\n control={<Checkbox />}\n label=\"DUC is required.\"\n checked={updatedAr.isDUCRequired}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n isDUCRequired: checked,\n })\n }\n />\n <SynapseErrorBoundary>\n <UploadDocumentField\n id=\"duc\"\n isLoading={isUpdatingAccessRequirement}\n disabled={!updatedAr.isDUCRequired}\n uploadCallback={resp => uploadDucTemplateCallback(resp)}\n documentName=\"Template DUC\"\n fileHandleAssociations={\n ducTemplateFileHandleAssociation\n ? [ducTemplateFileHandleAssociation]\n : undefined\n }\n isMultiFileUpload={false}\n uploadBtnVariant=\"contained\"\n />\n {uploadDucTemplateError && (\n <Alert severity=\"error\" sx={{ marginTop: 2 }}>\n {uploadDucTemplateError}\n </Alert>\n )}\n </SynapseErrorBoundary>\n <Box sx={{ mt: 2 }}>\n <Autocomplete<EDucTemplate>\n id=\"eDucTemplate\"\n options={eDucTemplates}\n loading={isLoadingEDucTemplates}\n disabled={!updatedAr.isDUCRequired}\n value={selectedEDucTemplate}\n onChange={(_event, template) =>\n setUpdatedAr({\n ...updatedAr,\n eDucTemplateId: template?.templateId,\n })\n }\n getOptionLabel={template => template.name ?? ''}\n isOptionEqualToValue={(option, value) =>\n option.templateId === value.templateId\n }\n renderInput={params => (\n <TextField\n {...params}\n label=\"eDUC template (electronic signing)\"\n helperText=\"Optional. Select a DocuSign template to enable the eDUC signing flow for this Access Requirement.\"\n />\n )}\n />\n </Box>\n <FormControlLabel\n label=\"IRB approval is required.\"\n checked={updatedAr.isIRBApprovalRequired}\n control={<Checkbox />}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n isIRBApprovalRequired: checked,\n })\n }\n sx={{ ml: 0 }}\n />\n <FormControlLabel\n control={<Checkbox />}\n label=\"Other documents are required.\"\n checked={updatedAr.areOtherAttachmentsRequired}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n areOtherAttachmentsRequired: checked,\n })\n }\n />\n <TextField\n id=\"expirationPeriod\"\n name=\"expirationPeriod\"\n label=\"Expiration period (days)\"\n value={expirationPeriodDays}\n error={Boolean(expirationPeriodError)}\n helperText={expirationPeriodError}\n sx={{ mt: 1 }}\n fullWidth\n onChange={event => {\n setExpirationPeriodError(null)\n setExpirationPeriodDays(event.target.value)\n }}\n onBlur={() => {\n const expirationPeriodOrErrorMessage =\n getValidExpirationPeriodOrErrorMessage(expirationPeriodDays)\n if (typeof expirationPeriodOrErrorMessage === 'string') {\n setExpirationPeriodError(expirationPeriodOrErrorMessage)\n }\n }}\n />\n <Box\n sx={{\n mt: 1,\n }}\n >\n <FormControlLabel\n control={<Checkbox />}\n label=\"Intended Data Use statement is required.\"\n checked={updatedAr.isIDURequired}\n onChange={(_event, checked: boolean) => {\n if (checked) {\n setUpdatedAr({\n ...updatedAr,\n isIDURequired: true,\n })\n } else {\n setUpdatedAr({\n ...updatedAr,\n isIDURequired: false,\n isIDUPublic: false,\n })\n }\n }}\n />\n <FormControlLabel\n control={<Checkbox />}\n label=\"Intended Data Use statements will be publicly available.\"\n checked={updatedAr.isIDUPublic}\n disabled={!updatedAr.isIDURequired}\n onChange={(_event, checked: boolean) =>\n setUpdatedAr({\n ...updatedAr,\n isIDUPublic: checked,\n })\n }\n />\n </Box>\n </Box>\n </Box>\n </Box>\n {updateArError && (\n <Alert severity=\"error\" sx={{ marginTop: 2 }}>\n {updateArError.reason}\n </Alert>\n )}\n </>\n )\n },\n)\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorybookComponentWrapper.d.ts","sourceRoot":"","sources":["../../src/components/StorybookComponentWrapper.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAa,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAIvE,OAAO,EACL,SAAS,EAOV,MAAM,OAAO,CAAA;AAoBd;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,SAAS,CAAA;IAEnB,gBAAgB,EAAE;QAChB,IAAI,EAAE;YACJ,eAAe,CAAC,EAAE,OAAO,CAAA;SAC1B,CAAA;QACD,OAAO,EAAE;YACP,KAAK,CAAC,EAAE,YAAY,CAAA;YACpB,sBAAsB,CAAC,EAAE,OAAO,CAAA;SACjC,CAAA;QACD,UAAU,EAAE;YACV,KAAK,CAAC,EAAE,YAAY,CAAA;YACpB,UAAU,CAAC,EAAE,OAAO,CAAA;YACpB,YAAY,CAAC,EAAE,OAAO,CAAA;SACvB,CAAA;KACF,CAAA;CACF,2CA4KA;AAED,eAAe,yBAAyB,CAAA"}
1
+ {"version":3,"file":"StorybookComponentWrapper.d.ts","sourceRoot":"","sources":["../../src/components/StorybookComponentWrapper.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAa,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAIvE,OAAO,EACL,SAAS,EAOV,MAAM,OAAO,CAAA;AAoBd;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,EAAE,SAAS,CAAA;IAEnB,gBAAgB,EAAE;QAChB,IAAI,EAAE;YACJ,eAAe,CAAC,EAAE,OAAO,CAAA;SAC1B,CAAA;QACD,OAAO,EAAE;YACP,KAAK,CAAC,EAAE,YAAY,CAAA;YACpB,sBAAsB,CAAC,EAAE,OAAO,CAAA;SACjC,CAAA;QACD,UAAU,EAAE;YACV,KAAK,CAAC,EAAE,YAAY,CAAA;YACpB,UAAU,CAAC,EAAE,OAAO,CAAA;YACpB,YAAY,CAAC,EAAE,OAAO,CAAA;SACvB,CAAA;KACF,CAAA;CACF,2CA2KA;AAED,eAAe,yBAAyB,CAAA"}
@@ -26,9 +26,7 @@ function w(e) {
26
26
  }
27
27
  function T(t) {
28
28
  let { storybookContext: o } = t, s = o.globals.stack || o.parameters.stack;
29
- d(() => {
30
- w(s);
31
- }, [s]);
29
+ w(s);
32
30
  let _ = m(C.subscribe, C.getSnapshot), T = p(!1);
33
31
  d(() => (T.current ||= (C.start(), !0), () => {
34
32
  C.dispose(), T.current = !1;
@@ -1 +1 @@
1
- {"version":3,"file":"StorybookComponentWrapper.js","names":[],"sources":["../../src/components/StorybookComponentWrapper.tsx"],"sourcesContent":["import { StandaloneLoginForm } from '@/components/Authentication/index'\nimport SynapseClient from '@/synapse-client'\nimport {\n defaultQueryClientConfig,\n SynapseContextProvider,\n SynapseContextType,\n} from '@/utils'\nimport { ApplicationSessionContextProvider } from '@/utils/AppUtils/session/ApplicationSessionContext'\nimport {\n SynapseSessionManager,\n type SessionState,\n} from '@/utils/AppUtils/session/SynapseSessionManager'\nimport { STACK_MAP, SynapseStack } from '@/utils/functions/getEndpoint'\nimport useDetectSSOCode from '@/utils/hooks/useDetectSSOCode'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport {\n ReactNode,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { createMemoryRouter } from 'react-router'\nimport { RouterProvider } from 'react-router/dom'\nimport { SynapseToastContainer } from './ToastMessage'\n\nconst storybookQueryClient = new QueryClient(defaultQueryClientConfig)\n\n// Module-level session manager instance, stable across story switches (like the QueryClient above)\nconst sessionManager = new SynapseSessionManager({\n onSessionInvalid: () => {\n // In Storybook, just refresh the session instead of reloading the page\n sessionManager.refreshSession()\n },\n})\n\nfunction overrideEndpoint(stack: SynapseStack) {\n const endpointConfig = STACK_MAP[stack]\n ;(window as any)['SRC_OVERRIDE_ENDPOINT_CONFIG'] = endpointConfig\n}\n\n/**\n * Wraps storybook story components to ensure that all components receive required context.\n * @param props\n * @returns\n */\nexport function StorybookComponentWrapper(props: {\n children: ReactNode\n /* This will match the `globalTypes` object in preview.tsx. */\n storybookContext: {\n args: {\n isAuthenticated?: boolean\n }\n globals: {\n stack?: SynapseStack\n showReactQueryDevtools?: boolean\n }\n parameters: {\n stack?: SynapseStack\n withRouter?: boolean\n requireLogin?: boolean\n }\n }\n}) {\n const { storybookContext } = props\n\n const currentStack: SynapseStack = (storybookContext.globals.stack ||\n storybookContext.parameters.stack) as SynapseStack\n\n useEffect(() => {\n overrideEndpoint(currentStack)\n }, [currentStack])\n\n // Subscribe to the framework-agnostic SynapseSessionManager for token/auth state\n // These methods are bound in the SynapseSessionManager constructor, so they are safe to pass directly.\n const sessionState: SessionState = useSyncExternalStore(\n // oxlint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.subscribe,\n // oxlint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.getSnapshot,\n )\n\n // Track whether we've started the manager so we only start once (module-level instance persists across renders)\n const managerStartedRef = useRef(false)\n\n useEffect(() => {\n if (!managerStartedRef.current) {\n sessionManager.start()\n managerStartedRef.current = true\n }\n return () => {\n sessionManager.dispose()\n managerStartedRef.current = false\n }\n }, [])\n\n // When the stack changes, restart the session manager to pick up the new endpoint\n useEffect(() => {\n if (managerStartedRef.current) {\n sessionManager.dispose()\n sessionManager.start()\n }\n }, [currentStack])\n\n const shouldPromptForLogin =\n storybookContext.parameters.requireLogin &&\n currentStack !== 'mock' &&\n sessionState.hasInitializedSession &&\n !sessionState.isAuthenticated\n\n const { isLoading: isLoadingSSO } = useDetectSSOCode({\n onSignInComplete: () => {\n void sessionManager.refreshSession()\n },\n onError: (err: unknown) => {\n console.error('SSO error in Storybook:', err)\n },\n isInitializingSession: !sessionState.hasInitializedSession,\n isAuthenticated: sessionState.isAuthenticated,\n })\n\n useEffect(() => {\n async function resetCache() {\n await storybookQueryClient.cancelQueries()\n await storybookQueryClient.resetQueries()\n }\n\n void resetCache()\n }, [sessionState.token, currentStack])\n\n const effectiveToken = useMemo(() => {\n if (currentStack === 'mock') {\n return storybookContext.args.isAuthenticated ? 'fake token' : undefined\n }\n return sessionState.token\n }, [sessionState.token, currentStack, storybookContext.args.isAuthenticated])\n\n const effectiveIsAuthenticated = useMemo(() => {\n if (currentStack === 'mock') {\n return !!storybookContext.args.isAuthenticated\n }\n return sessionState.isAuthenticated\n }, [\n sessionState.isAuthenticated,\n currentStack,\n storybookContext.args.isAuthenticated,\n ])\n\n const refreshSession = useCallback(async () => {\n await sessionManager.refreshSession()\n }, [])\n\n const clearSession = useCallback(async () => {\n await sessionManager.clearSession()\n }, [])\n\n const applicationSessionContext = useMemo(\n () => ({\n token: effectiveToken,\n realmId: sessionState.realmId,\n userId: sessionState.userId,\n isAuthenticated: effectiveIsAuthenticated,\n hasInitializedSession: sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n twoFactorAuthSSOErrorResponse: undefined,\n termsOfServiceStatus: undefined,\n twoFactorStatus: undefined,\n }),\n [\n effectiveToken,\n effectiveIsAuthenticated,\n sessionState.realmId,\n sessionState.userId,\n sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n ],\n )\n\n const synapseContext: Partial<SynapseContextType> = useMemo(\n () => ({\n accessToken: effectiveToken,\n isAuthenticated: effectiveIsAuthenticated,\n isInExperimentalMode: SynapseClient.isInSynapseExperimentalMode(),\n utcTime: SynapseClient.getUseUtcTimeFromCookie(),\n withErrorBoundary: true,\n downloadCartPageUrl: '/?path=/story/download-downloadcartpage--demo',\n }),\n [effectiveToken, effectiveIsAuthenticated],\n )\n\n const wrappedStory = (\n <Suspense fallback={'global suspense loading...'}>\n <QueryClientProvider client={storybookQueryClient}>\n <ApplicationSessionContextProvider context={applicationSessionContext}>\n <SynapseContextProvider\n key={currentStack}\n synapseContext={synapseContext}\n >\n {storybookContext.globals.showReactQueryDevtools && (\n <ReactQueryDevtools />\n )}\n <SynapseToastContainer />\n <main>\n {shouldPromptForLogin ? (\n <StandaloneLoginForm\n sessionCallback={() => {\n void sessionManager.refreshSession()\n }}\n />\n ) : (\n props.children\n )}\n </main>\n </SynapseContextProvider>\n </ApplicationSessionContextProvider>\n </QueryClientProvider>\n </Suspense>\n )\n\n if (!storybookContext.parameters.withRouter) {\n return wrappedStory\n }\n\n const router = createMemoryRouter([\n {\n path: '/',\n element: wrappedStory,\n },\n ])\n\n return <RouterProvider router={router} />\n}\n\nexport default StorybookComponentWrapper\n"],"mappings":"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"}
1
+ {"version":3,"file":"StorybookComponentWrapper.js","names":[],"sources":["../../src/components/StorybookComponentWrapper.tsx"],"sourcesContent":["import { StandaloneLoginForm } from '@/components/Authentication/index'\nimport SynapseClient from '@/synapse-client'\nimport {\n defaultQueryClientConfig,\n SynapseContextProvider,\n SynapseContextType,\n} from '@/utils'\nimport { ApplicationSessionContextProvider } from '@/utils/AppUtils/session/ApplicationSessionContext'\nimport {\n SynapseSessionManager,\n type SessionState,\n} from '@/utils/AppUtils/session/SynapseSessionManager'\nimport { STACK_MAP, SynapseStack } from '@/utils/functions/getEndpoint'\nimport useDetectSSOCode from '@/utils/hooks/useDetectSSOCode'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\nimport {\n ReactNode,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { createMemoryRouter } from 'react-router'\nimport { RouterProvider } from 'react-router/dom'\nimport { SynapseToastContainer } from './ToastMessage'\n\nconst storybookQueryClient = new QueryClient(defaultQueryClientConfig)\n\n// Module-level session manager instance, stable across story switches (like the QueryClient above)\nconst sessionManager = new SynapseSessionManager({\n onSessionInvalid: () => {\n // In Storybook, just refresh the session instead of reloading the page\n sessionManager.refreshSession()\n },\n})\n\nfunction overrideEndpoint(stack: SynapseStack) {\n const endpointConfig = STACK_MAP[stack]\n ;(window as any)['SRC_OVERRIDE_ENDPOINT_CONFIG'] = endpointConfig\n}\n\n/**\n * Wraps storybook story components to ensure that all components receive required context.\n * @param props\n * @returns\n */\nexport function StorybookComponentWrapper(props: {\n children: ReactNode\n /* This will match the `globalTypes` object in preview.tsx. */\n storybookContext: {\n args: {\n isAuthenticated?: boolean\n }\n globals: {\n stack?: SynapseStack\n showReactQueryDevtools?: boolean\n }\n parameters: {\n stack?: SynapseStack\n withRouter?: boolean\n requireLogin?: boolean\n }\n }\n}) {\n const { storybookContext } = props\n\n const currentStack: SynapseStack = (storybookContext.globals.stack ||\n storybookContext.parameters.stack) as SynapseStack\n\n // Set endpoint synchronously so SynapseContextProvider picks up the correct basePath on first render.\n overrideEndpoint(currentStack)\n\n // Subscribe to the framework-agnostic SynapseSessionManager for token/auth state\n // These methods are bound in the SynapseSessionManager constructor, so they are safe to pass directly.\n const sessionState: SessionState = useSyncExternalStore(\n // oxlint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.subscribe,\n // oxlint-disable-next-line @typescript-eslint/unbound-method\n sessionManager.getSnapshot,\n )\n\n // Track whether we've started the manager so we only start once (module-level instance persists across renders)\n const managerStartedRef = useRef(false)\n\n useEffect(() => {\n if (!managerStartedRef.current) {\n sessionManager.start()\n managerStartedRef.current = true\n }\n return () => {\n sessionManager.dispose()\n managerStartedRef.current = false\n }\n }, [])\n\n // When the stack changes, restart the session manager to pick up the new endpoint\n useEffect(() => {\n if (managerStartedRef.current) {\n sessionManager.dispose()\n sessionManager.start()\n }\n }, [currentStack])\n\n const shouldPromptForLogin =\n storybookContext.parameters.requireLogin &&\n currentStack !== 'mock' &&\n sessionState.hasInitializedSession &&\n !sessionState.isAuthenticated\n\n const { isLoading: isLoadingSSO } = useDetectSSOCode({\n onSignInComplete: () => {\n void sessionManager.refreshSession()\n },\n onError: (err: unknown) => {\n console.error('SSO error in Storybook:', err)\n },\n isInitializingSession: !sessionState.hasInitializedSession,\n isAuthenticated: sessionState.isAuthenticated,\n })\n\n useEffect(() => {\n async function resetCache() {\n await storybookQueryClient.cancelQueries()\n await storybookQueryClient.resetQueries()\n }\n\n void resetCache()\n }, [sessionState.token, currentStack])\n\n const effectiveToken = useMemo(() => {\n if (currentStack === 'mock') {\n return storybookContext.args.isAuthenticated ? 'fake token' : undefined\n }\n return sessionState.token\n }, [sessionState.token, currentStack, storybookContext.args.isAuthenticated])\n\n const effectiveIsAuthenticated = useMemo(() => {\n if (currentStack === 'mock') {\n return !!storybookContext.args.isAuthenticated\n }\n return sessionState.isAuthenticated\n }, [\n sessionState.isAuthenticated,\n currentStack,\n storybookContext.args.isAuthenticated,\n ])\n\n const refreshSession = useCallback(async () => {\n await sessionManager.refreshSession()\n }, [])\n\n const clearSession = useCallback(async () => {\n await sessionManager.clearSession()\n }, [])\n\n const applicationSessionContext = useMemo(\n () => ({\n token: effectiveToken,\n realmId: sessionState.realmId,\n userId: sessionState.userId,\n isAuthenticated: effectiveIsAuthenticated,\n hasInitializedSession: sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n twoFactorAuthSSOErrorResponse: undefined,\n termsOfServiceStatus: undefined,\n twoFactorStatus: undefined,\n }),\n [\n effectiveToken,\n effectiveIsAuthenticated,\n sessionState.realmId,\n sessionState.userId,\n sessionState.hasInitializedSession,\n refreshSession,\n clearSession,\n isLoadingSSO,\n ],\n )\n\n const synapseContext: Partial<SynapseContextType> = useMemo(\n () => ({\n accessToken: effectiveToken,\n isAuthenticated: effectiveIsAuthenticated,\n isInExperimentalMode: SynapseClient.isInSynapseExperimentalMode(),\n utcTime: SynapseClient.getUseUtcTimeFromCookie(),\n withErrorBoundary: true,\n downloadCartPageUrl: '/?path=/story/download-downloadcartpage--demo',\n }),\n [effectiveToken, effectiveIsAuthenticated],\n )\n\n const wrappedStory = (\n <Suspense fallback={'global suspense loading...'}>\n <QueryClientProvider client={storybookQueryClient}>\n <ApplicationSessionContextProvider context={applicationSessionContext}>\n <SynapseContextProvider\n key={currentStack}\n synapseContext={synapseContext}\n >\n {storybookContext.globals.showReactQueryDevtools && (\n <ReactQueryDevtools />\n )}\n <SynapseToastContainer />\n <main>\n {shouldPromptForLogin ? (\n <StandaloneLoginForm\n sessionCallback={() => {\n void sessionManager.refreshSession()\n }}\n />\n ) : (\n props.children\n )}\n </main>\n </SynapseContextProvider>\n </ApplicationSessionContextProvider>\n </QueryClientProvider>\n </Suspense>\n )\n\n if (!storybookContext.parameters.withRouter) {\n return wrappedStory\n }\n\n const router = createMemoryRouter([\n {\n path: '/',\n element: wrappedStory,\n },\n ])\n\n return <RouterProvider router={router} />\n}\n\nexport default StorybookComponentWrapper\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AccessRequirementDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/AccessRequirementDashboard.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,aAAa,CAAA;AACxD,eAAO,MAAM,mCAAmC,qBAAqB,CAAA;AACrE,eAAO,MAAM,4BAA4B,eAAe,CAAA;AACxD,eAAO,MAAM,wBAAwB,SAAS,CAAA;AAE9C,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mCAAmC,CAAC,EAAE,MAAM,IAAI,CAAA;CACjD,CAAA;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,2CA0MvC;AAED,eAAe,0BAA0B,CAAA"}
1
+ {"version":3,"file":"AccessRequirementDashboard.d.ts","sourceRoot":"","sources":["../../../src/components/dataaccess/AccessRequirementDashboard.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,aAAa,CAAA;AACxD,eAAO,MAAM,mCAAmC,qBAAqB,CAAA;AACrE,eAAO,MAAM,4BAA4B,eAAe,CAAA;AACxD,eAAO,MAAM,wBAAwB,SAAS,CAAA;AAE9C,MAAM,MAAM,+BAA+B,GAAG;IAC5C,mCAAmC,CAAC,EAAE,MAAM,IAAI,CAAA;CACjD,CAAA;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,2CA8MvC;AAED,eAAe,0BAA0B,CAAA"}