synapse-react-client 3.3.0 → 3.3.2

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.
@@ -44887,9 +44887,17 @@ Please use another name.` : formatMuiErrorMessage$1(18));
44887
44887
  ).length > 0;
44888
44888
  return hasFacetFilters || hasAdditionalFilters;
44889
44889
  }
44890
- function canTableQueryBeAddedToDownloadList(entity2) {
44890
+ function canTableQueryBeAddedToDownloadList(entity2, entityColumnId) {
44891
+ const viewCannotIncludeFiles = (
44892
+ // EntityViews without the file bit mask cannot contain files
44893
+ entity2 && isEntityView(entity2) && !hasFilesInView(entity2) || // DatasetCollections cannot contain files
44894
+ entity2 && isDatasetCollection(entity2)
44895
+ );
44896
+ if (viewCannotIncludeFiles) {
44897
+ return false;
44898
+ }
44891
44899
  return Boolean(
44892
- entity2 && (isEntityView(entity2) && isFileView(entity2) || isDataset(entity2))
44900
+ entityColumnId || entity2 && (isEntityView(entity2) && isFileView(entity2) || isDataset(entity2))
44893
44901
  );
44894
44902
  }
44895
44903
  function queryRequestsHaveSameTotalResults(request1, request2) {
@@ -53504,6 +53512,9 @@ Please use another name.` : formatMuiErrorMessage$1(18));
53504
53512
  );
53505
53513
  };
