@burdenoff/microfe-planmagnet 2026.927.4 → 2026.927.5
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/generated/global-types.d.ts +9 -1
- package/dist/generated/global-types.d.ts.map +1 -1
- package/dist/generated/wspace-operations.d.ts +0 -12
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +14 -10
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +1 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +149 -127
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +1 -1
- package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/FeatureControls.js +142 -139
- package/dist/planmagnet/controls/FeatureControls.js.map +1 -1
- package/dist/planmagnet/controls/FeatureTriage.d.ts +21 -0
- package/dist/planmagnet/controls/FeatureTriage.d.ts.map +1 -0
- package/dist/planmagnet/controls/FeatureTriage.js +398 -0
- package/dist/planmagnet/controls/FeatureTriage.js.map +1 -0
- package/dist/planmagnet/controls/MilestoneControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/MilestoneControls.js +76 -73
- package/dist/planmagnet/controls/MilestoneControls.js.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.js +47 -44
- package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
- package/dist/planmagnet/controls/ReleaseControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/ReleaseControls.js +47 -44
- package/dist/planmagnet/controls/ReleaseControls.js.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.js +68 -65
- package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
- package/dist/planmagnet/hooks/useCounts.d.ts +39 -0
- package/dist/planmagnet/hooks/useCounts.d.ts.map +1 -0
- package/dist/planmagnet/hooks/useCounts.js +209 -0
- package/dist/planmagnet/hooks/useCounts.js.map +1 -0
- package/dist/planmagnet/import/exportColumns.d.ts +52 -0
- package/dist/planmagnet/import/exportColumns.d.ts.map +1 -0
- package/dist/planmagnet/import/exportColumns.js +81 -0
- package/dist/planmagnet/import/exportColumns.js.map +1 -0
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +255 -242
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +199 -160
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +147 -144
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js +2 -7
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +173 -173
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js +120 -117
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +97 -117
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +168 -103
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +117 -103
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +4 -8
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +85 -90
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +12 -2
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js +2 -2
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +48 -71
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +17 -13
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +6 -6
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +11 -8
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +4 -4
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +152 -139
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +75 -74
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts +7 -0
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +39 -201
- package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +118 -99
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksImportPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TasksImportPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TasksImportPagePage.js +309 -0
- package/dist/planmagnet/pages/TasksImportPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTasksPagePage.js +110 -104
- package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.js +99 -177
- package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +8 -4
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +1 -1
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.js +10 -4
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +151 -138
- package/dist/planmagnet/roadmaps/RoadmapControls.js.map +1 -1
- package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
- package/dist/planmagnet/sprints/SprintControls.js +32 -30
- package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
- package/dist/planmagnet/utils/mutationResult.d.ts +10 -0
- package/dist/planmagnet/utils/mutationResult.d.ts.map +1 -1
- package/dist/planmagnet/utils/mutationResult.js +2 -1
- package/dist/planmagnet/utils/mutationResult.js.map +1 -1
- package/dist/planmagnet/utils/rowNavigation.d.ts +2 -0
- package/dist/planmagnet/utils/rowNavigation.d.ts.map +1 -1
- package/dist/planmagnet/utils/rowNavigation.js +9 -8
- package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
2
|
import { PersonAvatar as n } from "../people/People.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
3
|
+
import { countLabel as r, useSprintCounts as i, workProgress as a } from "../hooks/useCounts.js";
|
|
4
|
+
import { detailPath as o } from "../utils/rowNavigation.js";
|
|
5
|
+
import { NewSprintDialog as s, SprintLifecycleActions as c } from "../sprints/SprintControls.js";
|
|
6
|
+
import { SprintDates as l } from "../sprints/SprintDates.js";
|
|
7
|
+
import { Users as u, Zap as d } from "lucide-react";
|
|
8
|
+
import { gql as f } from "@apollo/client";
|
|
9
|
+
import { useQuery as p } from "@apollo/client/react";
|
|
10
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
11
|
+
import { Badge as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b } from "@burdenoff/fe-libs/ui";
|
|
11
12
|
//#region src/planmagnet/pages/SprintsStartSprintPagePage.tsx
|
|
12
|
-
var
|
|
13
|
+
var x = f`
|
|
13
14
|
query GetSprints(
|
|
14
15
|
$workspaceId: ID!
|
|
15
16
|
$filter: PlanmagnetSprintFilter
|
|
@@ -48,7 +49,7 @@ var v = l`
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
`;
|
|
51
|
-
function
|
|
52
|
+
function S(e) {
|
|
52
53
|
let t = e.workItems ?? [];
|
|
53
54
|
return {
|
|
54
55
|
totalPoints: t.reduce((e, t) => e + (t.storyPoints ?? 0), 0),
|
|
@@ -59,122 +60,140 @@ function y(e) {
|
|
|
59
60
|
velocity: e.velocity
|
|
60
61
|
};
|
|
61
62
|
}
|
|
62
|
-
function
|
|
63
|
-
let { workspaceId:
|
|
63
|
+
function C() {
|
|
64
|
+
let { workspaceId: f } = e(), { data: C, loading: w, error: T } = p(x, {
|
|
64
65
|
variables: {
|
|
65
|
-
workspaceId:
|
|
66
|
+
workspaceId: f,
|
|
66
67
|
pagination: { first: 50 }
|
|
67
68
|
},
|
|
68
|
-
skip: !
|
|
69
|
-
}),
|
|
70
|
-
|
|
69
|
+
skip: !f
|
|
70
|
+
}), E = {
|
|
71
|
+
skip: !f,
|
|
72
|
+
variables: {
|
|
73
|
+
workspaceId: f,
|
|
74
|
+
pagination: { first: 50 }
|
|
75
|
+
}
|
|
76
|
+
}, { data: D } = p(x, {
|
|
77
|
+
...E,
|
|
78
|
+
variables: {
|
|
79
|
+
...E.variables,
|
|
80
|
+
filter: { status: "ACTIVE" }
|
|
81
|
+
}
|
|
82
|
+
}), { data: O } = p(x, {
|
|
83
|
+
...E,
|
|
84
|
+
variables: {
|
|
85
|
+
...E.variables,
|
|
86
|
+
filter: { status: "REVIEW" }
|
|
87
|
+
}
|
|
88
|
+
}), k = i(), A = C?.planmagnetSprints?.items ?? [], j = [...D?.planmagnetSprints.items ?? [], ...O?.planmagnetSprints.items ?? []], M = A.filter((e) => e.status === "PLANNING"), N = A.filter((e) => e.status === "COMPLETED" || e.status === "CANCELLED"), P = t(), F = (e) => P(o("/projects/planning-detail-page", e));
|
|
89
|
+
return w && !C ? /* @__PURE__ */ m("div", {
|
|
71
90
|
className: "flex items-center justify-center p-12",
|
|
72
|
-
children: /* @__PURE__ */
|
|
73
|
-
}) :
|
|
91
|
+
children: /* @__PURE__ */ m("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
|
|
92
|
+
}) : T ? /* @__PURE__ */ h("div", {
|
|
74
93
|
className: "p-6 text-red-500",
|
|
75
|
-
children: ["Error: ",
|
|
76
|
-
}) : /* @__PURE__ */
|
|
94
|
+
children: ["Error: ", T.message]
|
|
95
|
+
}) : /* @__PURE__ */ h("div", {
|
|
77
96
|
className: "space-y-6 p-6",
|
|
78
97
|
children: [
|
|
79
|
-
/* @__PURE__ */
|
|
98
|
+
/* @__PURE__ */ h("div", {
|
|
80
99
|
className: "flex items-center justify-between",
|
|
81
|
-
children: [/* @__PURE__ */
|
|
100
|
+
children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
|
|
82
101
|
className: "text-2xl font-semibold",
|
|
83
102
|
children: "Sprint Management"
|
|
84
|
-
}), /* @__PURE__ */
|
|
103
|
+
}), /* @__PURE__ */ h("p", {
|
|
85
104
|
className: "text-sm text-muted-foreground",
|
|
86
105
|
children: [
|
|
87
|
-
|
|
106
|
+
r(k?.all),
|
|
88
107
|
" sprints total · ",
|
|
89
|
-
|
|
90
|
-
"
|
|
108
|
+
r(k?.running),
|
|
109
|
+
" running"
|
|
91
110
|
]
|
|
92
|
-
})] }), /* @__PURE__ */
|
|
111
|
+
})] }), /* @__PURE__ */ m(s, { onCreated: F })]
|
|
93
112
|
}),
|
|
94
|
-
|
|
113
|
+
j.length > 0 && /* @__PURE__ */ h("div", {
|
|
95
114
|
className: "space-y-4",
|
|
96
|
-
children: [/* @__PURE__ */
|
|
115
|
+
children: [/* @__PURE__ */ m("h2", {
|
|
97
116
|
className: "text-lg font-medium",
|
|
98
117
|
children: "Active Sprints"
|
|
99
|
-
}),
|
|
100
|
-
let t =
|
|
101
|
-
return /* @__PURE__ */
|
|
118
|
+
}), j.map((e) => {
|
|
119
|
+
let t = S(e), r = e.workItems ?? [], i = a(r) ?? 0;
|
|
120
|
+
return /* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, {
|
|
102
121
|
className: "pb-2",
|
|
103
|
-
children: /* @__PURE__ */
|
|
122
|
+
children: /* @__PURE__ */ h("div", {
|
|
104
123
|
className: "flex items-center justify-between",
|
|
105
|
-
children: [/* @__PURE__ */
|
|
124
|
+
children: [/* @__PURE__ */ h(b, {
|
|
106
125
|
className: "text-base flex items-center gap-2",
|
|
107
|
-
children: [/* @__PURE__ */ d
|
|
126
|
+
children: [/* @__PURE__ */ m(d, { className: "h-4 w-4 text-primary" }), /* @__PURE__ */ m("button", {
|
|
108
127
|
type: "button",
|
|
109
128
|
className: "hover:underline text-left",
|
|
110
|
-
onClick: () =>
|
|
129
|
+
onClick: () => F(e.id),
|
|
111
130
|
children: e.name
|
|
112
131
|
})]
|
|
113
|
-
}), /* @__PURE__ */
|
|
132
|
+
}), /* @__PURE__ */ h("div", {
|
|
114
133
|
className: "flex items-start gap-2",
|
|
115
|
-
children: [/* @__PURE__ */
|
|
134
|
+
children: [/* @__PURE__ */ m(g, { children: e.status === "REVIEW" ? "Review" : "Active" }), /* @__PURE__ */ m(c, {
|
|
116
135
|
sprintId: e.id,
|
|
117
136
|
sprintName: e.name,
|
|
118
137
|
status: e.status
|
|
119
138
|
})]
|
|
120
139
|
})]
|
|
121
140
|
})
|
|
122
|
-
}), /* @__PURE__ */
|
|
141
|
+
}), /* @__PURE__ */ h(v, {
|
|
123
142
|
className: "space-y-4",
|
|
124
143
|
children: [
|
|
125
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ m("p", {
|
|
126
145
|
className: "text-sm text-muted-foreground",
|
|
127
146
|
children: e.goal ?? ""
|
|
128
147
|
}),
|
|
129
|
-
/* @__PURE__ */
|
|
130
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ m(l, { sprint: e }),
|
|
149
|
+
/* @__PURE__ */ m("div", {
|
|
131
150
|
className: "flex gap-4 text-xs text-muted-foreground",
|
|
132
|
-
children: /* @__PURE__ */
|
|
151
|
+
children: /* @__PURE__ */ h("span", {
|
|
133
152
|
className: "flex items-center gap-1",
|
|
134
153
|
children: [
|
|
135
|
-
/* @__PURE__ */
|
|
154
|
+
/* @__PURE__ */ m(u, { className: "h-3 w-3" }),
|
|
136
155
|
t.teamMemberIds.length,
|
|
137
156
|
" members"
|
|
138
157
|
]
|
|
139
158
|
})
|
|
140
159
|
}),
|
|
141
|
-
/* @__PURE__ */
|
|
160
|
+
/* @__PURE__ */ h("div", {
|
|
142
161
|
className: "grid grid-cols-3 gap-4 text-center",
|
|
143
162
|
children: [
|
|
144
|
-
/* @__PURE__ */
|
|
163
|
+
/* @__PURE__ */ h("div", {
|
|
145
164
|
className: "p-3 bg-muted rounded-md",
|
|
146
|
-
children: [/* @__PURE__ */
|
|
165
|
+
children: [/* @__PURE__ */ h("p", {
|
|
147
166
|
className: "text-lg font-bold",
|
|
148
167
|
children: [
|
|
149
168
|
t.completedPoints,
|
|
150
169
|
"/",
|
|
151
170
|
t.totalPoints
|
|
152
171
|
]
|
|
153
|
-
}), /* @__PURE__ */
|
|
172
|
+
}), /* @__PURE__ */ m("p", {
|
|
154
173
|
className: "text-xs text-muted-foreground",
|
|
155
174
|
children: "Points"
|
|
156
175
|
})]
|
|
157
176
|
}),
|
|
158
|
-
/* @__PURE__ */
|
|
177
|
+
/* @__PURE__ */ h("div", {
|
|
159
178
|
className: "p-3 bg-muted rounded-md",
|
|
160
|
-
children: [/* @__PURE__ */
|
|
179
|
+
children: [/* @__PURE__ */ h("p", {
|
|
161
180
|
className: "text-lg font-bold",
|
|
162
181
|
children: [
|
|
163
182
|
t.tasksCompleted,
|
|
164
183
|
"/",
|
|
165
184
|
t.tasksTotal
|
|
166
185
|
]
|
|
167
|
-
}), /* @__PURE__ */
|
|
186
|
+
}), /* @__PURE__ */ m("p", {
|
|
168
187
|
className: "text-xs text-muted-foreground",
|
|
169
188
|
children: "Tasks"
|
|
170
189
|
})]
|
|
171
190
|
}),
|
|
172
|
-
/* @__PURE__ */
|
|
191
|
+
/* @__PURE__ */ h("div", {
|
|
173
192
|
className: "p-3 bg-muted rounded-md",
|
|
174
|
-
children: [/* @__PURE__ */
|
|
193
|
+
children: [/* @__PURE__ */ m("p", {
|
|
175
194
|
className: "text-lg font-bold",
|
|
176
195
|
children: t.velocity == null ? "—" : t.velocity
|
|
177
|
-
}), /* @__PURE__ */
|
|
196
|
+
}), /* @__PURE__ */ m("p", {
|
|
178
197
|
className: "text-xs text-muted-foreground",
|
|
179
198
|
title: "Story points done when the sprint was completed",
|
|
180
199
|
children: "Velocity"
|
|
@@ -182,48 +201,48 @@ function b() {
|
|
|
182
201
|
})
|
|
183
202
|
]
|
|
184
203
|
}),
|
|
185
|
-
/* @__PURE__ */
|
|
204
|
+
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("div", {
|
|
186
205
|
className: "flex justify-between text-xs mb-1",
|
|
187
|
-
children: [/* @__PURE__ */
|
|
206
|
+
children: [/* @__PURE__ */ m("span", {
|
|
188
207
|
className: "text-muted-foreground",
|
|
189
208
|
children: "Sprint Progress"
|
|
190
|
-
}), /* @__PURE__ */
|
|
209
|
+
}), /* @__PURE__ */ h("span", {
|
|
191
210
|
className: "font-medium",
|
|
192
211
|
children: [i, "%"]
|
|
193
212
|
})]
|
|
194
|
-
}), /* @__PURE__ */
|
|
213
|
+
}), /* @__PURE__ */ m("div", {
|
|
195
214
|
className: "w-full h-2 rounded-full bg-muted overflow-hidden",
|
|
196
|
-
children: /* @__PURE__ */
|
|
215
|
+
children: /* @__PURE__ */ m("div", {
|
|
197
216
|
className: "h-full bg-primary rounded-full",
|
|
198
217
|
style: { width: `${i}%` }
|
|
199
218
|
})
|
|
200
219
|
})] }),
|
|
201
|
-
r.length > 0 && /* @__PURE__ */
|
|
220
|
+
r.length > 0 && /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
202
221
|
className: "text-xs font-medium text-muted-foreground mb-2",
|
|
203
222
|
children: "Sprint Backlog"
|
|
204
|
-
}), /* @__PURE__ */
|
|
223
|
+
}), /* @__PURE__ */ m("div", {
|
|
205
224
|
className: "space-y-1",
|
|
206
|
-
children: r.map((e) => /* @__PURE__ */
|
|
225
|
+
children: r.map((e) => /* @__PURE__ */ h("div", {
|
|
207
226
|
className: "flex items-center justify-between border rounded p-2 text-sm",
|
|
208
|
-
children: [/* @__PURE__ */
|
|
227
|
+
children: [/* @__PURE__ */ m("span", { children: e.title }), /* @__PURE__ */ h("div", {
|
|
209
228
|
className: "flex gap-1",
|
|
210
|
-
children: [/* @__PURE__ */
|
|
229
|
+
children: [/* @__PURE__ */ m(g, {
|
|
211
230
|
variant: "secondary",
|
|
212
231
|
className: "text-xs capitalize",
|
|
213
232
|
children: e.status.toLowerCase().replace("_", " ")
|
|
214
|
-
}), /* @__PURE__ */
|
|
233
|
+
}), /* @__PURE__ */ h("span", {
|
|
215
234
|
className: "text-xs text-muted-foreground",
|
|
216
235
|
children: [e.storyPoints ?? 0, "pts"]
|
|
217
236
|
})]
|
|
218
237
|
})]
|
|
219
238
|
}, e.id))
|
|
220
239
|
})] }),
|
|
221
|
-
/* @__PURE__ */
|
|
240
|
+
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
222
241
|
className: "text-xs font-medium text-muted-foreground mb-1",
|
|
223
242
|
children: "Team"
|
|
224
|
-
}), /* @__PURE__ */
|
|
243
|
+
}), /* @__PURE__ */ m("div", {
|
|
225
244
|
className: "flex gap-2",
|
|
226
|
-
children: t.teamMemberIds.map((e) => /* @__PURE__ */
|
|
245
|
+
children: t.teamMemberIds.map((e) => /* @__PURE__ */ m(n, {
|
|
227
246
|
id: e,
|
|
228
247
|
className: "h-7 w-7 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary"
|
|
229
248
|
}, e))
|
|
@@ -232,83 +251,83 @@ function b() {
|
|
|
232
251
|
})] }, e.id);
|
|
233
252
|
})]
|
|
234
253
|
}),
|
|
235
|
-
|
|
254
|
+
M.length > 0 && /* @__PURE__ */ h("div", {
|
|
236
255
|
className: "space-y-4",
|
|
237
|
-
children: [/* @__PURE__ */
|
|
256
|
+
children: [/* @__PURE__ */ m("h2", {
|
|
238
257
|
className: "text-lg font-medium",
|
|
239
258
|
children: "Planning"
|
|
240
|
-
}),
|
|
241
|
-
let t =
|
|
242
|
-
return /* @__PURE__ */
|
|
259
|
+
}), M.map((e) => {
|
|
260
|
+
let t = S(e);
|
|
261
|
+
return /* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, {
|
|
243
262
|
className: "pb-2",
|
|
244
|
-
children: /* @__PURE__ */
|
|
263
|
+
children: /* @__PURE__ */ h("div", {
|
|
245
264
|
className: "flex items-center justify-between",
|
|
246
|
-
children: [/* @__PURE__ */
|
|
265
|
+
children: [/* @__PURE__ */ m(b, {
|
|
247
266
|
className: "text-base",
|
|
248
|
-
children: /* @__PURE__ */
|
|
267
|
+
children: /* @__PURE__ */ m("button", {
|
|
249
268
|
type: "button",
|
|
250
269
|
className: "hover:underline text-left",
|
|
251
|
-
onClick: () =>
|
|
270
|
+
onClick: () => F(e.id),
|
|
252
271
|
children: e.name
|
|
253
272
|
})
|
|
254
|
-
}), /* @__PURE__ */
|
|
273
|
+
}), /* @__PURE__ */ h("div", {
|
|
255
274
|
className: "flex items-start gap-2",
|
|
256
|
-
children: [/* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ m(g, {
|
|
257
276
|
variant: "secondary",
|
|
258
277
|
children: "Planning"
|
|
259
|
-
}), /* @__PURE__ */
|
|
278
|
+
}), /* @__PURE__ */ m(c, {
|
|
260
279
|
sprintId: e.id,
|
|
261
280
|
sprintName: e.name,
|
|
262
281
|
status: e.status
|
|
263
282
|
})]
|
|
264
283
|
})]
|
|
265
284
|
})
|
|
266
|
-
}), /* @__PURE__ */
|
|
285
|
+
}), /* @__PURE__ */ h(v, {
|
|
267
286
|
className: "space-y-2",
|
|
268
287
|
children: [
|
|
269
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ m("p", {
|
|
270
289
|
className: "text-sm text-muted-foreground",
|
|
271
290
|
children: e.goal ?? ""
|
|
272
291
|
}),
|
|
273
|
-
/* @__PURE__ */
|
|
274
|
-
/* @__PURE__ */
|
|
292
|
+
/* @__PURE__ */ m(l, { sprint: e }),
|
|
293
|
+
/* @__PURE__ */ h("div", {
|
|
275
294
|
className: "flex gap-4 text-xs text-muted-foreground",
|
|
276
|
-
children: [/* @__PURE__ */
|
|
295
|
+
children: [/* @__PURE__ */ h("span", { children: [t.totalPoints, " points planned"] }), /* @__PURE__ */ h("span", { children: [t.teamMemberIds.length, " members"] })]
|
|
277
296
|
})
|
|
278
297
|
]
|
|
279
298
|
})] }, e.id);
|
|
280
299
|
})]
|
|
281
300
|
}),
|
|
282
|
-
|
|
301
|
+
N.length > 0 && /* @__PURE__ */ h("div", {
|
|
283
302
|
className: "space-y-4",
|
|
284
303
|
"data-testid": "finished-sprints",
|
|
285
|
-
children: [/* @__PURE__ */
|
|
304
|
+
children: [/* @__PURE__ */ m("h2", {
|
|
286
305
|
className: "text-lg font-medium",
|
|
287
306
|
children: "Finished"
|
|
288
|
-
}),
|
|
289
|
-
let t =
|
|
290
|
-
return /* @__PURE__ */
|
|
307
|
+
}), N.map((e) => {
|
|
308
|
+
let t = S(e);
|
|
309
|
+
return /* @__PURE__ */ h(_, {
|
|
291
310
|
"data-testid": "finished-sprint",
|
|
292
|
-
children: [/* @__PURE__ */
|
|
311
|
+
children: [/* @__PURE__ */ m(y, {
|
|
293
312
|
className: "pb-2",
|
|
294
|
-
children: /* @__PURE__ */
|
|
313
|
+
children: /* @__PURE__ */ h("div", {
|
|
295
314
|
className: "flex items-center justify-between",
|
|
296
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ m(b, {
|
|
297
316
|
className: "text-base",
|
|
298
|
-
children: /* @__PURE__ */
|
|
317
|
+
children: /* @__PURE__ */ m("button", {
|
|
299
318
|
type: "button",
|
|
300
319
|
className: "hover:underline text-left",
|
|
301
|
-
onClick: () =>
|
|
320
|
+
onClick: () => F(e.id),
|
|
302
321
|
children: e.name
|
|
303
322
|
})
|
|
304
|
-
}), /* @__PURE__ */
|
|
323
|
+
}), /* @__PURE__ */ m(g, {
|
|
305
324
|
variant: "outline",
|
|
306
325
|
children: e.status === "COMPLETED" ? "Completed" : "Cancelled"
|
|
307
326
|
})]
|
|
308
327
|
})
|
|
309
|
-
}), /* @__PURE__ */
|
|
328
|
+
}), /* @__PURE__ */ h(v, {
|
|
310
329
|
className: "space-y-2",
|
|
311
|
-
children: [/* @__PURE__ */
|
|
330
|
+
children: [/* @__PURE__ */ m(l, { sprint: e }), /* @__PURE__ */ h("p", {
|
|
312
331
|
className: "text-xs text-muted-foreground",
|
|
313
332
|
children: [
|
|
314
333
|
t.completedPoints,
|
|
@@ -325,6 +344,6 @@ function b() {
|
|
|
325
344
|
});
|
|
326
345
|
}
|
|
327
346
|
//#endregion
|
|
328
|
-
export {
|
|
347
|
+
export { C as SprintsStartSprintPagePage };
|
|
329
348
|
|
|
330
349
|
//# sourceMappingURL=SprintsStartSprintPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SprintsStartSprintPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/SprintsStartSprintPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Zap, Users } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { NewSprintDialog, SprintLifecycleActions } from '../sprints/SprintControls';\nimport { SprintDates, type SprintPlanChange } from '../sprints/SprintDates';\nimport { PersonAvatar } from '../people/People';\n\nconst GET_SPRINTS = gql`\n query GetSprints(\n $workspaceId: ID!\n $filter: PlanmagnetSprintFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetSprints(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n goal\n status\n startDate\n endDate\n startedAt\n completedAt\n baselineStartDate\n baselineEndDate\n planChanges {\n field\n fromValue\n toValue\n sprintStatus\n changedBy\n changedAt\n }\n velocity\n workItems {\n id\n title\n status\n storyPoints\n assigneeId\n }\n }\n totalCount\n }\n }\n`;\n\ninterface SprintWorkItem {\n id: string;\n title: string;\n status: string;\n storyPoints: number | null;\n assigneeId: string | null;\n}\n\ninterface SprintNode {\n id: string;\n name: string;\n goal: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n startedAt: string | null;\n completedAt: string | null;\n baselineStartDate: string | null;\n baselineEndDate: string | null;\n planChanges: SprintPlanChange[];\n velocity: number | null;\n workItems: SprintWorkItem[];\n}\n\ninterface SprintMetrics {\n totalPoints: number;\n completedPoints: number;\n tasksTotal: number;\n tasksCompleted: number;\n teamMemberIds: string[];\n velocity: number | null;\n}\n\nfunction deriveSprintMetrics(sprint: SprintNode): SprintMetrics {\n const items = sprint.workItems ?? [];\n const totalPoints = items.reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const completedPoints = items\n .filter((w) => w.status === 'DONE')\n .reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const tasksTotal = items.length;\n const tasksCompleted = items.filter((w) => w.status === 'DONE').length;\n const teamMemberIds = Array.from(\n new Set(items.map((w) => w.assigneeId).filter((id): id is string => Boolean(id)))\n );\n // BOFF-7944: velocity is the server's DONE-points-at-completion, set only once the sprint is COMPLETED. It used to\n // fall back to the points done so far — a different number under the same name (the Points tile shows that).\n const velocity = sprint.velocity;\n return { totalPoints, completedPoints, tasksTotal, tasksCompleted, teamMemberIds, velocity };\n}\n\nexport function SprintsStartSprintPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n const {\n data: sprintData,\n loading: sprintsLoading,\n error: sprintsError,\n } = useQuery<{\n planmagnetSprints: { items: SprintNode[]; totalCount: number };\n }>(GET_SPRINTS, {\n variables: { workspaceId, pagination: { first: 50 } },\n skip: !workspaceId,\n });\n\n const sprints = sprintData?.planmagnetSprints?.items ?? [];\n // REVIEW is still in flight (it can be completed or cancelled), so it\n // belongs with the active sprints rather than vanishing from this page.\n const activeSprints = sprints.filter((s) => s.status === 'ACTIVE' || s.status === 'REVIEW');\n const planningSprints = sprints.filter((s) => s.status === 'PLANNING');\n // Finished sprints used to vanish from this page, so \"did we finish on\n // time?\" had nowhere to be answered (BOFF-7918).\n const finishedSprints = sprints.filter(\n (s) => s.status === 'COMPLETED' || s.status === 'CANCELLED'\n );\n\n const navigate = usePlanMagnetNavigate();\n const openSprint = (id: string) => navigate(detailPath('/projects/planning-detail-page', id));\n\n // Only before the first load: a refetch after a sprint action must not blank\n // the page (it unmounted the controls mid-action).\n if (sprintsLoading && !sprintData) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (sprintsError) {\n return <div className=\"p-6 text-red-500\">Error: {sprintsError.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Sprint Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n {sprints.length} sprints total · {activeSprints.length} active\n </p>\n </div>\n <NewSprintDialog onCreated={openSprint} />\n </div>\n\n {activeSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Active Sprints</h2>\n {activeSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n const tasksForSprint = sprint.workItems ?? [];\n const pctDone =\n metrics.totalPoints > 0\n ? Math.round((metrics.completedPoints / metrics.totalPoints) * 100)\n : 0;\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-primary\" />\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <Badge>{sprint.status === 'REVIEW' ? 'Review' : 'Active'}</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {metrics.teamMemberIds.length} members\n </span>\n </div>\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.completedPoints}/{metrics.totalPoints}\n </p>\n <p className=\"text-xs text-muted-foreground\">Points</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.tasksCompleted}/{metrics.tasksTotal}\n </p>\n <p className=\"text-xs text-muted-foreground\">Tasks</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.velocity != null ? metrics.velocity : '—'}\n </p>\n <p\n className=\"text-xs text-muted-foreground\"\n title=\"Story points done when the sprint was completed\"\n >\n Velocity\n </p>\n </div>\n </div>\n <div>\n <div className=\"flex justify-between text-xs mb-1\">\n <span className=\"text-muted-foreground\">Sprint Progress</span>\n <span className=\"font-medium\">{pctDone}%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{ width: `${pctDone}%` }}\n />\n </div>\n </div>\n {tasksForSprint.length > 0 && (\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Sprint Backlog\n </p>\n <div className=\"space-y-1\">\n {tasksForSprint.map((t) => (\n <div\n key={t.id}\n className=\"flex items-center justify-between border rounded p-2 text-sm\"\n >\n <span>{t.title}</span>\n <div className=\"flex gap-1\">\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {t.status.toLowerCase().replace('_', ' ')}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n {t.storyPoints ?? 0}pts\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-1\">Team</p>\n <div className=\"flex gap-2\">\n {/* Initials and tooltip from the person's resolved name; these were two characters of the\n user UUID with the full UUID as the tooltip (BOFF-7977). */}\n {metrics.teamMemberIds.map((memberId) => (\n <PersonAvatar\n key={memberId}\n id={memberId}\n className=\"h-7 w-7 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary\"\n />\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {planningSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Planning</h2>\n {planningSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <Badge variant=\"secondary\">Planning</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span>{metrics.totalPoints} points planned</span>\n <span>{metrics.teamMemberIds.length} members</span>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {finishedSprints.length > 0 && (\n <div className=\"space-y-4\" data-testid=\"finished-sprints\">\n <h2 className=\"text-lg font-medium\">Finished</h2>\n {finishedSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id} data-testid=\"finished-sprint\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <Badge variant=\"outline\">\n {sprint.status === 'COMPLETED' ? 'Completed' : 'Cancelled'}\n </Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <SprintDates sprint={sprint} />\n <p className=\"text-xs text-muted-foreground\">\n {metrics.completedPoints}/{metrics.totalPoints} points done\n </p>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SprintsStartSprintPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/SprintsStartSprintPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Zap, Users } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { NewSprintDialog, SprintLifecycleActions } from '../sprints/SprintControls';\nimport { SprintDates, type SprintPlanChange } from '../sprints/SprintDates';\nimport { PersonAvatar } from '../people/People';\nimport { countLabel, useSprintCounts, workProgress } from '../hooks/useCounts';\n\nconst GET_SPRINTS = gql`\n query GetSprints(\n $workspaceId: ID!\n $filter: PlanmagnetSprintFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetSprints(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n goal\n status\n startDate\n endDate\n startedAt\n completedAt\n baselineStartDate\n baselineEndDate\n planChanges {\n field\n fromValue\n toValue\n sprintStatus\n changedBy\n changedAt\n }\n velocity\n workItems {\n id\n title\n status\n storyPoints\n assigneeId\n }\n }\n totalCount\n }\n }\n`;\n\ninterface SprintWorkItem {\n id: string;\n title: string;\n status: string;\n storyPoints: number | null;\n assigneeId: string | null;\n}\n\ninterface SprintNode {\n id: string;\n name: string;\n goal: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n startedAt: string | null;\n completedAt: string | null;\n baselineStartDate: string | null;\n baselineEndDate: string | null;\n planChanges: SprintPlanChange[];\n velocity: number | null;\n workItems: SprintWorkItem[];\n}\n\ninterface SprintMetrics {\n totalPoints: number;\n completedPoints: number;\n tasksTotal: number;\n tasksCompleted: number;\n teamMemberIds: string[];\n velocity: number | null;\n}\n\nfunction deriveSprintMetrics(sprint: SprintNode): SprintMetrics {\n const items = sprint.workItems ?? [];\n const totalPoints = items.reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const completedPoints = items\n .filter((w) => w.status === 'DONE')\n .reduce((sum, w) => sum + (w.storyPoints ?? 0), 0);\n const tasksTotal = items.length;\n const tasksCompleted = items.filter((w) => w.status === 'DONE').length;\n const teamMemberIds = Array.from(\n new Set(items.map((w) => w.assigneeId).filter((id): id is string => Boolean(id)))\n );\n // BOFF-7944: velocity is the server's DONE-points-at-completion, set only once the sprint is COMPLETED. It used to\n // fall back to the points done so far — a different number under the same name (the Points tile shows that).\n const velocity = sprint.velocity;\n return { totalPoints, completedPoints, tasksTotal, tasksCompleted, teamMemberIds, velocity };\n}\n\nexport function SprintsStartSprintPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n const {\n data: sprintData,\n loading: sprintsLoading,\n error: sprintsError,\n } = useQuery<{\n planmagnetSprints: { items: SprintNode[]; totalCount: number };\n }>(GET_SPRINTS, {\n variables: { workspaceId, pagination: { first: 50 } },\n skip: !workspaceId,\n });\n\n // Running sprints are queried by status (BOFF-7970): taken from the 50 newest sprints, a long-running sprint with\n // 50 newer ones disappeared from this page. REVIEW is still in flight, so it counts as running everywhere.\n const running = { skip: !workspaceId, variables: { workspaceId, pagination: { first: 50 } } };\n const { data: activeData } = useQuery<{ planmagnetSprints: { items: SprintNode[] } }>(\n GET_SPRINTS,\n {\n ...running,\n variables: { ...running.variables, filter: { status: 'ACTIVE' } },\n }\n );\n const { data: reviewData } = useQuery<{ planmagnetSprints: { items: SprintNode[] } }>(\n GET_SPRINTS,\n {\n ...running,\n variables: { ...running.variables, filter: { status: 'REVIEW' } },\n }\n );\n const counts = useSprintCounts();\n\n const sprints = sprintData?.planmagnetSprints?.items ?? [];\n const activeSprints = [\n ...(activeData?.planmagnetSprints.items ?? []),\n ...(reviewData?.planmagnetSprints.items ?? []),\n ];\n const planningSprints = sprints.filter((s) => s.status === 'PLANNING');\n // Finished sprints used to vanish from this page, so \"did we finish on\n // time?\" had nowhere to be answered (BOFF-7918).\n const finishedSprints = sprints.filter(\n (s) => s.status === 'COMPLETED' || s.status === 'CANCELLED'\n );\n\n const navigate = usePlanMagnetNavigate();\n const openSprint = (id: string) => navigate(detailPath('/projects/planning-detail-page', id));\n\n // Only before the first load: a refetch after a sprint action must not blank\n // the page (it unmounted the controls mid-action).\n if (sprintsLoading && !sprintData) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (sprintsError) {\n return <div className=\"p-6 text-red-500\">Error: {sprintsError.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Sprint Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n {countLabel(counts?.all)} sprints total · {countLabel(counts?.running)} running\n </p>\n </div>\n <NewSprintDialog onCreated={openSprint} />\n </div>\n\n {activeSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Active Sprints</h2>\n {activeSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n const tasksForSprint = sprint.workItems ?? [];\n // Done over everything not cancelled, by tasks when nothing is estimated (BOFF-7989).\n const pctDone = workProgress(tasksForSprint) ?? 0;\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Zap className=\"h-4 w-4 text-primary\" />\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <Badge>{sprint.status === 'REVIEW' ? 'Review' : 'Active'}</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {metrics.teamMemberIds.length} members\n </span>\n </div>\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.completedPoints}/{metrics.totalPoints}\n </p>\n <p className=\"text-xs text-muted-foreground\">Points</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.tasksCompleted}/{metrics.tasksTotal}\n </p>\n <p className=\"text-xs text-muted-foreground\">Tasks</p>\n </div>\n <div className=\"p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-bold\">\n {metrics.velocity != null ? metrics.velocity : '—'}\n </p>\n <p\n className=\"text-xs text-muted-foreground\"\n title=\"Story points done when the sprint was completed\"\n >\n Velocity\n </p>\n </div>\n </div>\n <div>\n <div className=\"flex justify-between text-xs mb-1\">\n <span className=\"text-muted-foreground\">Sprint Progress</span>\n <span className=\"font-medium\">{pctDone}%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{ width: `${pctDone}%` }}\n />\n </div>\n </div>\n {tasksForSprint.length > 0 && (\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Sprint Backlog\n </p>\n <div className=\"space-y-1\">\n {tasksForSprint.map((t) => (\n <div\n key={t.id}\n className=\"flex items-center justify-between border rounded p-2 text-sm\"\n >\n <span>{t.title}</span>\n <div className=\"flex gap-1\">\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {t.status.toLowerCase().replace('_', ' ')}\n </Badge>\n <span className=\"text-xs text-muted-foreground\">\n {t.storyPoints ?? 0}pts\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-xs font-medium text-muted-foreground mb-1\">Team</p>\n <div className=\"flex gap-2\">\n {/* Initials and tooltip from the person's resolved name; these were two characters of the\n user UUID with the full UUID as the tooltip (BOFF-7977). */}\n {metrics.teamMemberIds.map((memberId) => (\n <PersonAvatar\n key={memberId}\n id={memberId}\n className=\"h-7 w-7 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-medium text-primary\"\n />\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {planningSprints.length > 0 && (\n <div className=\"space-y-4\">\n <h2 className=\"text-lg font-medium\">Planning</h2>\n {planningSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id}>\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <div className=\"flex items-start gap-2\">\n <Badge variant=\"secondary\">Planning</Badge>\n <SprintLifecycleActions\n sprintId={sprint.id}\n sprintName={sprint.name}\n status={sprint.status}\n />\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <p className=\"text-sm text-muted-foreground\">{sprint.goal ?? ''}</p>\n <SprintDates sprint={sprint} />\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span>{metrics.totalPoints} points planned</span>\n <span>{metrics.teamMemberIds.length} members</span>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {finishedSprints.length > 0 && (\n <div className=\"space-y-4\" data-testid=\"finished-sprints\">\n <h2 className=\"text-lg font-medium\">Finished</h2>\n {finishedSprints.map((sprint) => {\n const metrics = deriveSprintMetrics(sprint);\n return (\n <Card key={sprint.id} data-testid=\"finished-sprint\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">\n <button\n type=\"button\"\n className=\"hover:underline text-left\"\n onClick={() => openSprint(sprint.id)}\n >\n {sprint.name}\n </button>\n </CardTitle>\n <Badge variant=\"outline\">\n {sprint.status === 'COMPLETED' ? 'Completed' : 'Cancelled'}\n </Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <SprintDates sprint={sprint} />\n <p className=\"text-xs text-muted-foreground\">\n {metrics.completedPoints}/{metrics.totalPoints} points done\n </p>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TasksImportPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksImportPagePage.tsx"],"names":[],"mappings":"AAwEA,wBAAgB,mBAAmB,4CAwTlC"}
|