@burdenoff/microfe-planmagnet 2026.830.1 → 2026.923.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
  2. package/dist/planmagnet/PlanMagnetRoutes.js +52 -0
  3. package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
  4. package/dist/planmagnet/hooks/useEntityId.d.ts +14 -0
  5. package/dist/planmagnet/hooks/useEntityId.d.ts.map +1 -0
  6. package/dist/planmagnet/hooks/useEntityId.js +15 -0
  7. package/dist/planmagnet/hooks/useEntityId.js.map +1 -0
  8. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
  9. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +148 -144
  10. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
  11. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
  12. package/dist/planmagnet/pages/ProductsProductsPagePage.js +85 -84
  13. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
  14. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -1
  15. package/dist/planmagnet/pages/ProductsReleasesPagePage.js +95 -91
  16. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
  17. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
  18. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +117 -113
  19. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
  20. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -1
  21. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +74 -70
  22. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -1
  23. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -1
  24. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +21 -17
  25. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
  26. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +1 -1
  27. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +21 -16
  28. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +1 -1
  29. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +1 -1
  30. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +67 -63
  31. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +1 -1
  32. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
  33. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +61 -56
  34. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
  35. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
  36. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +107 -99
  37. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
  38. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
  39. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +94 -90
  40. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
  41. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
  42. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +46 -41
  43. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
  44. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
  45. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +110 -106
  46. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
  47. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +2 -2
  48. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +1 -1
  49. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +2 -2
  50. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
  51. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
  52. package/dist/planmagnet/pages/TasksTasksPagePage.js +67 -66
  53. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
  54. package/dist/planmagnet/utils/rowNavigation.d.ts +29 -0
  55. package/dist/planmagnet/utils/rowNavigation.d.ts.map +1 -0
  56. package/dist/planmagnet/utils/rowNavigation.js +20 -0
  57. package/dist/planmagnet/utils/rowNavigation.js.map +1 -0
  58. package/package.json +1 -1
@@ -1,24 +1,23 @@
1
1
  import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
- import { useMemo as t, useState as n } from "react";
3
- import { ArrowLeft as r, Save as i } from "lucide-react";
4
- import { gql as a } from "@apollo/client";
5
- import { useMutation as o, useQuery as s } from "@apollo/client/react";
6
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
- import { Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m, Input as h } from "@burdenoff/fe-libs/ui";
2
+ import { useEntityId as t } from "../hooks/useEntityId.js";
3
+ import { useMemo as n, useState as r } from "react";
4
+ import { ArrowLeft as i, Save as a } from "lucide-react";
5
+ import { gql as o } from "@apollo/client";
6
+ import { useMutation as s, useQuery as c } from "@apollo/client/react";
7
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
+ import { Button as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h, Input as g } from "@burdenoff/fe-libs/ui";
8
9
  //#region src/planmagnet/pages/ProjectsPlanningEditPagePage.tsx