53506
53514
  const createAccessRequirement = (accessToken, accessRequirement) => {
53515
+ if ("description" in accessRequirement) {
53516
+ delete accessRequirement.description;
53517
+ }
53507
53518
  return doPost(
53508
53519
  ACCESS_REQUIREMENT,
53509
53520
  accessRequirement,
@@ -53512,6 +53523,9 @@ Please use another name.` : formatMuiErrorMessage$1(18));
53512
53523
  );
53513
53524
  };
53514
53525
  const updateAccessRequirement = (accessToken, accessRequirement) => {
53526
+ if ("description" in accessRequirement) {
53527
+ delete accessRequirement.description;
53528
+ }
53515
53529
  return doPut(
53516
53530
  `${ACCESS_REQUIREMENT}/${accessRequirement.id}`,
53517
53531
  accessRequirement,
@@ -55718,6 +55732,7 @@ Please use another name.` : formatMuiErrorMessage$1(18));
55718
55732
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
55719
55733
  "div",
55720
55734
  {
55735
+ role: "progressbar",
55721
55736
  className: "spinner",
55722
55737
  style: {
55723
55738
  height: `${size2}px`,
@@ -116708,8 +116723,10 @@ query = syn.tableQuery("${clientSql}")${"\n"}query.asDataFrame()`
116708
116723
  const [showProgrammaticOptions, setShowProgrammaticOptions] = React$2.useState(false);
116709
116724
  const { onDownloadFiles, darkTheme = true } = props;
116710
116725
  const fileColumnId = getFileColumnModelId(queryResultBundle == null ? void 0 : queryResultBundle.columnModels);
116711
- const isEntityViewWithoutFiles = entity2 && isEntityView(entity2) && !hasFilesInView(entity2);
116712
- const showAddQueryToDownloadList = !isEntityViewWithoutFiles && (fileColumnId || canTableQueryBeAddedToDownloadList(entity2));
116726
+ const showAddQueryToDownloadList = canTableQueryBeAddedToDownloadList(
116727
+ entity2,
116728
+ fileColumnId
116729
+ );
116713
116730
  const disableDownload = entity2 && isDataset(entity2) && entity2.isLatestVersion;
116714
116731
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(React$2.Fragment, { children: [
116715
116732
  /* @__PURE__ */ jsxRuntimeExports.jsxs(ReactBootstrap.Dropdown, { as: "span", children: [
@@ -117093,7 +117110,10 @@ query = syn.tableQuery("${clientSql}")${"\n"}query.asDataFrame()`
117093
117110
  }
117094
117111
  };
117095
117112
  const fileColumnId = getFileColumnModelId(data == null ? void 0 : data.columnModels);
117096
- const showAddToDownloadCart = fileColumnId ?? canTableQueryBeAddedToDownloadList(entity2);
117113
+ const showAddToDownloadCart = canTableQueryBeAddedToDownloadList(
117114
+ entity2,
117115
+ fileColumnId
117116
+ );
117097
117117
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
117098
117118
  RowSelectionUI,
117099
117119
  {
@@ -174009,6 +174029,53 @@ dl_list_file_entities = syn.get_download_list()`;
174009
174029
  }
174010
174030
  );
174011
174031
  }
174032
+ const PRINCIPAL_ALREADY_ADDED_ERROR_MESSAGE = "User or team already has permissions.";
174033
+ function useUpdateAcl(options2) {
174034
+ const { onChange = noop$9, onError = noop$9 } = options2;
174035
+ const [resourceAccessList, setResourceAccessList] = React$2.useState([]);
174036
+ React$2.useEffect(() => {
174037
+ onChange(resourceAccessList);
174038
+ }, [resourceAccessList]);
174039
+ const addResourceAccessItem = (newReviewerId) => {
174040
+ if (newReviewerId) {
174041
+ const alreadyReviewer = resourceAccessList.some(
174042
+ (resourceAccess) => resourceAccess.principalId === Number(newReviewerId)
174043
+ );
174044
+ if (alreadyReviewer) {
174045
+ onError(PRINCIPAL_ALREADY_ADDED_ERROR_MESSAGE);
174046
+ } else {
174047
+ const newResourceAccess = {
174048
+ principalId: Number(newReviewerId),
174049
+ accessType: [ACCESS_TYPE.REVIEW_SUBMISSIONS]
174050
+ };
174051
+ const updatedResourceAccessList = [
174052
+ ...resourceAccessList,
174053
+ newResourceAccess
174054
+ ];
174055
+ setResourceAccessList(updatedResourceAccessList);
174056
+ }
174057
+ }
174058
+ };
174059
+ const updateResourceAccessItem = (principalId, accessType) => {
174060
+ const updatedResourceAccessList = resourceAccessList.map((resourceAccess) => {
174061
+ return resourceAccess.principalId === principalId ? { ...resourceAccess, accessType } : resourceAccess;
174062
+ });
174063
+ setResourceAccessList(updatedResourceAccessList);
174064
+ };
174065
+ const removeResourceAccessItem = (principalId) => {
174066
+ const updatedResourceAccessList = resourceAccessList.filter(
174067
+ (raListItem) => raListItem.principalId !== principalId
174068
+ );
174069
+ setResourceAccessList(updatedResourceAccessList);
174070
+ };
174071
+ return {
174072
+ resourceAccessList,
174073
+ setResourceAccessList,
174074
+ addResourceAccessItem,
174075
+ updateResourceAccessItem,
174076
+ removeResourceAccessItem
174077
+ };
174078
+ }
174012
174079
  const PermissionLevelMenu = (props) => {
174013
174080
  const { currentAccessType, availablePermissionLevels: availablePermissionLevels2, onChange } = props;
174014
174081
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -174038,14 +174105,19 @@ dl_list_file_entities = syn.get_download_list()`;
174038
174105
  }
174039
174106
  );
174040
174107
  };
174108
+ function ReadOnlyPermissionLevel(props) {
174109
+ const { accessType } = props;
174110
+ return permissionLevelToLabel[getPermissionLevelFromAccessType(accessType)];
174111
+ }
174041
174112
  const REMOVE_BUTTON_LABEL = "Remove from AR Permissions";
