synapse-react-client 3.1.37 → 3.1.38

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.
package/dist/index.js CHANGED
@@ -39399,6 +39399,7 @@ function DataAccessRequestAccessorsEditor(props) {
39399
39399
  /* @__PURE__ */ import_react135.default.createElement(IconSvg_default, { icon: "clear" })
39400
39400
  ),
39401
39401
  // Renewal/Revoke data access, only display if isRenewal is true
39402
+ // TODO: It's possible to that the accessors list is in an illegal state with no way to recover -- see PLFM-7893
39402
39403
  isRenewal && user?.ownerId !== ac.userId && ac.type !== "GAIN_ACCESS" /* GAIN_ACCESS */ && /* @__PURE__ */ import_react135.default.createElement(import_react135.default.Fragment, null, /* @__PURE__ */ import_react135.default.createElement(
39403
39404
  RadioGroup,
39404
39405
  {
@@ -39431,7 +39432,8 @@ var FileUpload = (props) => {
39431
39432
  id,
39432
39433
  buttonProps = { variant: "contained" },
39433
39434
  label = "Browse...",
39434
- uploadCallback
39435
+ onUploadStart,
39436
+ onComplete
39435
39437
  } = props;
39436
39438
  const { accessToken } = useSynapseContext();
39437
39439
  const hiddenFileInput = import_react136.default.useRef(null);
@@ -39442,6 +39444,9 @@ var FileUpload = (props) => {
39442
39444
  };
39443
39445
  const changeHandler = async (e) => {
39444
39446
  if (e.target.files && e.target.files.length > 0) {
39447
+ if (onUploadStart) {
39448
+ onUploadStart();
39449
+ }
39445
39450
  const file = e.target.files[0];
39446
39451
  try {
39447
39452
  const resp = await uploadFile(
@@ -39449,16 +39454,16 @@ var FileUpload = (props) => {
39449
39454
  file.name,
39450
39455
  file
39451
39456
  );
39452
- if (uploadCallback) {
39453
- uploadCallback({
39457
+ if (onComplete) {
39458
+ onComplete({
39454
39459
  success: true,
39455
39460
  resp
39456
39461
  });
39457
39462
  }
39458
39463
  } catch (e2) {
39459
39464
  console.log("FileUpload: fail to upload file", e2);
39460
- if (uploadCallback) {
39461
- uploadCallback({
39465
+ if (onComplete) {
39466
+ onComplete({
39462
39467
  success: false,
39463
39468
  error: e2
39464
39469
  });
@@ -39494,16 +39499,12 @@ function DirectDownloadButton(props) {
39494
39499
  includeFileHandles: false,
39495
39500
  includePreviewPreSignedURLs: false
39496
39501
  };
39497
- try {
39498
- const file = await getFiles(batchFileRequest, accessToken);
39499
- const preSignedURL = file.requestedFiles[0].preSignedURL;
39500
- if (!preSignedURL) {
39501
- console.log("Fail to get file download link");
39502
- } else {
39503
- window.open(preSignedURL);
39504
- }
39505
- } catch (e) {
39506
- console.log("Fail to get file download link", e);
39502
+ const file = await getFiles(batchFileRequest, accessToken);
39503
+ const preSignedURL = file.requestedFiles[0].preSignedURL;
39504
+ if (!preSignedURL) {
39505
+ console.log("Fail to get file download link");
39506
+ } else {
39507
+ window.open(preSignedURL);
39507
39508
  }
39508
39509
  };
39509
39510
  return /* @__PURE__ */ import_react137.default.createElement(
@@ -39528,8 +39529,10 @@ function UploadDocumentField(props) {
39528
39529
  id,
39529
39530
  documentName,
39530
39531
  isMultiFileUpload = false,
39531
- onClearAttachment
39532
+ onClearAttachment,
39533
+ isLoading = false
39532
39534
  } = props;
39535
+ const [isUploading, setIsUploading] = (0, import_react138.useState)(false);
39533
39536
  const { data: fileData } = useGetFileBatch(
39534
39537
  {
39535
39538
  includeFileHandles: true,
@@ -39554,9 +39557,14 @@ function UploadDocumentField(props) {
39554
39557
  FileUpload_default,
39555
39558
  {
39556
39559
  id: `${id}-upload`,
39557
- uploadCallback,
39560
+ onUploadStart: () => setIsUploading(true),
39561
+ onComplete: (res) => {
39562
+ setIsUploading(false);
39563
+ uploadCallback(res);
39564
+ },
39558
39565
  label: `Upload ${documentName}`,
39559
39566
  buttonProps: {
39567
+ disabled: isLoading,
39560
39568
  variant: "outlined",
39561
39569
  endIcon: /* @__PURE__ */ import_react138.default.createElement(IconSvg_default, { icon: "upload", wrap: false })
39562
39570
  }
@@ -39590,7 +39598,16 @@ function UploadDocumentField(props) {
39590
39598
  },
39591
39599
  /* @__PURE__ */ import_react138.default.createElement(IconSvg_default, { icon: "clear" })
39592
39600
  ));
39593
- })
39601
+ }),
39602
+ isUploading && /* @__PURE__ */ import_react138.default.createElement(
39603
+ Button_default,
39604
+ {
39605
+ disabled: true,
39606
+ variant: "text",
39607
+ endIcon: /* @__PURE__ */ import_react138.default.createElement(IconSvg_default, { icon: "download", wrap: false })
39608
+ },
39609
+ "Uploading..."
39610
+ )
39594
39611
  );
39595
39612
  }
39596
39613
 
@@ -39639,6 +39656,23 @@ function DocumentTemplate(props) {
39639
39656
  }
39640
39657
 
39641
39658
  // src/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm.tsx
39659
+ var import_utils148 = require("@rjsf/utils");
39660
+ function AccessorRequirementHelpText(props) {
39661
+ const { managedACTAccessRequirement } = props;
39662
+ let link = "";
39663
+ let msg = "";
39664
+ if (managedACTAccessRequirement.isCertifiedUserRequired && managedACTAccessRequirement.isValidatedProfileRequired) {
39665
+ link = "https://help.synapse.org/docs/User-Types.2007072795.html";
39666
+ msg = "All data requesters must be certified users and have a validated user profile.";
39667
+ } else if (managedACTAccessRequirement.isCertifiedUserRequired) {
39668
+ link = "https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-CertifiedUsers";
39669
+ msg = "All data requesters must be a certified user.";
39670
+ } else if (managedACTAccessRequirement.isValidatedProfileRequired) {
39671
+ link = "https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-ValidatedUsers";
39672
+ msg = "All data requesters must have a validated user profile.";
39673
+ }
39674
+ return link && msg ? /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, managedACTAccessRequirement.isDUCRequired ? /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, "This list should match those listed on your DUC.", /* @__PURE__ */ import_react140.default.createElement("br", null)) : "", msg, " ", /* @__PURE__ */ import_react140.default.createElement(Link_default, { href: link, target: "_blank", rel: "noreferrer" }, "Learn more")) : /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null);
39675
+ }
39642
39676
  function DataAccessRequestAccessorsFilesForm(props) {
39643
39677
  const {
39644
39678
  onSubmissionCreated,
@@ -39647,45 +39681,19 @@ function DataAccessRequestAccessorsFilesForm(props) {
39647
39681
  researchProjectId,
39648
39682
  onCancel
39649
39683
  } = props;
39650
- const { data: user } = useGetCurrentUserProfile();
39684
+ const { accessToken } = useSynapseContext();
39685
+ const isLoggedIn = Boolean(accessToken);
39686
+ const { data: user } = useGetCurrentUserProfile({ enabled: isLoggedIn });
39651
39687
  const [alert2, setAlert] = (0, import_react140.useState)();
39652
- const [dataAccessRequest, setDataAccessRequest] = (0, import_react140.useState)();
39653
- useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {
39654
- // We append the current user onto the accessorChanges, so we wait for that data to populate
39655
- enabled: !!user,
39688
+ const [accessorChanges, setAccessorChanges] = (0, import_react140.useState)();
39689
+ const [summaryOfUse, setSummaryOfUse] = (0, import_react140.useState)();
39690
+ const [publication, setPublication] = (0, import_react140.useState)();
39691
+ const { data: dataAccessRequest, isLoading: isLoadingGetDataAccessRequest } = useGetDataAccessRequestForUpdate(String(managedACTAccessRequirement.id), {
39692
+ enabled: isLoggedIn,
39656
39693
  // Infinite staleTime ensures this won't get re-fetched unless explicitly invalidated by the mutation
39657
39694
  staleTime: Infinity,
39658
- select: (data) => {
39659
- const isRenewal2 = data.concreteType === "org.sagebionetworks.repo.model.dataaccess.Renewal";
39660
- const currentUserWithGainAccess = {
39661
- userId: user.ownerId,
39662
- type: isRenewal2 ? "RENEW_ACCESS" /* RENEW_ACCESS */ : "GAIN_ACCESS" /* GAIN_ACCESS */
39663
- };
39664
- if (!data.accessorChanges) {
39665
- data.accessorChanges = [currentUserWithGainAccess];
39666
- } else {
39667
- data.accessorChanges = [
39668
- currentUserWithGainAccess,
39669
- ...data.accessorChanges
39670
- ];
39671
- }
39672
- const seen = /* @__PURE__ */ new Set();
39673
- data.accessorChanges = data.accessorChanges.filter((accessorChange) => {
39674
- return seen.has(accessorChange.userId) ? false : seen.add(accessorChange.userId);
39675
- });
39676
- data.researchProjectId = researchProjectId;
39677
- return data;
39678
- },
39679
- onSuccess: (data) => {
39680
- setAlert(void 0);
39681
- setDataAccessRequest(data);
39682
- },
39683
- onError: (err) => {
39684
- setAlert({
39685
- key: "error",
39686
- message: err.reason
39687
- });
39688
- }
39695
+ // This call should never fail, so if we run into an error, throwing to an error boundary is acceptable
39696
+ useErrorBoundary: true
39689
39697
  });
39690
39698
  const isRenewal = dataAccessRequest?.concreteType === "org.sagebionetworks.repo.model.dataaccess.Renewal";
39691
39699
  function onError(e) {
@@ -39695,18 +39703,87 @@ function DataAccessRequestAccessorsFilesForm(props) {
39695
39703
  message: getErrorMessage(e.reason)
39696
39704
  });
39697
39705
  }
39698
- const { mutate: submit } = useSubmitDataAccessRequest({
39706
+ const { mutate: submit, isLoading: isLoadingSubmitDataAccessRequest } = useSubmitDataAccessRequest({
39699
39707
  onSuccess: () => {
39700
39708
  onSubmissionCreated();
39701
39709
  },
39702
39710
  onError
39703
39711
  });
39704
- const { mutateAsync: updateRequestAsync } = useUpdateDataAccessRequest({
39712
+ const {
39713
+ mutateAsync: updateRequestAsync,
39714
+ isLoading: isLoadingUpdateDataAccessRequest
39715
+ } = useUpdateDataAccessRequest({
39705
39716
  onError
39706
39717
  });
39718
+ const isLoading = isLoadingGetDataAccessRequest || isLoadingUpdateDataAccessRequest || isLoadingSubmitDataAccessRequest;
39719
+ (0, import_react140.useEffect)(() => {
39720
+ if (dataAccessRequest && user) {
39721
+ let shouldUpdate = false;
39722
+ if (!dataAccessRequest.researchProjectId) {
39723
+ dataAccessRequest.researchProjectId = researchProjectId;
39724
+ shouldUpdate = true;
39725
+ }
39726
+ const currentUserWithGainAccess = {
39727
+ userId: user.ownerId,
39728
+ type: isRenewal ? "RENEW_ACCESS" /* RENEW_ACCESS */ : "GAIN_ACCESS" /* GAIN_ACCESS */
39729
+ };
39730
+ if (!dataAccessRequest.accessorChanges || !dataAccessRequest.accessorChanges.find(
39731
+ (item) => (0, import_utils148.deepEquals)(item, currentUserWithGainAccess)
39732
+ )) {
39733
+ dataAccessRequest.accessorChanges = [
39734
+ currentUserWithGainAccess,
39735
+ ...dataAccessRequest.accessorChanges || []
39736
+ ];
39737
+ shouldUpdate = true;
39738
+ }
39739
+ const seen = /* @__PURE__ */ new Set();
39740
+ const uniqueAccessorChanges = dataAccessRequest.accessorChanges.filter(
39741
+ (accessorChange) => {
39742
+ return seen.has(accessorChange.userId) ? false : seen.add(accessorChange.userId);
39743
+ }
39744
+ );
39745
+ if (uniqueAccessorChanges.length !== dataAccessRequest.accessorChanges.length) {
39746
+ dataAccessRequest.accessorChanges = uniqueAccessorChanges;
39747
+ shouldUpdate = true;
39748
+ }
39749
+ if (shouldUpdate) {
39750
+ updateRequestAsync(dataAccessRequest);
39751
+ }
39752
+ }
39753
+ }, [
39754
+ dataAccessRequest,
39755
+ isRenewal,
39756
+ researchProjectId,
39757
+ updateRequestAsync,
39758
+ user
39759
+ ]);
39760
+ (0, import_react140.useEffect)(() => {
39761
+ if (dataAccessRequest) {
39762
+ if (dataAccessRequest.accessorChanges && accessorChanges == void 0) {
39763
+ setAccessorChanges(dataAccessRequest.accessorChanges);
39764
+ }
39765
+ if (isRenewal && dataAccessRequest.publication && publication == void 0) {
39766
+ setPublication(dataAccessRequest.publication);
39767
+ }
39768
+ if (isRenewal && dataAccessRequest.summaryOfUse && summaryOfUse == void 0) {
39769
+ setSummaryOfUse(dataAccessRequest.summaryOfUse);
39770
+ }
39771
+ }
39772
+ }, [dataAccessRequest]);
39773
+ function getDataAccessRequestWithLocalState() {
39774
+ return {
39775
+ ...dataAccessRequest,
39776
+ // append local state to the request
39777
+ accessorChanges,
39778
+ publication,
39779
+ summaryOfUse
39780
+ };
39781
+ }
39707
39782
  async function handleSubmit() {
39708
39783
  if (dataAccessRequest) {
39709
- const requestObject = await updateRequestAsync(dataAccessRequest);
39784
+ const requestObject = await updateRequestAsync(
39785
+ getDataAccessRequestWithLocalState()
39786
+ );
39710
39787
  submit({
39711
39788
  request: {
39712
39789
  requestId: requestObject.id,
@@ -39722,41 +39799,30 @@ function DataAccessRequestAccessorsFilesForm(props) {
39722
39799
  return /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement("strong", null, "Sorry, there is an error in submitting your request."), /* @__PURE__ */ import_react140.default.createElement("br", null), reason);
39723
39800
  };
39724
39801
  const onAccessorChange = (updater) => {
39725
- setDataAccessRequest((req) => ({
39726
- ...req,
39727
- // Copy the array so the caller doesn't have to worry about immutability
39728
- accessorChanges: [...updater(req.accessorChanges || [])]
39729
- }));
39802
+ setAccessorChanges([...updater(accessorChanges || [])]);
39730
39803
  };
39731
39804
  const onClearAttachment = (fid) => {
39732
- setDataAccessRequest((req) => {
39733
- if (req) {
39734
- return {
39735
- ...req,
39736
- attachments: req.attachments?.filter((item) => item !== fid)
39737
- };
39738
- }
39739
- return req;
39805
+ updateRequestAsync({
39806
+ ...dataAccessRequest,
39807
+ attachments: dataAccessRequest.attachments?.filter((item) => item !== fid)
39740
39808
  });
39741
39809
  };
39742
39810
  const uploadCallback = (data, context) => {
39743
39811
  if (data.resp && data.success) {
39744
39812
  const uploadResponse = data.resp;
39745
39813
  if (context === "attachments") {
39746
- setDataAccessRequest((req) => {
39747
- return {
39748
- ...req,
39749
- attachments: [
39750
- ...req.attachments || [],
39751
- uploadResponse.fileHandleId
39752
- ]
39753
- };
39814
+ updateRequestAsync({
39815
+ ...dataAccessRequest,
39816
+ attachments: [
39817
+ ...dataAccessRequest.attachments || [],
39818
+ uploadResponse.fileHandleId
39819
+ ]
39754
39820
  });
39755
39821
  } else {
39756
- setDataAccessRequest((req) => ({
39757
- ...req,
39822
+ updateRequestAsync({
39823
+ ...dataAccessRequest,
39758
39824
  [context]: uploadResponse.fileHandleId
39759
- }));
39825
+ });
39760
39826
  }
39761
39827
  } else if (!data.success && data.error) {
39762
39828
  console.log(
@@ -39769,46 +39835,24 @@ function DataAccessRequestAccessorsFilesForm(props) {
39769
39835
  });
39770
39836
  }
39771
39837
  };
39772
- const handleTextAreaInputChange = (e, key) => {
39773
- const value = e.target.value;
39774
- setDataAccessRequest((req) => ({
39775
- ...req,
39776
- [key]: value
39777
- }));
39778
- };
39779
- const AccessorRequirementHelpText = () => {
39780
- let link = "";
39781
- let msg = "";
39782
- if (managedACTAccessRequirement.isCertifiedUserRequired && managedACTAccessRequirement.isValidatedProfileRequired) {
39783
- link = "https://help.synapse.org/docs/User-Types.2007072795.html";
39784
- msg = "All data requesters must be certified users and have a validated user profile.";
39785
- } else if (managedACTAccessRequirement.isCertifiedUserRequired) {
39786
- link = "https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-CertifiedUsers";
39787
- msg = "All data requesters must be a certified user.";
39788
- } else if (managedACTAccessRequirement.isValidatedProfileRequired) {
39789
- link = "https://help.synapse.org/docs/User-Types.2007072795.html#UserAccountTiers-ValidatedUsers";
39790
- msg = "All data requesters must have a validated user profile.";
39791
- }
39792
- return link && msg ? /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, managedACTAccessRequirement.isDUCRequired ? /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, "This list should match those listed on your DUC.", /* @__PURE__ */ import_react140.default.createElement("br", null)) : "", msg, " ", /* @__PURE__ */ import_react140.default.createElement(Link_default, { href: link, target: "_blank", rel: "noreferrer" }, "Learn more")) : /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null);
39793
- };
39794
39838
  const ducFileHandleAssociation = dataAccessRequest?.ducFileHandleId ? [
39795
39839
  {
39796
39840
  fileHandleId: dataAccessRequest?.ducFileHandleId,
39797
- associateObjectType: "AccessRequirementAttachment" /* AccessRequirementAttachment */,
39798
- associateObjectId: String(managedACTAccessRequirement.id)
39841
+ associateObjectType: "DataAccessRequestAttachment" /* DataAccessRequestAttachment */,
39842
+ associateObjectId: String(dataAccessRequest.id)
39799
39843
  }
39800
39844
  ] : [];
39801
39845
  const irbFileHandleAssociation = dataAccessRequest?.irbFileHandleId ? [
39802
39846
  {
39803
39847
  fileHandleId: dataAccessRequest.irbFileHandleId,
39804
- associateObjectType: "AccessRequirementAttachment" /* AccessRequirementAttachment */,
39805
- associateObjectId: String(managedACTAccessRequirement.id)
39848
+ associateObjectType: "DataAccessRequestAttachment" /* DataAccessRequestAttachment */,
39849
+ associateObjectId: String(dataAccessRequest.id)
39806
39850
  }
39807
39851
  ] : [];
39808
39852
  const attachmentFileHandleAssociations = (dataAccessRequest?.attachments || []).map((attachmentFileHandleId) => ({
39809
39853
  fileHandleId: attachmentFileHandleId,
39810
- associateObjectType: "AccessRequirementAttachment" /* AccessRequirementAttachment */,
39811
- associateObjectId: String(managedACTAccessRequirement.id)
39854
+ associateObjectType: "DataAccessRequestAttachment" /* DataAccessRequestAttachment */,
39855
+ associateObjectId: String(dataAccessRequest.id)
39812
39856
  })) ?? [];
39813
39857
  return /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement(DialogTitle_default, null, /* @__PURE__ */ import_react140.default.createElement(Stack_default, { direction: "row", alignItems: "center", gap: "5px" }, "Request Access", /* @__PURE__ */ import_react140.default.createElement(Box_default, { sx: { flexGrow: 1 } }), /* @__PURE__ */ import_react140.default.createElement(IconButton_default, { onClick: props.onHide }, /* @__PURE__ */ import_react140.default.createElement(IconSvg_default, { icon: "close", wrap: false, sx: { color: "grey.700" } })))), /* @__PURE__ */ import_react140.default.createElement(DialogContent_default, null, /* @__PURE__ */ import_react140.default.createElement(
39814
39858
  ManagedACTAccessRequirementFormWikiWrapper,
@@ -39826,13 +39870,18 @@ function DataAccessRequestAccessorsFilesForm(props) {
39826
39870
  onSubmit: (e) => e.preventDefault()
39827
39871
  },
39828
39872
  /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { mb: 2 } }, "Please provide the information below to submit the request for access."),
39829
- dataAccessRequest && /* @__PURE__ */ import_react140.default.createElement(
39873
+ dataAccessRequest && user && /* @__PURE__ */ import_react140.default.createElement(
39830
39874
  DataAccessRequestAccessorsEditor,
39831
39875
  {
39832
- accessorChanges: dataAccessRequest.accessorChanges || [],
39876
+ accessorChanges: accessorChanges || [],
39833
39877
  onChange: onAccessorChange,
39834
39878
  isRenewal,
39835
- helpText: /* @__PURE__ */ import_react140.default.createElement(AccessorRequirementHelpText, null)
39879
+ helpText: /* @__PURE__ */ import_react140.default.createElement(
39880
+ AccessorRequirementHelpText,
39881
+ {
39882
+ managedACTAccessRequirement
39883
+ }
39884
+ )
39836
39885
  }
39837
39886
  ),
39838
39887
  (managedACTAccessRequirement?.isDUCRequired || managedACTAccessRequirement?.isIRBApprovalRequired || managedACTAccessRequirement?.areOtherAttachmentsRequired || isRenewal) && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } }),
@@ -39848,56 +39897,61 @@ function DataAccessRequestAccessorsFilesForm(props) {
39848
39897
  },
39849
39898
  downloadButtonText: "Download DUC Template"
39850
39899
  }
39851
- ), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "headline3", sx: { mt: 4, mb: 2 } }, "Fill out and upload a Data Use Certificate"), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { my: 2 } }, "You must download and fill out a Data Use Certificate (DUC). Be sure to upload the completed DUC below once you've completed it."), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", component: "ol" }, /* @__PURE__ */ import_react140.default.createElement("li", null, "Download the DUC template file."), /* @__PURE__ */ import_react140.default.createElement("li", null, "Fill out the DUC template, following the instructions in the file."), /* @__PURE__ */ import_react140.default.createElement("li", null, "Upload the completed certificate using the button below:")), /* @__PURE__ */ import_react140.default.createElement(
39900
+ ), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "headline3", sx: { mt: 4, mb: 2 } }, "Fill out and upload a Data Use Certificate"), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { my: 2 } }, "You must download and fill out a Data Use Certificate (DUC). Be sure to upload the completed DUC below once you've completed it."), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", component: "ol" }, /* @__PURE__ */ import_react140.default.createElement("li", null, "Download the DUC template file."), /* @__PURE__ */ import_react140.default.createElement("li", null, "Fill out the DUC template, following the instructions in the file."), /* @__PURE__ */ import_react140.default.createElement("li", null, "Upload the completed certificate using the button below:")), /* @__PURE__ */ import_react140.default.createElement(SynapseErrorBoundary, null, /* @__PURE__ */ import_react140.default.createElement(
39852
39901
  UploadDocumentField,
39853
39902
  {
39854
39903
  id: "duc",
39904
+ isLoading,
39855
39905
  uploadCallback: (resp) => uploadCallback(resp, "ducFileHandleId"),
39856
39906
  documentName: "Data Use Certificate",
39857
39907
  fileHandleAssociations: ducFileHandleAssociation
39858
39908
  }
39859
- ), (managedACTAccessRequirement?.isIRBApprovalRequired || managedACTAccessRequirement?.areOtherAttachmentsRequired || isRenewal) && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } })),
39860
- managedACTAccessRequirement?.isIRBApprovalRequired && /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "headline3", sx: { my: 2 } }, "IRB Approval"), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { my: 2 } }, "Upload a signed IRB letter on institutional letterhead. The letter must include the names of all the datasets requested, as well as the names of the data requesters above. Use the button below to upload the document."), /* @__PURE__ */ import_react140.default.createElement(
39909
+ )), (managedACTAccessRequirement?.isIRBApprovalRequired || managedACTAccessRequirement?.areOtherAttachmentsRequired || isRenewal) && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } })),
39910
+ managedACTAccessRequirement?.isIRBApprovalRequired && /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "headline3", sx: { my: 2 } }, "IRB Approval"), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { my: 2 } }, "Upload a signed IRB letter on institutional letterhead. The letter must include the names of all the datasets requested, as well as the names of the data requesters above. Use the button below to upload the document."), /* @__PURE__ */ import_react140.default.createElement(SynapseErrorBoundary, null, /* @__PURE__ */ import_react140.default.createElement(
39861
39911
  UploadDocumentField,
39862
39912
  {
39863
39913
  id: "irb",
39914
+ isLoading,
39864
39915
  documentName: "IRB Approval Letter",
39865
39916
  uploadCallback: (resp) => uploadCallback(resp, "irbFileHandleId"),
39866
39917
  fileHandleAssociations: irbFileHandleAssociation
39867
39918
  }
39868
- ), (managedACTAccessRequirement?.areOtherAttachmentsRequired || isRenewal) && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } })),
39919
+ )), (managedACTAccessRequirement?.areOtherAttachmentsRequired || isRenewal) && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } })),
39869
39920
  /* Attachments */
