synapse-react-client 4.0.18 → 4.0.19

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 (94) hide show
  1. package/dist/SWC.index.d.ts +2 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +3 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/components/DataExplorer/DataExplorer.css +1 -0
  6. package/dist/components/DataExplorer/DataExplorer.d.ts +13 -0
  7. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -0
  8. package/dist/components/DataExplorer/DataExplorer.js +119 -0
  9. package/dist/components/DataExplorer/DataExplorer.js.map +1 -0
  10. package/dist/components/DataExplorer/DataExplorer.module.js +22 -0
  11. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -0
  12. package/dist/components/DataExplorer/DataExplorer.module.scss +156 -0
  13. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  14. package/dist/components/DataGrid/columns/AutocompleteColumn.js +106 -102
  15. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  16. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  17. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +97 -89
  18. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  19. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +19 -8
  20. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -1
  21. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +64 -43
  22. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
  23. package/dist/components/DataGrid/components/UploadCsvToGridDialog.d.ts.map +1 -1
  24. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +9 -9
  25. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  26. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.d.ts.map +1 -1
  27. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js +8 -1
  28. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  29. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.d.ts.map +1 -1
  30. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +67 -65
  31. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  32. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +1 -1
  33. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  34. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +1 -0
  35. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  36. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts +1 -1
  37. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts.map +1 -1
  38. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js +1 -0
  39. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  40. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.d.ts +1 -1
  41. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.d.ts.map +1 -1
  42. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  43. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +9 -9
  44. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js +4 -4
  45. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +25 -25
  46. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  47. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.d.ts +18 -0
  48. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.d.ts.map +1 -0
  49. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +116 -0
  50. package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -0
  51. package/dist/components/table/CsvPreview/CsvPreviewDialog.d.ts +5 -5
  52. package/dist/components/table/CsvPreview/CsvPreviewDialog.d.ts.map +1 -1
  53. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +27 -76
  54. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  55. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.d.ts +19 -0
  56. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.d.ts.map +1 -0
  57. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js +41 -0
  58. package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -0
  59. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.d.ts +12 -0
  60. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.d.ts.map +1 -0
  61. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js +25 -0
  62. package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -0
  63. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.d.ts +18 -0
  64. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.d.ts.map +1 -0
  65. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js +55 -0
  66. package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -0
  67. package/dist/components/table/CsvPreview/useCreateTableFromCsv.d.ts +19 -0
  68. package/dist/components/table/CsvPreview/useCreateTableFromCsv.d.ts.map +1 -0
  69. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js +35 -0
  70. package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -0
  71. package/dist/components/table/CsvPreview/useCsvUploadPreview.d.ts +22 -0
  72. package/dist/components/table/CsvPreview/useCsvUploadPreview.d.ts.map +1 -0
  73. package/dist/components/table/CsvPreview/useCsvUploadPreview.js +32 -0
  74. package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -0
  75. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.d.ts +14 -0
  76. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.d.ts.map +1 -0
  77. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js +23 -0
  78. package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -0
  79. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
  80. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +67 -67
  81. package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
  82. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  83. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +37 -34
  84. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  85. package/dist/features/entity/metadata-task/utils/constants.d.ts +6 -3
  86. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
  87. package/dist/features/entity/metadata-task/utils/constants.js +2 -2
  88. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
  89. package/dist/tsconfig.build.tsbuildinfo +1 -1
  90. package/dist/utils/featureflag/FeatureFlags.d.ts +2 -1
  91. package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
  92. package/dist/utils/featureflag/FeatureFlags.js +1 -1
  93. package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
  94. package/package.json +4 -4
@@ -9,39 +9,39 @@ import { FinderScope as o } from "../../../../components/EntityFinder/tree/Entit
9
9
  import s from "../../../../components/WizardChoiceButton/WizardChoiceButton.js";
10
10
  import ee from "../../../../components/WizardChoiceButton/WizardChoiceButtonGroup.js";
11
11
  import { useCreateCurationTask as te, useUpdateCurationTask as ne } from "../../../../synapse-queries/curation/task/useCurationTask.js";
12
- import { ASSIGNEE_TOOLTIP as re, AUTH_MODE_NONE_TOOLTIP as ie, AUTH_MODE_SESSION_OWNER_TOOLTIP as ae, AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP as oe, COLLABORATORS_TOOLTIP as se, CREATE_CURATION_TASK_DIALOG_TITLE as ce, EDIT_CURATION_TASK_DIALOG_TITLE as le, FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION as ue, FILE_BASED_TASK_DESCRIPTION as de, FILE_BASED_TASK_TITLE as fe, FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION as pe, FILE_VIEW_FINDER_PROMPT as me, FILE_VIEW_FINDER_TITLE as he, RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION as ge, RECORD_BASED_TASK_DESCRIPTION as _e, RECORD_BASED_TASK_TITLE as ve, RECORD_SET_FINDER_PROMPT as ye, RECORD_SET_FINDER_TITLE as be, SELECT_TASK_TYPE_DESCRIPTION as xe, TASK_INSTRUCTIONS_INPUT_DESCRIPTION as Se, TASK_NAME_INPUT_DESCRIPTION as Ce, UPLOAD_FOLDER_FINDER_PROMPT as we, UPLOAD_FOLDER_FINDER_TITLE as Te } from "../utils/constants.js";
12
+ import { ASSIGNEE_TOOLTIP as re, AUTH_MODE_NONE_TITLE as ie, AUTH_MODE_NONE_TOOLTIP as ae, AUTH_MODE_SESSION_OWNER_TITLE as oe, AUTH_MODE_SESSION_OWNER_TOOLTIP as se, AUTH_MODE_SOURCE_BENEFACTOR_TITLE as ce, AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP as le, COLLABORATORS_TOOLTIP as ue, CREATE_CURATION_TASK_DIALOG_TITLE as de, EDIT_CURATION_TASK_DIALOG_TITLE as fe, FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION as pe, FILE_BASED_TASK_DESCRIPTION as me, FILE_BASED_TASK_TITLE as he, FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION as ge, FILE_VIEW_FINDER_PROMPT as _e, FILE_VIEW_FINDER_TITLE as ve, RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION as ye, RECORD_BASED_TASK_DESCRIPTION as be, RECORD_BASED_TASK_TITLE as xe, RECORD_SET_FINDER_PROMPT as Se, RECORD_SET_FINDER_TITLE as Ce, SELECT_TASK_TYPE_DESCRIPTION as we, TASK_INSTRUCTIONS_INPUT_DESCRIPTION as Te, TASK_NAME_INPUT_DESCRIPTION as Ee, UPLOAD_FOLDER_FINDER_PROMPT as De, UPLOAD_FOLDER_FINDER_TITLE as Oe } from "../utils/constants.js";
13
13
  import c from "../../../../components/EntityFinder/EntityIdTextField.js";
14
14
  import { useState as l } from "react";
15
- import { Alert as u, Box as d, Button as f, FormControl as Ee, FormControlLabel as p, FormLabel as De, Grid as m, IconButton as Oe, InputLabel as h, Radio as g, RadioGroup as ke, Stack as _, Tooltip as v, Typography as y } from "@mui/material";
15
+ import { Alert as u, Box as d, Button as f, FormControl as ke, FormControlLabel as p, FormLabel as Ae, Grid as m, IconButton as je, InputLabel as h, Radio as g, RadioGroup as Me, Stack as _, Tooltip as v, Typography as y } from "@mui/material";
16
16
  import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
17
17
  import { TYPE_FILTER as C } from "@sage-bionetworks/synapse-types";
18
18
  import { EntityType as w, FileBasedMetadataTaskPropertiesConcreteTypeEnum as T, RecordBasedMetadataTaskPropertiesConcreteTypeEnum as E } from "@sage-bionetworks/synapse-client";
19
19
  import { HelpTwoTone as D } from "@mui/icons-material";
20
- import Ae from "@mui/icons-material/Close";
20
+ import Ne from "@mui/icons-material/Close";
21
21
  //#region src/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.tsx
22
22
  var O = T.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties, k = E.org_sagebionetworks_repo_model_curation_metadata_RecordBasedMetadataTaskProperties;