174042
- const availablePermissionLevels = [
174043
- "CAN_REVIEW_SUBMISSIONS",
174044
- "IS_EXEMPTION_ELIGIBLE",
174045
- "CAN_REVIEW_SUBMISSIONS_AND_IS_EXEMPTION_ELIGIBLE"
174046
- ];
174047
174113
  const ResourceAccessItem = (props) => {
174048
- const { resourceAccess, onChange, onRemove: onRemove2 } = props;
174114
+ const {
174115
+ resourceAccess,
174116
+ availablePermissionLevels: availablePermissionLevels2,
174117
+ isInEditMode,
174118
+ onChange,
174119
+ onRemove: onRemove2
174120
+ } = props;
174049
174121
  return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
174050
174122
  Stack$6,
174051
174123
  {
@@ -174058,44 +174130,122 @@ dl_list_file_entities = syn.get_download_list()`;
174058
174130
  children: [
174059
174131
  /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { fontSize: "16px", lineHeight: "20px", children: /* @__PURE__ */ jsxRuntimeExports.jsx(UserOrTeamBadge, { principalId: resourceAccess.principalId }) }),
174060
174132
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Stack$6, { direction: "row", gap: "10px", alignItems: "center", width: "225px", children: [
174061
- /* @__PURE__ */ jsxRuntimeExports.jsx(
174062
- PermissionLevelMenu,
174063
- {
174064
- currentAccessType: resourceAccess.accessType,
174065
- availablePermissionLevels,
174066
- onChange
174067
- }
174068
- ),
174069
- /* @__PURE__ */ jsxRuntimeExports.jsx(
174070
- IconSvgButton,
174071
- {
174072
- "aria-label": REMOVE_BUTTON_LABEL,
174073
- onClick: () => onRemove2(),
174074
- icon: "delete",
174075
- sx: {
174076
- "&:hover": {
174077
- color: "error.main"
174133
+ !isInEditMode && /* @__PURE__ */ jsxRuntimeExports.jsx(ReadOnlyPermissionLevel, { accessType: resourceAccess.accessType }),
174134
+ isInEditMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
174135
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174136
+ PermissionLevelMenu,
174137
+ {
174138
+ currentAccessType: resourceAccess.accessType,
174139
+ availablePermissionLevels: availablePermissionLevels2,
174140
+ onChange
174141
+ }
174142
+ ),
174143
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174144
+ IconSvgButton,
174145
+ {
174146
+ "aria-label": REMOVE_BUTTON_LABEL,
174147
+ onClick: () => onRemove2(),
174148
+ icon: "delete",
174149
+ sx: {
174150
+ "&:hover": {
174151
+ color: "error.main"
174152
+ }
174078
174153
  }
174079
174154
  }
174080
- }
174081
- )
174155
+ )
174156
+ ] })
174082
174157
  ] })
174083
174158
  ]
174084
174159
  }
174085
174160
  ) });
174086
174161
  };
174162
+ function AclEditor(props) {
174163
+ const {
174164
+ isInEditMode,
174165
+ isLoading,
174166
+ resourceAccessList,
174167
+ availablePermissionLevels: availablePermissionLevels2,
174168
+ emptyText,
174169
+ addResourceAccessItem,
174170
+ updateResourceAccessItem,
174171
+ removeResourceAccessItem
174172
+ } = props;
174173
+ if (isLoading) {
174174
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Box, { display: "flex", justifyContent: "center", height: "150px", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SynapseSpinner, { size: 50 }) });
174175
+ }
174176
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174177
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { mb: "30px", children: [
174178
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Users and Teams with Permissions" }),
174179
+ resourceAccessList.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "body1Italic", children: emptyText }) : /* @__PURE__ */ jsxRuntimeExports.jsx(TransitionGroup, { children: resourceAccessList.map((resourceAccess) => {
174180
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapse$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
174181
+ ResourceAccessItem,
174182
+ {
174183
+ resourceAccess,
174184
+ availablePermissionLevels: availablePermissionLevels2,
174185
+ isInEditMode,
174186
+ onChange: (accessType) => updateResourceAccessItem(
174187
+ resourceAccess.principalId,
174188
+ accessType
174189
+ ),
174190
+ onRemove: () => removeResourceAccessItem(resourceAccess.principalId)
174191
+ },
174192
+ resourceAccess.principalId
174193
+ ) }, resourceAccess.principalId);
174194
+ }) })
174195
+ ] }),
174196
+ isInEditMode && /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174197
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Add More" }),
174198
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174199
+ Typography,
174200
+ {
174201
+ sx: {
174202
+ variant: "body1",
174203
+ lineHeight: "20px",
174204
+ fontStyle: "italic",
174205
+ color: "grey.900"
174206
+ },
174207
+ mb: "20px",
174208
+ children: "Search for a username or team to add. You can search by username, first or last names, or team name"
174209
+ }
174210
+ ),
174211
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174212
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174213
+ Typography,
174214
+ {
174215
+ component: "label",
174216
+ variant: "smallText2",
174217
+ htmlFor: "reviewer-search",
174218
+ children: "Add a user or team"
174219
+ }
174220
+ ),
174221
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174222
+ UserSearchBoxV2,
174223
+ {
174224
+ value: null,
174225
+ inputId: "reviewer-search",
174226
+ placeholder: "Username, name (first and last) or team name.",
174227
+ onChange: (id2) => addResourceAccessItem(id2)
174228
+ }
174229
+ )
174230
+ ] })
174231
+ ] })
174232
+ ] });
174233
+ }
174087
174234
  const textSx = {
174088
174235
  variant: "body1",
174089
174236
  lineHeight: "20px",
174090
174237
  color: "grey.800"
174091
174238
  };
174092
174239
  const EMPTY_RESOURCE_ACCESS_LIST_TEXT = "Only ACT has permissions on this AR.";
174093
- const REVIEWER_ALREADY_ADDED_ERROR_MESSAGE = "User or team already has permissions on this AR.";
174240
+ const availablePermissionLevels = [
174241
+ "CAN_REVIEW_SUBMISSIONS",
174242
+ "IS_EXEMPTION_ELIGIBLE",
174243
+ "CAN_REVIEW_SUBMISSIONS_AND_IS_EXEMPTION_ELIGIBLE"
174244
+ ];
174094
174245
  const AccessRequirementAclEditor = React$2.forwardRef(
174095
174246
  function AccessRequirementAclEditor2(props, ref2) {
174096
174247
  const { accessRequirementId, onSaveComplete } = props;
174097
174248
  const [error2, setError] = React$2.useState(null);
174098
- const [resourceAccessList, setResourceAccessList] = React$2.useState([]);
174099
174249
  const onMutationSuccess = () => {
174100
174250
  setError(null);
174101
174251
  onSaveComplete(true);
@@ -174108,11 +174258,21 @@ dl_list_file_entities = syn.get_download_list()`;
174108
174258
  // Infinite staleTime ensures this won't get re-fetched unless explicitly invalidated by the mutation
174109
174259
  staleTime: Infinity
174110
174260
  });
