@burdenoff/microfe-planmagnet 2026.928.9 → 2026.928.11
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 +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +217 -209
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +1 -1
- package/dist/planmagnet/automation/AutomationRuleFields.js +18 -18
- package/dist/planmagnet/automation/AutomationRuleFields.js.map +1 -1
- package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +198 -99
- package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js +272 -170
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js +283 -0
- package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +166 -246
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +147 -117
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +159 -124
- 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 +166 -128
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
- package/dist/planmagnet/product/ProductControls.d.ts +52 -0
- package/dist/planmagnet/product/ProductControls.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductControls.js +780 -0
- package/dist/planmagnet/product/ProductControls.js.map +1 -0
- package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js.map +1 -1
- package/dist/planmagnet/utils/formValidation.d.ts +11 -0
- package/dist/planmagnet/utils/formValidation.d.ts.map +1 -1
- package/dist/planmagnet/utils/formValidation.js +13 -1
- package/dist/planmagnet/utils/formValidation.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,204 +1,234 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
2
|
import { PersonName as n } from "../people/People.js";
|
|
3
|
-
import {
|
|
4
|
-
import { detailPath as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { Button as b, Card as x, CardContent as S, CardHeader as C, CardTitle as w } from "@burdenoff/fe-libs/ui";
|
|
3
|
+
import { enumLabel as r } from "../controls/WorkItemControls.js";
|
|
4
|
+
import { detailPath as i, rowLinkProps as a } from "../utils/rowNavigation.js";
|
|
5
|
+
import { useState as o } from "react";
|
|
6
|
+
import { Archive as s, GitBranch as c, Loader2 as l, Map as u, Package as d, Plus as f, Star as p } from "lucide-react";
|
|
7
|
+
import { gql as m } from "@apollo/client";
|
|
8
|
+
import { useQuery as h } from "@apollo/client/react";
|
|
9
|
+
import { jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
10
|
+
import { useI18n as v } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
11
|
+
import { Badge as y, Button as b, Card as x, CardContent as S, CardHeader as C, CardTitle as w } from "@burdenoff/fe-libs/ui";
|
|
13
12
|
//#region src/planmagnet/pages/ProductsProductsPagePage.tsx
|
|
14
|
-
var T =
|
|
15
|
-
query
|
|
16
|
-
|
|
13
|
+
var T = m`
|
|
14
|
+
query GetProducts(
|
|
15
|
+
$workspaceId: ID!
|
|
16
|
+
$filter: PlanmagnetProductFilter
|
|
17
|
+
$pagination: PlanmagnetPaginationInput
|
|
18
|
+
) {
|
|
19
|
+
planmagnetProducts(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {
|
|
17
20
|
items {
|
|
18
21
|
id
|
|
19
|
-
workspaceId
|
|
20
22
|
name
|
|
21
23
|
description
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
isPublic
|
|
24
|
+
vision
|
|
25
|
+
lifecycleStage
|
|
25
26
|
ownerId
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
archivedAt
|
|
28
|
+
northStar {
|
|
29
|
+
name
|
|
30
|
+
unit
|
|
31
|
+
target
|
|
32
|
+
current
|
|
33
|
+
progressRatio
|
|
34
|
+
}
|
|
35
|
+
roadmaps {
|
|
36
|
+
id
|
|
37
|
+
}
|
|
38
|
+
releases {
|
|
32
39
|
id
|
|
33
|
-
status
|
|
34
40
|
}
|
|
41
|
+
featureRequests {
|
|
42
|
+
id
|
|
43
|
+
}
|
|
44
|
+
updatedAt
|
|
35
45
|
}
|
|
36
46
|
totalCount
|
|
37
47
|
}
|
|
38
48
|
}
|
|
39
|
-
`, E = h`
|
|
40
|
-
query ListFeatureRequestsForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
|
|
41
|
-
planmagnetFeatureRequests(workspaceId: $workspaceId, pagination: $pagination) {
|
|
42
|
-
totalCount
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
`, D = h`
|
|
46
|
-
query ListReleasesForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
|
|
47
|
-
planmagnetReleases(workspaceId: $workspaceId, pagination: $pagination) {
|
|
48
|
-
totalCount
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
49
|
`;
|
|
52
|
-
function
|
|
53
|
-
let { workspaceId:
|
|
50
|
+
function E() {
|
|
51
|
+
let { workspaceId: m } = e(), E = t(), { t: D } = v(), [O, k] = o(!1), { data: A, loading: j, error: M } = h(T, {
|
|
54
52
|
variables: {
|
|
55
|
-
workspaceId:
|
|
53
|
+
workspaceId: m,
|
|
54
|
+
filter: O ? void 0 : { isActive: !0 },
|
|
56
55
|
pagination: { first: 50 }
|
|
57
56
|
},
|
|
58
|
-
skip: !
|
|
59
|
-
}), { data: I } = g(E, {
|
|
60
|
-
variables: {
|
|
61
|
-
workspaceId: h,
|
|
62
|
-
pagination: { first: 1 }
|
|
63
|
-
},
|
|
64
|
-
skip: !h
|
|
65
|
-
}), { data: L } = g(D, {
|
|
66
|
-
variables: {
|
|
67
|
-
workspaceId: h,
|
|
68
|
-
pagination: { first: 1 }
|
|
69
|
-
},
|
|
70
|
-
skip: !h
|
|
57
|
+
skip: !m
|
|
71
58
|
});
|
|
72
|
-
if (
|
|
59
|
+
if (j && !A) return /* @__PURE__ */ g("div", {
|
|
73
60
|
className: "flex items-center justify-center p-12",
|
|
74
|
-
children: /* @__PURE__ */
|
|
61
|
+
children: /* @__PURE__ */ g(l, { className: "h-8 w-8 animate-spin text-muted-foreground" })
|
|
75
62
|
});
|
|
76
|
-
if (
|
|
63
|
+
if (M) return /* @__PURE__ */ _("div", {
|
|
77
64
|
className: "p-6 text-destructive",
|
|
78
65
|
children: [
|
|
79
|
-
|
|
66
|
+
D("planmagnet.products.errorLoading", "Failed to load products"),
|
|
80
67
|
": ",
|
|
81
|
-
|
|
68
|
+
M.message
|
|
82
69
|
]
|
|
83
70
|
});
|
|
84
|
-
let
|
|
85
|
-
return /* @__PURE__ */
|
|
71
|
+
let N = A?.planmagnetProducts?.items ?? [], P = A?.planmagnetProducts?.totalCount ?? 0;
|
|
72
|
+
return /* @__PURE__ */ _("div", {
|
|
86
73
|
className: "space-y-6 p-6",
|
|
87
74
|
children: [
|
|
88
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ _("div", {
|
|
89
76
|
className: "flex items-center justify-between",
|
|
90
|
-
children: [/* @__PURE__ */
|
|
77
|
+
children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ _("h1", {
|
|
91
78
|
className: "text-2xl font-semibold flex items-center gap-2",
|
|
92
79
|
children: [
|
|
93
|
-
/* @__PURE__ */
|
|
80
|
+
/* @__PURE__ */ g(d, { className: "h-6 w-6" }),
|
|
94
81
|
" ",
|
|
95
|
-
|
|
82
|
+
D("planmagnet.products.title", "Products")
|
|
96
83
|
]
|
|
97
|
-
}), /* @__PURE__ */
|
|
84
|
+
}), /* @__PURE__ */ g("p", {
|
|
98
85
|
className: "text-sm text-muted-foreground mt-1",
|
|
99
|
-
children:
|
|
100
|
-
})] }), /* @__PURE__ */
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
86
|
+
children: D("planmagnet.products.subtitle", "Strategy entities that link roadmaps, releases, feature requests and OKRs")
|
|
87
|
+
})] }), /* @__PURE__ */ _("div", {
|
|
88
|
+
className: "flex items-center gap-2",
|
|
89
|
+
children: [/* @__PURE__ */ _(b, {
|
|
90
|
+
size: "sm",
|
|
91
|
+
variant: O ? "default" : "outline",
|
|
92
|
+
onClick: () => k((e) => !e),
|
|
93
|
+
"data-testid": "products-toggle-archived",
|
|
94
|
+
children: [/* @__PURE__ */ g(s, { className: "h-4 w-4 mr-1" }), O ? D("planmagnet.products.actions.hideArchived", "Hide archived") : D("planmagnet.products.actions.showArchived", "Show archived")]
|
|
95
|
+
}), /* @__PURE__ */ _(b, {
|
|
96
|
+
size: "sm",
|
|
97
|
+
onClick: () => E("/products/create-product-page"),
|
|
98
|
+
children: [/* @__PURE__ */ g(f, { className: "h-4 w-4 mr-1" }), D("planmagnet.products.actions.newProduct", "New Product")]
|
|
99
|
+
})]
|
|
104
100
|
})]
|
|
105
101
|
}),
|
|
106
|
-
/* @__PURE__ */
|
|
102
|
+
/* @__PURE__ */ g("div", {
|
|
107
103
|
className: "grid gap-4 md:grid-cols-3",
|
|
108
104
|
children: [
|
|
109
105
|
{
|
|
110
|
-
label:
|
|
111
|
-
val:
|
|
112
|
-
icon:
|
|
106
|
+
label: D("planmagnet.products.metrics.totalProducts", "Total Products"),
|
|
107
|
+
val: P,
|
|
108
|
+
icon: d,
|
|
113
109
|
color: "text-blue-500"
|
|
114
110
|
},
|
|
115
111
|
{
|
|
116
|
-
label:
|
|
117
|
-
val:
|
|
118
|
-
icon:
|
|
112
|
+
label: D("planmagnet.products.metrics.roadmaps", "Linked roadmaps"),
|
|
113
|
+
val: N.reduce((e, t) => e + t.roadmaps.length, 0),
|
|
114
|
+
icon: u,
|
|
119
115
|
color: "text-green-500"
|
|
120
116
|
},
|
|
121
117
|
{
|
|
122
|
-
label:
|
|
123
|
-
val:
|
|
124
|
-
icon:
|
|
118
|
+
label: D("planmagnet.products.metrics.releases", "Linked releases"),
|
|
119
|
+
val: N.reduce((e, t) => e + t.releases.length, 0),
|
|
120
|
+
icon: c,
|
|
125
121
|
color: "text-purple-500"
|
|
126
122
|
}
|
|
127
|
-
].map((e) => /* @__PURE__ */
|
|
123
|
+
].map((e) => /* @__PURE__ */ g(x, { children: /* @__PURE__ */ g(S, {
|
|
128
124
|
className: "pt-6",
|
|
129
|
-
children: /* @__PURE__ */
|
|
125
|
+
children: /* @__PURE__ */ _("div", {
|
|
130
126
|
className: "flex items-center justify-between",
|
|
131
|
-
children: [/* @__PURE__ */
|
|
127
|
+
children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
132
128
|
className: "text-sm text-muted-foreground",
|
|
133
129
|
children: e.label
|
|
134
|
-
}), /* @__PURE__ */
|
|
130
|
+
}), /* @__PURE__ */ g("p", {
|
|
135
131
|
className: "text-2xl font-bold",
|
|
136
132
|
children: e.val
|
|
137
|
-
})] }), /* @__PURE__ */
|
|
133
|
+
})] }), /* @__PURE__ */ g(e.icon, { className: `h-8 w-8 ${e.color} opacity-60` })]
|
|
138
134
|
})
|
|
139
135
|
}) }, e.label))
|
|
140
136
|
}),
|
|
141
|
-
/* @__PURE__ */
|
|
137
|
+
N.length === 0 ? /* @__PURE__ */ g(x, { children: /* @__PURE__ */ g(S, {
|
|
138
|
+
className: "py-12 text-center text-sm text-muted-foreground",
|
|
139
|
+
children: D("planmagnet.products.empty", "No products yet. Create one to get started.")
|
|
140
|
+
}) }) : /* @__PURE__ */ g("div", {
|
|
142
141
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-2",
|
|
143
|
-
children:
|
|
144
|
-
...
|
|
145
|
-
children: [/* @__PURE__ */
|
|
146
|
-
className: "flex items-center justify-between",
|
|
147
|
-
children: [/* @__PURE__ */
|
|
142
|
+
children: N.map((e) => /* @__PURE__ */ _(x, {
|
|
143
|
+
...a(() => E(i("/products/product-detail-page", e.id)), e.name),
|
|
144
|
+
children: [/* @__PURE__ */ g(C, { children: /* @__PURE__ */ _("div", {
|
|
145
|
+
className: "flex items-center justify-between gap-2",
|
|
146
|
+
children: [/* @__PURE__ */ g(w, {
|
|
148
147
|
className: "text-base",
|
|
149
148
|
children: e.name
|
|
150
|
-
}), /* @__PURE__ */ _(
|
|
151
|
-
|
|
149
|
+
}), /* @__PURE__ */ _("div", {
|
|
150
|
+
className: "flex items-center gap-1 shrink-0",
|
|
151
|
+
children: [e.archivedAt && /* @__PURE__ */ g(y, {
|
|
152
|
+
variant: "outline",
|
|
153
|
+
className: "text-xs",
|
|
154
|
+
children: D("planmagnet.products.shared.archived", "Archived")
|
|
155
|
+
}), /* @__PURE__ */ g(y, {
|
|
156
|
+
variant: "secondary",
|
|
157
|
+
className: "text-xs capitalize",
|
|
158
|
+
children: r(e.lifecycleStage)
|
|
159
|
+
})]
|
|
160
|
+
})]
|
|
161
|
+
}) }), /* @__PURE__ */ _(S, {
|
|
152
162
|
className: "space-y-3",
|
|
153
163
|
children: [
|
|
154
|
-
/* @__PURE__ */
|
|
155
|
-
className: "text-sm text-muted-foreground",
|
|
156
|
-
children: e.
|
|
164
|
+
/* @__PURE__ */ g("p", {
|
|
165
|
+
className: "text-sm text-muted-foreground line-clamp-2",
|
|
166
|
+
children: e.vision || D("planmagnet.products.shared.noVision", "No vision set")
|
|
157
167
|
}),
|
|
158
|
-
/* @__PURE__ */
|
|
168
|
+
/* @__PURE__ */ _("div", {
|
|
159
169
|
className: "grid grid-cols-3 gap-2 text-center",
|
|
160
170
|
children: [
|
|
161
|
-
/* @__PURE__ */
|
|
171
|
+
/* @__PURE__ */ _("div", {
|
|
162
172
|
className: "rounded border p-2",
|
|
163
|
-
children: [/* @__PURE__ */
|
|
173
|
+
children: [/* @__PURE__ */ g("p", {
|
|
164
174
|
className: "text-lg font-bold",
|
|
165
|
-
children: e.
|
|
166
|
-
}), /* @__PURE__ */
|
|
175
|
+
children: e.roadmaps.length
|
|
176
|
+
}), /* @__PURE__ */ g("p", {
|
|
167
177
|
className: "text-xs text-muted-foreground",
|
|
168
|
-
children:
|
|
178
|
+
children: D("planmagnet.products.shared.roadmaps", "Roadmaps")
|
|
169
179
|
})]
|
|
170
180
|
}),
|
|
171
|
-
/* @__PURE__ */
|
|
181
|
+
/* @__PURE__ */ _("div", {
|
|
172
182
|
className: "rounded border p-2",
|
|
173
|
-
children: [/* @__PURE__ */
|
|
183
|
+
children: [/* @__PURE__ */ g("p", {
|
|
174
184
|
className: "text-lg font-bold",
|
|
175
|
-
children: e.
|
|
176
|
-
}), /* @__PURE__ */
|
|
185
|
+
children: e.releases.length
|
|
186
|
+
}), /* @__PURE__ */ g("p", {
|
|
177
187
|
className: "text-xs text-muted-foreground",
|
|
178
|
-
children:
|
|
188
|
+
children: D("planmagnet.products.shared.releases", "Releases")
|
|
179
189
|
})]
|
|
180
190
|
}),
|
|
181
|
-
/* @__PURE__ */
|
|
191
|
+
/* @__PURE__ */ _("div", {
|
|
182
192
|
className: "rounded border p-2",
|
|
183
|
-
children: [/* @__PURE__ */
|
|
193
|
+
children: [/* @__PURE__ */ g("p", {
|
|
184
194
|
className: "text-lg font-bold",
|
|
185
|
-
children:
|
|
195
|
+
children: e.featureRequests.length
|
|
186
196
|
}), /* @__PURE__ */ _("p", {
|
|
187
197
|
className: "text-xs text-muted-foreground",
|
|
188
|
-
children:
|
|
198
|
+
children: [/* @__PURE__ */ g(p, { className: "inline h-3 w-3 mr-0.5" }), D("planmagnet.products.shared.features", "Features")]
|
|
189
199
|
})]
|
|
190
200
|
})
|
|
191
201
|
]
|
|
192
202
|
}),
|
|
193
|
-
/* @__PURE__ */
|
|
203
|
+
e.northStar && /* @__PURE__ */ g("div", {
|
|
204
|
+
className: "rounded border p-2 text-xs",
|
|
205
|
+
children: /* @__PURE__ */ _("div", {
|
|
206
|
+
className: "flex items-center justify-between",
|
|
207
|
+
children: [/* @__PURE__ */ g("span", {
|
|
208
|
+
className: "text-muted-foreground",
|
|
209
|
+
children: e.northStar.name
|
|
210
|
+
}), /* @__PURE__ */ _("span", {
|
|
211
|
+
className: "font-medium",
|
|
212
|
+
children: [
|
|
213
|
+
e.northStar.current,
|
|
214
|
+
" / ",
|
|
215
|
+
e.northStar.target,
|
|
216
|
+
" ",
|
|
217
|
+
e.northStar.unit,
|
|
218
|
+
e.northStar.progressRatio == null ? "" : ` (${Math.round(e.northStar.progressRatio * 100)}%)`
|
|
219
|
+
]
|
|
220
|
+
})]
|
|
221
|
+
})
|
|
222
|
+
}),
|
|
223
|
+
/* @__PURE__ */ _("div", {
|
|
194
224
|
className: "flex items-center justify-between text-xs text-muted-foreground",
|
|
195
|
-
children: [/* @__PURE__ */
|
|
196
|
-
|
|
225
|
+
children: [/* @__PURE__ */ _("span", { children: [
|
|
226
|
+
D("planmagnet.products.shared.owner", "Owner"),
|
|
197
227
|
":",
|
|
198
228
|
" ",
|
|
199
|
-
/* @__PURE__ */
|
|
200
|
-
] }), /* @__PURE__ */
|
|
201
|
-
|
|
229
|
+
/* @__PURE__ */ g(n, { id: e.ownerId })
|
|
230
|
+
] }), /* @__PURE__ */ _("span", { children: [
|
|
231
|
+
D("planmagnet.products.shared.updated", "Updated"),
|
|
202
232
|
" ",
|
|
203
233
|
new Date(e.updatedAt).toLocaleDateString()
|
|
204
234
|
] })]
|
|
@@ -211,6 +241,6 @@ function O() {
|
|
|
211
241
|
});
|
|
212
242
|
}
|
|
213
243
|
//#endregion
|
|
214
|
-
export {
|
|
244
|
+
export { E as ProductsProductsPagePage };
|
|
215
245
|
|
|
216
246
|
//# sourceMappingURL=ProductsProductsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsProductsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductsPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Package, Plus, TrendingUp, Calendar, GitBranch, Map, Loader2 } from 'lucide-react';\nimport { countLabel, useFeatureCounts } from '../hooks/useCounts';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { PlanningFocusBadge, planningFocusLabel } from '../roadmaps/planningFocus';\n\nconst LIST_ROADMAPS = gql`\n query ListRoadmaps($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetRoadmaps(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n workspaceId\n name\n description\n type\n planningFocus\n isPublic\n ownerId\n metadata\n createdBy\n createdAt\n updatedAt\n updatedBy\n items {\n id\n status\n }\n }\n totalCount\n }\n }\n`;\n\nconst LIST_FEATURE_REQUESTS = gql`\n query ListFeatureRequestsForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetFeatureRequests(workspaceId: $workspaceId, pagination: $pagination) {\n totalCount\n }\n }\n`;\n\nconst LIST_RELEASES = gql`\n query ListReleasesForProducts($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetReleases(workspaceId: $workspaceId, pagination: $pagination) {\n totalCount\n }\n }\n`;\n\ninterface RoadmapNode {\n id: string;\n name: string;\n description: string | null;\n type: string;\n planningFocus: string | null;\n isPublic: boolean;\n ownerId: string;\n createdAt: string;\n updatedAt: string;\n items: { id: string; status: string }[];\n}\n\nexport function ProductsProductsPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const { t } = useI18n();\n const featureCounts = useFeatureCounts();\n const [view, setView] = useState<'grid' | 'list'>('grid');\n\n const {\n data: roadmapsData,\n loading: roadmapsLoading,\n error: roadmapsError,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = useQuery<Record<string, any>>(LIST_ROADMAPS, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n variables: { workspaceId, pagination: { first: 50 } },\n skip: !workspaceId,\n });\n\n const {\n data: featuresData,\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>>(LIST_FEATURE_REQUESTS, {\n variables: { workspaceId, pagination: { first: 1 } },\n skip: !workspaceId,\n });\n\n const {\n data: releasesData,\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>>(LIST_RELEASES, {\n variables: { workspaceId, pagination: { first: 1 } },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page.\n if (roadmapsLoading && !roadmapsData) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (roadmapsError) {\n return (\n <div className=\"p-6 text-destructive\">\n {t('planmagnet.products.errorLoading', 'Failed to load products')}: {roadmapsError.message}\n </div>\n );\n }\n\n const roadmaps: RoadmapNode[] = roadmapsData?.planmagnetRoadmaps?.items ?? [];\n const totalRoadmaps = roadmapsData?.planmagnetRoadmaps?.totalCount ?? 0;\n const totalReleases = releasesData?.planmagnetReleases?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <Package className=\"h-6 w-6\" /> {t('planmagnet.products.title', 'Products')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {t(\n 'planmagnet.products.subtitle',\n 'Manage your product portfolio and track feature development'\n )}\n </p>\n </div>\n <Button size=\"sm\" onClick={() => navigate('/products/create-product-page')}>\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('planmagnet.products.actions.newProduct', 'New Product')}\n </Button>\n </div>\n\n {/* BOFF-7992: \"Total Products\" and \"Roadmaps\" were the same number (a product is a roadmap), and \"Active\n Features\" counted every status. Now three distinct numbers; open = submitted, in review, planned or in\n progress. */}\n <div className=\"grid gap-4 md:grid-cols-3\">\n {[\n {\n label: t('planmagnet.products.metrics.totalProducts', 'Total Products'),\n val: totalRoadmaps,\n icon: Package,\n color: 'text-blue-500',\n },\n {\n label: t('planmagnet.products.metrics.openFeatures', 'Open feature requests'),\n val: countLabel(featureCounts?.open),\n icon: GitBranch,\n color: 'text-green-500',\n },\n {\n label: t('planmagnet.products.metrics.releases', 'Releases'),\n val: totalReleases,\n icon: Calendar,\n color: 'text-purple-500',\n },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">{s.label}</p>\n <p className=\"text-2xl font-bold\">{s.val}</p>\n </div>\n <s.icon className={`h-8 w-8 ${s.color} opacity-60`} />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-2\">\n {roadmaps.map((roadmap) => (\n <Card\n key={roadmap.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/product-detail-page', roadmap.id)),\n roadmap.name\n )}\n >\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{roadmap.name}</CardTitle>\n <PlanningFocusBadge focus={roadmap.planningFocus} />\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {roadmap.description ??\n t('planmagnet.products.shared.noDescription', 'No description')}\n </p>\n <div className=\"grid grid-cols-3 gap-2 text-center\">\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{roadmap.items?.length ?? 0}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.items', 'Items')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">\n {roadmap.isPublic\n ? t('planmagnet.products.shared.public', 'Public')\n : t('planmagnet.products.shared.private', 'Private')}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.visibility', 'Visibility')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{planningFocusLabel(roadmap.planningFocus)}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.planningFocus', 'Planning focus')}\n </p>\n </div>\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {t('planmagnet.products.shared.owner', 'Owner')}:{' '}\n <PersonName id={roadmap.ownerId} />\n </span>\n <span>\n {t('planmagnet.products.shared.updated', 'Updated')}{' '}\n {new Date(roadmap.updatedAt).toLocaleDateString()}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProductsProductsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Package, Plus, Archive, Loader2, Map, GitBranch, Star } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\n\n/**\n * The real \"Products\" list (BOFF-8045). Before this shipped, this page listed Roadmaps\n * relabelled as products (CAPABILITY_REGISTER: \"not-built\") — it now queries the Product\n * entity directly, which links roadmaps/releases/feature requests/OKR objectives rather\n * than being one.\n */\n\nconst LIST_PRODUCTS = gql`\n query GetProducts(\n $workspaceId: ID!\n $filter: PlanmagnetProductFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProducts(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n description\n vision\n lifecycleStage\n ownerId\n archivedAt\n northStar {\n name\n unit\n target\n current\n progressRatio\n }\n roadmaps {\n id\n }\n releases {\n id\n }\n featureRequests {\n id\n }\n updatedAt\n }\n totalCount\n }\n }\n`;\n\ninterface ProductNorthStar {\n name: string;\n unit: string;\n target: number;\n current: number;\n progressRatio: number | null;\n}\n\ninterface ProductListNode {\n id: string;\n name: string;\n description: string | null;\n vision: string;\n lifecycleStage: string;\n ownerId: string;\n archivedAt: string | null;\n northStar: ProductNorthStar | null;\n roadmaps: { id: string }[];\n releases: { id: string }[];\n featureRequests: { id: string }[];\n updatedAt: string;\n}\n\nexport function ProductsProductsPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const { t } = useI18n();\n const [showArchived, setShowArchived] = useState(false);\n\n const { data, loading, error } = useQuery<{\n planmagnetProducts: { items: ProductListNode[]; totalCount: number };\n }>(LIST_PRODUCTS, {\n variables: {\n workspaceId,\n filter: showArchived ? undefined : { isActive: true },\n pagination: { first: 50 },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page.\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-6 text-destructive\">\n {t('planmagnet.products.errorLoading', 'Failed to load products')}: {error.message}\n </div>\n );\n }\n\n const products = data?.planmagnetProducts?.items ?? [];\n const totalProducts = data?.planmagnetProducts?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <Package className=\"h-6 w-6\" /> {t('planmagnet.products.title', 'Products')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {t(\n 'planmagnet.products.subtitle',\n 'Strategy entities that link roadmaps, releases, feature requests and OKRs'\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"sm\"\n variant={showArchived ? 'default' : 'outline'}\n onClick={() => setShowArchived((v) => !v)}\n data-testid=\"products-toggle-archived\"\n >\n <Archive className=\"h-4 w-4 mr-1\" />\n {showArchived\n ? t('planmagnet.products.actions.hideArchived', 'Hide archived')\n : t('planmagnet.products.actions.showArchived', 'Show archived')}\n </Button>\n <Button size=\"sm\" onClick={() => navigate('/products/create-product-page')}>\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('planmagnet.products.actions.newProduct', 'New Product')}\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n {[\n {\n label: t('planmagnet.products.metrics.totalProducts', 'Total Products'),\n val: totalProducts,\n icon: Package,\n color: 'text-blue-500',\n },\n {\n label: t('planmagnet.products.metrics.roadmaps', 'Linked roadmaps'),\n val: products.reduce((sum, p) => sum + p.roadmaps.length, 0),\n icon: Map,\n color: 'text-green-500',\n },\n {\n label: t('planmagnet.products.metrics.releases', 'Linked releases'),\n val: products.reduce((sum, p) => sum + p.releases.length, 0),\n icon: GitBranch,\n color: 'text-purple-500',\n },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">{s.label}</p>\n <p className=\"text-2xl font-bold\">{s.val}</p>\n </div>\n <s.icon className={`h-8 w-8 ${s.color} opacity-60`} />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {products.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-sm text-muted-foreground\">\n {t('planmagnet.products.empty', 'No products yet. Create one to get started.')}\n </CardContent>\n </Card>\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-2\">\n {products.map((product) => (\n <Card\n key={product.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/product-detail-page', product.id)),\n product.name\n )}\n >\n <CardHeader>\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base\">{product.name}</CardTitle>\n <div className=\"flex items-center gap-1 shrink-0\">\n {product.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {t('planmagnet.products.shared.archived', 'Archived')}\n </Badge>\n )}\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {enumLabel(product.lifecycleStage)}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground line-clamp-2\">\n {product.vision || t('planmagnet.products.shared.noVision', 'No vision set')}\n </p>\n <div className=\"grid grid-cols-3 gap-2 text-center\">\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.roadmaps.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.roadmaps', 'Roadmaps')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.releases.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.releases', 'Releases')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.featureRequests.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n <Star className=\"inline h-3 w-3 mr-0.5\" />\n {t('planmagnet.products.shared.features', 'Features')}\n </p>\n </div>\n </div>\n {product.northStar && (\n <div className=\"rounded border p-2 text-xs\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground\">{product.northStar.name}</span>\n <span className=\"font-medium\">\n {product.northStar.current} / {product.northStar.target}{' '}\n {product.northStar.unit}\n {product.northStar.progressRatio != null\n ? ` (${Math.round(product.northStar.progressRatio * 100)}%)`\n : ''}\n </span>\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {t('planmagnet.products.shared.owner', 'Owner')}:{' '}\n <PersonName id={product.ownerId} />\n </span>\n <span>\n {t('planmagnet.products.shared.updated', 'Updated')}{' '}\n {new Date(product.updatedAt).toLocaleDateString()}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksCreateTaskPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"names":[],"mappings":"AAsEA,wBAAgB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"TasksCreateTaskPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksCreateTaskPagePage.tsx"],"names":[],"mappings":"AAsEA,wBAAgB,uBAAuB,4CAgVtC"}
|