23
- function je(e) {
23
+ function Pe(e) {
24
24
  return e === "SESSION_OWNER" || e === "SOURCE_BENEFACTOR" ? e : "NONE";
25
25
  }
26
26
  function A(T) {
27
- let { open: E, onCancel: A, onSuccess: j, projectId: Me, task: M } = T, N = M !== void 0, [P, F] = l(() => M ? "COMMON_MUTABLE_FIELDS" : "SELECT_TYPE"), [I, L] = l(() => {
27
+ let { open: E, onCancel: A, onSuccess: j, projectId: Fe, task: M } = T, N = M !== void 0, [P, F] = l(() => M ? "COMMON_MUTABLE_FIELDS" : "SELECT_TYPE"), [I, L] = l(() => {
28
28
  let e = M?.taskProperties?.concreteType;
29
29
  return e === O || e === k ? e : null;
30
- }), [R, Ne] = l(() => M?.dataType ?? ""), [z, Pe] = l(() => M?.instructions ?? ""), [B, Fe] = l(() => M?.assigneePrincipalId), V = je(M?.taskProperties?.suggestedAuthorizationMode), [H, Ie] = l(V), [Le] = l(V), [U, Re] = l(() => {
30
+ }), [R, Ie] = l(() => M?.dataType ?? ""), [z, Le] = l(() => M?.instructions ?? ""), [B, Re] = l(() => M?.assigneePrincipalId), V = Pe(M?.taskProperties?.suggestedAuthorizationMode), [H, ze] = l(V), [Be] = l(V), [U, Ve] = l(() => {
31
31
  let e = M?.taskProperties;
32
32
  return e?.concreteType === O ? e.uploadFolderId ?? "" : "";
33
- }), [W, ze] = l(() => {
33
+ }), [W, He] = l(() => {
34
34
  let e = M?.taskProperties;
35
35
  return e?.concreteType === O ? e.fileViewId ?? "" : "";
36
- }), [G, Be] = l(() => {
36
+ }), [G, Ue] = l(() => {
37
37
  let e = M?.taskProperties;
38
38
  return e?.concreteType === k ? e.recordSetId ?? "" : "";
39
- }), [K, q] = l(() => M?.taskProperties?.collaboratorPrincipalIds ?? []), [J, Y] = l(null), { mutate: Ve, isPending: He, error: Ue } = te({ onSuccess: (e) => {
39
+ }), [K, q] = l(() => M?.taskProperties?.collaboratorPrincipalIds ?? []), [J, Y] = l(null), { mutate: We, isPending: Ge, error: Ke } = te({ onSuccess: (e) => {
40
40
  j(e);
41
- } }), { mutate: We, isPending: Ge, error: Ke } = ne({ onSuccess: (e) => {
41
+ } }), { mutate: qe, isPending: Je, error: Ye } = ne({ onSuccess: (e) => {
42
42
  j(e);
43
- } }), X = He || Ge, Z = Ue ?? Ke, qe = I === O && U && W || I === k && G;
44
- function Je() {
43
+ } }), X = Ge || Je, Z = Ke ?? Ye, Xe = I === O && U && W || I === k && G;
44
+ function Ze() {
45
45
  let e = H === "NONE" ? void 0 : H, t = I, n, r = K.length > 0 ? K : void 0;
46
46
  return n = t === O ? {
47
47
  concreteType: O,
@@ -56,20 +56,20 @@ function A(T) {
56
56
  collaboratorPrincipalIds: r
57
57
  }, {
58
58
  ...N ? M : {},
59
- projectId: Me,
59
+ projectId: Fe,
60
60
  dataType: R || void 0,
61
61
  instructions: z || void 0,
62
62
  assigneePrincipalId: B || void 0,
63
63
  taskProperties: n
64
64
  };
65
65
  }
66
- function Ye() {
67
- let e = Je();
68
- N ? We(e) : Ve(e);
66
+ function Qe() {
67
+ let e = Ze();
68
+ N ? qe(e) : We(e);
69
69
  }
70
- let Xe = N && H !== Le, Ze = /* @__PURE__ */ S(Ee, { children: [/* @__PURE__ */ x(De, { children: "Authorization Mode" }), /* @__PURE__ */ S(ke, {
70
+ let $e = N && H !== Be, et = /* @__PURE__ */ S(ke, { children: [/* @__PURE__ */ x(Ae, { children: "Authorization Mode" }), /* @__PURE__ */ S(Me, {
71
71
  value: H,
72
- onChange: (e, t) => Ie(t),
72
+ onChange: (e, t) => ze(t),
73
73
  children: [
74
74
  /* @__PURE__ */ x(p, {
75
75
  value: "NONE",
@@ -82,9 +82,9 @@ function A(T) {
82
82
  },
83
83
  children: [/* @__PURE__ */ x(y, {
84
84
  variant: "body1",
85
- children: "None (Legacy)"
85
+ children: ie
86
86
  }), /* @__PURE__ */ x(v, {
87
- title: ie,
87
+ title: ae,
88
88
  children: /* @__PURE__ */ x(D, { sx: { color: "grey.700" } })
89
89
  })]
90
90
  })
@@ -100,9 +100,9 @@ function A(T) {
100
100
  },
101
101
  children: [/* @__PURE__ */ x(y, {
102
102
  variant: "body1",
103
- children: "Session Owner"
103
+ children: oe
104
104
  }), /* @__PURE__ */ x(v, {
105
- title: ae,
105
+ title: se,
106
106
  children: /* @__PURE__ */ x(D, { sx: { color: "grey.700" } })
107
107
  })]
108
108
  })
@@ -118,15 +118,15 @@ function A(T) {
118
118
  },
119
119
  children: [/* @__PURE__ */ x(y, {
120
120
  variant: "body1",
121
- children: "Source Benefactor"
121
+ children: ce
122
122
  }), /* @__PURE__ */ x(v, {
123
- title: oe,
123
+ title: le,
124
124
  children: /* @__PURE__ */ x(D, { sx: { color: "grey.700" } })
125
125
  })]
126
126
  })
127
127
  })
128
128
  ]
129
- })] }), Qe = /* @__PURE__ */ S(d, { children: [/* @__PURE__ */ S(d, {
129
+ })] }), tt = /* @__PURE__ */ S(d, { children: [/* @__PURE__ */ S(d, {
130
130
  sx: {
131
131
  display: "flex",
132
132
  alignItems: "center",
@@ -142,18 +142,18 @@ function A(T) {
142
142
  }), /* @__PURE__ */ x(i, {
143
143
  inputId: "dlg-set-task-assignee",
144
144
  defaultValue: B,
145
- onChange: (e) => Fe(e ?? void 0),
145
+ onChange: (e) => Re(e ?? void 0),
146
146
  typeFilter: C.ALL
147
- }, E.toString())] }), $e = /* @__PURE__ */ S(_, {
147
+ }, E.toString())] }), nt = /* @__PURE__ */ S(_, {
148
148
  gap: 2,
149
149
  children: [
150
150
  /* @__PURE__ */ x(n, {
151
151
  label: "Task Name",
152
152
  fullWidth: !0,
153
153
  value: R,
154
- onChange: (e) => Ne(e.target.value),
154
+ onChange: (e) => Ie(e.target.value),
155
155
  required: !0,
156
- description: Ce
156
+ description: Ee
157
157
  }),
158
158
  /* @__PURE__ */ x(n, {
159
159
  label: "Instructions",
@@ -161,8 +161,8 @@ function A(T) {
161
161
  multiline: !0,
162
162
  minRows: 3,
163
163
  value: z,
164
- onChange: (e) => Pe(e.target.value),
165
- description: Se
164
+ onChange: (e) => Le(e.target.value),
165
+ description: Te
166
166
  }),
167
167
  /* @__PURE__ */ S(d, {
168
168
  display: "none",
@@ -173,7 +173,7 @@ function A(T) {
173
173
  gap: .5
174
174
  },
175
175
  children: [/* @__PURE__ */ x(h, { children: "Collaborators" }), /* @__PURE__ */ x(v, {
176
- title: se,
176
+ title: ue,
177
177
  children: /* @__PURE__ */ x("div", { children: /* @__PURE__ */ x(D, { sx: { color: "grey.700" } }) })
178
178
  })]
179
179
  }), /* @__PURE__ */ S(_, {
@@ -202,26 +202,26 @@ function A(T) {
202
202
  direction: "row",
203
203
  alignItems: "center",
204
204
  justifyContent: "space-between",
205
- children: [/* @__PURE__ */ x(r, { principalId: e }), /* @__PURE__ */ x(Oe, {
205
+ children: [/* @__PURE__ */ x(r, { principalId: e }), /* @__PURE__ */ x(je, {
206
206
  size: "small",
207
207
  onClick: () => q((t) => t.filter((t) => t !== e)),
208
- children: /* @__PURE__ */ x(Ae, { fontSize: "small" })
208
+ children: /* @__PURE__ */ x(Ne, { fontSize: "small" })
209
209
  })]
210
210
  }, e))]
211
211
  })]
212
212
  })
213
213
  ]
214
- }), et = /* @__PURE__ */ S(_, {
214
+ }), rt = /* @__PURE__ */ S(_, {
215
215
  gap: 2,
216
216
  children: [/* @__PURE__ */ x(c, {
217
217
  label: "Upload Folder ID",
218
218
  value: U,
219
- description: pe,
220
- onChange: Re,
219
+ description: ge,
220
+ onChange: Ve,
221
221
  disabled: N,
222
222
  entityFinderModalProps: {
223
- title: Te,
224
- promptCopy: we,
223
+ title: Oe,
224
+ promptCopy: De,
225
225
  confirmButtonCopy: "Select",
226
226
  configuration: {
227
227
  initialScope: o.ALL_PROJECTS,
@@ -235,12 +235,12 @@ function A(T) {
235
235
  }), /* @__PURE__ */ x(c, {
236
236
  label: "File View ID",
237
237
  value: W,
238
- description: ue,
239
- onChange: ze,
238
+ description: pe,
239
+ onChange: He,
240
240
  disabled: N,
241
241
  entityFinderModalProps: {
242
- title: he,
243
- promptCopy: me,
242
+ title: ve,
243
+ promptCopy: _e,
244
244
  confirmButtonCopy: "Select",
245
245
  configuration: {
246
246
  initialScope: o.ALL_PROJECTS,
@@ -252,15 +252,15 @@ function A(T) {
252
252
  }
253
253
  }
254
254
  })]
255
- }), tt = /* @__PURE__ */ x(c, {
255
+ }), it = /* @__PURE__ */ x(c, {
256
256
  label: "Record Set ID",
257
257
  value: G,
258
- description: ge,
259
- onChange: Be,
258
+ description: ye,
259
+ onChange: Ue,
260
260
  disabled: N,
261
261
  entityFinderModalProps: {
262
- title: be,
263
- promptCopy: ye,
262
+ title: Ce,
263
+ promptCopy: Se,
264
264
  confirmButtonCopy: "Select",
265
265
  configuration: {
266
266
  initialScope: o.ALL_PROJECTS,
@@ -271,28 +271,28 @@ function A(T) {
271
271
  selectableTypes: [w.recordset]
272
272
  }
273
273
  }
274
- }), nt = /* @__PURE__ */ S(_, {
274
+ }), at = /* @__PURE__ */ S(_, {
275
275
  gap: 2,
276
276
  children: [/* @__PURE__ */ x(y, {
277
277
  variant: "body1",
278
- children: xe
278
+ children: we
279
279
  }), /* @__PURE__ */ S(ee, { children: [/* @__PURE__ */ x(s, {
280
- title: fe,
281
- description: de,
280
+ title: he,
281
+ description: me,
282
282
  onClick: () => {
283
283
  L(O), F("TYPE_SPECIFIC_FIELDS");
284
284
  }
285
285
  }), /* @__PURE__ */ x(s, {
286
- title: ve,
287
- description: _e,
286
+ title: xe,
287
+ description: be,
288
288
  onClick: () => {
289
289
  L(k), F("TYPE_SPECIFIC_FIELDS");
290
290
  }
291
291
  })] })]
292
- }), rt = /* @__PURE__ */ S(_, {
292
+ }), ot = /* @__PURE__ */ S(_, {
293
293
  gap: 2,
294
- children: [I === O && et, I === k && tt]
295
- }), it = /* @__PURE__ */ S(_, {
294
+ children: [I === O && rt, I === k && it]
295
+ }), st = /* @__PURE__ */ S(_, {
296
296
  gap: 3,
297
297
  children: [
298
298
  /* @__PURE__ */ S(m, {
@@ -306,7 +306,7 @@ function A(T) {
306
306
  },
307
307
  children: /* @__PURE__ */ x(_, {
308
308
  gap: 2,
309
- children: $e
309
+ children: nt
310
310
  })
311
311
  }), /* @__PURE__ */ x(m, {
312
312
  size: {
@@ -315,7 +315,7 @@ function A(T) {
315
315
  },
316
316
  children: /* @__PURE__ */ S(_, {
317
317
  gap: 3,
318
- children: [Qe, Ze]
318
+ children: [tt, et]
319
319
  })
320
320
  })]
321
321
  }),
@@ -323,7 +323,7 @@ function A(T) {
323
323
  severity: "error",
324
324
  children: "This task has an unrecognized task type and cannot be edited here."
325
325
  }),
326
- Xe && /* @__PURE__ */ x(u, {
326
+ $e && /* @__PURE__ */ x(u, {
327
327
  severity: "warning",
328
328
  children: "Changing the Authorization Mode will clear the active session ID on this task. Any in-progress grid session linked to this task will no longer be associated with it."
329
329
  }),
@@ -332,16 +332,16 @@ function A(T) {
332
332
  children: Z.reason ?? "An error occurred. Please try again."
333
333
  })
334
334
  ]
335
- }), at = N ? le : ce, Q = null;
335
+ }), ct = N ? fe : de, Q = null;
336
336
  switch (P) {
337
337
  case "SELECT_TYPE":
338
- Q = nt;
338
+ Q = at;
339
339
  break;
340
340
  case "TYPE_SPECIFIC_FIELDS":
341
- Q = rt;
341
+ Q = ot;
342
342
  break;
343
343
  case "COMMON_MUTABLE_FIELDS":
344
- Q = it;
344
+ Q = st;
345
345
  break;
346
346
  }
347
347
  let $ = null;
@@ -358,7 +358,7 @@ function A(T) {
358
358
  }), /* @__PURE__ */ x(f, {
359
359
  variant: "contained",
360
360
  onClick: () => F("COMMON_MUTABLE_FIELDS"),
361
- disabled: X || !qe,
361
+ disabled: X || !Xe,
362
362
  children: "Next"
363
363
  })] });
