synapse-react-client 4.0.28 → 4.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.js +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +102 -94
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.d.ts +4 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.d.ts.map +1 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js +1 -0
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +27 -20
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -1
- package/dist/features/curator/dashboard/CuratorDashboard.js +22 -23
- package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +13 -10
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +20 -0
- package/dist/features/curator/dashboard/components/CurationTaskCardLayout.d.ts.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js +62 -49
- package/dist/features/curator/dashboard/components/CurationTaskCardLayout.js.map +1 -1
- package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.d.ts +10 -0
- package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.d.ts.map +1 -0
- package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.js +19 -0
- package/dist/features/curator/dashboard/components/FilteredByTaskIdsBanner.js.map +1 -0
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +50 -47
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js +16 -20
- package/dist/features/entity/metadata-task/components/MetadataTasksPageRouter.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.d.ts +1 -1
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.js +89 -122
- package/dist/features/entity/metadata-task/create-task/ComputeTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.d.ts +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js +77 -102
- package/dist/features/entity/metadata-task/create-task/CurateTaskForm.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.d.ts +6 -1
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.js +9 -2
- package/dist/features/entity/metadata-task/create-task/FileBasedFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.d.ts +5 -1
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.js +6 -2
- package/dist/features/entity/metadata-task/create-task/RecordBasedFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.d.ts +7 -1
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.js +10 -2
- package/dist/features/entity/metadata-task/create-task/RecordSetFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.d.ts +6 -1
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.js +9 -2
- package/dist/features/entity/metadata-task/create-task/SampleSheetFields.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.d.ts +19 -0
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.js +32 -0
- package/dist/features/entity/metadata-task/create-task/TaskStatusField.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.d.ts +21 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js +100 -0
- package/dist/features/entity/metadata-task/create-task/curationTaskFlowRoutes.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.d.ts +24 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.js +56 -0
- package/dist/features/entity/metadata-task/create-task/useComputeTypeFields.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.d.ts +26 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.js +57 -0
- package/dist/features/entity/metadata-task/create-task/useCurateTypeFields.js.map +1 -0
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.d.ts +4 -2
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.js +12 -11
- package/dist/features/entity/metadata-task/create-task/useCurationTaskFormState.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.d.ts +9 -14
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.js +11 -7
- package/dist/features/entity/metadata-task/create-task/utils/buildComputeTaskPayload.js.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.d.ts +11 -12
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.js +17 -12
- package/dist/features/entity/metadata-task/create-task/utils/buildCurateTaskPayload.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/constants.d.ts +14 -1
- package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/utils/constants.js +23 -20
- package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/SynapseConstants.d.ts +1 -0
- package/dist/utils/SynapseConstants.d.ts.map +1 -1
- package/dist/utils/SynapseConstants.js +6 -5
- package/dist/utils/SynapseConstants.js.map +1 -1
- package/dist/utils/hooks/useCurationTaskListFilters.d.ts +36 -0
- package/dist/utils/hooks/useCurationTaskListFilters.d.ts.map +1 -0
- package/dist/utils/hooks/useCurationTaskListFilters.js +42 -0
- package/dist/utils/hooks/useCurationTaskListFilters.js.map +1 -0
- package/package.json +4 -4
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.d.ts +0 -18
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.d.ts.map +0 -1
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.js +0 -78
- package/dist/features/entity/metadata-task/create-task/CreateCurationTaskFlow.js.map +0 -1
|
@@ -5,18 +5,19 @@ import r from "./CurationTaskCard.module.js";
|
|
|
5
5
|
import i from "./shared.module.js";
|
|
6
6
|
import a from "./UserOrTeamChip.js";
|
|
7
7
|
import { useState as o } from "react";
|
|
8
|
-
import { Card as s, Chip as c, Collapse as l, Divider as u, IconButton as d,
|
|
9
|
-
import { Fragment as
|
|
10
|
-
import { useNavigate as
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
8
|
+
import { Card as s, Chip as c, Collapse as l, Divider as u, IconButton as d, Link as f, Skeleton as p, Typography as m } from "@mui/material";
|
|
9
|
+
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
10
|
+
import { useNavigate as v } from "react-router";
|
|
11
|
+
import y from "dayjs";
|
|
12
|
+
import b from "dayjs/plugin/utc";
|
|
13
|
+
import x from "@mui/icons-material/HelpOutline";
|
|
14
|
+
import S from "classnames";
|
|
15
|
+
import C from "@mui/icons-material/SettingsOutlined";
|
|
15
16
|
//#region src/features/curator/dashboard/components/CurationTaskCardLayout.tsx
|
|
16
|
-
|
|
17
|
-
function
|
|
17
|
+
y.extend(b);
|
|
18
|
+
function w(e) {
|
|
18
19
|
let { label: t } = e;
|
|
19
|
-
return /* @__PURE__ */
|
|
20
|
+
return /* @__PURE__ */ g(c, {
|
|
20
21
|
sx: {
|
|
21
22
|
fontWeight: 600,
|
|
22
23
|
backgroundColor: "#BFD3ED"
|
|
@@ -24,11 +25,11 @@ function S(e) {
|
|
|
24
25
|
label: t
|
|
25
26
|
});
|
|
26
27
|
}
|
|
27
|
-
function
|
|
28
|
+
function T(e) {
|
|
28
29
|
let { state: n } = e;
|
|
29
30
|
if (!n) return null;
|
|
30
31
|
let { label: r, backgroundColor: i } = t[n];
|
|
31
|
-
return /* @__PURE__ */
|
|
32
|
+
return /* @__PURE__ */ g(c, {
|
|
32
33
|
size: "small",
|
|
33
34
|
sx: {
|
|
34
35
|
fontWeight: 600,
|
|
@@ -37,11 +38,11 @@ function C(e) {
|
|
|
37
38
|
label: r
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
|
-
function
|
|
41
|
+
function E(e) {
|
|
41
42
|
let { dueDate: t } = e, r = n(t);
|
|
42
43
|
if (!r) return null;
|
|
43
|
-
let i = r.diff(
|
|
44
|
-
return i < 0 ? o = "#FFCDD2" : i < 30 && (o = "#FFF9C4"), /* @__PURE__ */
|
|
44
|
+
let i = r.diff(y.utc().startOf("day"), "day"), a = r.format("MM/DD/YY"), o = "#E0E0E0";
|
|
45
|
+
return i < 0 ? o = "#FFCDD2" : i < 30 && (o = "#FFF9C4"), /* @__PURE__ */ g(c, {
|
|
45
46
|
size: "small",
|
|
46
47
|
sx: {
|
|
47
48
|
fontWeight: 600,
|
|
@@ -50,85 +51,97 @@ function w(e) {
|
|
|
50
51
|
label: `Due ${a}`
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
|
-
function
|
|
54
|
+
function D(e) {
|
|
54
55
|
return {
|
|
55
56
|
title: e?.dataType ?? "",
|
|
56
57
|
description: e?.instructions ?? "",
|
|
57
58
|
principalIds: e?.assigneePrincipalId ? [e.assigneePrincipalId] : []
|
|
58
59
|
};
|
|
59
60
|
}
|
|
60
|
-
function
|
|
61
|
-
let { taskBundle: n, title: c, description:
|
|
61
|
+
function O(t) {
|
|
62
|
+
let { taskBundle: n, title: c, description: y, taskType: b, principalIds: D, renderActionButton: O } = t, k = v(), [A, j] = o(!1), M = n.task?.taskId, N = n.task?.projectId, { data: P } = e(N, void 0, {
|
|
62
63
|
includeEntity: !0,
|
|
63
64
|
includePermissions: !0
|
|
64
|
-
}),
|
|
65
|
-
return /* @__PURE__ */
|
|
66
|
-
className:
|
|
67
|
-
children: [/* @__PURE__ */
|
|
65
|
+
}), F = P?.permissions?.canEdit ?? !1;
|
|
66
|
+
return /* @__PURE__ */ _(s, {
|
|
67
|
+
className: S(i.card, r.card),
|
|
68
|
+
children: [/* @__PURE__ */ _("div", {
|
|
68
69
|
className: r.cardContent,
|
|
69
70
|
children: [
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ _("div", {
|
|
71
72
|
className: r.mainContent,
|
|
72
73
|
children: [
|
|
73
|
-
/* @__PURE__ */
|
|
74
|
+
/* @__PURE__ */ _("div", {
|
|
74
75
|
className: r.titleChipContainer,
|
|
75
76
|
children: [
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ g(m, {
|
|
77
78
|
variant: "headline3",
|
|
78
79
|
className: r.title,
|
|
79
|
-
onClick: () =>
|
|
80
|
+
onClick: () => j(!A),
|
|
80
81
|
children: c
|
|
81
82
|
}),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
onClick: () => void
|
|
83
|
+
b && /* @__PURE__ */ g(w, { label: b }),
|
|
84
|
+
F && /* @__PURE__ */ g(d, {
|
|
85
|
+
onClick: () => void k(`edit/${M}`),
|
|
85
86
|
"aria-label": "Task settings",
|
|
86
|
-
children: /* @__PURE__ */
|
|
87
|
+
children: /* @__PURE__ */ g(C, {})
|
|
87
88
|
})
|
|
88
89
|
]
|
|
89
90
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
+
/* @__PURE__ */ _("div", {
|
|
91
92
|
className: r.entityInfo,
|
|
92
|
-
children: [
|
|
93
|
+
children: [P?.entity?.name ? /* @__PURE__ */ g(m, {
|
|
93
94
|
variant: "body1",
|
|
94
|
-
children:
|
|
95
|
-
}) : /* @__PURE__ */
|
|
95
|
+
children: P.entity.name
|
|
96
|
+
}) : /* @__PURE__ */ g(p, { width: 100 }), M && /* @__PURE__ */ _(m, {
|
|
96
97
|
variant: "body1",
|
|
97
|
-
children: ["Task ID: ",
|
|
98
|
+
children: ["Task ID: ", M]
|
|
98
99
|
})]
|
|
99
100
|
}),
|
|
100
|
-
/* @__PURE__ */
|
|
101
|
+
/* @__PURE__ */ g("div", {
|
|
101
102
|
className: r.userChipContainer,
|
|
102
|
-
children:
|
|
103
|
+
children: D.map((e) => /* @__PURE__ */ g(a, { principalId: e }, e))
|
|
103
104
|
})
|
|
104
105
|
]
|
|
105
106
|
}),
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ _("div", {
|
|
107
108
|
className: r.statusContainer,
|
|
108
|
-
children: [/* @__PURE__ */
|
|
109
|
+
children: [/* @__PURE__ */ g(T, { state: n.status?.state }), /* @__PURE__ */ g(E, { dueDate: n.status?.dueDate })]
|
|
109
110
|
}),
|
|
110
|
-
!
|
|
111
|
+
!A && /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(u, {
|
|
111
112
|
orientation: "vertical",
|
|
112
113
|
flexItem: !0,
|
|
113
114
|
sx: { display: {
|
|
114
115
|
xs: "none",
|
|
115
116
|
md: "block"
|
|
116
117
|
} }
|
|
117
|
-
}),
|
|
118
|
+
}), O({ expanded: !1 })] })
|
|
118
119
|
]
|
|
119
|
-
}), /* @__PURE__ */
|
|
120
|
-
in:
|
|
121
|
-
children: /* @__PURE__ */
|
|
120
|
+
}), /* @__PURE__ */ g(l, {
|
|
121
|
+
in: A,
|
|
122
|
+
children: /* @__PURE__ */ _("div", {
|
|
122
123
|
className: r.expandedContent,
|
|
123
|
-
children: [
|
|
124
|
-
|
|
125
|
-
children:
|
|
126
|
-
|
|
124
|
+
children: [/* @__PURE__ */ _("div", {
|
|
125
|
+
className: r.expandedTopRow,
|
|
126
|
+
children: [y && /* @__PURE__ */ g(m, {
|
|
127
|
+
variant: "body1",
|
|
128
|
+
children: y
|
|
129
|
+
}), /* @__PURE__ */ _(f, {
|
|
130
|
+
href: "https://docs.synapse.org/synapse-docs/managing-metadata-with-curator",
|
|
131
|
+
target: "_blank",
|
|
132
|
+
rel: "noopener noreferrer",
|
|
133
|
+
color: "text.primary",
|
|
134
|
+
underline: "hover",
|
|
135
|
+
className: r.helpLink,
|
|
136
|
+
sx: { fontWeight: 400 },
|
|
137
|
+
children: [/* @__PURE__ */ g(x, { className: r.helpIcon }), "Have questions or need help?"]
|
|
138
|
+
})]
|
|
139
|
+
}), O({ expanded: !0 })]
|
|
127
140
|
})
|
|
128
141
|
})]
|
|
129
142
|
});
|
|
130
143
|
}
|
|
131
144
|
//#endregion
|
|
132
|
-
export {
|
|
145
|
+
export { O as default, D as deriveCardFields };
|
|
133
146
|
|
|
134
147
|
//# sourceMappingURL=CurationTaskCardLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurationTaskCardLayout.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/CurationTaskCardLayout.tsx"],"sourcesContent":["import {\n Card,\n Chip,\n Collapse,\n Divider,\n IconButton,\n Skeleton,\n Typography,\n} from '@mui/material'\nimport {\n TaskBundle,\n TaskStatusStateEnum,\n} from '@sage-bionetworks/synapse-client'\nimport classNames from 'classnames'\nimport { ReactNode, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport SettingsOutlinedIcon from '@mui/icons-material/SettingsOutlined'\nimport useGetEntityBundle from '@/synapse-queries/entity/useEntityBundle'\nimport { TASK_STATUS_CONFIG } from '@/features/entity/metadata-task/utils/constants'\nimport { parseDueDate } from '@/features/entity/metadata-task/utils/dueDate'\nimport styles from './CurationTaskCard.module.scss'\nimport sharedStyles from './shared.module.scss'\nimport UserOrTeamChip from './UserOrTeamChip'\n\ndayjs.extend(utc)\n\nfunction TaskTypeChip(props: { label: string }) {\n const { label } = props\n return (\n <Chip sx={{ fontWeight: 600, backgroundColor: '#BFD3ED' }} label={label} />\n )\n}\n\n/**\n * A chip to display CurationTask status.\n *\n * See {@link https://www.figma.com/design/0oPm5lLSUva8kyfVNMS6FA/Sage-Style---Component-Library--SDS-?node-id=4942-1129&m=dev}\n */\nfunction TaskStatusChip(props: { state: TaskStatusStateEnum | undefined }) {\n const { state } = props\n if (!state) return null\n const { label, backgroundColor } = TASK_STATUS_CONFIG[state]\n return (\n <Chip\n size=\"small\"\n sx={{ fontWeight: 600, backgroundColor }}\n label={label}\n />\n )\n}\n\nfunction DueDateChip(props: { dueDate: string | undefined }) {\n const { dueDate } = props\n const dueDateObj = parseDueDate(dueDate)\n if (!dueDateObj) return null\n\n const daysUntilDue = dueDateObj.diff(dayjs.utc().startOf('day'), 'day')\n const formattedDate = dueDateObj.format('MM/DD/YY')\n\n let backgroundColor = '#E0E0E0'\n if (daysUntilDue < 0) {\n backgroundColor = '#FFCDD2'\n } else if (daysUntilDue < 30) {\n backgroundColor = '#FFF9C4'\n }\n\n return (\n <Chip\n size=\"small\"\n sx={{ fontWeight: 600, backgroundColor }}\n label={`Due ${formattedDate}`}\n />\n )\n}\n\nexport type CurationTaskCardLayoutProps = {\n taskBundle: TaskBundle\n title: string\n description: string\n taskType: string\n principalIds: string[]\n /** Renders the action button. `expanded` reflects whether the card is in its expanded layout. */\n renderActionButton: (props: { expanded: boolean }) => ReactNode\n}\n\n/** Derives the fields shared by every card variant from a task's common properties. */\nexport function deriveCardFields(task: TaskBundle['task']) {\n return {\n title: task?.dataType ?? '',\n description: task?.instructions ?? '',\n principalIds: task?.assigneePrincipalId ? [task.assigneePrincipalId] : [],\n }\n}\n\n/**\n * Shared presentational chrome for a curation task card: title, chips, entity info, assignees,\n * status/due date, and an action button slot. Both the grid and executable task cards compose this.\n */\nexport default function CurationTaskCardLayout(\n props: CurationTaskCardLayoutProps,\n) {\n const {\n taskBundle,\n title,\n description,\n taskType,\n principalIds,\n renderActionButton,\n } = props\n\n const navigate = useNavigate()\n const [isExpanded, setIsExpanded] = useState(false)\n\n const taskId = taskBundle.task?.taskId\n const projectId = taskBundle.task?.projectId\n const { data: bundle } = useGetEntityBundle(projectId, undefined, {\n includeEntity: true,\n includePermissions: true,\n })\n const canEdit = bundle?.permissions?.canEdit ?? false\n\n return (\n <Card className={classNames(sharedStyles.card, styles.card)}>\n <div className={styles.cardContent}>\n <div className={styles.mainContent}>\n <div className={styles.titleChipContainer}>\n <Typography\n variant=\"headline3\"\n className={styles.title}\n onClick={() => setIsExpanded(!isExpanded)}\n >\n {title}\n </Typography>\n {taskType && <TaskTypeChip label={taskType} />}\n {canEdit && (\n <IconButton\n onClick={() => void navigate(`edit/${taskId}`)}\n aria-label=\"Task settings\"\n >\n <SettingsOutlinedIcon />\n </IconButton>\n )}\n </div>\n <div className={styles.entityInfo}>\n {bundle?.entity?.name ? (\n <Typography variant=\"body1\">{bundle.entity.name}</Typography>\n ) : (\n <Skeleton width={100} />\n )}\n {taskId && (\n <Typography variant=\"body1\">Task ID: {taskId}</Typography>\n )}\n </div>\n <div className={styles.userChipContainer}>\n {principalIds.map(principalId => (\n <UserOrTeamChip key={principalId} principalId={principalId} />\n ))}\n </div>\n </div>\n <div className={styles.statusContainer}>\n <TaskStatusChip state={taskBundle.status?.state} />\n <DueDateChip dueDate={taskBundle.status?.dueDate} />\n </div>\n {!isExpanded && (\n <>\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ display: { xs: 'none', md: 'block' } }}\n />\n {renderActionButton({ expanded: false })}\n </>\n )}\n </div>\n <Collapse in={isExpanded}>\n <div className={styles.expandedContent}>\n {description && (\n
|
|
1
|
+
{"version":3,"file":"CurationTaskCardLayout.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/CurationTaskCardLayout.tsx"],"sourcesContent":["import {\n Card,\n Chip,\n Collapse,\n Divider,\n IconButton,\n Link,\n Skeleton,\n Typography,\n} from '@mui/material'\nimport HelpOutline from '@mui/icons-material/HelpOutline'\nimport {\n TaskBundle,\n TaskStatusStateEnum,\n} from '@sage-bionetworks/synapse-client'\nimport classNames from 'classnames'\nimport { ReactNode, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport SettingsOutlinedIcon from '@mui/icons-material/SettingsOutlined'\nimport useGetEntityBundle from '@/synapse-queries/entity/useEntityBundle'\nimport { TASK_STATUS_CONFIG } from '@/features/entity/metadata-task/utils/constants'\nimport { parseDueDate } from '@/features/entity/metadata-task/utils/dueDate'\nimport styles from './CurationTaskCard.module.scss'\nimport sharedStyles from './shared.module.scss'\nimport UserOrTeamChip from './UserOrTeamChip'\n\ndayjs.extend(utc)\n\nfunction TaskTypeChip(props: { label: string }) {\n const { label } = props\n return (\n <Chip sx={{ fontWeight: 600, backgroundColor: '#BFD3ED' }} label={label} />\n )\n}\n\n/**\n * A chip to display CurationTask status.\n *\n * See {@link https://www.figma.com/design/0oPm5lLSUva8kyfVNMS6FA/Sage-Style---Component-Library--SDS-?node-id=4942-1129&m=dev}\n */\nfunction TaskStatusChip(props: { state: TaskStatusStateEnum | undefined }) {\n const { state } = props\n if (!state) return null\n const { label, backgroundColor } = TASK_STATUS_CONFIG[state]\n return (\n <Chip\n size=\"small\"\n sx={{ fontWeight: 600, backgroundColor }}\n label={label}\n />\n )\n}\n\nfunction DueDateChip(props: { dueDate: string | undefined }) {\n const { dueDate } = props\n const dueDateObj = parseDueDate(dueDate)\n if (!dueDateObj) return null\n\n const daysUntilDue = dueDateObj.diff(dayjs.utc().startOf('day'), 'day')\n const formattedDate = dueDateObj.format('MM/DD/YY')\n\n let backgroundColor = '#E0E0E0'\n if (daysUntilDue < 0) {\n backgroundColor = '#FFCDD2'\n } else if (daysUntilDue < 30) {\n backgroundColor = '#FFF9C4'\n }\n\n return (\n <Chip\n size=\"small\"\n sx={{ fontWeight: 600, backgroundColor }}\n label={`Due ${formattedDate}`}\n />\n )\n}\n\nexport type CurationTaskCardLayoutProps = {\n taskBundle: TaskBundle\n title: string\n description: string\n taskType: string\n principalIds: string[]\n /** Renders the action button. `expanded` reflects whether the card is in its expanded layout. */\n renderActionButton: (props: { expanded: boolean }) => ReactNode\n}\n\n/** Derives the fields shared by every card variant from a task's common properties. */\nexport function deriveCardFields(task: TaskBundle['task']) {\n return {\n title: task?.dataType ?? '',\n description: task?.instructions ?? '',\n principalIds: task?.assigneePrincipalId ? [task.assigneePrincipalId] : [],\n }\n}\n\n/**\n * Shared presentational chrome for a curation task card: title, chips, entity info, assignees,\n * status/due date, and an action button slot. Both the grid and executable task cards compose this.\n */\nexport default function CurationTaskCardLayout(\n props: CurationTaskCardLayoutProps,\n) {\n const {\n taskBundle,\n title,\n description,\n taskType,\n principalIds,\n renderActionButton,\n } = props\n\n const navigate = useNavigate()\n const [isExpanded, setIsExpanded] = useState(false)\n\n const taskId = taskBundle.task?.taskId\n const projectId = taskBundle.task?.projectId\n const { data: bundle } = useGetEntityBundle(projectId, undefined, {\n includeEntity: true,\n includePermissions: true,\n })\n const canEdit = bundle?.permissions?.canEdit ?? false\n\n return (\n <Card className={classNames(sharedStyles.card, styles.card)}>\n <div className={styles.cardContent}>\n <div className={styles.mainContent}>\n <div className={styles.titleChipContainer}>\n <Typography\n variant=\"headline3\"\n className={styles.title}\n onClick={() => setIsExpanded(!isExpanded)}\n >\n {title}\n </Typography>\n {taskType && <TaskTypeChip label={taskType} />}\n {canEdit && (\n <IconButton\n onClick={() => void navigate(`edit/${taskId}`)}\n aria-label=\"Task settings\"\n >\n <SettingsOutlinedIcon />\n </IconButton>\n )}\n </div>\n <div className={styles.entityInfo}>\n {bundle?.entity?.name ? (\n <Typography variant=\"body1\">{bundle.entity.name}</Typography>\n ) : (\n <Skeleton width={100} />\n )}\n {taskId && (\n <Typography variant=\"body1\">Task ID: {taskId}</Typography>\n )}\n </div>\n <div className={styles.userChipContainer}>\n {principalIds.map(principalId => (\n <UserOrTeamChip key={principalId} principalId={principalId} />\n ))}\n </div>\n </div>\n <div className={styles.statusContainer}>\n <TaskStatusChip state={taskBundle.status?.state} />\n <DueDateChip dueDate={taskBundle.status?.dueDate} />\n </div>\n {!isExpanded && (\n <>\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ display: { xs: 'none', md: 'block' } }}\n />\n {renderActionButton({ expanded: false })}\n </>\n )}\n </div>\n <Collapse in={isExpanded}>\n <div className={styles.expandedContent}>\n <div className={styles.expandedTopRow}>\n {description && (\n <Typography variant=\"body1\">{description}</Typography>\n )}\n <Link\n href=\"https://docs.synapse.org/synapse-docs/managing-metadata-with-curator\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"text.primary\"\n underline=\"hover\"\n className={styles.helpLink}\n sx={{ fontWeight: 400 }}\n >\n <HelpOutline className={styles.helpIcon} />\n Have questions or need help?\n </Link>\n </div>\n {renderActionButton({ expanded: true })}\n </div>\n </Collapse>\n </Card>\n )\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type FilteredByTaskIdsBannerProps = {
|
|
2
|
+
taskIds: number[] | undefined;
|
|
3
|
+
onClear: () => void;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Displayed above a curation task list when it is filtered down to a specific set of task IDs (via
|
|
7
|
+
* the `taskIds` URL search param), with an action to clear the filter and return to the unfiltered list.
|
|
8
|
+
*/
|
|
9
|
+
export default function FilteredByTaskIdsBanner(props: FilteredByTaskIdsBannerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=FilteredByTaskIdsBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilteredByTaskIdsBanner.d.ts","sourceRoot":"","sources":["../../../../../src/features/curator/dashboard/components/FilteredByTaskIdsBanner.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,kDAqBpC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import e from "../../../../components/FullWidthAlert/FullWidthAlert.js";
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
//#region src/features/curator/dashboard/components/FilteredByTaskIdsBanner.tsx
|
|
4
|
+
function n(n) {
|
|
5
|
+
let { taskIds: r, onClear: i } = n;
|
|
6
|
+
return !r || r.length === 0 ? null : /* @__PURE__ */ t(e, {
|
|
7
|
+
isGlobal: !1,
|
|
8
|
+
variant: "info",
|
|
9
|
+
description: `Showing ${r.length} filtered task${r.length === 1 ? "" : "s"}`,
|
|
10
|
+
primaryButtonConfig: {
|
|
11
|
+
text: "Clear filter",
|
|
12
|
+
onClick: i
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { n as default };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=FilteredByTaskIdsBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilteredByTaskIdsBanner.js","names":[],"sources":["../../../../../src/features/curator/dashboard/components/FilteredByTaskIdsBanner.tsx"],"sourcesContent":["import FullWidthAlert from '@/components/FullWidthAlert/FullWidthAlert'\n\nexport type FilteredByTaskIdsBannerProps = {\n taskIds: number[] | undefined\n onClear: () => void\n}\n\n/**\n * Displayed above a curation task list when it is filtered down to a specific set of task IDs (via\n * the `taskIds` URL search param), with an action to clear the filter and return to the unfiltered list.\n */\nexport default function FilteredByTaskIdsBanner(\n props: FilteredByTaskIdsBannerProps,\n) {\n const { taskIds, onClear } = props\n\n if (!taskIds || taskIds.length === 0) {\n return null\n }\n\n return (\n <FullWidthAlert\n isGlobal={false}\n variant=\"info\"\n description={`Showing ${taskIds.length} filtered task${\n taskIds.length === 1 ? '' : 's'\n }`}\n primaryButtonConfig={{\n text: 'Clear filter',\n onClick: onClear,\n }}\n />\n )\n}\n"],"mappings":";;;AAWA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,YAAS,eAAY;CAM7B,OAJI,CAAC,KAAW,EAAQ,WAAW,IAC1B,OAIP,kBAAC,GAAD;EACE,UAAU;EACV,SAAQ;EACR,aAAa,WAAW,EAAQ,OAAO,gBACrC,EAAQ,WAAW,IAAI,KAAK;EAE9B,qBAAqB;GACnB,MAAM;GACN,SAAS;EACX;CACD,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataTasksPage.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetadataTasksPage.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"names":[],"mappings":"AAYA,OAAgC,EAC9B,4BAA4B,EAC7B,MAAM,2BAA2B,CAAA;AAElC,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED;;GAEG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,sBAAsB,2CAqE/D;AAED,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,GACzD,IAAI,CAAC,4BAA4B,EAAE,WAAW,CAAC,CAAA;AAEjD;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CAEtE;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAA"}
|
|
@@ -3,57 +3,60 @@ import { useGetFeatureFlag as t } from "../../../../synapse-queries/featureflags
|
|
|
3
3
|
import "../../../../synapse-queries/index.js";
|
|
4
4
|
import { FeatureFlagEnum as n } from "../../../../utils/featureflag/FeatureFlags.js";
|
|
5
5
|
import r from "../../../../components/layout/InfiniteTableLayout.js";
|
|
6
|
-
import {
|
|
7
|
-
import a from "
|
|
8
|
-
import o from "
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
6
|
+
import { useCurationTaskListFilters as i } from "../../../../utils/hooks/useCurationTaskListFilters.js";
|
|
7
|
+
import { useGetCurationTasksInfinite as a } from "../../../../synapse-queries/curation/task/useCurationTask.js";
|
|
8
|
+
import o from "../../../curator/dashboard/components/CurationTaskCard.js";
|
|
9
|
+
import s from "../../../curator/dashboard/components/FilteredByTaskIdsBanner.js";
|
|
10
|
+
import c from "./MetadataTasksPageRouter.js";
|
|
11
|
+
import { useMemo as l } from "react";
|
|
12
|
+
import { Button as u, FormControlLabel as d, Stack as f, Switch as p } from "@mui/material";
|
|
13
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
14
|
+
import { AddCircleTwoTone as g } from "@mui/icons-material";
|
|
15
|
+
import { useNavigate as _ } from "react-router";
|
|
14
16
|
//#region src/features/entity/metadata-task/components/MetadataTasksPage.tsx
|
|
15
|
-
function
|
|
16
|
-
let { projectId: _ } =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
})]
|
|
40
|
-
}), /* @__PURE__ */ p(r, {
|
|
41
|
-
table: /* @__PURE__ */ p(d, {
|
|
42
|
-
gap: 3,
|
|
43
|
-
sx: { my: 2 },
|
|
44
|
-
children: D.map((e) => /* @__PURE__ */ p(a, { taskBundle: e }, e.task?.taskId))
|
|
17
|
+
function v(c) {
|
|
18
|
+
let { projectId: v } = c, y = _(), { request: b, taskIds: x, assignedToMe: S, setAssignedToMe: C, clearTaskIdsFilter: w } = i({ projectId: v }), { data: T } = e(v), { data: E, isLoading: D, hasNextPage: O, fetchNextPage: k, isFetchingNextPage: A } = a(b), j = l(() => E?.pages.flatMap((e) => e.bundlePage ?? []) ?? [], [E]), M = t(n.CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON);
|
|
19
|
+
return /* @__PURE__ */ h(f, { children: [
|
|
20
|
+
/* @__PURE__ */ h(f, {
|
|
21
|
+
direction: "row",
|
|
22
|
+
justifyContent: "flex-end",
|
|
23
|
+
children: [/* @__PURE__ */ m(d, {
|
|
24
|
+
control: /* @__PURE__ */ m(p, {
|
|
25
|
+
checked: S,
|
|
26
|
+
onChange: (e, t) => {
|
|
27
|
+
C(t);
|
|
28
|
+
}
|
|
29
|
+
}),
|
|
30
|
+
label: "View only tasks assigned to me"
|
|
31
|
+
}), M && T?.canAddChild && /* @__PURE__ */ m(u, {
|
|
32
|
+
variant: "outlined",
|
|
33
|
+
onClick: () => void y("create"),
|
|
34
|
+
startIcon: /* @__PURE__ */ m(g, {}),
|
|
35
|
+
children: "New Task"
|
|
36
|
+
})]
|
|
37
|
+
}),
|
|
38
|
+
/* @__PURE__ */ m(s, {
|
|
39
|
+
taskIds: x,
|
|
40
|
+
onClear: w
|
|
45
41
|
}),
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
/* @__PURE__ */ m(r, {
|
|
43
|
+
table: /* @__PURE__ */ m(f, {
|
|
44
|
+
gap: 3,
|
|
45
|
+
sx: { my: 2 },
|
|
46
|
+
children: j.map((e) => /* @__PURE__ */ m(o, { taskBundle: e }, e.task?.taskId))
|
|
47
|
+
}),
|
|
48
|
+
isLoading: D,
|
|
49
|
+
isEmpty: !D && j.length === 0,
|
|
50
|
+
hasNextPage: O,
|
|
51
|
+
onFetchNextPageClicked: () => void k(),
|
|
52
|
+
isFetchingNextPage: A
|
|
53
|
+
})
|
|
54
|
+
] });
|
|
52
55
|
}
|
|
53
|
-
function
|
|
54
|
-
return /* @__PURE__ */
|
|
56
|
+
function y(e) {
|
|
57
|
+
return /* @__PURE__ */ m(c, { ...e });
|
|
55
58
|
}
|
|
56
59
|
//#endregion
|
|
57
|
-
export {
|
|
60
|
+
export { v as MetadataTasksPageInternal, y as default };
|
|
58
61
|
|
|
59
62
|
//# 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 CurationTaskCard from '@/features/curator/dashboard/components/CurationTaskCard'\nimport { useGetCurationTasksInfinite } from '@/synapse-queries/curation/task/useCurationTask'\nimport { useGetFeatureFlag } from '@/synapse-queries/index'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { Button, FormControlLabel, Stack, Switch } from '@mui/material'\nimport { useMemo
|
|
1
|
+
{"version":3,"file":"MetadataTasksPage.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPage.tsx"],"sourcesContent":["import InfiniteTableLayout from '@/components/layout/InfiniteTableLayout'\nimport CurationTaskCard from '@/features/curator/dashboard/components/CurationTaskCard'\nimport FilteredByTaskIdsBanner from '@/features/curator/dashboard/components/FilteredByTaskIdsBanner'\nimport { useGetCurationTasksInfinite } from '@/synapse-queries/curation/task/useCurationTask'\nimport { useGetFeatureFlag } from '@/synapse-queries/index'\nimport { useGetEntityPermissions } from '@/synapse-queries/entity/useEntity'\nimport { useCurationTaskListFilters } from '@/utils/hooks/useCurationTaskListFilters'\nimport { Button, FormControlLabel, Stack, Switch } from '@mui/material'\nimport { useMemo } from 'react'\nimport { AddCircleTwoTone } from '@mui/icons-material'\nimport { FeatureFlagEnum } from '@/utils/featureflag/FeatureFlags'\nimport { useNavigate } from 'react-router'\nimport MetadataTasksPageRouter, {\n MetadataTasksPageRouterProps,\n} from './MetadataTasksPageRouter'\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 */\nfunction MetadataTasksPageInternal(props: MetadataTaskTableProps) {\n const { projectId } = props\n const navigate = useNavigate()\n const {\n request,\n taskIds,\n assignedToMe,\n setAssignedToMe,\n clearTaskIdsFilter,\n } = useCurationTaskListFilters({ projectId })\n\n const { data: permissions } = useGetEntityPermissions(projectId)\n\n const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage } =\n useGetCurationTasksInfinite(request)\n\n const tasks = useMemo(\n () => data?.pages.flatMap(page => page.bundlePage ?? []) ?? [],\n [data],\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={assignedToMe}\n onChange={(_e, checked) => {\n setAssignedToMe(checked)\n }}\n />\n }\n label=\"View only tasks assigned to me\"\n />\n {showNewTaskButton && permissions?.canAddChild && (\n <Button\n variant=\"outlined\"\n onClick={() => void navigate('create')}\n startIcon={<AddCircleTwoTone />}\n >\n New Task\n </Button>\n )}\n </Stack>\n <FilteredByTaskIdsBanner taskIds={taskIds} onClear={clearTaskIdsFilter} />\n <InfiniteTableLayout\n table={\n <Stack gap={3} sx={{ my: 2 }}>\n {tasks.map(taskBundle => (\n <CurationTaskCard\n key={taskBundle.task?.taskId}\n taskBundle={taskBundle}\n />\n ))}\n </Stack>\n }\n isLoading={isLoading}\n isEmpty={!isLoading && tasks.length === 0}\n hasNextPage={hasNextPage}\n onFetchNextPageClicked={() => void fetchNextPage()}\n isFetchingNextPage={isFetchingNextPage}\n />\n </Stack>\n )\n}\n\nexport type MetadataTasksPageProps = MetadataTaskTableProps &\n Omit<MetadataTasksPageRouterProps, 'projectId'>\n\n/**\n * A page that displays a project's metadata curation tasks, with included routing logic for the\n * create/edit task pages.\n */\nexport default function MetadataTasksPage(props: MetadataTasksPageProps) {\n return <MetadataTasksPageRouter {...props} />\n}\n\nexport { MetadataTasksPageInternal }\n"],"mappings":";;;;;;;;;;;;;;;;AAuBA,SAAS,EAA0B,GAA+B;CAChE,IAAM,EAAE,iBAAc,GAChB,IAAW,EAAY,GACvB,EACJ,YACA,YACA,iBACA,oBACA,0BACE,EAA2B,EAAE,aAAU,CAAC,GAEtC,EAAE,MAAM,MAAgB,EAAwB,CAAS,GAEzD,EAAE,SAAM,cAAW,gBAAa,kBAAe,0BACnD,EAA4B,CAAO,GAE/B,IAAQ,QACN,GAAM,MAAM,SAAQ,MAAQ,EAAK,cAAc,CAAC,CAAC,KAAK,CAAC,GAC7D,CAAC,CAAI,CACP,GAEM,IAAoB,EACxB,EAAgB,uCAClB;CAEA,OACE,kBAAC,GAAD,EAAA,UAAA;EACE,kBAAC,GAAD;GAAO,WAAU;GAAM,gBAAe;aAAtC,CACE,kBAAC,GAAD;IACE,SACE,kBAAC,GAAD;KACE,SAAS;KACT,WAAW,GAAI,MAAY;MACzB,EAAgB,CAAO;KACzB;IACD,CAAA;IAEH,OAAM;GACP,CAAA,GACA,KAAqB,GAAa,eACjC,kBAAC,GAAD;IACE,SAAQ;IACR,eAAe,KAAK,EAAS,QAAQ;IACrC,WAAW,kBAAC,GAAD,CAAmB,CAAA;cAC/B;GAEO,CAAA,CAEL;;EACP,kBAAC,GAAD;GAAkC;GAAS,SAAS;EAAqB,CAAA;EACzE,kBAAC,GAAD;GACE,OACE,kBAAC,GAAD;IAAO,KAAK;IAAG,IAAI,EAAE,IAAI,EAAE;cACxB,EAAM,KAAI,MACT,kBAAC,GAAD,EAEc,cACb,GAFM,EAAW,MAAM,MAEvB,CACF;GACI,CAAA;GAEE;GACX,SAAS,CAAC,KAAa,EAAM,WAAW;GAC3B;GACb,8BAA8B,KAAK,EAAc;GAC7B;EACrB,CAAA;CACI,EAAA,CAAA;AAEX;AASA,SAAwB,EAAkB,GAA+B;CACvE,OAAO,kBAAC,GAAD,EAAyB,GAAI,EAAQ,CAAA;AAC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataTasksPageRouter.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPageRouter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"MetadataTasksPageRouter.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPageRouter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAA;AAUlD,MAAM,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;IAC3D,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB,2GAA2G;IAC3G,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,2CA4CpC"}
|
|
@@ -1,43 +1,39 @@
|
|
|
1
|
-
import e from "../create-task/
|
|
2
|
-
import t from "../create-task/
|
|
1
|
+
import e from "../create-task/EditCurationTaskPage.js";
|
|
2
|
+
import { getCurationTaskFlowRoutes as t } from "../create-task/curationTaskFlowRoutes.js";
|
|
3
3
|
import { MetadataTasksPageInternal as n } from "./MetadataTasksPage.js";
|
|
4
4
|
import { useMemo as r } from "react";
|
|
5
5
|
import { jsx as i } from "react/jsx-runtime";
|
|
6
|
-
import { RouterProvider as a, createBrowserRouter as o, createMemoryRouter as s
|
|
7
|
-
import { RouterProvider as
|
|
6
|
+
import { RouterProvider as a, createBrowserRouter as o, createMemoryRouter as s } from "react-router";
|
|
7
|
+
import { RouterProvider as c } from "react-router/dom";
|
|
8
8
|
//#region src/features/entity/metadata-task/components/MetadataTasksPageRouter.tsx
|
|
9
|
-
function
|
|
10
|
-
let
|
|
11
|
-
return /* @__PURE__ */ i(e, {
|
|
12
|
-
projectId: t.projectId,
|
|
13
|
-
onExit: () => void n("/")
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
function d(e) {
|
|
17
|
-
let { projectId: c, routerBaseName: d, useMemoryRouter: f = !1 } = e, p = r(() => [{
|
|
9
|
+
function l(l) {
|
|
10
|
+
let { projectId: u, routerBaseName: d, useMemoryRouter: f = !1 } = l, p = r(() => [{
|
|
18
11
|
path: "/",
|
|
19
12
|
children: [
|
|
20
13
|
{
|
|
21
14
|
index: !0,
|
|
22
|
-
element: /* @__PURE__ */ i(n, { projectId:
|
|
15
|
+
element: /* @__PURE__ */ i(n, { projectId: u })
|
|
23
16
|
},
|
|
24
17
|
{
|
|
25
|
-
path: "create
|
|
26
|
-
|
|
18
|
+
path: "create",
|
|
19
|
+
children: t({
|
|
20
|
+
projectId: u,
|
|
21
|
+
exitPath: "/"
|
|
22
|
+
})
|
|
27
23
|
},
|
|
28
24
|
{
|
|
29
25
|
path: "edit/:taskId",
|
|
30
|
-
element: /* @__PURE__ */ i(
|
|
26
|
+
element: /* @__PURE__ */ i(e, {})
|
|
31
27
|
}
|
|
32
28
|
]
|
|
33
|
-
}], [
|
|
29
|
+
}], [u]), m = r(() => f ? s(p, { basename: d }) : o(p, { basename: d }), [
|
|
34
30
|
f,
|
|
35
31
|
p,
|
|
36
32
|
d
|
|
37
33
|
]);
|
|
38
|
-
return i(f ? a :
|
|
34
|
+
return i(f ? a : c, { router: m });
|
|
39
35
|
}
|
|
40
36
|
//#endregion
|
|
41
|
-
export {
|
|
37
|
+
export { l as default };
|
|
42
38
|
|
|
43
39
|
//# sourceMappingURL=MetadataTasksPageRouter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetadataTasksPageRouter.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPageRouter.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"MetadataTasksPageRouter.js","names":[],"sources":["../../../../../src/features/entity/metadata-task/components/MetadataTasksPageRouter.tsx"],"sourcesContent":["import { getCurationTaskFlowRoutes } from '@/features/entity/metadata-task/create-task/curationTaskFlowRoutes'\nimport EditCurationTaskPage from '@/features/entity/metadata-task/create-task/EditCurationTaskPage'\nimport { PropsWithChildren, useMemo } from 'react'\nimport {\n createBrowserRouter,\n createMemoryRouter,\n RouteObject,\n RouterProvider,\n} from 'react-router'\nimport { RouterProvider as DOMRouterProvider } from 'react-router/dom'\nimport { MetadataTasksPageInternal } from './MetadataTasksPage'\n\nexport type MetadataTasksPageRouterProps = PropsWithChildren<{\n projectId: string\n /**\n * Used to determine the base path for the component. In SWC, this should be /Synapse:syn123/metadata/\n * (replacing syn123 with the project ID).\n */\n routerBaseName: string\n /** If true use a MemoryRouter, which prevents the browser URL from updating. For testing purposes only. */\n useMemoryRouter?: boolean\n}>\n\n/**\n * A router wrapper for `MetadataTasksPage`, which applies a router around the page content to support\n * page-based create/edit flows for curation tasks, mirroring `GridPageRouter`.\n */\nexport default function MetadataTasksPageRouter(\n props: MetadataTasksPageRouterProps,\n) {\n const { projectId, routerBaseName, useMemoryRouter = false } = props\n\n const routes: RouteObject[] = useMemo(\n () => [\n {\n path: '/',\n children: [\n {\n index: true,\n element: <MetadataTasksPageInternal projectId={projectId} />,\n },\n {\n path: 'create',\n children: getCurationTaskFlowRoutes({ projectId, exitPath: '/' }),\n },\n {\n path: 'edit/:taskId',\n element: <EditCurationTaskPage />,\n },\n ],\n },\n ],\n [projectId],\n )\n\n const router = useMemo(() => {\n if (useMemoryRouter) {\n return createMemoryRouter(routes, {\n basename: routerBaseName,\n })\n } else {\n return createBrowserRouter(routes, {\n basename: routerBaseName,\n })\n }\n }, [useMemoryRouter, routes, routerBaseName])\n\n if (useMemoryRouter) {\n return <RouterProvider router={router} />\n }\n\n return <DOMRouterProvider router={router} />\n}\n"],"mappings":";;;;;;;;AA2BA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,cAAW,mBAAgB,qBAAkB,OAAU,GAEzD,IAAwB,QACtB,CACJ;EACE,MAAM;EACN,UAAU;GACR;IACE,OAAO;IACP,SAAS,kBAAC,GAAD,EAAsC,aAAY,CAAA;GAC7D;GACA;IACE,MAAM;IACN,UAAU,EAA0B;KAAE;KAAW,UAAU;IAAI,CAAC;GAClE;GACA;IACE,MAAM;IACN,SAAS,kBAAC,GAAD,CAAuB,CAAA;GAClC;EACF;CACF,CACF,GACA,CAAC,CAAS,CACZ,GAEM,IAAS,QACT,IACK,EAAmB,GAAQ,EAChC,UAAU,EACZ,CAAC,IAEM,EAAoB,GAAQ,EACjC,UAAU,EACZ,CAAC,GAEF;EAAC;EAAiB;EAAQ;CAAc,CAAC;CAM5C,OAHS,EADL,IACM,IAGF,GAHC,EAAwB,UAAS,CAAA;AAI5C"}
|
|
@@ -35,7 +35,7 @@ export type ComputeTaskFormProps = {
|
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
37
|
* The create/edit form for a Compute Data curation task. Used as step 2 of the create wizard
|
|
38
|
-
* (`
|
|
38
|
+
* (`getCurationTaskFlowRoutes`) and directly by `EditCurationTaskPage`.
|
|
39
39
|
*/
|
|
40
40
|
export default function ComputeTaskForm(props: ComputeTaskFormProps): import("react/jsx-runtime").JSX.Element;
|
|
41
41
|
//# sourceMappingURL=ComputeTaskForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComputeTaskForm.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/ComputeTaskForm.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAEb,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"ComputeTaskForm.d.ts","sourceRoot":"","sources":["../../../../../src/features/entity/metadata-task/create-task/ComputeTaskForm.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAEb,MAAM,kCAAkC,CAAA;AAsBzC,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACxC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACtC,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAsJlE"}
|