@burdenoff/microfe-planmagnet 2026.1002.2 → 2026.1002.3
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/wspace-operations.d.ts +574 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-types.d.ts +486 -16
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +174 -168
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +63 -59
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/board/BulkActions.d.ts.map +1 -1
- package/dist/planmagnet/board/BulkActions.js +106 -55
- package/dist/planmagnet/board/BulkActions.js.map +1 -1
- package/dist/planmagnet/controls/Pickers.d.ts +3 -3
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/dashboards/DashboardUI.d.ts +0 -4
- package/dist/planmagnet/dashboards/DashboardUI.d.ts.map +1 -1
- package/dist/planmagnet/dashboards/DashboardUI.js +6 -13
- package/dist/planmagnet/dashboards/DashboardUI.js.map +1 -1
- package/dist/planmagnet/dashboards/cards/SprintCapacityCard.d.ts.map +1 -1
- package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js +70 -59
- package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js.map +1 -1
- package/dist/planmagnet/forecast/ResourceForecastCard.js +1 -1
- package/dist/planmagnet/forecast/ResourceForecastCard.js.map +1 -1
- package/dist/planmagnet/index.d.ts +1 -1
- package/dist/planmagnet/index.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.d.ts +3 -3
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js +26 -19
- package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js.map +1 -1
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.d.ts +2 -2
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js +18 -12
- package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js +251 -0
- package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +94 -92
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +116 -114
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +174 -159
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +159 -145
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js +161 -143
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +157 -155
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js +97 -99
- package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js.map +1 -1
- package/dist/planmagnet/product/FeatureLinkPanels.js +66 -66
- package/dist/planmagnet/product/ProductFeatureControls.js +38 -38
- package/dist/planmagnet/product/ProductFeatureLinkCard.js +8 -8
- package/dist/planmagnet/product/ProductLineControls.js +83 -83
- package/dist/planmagnet/product/ProductTeamsPanel.js +6 -6
- package/dist/planmagnet/product/routes.d.ts +6 -0
- package/dist/planmagnet/product/routes.d.ts.map +1 -1
- package/dist/planmagnet/product/routes.js +2 -2
- package/dist/planmagnet/product/routes.js.map +1 -1
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.d.ts +20 -0
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js +55 -0
- package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionFigures.d.ts +30 -0
- package/dist/planmagnet/satisfaction/SatisfactionFigures.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionFigures.js +282 -0
- package/dist/planmagnet/satisfaction/SatisfactionFigures.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.d.ts +9 -0
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js +390 -0
- package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.d.ts +17 -0
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js +77 -0
- package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.d.ts +18 -0
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js +87 -0
- package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.d.ts +13 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js +326 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.d.ts +23 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js +258 -0
- package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.d.ts +6 -0
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js +56 -0
- package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.d.ts +16 -0
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js +102 -0
- package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js.map +1 -0
- package/dist/planmagnet/satisfaction/satisfaction.d.ts +154 -0
- package/dist/planmagnet/satisfaction/satisfaction.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/satisfaction.js +210 -0
- package/dist/planmagnet/satisfaction/satisfaction.js.map +1 -0
- package/dist/planmagnet/satisfaction/satisfactionCsv.d.ts +108 -0
- package/dist/planmagnet/satisfaction/satisfactionCsv.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/satisfactionCsv.js +211 -0
- package/dist/planmagnet/satisfaction/satisfactionCsv.js.map +1 -0
- package/dist/planmagnet/satisfaction/satisfactionForm.d.ts +90 -0
- package/dist/planmagnet/satisfaction/satisfactionForm.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/satisfactionForm.js +90 -0
- package/dist/planmagnet/satisfaction/satisfactionForm.js.map +1 -0
- package/dist/planmagnet/satisfaction/satisfactionOperations.d.ts +116 -0
- package/dist/planmagnet/satisfaction/satisfactionOperations.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/satisfactionOperations.js +86 -0
- package/dist/planmagnet/satisfaction/satisfactionOperations.js.map +1 -0
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.d.ts +20 -0
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.d.ts.map +1 -0
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.js +31 -0
- package/dist/planmagnet/satisfaction/useSatisfactionAccess.js.map +1 -0
- package/dist/planmagnet/skills/RequiredSkillsEditor.d.ts +35 -0
- package/dist/planmagnet/skills/RequiredSkillsEditor.d.ts.map +1 -0
- package/dist/planmagnet/skills/RequiredSkillsEditor.js +124 -0
- package/dist/planmagnet/skills/RequiredSkillsEditor.js.map +1 -0
- package/dist/planmagnet/skills/SkillChips.d.ts +30 -0
- package/dist/planmagnet/skills/SkillChips.d.ts.map +1 -0
- package/dist/planmagnet/skills/SkillChips.js +57 -0
- package/dist/planmagnet/skills/SkillChips.js.map +1 -0
- package/dist/planmagnet/skills/SkillCoverageCard.d.ts +24 -0
- package/dist/planmagnet/skills/SkillCoverageCard.d.ts.map +1 -0
- package/dist/planmagnet/skills/SkillCoverageCard.js +256 -0
- package/dist/planmagnet/skills/SkillCoverageCard.js.map +1 -0
- package/dist/planmagnet/skills/WorkItemRequiredSkills.d.ts +10 -0
- package/dist/planmagnet/skills/WorkItemRequiredSkills.d.ts.map +1 -0
- package/dist/planmagnet/skills/WorkItemRequiredSkills.js +65 -0
- package/dist/planmagnet/skills/WorkItemRequiredSkills.js.map +1 -0
- package/dist/planmagnet/skills/skillOperations.d.ts +52 -0
- package/dist/planmagnet/skills/skillOperations.d.ts.map +1 -0
- package/dist/planmagnet/skills/skillOperations.js +44 -0
- package/dist/planmagnet/skills/skillOperations.js.map +1 -0
- package/dist/planmagnet/skills/skillTags.d.ts +103 -0
- package/dist/planmagnet/skills/skillTags.d.ts.map +1 -0
- package/dist/planmagnet/skills/skillTags.js +115 -0
- package/dist/planmagnet/skills/skillTags.js.map +1 -0
- package/dist/planmagnet/skills/useRequiredSkillsDraft.d.ts +28 -0
- package/dist/planmagnet/skills/useRequiredSkillsDraft.d.ts.map +1 -0
- package/dist/planmagnet/skills/useRequiredSkillsDraft.js +30 -0
- package/dist/planmagnet/skills/useRequiredSkillsDraft.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
2
|
import { PersonAvatar as n, PersonName as r, initialsOf as i } from "../people/People.js";
|
|
3
|
+
import { useTr as ee } from "../../shared/hooks/useTr.js";
|
|
3
4
|
import { detailPath as a } from "../utils/rowNavigation.js";
|
|
4
5
|
import { useEntityId as o } from "../hooks/useEntityId.js";
|
|
5
6
|
import { combineLiveRefreshModes as s, useLiveRefresh as c } from "../hooks/useLiveRefresh.js";
|
|
6
7
|
import { LiveStatus as l } from "../controls/LiveStatus.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
8
|
+
import { MemberSkills as u } from "../skills/SkillChips.js";
|
|
9
|
+
import { SprintLifecycleActions as d, SprintWorkItemsPanel as f } from "../sprints/SprintControls.js";
|
|
10
|
+
import { SprintDates as p } from "../sprints/SprintDates.js";
|
|
11
|
+
import { MeetingsCard as m } from "../meetings/MeetingsCard.js";
|
|
12
|
+
import { ScheduleCeremoniesDialog as h } from "../meetings/ScheduleCeremoniesDialog.js";
|
|
13
|
+
import { BarChart3 as g, FolderKanban as _, Pencil as v, Users as y } from "lucide-react";
|
|
14
|
+
import { gql as b } from "@apollo/client";
|
|
15
|
+
import { useQuery as x } from "@apollo/client/react";
|
|
16
|
+
import { jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
17
|
+
import { Badge as w, Button as T, Card as E, CardContent as D, CardHeader as O, CardTitle as k } from "@burdenoff/fe-libs/ui";
|
|
16
18
|
//#region src/planmagnet/pages/ProjectsPlanningDetailPagePage.tsx
|
|
17
|
-
var
|
|
19
|
+
var A = ["GetSprintDetail", "GetSprintCapacity"], j = b`
|
|
18
20
|
query GetSprintDetail($id: ID!) {
|
|
19
21
|
planmagnetSprint(id: $id) {
|
|
20
22
|
id
|
|
@@ -62,7 +64,7 @@ var k = ["GetSprintDetail", "GetSprintCapacity"], A = y`
|
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
|
-
`,
|
|
67
|
+
`, M = b`
|
|
66
68
|
query GetSprintCapacity($sprintId: ID!) {
|
|
67
69
|
planmagnetSprintCapacity(sprintId: $sprintId) {
|
|
68
70
|
sprintId
|
|
@@ -70,7 +72,9 @@ var k = ["GetSprintDetail", "GetSprintCapacity"], A = y`
|
|
|
70
72
|
unmatchedCount
|
|
71
73
|
members {
|
|
72
74
|
actorId
|
|
75
|
+
employeeId
|
|
73
76
|
employeeName
|
|
77
|
+
skills
|
|
74
78
|
department
|
|
75
79
|
position
|
|
76
80
|
allocatedHours
|
|
@@ -82,310 +86,321 @@ var k = ["GetSprintDetail", "GetSprintCapacity"], A = y`
|
|
|
82
86
|
}
|
|
83
87
|
}
|
|
84
88
|
`;
|
|
85
|
-
function
|
|
86
|
-
let
|
|
87
|
-
variables: { id:
|
|
88
|
-
skip: !
|
|
89
|
-
}), { data:
|
|
90
|
-
variables: { sprintId:
|
|
91
|
-
skip: !
|
|
92
|
-
}),
|
|
89
|
+
function N() {
|
|
90
|
+
let b = o("sprintId"), N = t(), { workspaceId: P } = e(), F = ee(), { data: I, loading: L, error: R } = x(j, {
|
|
91
|
+
variables: { id: b },
|
|
92
|
+
skip: !b
|
|
93
|
+
}), { data: z } = x(M, {
|
|
94
|
+
variables: { sprintId: b },
|
|
95
|
+
skip: !b
|
|
96
|
+
}), B = I?.planmagnetSprint?.projectId ?? null, V = c({
|
|
93
97
|
kind: "sprint",
|
|
94
|
-
sprintId:
|
|
95
|
-
projectId:
|
|
96
|
-
queries:
|
|
97
|
-
}),
|
|
98
|
+
sprintId: b,
|
|
99
|
+
projectId: B,
|
|
100
|
+
queries: A
|
|
101
|
+
}), H = c({
|
|
98
102
|
kind: "workItem",
|
|
99
|
-
projectId:
|
|
100
|
-
enabled: !!
|
|
101
|
-
queries:
|
|
102
|
-
}),
|
|
103
|
-
if (!
|
|
103
|
+
projectId: B,
|
|
104
|
+
enabled: !!B,
|
|
105
|
+
queries: A
|
|
106
|
+
}), U = s(V.mode, H.mode);
|
|
107
|
+
if (!b) return /* @__PURE__ */ S("div", {
|
|
104
108
|
className: "p-6 text-muted-foreground",
|
|
105
109
|
children: "No planning session selected. Open one from the list."
|
|
106
110
|
});
|
|
107
|
-
if (
|
|
111
|
+
if (L && !I) return /* @__PURE__ */ S("div", {
|
|
108
112
|
className: "flex items-center justify-center p-12",
|
|
109
|
-
children: /* @__PURE__ */
|
|
113
|
+
children: /* @__PURE__ */ S("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
|
|
110
114
|
});
|
|
111
|
-
if (
|
|
115
|
+
if (R) return /* @__PURE__ */ C("div", {
|
|
112
116
|
className: "p-6 text-red-500",
|
|
113
|
-
children: ["Error loading planning session: ",
|
|
117
|
+
children: ["Error loading planning session: ", R.message]
|
|
114
118
|
});
|
|
115
|
-
let
|
|
116
|
-
if (!
|
|
119
|
+
let W = I?.planmagnetSprint;
|
|
120
|
+
if (!W) return /* @__PURE__ */ S("div", {
|
|
117
121
|
className: "p-6 text-muted-foreground",
|
|
118
122
|
children: "Planning session not found."
|
|
119
123
|
});
|
|
120
|
-
let
|
|
121
|
-
for (let e of
|
|
124
|
+
let G = z?.planmagnetSprintCapacity, K = {};
|
|
125
|
+
for (let e of G?.members ?? []) K[e.actorId] = {
|
|
126
|
+
employeeId: e.employeeId,
|
|
122
127
|
employeeName: e.employeeName,
|
|
128
|
+
skills: e.skills ?? [],
|
|
123
129
|
allocatedHours: e.allocatedHours,
|
|
124
130
|
billableHours: e.billableHours,
|
|
125
131
|
utilizationPercent: e.utilizationPercent
|
|
126
132
|
};
|
|
127
|
-
let
|
|
128
|
-
|
|
129
|
-
let
|
|
130
|
-
return /* @__PURE__ */
|
|
133
|
+
let q = W.workItems ?? [], J = q.reduce((e, t) => e + (t.storyPoints ?? 0), 0);
|
|
134
|
+
q.filter((e) => e.status === "DONE").reduce((e, t) => e + (t.storyPoints ?? 0), 0);
|
|
135
|
+
let Y = W.capacity ?? null, X = Y && Y > 0 ? Math.round(J / Y * 100) : null, Z = Y == null ? null : Math.max(0, Y - J), Q = [...new Set(q.map((e) => e.assigneeId).filter(Boolean))], $ = W.team?.projects ?? [], te = W.team ? $.map((e) => e.id) : W.projectId ? [W.projectId] : [], ne = W.team ? Object.fromEntries($.map((e) => [e.id, e.name])) : void 0;
|
|
136
|
+
return /* @__PURE__ */ C("div", {
|
|
131
137
|
className: "space-y-6 p-6",
|
|
132
|
-
children: [/* @__PURE__ */
|
|
138
|
+
children: [/* @__PURE__ */ C("div", {
|
|
133
139
|
className: "flex items-center justify-between",
|
|
134
|
-
children: [/* @__PURE__ */
|
|
135
|
-
/* @__PURE__ */
|
|
140
|
+
children: [/* @__PURE__ */ C("div", { children: [
|
|
141
|
+
/* @__PURE__ */ C("div", {
|
|
136
142
|
className: "flex items-center gap-3",
|
|
137
|
-
children: [/* @__PURE__ */
|
|
143
|
+
children: [/* @__PURE__ */ S("h1", {
|
|
138
144
|
className: "text-2xl font-semibold",
|
|
139
|
-
children:
|
|
140
|
-
}), /* @__PURE__ */
|
|
145
|
+
children: W.name
|
|
146
|
+
}), /* @__PURE__ */ S(l, { mode: U })]
|
|
141
147
|
}),
|
|
142
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ S("p", {
|
|
143
149
|
className: "text-sm text-muted-foreground",
|
|
144
|
-
children:
|
|
150
|
+
children: W.team ? `Team: ${W.team.name}` : W.project?.name ?? "Unknown project"
|
|
145
151
|
}),
|
|
146
|
-
/* @__PURE__ */
|
|
152
|
+
/* @__PURE__ */ S("div", {
|
|
147
153
|
className: "mt-1",
|
|
148
|
-
children: /* @__PURE__ */
|
|
154
|
+
children: /* @__PURE__ */ S(p, { sprint: W })
|
|
149
155
|
})
|
|
150
|
-
] }), /* @__PURE__ */
|
|
156
|
+
] }), /* @__PURE__ */ C("div", {
|
|
151
157
|
className: "flex items-start gap-3",
|
|
152
158
|
children: [
|
|
153
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ S(w, {
|
|
154
160
|
className: "capitalize",
|
|
155
|
-
children:
|
|
161
|
+
children: W.status.toLowerCase().replace("_", " ")
|
|
156
162
|
}),
|
|
157
|
-
|
|
163
|
+
W.status !== "COMPLETED" && W.status !== "CANCELLED" && /* @__PURE__ */ C(T, {
|
|
158
164
|
size: "sm",
|
|
159
165
|
variant: "outline",
|
|
160
|
-
onClick: () =>
|
|
166
|
+
onClick: () => N(a("/projects/planning-edit-page", W.id)),
|
|
161
167
|
"data-testid": "sprint-edit",
|
|
162
|
-
children: [/* @__PURE__ */
|
|
168
|
+
children: [/* @__PURE__ */ S(v, { className: "mr-1 h-4 w-4" }), " Edit"]
|
|
163
169
|
}),
|
|
164
|
-
!
|
|
165
|
-
projectId:
|
|
166
|
-
sprintId:
|
|
167
|
-
startDate:
|
|
168
|
-
endDate:
|
|
170
|
+
!W.team && /* @__PURE__ */ S(h, {
|
|
171
|
+
projectId: W.projectId,
|
|
172
|
+
sprintId: W.id,
|
|
173
|
+
startDate: W.startDate,
|
|
174
|
+
endDate: W.endDate
|
|
169
175
|
}),
|
|
170
|
-
/* @__PURE__ */
|
|
171
|
-
sprintId:
|
|
172
|
-
sprintName:
|
|
173
|
-
status:
|
|
176
|
+
/* @__PURE__ */ S(d, {
|
|
177
|
+
sprintId: W.id,
|
|
178
|
+
sprintName: W.name,
|
|
179
|
+
status: W.status
|
|
174
180
|
})
|
|
175
181
|
]
|
|
176
182
|
})]
|
|
177
|
-
}), /* @__PURE__ */
|
|
183
|
+
}), /* @__PURE__ */ C("div", {
|
|
178
184
|
className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
|
|
179
|
-
children: [/* @__PURE__ */
|
|
185
|
+
children: [/* @__PURE__ */ C("div", {
|
|
180
186
|
className: "lg:col-span-2 space-y-6",
|
|
181
187
|
children: [
|
|
182
|
-
/* @__PURE__ */
|
|
188
|
+
/* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ S(k, { children: "Capacity Allocation" }) }), /* @__PURE__ */ C(D, {
|
|
183
189
|
className: "space-y-4",
|
|
184
|
-
children: [/* @__PURE__ */
|
|
190
|
+
children: [/* @__PURE__ */ C("div", {
|
|
185
191
|
className: "grid grid-cols-3 gap-4 text-center",
|
|
186
192
|
children: [
|
|
187
|
-
/* @__PURE__ */
|
|
193
|
+
/* @__PURE__ */ C("div", {
|
|
188
194
|
className: "p-4 bg-muted rounded-md",
|
|
189
|
-
children: [/* @__PURE__ */
|
|
195
|
+
children: [/* @__PURE__ */ S("p", {
|
|
190
196
|
className: "text-2xl font-bold",
|
|
191
|
-
children:
|
|
192
|
-
}), /* @__PURE__ */
|
|
197
|
+
children: Y ?? "—"
|
|
198
|
+
}), /* @__PURE__ */ S("p", {
|
|
193
199
|
className: "text-xs text-muted-foreground",
|
|
194
|
-
children:
|
|
200
|
+
children: Y == null ? "No capacity set" : "Capacity"
|
|
195
201
|
})]
|
|
196
202
|
}),
|
|
197
|
-
/* @__PURE__ */
|
|
203
|
+
/* @__PURE__ */ C("div", {
|
|
198
204
|
className: "p-4 bg-primary/10 rounded-md",
|
|
199
|
-
children: [/* @__PURE__ */
|
|
205
|
+
children: [/* @__PURE__ */ S("p", {
|
|
200
206
|
className: "text-2xl font-bold text-primary",
|
|
201
|
-
children:
|
|
202
|
-
}), /* @__PURE__ */
|
|
207
|
+
children: J
|
|
208
|
+
}), /* @__PURE__ */ S("p", {
|
|
203
209
|
className: "text-xs text-muted-foreground",
|
|
204
210
|
children: "Allocated"
|
|
205
211
|
})]
|
|
206
212
|
}),
|
|
207
|
-
/* @__PURE__ */
|
|
213
|
+
/* @__PURE__ */ C("div", {
|
|
208
214
|
className: "p-4 bg-muted rounded-md",
|
|
209
|
-
children: [/* @__PURE__ */
|
|
215
|
+
children: [/* @__PURE__ */ S("p", {
|
|
210
216
|
className: "text-2xl font-bold",
|
|
211
|
-
children:
|
|
212
|
-
}), /* @__PURE__ */
|
|
217
|
+
children: Z ?? "—"
|
|
218
|
+
}), /* @__PURE__ */ S("p", {
|
|
213
219
|
className: "text-xs text-muted-foreground",
|
|
214
220
|
children: "Remaining"
|
|
215
221
|
})]
|
|
216
222
|
})
|
|
217
223
|
]
|
|
218
|
-
}),
|
|
224
|
+
}), X === null ? /* @__PURE__ */ S("p", {
|
|
219
225
|
className: "text-sm text-muted-foreground",
|
|
220
226
|
children: "Set a capacity on the sprint to see its utilisation."
|
|
221
|
-
}) : /* @__PURE__ */
|
|
227
|
+
}) : /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("div", {
|
|
222
228
|
className: "flex justify-between text-sm mb-2",
|
|
223
|
-
children: [/* @__PURE__ */
|
|
229
|
+
children: [/* @__PURE__ */ S("span", {
|
|
224
230
|
className: "text-muted-foreground",
|
|
225
231
|
children: "Utilization"
|
|
226
|
-
}), /* @__PURE__ */
|
|
232
|
+
}), /* @__PURE__ */ C("span", {
|
|
227
233
|
className: "font-medium",
|
|
228
|
-
children: [
|
|
234
|
+
children: [X, "%"]
|
|
229
235
|
})]
|
|
230
|
-
}), /* @__PURE__ */
|
|
236
|
+
}), /* @__PURE__ */ S("div", {
|
|
231
237
|
className: "w-full h-4 rounded-full bg-muted overflow-hidden",
|
|
232
|
-
children: /* @__PURE__ */
|
|
233
|
-
className: `h-full rounded-full ${
|
|
234
|
-
style: { width: `${Math.min(
|
|
238
|
+
children: /* @__PURE__ */ S("div", {
|
|
239
|
+
className: `h-full rounded-full ${X > 90 ? "bg-destructive" : "bg-success"}`,
|
|
240
|
+
style: { width: `${Math.min(X, 100)}%` }
|
|
235
241
|
})
|
|
236
242
|
})] })]
|
|
237
243
|
})] }),
|
|
238
|
-
/* @__PURE__ */
|
|
239
|
-
sprintId:
|
|
240
|
-
eligibleProjectIds:
|
|
241
|
-
projectNames:
|
|
242
|
-
status:
|
|
243
|
-
items:
|
|
244
|
+
/* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ S(k, { children: "Work Items" }) }), /* @__PURE__ */ S(D, { children: /* @__PURE__ */ S(f, {
|
|
245
|
+
sprintId: W.id,
|
|
246
|
+
eligibleProjectIds: te,
|
|
247
|
+
projectNames: ne,
|
|
248
|
+
status: W.status,
|
|
249
|
+
items: q
|
|
244
250
|
}) })] }),
|
|
245
|
-
/* @__PURE__ */
|
|
251
|
+
/* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ C(k, { children: [
|
|
246
252
|
"Team Members (",
|
|
247
|
-
|
|
253
|
+
Q.length,
|
|
248
254
|
")"
|
|
249
|
-
] }) }), /* @__PURE__ */
|
|
250
|
-
/* @__PURE__ */
|
|
255
|
+
] }) }), /* @__PURE__ */ C(D, { children: [
|
|
256
|
+
/* @__PURE__ */ C("div", {
|
|
251
257
|
className: "grid grid-cols-2 gap-3",
|
|
252
|
-
children: [
|
|
253
|
-
let t =
|
|
254
|
-
return /* @__PURE__ */
|
|
258
|
+
children: [Q.map((e) => {
|
|
259
|
+
let t = K[e];
|
|
260
|
+
return /* @__PURE__ */ C("div", {
|
|
255
261
|
className: "flex items-center gap-2 border rounded-md p-2.5",
|
|
256
|
-
children: [t?.employeeName ? /* @__PURE__ */
|
|
262
|
+
children: [t?.employeeName ? /* @__PURE__ */ S("span", {
|
|
257
263
|
className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-medium text-primary",
|
|
258
264
|
title: t.employeeName,
|
|
259
265
|
children: i(t.employeeName) || "?"
|
|
260
|
-
}) : /* @__PURE__ */
|
|
266
|
+
}) : /* @__PURE__ */ S(n, {
|
|
261
267
|
id: e,
|
|
262
268
|
className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-medium text-primary"
|
|
263
|
-
}), /* @__PURE__ */
|
|
269
|
+
}), /* @__PURE__ */ C("div", {
|
|
264
270
|
className: "min-w-0",
|
|
265
|
-
children: [
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
271
|
+
children: [
|
|
272
|
+
/* @__PURE__ */ S("span", {
|
|
273
|
+
className: "text-sm truncate block",
|
|
274
|
+
children: t?.employeeName ?? /* @__PURE__ */ S(r, { id: e })
|
|
275
|
+
}),
|
|
276
|
+
t && /* @__PURE__ */ C("span", {
|
|
277
|
+
className: "text-xs text-muted-foreground",
|
|
278
|
+
children: [
|
|
279
|
+
t.allocatedHours,
|
|
280
|
+
"h allocated (",
|
|
281
|
+
t.billableHours,
|
|
282
|
+
"h billable)",
|
|
283
|
+
t.utilizationPercent != null && ` · ${t.utilizationPercent}% util`
|
|
284
|
+
]
|
|
285
|
+
}),
|
|
286
|
+
t && /* @__PURE__ */ S(u, {
|
|
287
|
+
skills: t.skills,
|
|
288
|
+
employeeId: t.employeeId,
|
|
289
|
+
employeeName: t.employeeName
|
|
290
|
+
})
|
|
291
|
+
]
|
|
278
292
|
})]
|
|
279
293
|
}, e);
|
|
280
|
-
}),
|
|
294
|
+
}), Q.length === 0 && /* @__PURE__ */ S("p", {
|
|
281
295
|
className: "text-sm text-muted-foreground col-span-2 text-center py-4",
|
|
282
296
|
children: "No team members assigned."
|
|
283
297
|
})]
|
|
284
298
|
}),
|
|
285
|
-
|
|
299
|
+
G?.crewfoundryUnavailable && Q.length > 0 && /* @__PURE__ */ S("p", {
|
|
286
300
|
className: "text-xs text-muted-foreground mt-3 border-t pt-3",
|
|
287
|
-
|
|
301
|
+
"data-testid": "sprint-capacity-crewfoundry-unavailable",
|
|
302
|
+
children: F("planmagnet.sprints.capacity.crewfoundryUnavailable", "CrewFoundry is temporarily unavailable, so workforce allocation and skills can’t be shown right now. Try again shortly.")
|
|
288
303
|
}),
|
|
289
|
-
!
|
|
304
|
+
!G?.crewfoundryUnavailable && (G?.unmatchedCount ?? 0) > 0 && /* @__PURE__ */ C("p", {
|
|
290
305
|
className: "text-xs text-muted-foreground mt-3 border-t pt-3",
|
|
291
306
|
"data-testid": "sprint-capacity-unmatched",
|
|
292
307
|
children: [
|
|
293
|
-
|
|
308
|
+
G.unmatchedCount,
|
|
294
309
|
" assignee(s) have no matching CrewFoundry employee record — allocation hours shown only for matched employees.",
|
|
295
310
|
" ",
|
|
296
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ S("button", {
|
|
297
312
|
type: "button",
|
|
298
313
|
className: "text-primary underline-offset-2 hover:underline",
|
|
299
314
|
"data-testid": "sprint-capacity-unmatched-link",
|
|
300
|
-
onClick: () =>
|
|
315
|
+
onClick: () => N("/team/team-page?focus=unmatched-crew-identities"),
|
|
301
316
|
children: "Fix unmatched identities"
|
|
302
317
|
})
|
|
303
318
|
]
|
|
304
319
|
})
|
|
305
320
|
] })] })
|
|
306
321
|
]
|
|
307
|
-
}), /* @__PURE__ */
|
|
322
|
+
}), /* @__PURE__ */ C("div", {
|
|
308
323
|
className: "space-y-6",
|
|
309
|
-
children: [/* @__PURE__ */
|
|
324
|
+
children: [/* @__PURE__ */ C(E, { children: [/* @__PURE__ */ S(O, { children: /* @__PURE__ */ S(k, { children: "Session Info" }) }), /* @__PURE__ */ C(D, {
|
|
310
325
|
className: "space-y-3 text-sm",
|
|
311
326
|
children: [
|
|
312
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ C("div", {
|
|
313
328
|
className: "flex items-center gap-2",
|
|
314
329
|
children: [
|
|
315
|
-
|
|
316
|
-
/* @__PURE__ */
|
|
330
|
+
W.team ? /* @__PURE__ */ S(y, { className: "h-4 w-4 text-muted-foreground" }) : /* @__PURE__ */ S(_, { className: "h-4 w-4 text-muted-foreground" }),
|
|
331
|
+
/* @__PURE__ */ S("span", {
|
|
317
332
|
className: "text-muted-foreground",
|
|
318
|
-
children:
|
|
333
|
+
children: W.team ? "Team:" : "Project:"
|
|
319
334
|
}),
|
|
320
|
-
/* @__PURE__ */
|
|
335
|
+
/* @__PURE__ */ S("span", {
|
|
321
336
|
className: "font-medium",
|
|
322
|
-
children:
|
|
337
|
+
children: W.team ? W.team.name : W.project?.name ?? "Unknown project"
|
|
323
338
|
})
|
|
324
339
|
]
|
|
325
340
|
}),
|
|
326
|
-
/* @__PURE__ */
|
|
341
|
+
/* @__PURE__ */ C("div", {
|
|
327
342
|
className: "flex items-center gap-2",
|
|
328
343
|
children: [
|
|
329
|
-
/* @__PURE__ */
|
|
330
|
-
/* @__PURE__ */
|
|
344
|
+
/* @__PURE__ */ S(y, { className: "h-4 w-4 text-muted-foreground" }),
|
|
345
|
+
/* @__PURE__ */ S("span", {
|
|
331
346
|
className: "text-muted-foreground",
|
|
332
347
|
children: "Assignees:"
|
|
333
348
|
}),
|
|
334
|
-
/* @__PURE__ */
|
|
349
|
+
/* @__PURE__ */ S("span", {
|
|
335
350
|
className: "font-medium",
|
|
336
|
-
children:
|
|
351
|
+
children: Q.length
|
|
337
352
|
})
|
|
338
353
|
]
|
|
339
354
|
}),
|
|
340
|
-
/* @__PURE__ */
|
|
355
|
+
/* @__PURE__ */ C("div", {
|
|
341
356
|
className: "flex items-center gap-2",
|
|
342
357
|
children: [
|
|
343
|
-
/* @__PURE__ */
|
|
344
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ S(g, { className: "h-4 w-4 text-muted-foreground" }),
|
|
359
|
+
/* @__PURE__ */ S("span", {
|
|
345
360
|
className: "text-muted-foreground",
|
|
346
361
|
children: "Capacity:"
|
|
347
362
|
}),
|
|
348
|
-
/* @__PURE__ */
|
|
363
|
+
/* @__PURE__ */ S("span", {
|
|
349
364
|
className: "font-medium",
|
|
350
|
-
children:
|
|
365
|
+
children: Y == null ? "not set" : `${Y} pts`
|
|
351
366
|
})
|
|
352
367
|
]
|
|
353
368
|
}),
|
|
354
|
-
|
|
369
|
+
W.velocity != null && /* @__PURE__ */ C("div", {
|
|
355
370
|
className: "flex items-center gap-2",
|
|
356
371
|
children: [
|
|
357
|
-
/* @__PURE__ */
|
|
358
|
-
/* @__PURE__ */
|
|
372
|
+
/* @__PURE__ */ S(g, { className: "h-4 w-4 text-muted-foreground" }),
|
|
373
|
+
/* @__PURE__ */ S("span", {
|
|
359
374
|
className: "text-muted-foreground",
|
|
360
375
|
children: "Velocity:"
|
|
361
376
|
}),
|
|
362
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ C("span", {
|
|
363
378
|
className: "font-medium",
|
|
364
|
-
children: [
|
|
379
|
+
children: [W.velocity, " pts"]
|
|
365
380
|
})
|
|
366
381
|
]
|
|
367
382
|
}),
|
|
368
|
-
|
|
383
|
+
W.goal && /* @__PURE__ */ C("div", {
|
|
369
384
|
className: "border-t pt-3 mt-3",
|
|
370
|
-
children: [/* @__PURE__ */
|
|
385
|
+
children: [/* @__PURE__ */ S("p", {
|
|
371
386
|
className: "text-muted-foreground text-xs mb-1",
|
|
372
387
|
children: "Goal"
|
|
373
|
-
}), /* @__PURE__ */
|
|
388
|
+
}), /* @__PURE__ */ S("p", {
|
|
374
389
|
className: "text-sm",
|
|
375
|
-
children:
|
|
390
|
+
children: W.goal
|
|
376
391
|
})]
|
|
377
392
|
})
|
|
378
393
|
]
|
|
379
|
-
})] }), !
|
|
380
|
-
workspaceId:
|
|
381
|
-
projectId:
|
|
382
|
-
sprintId:
|
|
394
|
+
})] }), !W.team && W.projectId && /* @__PURE__ */ S(m, {
|
|
395
|
+
workspaceId: P,
|
|
396
|
+
projectId: W.projectId,
|
|
397
|
+
sprintId: W.id
|
|
383
398
|
})]
|
|
384
399
|
})]
|
|
385
400
|
})]
|
|
386
401
|
});
|
|
387
402
|
}
|
|
388
403
|
//#endregion
|
|
389
|
-
export {
|
|
404
|
+
export { N as ProjectsPlanningDetailPagePage };
|
|
390
405
|
|
|
391
406
|
//# sourceMappingURL=ProjectsPlanningDetailPagePage.js.map
|