364
364
  break;
@@ -370,7 +370,7 @@ function A(T) {
370
370
  children: "Back"
371
371
  }), /* @__PURE__ */ x(f, {
372
372
  variant: "contained",
373
- onClick: Ye,
373
+ onClick: Qe,
374
374
  disabled: X || I === null,
375
375
  children: "Save"
376
376
  })] });
@@ -378,7 +378,7 @@ function A(T) {
378
378
  }
379
379
  return /* @__PURE__ */ x(t, {
380
380
  open: E,
381
- title: at,
381
+ title: ct,
382
382
  maxWidth: "md",
383
383
  fullWidth: !0,
384
384
  onCancel: A,
@@ -1 +1 @@
1
- {"version":3,"file":"CreateOrUpdateCurationTaskDialog.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { TextField } from '@/components/TextField'\nimport UserOrTeamBadge from '@/components/UserOrTeamBadge/UserOrTeamBadge'\nimport UserSearchBox from '@/components/UserSearchBox/UserSearchBox'\nimport WizardChoiceButton from '@/components/WizardChoiceButton/WizardChoiceButton'\nimport WizardChoiceButtonGroup from '@/components/WizardChoiceButton/WizardChoiceButtonGroup'\nimport {\n useCreateCurationTask,\n useUpdateCurationTask,\n} from '@/synapse-queries/curation/task/useCurationTask'\nimport { EntityTypeGroup } from '@/utils/functions/EntityTypeUtils'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport Close from '@mui/icons-material/Close'\nimport {\n Alert,\n Box,\n Button,\n FormControl,\n FormControlLabel,\n FormLabel,\n Grid,\n IconButton,\n InputLabel,\n Radio,\n RadioGroup,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n CurationTaskProperties,\n EntityType,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum,\n} from '@sage-bionetworks/synapse-client'\nimport { TYPE_FILTER } from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport {\n ASSIGNEE_TOOLTIP,\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_NONE_TOOLTIP,\n AUTH_MODE_SESSION_OWNER_TOOLTIP,\n AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP,\n COLLABORATORS_TOOLTIP,\n CREATE_CURATION_TASK_DIALOG_TITLE,\n EDIT_CURATION_TASK_DIALOG_TITLE,\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_TASK_DESCRIPTION,\n FILE_BASED_TASK_TITLE,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n GENERIC_SAVE_ERROR_MESSAGE,\n RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION,\n RECORD_BASED_TASK_DESCRIPTION,\n RECORD_BASED_TASK_TITLE,\n RECORD_SET_FINDER_PROMPT,\n RECORD_SET_FINDER_TITLE,\n SELECT_TASK_TYPE_DESCRIPTION,\n TASK_INSTRUCTIONS_INPUT_DESCRIPTION,\n TASK_NAME_INPUT_DESCRIPTION,\n UNRECOGNIZED_TASK_TYPE_ERROR,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\n\nexport type CreateOrUpdateCurationTaskDialogProps = {\n open: boolean\n onCancel: () => void\n onSuccess: (task: CurationTask) => void\n projectId: string\n task?: CurationTask\n}\n\nconst FILE_BASED_CONCRETE_TYPE =\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties\nconst RECORD_BASED_CONCRETE_TYPE =\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_RecordBasedMetadataTaskProperties\n\n/** Null represents the \"Legacy\" / unset option for suggestedAuthorizationMode */\ntype AuthorizationModeOption = 'SESSION_OWNER' | 'SOURCE_BENEFACTOR' | 'NONE'\n\nfunction toAuthorizationModeOption(\n value: string | undefined,\n): AuthorizationModeOption {\n if (value === 'SESSION_OWNER' || value === 'SOURCE_BENEFACTOR') return value\n return 'NONE'\n}\n\ntype CreateOrUpdateCurationTaskDialogStep =\n | 'SELECT_TYPE'\n | 'TYPE_SPECIFIC_FIELDS'\n | 'COMMON_MUTABLE_FIELDS'\n\n/**\n * Dialog component that guides a user through creating a new CurationTask or editing an existing one.\n */\nexport default function CreateOrUpdateCurationTaskDialog(\n props: CreateOrUpdateCurationTaskDialogProps,\n) {\n const { open, onCancel, onSuccess, projectId, task } = props\n const isEditMode = task !== undefined\n\n // In create mode: track which step we're on (1 = type selection, 2 = type-specific fields, 3 = common mutable fields)\n const [step, setStep] = useState<CreateOrUpdateCurationTaskDialogStep>(() =>\n task ? 'COMMON_MUTABLE_FIELDS' : 'SELECT_TYPE',\n )\n\n // Derive initial concrete type from the existing task (null in create mode\n // until the user picks a type in step 1)\n const [selectedConcreteType, setSelectedConcreteType] = useState<\n CurationTaskProperties['concreteType'] | null\n >(() => {\n const ct = task?.taskProperties?.concreteType\n if (ct === FILE_BASED_CONCRETE_TYPE || ct === RECORD_BASED_CONCRETE_TYPE)\n return ct\n return null\n })\n\n // Common task fields — lazily initialized from the existing task\n const [dataType, setDataType] = useState(() => task?.dataType ?? '')\n const [instructions, setInstructions] = useState(\n () => task?.instructions ?? '',\n )\n const [assigneePrincipalId, setAssigneePrincipalId] = useState<\n string | undefined\n >(() => task?.assigneePrincipalId)\n\n const initialAuthMode = toAuthorizationModeOption(\n task?.taskProperties?.suggestedAuthorizationMode,\n )\n const [authorizationMode, setAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n // Track the original value to detect unsaved changes\n const [originalAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n\n // FileBasedMetadataTaskProperties fields\n const [uploadFolderId, setUploadFolderId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.uploadFolderId ?? '')\n : ''\n })\n const [fileViewId, setFileViewId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.fileViewId ?? '')\n : ''\n })\n\n // RecordBasedMetadataTaskProperties fields\n const [recordSetId, setRecordSetId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === RECORD_BASED_CONCRETE_TYPE\n ? (tp.recordSetId ?? '')\n : ''\n })\n\n // Shared taskProperties fields\n const [collaboratorPrincipalIds, setCollaboratorPrincipalIds] = useState<\n string[]\n >(() => {\n const ids = task?.taskProperties?.collaboratorPrincipalIds\n return ids ?? []\n })\n const [pendingCollaboratorId, setPendingCollaboratorId] = useState<\n string | null\n >(null)\n\n const {\n mutate: createTask,\n isPending: isCreatePending,\n error: createError,\n } = useCreateCurationTask({\n onSuccess: created => {\n onSuccess(created)\n },\n })\n\n const {\n mutate: updateTask,\n isPending: isUpdatePending,\n error: updateError,\n } = useUpdateCurationTask({\n onSuccess: updated => {\n onSuccess(updated)\n },\n })\n\n const isPending = isCreatePending || isUpdatePending\n const error = createError ?? updateError\n\n const isTaskPropertiesValid =\n (selectedConcreteType === FILE_BASED_CONCRETE_TYPE &&\n uploadFolderId &&\n fileViewId) ||\n (selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordSetId)\n\n function buildTaskPayload(): CurationTask {\n const suggestedAuthorizationMode =\n authorizationMode === 'NONE' ? undefined : authorizationMode\n\n const concreteType = selectedConcreteType!\n let taskProperties: CurationTask['taskProperties']\n const collaborators =\n collaboratorPrincipalIds.length > 0 ? collaboratorPrincipalIds : undefined\n\n if (concreteType === FILE_BASED_CONCRETE_TYPE) {\n taskProperties = {\n concreteType: FILE_BASED_CONCRETE_TYPE,\n uploadFolderId: uploadFolderId || undefined,\n fileViewId: fileViewId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n } else {\n taskProperties = {\n concreteType: RECORD_BASED_CONCRETE_TYPE,\n recordSetId: recordSetId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n }\n\n return {\n // Spread the existing task to carry over server-managed fields (taskId, etc.)\n ...(isEditMode ? task : {}),\n projectId,\n dataType: dataType || undefined,\n instructions: instructions || undefined,\n assigneePrincipalId: assigneePrincipalId || undefined,\n taskProperties,\n }\n }\n\n function handleSave() {\n const payload = buildTaskPayload()\n if (isEditMode) {\n updateTask(payload)\n } else {\n createTask(payload)\n }\n }\n\n const authModeChanged =\n isEditMode && authorizationMode !== originalAuthorizationMode\n\n // ── Authorization Mode radio group (shared between columns) ────────────\n const authModeField = (\n <FormControl>\n <FormLabel>Authorization Mode</FormLabel>\n <RadioGroup\n value={authorizationMode}\n onChange={(_e, v) => setAuthorizationMode(v as AuthorizationModeOption)}\n >\n <FormControlLabel\n value=\"NONE\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">None (Legacy)</Typography>\n <Tooltip title={AUTH_MODE_NONE_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SESSION_OWNER\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">Session Owner</Typography>\n <Tooltip title={AUTH_MODE_SESSION_OWNER_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SOURCE_BENEFACTOR\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">Source Benefactor</Typography>\n <Tooltip title={AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n </RadioGroup>\n </FormControl>\n )\n\n const assigneeField = (\n <Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel htmlFor=\"dlg-set-task-assignee\">Assignee</InputLabel>\n <Tooltip title={ASSIGNEE_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <UserSearchBox\n inputId=\"dlg-set-task-assignee\"\n key={open.toString()}\n defaultValue={assigneePrincipalId}\n onChange={id => setAssigneePrincipalId(id ?? undefined)}\n typeFilter={TYPE_FILTER.ALL}\n />\n </Box>\n )\n\n // ── Form fields (used in both step 3 create and edit mode) ──────────────\n const commonFields = (\n <Stack gap={2}>\n <TextField\n label=\"Task Name\"\n fullWidth\n value={dataType}\n onChange={e => setDataType(e.target.value)}\n required\n description={TASK_NAME_INPUT_DESCRIPTION}\n />\n <TextField\n label=\"Instructions\"\n fullWidth\n multiline\n minRows={3}\n value={instructions}\n onChange={e => setInstructions(e.target.value)}\n description={TASK_INSTRUCTIONS_INPUT_DESCRIPTION}\n />\n {/* TODO: Display the below 'collaborators' once multiple owners are supported */}\n <Box display=\"none\">\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel>Collaborators</InputLabel>\n <Tooltip title={COLLABORATORS_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <Stack gap={1}>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Box flex={1}>\n <UserSearchBox\n value={pendingCollaboratorId}\n onChange={id => setPendingCollaboratorId(id)}\n typeFilter={TYPE_FILTER.ALL}\n placeholder=\"Search for a user or team\"\n />\n </Box>\n <Button\n variant=\"outlined\"\n onClick={() => {\n if (\n pendingCollaboratorId &&\n !collaboratorPrincipalIds.includes(pendingCollaboratorId)\n ) {\n setCollaboratorPrincipalIds(prev => [\n ...prev,\n pendingCollaboratorId,\n ])\n }\n setPendingCollaboratorId(null)\n }}\n disabled={!pendingCollaboratorId}\n >\n Add\n </Button>\n </Stack>\n {collaboratorPrincipalIds.map(id => (\n <Stack\n key={id}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <UserOrTeamBadge principalId={id} />\n <IconButton\n size=\"small\"\n onClick={() =>\n setCollaboratorPrincipalIds(prev =>\n prev.filter(x => x !== id),\n )\n }\n >\n <Close fontSize=\"small\" />\n </IconButton>\n </Stack>\n ))}\n </Stack>\n </Box>\n </Stack>\n )\n\n // ── TaskProperties fields ────────────────────────────────────────────────\n const fileBasedFields = (\n <Stack gap={2}>\n <EntityIdTextField\n label=\"Upload Folder ID\"\n value={uploadFolderId}\n description={FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION}\n onChange={setUploadFolderId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: UPLOAD_FOLDER_FINDER_TITLE,\n promptCopy: UPLOAD_FOLDER_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: EntityTypeGroup.CONTAINER,\n },\n }}\n />\n <EntityIdTextField\n label=\"File View ID\"\n value={fileViewId}\n description={FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION}\n onChange={setFileViewId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: FILE_VIEW_FINDER_TITLE,\n promptCopy: FILE_VIEW_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.entityview],\n },\n }}\n />\n </Stack>\n )\n\n const recordBasedFields = (\n <EntityIdTextField\n label=\"Record Set ID\"\n value={recordSetId}\n description={RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION}\n onChange={setRecordSetId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: RECORD_SET_FINDER_TITLE,\n promptCopy: RECORD_SET_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.recordset],\n },\n }}\n />\n )\n\n // ── Step 1: Type selection ───────────────────────────────────────────────\n const step1Content = (\n <Stack gap={2}>\n <Typography variant=\"body1\">{SELECT_TASK_TYPE_DESCRIPTION}</Typography>\n <WizardChoiceButtonGroup>\n <WizardChoiceButton\n title={FILE_BASED_TASK_TITLE}\n description={FILE_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(FILE_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n <WizardChoiceButton\n title={RECORD_BASED_TASK_TITLE}\n description={RECORD_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(RECORD_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n </WizardChoiceButtonGroup>\n </Stack>\n )\n\n // ── Step 2: Type-specific fields ───────────────────────────────────────────────\n const step2Content = (\n <Stack gap={2}>\n {selectedConcreteType === FILE_BASED_CONCRETE_TYPE && fileBasedFields}\n {selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordBasedFields}\n </Stack>\n )\n\n // ── Step 3 / edit form content ───────────────────────────────────────────\n const step3Content = (\n <Stack gap={3}>\n <Grid container spacing={3} alignItems=\"flex-start\">\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={2}>{commonFields}</Stack>\n </Grid>\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={3}>\n {assigneeField}\n {authModeField}\n </Stack>\n </Grid>\n </Grid>\n\n {isEditMode && selectedConcreteType === null && (\n <Alert severity=\"error\">{UNRECOGNIZED_TASK_TYPE_ERROR}</Alert>\n )}\n {authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {error && (\n <Alert severity=\"error\">\n {error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n )\n\n const title = isEditMode\n ? EDIT_CURATION_TASK_DIALOG_TITLE\n : CREATE_CURATION_TASK_DIALOG_TITLE\n\n let dialogContent = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogContent = step1Content\n break\n case 'TYPE_SPECIFIC_FIELDS':\n dialogContent = step2Content\n break\n case 'COMMON_MUTABLE_FIELDS':\n dialogContent = step3Content\n break\n }\n\n let dialogActions = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogActions = null\n break\n case 'TYPE_SPECIFIC_FIELDS': {\n dialogActions = (\n <>\n <Button\n variant=\"outlined\"\n onClick={() => setStep('SELECT_TYPE')}\n disabled={isPending}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => setStep('COMMON_MUTABLE_FIELDS')}\n disabled={isPending || !isTaskPropertiesValid}\n >\n Next\n </Button>\n </>\n )\n break\n }\n case 'COMMON_MUTABLE_FIELDS': {\n dialogActions = (\n <>\n {!isEditMode && (\n <Button\n variant=\"outlined\"\n onClick={() => setStep('TYPE_SPECIFIC_FIELDS')}\n disabled={isPending}\n >\n Back\n </Button>\n )}\n <Button\n variant=\"contained\"\n onClick={handleSave}\n disabled={isPending || selectedConcreteType === null}\n >\n Save\n </Button>\n </>\n )\n break\n }\n }\n\n return (\n <DialogBase\n open={open}\n title={title}\n maxWidth=\"md\"\n fullWidth\n onCancel={onCancel}\n content={dialogContent}\n actions={\n <Stack direction=\"row\" gap={1} justifyContent=\"flex-end\" width=\"100%\">\n {dialogActions}\n </Stack>\n }\n />\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateOrUpdateCurationTaskDialog.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.tsx"],"sourcesContent":["import { DialogBase } from '@/components/DialogBase'\nimport EntityIdTextField from '@/components/EntityFinder/EntityIdTextField'\nimport { FinderScope } from '@/components/EntityFinder/tree/EntityTree'\nimport { VersionSelectionType } from '@/components/EntityFinder/VersionSelectionType'\nimport { TextField } from '@/components/TextField'\nimport UserOrTeamBadge from '@/components/UserOrTeamBadge/UserOrTeamBadge'\nimport UserSearchBox from '@/components/UserSearchBox/UserSearchBox'\nimport WizardChoiceButton from '@/components/WizardChoiceButton/WizardChoiceButton'\nimport WizardChoiceButtonGroup from '@/components/WizardChoiceButton/WizardChoiceButtonGroup'\nimport {\n useCreateCurationTask,\n useUpdateCurationTask,\n} from '@/synapse-queries/curation/task/useCurationTask'\nimport { EntityTypeGroup } from '@/utils/functions/EntityTypeUtils'\nimport { HelpTwoTone } from '@mui/icons-material'\nimport Close from '@mui/icons-material/Close'\nimport {\n Alert,\n Box,\n Button,\n FormControl,\n FormControlLabel,\n FormLabel,\n Grid,\n IconButton,\n InputLabel,\n Radio,\n RadioGroup,\n Stack,\n Tooltip,\n Typography,\n} from '@mui/material'\nimport {\n CurationTask,\n CurationTaskProperties,\n EntityType,\n FileBasedMetadataTaskPropertiesConcreteTypeEnum,\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum,\n} from '@sage-bionetworks/synapse-client'\nimport { TYPE_FILTER } from '@sage-bionetworks/synapse-types'\nimport { useState } from 'react'\nimport {\n ASSIGNEE_TOOLTIP,\n AUTH_MODE_CHANGED_WARNING,\n AUTH_MODE_NONE_TITLE,\n AUTH_MODE_NONE_TOOLTIP,\n AUTH_MODE_SESSION_OWNER_TITLE,\n AUTH_MODE_SESSION_OWNER_TOOLTIP,\n AUTH_MODE_SOURCE_BENEFACTOR_TITLE,\n AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP,\n COLLABORATORS_TOOLTIP,\n CREATE_CURATION_TASK_DIALOG_TITLE,\n EDIT_CURATION_TASK_DIALOG_TITLE,\n FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION,\n FILE_BASED_TASK_DESCRIPTION,\n FILE_BASED_TASK_TITLE,\n FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION,\n FILE_VIEW_FINDER_PROMPT,\n FILE_VIEW_FINDER_TITLE,\n GENERIC_SAVE_ERROR_MESSAGE,\n RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION,\n RECORD_BASED_TASK_DESCRIPTION,\n RECORD_BASED_TASK_TITLE,\n RECORD_SET_FINDER_PROMPT,\n RECORD_SET_FINDER_TITLE,\n SELECT_TASK_TYPE_DESCRIPTION,\n TASK_INSTRUCTIONS_INPUT_DESCRIPTION,\n TASK_NAME_INPUT_DESCRIPTION,\n UNRECOGNIZED_TASK_TYPE_ERROR,\n UPLOAD_FOLDER_FINDER_PROMPT,\n UPLOAD_FOLDER_FINDER_TITLE,\n} from '../utils/constants'\n\nexport type CreateOrUpdateCurationTaskDialogProps = {\n open: boolean\n onCancel: () => void\n onSuccess: (task: CurationTask) => void\n projectId: string\n task?: CurationTask\n}\n\nconst FILE_BASED_CONCRETE_TYPE =\n FileBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_FileBasedMetadataTaskProperties\nconst RECORD_BASED_CONCRETE_TYPE =\n RecordBasedMetadataTaskPropertiesConcreteTypeEnum.org_sagebionetworks_repo_model_curation_metadata_RecordBasedMetadataTaskProperties\n\n/** Null represents the \"Legacy\" / unset option for suggestedAuthorizationMode */\ntype AuthorizationModeOption = 'SESSION_OWNER' | 'SOURCE_BENEFACTOR' | 'NONE'\n\nfunction toAuthorizationModeOption(\n value: string | undefined,\n): AuthorizationModeOption {\n if (value === 'SESSION_OWNER' || value === 'SOURCE_BENEFACTOR') return value\n return 'NONE'\n}\n\ntype CreateOrUpdateCurationTaskDialogStep =\n | 'SELECT_TYPE'\n | 'TYPE_SPECIFIC_FIELDS'\n | 'COMMON_MUTABLE_FIELDS'\n\n/**\n * Dialog component that guides a user through creating a new CurationTask or editing an existing one.\n */\nexport default function CreateOrUpdateCurationTaskDialog(\n props: CreateOrUpdateCurationTaskDialogProps,\n) {\n const { open, onCancel, onSuccess, projectId, task } = props\n const isEditMode = task !== undefined\n\n // In create mode: track which step we're on (1 = type selection, 2 = type-specific fields, 3 = common mutable fields)\n const [step, setStep] = useState<CreateOrUpdateCurationTaskDialogStep>(() =>\n task ? 'COMMON_MUTABLE_FIELDS' : 'SELECT_TYPE',\n )\n\n // Derive initial concrete type from the existing task (null in create mode\n // until the user picks a type in step 1)\n const [selectedConcreteType, setSelectedConcreteType] = useState<\n CurationTaskProperties['concreteType'] | null\n >(() => {\n const ct = task?.taskProperties?.concreteType\n if (ct === FILE_BASED_CONCRETE_TYPE || ct === RECORD_BASED_CONCRETE_TYPE)\n return ct\n return null\n })\n\n // Common task fields — lazily initialized from the existing task\n const [dataType, setDataType] = useState(() => task?.dataType ?? '')\n const [instructions, setInstructions] = useState(\n () => task?.instructions ?? '',\n )\n const [assigneePrincipalId, setAssigneePrincipalId] = useState<\n string | undefined\n >(() => task?.assigneePrincipalId)\n\n const initialAuthMode = toAuthorizationModeOption(\n task?.taskProperties?.suggestedAuthorizationMode,\n )\n const [authorizationMode, setAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n // Track the original value to detect unsaved changes\n const [originalAuthorizationMode] =\n useState<AuthorizationModeOption>(initialAuthMode)\n\n // FileBasedMetadataTaskProperties fields\n const [uploadFolderId, setUploadFolderId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.uploadFolderId ?? '')\n : ''\n })\n const [fileViewId, setFileViewId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === FILE_BASED_CONCRETE_TYPE\n ? (tp.fileViewId ?? '')\n : ''\n })\n\n // RecordBasedMetadataTaskProperties fields\n const [recordSetId, setRecordSetId] = useState(() => {\n const tp = task?.taskProperties\n return tp?.concreteType === RECORD_BASED_CONCRETE_TYPE\n ? (tp.recordSetId ?? '')\n : ''\n })\n\n // Shared taskProperties fields\n const [collaboratorPrincipalIds, setCollaboratorPrincipalIds] = useState<\n string[]\n >(() => {\n const ids = task?.taskProperties?.collaboratorPrincipalIds\n return ids ?? []\n })\n const [pendingCollaboratorId, setPendingCollaboratorId] = useState<\n string | null\n >(null)\n\n const {\n mutate: createTask,\n isPending: isCreatePending,\n error: createError,\n } = useCreateCurationTask({\n onSuccess: created => {\n onSuccess(created)\n },\n })\n\n const {\n mutate: updateTask,\n isPending: isUpdatePending,\n error: updateError,\n } = useUpdateCurationTask({\n onSuccess: updated => {\n onSuccess(updated)\n },\n })\n\n const isPending = isCreatePending || isUpdatePending\n const error = createError ?? updateError\n\n const isTaskPropertiesValid =\n (selectedConcreteType === FILE_BASED_CONCRETE_TYPE &&\n uploadFolderId &&\n fileViewId) ||\n (selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordSetId)\n\n function buildTaskPayload(): CurationTask {\n const suggestedAuthorizationMode =\n authorizationMode === 'NONE' ? undefined : authorizationMode\n\n const concreteType = selectedConcreteType!\n let taskProperties: CurationTask['taskProperties']\n const collaborators =\n collaboratorPrincipalIds.length > 0 ? collaboratorPrincipalIds : undefined\n\n if (concreteType === FILE_BASED_CONCRETE_TYPE) {\n taskProperties = {\n concreteType: FILE_BASED_CONCRETE_TYPE,\n uploadFolderId: uploadFolderId || undefined,\n fileViewId: fileViewId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n } else {\n taskProperties = {\n concreteType: RECORD_BASED_CONCRETE_TYPE,\n recordSetId: recordSetId || undefined,\n suggestedAuthorizationMode,\n collaboratorPrincipalIds: collaborators,\n }\n }\n\n return {\n // Spread the existing task to carry over server-managed fields (taskId, etc.)\n ...(isEditMode ? task : {}),\n projectId,\n dataType: dataType || undefined,\n instructions: instructions || undefined,\n assigneePrincipalId: assigneePrincipalId || undefined,\n taskProperties,\n }\n }\n\n function handleSave() {\n const payload = buildTaskPayload()\n if (isEditMode) {\n updateTask(payload)\n } else {\n createTask(payload)\n }\n }\n\n const authModeChanged =\n isEditMode && authorizationMode !== originalAuthorizationMode\n\n // ── Authorization Mode radio group (shared between columns) ────────────\n const authModeField = (\n <FormControl>\n <FormLabel>Authorization Mode</FormLabel>\n <RadioGroup\n value={authorizationMode}\n onChange={(_e, v) => setAuthorizationMode(v as AuthorizationModeOption)}\n >\n <FormControlLabel\n value=\"NONE\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">{AUTH_MODE_NONE_TITLE}</Typography>\n <Tooltip title={AUTH_MODE_NONE_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SESSION_OWNER\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_SESSION_OWNER_TITLE}\n </Typography>\n <Tooltip title={AUTH_MODE_SESSION_OWNER_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n <FormControlLabel\n value=\"SOURCE_BENEFACTOR\"\n control={<Radio />}\n label={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <Typography variant=\"body1\">\n {AUTH_MODE_SOURCE_BENEFACTOR_TITLE}\n </Typography>\n <Tooltip title={AUTH_MODE_SOURCE_BENEFACTOR_TOOLTIP}>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </Tooltip>\n </Box>\n }\n />\n </RadioGroup>\n </FormControl>\n )\n\n const assigneeField = (\n <Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel htmlFor=\"dlg-set-task-assignee\">Assignee</InputLabel>\n <Tooltip title={ASSIGNEE_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <UserSearchBox\n inputId=\"dlg-set-task-assignee\"\n key={open.toString()}\n defaultValue={assigneePrincipalId}\n onChange={id => setAssigneePrincipalId(id ?? undefined)}\n typeFilter={TYPE_FILTER.ALL}\n />\n </Box>\n )\n\n // ── Form fields (used in both step 3 create and edit mode) ──────────────\n const commonFields = (\n <Stack gap={2}>\n <TextField\n label=\"Task Name\"\n fullWidth\n value={dataType}\n onChange={e => setDataType(e.target.value)}\n required\n description={TASK_NAME_INPUT_DESCRIPTION}\n />\n <TextField\n label=\"Instructions\"\n fullWidth\n multiline\n minRows={3}\n value={instructions}\n onChange={e => setInstructions(e.target.value)}\n description={TASK_INSTRUCTIONS_INPUT_DESCRIPTION}\n />\n {/* TODO: Display the below 'collaborators' once multiple owners are supported */}\n <Box display=\"none\">\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <InputLabel>Collaborators</InputLabel>\n <Tooltip title={COLLABORATORS_TOOLTIP}>\n <div>\n <HelpTwoTone sx={{ color: 'grey.700' }} />\n </div>\n </Tooltip>\n </Box>\n <Stack gap={1}>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Box flex={1}>\n <UserSearchBox\n value={pendingCollaboratorId}\n onChange={id => setPendingCollaboratorId(id)}\n typeFilter={TYPE_FILTER.ALL}\n placeholder=\"Search for a user or team\"\n />\n </Box>\n <Button\n variant=\"outlined\"\n onClick={() => {\n if (\n pendingCollaboratorId &&\n !collaboratorPrincipalIds.includes(pendingCollaboratorId)\n ) {\n setCollaboratorPrincipalIds(prev => [\n ...prev,\n pendingCollaboratorId,\n ])\n }\n setPendingCollaboratorId(null)\n }}\n disabled={!pendingCollaboratorId}\n >\n Add\n </Button>\n </Stack>\n {collaboratorPrincipalIds.map(id => (\n <Stack\n key={id}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <UserOrTeamBadge principalId={id} />\n <IconButton\n size=\"small\"\n onClick={() =>\n setCollaboratorPrincipalIds(prev =>\n prev.filter(x => x !== id),\n )\n }\n >\n <Close fontSize=\"small\" />\n </IconButton>\n </Stack>\n ))}\n </Stack>\n </Box>\n </Stack>\n )\n\n // ── TaskProperties fields ────────────────────────────────────────────────\n const fileBasedFields = (\n <Stack gap={2}>\n <EntityIdTextField\n label=\"Upload Folder ID\"\n value={uploadFolderId}\n description={FILE_BASED_UPLOAD_FOLDER_INPUT_DESCRIPTION}\n onChange={setUploadFolderId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: UPLOAD_FOLDER_FINDER_TITLE,\n promptCopy: UPLOAD_FOLDER_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: EntityTypeGroup.CONTAINER,\n },\n }}\n />\n <EntityIdTextField\n label=\"File View ID\"\n value={fileViewId}\n description={FILE_BASED_FILE_VIEW_INPUT_DESCRIPTION}\n onChange={setFileViewId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: FILE_VIEW_FINDER_TITLE,\n promptCopy: FILE_VIEW_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.entityview],\n },\n }}\n />\n </Stack>\n )\n\n const recordBasedFields = (\n <EntityIdTextField\n label=\"Record Set ID\"\n value={recordSetId}\n description={RECORD_BASED_RECORD_SET_INPUT_DESCRIPTION}\n onChange={setRecordSetId}\n disabled={isEditMode}\n entityFinderModalProps={{\n title: RECORD_SET_FINDER_TITLE,\n promptCopy: RECORD_SET_FINDER_PROMPT,\n confirmButtonCopy: 'Select',\n configuration: {\n initialScope: FinderScope.ALL_PROJECTS,\n initialContainer: 'root',\n selectMultiple: false,\n treeOnly: false,\n versionSelection: VersionSelectionType.DISALLOWED,\n selectableTypes: [EntityType.recordset],\n },\n }}\n />\n )\n\n // ── Step 1: Type selection ───────────────────────────────────────────────\n const step1Content = (\n <Stack gap={2}>\n <Typography variant=\"body1\">{SELECT_TASK_TYPE_DESCRIPTION}</Typography>\n <WizardChoiceButtonGroup>\n <WizardChoiceButton\n title={FILE_BASED_TASK_TITLE}\n description={FILE_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(FILE_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n <WizardChoiceButton\n title={RECORD_BASED_TASK_TITLE}\n description={RECORD_BASED_TASK_DESCRIPTION}\n onClick={() => {\n setSelectedConcreteType(RECORD_BASED_CONCRETE_TYPE)\n setStep('TYPE_SPECIFIC_FIELDS')\n }}\n />\n </WizardChoiceButtonGroup>\n </Stack>\n )\n\n // ── Step 2: Type-specific fields ───────────────────────────────────────────────\n const step2Content = (\n <Stack gap={2}>\n {selectedConcreteType === FILE_BASED_CONCRETE_TYPE && fileBasedFields}\n {selectedConcreteType === RECORD_BASED_CONCRETE_TYPE && recordBasedFields}\n </Stack>\n )\n\n // ── Step 3 / edit form content ───────────────────────────────────────────\n const step3Content = (\n <Stack gap={3}>\n <Grid container spacing={3} alignItems=\"flex-start\">\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={2}>{commonFields}</Stack>\n </Grid>\n <Grid size={{ xs: 12, sm: 6 }}>\n <Stack gap={3}>\n {assigneeField}\n {authModeField}\n </Stack>\n </Grid>\n </Grid>\n\n {isEditMode && selectedConcreteType === null && (\n <Alert severity=\"error\">{UNRECOGNIZED_TASK_TYPE_ERROR}</Alert>\n )}\n {authModeChanged && (\n <Alert severity=\"warning\">{AUTH_MODE_CHANGED_WARNING}</Alert>\n )}\n {error && (\n <Alert severity=\"error\">\n {error.reason ?? GENERIC_SAVE_ERROR_MESSAGE}\n </Alert>\n )}\n </Stack>\n )\n\n const title = isEditMode\n ? EDIT_CURATION_TASK_DIALOG_TITLE\n : CREATE_CURATION_TASK_DIALOG_TITLE\n\n let dialogContent = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogContent = step1Content\n break\n case 'TYPE_SPECIFIC_FIELDS':\n dialogContent = step2Content\n break\n case 'COMMON_MUTABLE_FIELDS':\n dialogContent = step3Content\n break\n }\n\n let dialogActions = null\n switch (step) {\n case 'SELECT_TYPE':\n dialogActions = null\n break\n case 'TYPE_SPECIFIC_FIELDS': {\n dialogActions = (\n <>\n <Button\n variant=\"outlined\"\n onClick={() => setStep('SELECT_TYPE')}\n disabled={isPending}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => setStep('COMMON_MUTABLE_FIELDS')}\n disabled={isPending || !isTaskPropertiesValid}\n >\n Next\n </Button>\n </>\n )\n break\n }\n case 'COMMON_MUTABLE_FIELDS': {\n dialogActions = (\n <>\n {!isEditMode && (\n <Button\n variant=\"outlined\"\n onClick={() => setStep('TYPE_SPECIFIC_FIELDS')}\n disabled={isPending}\n >\n Back\n </Button>\n )}\n <Button\n variant=\"contained\"\n onClick={handleSave}\n disabled={isPending || selectedConcreteType === null}\n >\n Save\n </Button>\n </>\n )\n break\n }\n }\n\n return (\n <DialogBase\n open={open}\n title={title}\n maxWidth=\"md\"\n fullWidth\n onCancel={onCancel}\n content={dialogContent}\n actions={\n <Stack direction=\"row\" gap={1} justifyContent=\"flex-end\" width=\"100%\">\n {dialogActions}\n </Stack>\n }\n />\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTasksPage.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"names":[],"mappings":"AAYA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAiFtE"}
1
+ {"version":3,"file":"MetadataTasksPage.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"names":[],"mappings":"AAcA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAqFtE"}
@@ -1,66 +1,69 @@
1
1
  import { displayToast as e } from "../../../../components/ToastMessage/ToastMessage.js";
2
2
  import { useGlobalIsEditingContext as t } from "../../../../utils/context/GlobalIsEditingContext.js";
3
3
  import { useGetEntityPermissions as n } from "../../../../synapse-queries/entity/useEntity.js";
4
- import r from "../../../../components/TanStackTable/StyledTanStackTable.js";
5
- import i from "../../../../components/layout/InfiniteTableLayout.js";
6
- import a from "./CreateOrUpdateCurationTaskDialog.js";
7
- import { useMetadataTaskTable as o } from "../hooks/useMetadataTaskTable.js";
8
- import { useState as s } from "react";
9
- import { Button as c, FormControlLabel as l, Stack as u, Switch as d } from "@mui/material";
10
- import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
11
- import { AddCircleTwoTone as h } from "@mui/icons-material";
4
+ import { useGetFeatureFlag as r } from "../../../../synapse-queries/featureflags/useGetFeatureFlag.js";
5
+ import "../../../../synapse-queries/index.js";
6
+ import { FeatureFlagEnum as i } from "../../../../utils/featureflag/FeatureFlags.js";
7
+ import a from "../../../../components/TanStackTable/StyledTanStackTable.js";
8
+ import o from "../../../../components/layout/InfiniteTableLayout.js";
9
+ import s from "./CreateOrUpdateCurationTaskDialog.js";
10
+ import { useMetadataTaskTable as c } from "../hooks/useMetadataTaskTable.js";
11
+ import { useState as l } from "react";
12
+ import { Button as u, FormControlLabel as d, Stack as f, Switch as p } from "@mui/material";
13
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
14
+ import { AddCircleTwoTone as _ } from "@mui/icons-material";
12
15
  //#region src/features/entity/metadata-task/components/MetadataTasksPage.tsx
13
- function g(g) {
14
- let { projectId: _ } = g, [v, y] = s({
15
- projectId: _,
16
+ function v(v) {
17
+ let { projectId: y } = v, [b, x] = l({
18
+ projectId: y,
16
19
  assignedToMe: !1
17
- }), [b, x] = s(!1), { setIsEditing: S } = t(), { data: C } = n(_), { table: w, isLoading: T, hasNextPage: E, fetchNextPage: D, isFetchingNextPage: O } = o({ listCurationTaskRequest: v });
18
- return /* @__PURE__ */ m(u, { children: [/* @__PURE__ */ m(u, {
20
+ }), [S, C] = l(!1), { setIsEditing: w } = t(), { data: T } = n(y), { table: E, isLoading: D, hasNextPage: O, fetchNextPage: k, isFetchingNextPage: A } = c({ listCurationTaskRequest: b }), j = r(i.CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON);
21
+ return /* @__PURE__ */ g(f, { children: [/* @__PURE__ */ g(f, {
19
22
  direction: "row",
20
23
  justifyContent: "flex-end",
21
- children: [/* @__PURE__ */ p(l, {
22
- control: /* @__PURE__ */ p(d, {
23
- checked: !!v.assignedToMe,
24
+ children: [/* @__PURE__ */ h(d, {
25
+ control: /* @__PURE__ */ h(p, {
26
+ checked: !!b.assignedToMe,
24
27
  onChange: (e, t) => {
25
- y((e) => ({
28
+ x((e) => ({
26
29
  ...e,
27
30
  assignedToMe: t
28
31
  }));
29
32
  }
30
33
  }),
31
34
  label: "View only tasks assigned to me"
32
- }), C?.canAddChild && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p(a, {
33
- projectId: _,
34
- open: b,
35
+ }), j && T?.canAddChild && /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(s, {
36
+ projectId: y,
37
+ open: S,
35
38
  onSuccess: () => {
36
- e("Curation task created successfully", "success"), x(!1), S(!1);
39
+ e("Curation task created successfully", "success"), C(!1), w(!1);
37
40
  },
38
41
  onCancel: () => {
39
- x(!1), S(!1);
42
+ C(!1), w(!1);
40
43
  }
41
- }, String(b)), /* @__PURE__ */ p(c, {
44
+ }, String(S)), /* @__PURE__ */ h(u, {
42
45
  variant: "outlined",
43
46
  onClick: () => {
44
- x(!0), S(!0);
47
+ C(!0), w(!0);
45
48
  },
46
- startIcon: /* @__PURE__ */ p(h, {}),
49
+ startIcon: /* @__PURE__ */ h(_, {}),
47
50
  children: "New Task"
48
51
  })] })]
49
- }), /* @__PURE__ */ p(i, {
50
- table: /* @__PURE__ */ p(r, {
51
- table: w,
52
+ }), /* @__PURE__ */ h(o, {
53
+ table: /* @__PURE__ */ h(a, {
54
+ table: E,
52
55
  styledTableContainerProps: { sx: { my: 2 } }
53
56
  }),
54
- isLoading: T,
55
- isEmpty: !T && w.getRowModel().rows.length === 0,
56
- hasNextPage: E,
57
+ isLoading: D,
58
+ isEmpty: !D && E.getRowModel().rows.length === 0,
59
+ hasNextPage: O,
57
60
  onFetchNextPageClicked: () => {
58
- D();
61
+ k();
59
62
  },
60
- isFetchingNextPage: O
63
+ isFetchingNextPage: A
61
64
  })] });
62
65
  }
63
66
  //#endregion
64
- export { g as default };
67
+ export { v as default };
65
68
 
66
69
  //# sourceMappingURL=MetadataTasksPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTasksPage.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport StyledTanStackTable from '@/components/TanStackTable/StyledTanStackTable'\nimport { useMetadataTaskTable } from '@/features/entity/metadata-task/hooks/useMetadataTaskTable'\nimport { Button, FormControlLabel, Stack, Switch } from '@mui/material'\nimport { useState } from 'react'\nimport { ListCurationTaskRequest } from '@sage-bionetworks/synapse-client'\nimport CreateOrUpdateCurationTaskDialog from './CreateOrUpdateCurationTaskDialog'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { useGlobalIsEditingContext } from '@/utils/context/GlobalIsEditingContext'\n\nexport type MetadataTaskTableProps = {\n projectId: string\n}\n\n/**\n * Displays a list of metadata curation tasks for a particular project, with actions that can be performed on each task.\n * @param props\n * @constructor\n */\nexport default function MetadataTasksPage(props: MetadataTaskTableProps) {\n const { projectId } = props\n const [listCurationTaskRequest, setListCurationTaskRequest] =\n useState<ListCurationTaskRequest>({\n projectId,\n assignedToMe: false,\n })\n\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const { setIsEditing } = useGlobalIsEditingContext()\n\n const { data: permissions } = useGetEntityPermissions(projectId)\n\n const { table, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useMetadataTaskTable({\n listCurationTaskRequest,\n })\n\n return (\n <Stack>\n <Stack direction=\"row\" justifyContent=\"flex-end\">\n <FormControlLabel\n control={\n <Switch\n checked={!!listCurationTaskRequest.assignedToMe}\n onChange={(_e, checked) => {\n setListCurationTaskRequest(prev => ({\n ...prev,\n assignedToMe: checked,\n }))\n }}\n />\n }\n label=\"View only tasks assigned to me\"\n />\n {permissions?.canAddChild && (\n <>\n <CreateOrUpdateCurationTaskDialog\n key={String(isDialogOpen)}\n projectId={projectId}\n open={isDialogOpen}\n onSuccess={() => {\n displayToast('Curation task created successfully', 'success')\n setIsDialogOpen(false)\n setIsEditing(false)\n }}\n onCancel={() => {\n setIsDialogOpen(false)\n setIsEditing(false)\n }}\n />\n <Button\n variant=\"outlined\"\n onClick={() => {\n setIsDialogOpen(true)\n setIsEditing(true)\n }}\n startIcon={<AddCircleTwoTone />}\n >\n New Task\n </Button>\n </>\n )}\n </Stack>\n <InfiniteTableLayout\n table={\n <StyledTanStackTable\n table={table}\n styledTableContainerProps={{ sx: { my: 2 } }}\n />\n }\n isLoading={isLoading}\n isEmpty={!isLoading && table.getRowModel().rows.length === 0}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAwB,EAAkB,GAA+B;CACvE,IAAM,EAAE,iBAAc,GAChB,CAAC,GAAyB,KAC9B,EAAkC;EAChC;EACA,cAAc;EACf,CAAC,EAEE,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,EAAE,oBAAiB,GAA2B,EAE9C,EAAE,MAAM,MAAgB,EAAwB,EAAU,EAE1D,EAAE,UAAO,cAAW,gBAAa,kBAAe,0BACpD,EAAqB,EACnB,4BACD,CAAC;AAEJ,QACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EAAO,WAAU;EAAM,gBAAe;YAAtC,CACE,kBAAC,GAAD;GACE,SACE,kBAAC,GAAD;IACE,SAAS,CAAC,CAAC,EAAwB;IACnC,WAAW,GAAI,MAAY;AACzB,QAA2B,OAAS;MAClC,GAAG;MACH,cAAc;MACf,EAAE;;IAEL,CAAA;GAEJ,OAAM;GACN,CAAA,EACD,GAAa,eACZ,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GAEa;GACX,MAAM;GACN,iBAAiB;AAGf,IAFA,EAAa,sCAAsC,UAAU,EAC7D,EAAgB,GAAM,EACtB,EAAa,GAAM;;GAErB,gBAAgB;AAEd,IADA,EAAgB,GAAM,EACtB,EAAa,GAAM;;GAErB,EAZK,OAAO,EAAa,CAYzB,EACF,kBAAC,GAAD;GACE,SAAQ;GACR,eAAe;AAEb,IADA,EAAgB,GAAK,EACrB,EAAa,GAAK;;GAEpB,WAAW,kBAAC,GAAD,EAAoB,CAAA;aAChC;GAEQ,CAAA,CACR,EAAA,CAAA,CAEC;KACR,kBAAC,GAAD;EACE,OACE,kBAAC,GAAD;GACS;GACP,2BAA2B,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE;GAC5C,CAAA;EAEO;EACX,SAAS,CAAC,KAAa,EAAM,aAAa,CAAC,KAAK,WAAW;EAC9C;EACb,8BAA8B;AAC5B,MAAe;;EAEG;EACpB,CAAA,CACI,EAAA,CAAA"}
1
+ {"version":3,"file":"MetadataTasksPage.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport StyledTanStackTable from '@/components/TanStackTable/StyledTanStackTable'\nimport { useMetadataTaskTable } from '@/features/entity/metadata-task/hooks/useMetadataTaskTable'\nimport { useGetFeatureFlag } from '@/synapse-queries/index'\nimport { Button, FormControlLabel, Stack, Switch } from '@mui/material'\nimport { useState } from 'react'\nimport { ListCurationTaskRequest } from '@sage-bionetworks/synapse-client'\nimport CreateOrUpdateCurationTaskDialog from './CreateOrUpdateCurationTaskDialog'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { useGlobalIsEditingContext } from '@/utils/context/GlobalIsEditingContext'\nimport { FeatureFlagEnum } from '@/utils/featureflag/FeatureFlags'\n\nexport type MetadataTaskTableProps = {\n projectId: string\n}\n\n/**\n * Displays a list of metadata curation tasks for a particular project, with actions that can be performed on each task.\n * @param props\n * @constructor\n */\nexport default function MetadataTasksPage(props: MetadataTaskTableProps) {\n const { projectId } = props\n const [listCurationTaskRequest, setListCurationTaskRequest] =\n useState<ListCurationTaskRequest>({\n projectId,\n assignedToMe: false,\n })\n\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const { setIsEditing } = useGlobalIsEditingContext()\n\n const { data: permissions } = useGetEntityPermissions(projectId)\n\n const { table, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useMetadataTaskTable({\n listCurationTaskRequest,\n })\n\n const showNewTaskButton = useGetFeatureFlag(\n FeatureFlagEnum.CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON,\n )\n\n return (\n <Stack>\n <Stack direction=\"row\" justifyContent=\"flex-end\">\n <FormControlLabel\n control={\n <Switch\n checked={!!listCurationTaskRequest.assignedToMe}\n onChange={(_e, checked) => {\n setListCurationTaskRequest(prev => ({\n ...prev,\n assignedToMe: checked,\n }))\n }}\n />\n }\n label=\"View only tasks assigned to me\"\n />\n {showNewTaskButton && permissions?.canAddChild && (\n <>\n <CreateOrUpdateCurationTaskDialog\n key={String(isDialogOpen)}\n projectId={projectId}\n open={isDialogOpen}\n onSuccess={() => {\n displayToast('Curation task created successfully', 'success')\n setIsDialogOpen(false)\n setIsEditing(false)\n }}\n onCancel={() => {\n setIsDialogOpen(false)\n setIsEditing(false)\n }}\n />\n <Button\n variant=\"outlined\"\n onClick={() => {\n setIsDialogOpen(true)\n setIsEditing(true)\n }}\n startIcon={<AddCircleTwoTone />}\n >\n New Task\n </Button>\n </>\n )}\n </Stack>\n <InfiniteTableLayout\n table={\n <StyledTanStackTable\n table={table}\n styledTableContainerProps={{ sx: { my: 2 } }}\n />\n }\n isLoading={isLoading}\n isEmpty={!isLoading && table.getRowModel().rows.length === 0}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => {\n fetchNextPage()\n }}\n isFetchingNextPage={isFetchingNextPage}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAuBA,SAAwB,EAAkB,GAA+B;CACvE,IAAM,EAAE,iBAAc,GAChB,CAAC,GAAyB,KAC9B,EAAkC;EAChC;EACA,cAAc;EACf,CAAC,EAEE,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,EAAE,oBAAiB,GAA2B,EAE9C,EAAE,MAAM,MAAgB,EAAwB,EAAU,EAE1D,EAAE,UAAO,cAAW,gBAAa,kBAAe,0BACpD,EAAqB,EACnB,4BACD,CAAC,EAEE,IAAoB,EACxB,EAAgB,wCACjB;AAED,QACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EAAO,WAAU;EAAM,gBAAe;YAAtC,CACE,kBAAC,GAAD;GACE,SACE,kBAAC,GAAD;IACE,SAAS,CAAC,CAAC,EAAwB;IACnC,WAAW,GAAI,MAAY;AACzB,QAA2B,OAAS;MAClC,GAAG;MACH,cAAc;MACf,EAAE;;IAEL,CAAA;GAEJ,OAAM;GACN,CAAA,EACD,KAAqB,GAAa,eACjC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GAEa;GACX,MAAM;GACN,iBAAiB;AAGf,IAFA,EAAa,sCAAsC,UAAU,EAC7D,EAAgB,GAAM,EACtB,EAAa,GAAM;;GAErB,gBAAgB;AAEd,IADA,EAAgB,GAAM,EACtB,EAAa,GAAM;;GAErB,EAZK,OAAO,EAAa,CAYzB,EACF,kBAAC,GAAD;GACE,SAAQ;GACR,eAAe;AAEb,IADA,EAAgB,GAAK,EACrB,EAAa,GAAK;;GAEpB,WAAW,kBAAC,GAAD,EAAoB,CAAA;aAChC;GAEQ,CAAA,CACR,EAAA,CAAA,CAEC;KACR,kBAAC,GAAD;EACE,OACE,kBAAC,GAAD;GACS;GACP,2BAA2B,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE;GAC5C,CAAA;EAEO;EACX,SAAS,CAAC,KAAa,EAAM,aAAa,CAAC,KAAK,WAAW;EAC9C;EACb,8BAA8B;AAC5B,MAAe;;EAEG;EACpB,CAAA,CACI,EAAA,CAAA"}