@burdenoff/microfe-planmagnet 2026.730.1 → 2026.730.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksCreateTaskPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TasksCreateTaskPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"names":[],"mappings":"AAgDA,wBAAgB,uBAAuB,4CAiMtC"}
|
|
@@ -2,11 +2,11 @@ import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
|
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { CheckSquare as n, Save as r, X as i } from "lucide-react";
|
|
4
4
|
import { gql as a } from "@apollo/client";
|
|
5
|
-
import { useMutation as o } from "@apollo/client/react";
|
|
6
|
-
import { jsx as
|
|
7
|
-
import { Button as
|
|
5
|
+
import { useMutation as o, useQuery as s } from "@apollo/client/react";
|
|
6
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
+
import { Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, Input as h } from "@burdenoff/fe-libs/ui";
|
|
8
8
|
//#region src/planmagnet/pages/TasksCreateTaskPagePage.tsx
|
|
9
|
-
var
|
|
9
|
+
var g = a`
|
|
10
10
|
mutation CreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {
|
|
11
11
|
planmagnetCreateWorkItem(input: $input) {
|
|
12
12
|
id
|
|
@@ -22,112 +22,137 @@ var h = a`
|
|
|
22
22
|
createdAt
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
`, _ = a`
|
|
26
|
+
query GetProjectsForTaskCreate($workspaceId: ID!) {
|
|
27
|
+
planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
28
|
+
items {
|
|
29
|
+
id
|
|
30
|
+
name
|
|
31
|
+
key
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
25
35
|
`;
|
|
26
|
-
function
|
|
27
|
-
let { workspaceId: a } = e(), [
|
|
36
|
+
function v() {
|
|
37
|
+
let { workspaceId: a } = e(), [v, y] = t({
|
|
28
38
|
title: "",
|
|
29
39
|
description: "",
|
|
30
|
-
|
|
40
|
+
projectId: "",
|
|
31
41
|
priority: "MEDIUM",
|
|
32
42
|
type: "STORY",
|
|
33
43
|
storyPoints: "5",
|
|
34
44
|
labels: "",
|
|
35
45
|
sprintId: "",
|
|
36
46
|
dueDate: ""
|
|
37
|
-
}),
|
|
38
|
-
|
|
47
|
+
}), { data: b } = s(_, {
|
|
48
|
+
variables: { workspaceId: a ?? "default" },
|
|
49
|
+
skip: !a
|
|
50
|
+
}), x = b?.planmagnetProjects?.items ?? [], S = v.projectId || x[0]?.id || "", [C, { loading: w, error: T }] = o(g, { refetchQueries: ["GetWorkItems"] });
|
|
51
|
+
return /* @__PURE__ */ l("div", {
|
|
39
52
|
className: "space-y-6 p-6 max-w-4xl",
|
|
40
53
|
children: [
|
|
41
|
-
/* @__PURE__ */
|
|
54
|
+
/* @__PURE__ */ l("div", {
|
|
42
55
|
className: "flex items-center justify-between",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
56
|
+
children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
|
|
44
57
|
className: "text-2xl font-semibold",
|
|
45
58
|
children: "Create Task"
|
|
46
|
-
}), /* @__PURE__ */
|
|
59
|
+
}), /* @__PURE__ */ c("p", {
|
|
47
60
|
className: "text-sm text-muted-foreground",
|
|
48
61
|
children: "Add a new task to the project backlog."
|
|
49
|
-
})] }), /* @__PURE__ */
|
|
62
|
+
})] }), /* @__PURE__ */ l("div", {
|
|
50
63
|
className: "flex gap-2",
|
|
51
|
-
children: [/* @__PURE__ */
|
|
64
|
+
children: [/* @__PURE__ */ l(u, {
|
|
52
65
|
variant: "outline",
|
|
53
66
|
size: "sm",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
55
|
-
}), /* @__PURE__ */
|
|
67
|
+
children: [/* @__PURE__ */ c(i, { className: "mr-1 h-4 w-4" }), "Cancel"]
|
|
68
|
+
}), /* @__PURE__ */ l(u, {
|
|
56
69
|
size: "sm",
|
|
57
70
|
onClick: async () => {
|
|
58
|
-
!
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
!v.title.trim() || !S || !a || await C({ variables: { input: {
|
|
72
|
+
projectId: S,
|
|
73
|
+
title: v.title,
|
|
74
|
+
description: v.description || void 0,
|
|
75
|
+
type: v.type,
|
|
76
|
+
priority: v.priority,
|
|
77
|
+
storyPoints: v.storyPoints ? parseInt(v.storyPoints, 10) : void 0,
|
|
78
|
+
labels: v.labels ? v.labels.split(",").map((e) => e.trim()).filter(Boolean) : void 0,
|
|
79
|
+
sprintId: v.sprintId || void 0,
|
|
80
|
+
dueDate: v.dueDate || void 0
|
|
67
81
|
} } });
|
|
68
82
|
},
|
|
69
|
-
disabled:
|
|
70
|
-
children: [/* @__PURE__ */
|
|
83
|
+
disabled: w || !v.title.trim() || !S,
|
|
84
|
+
children: [/* @__PURE__ */ c(r, { className: "mr-1 h-4 w-4" }), w ? "Creating..." : "Create Task"]
|
|
71
85
|
})]
|
|
72
86
|
})]
|
|
73
87
|
}),
|
|
74
|
-
|
|
88
|
+
T && /* @__PURE__ */ l("div", {
|
|
75
89
|
className: "p-6 text-red-500",
|
|
76
|
-
children: ["Error: ",
|
|
90
|
+
children: ["Error: ", T.message]
|
|
77
91
|
}),
|
|
78
|
-
/* @__PURE__ */
|
|
92
|
+
/* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ l(m, {
|
|
79
93
|
className: "flex items-center gap-2",
|
|
80
|
-
children: [/* @__PURE__ */
|
|
81
|
-
}) }), /* @__PURE__ */
|
|
94
|
+
children: [/* @__PURE__ */ c(n, { className: "h-4 w-4" }), "Task Details"]
|
|
95
|
+
}) }), /* @__PURE__ */ l(f, {
|
|
82
96
|
className: "space-y-4",
|
|
83
97
|
children: [
|
|
84
|
-
/* @__PURE__ */
|
|
98
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
85
99
|
className: "text-sm font-medium",
|
|
86
100
|
children: "Title"
|
|
87
|
-
}), /* @__PURE__ */
|
|
88
|
-
value:
|
|
89
|
-
onChange: (e) =>
|
|
90
|
-
...
|
|
101
|
+
}), /* @__PURE__ */ c(h, {
|
|
102
|
+
value: v.title,
|
|
103
|
+
onChange: (e) => y({
|
|
104
|
+
...v,
|
|
91
105
|
title: e.target.value
|
|
92
106
|
}),
|
|
93
107
|
className: "mt-1",
|
|
94
108
|
placeholder: "e.g. Implement search query parser"
|
|
95
109
|
})] }),
|
|
96
|
-
/* @__PURE__ */
|
|
110
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
97
111
|
className: "text-sm font-medium",
|
|
98
112
|
children: "Description"
|
|
99
|
-
}), /* @__PURE__ */
|
|
113
|
+
}), /* @__PURE__ */ c("textarea", {
|
|
100
114
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[100px]",
|
|
101
|
-
value:
|
|
102
|
-
onChange: (e) =>
|
|
103
|
-
...
|
|
115
|
+
value: v.description,
|
|
116
|
+
onChange: (e) => y({
|
|
117
|
+
...v,
|
|
104
118
|
description: e.target.value
|
|
105
119
|
}),
|
|
106
120
|
placeholder: "Describe the task requirements..."
|
|
107
121
|
})] }),
|
|
108
|
-
/* @__PURE__ */
|
|
122
|
+
/* @__PURE__ */ l("div", {
|
|
109
123
|
className: "grid grid-cols-3 gap-4",
|
|
110
124
|
children: [
|
|
111
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
112
126
|
className: "text-sm font-medium",
|
|
113
127
|
children: "Project"
|
|
114
|
-
}), /* @__PURE__ */
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
128
|
+
}), /* @__PURE__ */ l("select", {
|
|
129
|
+
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
|
|
130
|
+
value: S,
|
|
131
|
+
onChange: (e) => y({
|
|
132
|
+
...v,
|
|
133
|
+
projectId: e.target.value
|
|
119
134
|
}),
|
|
120
|
-
|
|
121
|
-
|
|
135
|
+
children: [x.length === 0 && /* @__PURE__ */ c("option", {
|
|
136
|
+
value: "",
|
|
137
|
+
disabled: !0,
|
|
138
|
+
children: "No projects available"
|
|
139
|
+
}), x.map((e) => /* @__PURE__ */ l("option", {
|
|
140
|
+
value: e.id,
|
|
141
|
+
children: [
|
|
142
|
+
e.key,
|
|
143
|
+
" — ",
|
|
144
|
+
e.name
|
|
145
|
+
]
|
|
146
|
+
}, e.id))]
|
|
122
147
|
})] }),
|
|
123
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
124
149
|
className: "text-sm font-medium",
|
|
125
150
|
children: "Priority"
|
|
126
|
-
}), /* @__PURE__ */
|
|
151
|
+
}), /* @__PURE__ */ c("select", {
|
|
127
152
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
|
|
128
|
-
value:
|
|
129
|
-
onChange: (e) =>
|
|
130
|
-
...
|
|
153
|
+
value: v.priority,
|
|
154
|
+
onChange: (e) => y({
|
|
155
|
+
...v,
|
|
131
156
|
priority: e.target.value
|
|
132
157
|
}),
|
|
133
158
|
children: [
|
|
@@ -135,19 +160,19 @@ function g() {
|
|
|
135
160
|
"MEDIUM",
|
|
136
161
|
"HIGH",
|
|
137
162
|
"CRITICAL"
|
|
138
|
-
].map((e) => /* @__PURE__ */
|
|
163
|
+
].map((e) => /* @__PURE__ */ c("option", {
|
|
139
164
|
value: e,
|
|
140
165
|
children: e.toLowerCase()
|
|
141
166
|
}, e))
|
|
142
167
|
})] }),
|
|
143
|
-
/* @__PURE__ */
|
|
168
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
144
169
|
className: "text-sm font-medium",
|
|
145
170
|
children: "Type"
|
|
146
|
-
}), /* @__PURE__ */
|
|
171
|
+
}), /* @__PURE__ */ c("select", {
|
|
147
172
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
|
|
148
|
-
value:
|
|
149
|
-
onChange: (e) =>
|
|
150
|
-
...
|
|
173
|
+
value: v.type,
|
|
174
|
+
onChange: (e) => y({
|
|
175
|
+
...v,
|
|
151
176
|
type: e.target.value
|
|
152
177
|
}),
|
|
153
178
|
children: [
|
|
@@ -156,61 +181,61 @@ function g() {
|
|
|
156
181
|
"TASK",
|
|
157
182
|
"EPIC",
|
|
158
183
|
"SUBTASK"
|
|
159
|
-
].map((e) => /* @__PURE__ */
|
|
184
|
+
].map((e) => /* @__PURE__ */ c("option", {
|
|
160
185
|
value: e,
|
|
161
186
|
children: e.toLowerCase()
|
|
162
187
|
}, e))
|
|
163
188
|
})] })
|
|
164
189
|
]
|
|
165
190
|
}),
|
|
166
|
-
/* @__PURE__ */
|
|
191
|
+
/* @__PURE__ */ l("div", {
|
|
167
192
|
className: "grid grid-cols-3 gap-4",
|
|
168
193
|
children: [
|
|
169
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
170
195
|
className: "text-sm font-medium",
|
|
171
196
|
children: "Story Points"
|
|
172
|
-
}), /* @__PURE__ */
|
|
197
|
+
}), /* @__PURE__ */ c(h, {
|
|
173
198
|
type: "number",
|
|
174
|
-
value:
|
|
175
|
-
onChange: (e) =>
|
|
176
|
-
...
|
|
199
|
+
value: v.storyPoints,
|
|
200
|
+
onChange: (e) => y({
|
|
201
|
+
...v,
|
|
177
202
|
storyPoints: e.target.value
|
|
178
203
|
}),
|
|
179
204
|
className: "mt-1"
|
|
180
205
|
})] }),
|
|
181
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
182
207
|
className: "text-sm font-medium",
|
|
183
208
|
children: "Sprint ID"
|
|
184
|
-
}), /* @__PURE__ */
|
|
185
|
-
value:
|
|
186
|
-
onChange: (e) =>
|
|
187
|
-
...
|
|
209
|
+
}), /* @__PURE__ */ c(h, {
|
|
210
|
+
value: v.sprintId,
|
|
211
|
+
onChange: (e) => y({
|
|
212
|
+
...v,
|
|
188
213
|
sprintId: e.target.value
|
|
189
214
|
}),
|
|
190
215
|
className: "mt-1",
|
|
191
216
|
placeholder: "Sprint ID"
|
|
192
217
|
})] }),
|
|
193
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
194
219
|
className: "text-sm font-medium",
|
|
195
220
|
children: "Due Date"
|
|
196
|
-
}), /* @__PURE__ */
|
|
221
|
+
}), /* @__PURE__ */ c(h, {
|
|
197
222
|
type: "date",
|
|
198
|
-
value:
|
|
199
|
-
onChange: (e) =>
|
|
200
|
-
...
|
|
223
|
+
value: v.dueDate,
|
|
224
|
+
onChange: (e) => y({
|
|
225
|
+
...v,
|
|
201
226
|
dueDate: e.target.value
|
|
202
227
|
}),
|
|
203
228
|
className: "mt-1"
|
|
204
229
|
})] })
|
|
205
230
|
]
|
|
206
231
|
}),
|
|
207
|
-
/* @__PURE__ */
|
|
232
|
+
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
208
233
|
className: "text-sm font-medium",
|
|
209
234
|
children: "Labels (comma-separated)"
|
|
210
|
-
}), /* @__PURE__ */
|
|
211
|
-
value:
|
|
212
|
-
onChange: (e) =>
|
|
213
|
-
...
|
|
235
|
+
}), /* @__PURE__ */ c(h, {
|
|
236
|
+
value: v.labels,
|
|
237
|
+
onChange: (e) => y({
|
|
238
|
+
...v,
|
|
214
239
|
labels: e.target.value
|
|
215
240
|
}),
|
|
216
241
|
className: "mt-1",
|
|
@@ -222,6 +247,6 @@ function g() {
|
|
|
222
247
|
});
|
|
223
248
|
}
|
|
224
249
|
//#endregion
|
|
225
|
-
export {
|
|
250
|
+
export { v as TasksCreateTaskPagePage };
|
|
226
251
|
|
|
227
252
|
//# sourceMappingURL=TasksCreateTaskPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksCreateTaskPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, CheckSquare } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst CREATE_WORK_ITEM = gql`\n mutation CreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {\n planmagnetCreateWorkItem(input: $input) {\n id\n title\n type\n status\n priority\n key\n storyPoints\n dueDate\n labels\n sprintId\n createdAt\n }\n }\n`;\n\nexport function TasksCreateTaskPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [form, setForm] = useState({\n title: '',\n description: '',\n project: '',\n priority: 'MEDIUM',\n type: 'STORY',\n storyPoints: '5',\n labels: '',\n sprintId: '',\n dueDate: '',\n });\n\n const [createWorkItem, { loading: saving, error }] = useMutation(CREATE_WORK_ITEM, {\n refetchQueries: ['GetWorkItems'],\n });\n\n const handleCreate = async () => {\n if (!form.title.trim() || !workspaceId) return;\n await createWorkItem({\n variables: {\n input: {\n title: form.title,\n description: form.description || undefined,\n type: form.type,\n priority: form.priority,\n storyPoints: form.storyPoints ? parseInt(form.storyPoints, 10) : undefined,\n labels: form.labels\n ? form.labels\n .split(',')\n .map((l) => l.trim())\n .filter(Boolean)\n : undefined,\n sprintId: form.sprintId || undefined,\n dueDate: form.dueDate || undefined,\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Task</h1>\n <p className=\"text-sm text-muted-foreground\">Add a new task to the project backlog.</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\" onClick={handleCreate} disabled={saving}>\n <Save className=\"mr-1 h-4 w-4\" />\n {saving ? 'Creating...' : 'Create Task'}\n </Button>\n </div>\n </div>\n {error && <div className=\"p-6 text-red-500\">Error: {error.message}</div>}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckSquare className=\"h-4 w-4\" />\n Task Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Title</label>\n <Input\n value={form.title}\n onChange={(e) => setForm({ ...form, title: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Implement search query parser\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[100px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe the task requirements...\"\n />\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Project</label>\n <Input\n value={form.project}\n onChange={(e) => setForm({ ...form, project: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Project name\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Priority</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.priority}\n onChange={(e) => setForm({ ...form, priority: e.target.value })}\n >\n {['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'].map((p) => (\n <option key={p} value={p}>\n {p.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Type</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.type}\n onChange={(e) => setForm({ ...form, type: e.target.value })}\n >\n {['STORY', 'BUG', 'TASK', 'EPIC', 'SUBTASK'].map((t) => (\n <option key={t} value={t}>\n {t.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Story Points</label>\n <Input\n type=\"number\"\n value={form.storyPoints}\n onChange={(e) => setForm({ ...form, storyPoints: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Sprint ID</label>\n <Input\n value={form.sprintId}\n onChange={(e) => setForm({ ...form, sprintId: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Sprint ID\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Due Date</label>\n <Input\n type=\"date\"\n value={form.dueDate}\n onChange={(e) => setForm({ ...form, dueDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Labels (comma-separated)</label>\n <Input\n value={form.labels}\n onChange={(e) => setForm({ ...form, labels: e.target.value })}\n className=\"mt-1\"\n placeholder=\"backend, search, performance\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TasksCreateTaskPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, CheckSquare } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\ninterface PlanmagnetProjectOption {\n id: string;\n name: string;\n key: string;\n}\n\nconst CREATE_WORK_ITEM = gql`\n mutation CreateWorkItem($input: PlanmagnetCreateWorkItemInput!) {\n planmagnetCreateWorkItem(input: $input) {\n id\n title\n type\n status\n priority\n key\n storyPoints\n dueDate\n labels\n sprintId\n createdAt\n }\n }\n`;\n\n// BOFF-4442/4443 live-verify fix: a WorkItem must belong to a real project\n// (PlanmagnetCreateWorkItemInput.projectId is non-null); the form needs the\n// caller's actual projects to choose from rather than a free-text name.\nconst GET_PROJECTS = gql`\n query GetProjectsForTaskCreate($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n key\n }\n }\n }\n`;\n\nexport function TasksCreateTaskPagePage() {\n const { workspaceId } = usePlanMagnet();\n const [form, setForm] = useState({\n title: '',\n description: '',\n projectId: '',\n priority: 'MEDIUM',\n type: 'STORY',\n storyPoints: '5',\n labels: '',\n sprintId: '',\n dueDate: '',\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { data: projectsData } = useQuery<Record<string, any>>(GET_PROJECTS, {\n variables: { workspaceId: workspaceId ?? 'default' },\n skip: !workspaceId,\n });\n const projects: PlanmagnetProjectOption[] = projectsData?.planmagnetProjects?.items ?? [];\n // Fall back to the first loaded project when the user hasn't picked one\n // yet, without stashing derived state in an effect (avoids the extra\n // render cycle and keeps a single source of truth: `projects`).\n const selectedProjectId = form.projectId || projects[0]?.id || '';\n\n const [createWorkItem, { loading: saving, error }] = useMutation(CREATE_WORK_ITEM, {\n refetchQueries: ['GetWorkItems'],\n });\n\n const handleCreate = async () => {\n if (!form.title.trim() || !selectedProjectId || !workspaceId) return;\n await createWorkItem({\n variables: {\n input: {\n projectId: selectedProjectId,\n title: form.title,\n description: form.description || undefined,\n type: form.type,\n priority: form.priority,\n storyPoints: form.storyPoints ? parseInt(form.storyPoints, 10) : undefined,\n labels: form.labels\n ? form.labels\n .split(',')\n .map((l) => l.trim())\n .filter(Boolean)\n : undefined,\n sprintId: form.sprintId || undefined,\n dueDate: form.dueDate || undefined,\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Task</h1>\n <p className=\"text-sm text-muted-foreground\">Add a new task to the project backlog.</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleCreate}\n disabled={saving || !form.title.trim() || !selectedProjectId}\n >\n <Save className=\"mr-1 h-4 w-4\" />\n {saving ? 'Creating...' : 'Create Task'}\n </Button>\n </div>\n </div>\n {error && <div className=\"p-6 text-red-500\">Error: {error.message}</div>}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <CheckSquare className=\"h-4 w-4\" />\n Task Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Title</label>\n <Input\n value={form.title}\n onChange={(e) => setForm({ ...form, title: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Implement search query parser\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[100px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe the task requirements...\"\n />\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Project</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={selectedProjectId}\n onChange={(e) => setForm({ ...form, projectId: e.target.value })}\n >\n {projects.length === 0 && (\n <option value=\"\" disabled>\n No projects available\n </option>\n )}\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.key} — {p.name}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Priority</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.priority}\n onChange={(e) => setForm({ ...form, priority: e.target.value })}\n >\n {['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'].map((p) => (\n <option key={p} value={p}>\n {p.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Type</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.type}\n onChange={(e) => setForm({ ...form, type: e.target.value })}\n >\n {['STORY', 'BUG', 'TASK', 'EPIC', 'SUBTASK'].map((t) => (\n <option key={t} value={t}>\n {t.toLowerCase()}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Story Points</label>\n <Input\n type=\"number\"\n value={form.storyPoints}\n onChange={(e) => setForm({ ...form, storyPoints: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Sprint ID</label>\n <Input\n value={form.sprintId}\n onChange={(e) => setForm({ ...form, sprintId: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Sprint ID\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Due Date</label>\n <Input\n type=\"date\"\n value={form.dueDate}\n onChange={(e) => setForm({ ...form, dueDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Labels (comma-separated)</label>\n <Input\n value={form.labels}\n onChange={(e) => setForm({ ...form, labels: e.target.value })}\n className=\"mt-1\"\n placeholder=\"backend, search, performance\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|