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