@burdenoff/microfe-planmagnet 2026.927.5 → 2026.928.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +58 -54
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/board/ProjectBoard.d.ts +2 -0
- package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
- package/dist/planmagnet/board/ProjectBoard.js +546 -272
- package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.js +47 -40
- package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.d.ts +9 -0
- package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.js +87 -59
- package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
- package/dist/planmagnet/hooks/useProjectWorkflow.d.ts +32 -0
- package/dist/planmagnet/hooks/useProjectWorkflow.d.ts.map +1 -0
- package/dist/planmagnet/hooks/useProjectWorkflow.js +44 -0
- package/dist/planmagnet/hooks/useProjectWorkflow.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js +261 -0
- package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +8 -9
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
2
|
import { PersonName as n } from "../people/People.js";
|
|
3
3
|
import { throwOnError as r } from "../utils/mutationResult.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
4
|
+
import { allowedTargets as i, useProjectWorkflow as a, workflowLabel as o } from "../hooks/useProjectWorkflow.js";
|
|
5
|
+
import { createContext as s, useContext as c, useState as l } from "react";
|
|
6
|
+
import { ChevronLeft as u, ChevronRight as d, LayoutGrid as f, Pencil as p, Plus as m } from "lucide-react";
|
|
7
|
+
import { gql as h } from "@apollo/client";
|
|
8
|
+
import { useApolloClient as g, useMutation as _, useQuery as v } from "@apollo/client/react";
|
|
9
|
+
import { jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
10
|
+
import { AlertDialog as x, AlertDialogAction as S, AlertDialogCancel as ee, AlertDialogContent as C, AlertDialogDescription as w, AlertDialogFooter as te, AlertDialogHeader as T, AlertDialogTitle as E, AlertDialogTrigger as D, Button as O, Card as k, CardContent as ne, Input as A, ResponsiveDialog as re, ResponsiveDialogContent as ie, ResponsiveDialogDescription as j, ResponsiveDialogFooter as M, ResponsiveDialogHeader as N, ResponsiveDialogTitle as P, ResponsiveDialogTrigger as F } from "@burdenoff/fe-libs/ui";
|
|
10
11
|
//#region src/planmagnet/board/ProjectBoard.tsx
|
|
11
|
-
var
|
|
12
|
+
var I = [
|
|
12
13
|
"BACKLOG",
|
|
13
14
|
"TODO",
|
|
14
15
|
"IN_PROGRESS",
|
|
@@ -16,7 +17,10 @@ var te = [
|
|
|
16
17
|
"TESTING",
|
|
17
18
|
"DONE",
|
|
18
19
|
"CANCELLED"
|
|
19
|
-
],
|
|
20
|
+
], L = s(null), R = () => {
|
|
21
|
+
let e = c(L);
|
|
22
|
+
return (t) => o(e, t);
|
|
23
|
+
}, z = (e) => e.charAt(0) + e.slice(1).toLowerCase().replace(/_/g, " "), B = 100, V = h`
|
|
20
24
|
query ProjectBoards($workspaceId: ID!, $projectId: String) {
|
|
21
25
|
planmagnetBoards(
|
|
22
26
|
workspaceId: $workspaceId
|
|
@@ -30,7 +34,30 @@ var te = [
|
|
|
30
34
|
}
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
|
-
`,
|
|
37
|
+
`, H = h`
|
|
38
|
+
query ProjectBoardColumnPage($boardId: ID!, $columnId: ID!, $after: String) {
|
|
39
|
+
planmagnetBoardColumnCards(
|
|
40
|
+
boardId: $boardId
|
|
41
|
+
columnId: $columnId
|
|
42
|
+
pagination: { first: 100, after: $after }
|
|
43
|
+
) {
|
|
44
|
+
pageInfo {
|
|
45
|
+
hasNextPage
|
|
46
|
+
endCursor
|
|
47
|
+
}
|
|
48
|
+
items {
|
|
49
|
+
id
|
|
50
|
+
key
|
|
51
|
+
title
|
|
52
|
+
status
|
|
53
|
+
priority
|
|
54
|
+
storyPoints
|
|
55
|
+
assigneeId
|
|
56
|
+
statusSince
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
`, U = h`
|
|
34
61
|
query ProjectBoard($id: ID!) {
|
|
35
62
|
planmagnetBoard(id: $id) {
|
|
36
63
|
id
|
|
@@ -44,6 +71,10 @@ var te = [
|
|
|
44
71
|
sortOrder
|
|
45
72
|
cards(pagination: { first: 100 }) {
|
|
46
73
|
totalCount
|
|
74
|
+
pageInfo {
|
|
75
|
+
hasNextPage
|
|
76
|
+
endCursor
|
|
77
|
+
}
|
|
47
78
|
items {
|
|
48
79
|
id
|
|
49
80
|
key
|
|
@@ -52,434 +83,677 @@ var te = [
|
|
|
52
83
|
priority
|
|
53
84
|
storyPoints
|
|
54
85
|
assigneeId
|
|
86
|
+
statusSince
|
|
55
87
|
}
|
|
56
88
|
}
|
|
57
89
|
}
|
|
58
90
|
}
|
|
59
91
|
}
|
|
60
|
-
`,
|
|
92
|
+
`, W = h`
|
|
61
93
|
mutation ProjectBoardMoveCard($boardId: ID!, $input: PlanmagnetMoveCardInput!) {
|
|
62
94
|
planmagnetMoveCard(boardId: $boardId, input: $input) {
|
|
63
95
|
id
|
|
64
96
|
}
|
|
65
97
|
}
|
|
66
|
-
`,
|
|
98
|
+
`, G = h`
|
|
67
99
|
mutation ProjectBoardCreate($input: PlanmagnetCreateBoardInput!) {
|
|
68
100
|
planmagnetCreateBoard(input: $input) {
|
|
69
101
|
id
|
|
70
102
|
}
|
|
71
103
|
}
|
|
72
|
-
`,
|
|
104
|
+
`, K = h`
|
|
73
105
|
mutation ProjectBoardCreateColumn($input: PlanmagnetCreateBoardColumnInput!) {
|
|
74
106
|
planmagnetCreateBoardColumn(input: $input) {
|
|
75
107
|
id
|
|
76
108
|
}
|
|
77
109
|
}
|
|
78
|
-
`,
|
|
110
|
+
`, q = h`
|
|
79
111
|
mutation ProjectBoardUpdateColumn($id: ID!, $input: PlanmagnetUpdateBoardColumnInput!) {
|
|
80
112
|
planmagnetUpdateBoardColumn(id: $id, input: $input) {
|
|
81
113
|
id
|
|
82
114
|
}
|
|
83
115
|
}
|
|
84
|
-
`,
|
|
116
|
+
`, ae = h`
|
|
85
117
|
mutation ProjectBoardDeleteColumn($id: ID!) {
|
|
86
118
|
planmagnetDeleteBoardColumn(id: $id)
|
|
87
119
|
}
|
|
88
|
-
`,
|
|
120
|
+
`, oe = h`
|
|
89
121
|
mutation ProjectBoardReorder($boardId: ID!, $input: PlanmagnetReorderColumnsInput!) {
|
|
90
122
|
planmagnetReorderColumns(boardId: $boardId, input: $input) {
|
|
91
123
|
id
|
|
92
124
|
}
|
|
93
125
|
}
|
|
94
|
-
`,
|
|
126
|
+
`, J = [
|
|
95
127
|
"ProjectBoard",
|
|
96
128
|
"ProjectBoards",
|
|
97
129
|
"GetWorkItems",
|
|
98
130
|
"GetWorkItemCounts",
|
|
99
131
|
"GetDashboardData"
|
|
100
|
-
],
|
|
101
|
-
|
|
102
|
-
|
|
132
|
+
], Y = [
|
|
133
|
+
"CRITICAL",
|
|
134
|
+
"HIGH",
|
|
135
|
+
"MEDIUM",
|
|
136
|
+
"LOW",
|
|
137
|
+
"NONE"
|
|
138
|
+
], se = 864e5;
|
|
139
|
+
function X(e, t) {
|
|
140
|
+
return e ? Math.max(0, Math.floor((t - new Date(e).getTime()) / se)) : null;
|
|
141
|
+
}
|
|
142
|
+
function ce(e) {
|
|
143
|
+
return e >= 14 ? "text-destructive font-medium" : e >= 7 ? "text-status-warning-text" : "text-muted-foreground";
|
|
144
|
+
}
|
|
145
|
+
function Z(e, t) {
|
|
146
|
+
return t === "assignee" ? e.assigneeId ?? "" : t === "priority" ? e.priority || "NONE" : "";
|
|
147
|
+
}
|
|
148
|
+
var Q = (e, t) => e instanceof Error ? e.message : t;
|
|
149
|
+
function $({ message: e }) {
|
|
150
|
+
return /* @__PURE__ */ y("p", {
|
|
103
151
|
role: "alert",
|
|
104
152
|
className: "text-sm text-destructive",
|
|
105
153
|
children: e
|
|
106
154
|
});
|
|
107
155
|
}
|
|
108
|
-
function
|
|
109
|
-
let { workspaceId:
|
|
156
|
+
function le({ projectId: t, projectName: n }) {
|
|
157
|
+
let { workspaceId: i } = e(), o = g(), [s, c] = l(null), [u, d] = l(null), [p] = l(() => Date.now()), [h, x] = l("none"), [S, ee] = l({
|
|
158
|
+
key: null,
|
|
159
|
+
byColumn: {}
|
|
160
|
+
}), [C, w] = l(null), te = a(t), { data: T, loading: E } = v(V, {
|
|
110
161
|
variables: {
|
|
111
|
-
workspaceId:
|
|
162
|
+
workspaceId: i,
|
|
112
163
|
projectId: t
|
|
113
164
|
},
|
|
114
|
-
skip: !
|
|
115
|
-
}),
|
|
116
|
-
variables: { id:
|
|
117
|
-
skip: !
|
|
118
|
-
}),
|
|
119
|
-
|
|
165
|
+
skip: !i
|
|
166
|
+
}), D = T?.planmagnetBoards.items ?? [], A = (s && D.some((e) => e.id === s) ? s : null) ?? D.find((e) => e.isDefault)?.id ?? D[0]?.id ?? null, { data: re, loading: ie } = v(U, {
|
|
167
|
+
variables: { id: A },
|
|
168
|
+
skip: !A
|
|
169
|
+
}), j = re?.planmagnetBoard ?? null, M = S.key === j ? S.byColumn : {}, N = (e) => {
|
|
170
|
+
let t = M[e.id];
|
|
171
|
+
return {
|
|
172
|
+
items: t ? [...e.cards.items, ...t.items] : e.cards.items,
|
|
173
|
+
pageInfo: t ? t.pageInfo : e.cards.pageInfo,
|
|
174
|
+
totalCount: e.cards.totalCount
|
|
175
|
+
};
|
|
176
|
+
}, P = async (e) => {
|
|
177
|
+
let t = N(e).pageInfo.endCursor;
|
|
178
|
+
if (!(!j || !t)) {
|
|
179
|
+
d(null), w(e.id);
|
|
180
|
+
try {
|
|
181
|
+
let n = await o.query({
|
|
182
|
+
query: H,
|
|
183
|
+
variables: {
|
|
184
|
+
boardId: j.id,
|
|
185
|
+
columnId: e.id,
|
|
186
|
+
after: t
|
|
187
|
+
},
|
|
188
|
+
fetchPolicy: "network-only"
|
|
189
|
+
}), r = n.data?.planmagnetBoardColumnCards;
|
|
190
|
+
if (!r) throw Error(n.error?.message ?? "The next cards could not be loaded.");
|
|
191
|
+
let i = M[e.id]?.items ?? [];
|
|
192
|
+
ee({
|
|
193
|
+
key: j,
|
|
194
|
+
byColumn: {
|
|
195
|
+
...M,
|
|
196
|
+
[e.id]: {
|
|
197
|
+
items: [...i, ...r.items],
|
|
198
|
+
pageInfo: r.pageInfo
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
} catch (e) {
|
|
203
|
+
d(Q(e, "The next cards could not be loaded."));
|
|
204
|
+
} finally {
|
|
205
|
+
w(null);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}, [F, I] = _(G, {
|
|
209
|
+
refetchQueries: J,
|
|
120
210
|
awaitRefetchQueries: !0
|
|
121
|
-
}), [
|
|
122
|
-
refetchQueries:
|
|
211
|
+
}), [R, z] = _(W, {
|
|
212
|
+
refetchQueries: J,
|
|
123
213
|
awaitRefetchQueries: !0
|
|
124
|
-
}), [
|
|
125
|
-
refetchQueries:
|
|
214
|
+
}), [B] = _(oe, {
|
|
215
|
+
refetchQueries: J,
|
|
126
216
|
awaitRefetchQueries: !0
|
|
127
|
-
}),
|
|
128
|
-
|
|
217
|
+
}), K = async (e, t) => {
|
|
218
|
+
d(null);
|
|
129
219
|
try {
|
|
130
220
|
await r(e());
|
|
131
221
|
} catch (e) {
|
|
132
|
-
|
|
222
|
+
d(Q(e, t));
|
|
133
223
|
}
|
|
134
|
-
},
|
|
135
|
-
boardId:
|
|
224
|
+
}, q = (e, t) => K(() => R({ variables: {
|
|
225
|
+
boardId: A,
|
|
136
226
|
input: {
|
|
137
227
|
workItemId: e,
|
|
138
228
|
targetColumnId: t
|
|
139
229
|
}
|
|
140
|
-
} }), "The card could not be moved."),
|
|
141
|
-
if (!
|
|
142
|
-
let n =
|
|
143
|
-
if (!(r < 0 || r >= n.length)) return [n[e], n[r]] = [n[r], n[e]],
|
|
144
|
-
boardId:
|
|
230
|
+
} }), "The card could not be moved."), ae = (e, t) => {
|
|
231
|
+
if (!j) return;
|
|
232
|
+
let n = j.columns.map((e) => e.id), r = e + t;
|
|
233
|
+
if (!(r < 0 || r >= n.length)) return [n[e], n[r]] = [n[r], n[e]], K(() => B({ variables: {
|
|
234
|
+
boardId: A,
|
|
145
235
|
input: { columnIds: n }
|
|
146
236
|
} }), "The columns could not be reordered.");
|
|
147
237
|
};
|
|
148
|
-
return
|
|
238
|
+
return E && !T ? /* @__PURE__ */ y("p", {
|
|
149
239
|
className: "text-sm text-muted-foreground p-4",
|
|
150
240
|
children: "Loading board…"
|
|
151
|
-
}) :
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
children: e
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
241
|
+
}) : A ? /* @__PURE__ */ y(L.Provider, {
|
|
242
|
+
value: te,
|
|
243
|
+
children: /* @__PURE__ */ b("div", {
|
|
244
|
+
className: "space-y-3",
|
|
245
|
+
"data-testid": "project-board",
|
|
246
|
+
children: [
|
|
247
|
+
/* @__PURE__ */ b("div", {
|
|
248
|
+
className: "flex flex-wrap items-center gap-3",
|
|
249
|
+
children: [
|
|
250
|
+
D.length > 1 && /* @__PURE__ */ y("select", {
|
|
251
|
+
"aria-label": "Board",
|
|
252
|
+
className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
|
|
253
|
+
value: A,
|
|
254
|
+
onChange: (e) => c(e.target.value),
|
|
255
|
+
children: D.map((e) => /* @__PURE__ */ y("option", {
|
|
256
|
+
value: e.id,
|
|
257
|
+
children: e.name
|
|
258
|
+
}, e.id))
|
|
259
|
+
}),
|
|
260
|
+
j && /* @__PURE__ */ b("label", {
|
|
261
|
+
className: "flex items-center gap-1 text-sm",
|
|
262
|
+
children: [/* @__PURE__ */ y("span", {
|
|
263
|
+
className: "text-muted-foreground",
|
|
264
|
+
children: "Swimlanes"
|
|
265
|
+
}), /* @__PURE__ */ b("select", {
|
|
266
|
+
"aria-label": "Swimlanes",
|
|
267
|
+
"data-testid": "board-lanes",
|
|
268
|
+
className: "rounded-md border border-input bg-background px-2 py-1 text-sm",
|
|
269
|
+
value: h,
|
|
270
|
+
onChange: (e) => x(e.target.value),
|
|
271
|
+
children: [
|
|
272
|
+
/* @__PURE__ */ y("option", {
|
|
273
|
+
value: "none",
|
|
274
|
+
children: "None"
|
|
275
|
+
}),
|
|
276
|
+
/* @__PURE__ */ y("option", {
|
|
277
|
+
value: "assignee",
|
|
278
|
+
children: "By assignee"
|
|
279
|
+
}),
|
|
280
|
+
/* @__PURE__ */ y("option", {
|
|
281
|
+
value: "priority",
|
|
282
|
+
children: "By priority"
|
|
283
|
+
})
|
|
284
|
+
]
|
|
285
|
+
})]
|
|
286
|
+
}),
|
|
287
|
+
j && j.unplacedCount > 0 && /* @__PURE__ */ b("p", {
|
|
288
|
+
className: "text-xs text-muted-foreground",
|
|
289
|
+
"data-testid": "board-unplaced",
|
|
290
|
+
children: [
|
|
291
|
+
j.unplacedCount,
|
|
292
|
+
" work item",
|
|
293
|
+
j.unplacedCount === 1 ? " is" : "s are",
|
|
294
|
+
" not on this board: ",
|
|
295
|
+
j.unplacedCount === 1 ? "its status has" : "their status has",
|
|
296
|
+
" no column."
|
|
297
|
+
]
|
|
298
|
+
}),
|
|
299
|
+
j && /* @__PURE__ */ y("div", {
|
|
300
|
+
className: "ml-auto",
|
|
301
|
+
children: /* @__PURE__ */ y(he, { boardId: j.id })
|
|
302
|
+
})
|
|
303
|
+
]
|
|
304
|
+
}),
|
|
305
|
+
u && /* @__PURE__ */ y($, { message: u }),
|
|
306
|
+
ie && !j ? /* @__PURE__ */ y("p", {
|
|
202
307
|
className: "text-sm text-muted-foreground p-4",
|
|
203
|
-
children: "
|
|
204
|
-
})
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
308
|
+
children: "Loading board…"
|
|
309
|
+
}) : j && h !== "none" ? /* @__PURE__ */ y(pe, {
|
|
310
|
+
board: j,
|
|
311
|
+
laneBy: h,
|
|
312
|
+
cardsOf: N,
|
|
313
|
+
now: p,
|
|
314
|
+
busy: z.loading,
|
|
315
|
+
loadingMore: C,
|
|
316
|
+
onLoadMore: (e) => void P(e),
|
|
317
|
+
onMove: q
|
|
318
|
+
}) : /* @__PURE__ */ b("div", {
|
|
319
|
+
className: "flex gap-3 overflow-x-auto pb-2",
|
|
320
|
+
children: [j?.columns.map((e, t) => /* @__PURE__ */ y(me, {
|
|
321
|
+
boardId: j.id,
|
|
322
|
+
column: e,
|
|
323
|
+
columns: j.columns,
|
|
324
|
+
cards: N(e),
|
|
325
|
+
isFirst: t === 0,
|
|
326
|
+
isLast: t === j.columns.length - 1,
|
|
327
|
+
busy: z.loading,
|
|
328
|
+
now: p,
|
|
329
|
+
loadingMore: C === e.id,
|
|
330
|
+
onLoadMore: () => void P(e),
|
|
331
|
+
onMove: q,
|
|
332
|
+
onShift: (e) => ae(t, e)
|
|
333
|
+
}, e.id)), j && j.columns.length === 0 && /* @__PURE__ */ y("p", {
|
|
334
|
+
className: "text-sm text-muted-foreground p-4",
|
|
335
|
+
children: "This board has no columns. Add one to start placing work."
|
|
336
|
+
})]
|
|
337
|
+
})
|
|
338
|
+
]
|
|
339
|
+
})
|
|
340
|
+
}) : /* @__PURE__ */ y(k, { children: /* @__PURE__ */ b(ne, {
|
|
208
341
|
className: "p-8 text-center space-y-3",
|
|
209
342
|
"data-testid": "board-empty",
|
|
210
343
|
children: [
|
|
211
|
-
/* @__PURE__ */
|
|
212
|
-
/* @__PURE__ */
|
|
344
|
+
/* @__PURE__ */ y(f, { className: "h-8 w-8 mx-auto text-muted-foreground" }),
|
|
345
|
+
/* @__PURE__ */ b("p", {
|
|
213
346
|
className: "text-sm text-muted-foreground",
|
|
214
347
|
children: [n, " has no board yet."]
|
|
215
348
|
}),
|
|
216
|
-
/* @__PURE__ */
|
|
349
|
+
/* @__PURE__ */ b(O, {
|
|
217
350
|
size: "sm",
|
|
218
|
-
disabled:
|
|
219
|
-
onClick: () =>
|
|
351
|
+
disabled: I.loading,
|
|
352
|
+
onClick: () => K(() => F({ variables: { input: {
|
|
220
353
|
projectId: t,
|
|
221
354
|
name: `${n} board`,
|
|
222
355
|
type: "KANBAN",
|
|
223
356
|
isDefault: !0,
|
|
224
357
|
withDefaultColumns: !0
|
|
225
358
|
} } }), "The board could not be created."),
|
|
226
|
-
children: [/* @__PURE__ */
|
|
359
|
+
children: [/* @__PURE__ */ y(m, { className: "mr-1 h-4 w-4" }), I.loading ? "Creating…" : "Create board"]
|
|
227
360
|
}),
|
|
228
|
-
/* @__PURE__ */
|
|
361
|
+
/* @__PURE__ */ y("p", {
|
|
229
362
|
className: "text-xs text-muted-foreground",
|
|
230
363
|
children: "Starts with one column per status: Backlog, To Do, In Progress, In Review, Testing, Done."
|
|
231
364
|
}),
|
|
232
|
-
u && /* @__PURE__ */
|
|
365
|
+
u && /* @__PURE__ */ y($, { message: u })
|
|
233
366
|
]
|
|
234
367
|
}) });
|
|
235
368
|
}
|
|
236
|
-
function
|
|
237
|
-
let
|
|
238
|
-
return /* @__PURE__ */
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
369
|
+
function ue({ card: e, column: r, columns: a, busy: s, now: l, onMove: u }) {
|
|
370
|
+
let d = t(), f = c(L), p = X(e.statusSince, l), m = i(f, e.status, I), h = a.filter((e) => e.id !== r.id && (!e.mappedStatus || m.includes(e.mappedStatus)));
|
|
371
|
+
return /* @__PURE__ */ b("li", {
|
|
372
|
+
draggable: !0,
|
|
373
|
+
onDragStart: (t) => {
|
|
374
|
+
t.dataTransfer.setData("text/plain", e.id), t.dataTransfer.effectAllowed = "move";
|
|
375
|
+
},
|
|
376
|
+
className: "rounded-md border bg-background p-2 space-y-1 cursor-grab",
|
|
377
|
+
"data-testid": "board-card",
|
|
378
|
+
children: [
|
|
379
|
+
/* @__PURE__ */ y("button", {
|
|
380
|
+
type: "button",
|
|
381
|
+
className: "text-left text-sm font-medium leading-tight hover:underline",
|
|
382
|
+
onClick: () => d(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.id)}`),
|
|
383
|
+
children: e.title
|
|
384
|
+
}),
|
|
385
|
+
/* @__PURE__ */ b("div", {
|
|
386
|
+
className: "flex items-center justify-between text-[11px] text-muted-foreground",
|
|
387
|
+
children: [
|
|
388
|
+
/* @__PURE__ */ y("span", { children: e.key }),
|
|
389
|
+
p !== null && /* @__PURE__ */ y("span", {
|
|
390
|
+
"data-testid": "card-age",
|
|
391
|
+
className: ce(p),
|
|
392
|
+
title: `In ${o(f, e.status)} since ${new Date(e.statusSince ?? "").toLocaleDateString()}`,
|
|
393
|
+
children: p === 0 ? "today" : `${p}d in status`
|
|
394
|
+
}),
|
|
395
|
+
/* @__PURE__ */ b("span", { children: [e.storyPoints ?? 0, " pts"] })
|
|
396
|
+
]
|
|
397
|
+
}),
|
|
398
|
+
/* @__PURE__ */ b("div", {
|
|
399
|
+
className: "flex items-center justify-between gap-1 text-[11px] text-muted-foreground",
|
|
400
|
+
children: [/* @__PURE__ */ y("span", {
|
|
401
|
+
className: "truncate",
|
|
402
|
+
children: e.assigneeId ? /* @__PURE__ */ y(n, { id: e.assigneeId }) : "Unassigned"
|
|
403
|
+
}), /* @__PURE__ */ b("select", {
|
|
404
|
+
"aria-label": `Move ${e.key} to column`,
|
|
405
|
+
className: "rounded border border-input bg-background px-1 py-0.5 text-[11px]",
|
|
406
|
+
value: "",
|
|
407
|
+
disabled: s,
|
|
408
|
+
onChange: (t) => t.target.value && u(e.id, t.target.value),
|
|
409
|
+
children: [/* @__PURE__ */ y("option", {
|
|
410
|
+
value: "",
|
|
411
|
+
children: "Move…"
|
|
412
|
+
}), h.map((e) => /* @__PURE__ */ y("option", {
|
|
413
|
+
value: e.id,
|
|
414
|
+
children: e.name
|
|
415
|
+
}, e.id))]
|
|
416
|
+
})]
|
|
417
|
+
})
|
|
418
|
+
]
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
function de({ column: e, onMove: t, className: n, children: r, label: i }) {
|
|
422
|
+
let [a, o] = l(!1);
|
|
423
|
+
return /* @__PURE__ */ y("section", {
|
|
424
|
+
"aria-label": i,
|
|
425
|
+
className: `${n} ${a ? "ring-2 ring-primary" : ""}`,
|
|
242
426
|
onDragOver: (e) => {
|
|
243
|
-
e.preventDefault(),
|
|
427
|
+
e.preventDefault(), o(!0);
|
|
244
428
|
},
|
|
245
|
-
onDragLeave: () =>
|
|
246
|
-
onDrop: (
|
|
247
|
-
|
|
248
|
-
let
|
|
249
|
-
|
|
429
|
+
onDragLeave: () => o(!1),
|
|
430
|
+
onDrop: (n) => {
|
|
431
|
+
n.preventDefault(), o(!1);
|
|
432
|
+
let r = n.dataTransfer.getData("text/plain");
|
|
433
|
+
r && t(r, e.id);
|
|
250
434
|
},
|
|
435
|
+
children: r
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
function fe({ cards: e, loading: t, onLoadMore: n }) {
|
|
439
|
+
let r = e.totalCount - e.items.length;
|
|
440
|
+
return r <= 0 || !e.pageInfo.hasNextPage ? null : /* @__PURE__ */ b("div", {
|
|
441
|
+
className: "px-2 pb-2 space-y-1",
|
|
442
|
+
children: [/* @__PURE__ */ b("p", {
|
|
443
|
+
className: "text-xs text-muted-foreground",
|
|
444
|
+
children: [
|
|
445
|
+
"Showing ",
|
|
446
|
+
e.items.length,
|
|
447
|
+
" of ",
|
|
448
|
+
e.totalCount
|
|
449
|
+
]
|
|
450
|
+
}), /* @__PURE__ */ y(O, {
|
|
451
|
+
size: "sm",
|
|
452
|
+
variant: "outline",
|
|
453
|
+
className: "w-full",
|
|
454
|
+
"data-testid": "board-column-more",
|
|
455
|
+
disabled: t,
|
|
456
|
+
onClick: n,
|
|
457
|
+
children: t ? "Loading…" : `Show ${Math.min(r, B)} more`
|
|
458
|
+
})]
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
function pe({ board: e, laneBy: t, cardsOf: r, now: i, busy: a, loadingMore: o, onLoadMore: s, onMove: c }) {
|
|
462
|
+
let l = e.columns.map((e) => ({
|
|
463
|
+
column: e,
|
|
464
|
+
cards: r(e)
|
|
465
|
+
})), u = [...new Set(l.flatMap(({ cards: e }) => e.items.map((e) => Z(e, t))))].sort((e, n) => t === "priority" ? Y.indexOf(e) - Y.indexOf(n) : e === "" ? 1 : n === "" ? -1 : e.localeCompare(n)), d = (e) => t === "priority" ? z(e) : e ? /* @__PURE__ */ y(n, { id: e }) : "Unassigned";
|
|
466
|
+
return /* @__PURE__ */ b("div", {
|
|
467
|
+
className: "overflow-x-auto pb-2 space-y-3",
|
|
468
|
+
"data-testid": "board-swimlanes",
|
|
251
469
|
children: [
|
|
252
|
-
/* @__PURE__ */
|
|
253
|
-
className: "
|
|
254
|
-
children: [
|
|
255
|
-
|
|
256
|
-
|
|
470
|
+
/* @__PURE__ */ b("p", {
|
|
471
|
+
className: "text-xs text-muted-foreground",
|
|
472
|
+
children: [
|
|
473
|
+
"Dragging moves a card between columns. Its lane follows its",
|
|
474
|
+
" ",
|
|
475
|
+
t === "priority" ? "priority" : "assignee",
|
|
476
|
+
"."
|
|
477
|
+
]
|
|
478
|
+
}),
|
|
479
|
+
/* @__PURE__ */ y("div", {
|
|
480
|
+
className: "flex gap-3",
|
|
481
|
+
children: l.map(({ column: e, cards: t }) => /* @__PURE__ */ y("div", {
|
|
482
|
+
className: "min-w-[240px] w-[240px] shrink-0 px-2",
|
|
483
|
+
children: /* @__PURE__ */ b("h3", {
|
|
257
484
|
className: "text-sm font-medium truncate",
|
|
258
|
-
children: r.name
|
|
259
|
-
}), /* @__PURE__ */ p("span", {
|
|
260
|
-
"data-testid": `board-column-count-${r.name}`,
|
|
261
|
-
className: `text-xs rounded-full px-1.5 ${y ? "bg-status-warning-subtle text-status-warning" : "bg-muted"}`,
|
|
262
|
-
title: r.wipLimit ? `WIP limit ${r.wipLimit}` : void 0,
|
|
263
|
-
children: r.wipLimit ? `${v} / ${r.wipLimit}` : v
|
|
264
|
-
})]
|
|
265
|
-
}), /* @__PURE__ */ m("div", {
|
|
266
|
-
className: "flex items-center justify-between gap-1",
|
|
267
|
-
children: [/* @__PURE__ */ p("span", {
|
|
268
|
-
className: "text-[11px] text-muted-foreground",
|
|
269
|
-
children: r.mappedStatus ? `Sets status: ${P(r.mappedStatus)}` : "No status"
|
|
270
|
-
}), /* @__PURE__ */ m("span", {
|
|
271
|
-
className: "flex",
|
|
272
485
|
children: [
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
className: "
|
|
277
|
-
|
|
278
|
-
disabled: c,
|
|
279
|
-
onClick: () => f(-1),
|
|
280
|
-
children: /* @__PURE__ */ p(a, { className: "h-3.5 w-3.5" })
|
|
281
|
-
}),
|
|
282
|
-
/* @__PURE__ */ p(w, {
|
|
283
|
-
size: "icon",
|
|
284
|
-
variant: "ghost",
|
|
285
|
-
className: "h-6 w-6",
|
|
286
|
-
"aria-label": `Move ${r.name} column right`,
|
|
287
|
-
disabled: l,
|
|
288
|
-
onClick: () => f(1),
|
|
289
|
-
children: /* @__PURE__ */ p(o, { className: "h-3.5 w-3.5" })
|
|
290
|
-
}),
|
|
291
|
-
/* @__PURE__ */ p(Y, {
|
|
292
|
-
boardId: e,
|
|
293
|
-
column: r
|
|
486
|
+
e.name,
|
|
487
|
+
" ",
|
|
488
|
+
/* @__PURE__ */ y("span", {
|
|
489
|
+
className: "text-xs text-muted-foreground",
|
|
490
|
+
children: e.wipLimit ? `${t.totalCount} / ${e.wipLimit}` : t.totalCount
|
|
294
491
|
})
|
|
295
492
|
]
|
|
296
|
-
})
|
|
297
|
-
})
|
|
493
|
+
})
|
|
494
|
+
}, e.id))
|
|
298
495
|
}),
|
|
299
|
-
/* @__PURE__ */
|
|
300
|
-
className: "
|
|
301
|
-
children:
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
496
|
+
u.length === 0 && /* @__PURE__ */ y("p", {
|
|
497
|
+
className: "text-sm text-muted-foreground p-4",
|
|
498
|
+
children: "No cards on this board yet."
|
|
499
|
+
}),
|
|
500
|
+
u.map((n) => /* @__PURE__ */ b("div", {
|
|
501
|
+
"data-testid": "board-lane",
|
|
502
|
+
className: "space-y-1",
|
|
503
|
+
children: [/* @__PURE__ */ b("p", {
|
|
504
|
+
className: "text-xs font-medium",
|
|
308
505
|
children: [
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
children:
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
}),
|
|
319
|
-
/* @__PURE__ */ m("div", {
|
|
320
|
-
className: "flex items-center justify-between gap-1 text-[11px] text-muted-foreground",
|
|
321
|
-
children: [/* @__PURE__ */ p("span", {
|
|
322
|
-
className: "truncate",
|
|
323
|
-
children: e.assigneeId ? /* @__PURE__ */ p(n, { id: e.assigneeId }) : "Unassigned"
|
|
324
|
-
}), /* @__PURE__ */ m("select", {
|
|
325
|
-
"aria-label": `Move ${e.key} to column`,
|
|
326
|
-
className: "rounded border border-input bg-background px-1 py-0.5 text-[11px]",
|
|
327
|
-
value: "",
|
|
328
|
-
disabled: u,
|
|
329
|
-
onChange: (t) => t.target.value && d(e.id, t.target.value),
|
|
330
|
-
children: [/* @__PURE__ */ p("option", {
|
|
331
|
-
value: "",
|
|
332
|
-
children: "Move…"
|
|
333
|
-
}), s.filter((e) => e.id !== r.id).map((e) => /* @__PURE__ */ p("option", {
|
|
334
|
-
value: e.id,
|
|
335
|
-
children: e.name
|
|
336
|
-
}, e.id))]
|
|
337
|
-
})]
|
|
506
|
+
d(n),
|
|
507
|
+
" ",
|
|
508
|
+
/* @__PURE__ */ b("span", {
|
|
509
|
+
className: "text-muted-foreground",
|
|
510
|
+
children: [
|
|
511
|
+
"(",
|
|
512
|
+
l.reduce((e, { cards: r }) => e + r.items.filter((e) => Z(e, t) === n).length, 0),
|
|
513
|
+
")"
|
|
514
|
+
]
|
|
338
515
|
})
|
|
339
516
|
]
|
|
340
|
-
}
|
|
341
|
-
className: "
|
|
342
|
-
children:
|
|
517
|
+
}), /* @__PURE__ */ y("div", {
|
|
518
|
+
className: "flex gap-3",
|
|
519
|
+
children: l.map(({ column: r, cards: o }) => /* @__PURE__ */ y(de, {
|
|
520
|
+
column: r,
|
|
521
|
+
onMove: c,
|
|
522
|
+
label: `${r.name} column`,
|
|
523
|
+
className: "min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30",
|
|
524
|
+
children: /* @__PURE__ */ y("ul", {
|
|
525
|
+
className: "p-2 space-y-2 min-h-[48px]",
|
|
526
|
+
children: o.items.filter((e) => Z(e, t) === n).map((t) => /* @__PURE__ */ y(ue, {
|
|
527
|
+
card: t,
|
|
528
|
+
column: r,
|
|
529
|
+
columns: e.columns,
|
|
530
|
+
busy: a,
|
|
531
|
+
now: i,
|
|
532
|
+
onMove: c
|
|
533
|
+
}, t.id))
|
|
534
|
+
})
|
|
535
|
+
}, r.id))
|
|
343
536
|
})]
|
|
344
|
-
}),
|
|
345
|
-
|
|
346
|
-
className: "
|
|
347
|
-
children:
|
|
348
|
-
"
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
537
|
+
}, n || "none")),
|
|
538
|
+
/* @__PURE__ */ y("div", {
|
|
539
|
+
className: "flex gap-3",
|
|
540
|
+
children: l.map(({ column: e, cards: t }) => /* @__PURE__ */ y("div", {
|
|
541
|
+
className: "min-w-[240px] w-[240px] shrink-0",
|
|
542
|
+
children: /* @__PURE__ */ y(fe, {
|
|
543
|
+
cards: t,
|
|
544
|
+
loading: o === e.id,
|
|
545
|
+
onLoadMore: () => s(e)
|
|
546
|
+
})
|
|
547
|
+
}, e.id))
|
|
354
548
|
})
|
|
355
549
|
]
|
|
356
550
|
});
|
|
357
551
|
}
|
|
358
|
-
function
|
|
359
|
-
let
|
|
360
|
-
|
|
552
|
+
function me({ boardId: e, column: t, columns: n, cards: r, isFirst: i, isLast: a, busy: o, now: s, loadingMore: c, onLoadMore: l, onMove: f, onShift: p }) {
|
|
553
|
+
let m = r.totalCount, h = t.wipLimit != null && t.wipLimit > 0 && m >= t.wipLimit, g = R();
|
|
554
|
+
return /* @__PURE__ */ y(de, {
|
|
555
|
+
column: t,
|
|
556
|
+
onMove: f,
|
|
557
|
+
label: `${t.name} column`,
|
|
558
|
+
className: "min-w-[240px] w-[240px] shrink-0 rounded-md border bg-muted/30",
|
|
559
|
+
children: /* @__PURE__ */ b("div", {
|
|
560
|
+
"data-testid": `board-column-${t.name}`,
|
|
561
|
+
children: [
|
|
562
|
+
/* @__PURE__ */ b("header", {
|
|
563
|
+
className: "p-2 border-b space-y-1",
|
|
564
|
+
children: [/* @__PURE__ */ b("div", {
|
|
565
|
+
className: "flex items-center justify-between gap-1",
|
|
566
|
+
children: [/* @__PURE__ */ y("h3", {
|
|
567
|
+
className: "text-sm font-medium truncate",
|
|
568
|
+
children: t.name
|
|
569
|
+
}), /* @__PURE__ */ y("span", {
|
|
570
|
+
"data-testid": `board-column-count-${t.name}`,
|
|
571
|
+
className: `text-xs rounded-full px-1.5 ${h ? "bg-status-warning-subtle text-status-warning" : "bg-muted"}`,
|
|
572
|
+
title: t.wipLimit ? `WIP limit ${t.wipLimit}` : void 0,
|
|
573
|
+
children: t.wipLimit ? `${m} / ${t.wipLimit}` : m
|
|
574
|
+
})]
|
|
575
|
+
}), /* @__PURE__ */ b("div", {
|
|
576
|
+
className: "flex items-center justify-between gap-1",
|
|
577
|
+
children: [/* @__PURE__ */ y("span", {
|
|
578
|
+
className: "text-[11px] text-muted-foreground",
|
|
579
|
+
children: t.mappedStatus ? `Sets status: ${g(t.mappedStatus)}` : "No status"
|
|
580
|
+
}), /* @__PURE__ */ b("span", {
|
|
581
|
+
className: "flex",
|
|
582
|
+
children: [
|
|
583
|
+
/* @__PURE__ */ y(O, {
|
|
584
|
+
size: "icon",
|
|
585
|
+
variant: "ghost",
|
|
586
|
+
className: "h-6 w-6",
|
|
587
|
+
"aria-label": `Move ${t.name} column left`,
|
|
588
|
+
disabled: i,
|
|
589
|
+
onClick: () => p(-1),
|
|
590
|
+
children: /* @__PURE__ */ y(u, { className: "h-3.5 w-3.5" })
|
|
591
|
+
}),
|
|
592
|
+
/* @__PURE__ */ y(O, {
|
|
593
|
+
size: "icon",
|
|
594
|
+
variant: "ghost",
|
|
595
|
+
className: "h-6 w-6",
|
|
596
|
+
"aria-label": `Move ${t.name} column right`,
|
|
597
|
+
disabled: a,
|
|
598
|
+
onClick: () => p(1),
|
|
599
|
+
children: /* @__PURE__ */ y(d, { className: "h-3.5 w-3.5" })
|
|
600
|
+
}),
|
|
601
|
+
/* @__PURE__ */ y(he, {
|
|
602
|
+
boardId: e,
|
|
603
|
+
column: t
|
|
604
|
+
})
|
|
605
|
+
]
|
|
606
|
+
})]
|
|
607
|
+
})]
|
|
608
|
+
}),
|
|
609
|
+
/* @__PURE__ */ b("ul", {
|
|
610
|
+
className: "p-2 space-y-2 min-h-[80px]",
|
|
611
|
+
children: [r.items.map((e) => /* @__PURE__ */ y(ue, {
|
|
612
|
+
card: e,
|
|
613
|
+
column: t,
|
|
614
|
+
columns: n,
|
|
615
|
+
busy: o,
|
|
616
|
+
now: s,
|
|
617
|
+
onMove: f
|
|
618
|
+
}, e.id)), m === 0 && /* @__PURE__ */ y("li", {
|
|
619
|
+
className: "text-xs text-muted-foreground text-center py-4",
|
|
620
|
+
children: "Empty"
|
|
621
|
+
})]
|
|
622
|
+
}),
|
|
623
|
+
/* @__PURE__ */ y(fe, {
|
|
624
|
+
cards: r,
|
|
625
|
+
loading: c,
|
|
626
|
+
onLoadMore: l
|
|
627
|
+
})
|
|
628
|
+
]
|
|
629
|
+
})
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
function he({ boardId: e, column: t }) {
|
|
633
|
+
let n = t !== void 0, i = R(), [a, o] = l(!1), [s, c] = l(t?.name ?? ""), [u, d] = l(t?.mappedStatus ?? ""), [f, h] = l(t?.wipLimit ? String(t.wipLimit) : ""), [g, v] = l(null), k = {
|
|
634
|
+
refetchQueries: J,
|
|
361
635
|
awaitRefetchQueries: !0
|
|
362
|
-
}, [
|
|
363
|
-
|
|
364
|
-
},
|
|
365
|
-
|
|
636
|
+
}, [ne, L] = _(K, k), [z, B] = _(q, k), [V, H] = _(ae, k), U = L.loading || B.loading || H.loading, W = f.trim() === "" ? null : Number(f), G = W !== null && (!Number.isInteger(W) || W < 1), oe = s.trim() !== "" && !G && !U, Y = () => {
|
|
637
|
+
c(t?.name ?? ""), d(t?.mappedStatus ?? ""), h(t?.wipLimit ? String(t.wipLimit) : ""), v(null);
|
|
638
|
+
}, se = async () => {
|
|
639
|
+
v(null);
|
|
366
640
|
let i = {
|
|
367
641
|
name: s.trim(),
|
|
368
|
-
mappedStatus:
|
|
369
|
-
wipLimit:
|
|
642
|
+
mappedStatus: u || null,
|
|
643
|
+
wipLimit: W
|
|
370
644
|
};
|
|
371
645
|
try {
|
|
372
|
-
n ? await r(
|
|
646
|
+
n ? await r(z({ variables: {
|
|
373
647
|
id: t.id,
|
|
374
648
|
input: i
|
|
375
|
-
} })) : await r(
|
|
649
|
+
} })) : await r(ne({ variables: { input: {
|
|
376
650
|
boardId: e,
|
|
377
651
|
type: "CUSTOM",
|
|
378
652
|
...i
|
|
379
653
|
} } })), o(!1);
|
|
380
654
|
} catch (e) {
|
|
381
|
-
|
|
655
|
+
v(Q(e, "The column could not be saved."));
|
|
382
656
|
}
|
|
383
|
-
},
|
|
384
|
-
return /* @__PURE__ */
|
|
657
|
+
}, X = n ? `column-${t.id}` : "new-column";
|
|
658
|
+
return /* @__PURE__ */ b(re, {
|
|
385
659
|
open: a,
|
|
386
660
|
onOpenChange: (e) => {
|
|
387
|
-
o(e), e &&
|
|
661
|
+
o(e), e && Y();
|
|
388
662
|
},
|
|
389
|
-
children: [/* @__PURE__ */
|
|
663
|
+
children: [/* @__PURE__ */ y(F, {
|
|
390
664
|
asChild: !0,
|
|
391
|
-
children: n ? /* @__PURE__ */
|
|
665
|
+
children: n ? /* @__PURE__ */ y(O, {
|
|
392
666
|
size: "icon",
|
|
393
667
|
variant: "ghost",
|
|
394
668
|
className: "h-6 w-6",
|
|
395
669
|
"aria-label": `Edit ${t.name} column`,
|
|
396
|
-
children: /* @__PURE__ */ p
|
|
397
|
-
}) : /* @__PURE__ */
|
|
670
|
+
children: /* @__PURE__ */ y(p, { className: "h-3.5 w-3.5" })
|
|
671
|
+
}) : /* @__PURE__ */ b(O, {
|
|
398
672
|
size: "sm",
|
|
399
673
|
variant: "outline",
|
|
400
|
-
children: [/* @__PURE__ */
|
|
674
|
+
children: [/* @__PURE__ */ y(m, { className: "mr-1 h-4 w-4" }), "Add column"]
|
|
401
675
|
})
|
|
402
|
-
}), /* @__PURE__ */
|
|
676
|
+
}), /* @__PURE__ */ b(ie, {
|
|
403
677
|
className: "max-w-md",
|
|
404
678
|
children: [
|
|
405
|
-
/* @__PURE__ */
|
|
406
|
-
/* @__PURE__ */
|
|
679
|
+
/* @__PURE__ */ b(N, { children: [/* @__PURE__ */ y(P, { children: n ? `Edit ${t.name}` : "Add column" }), /* @__PURE__ */ y(j, { children: "Moving a card into a column that sets a status changes the work item's status." })] }),
|
|
680
|
+
/* @__PURE__ */ b("div", {
|
|
407
681
|
className: "space-y-3",
|
|
408
682
|
children: [
|
|
409
|
-
/* @__PURE__ */
|
|
410
|
-
htmlFor: `${
|
|
683
|
+
/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
|
|
684
|
+
htmlFor: `${X}-name`,
|
|
411
685
|
className: "text-sm font-medium",
|
|
412
686
|
children: "Name"
|
|
413
|
-
}), /* @__PURE__ */
|
|
414
|
-
id: `${
|
|
687
|
+
}), /* @__PURE__ */ y(A, {
|
|
688
|
+
id: `${X}-name`,
|
|
415
689
|
className: "mt-1",
|
|
416
690
|
value: s,
|
|
417
|
-
onChange: (e) =>
|
|
691
|
+
onChange: (e) => c(e.target.value)
|
|
418
692
|
})] }),
|
|
419
|
-
/* @__PURE__ */
|
|
420
|
-
htmlFor: `${
|
|
693
|
+
/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
|
|
694
|
+
htmlFor: `${X}-status`,
|
|
421
695
|
className: "text-sm font-medium",
|
|
422
696
|
children: "Sets status"
|
|
423
|
-
}), /* @__PURE__ */
|
|
424
|
-
id: `${
|
|
697
|
+
}), /* @__PURE__ */ b("select", {
|
|
698
|
+
id: `${X}-status`,
|
|
425
699
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
|
|
426
|
-
value:
|
|
427
|
-
onChange: (e) =>
|
|
428
|
-
children: [/* @__PURE__ */
|
|
700
|
+
value: u,
|
|
701
|
+
onChange: (e) => d(e.target.value),
|
|
702
|
+
children: [/* @__PURE__ */ y("option", {
|
|
429
703
|
value: "",
|
|
430
704
|
children: "No status (cards keep theirs)"
|
|
431
|
-
}),
|
|
705
|
+
}), I.map((e) => /* @__PURE__ */ y("option", {
|
|
432
706
|
value: e,
|
|
433
|
-
children:
|
|
707
|
+
children: i(e)
|
|
434
708
|
}, e))]
|
|
435
709
|
})] }),
|
|
436
|
-
/* @__PURE__ */
|
|
437
|
-
/* @__PURE__ */
|
|
438
|
-
htmlFor: `${
|
|
710
|
+
/* @__PURE__ */ b("div", { children: [
|
|
711
|
+
/* @__PURE__ */ y("label", {
|
|
712
|
+
htmlFor: `${X}-wip`,
|
|
439
713
|
className: "text-sm font-medium",
|
|
440
714
|
children: "WIP limit (blank for none)"
|
|
441
715
|
}),
|
|
442
|
-
/* @__PURE__ */
|
|
443
|
-
id: `${
|
|
716
|
+
/* @__PURE__ */ y(A, {
|
|
717
|
+
id: `${X}-wip`,
|
|
444
718
|
type: "number",
|
|
445
719
|
min: 1,
|
|
446
720
|
className: "mt-1",
|
|
447
|
-
value:
|
|
448
|
-
onChange: (e) =>
|
|
721
|
+
value: f,
|
|
722
|
+
onChange: (e) => h(e.target.value)
|
|
449
723
|
}),
|
|
450
|
-
|
|
724
|
+
G && /* @__PURE__ */ y($, { message: "The WIP limit must be a whole number, 1 or more." })
|
|
451
725
|
] })
|
|
452
726
|
]
|
|
453
727
|
}),
|
|
454
|
-
|
|
455
|
-
/* @__PURE__ */
|
|
728
|
+
g && /* @__PURE__ */ y($, { message: g }),
|
|
729
|
+
/* @__PURE__ */ b(M, {
|
|
456
730
|
className: "gap-2",
|
|
457
|
-
children: [n && /* @__PURE__ */
|
|
731
|
+
children: [n && /* @__PURE__ */ b(x, { children: [/* @__PURE__ */ y(D, {
|
|
458
732
|
asChild: !0,
|
|
459
|
-
children: /* @__PURE__ */
|
|
733
|
+
children: /* @__PURE__ */ y(O, {
|
|
460
734
|
variant: "outline",
|
|
461
|
-
disabled:
|
|
735
|
+
disabled: U,
|
|
462
736
|
children: "Delete column"
|
|
463
737
|
})
|
|
464
|
-
}), /* @__PURE__ */
|
|
738
|
+
}), /* @__PURE__ */ b(C, { children: [/* @__PURE__ */ b(T, { children: [/* @__PURE__ */ b(E, { children: [
|
|
465
739
|
"Delete ",
|
|
466
740
|
t.name,
|
|
467
741
|
"?"
|
|
468
|
-
] }), /* @__PURE__ */
|
|
742
|
+
] }), /* @__PURE__ */ y(w, { children: "Its cards are not deleted: each goes back to the column for its status, or off the board if no column sets that status." })] }), /* @__PURE__ */ b(te, { children: [/* @__PURE__ */ y(ee, { children: "Keep it" }), /* @__PURE__ */ y(S, {
|
|
469
743
|
className: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
470
744
|
onClick: async () => {
|
|
471
745
|
try {
|
|
472
|
-
await r(
|
|
746
|
+
await r(V({ variables: { id: t.id } })), o(!1);
|
|
473
747
|
} catch (e) {
|
|
474
|
-
|
|
748
|
+
v(Q(e, "The column could not be deleted."));
|
|
475
749
|
}
|
|
476
750
|
},
|
|
477
751
|
children: "Delete column"
|
|
478
|
-
})] })] })] }), /* @__PURE__ */
|
|
479
|
-
onClick:
|
|
480
|
-
disabled: !
|
|
481
|
-
"data-testid": `${
|
|
482
|
-
children:
|
|
752
|
+
})] })] })] }), /* @__PURE__ */ y(O, {
|
|
753
|
+
onClick: se,
|
|
754
|
+
disabled: !oe,
|
|
755
|
+
"data-testid": `${X}-save`,
|
|
756
|
+
children: U ? "Saving…" : n ? "Save" : "Add column"
|
|
483
757
|
})]
|
|
484
758
|
})
|
|
485
759
|
]
|
|
@@ -487,6 +761,6 @@ function Y({ boardId: e, column: t }) {
|
|
|
487
761
|
});
|
|
488
762
|
}
|
|
489
763
|
//#endregion
|
|
490
|
-
export {
|
|
764
|
+
export { le as ProjectBoard };
|
|
491
765
|
|
|
492
766
|
//# sourceMappingURL=ProjectBoard.js.map
|