synapse-react-client 3.3.0 → 3.3.1

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) {
@@ -55718,6 +55726,7 @@ Please use another name.` : formatMuiErrorMessage$1(18));
55718
55726
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
55719
55727
  "div",
55720
55728
  {
55729
+ role: "progressbar",
55721
55730
  className: "spinner",
55722
55731
  style: {
55723
55732
  height: `${size2}px`,
@@ -116708,8 +116717,10 @@ query = syn.tableQuery("${clientSql}")${"\n"}query.asDataFrame()`
116708
116717
  const [showProgrammaticOptions, setShowProgrammaticOptions] = React$2.useState(false);
116709
116718
  const { onDownloadFiles, darkTheme = true } = props;
116710
116719
  const fileColumnId = getFileColumnModelId(queryResultBundle == null ? void 0 : queryResultBundle.columnModels);
116711
- const isEntityViewWithoutFiles = entity2 && isEntityView(entity2) && !hasFilesInView(entity2);
116712
- const showAddQueryToDownloadList = !isEntityViewWithoutFiles && (fileColumnId || canTableQueryBeAddedToDownloadList(entity2));
116720
+ const showAddQueryToDownloadList = canTableQueryBeAddedToDownloadList(
116721
+ entity2,
116722
+ fileColumnId
116723
+ );
116713
116724
  const disableDownload = entity2 && isDataset(entity2) && entity2.isLatestVersion;
116714
116725
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(React$2.Fragment, { children: [
116715
116726
  /* @__PURE__ */ jsxRuntimeExports.jsxs(ReactBootstrap.Dropdown, { as: "span", children: [
@@ -117093,7 +117104,10 @@ query = syn.tableQuery("${clientSql}")${"\n"}query.asDataFrame()`
117093
117104
  }
117094
117105
  };
117095
117106
  const fileColumnId = getFileColumnModelId(data == null ? void 0 : data.columnModels);
117096
- const showAddToDownloadCart = fileColumnId ?? canTableQueryBeAddedToDownloadList(entity2);
117107
+ const showAddToDownloadCart = canTableQueryBeAddedToDownloadList(
117108
+ entity2,
117109
+ fileColumnId
117110
+ );
117097
117111
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
117098
117112
  RowSelectionUI,
117099
117113
  {
@@ -174009,6 +174023,53 @@ dl_list_file_entities = syn.get_download_list()`;
174009
174023
  }
174010
174024
  );
174011
174025
  }
174026
+ const PRINCIPAL_ALREADY_ADDED_ERROR_MESSAGE = "User or team already has permissions.";
174027
+ function useUpdateAcl(options2) {
174028
+ const { onChange = noop$9, onError = noop$9 } = options2;
174029
+ const [resourceAccessList, setResourceAccessList] = React$2.useState([]);
174030
+ React$2.useEffect(() => {
174031
+ onChange(resourceAccessList);
174032
+ }, [resourceAccessList]);
174033
+ const addResourceAccessItem = (newReviewerId) => {
174034
+ if (newReviewerId) {
174035
+ const alreadyReviewer = resourceAccessList.some(
174036
+ (resourceAccess) => resourceAccess.principalId === Number(newReviewerId)
174037
+ );
174038
+ if (alreadyReviewer) {
174039
+ onError(PRINCIPAL_ALREADY_ADDED_ERROR_MESSAGE);
174040
+ } else {
174041
+ const newResourceAccess = {
174042
+ principalId: Number(newReviewerId),
174043
+ accessType: [ACCESS_TYPE.REVIEW_SUBMISSIONS]
174044
+ };
174045
+ const updatedResourceAccessList = [
174046
+ ...resourceAccessList,
174047
+ newResourceAccess
174048
+ ];
174049
+ setResourceAccessList(updatedResourceAccessList);
174050
+ }
174051
+ }
174052
+ };
174053
+ const updateResourceAccessItem = (principalId, accessType) => {
174054
+ const updatedResourceAccessList = resourceAccessList.map((resourceAccess) => {
174055
+ return resourceAccess.principalId === principalId ? { ...resourceAccess, accessType } : resourceAccess;
174056
+ });
174057
+ setResourceAccessList(updatedResourceAccessList);
174058
+ };
174059
+ const removeResourceAccessItem = (principalId) => {
174060
+ const updatedResourceAccessList = resourceAccessList.filter(
174061
+ (raListItem) => raListItem.principalId !== principalId
174062
+ );
174063
+ setResourceAccessList(updatedResourceAccessList);
174064
+ };
174065
+ return {
174066
+ resourceAccessList,
174067
+ setResourceAccessList,
174068
+ addResourceAccessItem,
174069
+ updateResourceAccessItem,
174070
+ removeResourceAccessItem
174071
+ };
174072
+ }
174012
174073
  const PermissionLevelMenu = (props) => {
174013
174074
  const { currentAccessType, availablePermissionLevels: availablePermissionLevels2, onChange } = props;
174014
174075
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -174039,13 +174100,8 @@ dl_list_file_entities = syn.get_download_list()`;
174039
174100
  );
174040
174101
  };
174041
174102
  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
174103
  const ResourceAccessItem = (props) => {
174048
- const { resourceAccess, onChange, onRemove: onRemove2 } = props;
174104
+ const { resourceAccess, availablePermissionLevels: availablePermissionLevels2, onChange, onRemove: onRemove2 } = props;
174049
174105
  return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
174050
174106
  Stack$6,
174051
174107
  {
@@ -174062,7 +174118,7 @@ dl_list_file_entities = syn.get_download_list()`;
174062
174118
  PermissionLevelMenu,
174063
174119
  {
174064
174120
  currentAccessType: resourceAccess.accessType,
174065
- availablePermissionLevels,
174121
+ availablePermissionLevels: availablePermissionLevels2,
174066
174122
  onChange
174067
174123
  }
174068
174124
  ),
@@ -174084,18 +174140,91 @@ dl_list_file_entities = syn.get_download_list()`;
174084
174140
  }
174085
174141
  ) });
174086
174142
  };
174143
+ function AclEditor(props) {
174144
+ const {
174145
+ isLoading,
174146
+ resourceAccessList,
174147
+ availablePermissionLevels: availablePermissionLevels2,
174148
+ emptyText,
174149
+ addResourceAccessItem,
174150
+ updateResourceAccessItem,
174151
+ removeResourceAccessItem
174152
+ } = props;
174153
+ if (isLoading) {
174154
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Box, { display: "flex", justifyContent: "center", height: "150px", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SynapseSpinner, { size: 50 }) });
174155
+ }
174156
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174157
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { mb: "30px", children: [
174158
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Users and Teams with Permissions" }),
174159
+ resourceAccessList.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "body1Italic", children: emptyText }) : /* @__PURE__ */ jsxRuntimeExports.jsx(TransitionGroup, { children: resourceAccessList.map((resourceAccess) => {
174160
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapse$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
174161
+ ResourceAccessItem,
174162
+ {
174163
+ resourceAccess,
174164
+ availablePermissionLevels: availablePermissionLevels2,
174165
+ onChange: (accessType) => updateResourceAccessItem(
174166
+ resourceAccess.principalId,
174167
+ accessType
174168
+ ),
174169
+ onRemove: () => removeResourceAccessItem(resourceAccess.principalId)
174170
+ },
174171
+ resourceAccess.principalId
174172
+ ) }, resourceAccess.principalId);
174173
+ }) })
174174
+ ] }),
174175
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174176
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Add More" }),
174177
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174178
+ Typography,
174179
+ {
174180
+ sx: {
174181
+ variant: "body1",
174182
+ lineHeight: "20px",
174183
+ fontStyle: "italic",
174184
+ color: "grey.900"
174185
+ },
174186
+ mb: "20px",
174187
+ children: "Search for a username or team to add. You can search by username, first or last names, or team name"
174188
+ }
174189
+ ),
174190
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174191
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174192
+ Typography,
174193
+ {
174194
+ component: "label",
174195
+ variant: "smallText2",
174196
+ htmlFor: "reviewer-search",
174197
+ children: "Add a user or team"
174198
+ }
174199
+ ),
174200
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174201
+ UserSearchBoxV2,
174202
+ {
174203
+ value: null,
174204
+ inputId: "reviewer-search",
174205
+ placeholder: "Username, name (first and last) or team name.",
174206
+ onChange: (id2) => addResourceAccessItem(id2)
174207
+ }
174208
+ )
174209
+ ] })
174210
+ ] })
174211
+ ] });
174212
+ }
174087
174213
  const textSx = {
174088
174214
  variant: "body1",
174089
174215
  lineHeight: "20px",
174090
174216
  color: "grey.800"
174091
174217
  };
174092
174218
  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.";
174219
+ const availablePermissionLevels = [
174220
+ "CAN_REVIEW_SUBMISSIONS",
174221
+ "IS_EXEMPTION_ELIGIBLE",
174222
+ "CAN_REVIEW_SUBMISSIONS_AND_IS_EXEMPTION_ELIGIBLE"
174223
+ ];
174094
174224
  const AccessRequirementAclEditor = React$2.forwardRef(
174095
174225
  function AccessRequirementAclEditor2(props, ref2) {
174096
174226
  const { accessRequirementId, onSaveComplete } = props;
174097
174227
  const [error2, setError] = React$2.useState(null);
174098
- const [resourceAccessList, setResourceAccessList] = React$2.useState([]);
174099
174228
  const onMutationSuccess = () => {
174100
174229
  setError(null);
174101
174230
  onSaveComplete(true);
@@ -174108,11 +174237,21 @@ dl_list_file_entities = syn.get_download_list()`;
174108
174237
  // Infinite staleTime ensures this won't get re-fetched unless explicitly invalidated by the mutation
174109
174238
  staleTime: Infinity
174110
174239
  });
174240
+ const {
174241
+ resourceAccessList,
174242
+ setResourceAccessList,
174243
+ addResourceAccessItem,
174244
+ updateResourceAccessItem,
174245
+ removeResourceAccessItem
174246
+ } = useUpdateAcl({
174247
+ onChange: () => setError(null),
174248
+ onError: setError
174249
+ });
174111
174250
  React$2.useEffect(() => {
174112
174251
  if (originalAcl) {
174113
174252
  setResourceAccessList(originalAcl.resourceAccess);
174114
174253
  }
174115
- }, [originalAcl]);
174254
+ }, [originalAcl, setResourceAccessList]);
174116
174255
  const { mutate: deleteAcl } = useDeleteAccessRequirementACL({
174117
174256
  onSuccess: () => onMutationSuccess(),
174118
174257
  onError: (error22) => onMutationError(error22)
@@ -174159,42 +174298,6 @@ dl_list_file_entities = syn.get_download_list()`;
174159
174298
  updateAcl
174160
174299
  ]
174161
174300
  );
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
174301
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Stack$6, { gap: "20px", direction: "column", children: [
174199
174302
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { children: [
174200
174303
  /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "headline3", mb: "10px", children: "Guide to AR permissions" }),
@@ -174208,56 +174311,18 @@ dl_list_file_entities = syn.get_download_list()`;
174208
174311
  ] }),
174209
174312
  /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { sx: { ...textSx, color: "grey.900" }, children: "ACT members always retain the ability to review or modify Access Requirements." })
174210
174313
  ] }),
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
- ] }),
174314
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
174315
+ AclEditor,
174316
+ {
174317
+ resourceAccessList,
174318
+ availablePermissionLevels,
174319
+ isLoading: isLoadingOriginalAcl,
174320
+ emptyText: EMPTY_RESOURCE_ACCESS_LIST_TEXT,
174321
+ addResourceAccessItem,
174322
+ updateResourceAccessItem,
174323
+ removeResourceAccessItem
174324
+ }
174325
+ ),
174261
174326
  error2 && /* @__PURE__ */ jsxRuntimeExports.jsx(Alert, { severity: "error", children: error2 })
174262
174327
  ] });
174263
174328
  }