9
- var g = a`
10
- query GetSprintForEdit($workspaceId: ID!) {
11
- planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 1 }) {
12
- items {
13
- id
14
- name
15
- projectId
16
- status
17
- startDate
18
- endDate
19
- goal
20
- capacity
21
- }
10
+ var _ = o`
11
+ query GetSprintForEdit($id: ID!, $workspaceId: ID!) {
12
+ planmagnetSprint(id: $id) {
13
+ id
14
+ name
15
+ projectId
16
+ status
17
+ startDate
18
+ endDate
19
+ goal
20
+ capacity
22
21
  }
23
22
  planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {
24
23
  items {
@@ -27,7 +26,7 @@ var g = a`
27
26
  }
28
27
  }
29
28
  }
30
- `, _ = a`
29
+ `, v = o`
31
30
  mutation UpdateSprint($id: ID!, $input: PlanmagnetUpdateSprintInput!) {
32
31
  planmagnetUpdateSprint(id: $id, input: $input) {
33
32
  id
@@ -40,18 +39,24 @@ var g = a`
40
39
  }
41
40
  }
42
41
  `;
43
- function v() {
44
- let { workspaceId: a } = e(), { data: v, loading: y, error: b } = s(g, { variables: { workspaceId: a ?? "default" } }), [x, S] = n(null), C = v?.planmagnetSprints?.items?.[0], w = v?.planmagnetProjects?.items ?? [], T = t(() => ({
45
- name: C?.name ?? "",
46
- status: C?.status ?? "PLANNING",
47
- startDate: C?.startDate ? C.startDate.split("T")[0] : "",
48
- endDate: C?.endDate ? C.endDate.split("T")[0] : "",
49
- goal: C?.goal ?? "",
50
- capacity: C?.capacity?.toString() ?? ""
51
- }), [C]), [E, D] = n({}), O = {
52
- ...T,
53
- ...E
54
- }, k = (e) => D(e), [A, { loading: j, error: M }] = o(_, {
42
+ function y() {
43
+ let { workspaceId: o } = e(), y = t("sprintId"), { data: b, loading: x, error: S } = c(_, {
44
+ variables: {
45
+ id: y,
46
+ workspaceId: o ?? "default"
47
+ },
48
+ skip: !y
49
+ }), [C, w] = r(null), T = b?.planmagnetSprint, E = b?.planmagnetProjects?.items ?? [], D = n(() => ({
50
+ name: T?.name ?? "",
51
+ status: T?.status ?? "PLANNING",
52
+ startDate: T?.startDate ? T.startDate.split("T")[0] : "",
53
+ endDate: T?.endDate ? T.endDate.split("T")[0] : "",
54
+ goal: T?.goal ?? "",
55
+ capacity: T?.capacity?.toString() ?? ""
56
+ }), [T]), [O, k] = r({}), A = {
57
+ ...D,
58
+ ...O
59
+ }, j = (e) => k(e), [M, { loading: N, error: P }] = s(v, {
55
60
  refetchQueries: [
56
61
  "GetSprints",
57
62
  "GetSprintDetail",
@@ -59,90 +64,90 @@ function v() {
59
64
  "GetDashboardData"
60
65
  ],
61
66
  onCompleted: () => {
62
- S("Sprint updated successfully.");
67
+ w("Sprint updated successfully.");
63
68
  }
64
69
  });
65
- return y ? /* @__PURE__ */ c("div", {
70
+ return y ? x ? /* @__PURE__ */ l("div", {
66
71
  className: "flex items-center justify-center p-12",
67
- children: /* @__PURE__ */ c("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
68
- }) : b ? /* @__PURE__ */ l("div", {
72
+ children: /* @__PURE__ */ l("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
73
+ }) : S ? /* @__PURE__ */ u("div", {
69
74
  className: "p-6 text-red-500",
70
- children: ["Error loading sprint: ", b.message]
71
- }) : C ? /* @__PURE__ */ l("div", {
75
+ children: ["Error loading sprint: ", S.message]
76
+ }) : T ? /* @__PURE__ */ u("div", {
72
77
  className: "space-y-6 p-6 max-w-4xl",
73
78
  children: [
74
- /* @__PURE__ */ l("div", {
79
+ /* @__PURE__ */ u("div", {
75
80
  className: "flex items-center justify-between",
76
- children: [/* @__PURE__ */ l("div", {
81
+ children: [/* @__PURE__ */ u("div", {
77
82
  className: "flex items-center gap-3",
78
- children: [/* @__PURE__ */ c(u, {
83
+ children: [/* @__PURE__ */ l(d, {
79
84
  variant: "ghost",
80
85
  size: "sm",
81
- children: /* @__PURE__ */ c(r, { className: "h-4 w-4" })
82
- }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
86
+ children: /* @__PURE__ */ l(i, { className: "h-4 w-4" })
87
+ }), /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
83
88
  className: "text-2xl font-semibold",
84
89
  children: "Edit Planning Session"
85
- }), /* @__PURE__ */ c("p", {
90
+ }), /* @__PURE__ */ l("p", {
86
91
  className: "text-sm text-muted-foreground",
87
- children: C.name
92
+ children: T.name
88
93
  })] })]
89
- }), /* @__PURE__ */ l(u, {
94
+ }), /* @__PURE__ */ u(d, {
90
95
  size: "sm",
91
96
  onClick: () => {
92
- C && A({ variables: {
93
- id: C.id,
97
+ T && M({ variables: {
98
+ id: T.id,
94
99
  input: {
95
- name: O.name || void 0,
96
- status: O.status || void 0,
97
- startDate: O.startDate || void 0,
98
- endDate: O.endDate || void 0,
99
- goal: O.goal || void 0,
100
- capacity: O.capacity ? parseInt(O.capacity, 10) : void 0
100
+ name: A.name || void 0,
101
+ status: A.status || void 0,
102
+ startDate: A.startDate || void 0,
103
+ endDate: A.endDate || void 0,
104
+ goal: A.goal || void 0,
105
+ capacity: A.capacity ? parseInt(A.capacity, 10) : void 0
101
106
  }
102
107
  } });
103
108
  },
104
- disabled: j,
105
- children: [/* @__PURE__ */ c(i, { className: "mr-1 h-4 w-4" }), j ? "Saving..." : "Save Changes"]
109
+ disabled: N,
110
+ children: [/* @__PURE__ */ l(a, { className: "mr-1 h-4 w-4" }), N ? "Saving..." : "Save Changes"]
106
111
  })]
107
112
  }),
108
- x && /* @__PURE__ */ c("div", {
113
+ C && /* @__PURE__ */ l("div", {
109
114
  className: "p-3 bg-green-50 text-green-800 rounded-md text-sm",
110
- children: x
115
+ children: C
111
116
  }),
112
- M && /* @__PURE__ */ l("div", {
117
+ P && /* @__PURE__ */ u("div", {
113
118
  className: "p-3 bg-red-50 text-red-800 rounded-md text-sm",
114
- children: ["Error: ", M.message]
119
+ children: ["Error: ", P.message]
115
120
  }),
116
- /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(p, { children: /* @__PURE__ */ c(m, { children: "Session Details" }) }), /* @__PURE__ */ l(f, {
121
+ /* @__PURE__ */ u(f, { children: [/* @__PURE__ */ l(m, { children: /* @__PURE__ */ l(h, { children: "Session Details" }) }), /* @__PURE__ */ u(p, {
117
122
  className: "space-y-4",
118
123
  children: [
119
- /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
124
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
120
125
  className: "text-sm font-medium",
121
126
  children: "Name"
122
- }), /* @__PURE__ */ c(h, {
123
- value: O.name,
124
- onChange: (e) => k({
125
- ...O,
127
+ }), /* @__PURE__ */ l(g, {
128
+ value: A.name,
129
+ onChange: (e) => j({
130
+ ...A,
126
131
  name: e.target.value
127
132
  }),
128
133
  className: "mt-1"
129
134
  })] }),
130
- /* @__PURE__ */ l("div", {
135
+ /* @__PURE__ */ u("div", {
131
136
  className: "grid grid-cols-2 gap-4",
132
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
137
+ children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
133
138
  className: "text-sm font-medium",
134
139
  children: "Project"
135
- }), /* @__PURE__ */ c("div", {
140
+ }), /* @__PURE__ */ l("div", {
136
141
  className: "mt-1 w-full rounded-md border border-input bg-muted px-3 py-2 text-sm text-muted-foreground",
137
- children: w.find((e) => e.id === C.projectId)?.name ?? C.projectId
138
- })] }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
142
+ children: E.find((e) => e.id === T.projectId)?.name ?? T.projectId
143
+ })] }), /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
139
144
  className: "text-sm font-medium",
140
145
  children: "Status"
141
- }), /* @__PURE__ */ c("select", {
146
+ }), /* @__PURE__ */ l("select", {
142
147
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
143
- value: O.status,
144
- onChange: (e) => k({
145
- ...O,
148
+ value: A.status,
149
+ onChange: (e) => j({
150
+ ...A,
146
151
  status: e.target.value
147
152
  }),
148
153
  children: [
@@ -151,58 +156,58 @@ function v() {
151
156
  "REVIEW",
152
157
  "COMPLETED",
153
158
  "CANCELLED"
154
- ].map((e) => /* @__PURE__ */ c("option", {
159
+ ].map((e) => /* @__PURE__ */ l("option", {
155
160
  value: e,
156
161
  children: e.toLowerCase().replace(/_/g, " ")
157
162
  }, e))
158
163
  })] })]
159
164
  }),
160
- /* @__PURE__ */ l("div", {
165
+ /* @__PURE__ */ u("div", {
161
166
  className: "grid grid-cols-2 gap-4",
162
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
167
+ children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
163
168
  className: "text-sm font-medium",
164
169
  children: "Start Date"
165
- }), /* @__PURE__ */ c(h, {
170
+ }), /* @__PURE__ */ l(g, {
166
171
  type: "date",
167
- value: O.startDate,
168
- onChange: (e) => k({
169
- ...O,
172
+ value: A.startDate,
173
+ onChange: (e) => j({
174
+ ...A,
170
175
  startDate: e.target.value
171
176
  }),
172
177
  className: "mt-1"
173
- })] }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
178
+ })] }), /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
174
179
  className: "text-sm font-medium",
175
180
  children: "End Date"
176
- }), /* @__PURE__ */ c(h, {
181
+ }), /* @__PURE__ */ l(g, {
177
182
  type: "date",
178
- value: O.endDate,
179
- onChange: (e) => k({
180
- ...O,
183
+ value: A.endDate,
184
+ onChange: (e) => j({
185
+ ...A,
181
186
  endDate: e.target.value
182
187
  }),
183
188
  className: "mt-1"
184
189
  })] })]
185
190
  }),
186
- /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
191
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
187
192
  className: "text-sm font-medium",
188
193
  children: "Goal"
189
- }), /* @__PURE__ */ c("textarea", {
194
+ }), /* @__PURE__ */ l("textarea", {
190
195
  className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[60px]",
191
- value: O.goal,
192
- onChange: (e) => k({
193
- ...O,
196
+ value: A.goal,
197
+ onChange: (e) => j({
198
+ ...A,
194
199
  goal: e.target.value
195
200
  }),
196
201
  placeholder: "Sprint goal..."
197
202
  })] }),
198
- /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
203
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("label", {
199
204
  className: "text-sm font-medium",
200
205
  children: "Capacity (story points)"
201
- }), /* @__PURE__ */ c(h, {
206
+ }), /* @__PURE__ */ l(g, {
202
207
  type: "number",
203
- value: O.capacity,
204
- onChange: (e) => k({
205
- ...O,
208
+ value: A.capacity,
209
+ onChange: (e) => j({
210
+ ...A,
206
211
  capacity: e.target.value
207
212
  }),
208
213
  className: "mt-1",
@@ -211,12 +216,15 @@ function v() {
211
216
  ]
212
217
  })] })
213
218
  ]
214
- }) : /* @__PURE__ */ c("div", {
219
+ }) : /* @__PURE__ */ l("div", {
215
220
  className: "p-6 text-muted-foreground",
216
221
  children: "Planning session not found."
222
+ }) : /* @__PURE__ */ l("div", {
223
+ className: "p-6 text-muted-foreground",
224
+ children: "No planning session selected. Open one from the list."
217
225
  });
218
226
  }
219
227
  //#endregion
220
- export { v as ProjectsPlanningEditPagePage };
228
+ export { y as ProjectsPlanningEditPagePage };
221
229
 
222
230
  //# sourceMappingURL=ProjectsPlanningEditPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsPlanningEditPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsPlanningEditPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState, useMemo } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery, useMutation } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, ArrowLeft } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\n\nconst GET_SPRINT_FOR_EDIT = gql`\n query GetSprintForEdit($workspaceId: ID!) {\n planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 1 }) {\n items {\n id\n name\n projectId\n status\n startDate\n endDate\n goal\n capacity\n }\n }\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n }\n }\n`;\n\nconst UPDATE_SPRINT = gql`\n mutation UpdateSprint($id: ID!, $input: PlanmagnetUpdateSprintInput!) {\n planmagnetUpdateSprint(id: $id, input: $input) {\n id\n name\n status\n startDate\n endDate\n goal\n capacity\n }\n }\n`;\n\nexport function ProjectsPlanningEditPagePage() {\n const { workspaceId } = usePlanMagnet();\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_SPRINT_FOR_EDIT, {\n variables: { workspaceId: workspaceId ?? 'default' },\n });\n\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n\n const sprint = data?.planmagnetSprints?.items?.[0];\n const projects = data?.planmagnetProjects?.items ?? [];\n\n const defaultForm = useMemo(\n () => ({\n name: sprint?.name ?? '',\n status: sprint?.status ?? 'PLANNING',\n startDate: sprint?.startDate ? sprint.startDate.split('T')[0] : '',\n endDate: sprint?.endDate ? sprint.endDate.split('T')[0] : '',\n goal: sprint?.goal ?? '',\n capacity: sprint?.capacity?.toString() ?? '',\n }),\n [sprint]\n );\n\n const [formOverrides, setFormOverrides] = useState<Record<string, string>>({});\n const form = { ...defaultForm, ...formOverrides };\n const setForm = (updates: Record<string, string>) => setFormOverrides(updates);\n\n const [updateSprint, { loading: saving, error: saveError }] = useMutation(UPDATE_SPRINT, {\n refetchQueries: ['GetSprints', 'GetSprintDetail', 'GetSprintForEdit', 'GetDashboardData'],\n onCompleted: () => {\n setSuccessMessage('Sprint updated successfully.');\n },\n });\n\n const statuses = ['PLANNING', 'ACTIVE', 'REVIEW', 'COMPLETED', 'CANCELLED'] as const;\n\n const handleSave = () => {\n if (!sprint) return;\n updateSprint({\n variables: {\n id: sprint.id,\n input: {\n name: form.name || undefined,\n status: form.status || undefined,\n startDate: form.startDate || undefined,\n endDate: form.endDate || undefined,\n goal: form.goal || undefined,\n capacity: form.capacity ? parseInt(form.capacity, 10) : undefined,\n },\n },\n });\n };\n\n if (loading)\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 if (error) return <div className=\"p-6 text-red-500\">Error loading sprint: {error.message}</div>;\n if (!sprint) return <div className=\"p-6 text-muted-foreground\">Planning session not found.</div>;\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"sm\">\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Edit Planning Session</h1>\n <p className=\"text-sm text-muted-foreground\">{sprint.name}</p>\n </div>\n </div>\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n <Save className=\"mr-1 h-4 w-4\" />\n {saving ? 'Saving...' : 'Save Changes'}\n </Button>\n </div>\n\n {successMessage && (\n <div className=\"p-3 bg-green-50 text-green-800 rounded-md text-sm\">{successMessage}</div>\n )}\n {saveError && (\n <div className=\"p-3 bg-red-50 text-red-800 rounded-md text-sm\">\n Error: {saveError.message}\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Session Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Project</label>\n <div className=\"mt-1 w-full rounded-md border border-input bg-muted px-3 py-2 text-sm text-muted-foreground\">\n {projects.find((p: { id: string; name: string }) => p.id === sprint.projectId)\n ?.name ?? sprint.projectId}\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Status</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.status}\n onChange={(e) => setForm({ ...form, status: e.target.value })}\n >\n {statuses.map((s) => (\n <option key={s} value={s}>\n {s.toLowerCase().replace(/_/g, ' ')}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Start Date</label>\n <Input\n type=\"date\"\n value={form.startDate}\n onChange={(e) => setForm({ ...form, startDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">End Date</label>\n <Input\n type=\"date\"\n value={form.endDate}\n onChange={(e) => setForm({ ...form, endDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Goal</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[60px]\"\n value={form.goal}\n onChange={(e) => setForm({ ...form, goal: e.target.value })}\n placeholder=\"Sprint goal...\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Capacity (story points)</label>\n <Input\n type=\"number\"\n value={form.capacity}\n onChange={(e) => setForm({ ...form, capacity: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. 40\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectsPlanningEditPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProjectsPlanningEditPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState, useMemo } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery, useMutation } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, ArrowLeft } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { useEntityId } from '../hooks/useEntityId';\n\nconst GET_SPRINT_FOR_EDIT = gql`\n query GetSprintForEdit($id: ID!, $workspaceId: ID!) {\n planmagnetSprint(id: $id) {\n id\n name\n projectId\n status\n startDate\n endDate\n goal\n capacity\n }\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n }\n }\n`;\n\nconst UPDATE_SPRINT = gql`\n mutation UpdateSprint($id: ID!, $input: PlanmagnetUpdateSprintInput!) {\n planmagnetUpdateSprint(id: $id, input: $input) {\n id\n name\n status\n startDate\n endDate\n goal\n capacity\n }\n }\n`;\n\nexport function ProjectsPlanningEditPagePage() {\n const { workspaceId } = usePlanMagnet();\n const sprintId = useEntityId('sprintId');\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_SPRINT_FOR_EDIT, {\n variables: { id: sprintId, workspaceId: workspaceId ?? 'default' },\n skip: !sprintId,\n });\n\n const [successMessage, setSuccessMessage] = useState<string | null>(null);\n\n const sprint = data?.planmagnetSprint;\n const projects = data?.planmagnetProjects?.items ?? [];\n\n const defaultForm = useMemo(\n () => ({\n name: sprint?.name ?? '',\n status: sprint?.status ?? 'PLANNING',\n startDate: sprint?.startDate ? sprint.startDate.split('T')[0] : '',\n endDate: sprint?.endDate ? sprint.endDate.split('T')[0] : '',\n goal: sprint?.goal ?? '',\n capacity: sprint?.capacity?.toString() ?? '',\n }),\n [sprint]\n );\n\n const [formOverrides, setFormOverrides] = useState<Record<string, string>>({});\n const form = { ...defaultForm, ...formOverrides };\n const setForm = (updates: Record<string, string>) => setFormOverrides(updates);\n\n const [updateSprint, { loading: saving, error: saveError }] = useMutation(UPDATE_SPRINT, {\n refetchQueries: ['GetSprints', 'GetSprintDetail', 'GetSprintForEdit', 'GetDashboardData'],\n onCompleted: () => {\n setSuccessMessage('Sprint updated successfully.');\n },\n });\n\n const statuses = ['PLANNING', 'ACTIVE', 'REVIEW', 'COMPLETED', 'CANCELLED'] as const;\n\n const handleSave = () => {\n if (!sprint) return;\n updateSprint({\n variables: {\n id: sprint.id,\n input: {\n name: form.name || undefined,\n status: form.status || undefined,\n startDate: form.startDate || undefined,\n endDate: form.endDate || undefined,\n goal: form.goal || undefined,\n capacity: form.capacity ? parseInt(form.capacity, 10) : undefined,\n },\n },\n });\n };\n\n if (!sprintId)\n return (\n <div className=\"p-6 text-muted-foreground\">\n No planning session selected. Open one from the list.\n </div>\n );\n if (loading)\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 if (error) return <div className=\"p-6 text-red-500\">Error loading sprint: {error.message}</div>;\n if (!sprint) return <div className=\"p-6 text-muted-foreground\">Planning session not found.</div>;\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Button variant=\"ghost\" size=\"sm\">\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Edit Planning Session</h1>\n <p className=\"text-sm text-muted-foreground\">{sprint.name}</p>\n </div>\n </div>\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n <Save className=\"mr-1 h-4 w-4\" />\n {saving ? 'Saving...' : 'Save Changes'}\n </Button>\n </div>\n\n {successMessage && (\n <div className=\"p-3 bg-green-50 text-green-800 rounded-md text-sm\">{successMessage}</div>\n )}\n {saveError && (\n <div className=\"p-3 bg-red-50 text-red-800 rounded-md text-sm\">\n Error: {saveError.message}\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Session Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Project</label>\n <div className=\"mt-1 w-full rounded-md border border-input bg-muted px-3 py-2 text-sm text-muted-foreground\">\n {projects.find((p: { id: string; name: string }) => p.id === sprint.projectId)\n ?.name ?? sprint.projectId}\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Status</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.status}\n onChange={(e) => setForm({ ...form, status: e.target.value })}\n >\n {statuses.map((s) => (\n <option key={s} value={s}>\n {s.toLowerCase().replace(/_/g, ' ')}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Start Date</label>\n <Input\n type=\"date\"\n value={form.startDate}\n onChange={(e) => setForm({ ...form, startDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">End Date</label>\n <Input\n type=\"date\"\n value={form.endDate}\n onChange={(e) => setForm({ ...form, endDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Goal</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[60px]\"\n value={form.goal}\n onChange={(e) => setForm({ ...form, goal: e.target.value })}\n placeholder=\"Sprint goal...\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Capacity (story points)</label>\n <Input\n type=\"number\"\n value={form.capacity}\n onChange={(e) => setForm({ ...form, capacity: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. 40\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectsPlanningPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsPlanningPagePage.tsx"],"names":[],"mappings":"AAwCA,wBAAgB,wBAAwB,4CAuHvC"}
1
+ {"version":3,"file":"ProjectsPlanningPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsPlanningPagePage.tsx"],"names":[],"mappings":"AAyCA,wBAAgB,wBAAwB,4CA8HvC"}
@@ -1,11 +1,12 @@
1
- import { usePlanMagnet as e } from "../providers/PlanMagnetProvider.js";
2
- import { CalendarClock as t, FolderKanban as n } from "lucide-react";
3
- import { gql as r } from "@apollo/client";
4
- import { useQuery as i } from "@apollo/client/react";
5
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
- import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
1
+ import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
2
+ import { detailPath as n, rowLinkProps as r } from "../utils/rowNavigation.js";
3
+ import { CalendarClock as i, FolderKanban as a } from "lucide-react";
4
+ import { gql as o } from "@apollo/client";
5
+ import { useQuery as s } from "@apollo/client/react";
6
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ import { Badge as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m } from "@burdenoff/fe-libs/ui";
7
8
  //#region src/planmagnet/pages/ProjectsPlanningPagePage.tsx
8
- var f = r`
9
+ var h = o`
9
10
  query GetSprints($workspaceId: ID!) {
10
11
  planmagnetSprints(workspaceId: $workspaceId, pagination: { first: 100 }) {
11
12
  items {
@@ -27,109 +28,112 @@ var f = r`
27
28
  totalCount