39870
- managedACTAccessRequirement?.areOtherAttachmentsRequired && /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "headline3", sx: { my: 2 } }, "Upload other required documents"), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { my: 2 } }, "You must upload other required documents. Please review the instructions to gain data access to determine which documents must also be uploaded."), /* @__PURE__ */ import_react140.default.createElement(
39921
+ managedACTAccessRequirement?.areOtherAttachmentsRequired && /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "headline3", sx: { my: 2 } }, "Upload other required documents"), /* @__PURE__ */ import_react140.default.createElement(Typography_default, { variant: "body1", sx: { my: 2 } }, "You must upload other required documents. Please review the instructions to gain data access to determine which documents must also be uploaded."), /* @__PURE__ */ import_react140.default.createElement(SynapseErrorBoundary, null, /* @__PURE__ */ import_react140.default.createElement(
39871
39922
  UploadDocumentField,
39872
39923
  {
39873
39924
  id: "file-attachment",
39925
+ isLoading,
39874
39926
  documentName: "Attachment",
39875
39927
  uploadCallback: (res) => uploadCallback(res, "attachments"),
39876
39928
  isMultiFileUpload: true,
39877
39929
  fileHandleAssociations: attachmentFileHandleAssociations,
39878
39930
  onClearAttachment
39879
39931
  }
39880
- ), isRenewal && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } })),
39932
+ )), isRenewal && /* @__PURE__ */ import_react140.default.createElement(Divider_default, { sx: { my: 4 } })),
39881
39933
  // Publications & Summary of Use