174261
+ const {
174262
+ resourceAccessList,
174263
+ setResourceAccessList,
174264
+ addResourceAccessItem,
174265
+ updateResourceAccessItem,
174266
+ removeResourceAccessItem
174267
+ } = useUpdateAcl({
174268
+ onChange: () => setError(null),
174269
+ onError: setError
174270
+ });
174111
174271
  React$2.useEffect(() => {
174112
174272
  if (originalAcl) {
174113
174273
  setResourceAccessList(originalAcl.resourceAccess);
174114
174274
  }
174115
- }, [originalAcl]);
174275
+ }, [originalAcl, setResourceAccessList]);
174116
174276
  const { mutate: deleteAcl } = useDeleteAccessRequirementACL({
174117
174277
  onSuccess: () => onMutationSuccess(),
174118
174278
  onError: (error22) => onMutationError(error22)
@@ -174159,42 +174319,6 @@ dl_list_file_entities = syn.get_download_list()`;
174159
174319
  updateAcl
174160
174320
  ]
174161
174321
  );
174162
- const addResourceAccessItem = (newReviewerId) => {
174163
- if (newReviewerId) {
174164
- const alreadyReviewer = resourceAccessList.some(
174165
- (resourceAccess) => resourceAccess.principalId === Number(newReviewerId)
174166
- );
174167
- if (alreadyReviewer) {
174168
- setError(REVIEWER_ALREADY_ADDED_ERROR_MESSAGE);
174169
- } else {
174170
- const newResourceAccess = {
174171
- principalId: Number(newReviewerId),
174172
- accessType: [ACCESS_TYPE.REVIEW_SUBMISSIONS]
174173
- };
174174
- const updatedResourceAccessList = [
174175
- ...resourceAccessList,
174176
- newResourceAccess
174177
- ];
174178
- setResourceAccessList(updatedResourceAccessList);
174179
- }
174180
- } else {
174181
- setError(null);
174182
- }
174183
- };
174184
- const updateResourceAccessItem = (principalId, accessType) => {
174185
- const updatedResourceAccessList = resourceAccessList.map(
174186
- (resourceAccess) => {
174187
- return resourceAccess.principalId === principalId ? { ...resourceAccess, accessType } : resourceAccess;
174188
- }
174189
- );
174190
- setResourceAccessList(updatedResourceAccessList);
174191
- };
174192
- const removeResourceAccessItem = (principalId) => {
174193
- const updatedResourceAccessList = resourceAccessList.filter(
174194
- (raListItem) => raListItem.principalId !== principalId
174195
- );
174196
- setResourceAccessList(updatedResourceAccessList);
174197
- };
174198
174322
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Stack$6, { gap: "20px", direction: "column", children: [
174199
174323
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174200
174324
  /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Guide to AR permissions" }),
@@ -174208,56 +174332,19 @@ dl_list_file_entities = syn.get_download_list()`;
174208
174332
  ] }),