28
29
  }
29
30
  }
30
- `, p = {
31
+ `, g = {
31
32
  PLANNING: "bg-blue-100 text-blue-800",
32
33
  ACTIVE: "bg-green-100 text-green-800",
33
34
  REVIEW: "bg-purple-100 text-purple-800",
34
35
  COMPLETED: "bg-gray-100 text-gray-800",
35
36
  CANCELLED: "bg-red-100 text-red-800"
36
37
  };
37
- function m() {
38
- let { workspaceId: r } = e(), { data: m, loading: h, error: g } = i(f, { variables: { workspaceId: r ?? "default" } });
39
- if (h) return /* @__PURE__ */ a("div", {
38
+ function _() {
39
+ let { workspaceId: o } = e(), _ = t(), { data: v, loading: y, error: b } = s(h, { variables: { workspaceId: o ?? "default" } });
40
+ if (y) return /* @__PURE__ */ c("div", {
40
41
  className: "flex items-center justify-center p-12",
41
- children: /* @__PURE__ */ a("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
42
+ children: /* @__PURE__ */ c("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
42
43
  });
43
- if (g) return /* @__PURE__ */ o("div", {
44
+ if (b) return /* @__PURE__ */ l("div", {
44
45
  className: "p-6 text-red-500",
45
- children: ["Error loading planning sessions: ", g.message]
46
+ children: ["Error loading planning sessions: ", b.message]
46
47
  });
47
- let _ = m?.planmagnetSprints?.items ?? [];
48
- return /* @__PURE__ */ o("div", {
48
+ let x = v?.planmagnetSprints?.items ?? [];
49
+ return /* @__PURE__ */ l("div", {
49
50
  className: "space-y-6 p-6",
50
51
  children: [
51
- /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
52
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
52
53
  className: "text-2xl font-semibold",
53
54
  children: "Planning Sessions"
54
- }), /* @__PURE__ */ o("p", {
55
+ }), /* @__PURE__ */ l("p", {
55
56
  className: "text-sm text-muted-foreground",
56
- children: [_.length, " sprints across all projects"]
57
+ children: [x.length, " sprints across all projects"]
57
58
  })] }),
58
- /* @__PURE__ */ a("div", {
59
+ /* @__PURE__ */ c("div", {
59
60
  className: "grid grid-cols-1 md:grid-cols-2 gap-4",
60
- children: _.map((e) => {
61
- let r = e.workItems.reduce((e, t) => e + (t.storyPoints ?? 0), 0), i = e.capacity ?? 0, f = i > 0 ? Math.round(r / i * 100) : 0;
62
- return /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, {
63
- className: "pb-2",
64
- children: /* @__PURE__ */ o("div", {
65
- className: "flex items-center justify-between",
66
- children: [/* @__PURE__ */ o(d, {
67
- className: "text-base flex items-center gap-2",
68
- children: [/* @__PURE__ */ a(t, { className: "h-4 w-4 text-primary" }), e.name]
69
- }), /* @__PURE__ */ a(s, {
70
- variant: e.status === "COMPLETED" ? "default" : "secondary",
71
- className: "capitalize",
72
- children: e.status.toLowerCase().replace("_", " ")
73
- })]
74
- })
75
- }), /* @__PURE__ */ o(l, {
76
- className: "space-y-3",
77
- children: [
78
- /* @__PURE__ */ o("div", {
79
- className: "flex gap-2",
80
- children: [/* @__PURE__ */ a("span", {
81
- className: `text-xs px-2 py-0.5 rounded-full capitalize ${p[e.status] ?? "bg-gray-100"}`,
61
+ children: x.map((e) => {
62
+ let t = e.workItems.reduce((e, t) => e + (t.storyPoints ?? 0), 0), o = e.capacity ?? 0, s = o > 0 ? Math.round(t / o * 100) : 0;
63
+ return /* @__PURE__ */ l(d, {
64
+ ...r(() => _(n("/projects/planning-detail-page", e.id)), e.name),
65
+ children: [/* @__PURE__ */ c(p, {
66
+ className: "pb-2",
67
+ children: /* @__PURE__ */ l("div", {
68
+ className: "flex items-center justify-between",
69
+ children: [/* @__PURE__ */ l(m, {
70
+ className: "text-base flex items-center gap-2",
71
+ children: [/* @__PURE__ */ c(i, { className: "h-4 w-4 text-primary" }), e.name]
72
+ }), /* @__PURE__ */ c(u, {
73
+ variant: e.status === "COMPLETED" ? "default" : "secondary",
74
+ className: "capitalize",
82
75
  children: e.status.toLowerCase().replace("_", " ")
83
- }), /* @__PURE__ */ o("span", {
84
- className: "text-xs text-muted-foreground flex items-center gap-1",
85
- children: [/* @__PURE__ */ a(n, { className: "h-3 w-3" }), e.projectId]
86
76
  })]
87
- }),
88
- e.goal && /* @__PURE__ */ a("p", {
89
- className: "text-sm text-muted-foreground",
90
- children: e.goal
91
- }),
92
- /* @__PURE__ */ o("div", {
93
- className: "flex gap-3 text-xs text-muted-foreground",
94
- children: [/* @__PURE__ */ o("span", {
95
- className: "flex items-center gap-1",
96
- children: [
97
- /* @__PURE__ */ a(t, { className: "h-3 w-3" }),
98
- e.startDate ? new Date(e.startDate).toLocaleDateString() : "—",
99
- " -",
100
- " ",
101
- e.endDate ? new Date(e.endDate).toLocaleDateString() : "—"
102
- ]
103
- }), /* @__PURE__ */ o("span", { children: [e.workItems.length, " work items"] })]
104
- }),
105
- i > 0 && /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("div", {
106
- className: "flex justify-between text-xs mb-1",
107
- children: [/* @__PURE__ */ a("span", {
108
- className: "text-muted-foreground",
109
- children: "Capacity"
110
- }), /* @__PURE__ */ o("span", {
111
- className: "font-medium",
112
- children: [
113
- r,
114
- "/",
115
- i,
116
- " pts (",
117
- f,
118
- "%)"
119
- ]
120
- })]
121
- }), /* @__PURE__ */ a("div", {
122
- className: "w-full h-2 rounded-full bg-muted overflow-hidden",
123
- children: /* @__PURE__ */ a("div", {
124
- className: `h-full rounded-full ${f > 90 ? "bg-red-400" : "bg-primary"}`,
125
- style: { width: `${Math.min(f, 100)}%` }
126
- })
127
- })] })
128
- ]
129
- })] }, e.id);
77
+ })
78
+ }), /* @__PURE__ */ l(f, {
79
+ className: "space-y-3",
80
+ children: [
81
+ /* @__PURE__ */ l("div", {
82
+ className: "flex gap-2",
83
+ children: [/* @__PURE__ */ c("span", {
84
+ className: `text-xs px-2 py-0.5 rounded-full capitalize ${g[e.status] ?? "bg-gray-100"}`,
85
+ children: e.status.toLowerCase().replace("_", " ")
86
+ }), /* @__PURE__ */ l("span", {
87
+ className: "text-xs text-muted-foreground flex items-center gap-1",
88
+ children: [/* @__PURE__ */ c(a, { className: "h-3 w-3" }), e.projectId]
89
+ })]
90
+ }),
91
+ e.goal && /* @__PURE__ */ c("p", {
92
+ className: "text-sm text-muted-foreground",
93
+ children: e.goal
94
+ }),
95
+ /* @__PURE__ */ l("div", {
96
+ className: "flex gap-3 text-xs text-muted-foreground",
97
+ children: [/* @__PURE__ */ l("span", {
98
+ className: "flex items-center gap-1",
99
+ children: [
100
+ /* @__PURE__ */ c(i, { className: "h-3 w-3" }),
101
+ e.startDate ? new Date(e.startDate).toLocaleDateString() : "—",
102
+ " -",
103
+ " ",
104
+ e.endDate ? new Date(e.endDate).toLocaleDateString() : "—"
105
+ ]
106
+ }), /* @__PURE__ */ l("span", { children: [e.workItems.length, " work items"] })]
107
+ }),
108
+ o > 0 && /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("div", {
109
+ className: "flex justify-between text-xs mb-1",
110
+ children: [/* @__PURE__ */ c("span", {
111
+ className: "text-muted-foreground",
112
+ children: "Capacity"
113
+ }), /* @__PURE__ */ l("span", {
114
+ className: "font-medium",
115
+ children: [
116
+ t,
117
+ "/",
118
+ o,
119
+ " pts (",
120
+ s,
121
+ "%)"
122
+ ]
123
+ })]
124
+ }), /* @__PURE__ */ c("div", {
125
+ className: "w-full h-2 rounded-full bg-muted overflow-hidden",
126
+ children: /* @__PURE__ */ c("div", {
127
+ className: `h-full rounded-full ${s > 90 ? "bg-red-400" : "bg-primary"}`,
128
+ style: { width: `${Math.min(s, 100)}%` }
129
+ })
130
+ })] })
131
+ ]
132
+ })]
133
+ }, e.id);
130
134
  })
131
135
  }),
132
- _.length === 0 && /* @__PURE__ */ a("p", {
136
+ x.length === 0 && /* @__PURE__ */ c("p", {
133
137
  className: "text-center text-muted-foreground py-8",
134
138
  children: "No planning sessions found."
135
139
  })
@@ -137,6 +141,6 @@ function m() {
137
141
  });
138
142
  }
139
143
  //#endregion
140
- export { m as ProjectsPlanningPagePage };
144
+ export { _ as ProjectsPlanningPagePage };
141
145
 
142
146
  //# sourceMappingURL=ProjectsPlanningPagePage.js.map