synapse-react-client 4.0.5 → 4.0.6

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 (115) 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 +47 -41
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/assets/DefaultColorfulPortalCardBackground.svg +50 -12
  6. package/dist/assets/DefaultColorfulPortalCardBackground.svg.js +4 -4
  7. package/dist/assets/DefaultColorfulPortalCardBackground.svg.js.map +1 -1
  8. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts +2 -1
  9. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts.map +1 -1
  10. package/dist/components/CreateProjectModal/CreateProjectModal.js +35 -30
  11. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  12. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  13. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  14. package/dist/components/DataGrid/DataGridWebSocket.js +47 -37
  15. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  16. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  17. package/dist/components/DataGrid/SynapseGrid.js +193 -152
  18. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  19. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +6 -1
  20. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  21. package/dist/components/DataGrid/useDataGridWebsocket.js +78 -69
  22. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  23. package/dist/components/SynapseTable/SynapseTable.d.ts +6 -1
  24. package/dist/components/SynapseTable/SynapseTable.d.ts.map +1 -1
  25. package/dist/components/SynapseTable/SynapseTable.js +123 -93
  26. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  27. package/dist/components/TextField/TextField.css +1 -0
  28. package/dist/components/TextField/TextField.d.ts +1 -1
  29. package/dist/components/TextField/TextField.d.ts.map +1 -1
  30. package/dist/components/TextField/TextField.js +30 -28
  31. package/dist/components/TextField/TextField.js.map +1 -1
  32. package/dist/components/TextField/TextField.module.scss +18 -0
  33. package/dist/components/TextField/TextField.module.scss.js +12 -0
  34. package/dist/components/TextField/TextField.module.scss.js.map +1 -0
  35. package/dist/components/styled/HoverPopover.css +1 -1
  36. package/dist/components/styled/HoverPopover.d.ts.map +1 -1
  37. package/dist/components/styled/HoverPopover.js +6 -5
  38. package/dist/components/styled/HoverPopover.js.map +1 -1
  39. package/dist/components/styled/HoverPopover.module.scss +2 -1
  40. package/dist/components/styled/HoverPopover.module.scss.js +1 -1
  41. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +5 -2
  42. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  43. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +180 -36
  44. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  45. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  46. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +52 -27
  47. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  48. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts +7 -0
  49. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -0
  50. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +323 -0
  51. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -0
  52. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.d.ts +7 -1
  53. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.d.ts.map +1 -1
  54. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js +7 -7
  55. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  56. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts +9 -5
  57. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts.map +1 -1
  58. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js +79 -16
  59. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  60. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.d.ts +12 -0
  61. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.d.ts.map +1 -0
  62. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js +20 -0
  63. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -0
  64. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts +3 -3
  65. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  66. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +54 -41
  67. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  68. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts +2 -2
  69. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts.map +1 -1
  70. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js +11 -4
  71. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  72. package/dist/features/entity/metadata-task/utils/taskHasAssignee.d.ts +3 -0
  73. package/dist/features/entity/metadata-task/utils/taskHasAssignee.d.ts.map +1 -0
  74. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js +7 -0
  75. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -0
  76. package/dist/mocks/curation/mockCurationTask.d.ts +10 -0
  77. package/dist/mocks/curation/mockCurationTask.d.ts.map +1 -0
  78. package/dist/mocks/curation/mockCurationTask.js +24 -0
  79. package/dist/mocks/curation/mockCurationTask.js.map +1 -0
  80. package/dist/synapse-queries/KeyFactory.d.ts +8 -3
  81. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  82. package/dist/synapse-queries/KeyFactory.js +22 -7
  83. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  84. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +6 -3
  85. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  86. package/dist/synapse-queries/curation/task/useCurationTask.js +62 -18
  87. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  88. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  89. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  90. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  91. package/dist/synapse-queries/grid/useGridSession.d.ts +17 -2
  92. package/dist/synapse-queries/grid/useGridSession.d.ts.map +1 -1
  93. package/dist/synapse-queries/grid/useGridSession.js +63 -30
  94. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  95. package/dist/synapse-queries/index.js +103 -99
  96. package/dist/synapse-queries/team/index.js +18 -15
  97. package/dist/synapse-queries/team/useTeamMembers.d.ts +34 -0
  98. package/dist/synapse-queries/team/useTeamMembers.d.ts.map +1 -1
  99. package/dist/synapse-queries/team/useTeamMembers.js +110 -69
  100. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  101. package/dist/synapse-queries/types.d.ts +13 -0
  102. package/dist/synapse-queries/types.d.ts.map +1 -0
  103. package/dist/synapse-queries/types.js +2 -0
  104. package/dist/synapse-queries/types.js.map +1 -0
  105. package/dist/synapse-queries/user/index.js +12 -11
  106. package/dist/synapse-queries/user/useUserGroupHeader.d.ts +5 -0
  107. package/dist/synapse-queries/user/useUserGroupHeader.d.ts.map +1 -1
  108. package/dist/synapse-queries/user/useUserGroupHeader.js +28 -21
  109. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  110. package/dist/tsconfig.build.tsbuildinfo +1 -1
  111. package/dist/utils/hooks/useOverlay.d.ts +2 -2
  112. package/dist/utils/hooks/useOverlay.d.ts.map +1 -1
  113. package/dist/utils/hooks/useOverlay.js +41 -41
  114. package/dist/utils/hooks/useOverlay.js.map +1 -1
  115. package/package.json +4 -4