39882
39934
  isRenewal && /* @__PURE__ */ import_react140.default.createElement(import_react140.default.Fragment, null, /* @__PURE__ */ import_react140.default.createElement(
39883
39935
  TextField3,
39884
39936
  {
39885
39937
  id: "publications",
39886
39938
  label: "Publication(s)",
39939
+ disabled: isLoadingSubmitDataAccessRequest,
39887
39940
  multiline: true,
39888
39941
  rows: 3,
39889
- value: dataAccessRequest?.publication,
39890
- onChange: (e) => handleTextAreaInputChange(e, "publication")
39942
+ value: publication,
39943
+ onChange: (e) => setPublication(e.target.value)
39891
39944
  }
39892
39945
  ), /* @__PURE__ */ import_react140.default.createElement(
39893
39946
  TextField3,
39894
39947
  {
39895
39948
  id: "summaryOfUse",
39896
39949
  label: "Summary of use",
39897
- value: dataAccessRequest?.summaryOfUse,
39950
+ value: summaryOfUse,
39951
+ disabled: isLoadingSubmitDataAccessRequest,
39898
39952
  multiline: true,
39899
39953
  rows: 3,
39900
- onChange: (e) => handleTextAreaInputChange(e, "summaryOfUse")
39954
+ onChange: (e) => setSummaryOfUse(e.target.value)
39901
39955
  }
39902
39956
  ))