174209
174333
  /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { sx: { ...textSx, color: "grey.900" }, children: "ACT members always retain the ability to review or modify Access Requirements." })
174210
174334
  ] }),
174211
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174212
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { mb: "30px", children: [
174213
- /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Users and Teams with Permissions" }),
174214
- isLoadingOriginalAcl && /* @__PURE__ */ jsxRuntimeExports.jsx(Skeleton, { variant: "rectangular", width: 250, height: 24 }),
174215
- !isLoadingOriginalAcl && resourceAccessList.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "body1Italic", children: EMPTY_RESOURCE_ACCESS_LIST_TEXT }) : /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: resourceAccessList.map((resourceAccess) => {
174216
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
174217
- ResourceAccessItem,
174218
- {
174219
- resourceAccess,
174220
- onChange: (accessType) => updateResourceAccessItem(
174221
- resourceAccess.principalId,
174222
- accessType
174223
- ),
174224
- onRemove: () => removeResourceAccessItem(resourceAccess.principalId)
174225
- },
174226
- resourceAccess.principalId
174227
- );
174228
- }) })
174229
- ] }),
174230
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174231
- /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Add More" }),
174232
- /* @__PURE__ */ jsxRuntimeExports.jsx(
174233
- Typography,
174234
- {
174235
- sx: { ...textSx, fontStyle: "italic", color: "grey.900" },
174236
- mb: "20px",
174237
- children: "Search for a username or team to add. You can search by username, first or last names, or team name"
174238
- }
174239
- ),
174240
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174241
- /* @__PURE__ */ jsxRuntimeExports.jsx(
174242
- Typography,
174243
- {
174244
- component: "label",
174245
- variant: "smallText2",
174246
- htmlFor: "reviewer-search",
174247
- children: "Select a reviewer"
174248
- }
174249
- ),
174250
- /* @__PURE__ */ jsxRuntimeExports.jsx(
174251
- UserSearchBoxV2,
174252
- {
174253
- inputId: "reviewer-search",
174254
- placeholder: "Username, name (first and last) or team name.",
174255
- onChange: addResourceAccessItem
174256
- }
174257
- )
174258
- ] })
174259
- ] })
174260
- ] }),
174335
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174336
+ AclEditor,
174337
+ {
174338
+ resourceAccessList,
174339
+ availablePermissionLevels,
174340
+ isLoading: isLoadingOriginalAcl,
174341
+ isInEditMode: true,
174342
+ emptyText: EMPTY_RESOURCE_ACCESS_LIST_TEXT,
174343
+ addResourceAccessItem,
174344
+ updateResourceAccessItem,
174345
+ removeResourceAccessItem
174346
+ }
174347
+ ),
174261
174348
  error2 && /* @__PURE__ */ jsxRuntimeExports.jsx(Alert, { severity: "error", children: error2 })
174262
174349
  ] });
174263
174350
  }