@@ -1,11 +1,14 @@
1
- import { CurationTask } from '@sage-bionetworks/synapse-client';
1
+ import { TaskBundle } from '@sage-bionetworks/synapse-client';
2
+ export declare const OPEN_CURATOR_ERROR_TITLE = "An error occurred while trying to open Curator";
3
+ export declare const OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE = "You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.";
4
+ export declare const NO_TASK_ASSIGNEE_WARNING_DIALOG_TITLE = "Task is Unassigned";
2
5
  /**
3
6
  * Handles rendering the 'Actions' cell in the Metadata Task table, which provides buttons for the user
4
7
  * to accomplish the actions they can take on a Metadata Task, such as opening a data grid for the entity referenced
5
8
  * by the task.
6
9
  */
7
10
  export default function MetadataTaskTableActionCell(props: {
8
- curationTask: CurationTask;
11
+ taskBundle: TaskBundle;
9
12
  canEdit: boolean;
10
13
  }): import("react/jsx-runtime").JSX.Element;
11
14
  //# sourceMappingURL=MetadataTaskTableActionCell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTaskTableActionCell.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTaskTableActionCell.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAO/D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,KAAK,EAAE;IACzD,YAAY,EAAE,YAAY,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;CACjB,2CAuEA"}
1
+ {"version":3,"file":"MetadataTaskTableActionCell.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTaskTableActionCell.tsx"],"names":[],"mappings":"AAaA,OAAO,EAGL,UAAU,EACX,MAAM,kCAAkC,CAAA;AAOzC,eAAO,MAAM,wBAAwB,mDACa,CAAA;AAClD,eAAO,MAAM,uCAAuC,gNAC2J,CAAA;AAE/M,eAAO,MAAM,qCAAqC,uBAAuB,CAAA;AAOzE;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,2BAA2B,CAAC,KAAK,EAAE;IACzD,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,2CAsOA"}
@@ -1,44 +1,188 @@
1
- import { jsx as o, Fragment as u } from "react/jsx-runtime";
2
- import { getLinkToGridSession as g } from "../../../../utils/functions/getSynapseWebClientLink.js";
3
- import { StickyNote2Outlined as k } from "@mui/icons-material";
4
- import { Tooltip as f, Button as T } from "@mui/material";
5
- import { useCallback as G } from "react";
6
- import h from "../hooks/useGridSessionForCurationTask.js";
7
- import { getGridSourceIdForTask as C } from "../utils/getGridSourceIdForTask.js";
8
- import { useGetEntityPermissions as y } from "../../../../synapse-queries/entity/useEntity.js";
9
- import { displayToast as w } from "../../../../components/ToastMessage/ToastMessage.js";
10
- function P(d) {
11
- const {
12
- curationTask: t
13
- // canEdit
14
- } = d, { mutateAsync: i, isPending: n } = h(), e = C(t), { data: a, isLoading: s } = y(e), c = n || s || !a?.canView, l = a?.canView ? "Open Curator to edit metadata" : "You must have READ access to " + e + " to view the Working Copy", p = G(async () => {
15
- try {
16
- const r = await i({ curationTask: t }), m = g(
17
- r.sessionId,
18
- t.taskId
19
- );
20
- window.open(m, "_blank", "noopener");
21
- } catch (r) {
22
- console.error("Error opening Curator for curation task", r), w(r.message, "danger", {
23
- title: "An error occurred while trying to open Curator"
24
- });
1
+ import { jsx as e, jsxs as s, Fragment as u } from "react/jsx-runtime";
2
+ import { ConfirmationDialog as A } from "../../../../components/ConfirmationDialog/ConfirmationDialog.js";
3
+ import { displayToast as O } from "../../../../components/ToastMessage/ToastMessage.js";
4
+ import E from "../../../../components/UserOrTeamBadge/UserOrTeamBadge.js";
5
+ import H from "../hooks/useGridSessionForCurationTask_legacy.js";
6
+ import "../../../../synapse-client/SynapseClient.js";
7
+ import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
8
+ import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
9
+ import "@sage-bionetworks/synapse-client/util/SynapseClientError";
10
+ import { FeatureFlagEnum as K } from "@sage-bionetworks/synapse-types";
11
+ import "../../../../utils/functions/EntityTypeUtils.js";
12
+ import "../../../../utils/SynapseConstants.js";
13
+ import "lodash-es";
14
+ import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
15
+ import "@tanstack/react-query";
16
+ import "../../../../utils/PermissionLevelToAccessType.js";
17
+ import { useState as P, useCallback as G } from "react";
18
+ import "../../../../utils/context/SynapseContext.js";
19
+ import "use-deep-compare-effect";
20
+ import { Tooltip as V, Button as z, Typography as _ } from "@mui/material";
21
+ import "../../../../utils/hooks/useCookiePreferences.js";
22
+ import "../../../../utils/hooks/useSourceAppConfigs.js";
23
+ import "universal-cookie";
24
+ import "../../../../utils/AppUtils/session/ApplicationSessionContext.js";
25
+ import "../../../../utils/context/FullContextProvider.js";
26
+ import "../../../../utils/context/DocumentMetadataContext.js";
27
+ import '../../../../style/components/_spinner.css';/* empty css */
28
+ import "@tanstack/query-core";
29
+ import "lodash-es/isEmpty";
30
+ import "lodash-es/isEqual";
31
+ import "lodash-es/xorWith";
32
+ import "react-router";
33
+ import { SynapseClientError as Z } from "@sage-bionetworks/synapse-client";
34
+ import "../../../../utils/types/IsType.js";
35
+ import { useGetEntityPermissions as q } from "../../../../synapse-queries/entity/useEntity.js";
36
+ import { useGetFeatureFlag as J } from "../../../../synapse-queries/featureflags/useGetFeatureFlag.js";
37
+ import { useGetIsPrincipalIdUserOrMemberOfTeam as Q } from "../../../../synapse-queries/team/useTeamMembers.js";
38
+ import { useGetCurrentUserProfile as X } from "../../../../synapse-queries/user/useUserBundle.js";
39
+ import { getLinkToGridSession as $ } from "../../../../utils/functions/getSynapseWebClientLink.js";
40
+ import { StickyNote2Outlined as ee } from "@mui/icons-material";
41
+ import oe from "../hooks/useGridSessionForCurationTask.js";
42
+ import { getGridSourceIdForTask as ie } from "../utils/getGridSourceIdForTask.js";
43
+ import se from "../utils/taskHasAssignee.js";
44
+ const b = "An error occurred while trying to open Curator", te = "You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.", ne = "Task is Unassigned";
45
+ function N(r, t) {
46
+ const a = $(r, t);
47
+ window.open(a, "_blank", "noopener");
48
+ }
49
+ function qe(r) {
50
+ const { taskBundle: t, canEdit: a } = r, o = t.task, d = J(
51
+ K.CURATOR_DISABLE_OPEN_FOR_UNASSIGNED_TASKS
52
+ ), [R, c] = P(!1), [
53
+ v,
54
+ p
55
+ ] = P(!1), { data: h } = X(), { data: U } = Q(
56
+ h?.ownerId,
57
+ o.assigneePrincipalId,
58
+ { enabled: !!h?.ownerId && !!o.assigneePrincipalId }
59
+ ), {
60
+ data: n,
61
+ mutateAsync: f,
62
+ isPending: D
63
+ } = oe(), {
64
+ mutateAsync: S,
65
+ isPending: F
66
+ } = H(), k = D || F, y = ie(o), {
67
+ data: T,
68
+ isLoading: L
69
+ } = q(y), w = L, l = se(o), C = a || U || !l, I = T?.canView && (C || !d), W = k || w || !I, B = I ? "Open Curator to edit metadata" : !C && d ? "You must be assigned to this task to open it" : T?.canView ? "You must have READ access to " + y + " to view the Working Copy" : "You do not have permission to view the Working Copy", m = G(
70
+ async (j = !1) => {
71
+ let g;
72
+ try {
73
+ if (j && !d)
74
+ g = await S({
75
+ curationTask: o
76
+ });
77
+ else {
78
+ const i = await f(t);
79
+ if (g = i.gridSession, !i.gridSessionOwnerMatchesTaskAssignee) {
80
+ p(!0);
81
+ return;
82
+ }
83
+ }
84
+ N(g.sessionId, o.taskId);
85
+ } catch (i) {
86
+ i instanceof Z && i.status === 403 ? (console.error(i), O(te, "danger", {
87
+ title: b
88
+ })) : (console.error("Error opening Curator for curation task", i), O(i.message, "danger", {
89
+ title: b
90
+ }));
91
+ }
92
+ },
93
+ [
94
+ o,
95
+ f,
96
+ S,
97
+ t
98
+ ]
99
+ ), M = G(() => {
100
+ l ? m() : c(!0);
101
+ }, [m, l]), x = /* @__PURE__ */ e(
102
+ A,
103
+ {
104
+ open: R,
105
+ title: ne,
106
+ content: /* @__PURE__ */ s(u, { children: [
107
+ /* @__PURE__ */ e(_, { variant: "body1", gutterBottom: !0, children: "This task is currently unassigned. A Curator session created using an unassigned task will be private to your account. If the task is assigned later, a new Curator session will be created and you may be unable to recover any unsaved changes." }),
108
+ /* @__PURE__ */ e(_, { variant: "body1", children: "Do you want to proceed and open Curator using this unassigned task?" })
109
+ ] }),
110
+ confirmButtonProps: { children: "Proceed" },
111
+ onConfirm: () => {
112
+ m(!0), c(!1);
113
+ },
114
+ onCancel: () => {
115
+ c(!1);
116
+ }
25
117
  }
26
- }, [t, i]);
27
- return /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o(f, { title: l, children: /* @__PURE__ */ o("span", { children: /* @__PURE__ */ o(
28
- T,
118
+ ), Y = /* @__PURE__ */ e(
119
+ A,
29
120
  {
30
- size: "small",
31
- startIcon: /* @__PURE__ */ o(k, {}),
32
- loading: n || s,
33
- disabled: c,
34
- onClick: () => {
35
- p();
121
+ open: v,
122
+ title: "Task assignee changed",
123
+ content: /* @__PURE__ */ s(u, { children: [
124
+ /* @__PURE__ */ s("p", { children: [
125
+ "The existing Curator session for the task was created with a different owner",
126
+ " ",
127
+ /* @__PURE__ */ s("span", { style: { whiteSpace: "nowrap" }, children: [
128
+ "(",
129
+ n?.gridSession.ownerPrincipalId && /* @__PURE__ */ e(
130
+ E,
131
+ {
132
+ principalId: n.gridSession.ownerPrincipalId
133
+ }
134
+ ),
135
+ ")"
136
+ ] }),
137
+ " ",
138
+ "than the current assignee",
139
+ " ",
140
+ /* @__PURE__ */ s("span", { style: { whiteSpace: "nowrap" }, children: [
141
+ "(",
142
+ o.assigneePrincipalId ? /* @__PURE__ */ e(
143
+ E,
144
+ {
145
+ principalId: o.assigneePrincipalId
146
+ }
147
+ ) : "None",
148
+ ")"
149
+ ] }),
150
+ ". Collaborators may not have access to this session."
151
+ ] }),
152
+ /* @__PURE__ */ e("p", { children: "Are you sure you want to open Curator?" })
153
+ ] }),
154
+ confirmButtonProps: { children: "Open Curator" },
155
+ onConfirm: () => {
156
+ n?.gridSession && (N(
157
+ n.gridSession.sessionId,
158
+ o.taskId
159
+ ), p(!1));
36
160
  },
37
- children: "Open Curator"
161
+ onCancel: () => {
162
+ p(!1);
163
+ }
38
164
  }
39
- ) }) }) });
165
+ );
166
+ return /* @__PURE__ */ s(u, { children: [
167
+ x,
168
+ Y,
169
+ /* @__PURE__ */ e(V, { title: B, children: /* @__PURE__ */ e("span", { children: /* @__PURE__ */ e(
170
+ z,
171
+ {
172
+ size: "small",
173
+ startIcon: /* @__PURE__ */ e(ee, {}),
174
+ loading: k || w,
175
+ disabled: W,
176
+ onClick: M,
177
+ children: "Open Curator"
178
+ }
179
+ ) }) })
180
+ ] });
40
181
  }
41
182
  export {
42
- P as default
183
+ ne as NO_TASK_ASSIGNEE_WARNING_DIALOG_TITLE,
184
+ b as OPEN_CURATOR_ERROR_TITLE,
185
+ te as OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE,
186
+ qe as default
43
187
  };
44
188
  //# sourceMappingURL=MetadataTaskTableActionCell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTaskTableActionCell.js","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTaskTableActionCell.tsx"],"sourcesContent":["import { getLinkToGridSession } from '@/utils/functions/getSynapseWebClientLink'\nimport { StickyNote2Outlined } from '@mui/icons-material'\nimport { Button, Tooltip } from '@mui/material'\nimport { CurationTask } from '@sage-bionetworks/synapse-client'\nimport { useCallback } from 'react'\nimport useGridSessionForCurationTask from '../hooks/useGridSessionForCurationTask'\nimport { getGridSourceIdForTask } from '../utils/getGridSourceIdForTask'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\n\n/**\n * Handles rendering the 'Actions' cell in the Metadata Task table, which provides buttons for the user\n * to accomplish the actions they can take on a Metadata Task, such as opening a data grid for the entity referenced\n * by the task.\n */\nexport default function MetadataTaskTableActionCell(props: {\n curationTask: CurationTask\n canEdit: boolean\n}) {\n const {\n curationTask,\n // canEdit\n } = props\n\n const { mutateAsync: getGridSessionForTask, isPending: openGridIsPending } =\n useGridSessionForCurationTask()\n\n const gridSourceId = getGridSourceIdForTask(curationTask)\n const { data, isLoading } = useGetEntityPermissions(gridSourceId)\n const isOpenDataGridDisabled =\n openGridIsPending || isLoading || !data?.canView\n const toolTipTitle = data?.canView\n ? 'Open Curator to edit metadata'\n : 'You must have READ access to ' +\n gridSourceId +\n ' to view the Working Copy'\n\n const handleOpenDataGrid = useCallback(async () => {\n try {\n const gridSession = await getGridSessionForTask({ curationTask })\n const gridUrl = getLinkToGridSession(\n gridSession.sessionId!,\n curationTask.taskId,\n )\n\n // Open the Grid in a new tab\n window.open(gridUrl, '_blank', 'noopener')\n } catch (error) {\n console.error('Error opening Curator for curation task', error)\n displayToast(error.message, 'danger', {\n title: 'An error occurred while trying to open Curator',\n })\n }\n }, [curationTask, getGridSessionForTask])\n\n // TODO: SWC-7480\n // const editTaskButton = canEdit ? <></> : null\n\n // TODO: SWC-7484\n // const isFileBasedTask = instanceOfFileBasedMetadataTaskProperties(\n // curationTask.taskProperties!,\n // )\n // const uploadButton = isFileBasedTask ? <></> : null\n\n const openDataGridButton = (\n <Tooltip title={toolTipTitle}>\n <span>\n <Button\n size={'small'}\n startIcon={<StickyNote2Outlined />}\n loading={openGridIsPending || isLoading}\n disabled={isOpenDataGridDisabled}\n onClick={() => {\n void handleOpenDataGrid()\n }}\n >\n Open Curator\n </Button>\n </span>\n </Tooltip>\n )\n\n return (\n <>\n {/*{editTaskButton}*/}\n {openDataGridButton}\n {/*{uploadButton}*/}\n </>\n )\n}\n"],"names":["MetadataTaskTableActionCell","props","curationTask","getGridSessionForTask","openGridIsPending","useGridSessionForCurationTask","gridSourceId","getGridSourceIdForTask","data","isLoading","useGetEntityPermissions","isOpenDataGridDisabled","toolTipTitle","handleOpenDataGrid","useCallback","gridSession","gridUrl","getLinkToGridSession","error","displayToast","jsx","Tooltip","Button","StickyNote2Outlined"],"mappings":";;;;;;;;;AAeA,SAAwBA,EAA4BC,GAGjD;AACD,QAAM;AAAA,IACJ,cAAAC;AAAA;AAAA,EAAA,IAEED,GAEE,EAAE,aAAaE,GAAuB,WAAWC,EAAA,IACrDC,EAAA,GAEIC,IAAeC,EAAuBL,CAAY,GAClD,EAAE,MAAAM,GAAM,WAAAC,MAAcC,EAAwBJ,CAAY,GAC1DK,IACJP,KAAqBK,KAAa,CAACD,GAAM,SACrCI,IAAeJ,GAAM,UACvB,kCACA,kCACAF,IACA,6BAEEO,IAAqBC,EAAY,YAAY;AACjD,QAAI;AACF,YAAMC,IAAc,MAAMZ,EAAsB,EAAE,cAAAD,GAAc,GAC1Dc,IAAUC;AAAA,QACdF,EAAY;AAAA,QACZb,EAAa;AAAA,MAAA;AAIf,aAAO,KAAKc,GAAS,UAAU,UAAU;AAAA,IAC3C,SAASE,GAAO;AACd,cAAQ,MAAM,2CAA2CA,CAAK,GAC9DC,EAAaD,EAAM,SAAS,UAAU;AAAA,QACpC,OAAO;AAAA,MAAA,CACR;AAAA,IACH;AAAA,EACF,GAAG,CAAChB,GAAcC,CAAqB,CAAC;AA6BxC,gCAGK,UApBH,gBAAAiB,EAACC,GAAA,EAAQ,OAAOT,GACd,4BAAC,QAAA,EACC,UAAA,gBAAAQ;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,6BAAYC,GAAA,EAAoB;AAAA,MAChC,SAASnB,KAAqBK;AAAA,MAC9B,UAAUE;AAAA,MACV,SAAS,MAAM;AACb,QAAKE,EAAA;AAAA,MACP;AAAA,MACD,UAAA;AAAA,IAAA;AAAA,EAAA,GAGH,EAAA,CACF,EAMG,CAEH;AAEJ;"}
1
+ {"version":3,"file":"MetadataTaskTableActionCell.js","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTaskTableActionCell.tsx"],"sourcesContent":["import { ConfirmationDialog } from '@/components/ConfirmationDialog'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport { UserOrTeamBadge } from '@/components/UserOrTeamBadge'\nimport useGridSessionForCurationTask_legacy from '@/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy'\nimport {\n useGetCurrentUserProfile,\n useGetFeatureFlag,\n useGetIsPrincipalIdUserOrMemberOfTeam,\n} from '@/synapse-queries'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { getLinkToGridSession } from '@/utils/functions/getSynapseWebClientLink'\nimport { StickyNote2Outlined } from '@mui/icons-material'\nimport { Button, Tooltip, Typography } from '@mui/material'\nimport {\n GridSession,\n SynapseClientError,\n TaskBundle,\n} from '@sage-bionetworks/synapse-client'\nimport { FeatureFlagEnum } from '@sage-bionetworks/synapse-types'\nimport { useCallback, useState } from 'react'\nimport useGridSessionForCurationTask from '../hooks/useGridSessionForCurationTask'\nimport { getGridSourceIdForTask } from '../utils/getGridSourceIdForTask'\nimport taskHasAssignee from '../utils/taskHasAssignee'\n\nexport const OPEN_CURATOR_ERROR_TITLE =\n 'An error occurred while trying to open Curator'\nexport const OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE =\n \"You don't have permission to view the existing Curator session for this task. It was likely created by another data contributor. A data manager should create a new task and assign it to you or your team.\"\n\nexport const NO_TASK_ASSIGNEE_WARNING_DIALOG_TITLE = 'Task is Unassigned'\n\nfunction openGridSessionInNewWindow(gridSessionId: string, taskId: number) {\n const gridUrl = getLinkToGridSession(gridSessionId, taskId)\n window.open(gridUrl, '_blank', 'noopener')\n}\n\n/**\n * Handles rendering the 'Actions' cell in the Metadata Task table, which provides buttons for the user\n * to accomplish the actions they can take on a Metadata Task, such as opening a data grid for the entity referenced\n * by the task.\n */\nexport default function MetadataTaskTableActionCell(props: {\n taskBundle: TaskBundle\n canEdit: boolean\n}) {\n const { taskBundle, canEdit } = props\n const curationTask = taskBundle.task!\n\n // If false, allows opening a grid session for an unassigned task, even if it can lead to data loss,\n // because blocking this behavior prevents important use cases such as data contributors creating a\n // grid session before a task is assigned\n const disableLegacyUnassignedTaskBehavior = useGetFeatureFlag(\n FeatureFlagEnum.CURATOR_DISABLE_OPEN_FOR_UNASSIGNED_TASKS,\n )\n\n const [showOpenWithNoAssigneeWarning, setShowOpenWithNoAssigneeWarning] =\n useState(false)\n const [\n showGridSessionAssigneeMismatchDialog,\n setShowGridSessionAssigneeMismatchDialog,\n ] = useState(false)\n\n const { data: currentUser } = useGetCurrentUserProfile()\n\n const { data: isUserAssignedToTask } = useGetIsPrincipalIdUserOrMemberOfTeam(\n currentUser?.ownerId!,\n curationTask.assigneePrincipalId!,\n { enabled: !!currentUser?.ownerId && !!curationTask.assigneePrincipalId },\n )\n\n const {\n data: gridSessionInfoForCurationTask,\n mutateAsync: getGridSessionForTask,\n isPending: getOrCreateGridSessionIsPending,\n } = useGridSessionForCurationTask()\n\n const {\n mutateAsync: getOrCreateLegacyGridSessionForUnassignedTask,\n isPending: getOrCreateLegacyGridSessionIsPending,\n } = useGridSessionForCurationTask_legacy()\n\n const openGridIsPending =\n getOrCreateGridSessionIsPending || getOrCreateLegacyGridSessionIsPending\n\n const gridSourceEntityId = getGridSourceIdForTask(curationTask)\n const {\n data: sourceEntityPermissions,\n isLoading: isLoadingEntityPermissions,\n } = useGetEntityPermissions(gridSourceEntityId)\n\n const isLoading = isLoadingEntityPermissions\n const hasAssignee = taskHasAssignee(curationTask)\n const isAssignedToTask = canEdit || isUserAssignedToTask || !hasAssignee\n\n const hasPermission =\n sourceEntityPermissions?.canView &&\n (isAssignedToTask || !disableLegacyUnassignedTaskBehavior)\n\n const isOpenDataGridDisabled =\n openGridIsPending || isLoading || !hasPermission\n const toolTipTitle = hasPermission\n ? 'Open Curator to edit metadata'\n : !isAssignedToTask && disableLegacyUnassignedTaskBehavior\n ? 'You must be assigned to this task to open it'\n : sourceEntityPermissions?.canView\n ? 'You must have READ access to ' +\n gridSourceEntityId +\n ' to view the Working Copy'\n : 'You do not have permission to view the Working Copy'\n\n const openNewOrExistingCuratorSession = useCallback(\n async (\n /**\n * If unassigned, use legacy grid session retrieval behavior where grid sessions are not linked to the task\n * This can lead to data loss because different users create multiple grid sessions that overwrite each other\n */\n legacyIgnoreLinkedGridSession = false,\n ) => {\n let gridSession: GridSession\n try {\n if (\n legacyIgnoreLinkedGridSession &&\n !disableLegacyUnassignedTaskBehavior\n ) {\n gridSession = await getOrCreateLegacyGridSessionForUnassignedTask({\n curationTask,\n })\n } else {\n const getSessionResult = await getGridSessionForTask(taskBundle)\n gridSession = getSessionResult.gridSession\n\n if (!getSessionResult.gridSessionOwnerMatchesTaskAssignee) {\n // The user has access, but the assignee does not match the grid session owner.\n // Show a warning before allowing the user to proceed.\n setShowGridSessionAssigneeMismatchDialog(true)\n return\n }\n }\n openGridSessionInNewWindow(gridSession.sessionId!, curationTask.taskId!)\n } catch (error) {\n if (error instanceof SynapseClientError && error.status === 403) {\n console.error(error)\n displayToast(OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE, 'danger', {\n title: OPEN_CURATOR_ERROR_TITLE,\n })\n } else {\n console.error('Error opening Curator for curation task', error)\n displayToast(error.message, 'danger', {\n title: OPEN_CURATOR_ERROR_TITLE,\n })\n }\n }\n },\n [\n curationTask,\n getGridSessionForTask,\n getOrCreateLegacyGridSessionForUnassignedTask,\n taskBundle,\n ],\n )\n\n const handleClickOpenCurator = useCallback(() => {\n if (!hasAssignee) {\n setShowOpenWithNoAssigneeWarning(true)\n } else {\n void openNewOrExistingCuratorSession()\n }\n }, [openNewOrExistingCuratorSession, hasAssignee])\n\n // Dialog to warn a user before opening a curation task without an assignee. Intended to discourage creating\n // grid sessions for unassigned tasks without completely blocking data contributors from doing so\n const openWithNoAssigneeWarningDialog = (\n <ConfirmationDialog\n open={showOpenWithNoAssigneeWarning}\n title={NO_TASK_ASSIGNEE_WARNING_DIALOG_TITLE}\n content={\n <>\n <Typography variant=\"body1\" gutterBottom>\n This task is currently unassigned. A Curator session created using\n an unassigned task will be private to your account. If the task is\n assigned later, a new Curator session will be created and you may be\n unable to recover any unsaved changes.\n </Typography>\n <Typography variant=\"body1\">\n Do you want to proceed and open Curator using this unassigned task?\n </Typography>\n </>\n }\n confirmButtonProps={{ children: 'Proceed' }}\n onConfirm={() => {\n // If unassigned, use legacy grid session retrieval behavior where grid sessions are not linked to the task\n // This can lead to data loss because different users create multiple grid sessions that overwrite each other\n void openNewOrExistingCuratorSession(true)\n setShowOpenWithNoAssigneeWarning(false)\n }}\n onCancel={() => {\n setShowOpenWithNoAssigneeWarning(false)\n }}\n />\n )\n\n const assigneeMismatchWarningDialog = (\n <ConfirmationDialog\n open={showGridSessionAssigneeMismatchDialog}\n title={'Task assignee changed'}\n content={\n <>\n <p>\n The existing Curator session for the task was created with a\n different owner{' '}\n <span style={{ whiteSpace: 'nowrap' }}>\n (\n {gridSessionInfoForCurationTask?.gridSession.ownerPrincipalId && (\n <UserOrTeamBadge\n principalId={\n gridSessionInfoForCurationTask.gridSession.ownerPrincipalId\n }\n />\n )}\n )\n </span>{' '}\n than the current assignee{' '}\n <span style={{ whiteSpace: 'nowrap' }}>\n (\n {curationTask.assigneePrincipalId ? (\n <UserOrTeamBadge\n principalId={curationTask.assigneePrincipalId}\n />\n ) : (\n 'None'\n )}\n )\n </span>\n . Collaborators may not have access to this session.\n </p>\n <p>Are you sure you want to open Curator?</p>\n </>\n }\n confirmButtonProps={{ children: 'Open Curator' }}\n onConfirm={() => {\n if (gridSessionInfoForCurationTask?.gridSession) {\n openGridSessionInNewWindow(\n gridSessionInfoForCurationTask.gridSession.sessionId!,\n curationTask.taskId!,\n )\n\n setShowGridSessionAssigneeMismatchDialog(false)\n }\n }}\n onCancel={() => {\n setShowGridSessionAssigneeMismatchDialog(false)\n }}\n />\n )\n\n return (\n <>\n {openWithNoAssigneeWarningDialog}\n {assigneeMismatchWarningDialog}\n <Tooltip title={toolTipTitle}>\n <span>\n <Button\n size={'small'}\n startIcon={<StickyNote2Outlined />}\n loading={openGridIsPending || isLoading}\n disabled={isOpenDataGridDisabled}\n onClick={handleClickOpenCurator}\n >\n Open Curator\n </Button>\n </span>\n </Tooltip>\n </>\n )\n}\n"],"names":["OPEN_CURATOR_ERROR_TITLE","OPEN_CURATOR_UNAUTHORIZED_ERROR_MESSAGE","NO_TASK_ASSIGNEE_WARNING_DIALOG_TITLE","openGridSessionInNewWindow","gridSessionId","taskId","gridUrl","getLinkToGridSession","MetadataTaskTableActionCell","props","taskBundle","canEdit","curationTask","disableLegacyUnassignedTaskBehavior","useGetFeatureFlag","FeatureFlagEnum","showOpenWithNoAssigneeWarning","setShowOpenWithNoAssigneeWarning","useState","showGridSessionAssigneeMismatchDialog","setShowGridSessionAssigneeMismatchDialog","currentUser","useGetCurrentUserProfile","isUserAssignedToTask","useGetIsPrincipalIdUserOrMemberOfTeam","gridSessionInfoForCurationTask","getGridSessionForTask","getOrCreateGridSessionIsPending","useGridSessionForCurationTask","getOrCreateLegacyGridSessionForUnassignedTask","getOrCreateLegacyGridSessionIsPending","useGridSessionForCurationTask_legacy","openGridIsPending","gridSourceEntityId","getGridSourceIdForTask","sourceEntityPermissions","isLoadingEntityPermissions","useGetEntityPermissions","isLoading","hasAssignee","taskHasAssignee","isAssignedToTask","hasPermission","isOpenDataGridDisabled","toolTipTitle","openNewOrExistingCuratorSession","useCallback","legacyIgnoreLinkedGridSession","gridSession","getSessionResult","error","SynapseClientError","displayToast","handleClickOpenCurator","openWithNoAssigneeWarningDialog","jsx","ConfirmationDialog","jsxs","Fragment","Typography","assigneeMismatchWarningDialog","UserOrTeamBadge","Tooltip","Button","StickyNote2Outlined"],"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":"AAIA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAyBtE"}
1
+ {"version":3,"file":"MetadataTasksPage.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAgDtE"}
@@ -1,32 +1,57 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- import l from "../../../../components/layout/InfiniteTableLayout.js";
3
- import m from "../../../../components/TanStackTable/StyledTanStackTable.js";
4
- import { useMetadataTaskTable as c } from "../hooks/useMetadataTaskTable.js";
5
- function x(o) {
6
- const { projectId: s } = o, { table: e, isLoading: t, hasNextPage: r, fetchNextPage: i, isFetchingNextPage: n } = c({
7
- projectId: s
1
+ import { jsxs as f, jsx as e } from "react/jsx-runtime";
2
+ import T from "../../../../components/layout/InfiniteTableLayout.js";
3
+ import u from "../../../../components/TanStackTable/StyledTanStackTable.js";
4
+ import { useMetadataTaskTable as h } from "../hooks/useMetadataTaskTable.js";
5
+ import { Stack as s, FormControlLabel as p, Switch as k } from "@mui/material";
6
+ import { useState as x } from "react";
7
+ function j(n) {
8
+ const { projectId: i } = n, [t, r] = x({
9
+ projectId: i,
10
+ assignedToMe: !1
11
+ }), { table: a, isLoading: o, hasNextPage: l, fetchNextPage: c, isFetchingNextPage: d } = h({
12
+ listCurationTaskRequest: t
8
13
  });
9
- return /* @__PURE__ */ a(
10
- l,
11
- {
12
- table: /* @__PURE__ */ a(
13
- m,
14
- {
15
- table: e,
16
- styledTableContainerProps: { sx: { my: 2 } }
17
- }
18
- ),
19
- isLoading: t,
20
- isEmpty: !t && e.getRowModel().rows.length === 0,
21
- hasNextPage: r,
22
- onFetchNextPageClicked: () => {
23
- i();
24
- },
25
- isFetchingNextPage: n
26
- }
27
- );
14
+ return /* @__PURE__ */ f(s, { children: [
15
+ /* @__PURE__ */ e(s, { direction: "row", justifyContent: "flex-end", children: /* @__PURE__ */ e(
16
+ p,
17
+ {
18
+ control: /* @__PURE__ */ e(
19
+ k,
20
+ {
21
+ checked: !!t.assignedToMe,
22
+ onChange: (b, m) => {
23
+ r((g) => ({
24
+ ...g,
25
+ assignedToMe: m
26
+ }));
27
+ }
28
+ }
29
+ ),
30
+ label: "View only tasks assigned to me"
31
+ }
32
+ ) }),
33
+ /* @__PURE__ */ e(
34
+ T,
35
+ {
36
+ table: /* @__PURE__ */ e(
37
+ u,
38
+ {
39
+ table: a,
40
+ styledTableContainerProps: { sx: { my: 2 } }
41
+ }
42
+ ),
43
+ isLoading: o,
44
+ isEmpty: !o && a.getRowModel().rows.length === 0,
45
+ hasNextPage: l,
46
+ onFetchNextPageClicked: () => {
47
+ c();
48
+ },
49
+ isFetchingNextPage: d
50
+ }
51
+ )
52
+ ] });
28
53
  }
29
54
  export {
30
- x as default
55
+ j as default
31
56
  };
32
57
  //# sourceMappingURL=MetadataTasksPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataTasksPage.js","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'\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\n const { table, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useMetadataTaskTable({\n projectId,\n })\n\n return (\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 )\n}\n"],"names":["MetadataTasksPage","props","projectId","table","isLoading","hasNextPage","fetchNextPage","isFetchingNextPage","useMetadataTaskTable","jsx","InfiniteTableLayout","StyledTanStackTable"],"mappings":";;;;AAaA,SAAwBA,EAAkBC,GAA+B;AACvE,QAAM,EAAE,WAAAC,MAAcD,GAEhB,EAAE,OAAAE,GAAO,WAAAC,GAAW,aAAAC,GAAa,eAAAC,GAAe,oBAAAC,EAAA,IACpDC,EAAqB;AAAA,IACnB,WAAAN;AAAA,EAAA,CACD;AAEH,SACE,gBAAAO;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OACE,gBAAAD;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,OAAAR;AAAA,UACA,2BAA2B,EAAE,IAAI,EAAE,IAAI,IAAE;AAAA,QAAE;AAAA,MAAA;AAAA,MAG/C,WAAAC;AAAA,MACA,SAAS,CAACA,KAAaD,EAAM,YAAA,EAAc,KAAK,WAAW;AAAA,MAC3D,aAAAE;AAAA,MACA,wBAAwB,MAAM;AAC5B,QAAAC,EAAA;AAAA,MACF;AAAA,MACA,oBAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"MetadataTasksPage.js","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 { FormControlLabel, Stack, Switch } from '@mui/material'\nimport { useState } from 'react'\nimport { ListCurationTaskRequest } from '@sage-bionetworks/synapse-client'\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 { 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 </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"],"names":["MetadataTasksPage","props","projectId","listCurationTaskRequest","setListCurationTaskRequest","useState","table","isLoading","hasNextPage","fetchNextPage","isFetchingNextPage","useMetadataTaskTable","Stack","jsx","FormControlLabel","Switch","_e","checked","prev","InfiniteTableLayout","StyledTanStackTable"],"mappings":";;;;;;AAgBA,SAAwBA,EAAkBC,GAA+B;AACvE,QAAM,EAAE,WAAAC,MAAcD,GAChB,CAACE,GAAyBC,CAA0B,IACxDC,EAAkC;AAAA,IAChC,WAAAH;AAAA,IACA,cAAc;AAAA,EAAA,CACf,GAEG,EAAE,OAAAI,GAAO,WAAAC,GAAW,aAAAC,GAAa,eAAAC,GAAe,oBAAAC,EAAA,IACpDC,EAAqB;AAAA,IACnB,yBAAAR;AAAA,EAAA,CACD;AAEH,2BACGS,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAM,WAAU,OAAM,gBAAe,YACpC,UAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SACE,gBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAS,CAAC,CAACZ,EAAwB;AAAA,YACnC,UAAU,CAACa,GAAIC,MAAY;AACzB,cAAAb,EAA2B,CAAAc,OAAS;AAAA,gBAClC,GAAGA;AAAA,gBACH,cAAcD;AAAA,cAAA,EACd;AAAA,YACJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,OAAM;AAAA,MAAA;AAAA,IAAA,GAEV;AAAA,IACA,gBAAAJ;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,OACE,gBAAAN;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,OAAAd;AAAA,YACA,2BAA2B,EAAE,IAAI,EAAE,IAAI,IAAE;AAAA,UAAE;AAAA,QAAA;AAAA,QAG/C,WAAAC;AAAA,QACA,SAAS,CAACA,KAAaD,EAAM,YAAA,EAAc,KAAK,WAAW;AAAA,QAC3D,aAAAE;AAAA,QACA,wBAAwB,MAAM;AAC5B,UAAAC,EAAA;AAAA,QACF;AAAA,QACA,oBAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
@@ -0,0 +1,7 @@
1
+ import { TaskBundle } from '@sage-bionetworks/synapse-client';
2
+ export type MetadataTasksTableAssigneeCellProps = {
3
+ taskBundle: TaskBundle;
4
+ canEdit: boolean;
5
+ };
6
+ export default function MetadataTasksTableAssigneeCell(props: MetadataTasksTableAssigneeCellProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=MetadataTasksTableAssigneeCell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataTasksTableAssigneeCell.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAK7D,MAAM,MAAM,mCAAmC,GAAG;IAChD,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,8BAA8B,CACpD,KAAK,EAAE,mCAAmC,2CAwH3C"}