39903
39957
  )
@@ -39905,9 +39959,10 @@ function DataAccessRequestAccessorsFilesForm(props) {
39905
39959
  Button_default,
39906
39960
  {
39907
39961
  variant: "outlined",
39962
+ disabled: isLoadingSubmitDataAccessRequest,
39908
39963
  onClick: () => {
39909
39964
  if (dataAccessRequest) {
39910
- onCancel(dataAccessRequest);
39965
+ onCancel(getDataAccessRequestWithLocalState());
39911
39966
  }
39912
39967
  }
39913
39968
  },
@@ -39916,6 +39971,7 @@ function DataAccessRequestAccessorsFilesForm(props) {
39916
39971
  Button_default,
39917
39972
  {
39918
39973
  variant: "contained",
39974
+ disabled: isLoadingSubmitDataAccessRequest,
39919
39975
  onClick: () => {
39920
39976
  handleSubmit();
39921
39977
  }
@@ -52061,7 +52117,7 @@ var DateTimeWidget = ({
52061
52117
  };
52062
52118
 
52063
52119
  // src/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.tsx
52064
- var import_utils171 = require("@rjsf/utils");
52120
+ var import_utils173 = require("@rjsf/utils");
52065
52121
  var import_react315 = __toESM(require("react"));
52066
52122
  var import_use_deep_compare_effect8 = require("use-deep-compare-effect");
52067
52123
  function ObjectFieldTemplate(props) {
@@ -52079,13 +52135,13 @@ function ObjectFieldTemplate(props) {
52079
52135
  title,
52080
52136
  uiSchema
52081
52137
  } = props;
52082
- const options = (0, import_utils171.getUiOptions)(uiSchema);
52083
- const TitleFieldTemplate = (0, import_utils171.getTemplate)(
52138
+ const options = (0, import_utils173.getUiOptions)(uiSchema);
52139
+ const TitleFieldTemplate = (0, import_utils173.getTemplate)(
52084
52140
  "TitleFieldTemplate",
52085
52141
  registry,
52086
52142
  options
52087
52143
  );
52088
- const DescriptionFieldTemplate2 = (0, import_utils171.getTemplate)("DescriptionFieldTemplate", registry, options);
52144
+ const DescriptionFieldTemplate2 = (0, import_utils173.getTemplate)("DescriptionFieldTemplate", registry, options);
52089
52145
  const previousSchemaDefinedProperties = (0, import_react315.useRef)(/* @__PURE__ */ new Set());
52090
52146
  (0, import_use_deep_compare_effect8.useDeepCompareEffectNoCheck)(() => {
52091
52147
  if ("properties" in schema && schema.properties) {
@@ -52093,7 +52149,7 @@ function ObjectFieldTemplate(props) {
52093
52149
  const schemaDefinedProperties = new Set(
52094
52150
  propertyKeys.filter((key) => {
52095
52151
  const propertyObject = schema.properties[key];
52096
- return !propertyObject[import_utils171.ADDITIONAL_PROPERTY_FLAG];
52152
+ return !propertyObject[import_utils173.ADDITIONAL_PROPERTY_FLAG];
52097
52153
  })
52098
52154
  );
52099
52155
  if (previousSchemaDefinedProperties.current != null) {
@@ -52144,7 +52200,7 @@ function ObjectFieldTemplate(props) {
52144
52200
  registry,
52145
52201
  schema
52146
52202
  }
52147
- ), properties.map((prop) => prop.content), (0, import_utils171.canExpand)(schema, uiSchema, formData) && /* @__PURE__ */ import_react315.default.createElement(Tooltip_default, { title: "Add a new custom field", placement: "top" }, /* @__PURE__ */ import_react315.default.createElement(
52203
+ ), properties.map((prop) => prop.content), (0, import_utils173.canExpand)(schema, uiSchema, formData) && /* @__PURE__ */ import_react315.default.createElement(Tooltip_default, { title: "Add a new custom field", placement: "top" }, /* @__PURE__ */ import_react315.default.createElement(
52148
52204
  Button_default,
52149
52205
  {
52150
52206
  sx: { my: 2 },
@@ -52182,7 +52238,7 @@ var import_validator_ajv82 = __toESM(require("@rjsf/validator-ajv8"));
52182
52238
  // src/components/SchemaDrivenAnnotationEditor/field/CustomObjectField.tsx
52183
52239
  var import_react317 = __toESM(require("react"));
52184
52240
  var import_core3 = require("@rjsf/core");
52185
- var import_utils172 = require("@rjsf/utils");
52241
+ var import_utils174 = require("@rjsf/utils");
52186
52242
  function CustomObjectField(props) {
52187
52243
  const {
52188
52244
  fields: { ObjectField }
@@ -52190,11 +52246,11 @@ function CustomObjectField(props) {
52190
52246
  (0, import_react317.useEffect)(() => {
52191
52247
  const { schema, formData, onChange } = props;
52192
52248
  const newFormData = { ...formData };
52193
- if (schema[import_utils172.PROPERTIES_KEY]) {
52194
- Object.entries(schema[import_utils172.PROPERTIES_KEY]).forEach(
52249
+ if (schema[import_utils174.PROPERTIES_KEY]) {
52250
+ Object.entries(schema[import_utils174.PROPERTIES_KEY]).forEach(
52195
52251
  ([key, propertySchema]) => {
52196
52252
  const data = newFormData[key];
52197
- if (propertySchema[import_utils172.ADDITIONAL_PROPERTY_FLAG]) {
52253
+ if (propertySchema[import_utils174.ADDITIONAL_PROPERTY_FLAG]) {
52198
52254
  if (!Array.isArray(data)) {
52199
52255
  newFormData[key] = convertToArray(data);
52200
52256
  }
@@ -52205,7 +52261,7 @@ function CustomObjectField(props) {
52205
52261
  }
52206
52262
  }
52207
52263
  );
52208
- if (!(0, import_utils172.deepEquals)(formData, newFormData)) {
52264
+ if (!(0, import_utils174.deepEquals)(formData, newFormData)) {
52209
52265
  onChange(newFormData);
52210
52266
  }
52211
52267
  }
@@ -52306,20 +52362,20 @@ function ArrayFieldItemTemplate(props) {
52306
52362
  }
52307
52363
 
52308
52364
  // src/components/SchemaDrivenAnnotationEditor/template/ArrayFieldTemplate.tsx
52309
- var import_utils173 = require("@rjsf/utils");
52365
+ var import_utils175 = require("@rjsf/utils");
52310
52366
  var import_react319 = __toESM(require("react"));
52311
52367
  var import_icons_material12 = require("@mui/icons-material");
52312
52368
  function ArrayFieldTemplate(props) {
52313
52369
  const { idSchema, uiSchema, items, registry, schema } = props;
52314
- const uiOptions = (0, import_utils173.getUiOptions)(uiSchema);
52315
- const ArrayFieldTitleTemplate2 = (0, import_utils173.getTemplate)("ArrayFieldTitleTemplate", registry, uiOptions);
52316
- const ArrayFieldDescriptionTemplate2 = (0, import_utils173.getTemplate)("ArrayFieldDescriptionTemplate", registry, uiOptions);
52317
- const ArrayFieldItemTemplate2 = (0, import_utils173.getTemplate)(
52370
+ const uiOptions = (0, import_utils175.getUiOptions)(uiSchema);
52371
+ const ArrayFieldTitleTemplate2 = (0, import_utils175.getTemplate)("ArrayFieldTitleTemplate", registry, uiOptions);
52372
+ const ArrayFieldDescriptionTemplate2 = (0, import_utils175.getTemplate)("ArrayFieldDescriptionTemplate", registry, uiOptions);
52373
+ const ArrayFieldItemTemplate2 = (0, import_utils175.getTemplate)(
52318
52374
  "ArrayFieldItemTemplate",
52319
52375
  registry,
52320
52376
  uiOptions
52321
52377
  );
52322
- const isAdditionalProperty = !!props.schema[import_utils173.ADDITIONAL_PROPERTY_FLAG];
52378
+ const isAdditionalProperty = !!props.schema[import_utils175.ADDITIONAL_PROPERTY_FLAG];
52323
52379
  const additionalPropertyContext = useAdditionalPropertyContext();
52324
52380
  const [showDetails, setShowDetails] = (0, import_react319.useState)(false);
52325
52381
  (0, import_react319.useEffect)(() => {
@@ -52380,7 +52436,7 @@ function ArrayFieldTemplate(props) {
52380
52436
  var ArrayFieldTemplate_default = ArrayFieldTemplate;
52381
52437
 
52382
52438
  // src/components/SchemaDrivenAnnotationEditor/template/WrapIfAdditionalTemplate.tsx
52383
- var import_utils174 = require("@rjsf/utils");
52439
+ var import_utils176 = require("@rjsf/utils");
52384
52440
  var import_react320 = __toESM(require("react"));
52385
52441
  function WrapIfAdditionalTemplate(props) {
52386
52442
  const {
@@ -52396,8 +52452,8 @@ function WrapIfAdditionalTemplate(props) {
52396
52452
  registry
52397
52453
  } = props;
52398
52454
  const { translateString } = registry;
52399
- const keyLabel = translateString(import_utils174.TranslatableString.KeyLabel, [""]);
52400
- const additional = import_utils174.ADDITIONAL_PROPERTY_FLAG in schema;
52455
+ const keyLabel = translateString(import_utils176.TranslatableString.KeyLabel, [""]);
52456
+ const additional = import_utils176.ADDITIONAL_PROPERTY_FLAG in schema;
52401
52457
  if (!additional) {
52402
52458
  return /* @__PURE__ */ import_react320.default.createElement("div", { className: classNames }, children);
52403
52459
  }
@@ -52423,7 +52479,7 @@ function WrapIfAdditionalTemplate(props) {
52423
52479
 
52424
52480
  // src/components/SchemaDrivenAnnotationEditor/template/FieldTemplate.tsx
52425
52481
  var import_react321 = __toESM(require("react"));
52426
- var import_utils175 = require("@rjsf/utils");
52482
+ var import_utils177 = require("@rjsf/utils");
52427
52483
  var import_icons_material13 = require("@mui/icons-material");
52428
52484
  function FieldTemplate(props) {
52429
52485
  const {
@@ -52440,8 +52496,8 @@ function FieldTemplate(props) {
52440
52496
  uiSchema,
52441
52497
  schema
52442
52498
  } = props;
52443
- const uiOptions = (0, import_utils175.getUiOptions)(uiSchema);
52444
- const WrapIfAdditionalTemplate2 = (0, import_utils175.getTemplate)("WrapIfAdditionalTemplate", registry, uiOptions);
52499
+ const uiOptions = (0, import_utils177.getUiOptions)(uiSchema);
52500
+ const WrapIfAdditionalTemplate2 = (0, import_utils177.getTemplate)("WrapIfAdditionalTemplate", registry, uiOptions);
52445
52501
  const [showDetails, setShowDetails] = (0, import_react321.useState)(false);
52446
52502
  if (hidden) {
52447
52503
  return /* @__PURE__ */ import_react321.default.createElement("div", { className: "hidden" }, children);
@@ -52477,14 +52533,14 @@ function ArrayFieldTitleTemplate(props) {
52477
52533
  var import_icons_material14 = require("@mui/icons-material");
52478
52534
  var import_react323 = __toESM(require("react"));
52479
52535
  var import_ContentCopy2 = __toESM(require("@mui/icons-material/ContentCopy"));
52480
- var import_utils176 = require("@rjsf/utils");
52536
+ var import_utils178 = require("@rjsf/utils");
52481
52537
  var buttonSx = { minWidth: "unset", width: "40px", height: "40px" };
52482
52538
  function AddButton({ uiSchema, registry, ...props }) {
52483
52539
  const { translateString } = registry;
52484
52540
  return /* @__PURE__ */ import_react323.default.createElement(
52485
52541
  Button_default,
52486
52542
  {
52487
- title: translateString(import_utils176.TranslatableString.AddItemButton),
52543
+ title: translateString(import_utils178.TranslatableString.AddItemButton),
52488
52544
  ...props,
52489
52545
  color: "primary",
52490
52546
  variant: "contained",
@@ -52515,7 +52571,7 @@ function IconButtonTemplate(props) {
52515
52571
  return /* @__PURE__ */ import_react323.default.createElement(
52516
52572
  IconButton_default,
52517
52573
  {
52518
- title: translateString(import_utils176.TranslatableString.RemoveButton),
52574
+ title: translateString(import_utils178.TranslatableString.RemoveButton),
52519
52575
  ...otherProps,
52520
52576
  color: "default",
52521
52577
  sx: buttonSx
@@ -52584,15 +52640,15 @@ function DescriptionFieldTemplate(props) {
52584
52640
 
52585
52641
  // src/components/SchemaDrivenAnnotationEditor/template/ArrayFieldDescriptionTemplate.tsx
52586
52642
  var import_react326 = __toESM(require("react"));
52587
- var import_utils177 = require("@rjsf/utils");
52643
+ var import_utils179 = require("@rjsf/utils");
52588
52644
  function ArrayFieldDescriptionTemplate(props) {
52589
52645
  const { idSchema, description, registry, schema, uiSchema } = props;
52590
- const options = (0, import_utils177.getUiOptions)(uiSchema, registry.globalUiOptions);
52646
+ const options = (0, import_utils179.getUiOptions)(uiSchema, registry.globalUiOptions);
52591
52647
  const { label: displayLabel } = options;
52592
52648
  if (displayLabel === false) {
52593
52649
  return null;
52594
52650
  }
52595
- const DescriptionFieldTemplate2 = (0, import_utils177.getTemplate)("DescriptionFieldTemplate", registry, options);
52651
+ const DescriptionFieldTemplate2 = (0, import_utils179.getTemplate)("DescriptionFieldTemplate", registry, options);
52596
52652
  const id = `${idSchema.$id}__description`;
52597
52653
  return /* @__PURE__ */ import_react326.default.createElement(
52598
52654
  DescriptionFieldTemplate2,
@@ -52608,7 +52664,7 @@ function ArrayFieldDescriptionTemplate(props) {
52608
52664
 
52609
52665
  // src/components/SchemaDrivenAnnotationEditor/template/BaseInputTemplate.tsx
52610
52666
  var import_react327 = __toESM(require("react"));
52611
- var import_utils178 = require("@rjsf/utils");
52667
+ var import_utils180 = require("@rjsf/utils");
52612
52668
  var TYPES_THAT_SHRINK_LABEL = ["date", "datetime-local", "file", "time"];
52613
52669
  function BaseInputTemplate(props) {
52614
52670
  const {
@@ -52638,14 +52694,14 @@ function BaseInputTemplate(props) {
52638
52694
  ...textFieldProps
52639
52695
  } = props;
52640
52696
  const hideLabel = true;
52641
- const inputProps = (0, import_utils178.getInputProps)(schema, type, options);
52697
+ const inputProps = (0, import_utils180.getInputProps)(schema, type, options);
52642
52698
  const { step, min, max, ...rest } = inputProps;
52643
52699
  const otherProps = {
52644
52700
  inputProps: {
52645
52701
  step,
52646
52702
  min,
52647
52703
  max,
52648
- ...schema.examples ? { list: (0, import_utils178.examplesId)(id) } : void 0
52704
+ ...schema.examples ? { list: (0, import_utils180.examplesId)(id) } : void 0
52649
52705
  },
52650
52706
  ...rest
52651
52707
  };
@@ -52666,7 +52722,7 @@ function BaseInputTemplate(props) {
52666
52722
  id,
52667
52723
  name: id,
52668
52724
  placeholder: derivedValuePlaceholder || placeholder,
52669
- label: (0, import_utils178.labelValue)(label || void 0, hideLabel, false),
52725
+ label: (0, import_utils180.labelValue)(label || void 0, hideLabel, false),
52670
52726
  autoFocus: autofocus,
52671
52727
  required: false,
52672
52728
  disabled: disabled || readonly,
@@ -52681,9 +52737,9 @@ function BaseInputTemplate(props) {
52681
52737
  inputProps: {
52682
52738
  "aria-label": id
52683
52739
  },
52684
- "aria-describedby": (0, import_utils178.ariaDescribedByIds)(id, !!schema.examples)
52740
+ "aria-describedby": (0, import_utils180.ariaDescribedByIds)(id, !!schema.examples)
52685
52741
  }
52686
- ), Array.isArray(schema.examples) && /* @__PURE__ */ import_react327.default.createElement("datalist", { id: (0, import_utils178.examplesId)(id) }, schema.examples.concat(
52742
+ ), Array.isArray(schema.examples) && /* @__PURE__ */ import_react327.default.createElement("datalist", { id: (0, import_utils180.examplesId)(id) }, schema.examples.concat(
52687
52743
  schema.default && !schema.examples.includes(schema.default) ? [schema.default] : []
52688
52744
  ).map((example) => {
52689
52745
  return /* @__PURE__ */ import_react327.default.createElement("option", { key: example, value: example });
@@ -52692,13 +52748,13 @@ function BaseInputTemplate(props) {
52692
52748
 
52693
52749
  // src/components/SchemaDrivenAnnotationEditor/template/FieldErrorTemplate.tsx
52694
52750
  var import_react328 = __toESM(require("react"));
52695
- var import_utils179 = require("@rjsf/utils");
52751
+ var import_utils181 = require("@rjsf/utils");
52696
52752
  function FieldErrorTemplate(props) {
52697
52753
  const { errors = [], idSchema } = props;
52698
52754
  if (errors.length === 0) {
52699
52755
  return null;
52700
52756
  }
52701
- const id = (0, import_utils179.errorId)(idSchema);
52757
+ const id = (0, import_utils181.errorId)(idSchema);
52702
52758
  return /* @__PURE__ */ import_react328.default.createElement(List_default, { dense: true, disablePadding: true }, errors.map((error, i) => {
52703
52759
  return /* @__PURE__ */ import_react328.default.createElement(ListItem_default, { key: i, disableGutters: true }, /* @__PURE__ */ import_react328.default.createElement(FormHelperText_default, { id, sx: { color: "error.main" } }, error));
52704
52760
  }));