@burdenoff/microfe-planmagnet 2026.1001.1 → 2026.1001.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.
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +156 -150
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +19 -15
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/comments/CommentThread.js +36 -36
- package/dist/planmagnet/comments/RoadmapComments.js +21 -21
- package/dist/planmagnet/controls/AutomationRuleControls.js +24 -24
- package/dist/planmagnet/controls/FeatureControls.js +60 -60
- package/dist/planmagnet/controls/SyncControls.js +59 -59
- package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +15 -15
- package/dist/planmagnet/docs/DocSuggestionsPanel.js +12 -12
- package/dist/planmagnet/docs/DocVersionCompare.js +3 -3
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts +12 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.js +208 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +1 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts +5 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.js +190 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +1 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts +5 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +99 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +1 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts +8 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.js +185 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.js.map +1 -0
- package/dist/planmagnet/forecast/riskFlags.d.ts +35 -0
- package/dist/planmagnet/forecast/riskFlags.d.ts.map +1 -0
- package/dist/planmagnet/forecast/riskFlags.js +37 -0
- package/dist/planmagnet/forecast/riskFlags.js.map +1 -0
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +216 -182
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +11 -11
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +4 -4
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +163 -163
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +165 -165
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +234 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +206 -182
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportPagePage.js +22 -22
- package/dist/planmagnet/pages/ReportsReportPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +21 -21
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +88 -83
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +139 -112
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +1 -1
- package/dist/planmagnet/pages/analytics/StatusFlowCard.js +21 -21
- package/dist/planmagnet/product/ProductControls.js +91 -91
- package/dist/planmagnet/reports/SchedulesPanel.js +33 -33
- package/dist/planmagnet/reports/ShareDialog.js +20 -20
- package/dist/planmagnet/reports/ShareDialog.js.map +1 -1
- package/dist/planmagnet/reports/sharedReportRoute.d.ts +3 -2
- package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +1 -1
- package/dist/planmagnet/reports/sharedReportRoute.js.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +60 -60
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +30 -30
- package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +21 -21
- package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +22 -22
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { mutationErrorMessage as n } from "../utils/graphqlErrors.js";
|
|
3
|
+
import { LEAVES_PAGE_CONTEXT as r, throwOnError as i } from "../utils/mutationResult.js";
|
|
4
|
+
import { ConfirmButton as a, ErrorLine as o } from "../controls/ConfirmButton.js";
|
|
5
|
+
import { enumLabel as s } from "../controls/WorkItemControls.js";
|
|
6
6
|
import { detailPath as c } from "../utils/rowNavigation.js";
|
|
7
7
|
import { CompetitorSearchSelect as l } from "../controls/Pickers.js";
|
|
8
8
|
import { useState as u } from "react";
|
|
@@ -35,10 +35,10 @@ var F = [
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
`;
|
|
38
|
-
function L({ productId: e, name:
|
|
38
|
+
function L({ productId: e, name: n, archivedAt: s }) {
|
|
39
39
|
let c = t(), [l, p] = v(re, {
|
|
40
40
|
refetchQueries: F,
|
|
41
|
-
context:
|
|
41
|
+
context: r
|
|
42
42
|
}), [m, g] = v(ie, {
|
|
43
43
|
refetchQueries: F,
|
|
44
44
|
awaitRefetchQueries: !0
|
|
@@ -48,14 +48,14 @@ function L({ productId: e, name: o, archivedAt: s }) {
|
|
|
48
48
|
}), [b, C] = u(null), T = async () => {
|
|
49
49
|
C(null);
|
|
50
50
|
try {
|
|
51
|
-
await
|
|
51
|
+
await i(l({ variables: { id: e } })), c("/products/products-page");
|
|
52
52
|
} catch (e) {
|
|
53
53
|
C(e instanceof Error ? e.message : "The product could not be deleted.");
|
|
54
54
|
}
|
|
55
55
|
}, E = async () => {
|
|
56
56
|
C(null);
|
|
57
57
|
try {
|
|
58
|
-
s ? await
|
|
58
|
+
s ? await i(_({ variables: { id: e } })) : await i(m({ variables: { id: e } }));
|
|
59
59
|
} catch (e) {
|
|
60
60
|
C(e instanceof Error ? e.message : "The product could not be updated.");
|
|
61
61
|
}
|
|
@@ -71,18 +71,18 @@ function L({ productId: e, name: o, archivedAt: s }) {
|
|
|
71
71
|
disabled: g.loading || y.loading,
|
|
72
72
|
onClick: () => void E(),
|
|
73
73
|
children: [x(s ? f : d, { className: "mr-1 h-4 w-4" }), s ? "Unarchive" : "Archive"]
|
|
74
|
-
}), /* @__PURE__ */ x(
|
|
74
|
+
}), /* @__PURE__ */ x(a, {
|
|
75
75
|
label: "Delete",
|
|
76
76
|
variant: "outline",
|
|
77
77
|
icon: /* @__PURE__ */ x(h, { className: "mr-1 h-4 w-4" }),
|
|
78
|
-
title: `Delete ${
|
|
78
|
+
title: `Delete ${n}?`,
|
|
79
79
|
description: "Every linked roadmap, release and feature request stays intact — only its link to this product is cleared. This cannot be undone here.",
|
|
80
80
|
confirmLabel: "Delete product",
|
|
81
81
|
destructive: !0,
|
|
82
82
|
disabled: p.loading,
|
|
83
83
|
onConfirm: () => void T()
|
|
84
84
|
})]
|
|
85
|
-
}), b && /* @__PURE__ */ x(
|
|
85
|
+
}), b && /* @__PURE__ */ x(o, { message: b })]
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
var R = _`
|
|
@@ -109,13 +109,13 @@ var R = _`
|
|
|
109
109
|
}
|
|
110
110
|
`;
|
|
111
111
|
function V({ productId: e, roadmaps: n }) {
|
|
112
|
-
let
|
|
112
|
+
let r = t(), [a, s] = v(z, {
|
|
113
113
|
refetchQueries: F,
|
|
114
114
|
awaitRefetchQueries: !0
|
|
115
115
|
}), [l, d] = u(null), [f, p] = u(null), m = async (t) => {
|
|
116
116
|
d(null), p(t);
|
|
117
117
|
try {
|
|
118
|
-
await
|
|
118
|
+
await i(a({ variables: {
|
|
119
119
|
productId: e,
|
|
120
120
|
roadmapId: t
|
|
121
121
|
} }));
|
|
@@ -143,7 +143,7 @@ function V({ productId: e, roadmaps: n }) {
|
|
|
143
143
|
existingIds: n.map((e) => e.id)
|
|
144
144
|
})]
|
|
145
145
|
}),
|
|
146
|
-
l && /* @__PURE__ */ x(
|
|
146
|
+
l && /* @__PURE__ */ x(o, { message: l }),
|
|
147
147
|
n.length === 0 ? /* @__PURE__ */ x("p", {
|
|
148
148
|
className: "text-sm text-muted-foreground text-center py-4",
|
|
149
149
|
children: "No roadmaps linked to this product yet."
|
|
@@ -154,7 +154,7 @@ function V({ productId: e, roadmaps: n }) {
|
|
|
154
154
|
children: [/* @__PURE__ */ x("button", {
|
|
155
155
|
type: "button",
|
|
156
156
|
className: "min-w-0 truncate text-left hover:underline",
|
|
157
|
-
onClick: () =>
|
|
157
|
+
onClick: () => r(c("/products/roadmap-detail-page", e.id)),
|
|
158
158
|
children: e.name
|
|
159
159
|
}), /* @__PURE__ */ x(w, {
|
|
160
160
|
size: "sm",
|
|
@@ -170,9 +170,9 @@ function V({ productId: e, roadmaps: n }) {
|
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
172
|
function H({ productId: t, existingIds: n }) {
|
|
173
|
-
let { workspaceId:
|
|
174
|
-
variables: { workspaceId:
|
|
175
|
-
skip: !
|
|
173
|
+
let { workspaceId: r } = e(), [a, s] = u(!1), [c, l] = u(/* @__PURE__ */ new Set()), [d, f] = u(null), { data: p, loading: h } = y(B, {
|
|
174
|
+
variables: { workspaceId: r ?? "" },
|
|
175
|
+
skip: !a || !r
|
|
176
176
|
}), g = (p?.planmagnetRoadmaps.items ?? []).filter((e) => !n.includes(e.id)), [_, b] = v(R, {
|
|
177
177
|
refetchQueries: F,
|
|
178
178
|
awaitRefetchQueries: !0
|
|
@@ -184,7 +184,7 @@ function H({ productId: t, existingIds: n }) {
|
|
|
184
184
|
}, E = async () => {
|
|
185
185
|
f(null);
|
|
186
186
|
try {
|
|
187
|
-
await Promise.all([...c].map((e) =>
|
|
187
|
+
await Promise.all([...c].map((e) => i(_({ variables: {
|
|
188
188
|
productId: t,
|
|
189
189
|
roadmapId: e
|
|
190
190
|
} })))), T(), s(!1);
|
|
@@ -193,7 +193,7 @@ function H({ productId: t, existingIds: n }) {
|
|
|
193
193
|
}
|
|
194
194
|
};
|
|
195
195
|
return /* @__PURE__ */ S(O, {
|
|
196
|
-
open:
|
|
196
|
+
open: a,
|
|
197
197
|
onOpenChange: (e) => {
|
|
198
198
|
s(e), e || T();
|
|
199
199
|
},
|
|
@@ -238,7 +238,7 @@ function H({ productId: t, existingIds: n }) {
|
|
|
238
238
|
})
|
|
239
239
|
]
|
|
240
240
|
}),
|
|
241
|
-
d && /* @__PURE__ */ x(
|
|
241
|
+
d && /* @__PURE__ */ x(o, { message: d }),
|
|
242
242
|
/* @__PURE__ */ x(j, { children: /* @__PURE__ */ x(w, {
|
|
243
243
|
onClick: () => void E(),
|
|
244
244
|
disabled: c.size === 0 || b.loading,
|
|
@@ -275,13 +275,13 @@ var U = _`
|
|
|
275
275
|
}
|
|
276
276
|
`;
|
|
277
277
|
function K({ productId: e, releases: n }) {
|
|
278
|
-
let
|
|
278
|
+
let r = t(), [a, l] = v(W, {
|
|
279
279
|
refetchQueries: F,
|
|
280
280
|
awaitRefetchQueries: !0
|
|
281
281
|
}), [d, f] = u(null), [p, m] = u(null), h = async (t) => {
|
|
282
282
|
f(null), m(t);
|
|
283
283
|
try {
|
|
284
|
-
await
|
|
284
|
+
await i(a({ variables: {
|
|
285
285
|
productId: e,
|
|
286
286
|
releaseId: t
|
|
287
287
|
} }));
|
|
@@ -309,7 +309,7 @@ function K({ productId: e, releases: n }) {
|
|
|
309
309
|
existingIds: n.map((e) => e.id)
|
|
310
310
|
})]
|
|
311
311
|
}),
|
|
312
|
-
d && /* @__PURE__ */ x(
|
|
312
|
+
d && /* @__PURE__ */ x(o, { message: d }),
|
|
313
313
|
n.length === 0 ? /* @__PURE__ */ x("p", {
|
|
314
314
|
className: "text-sm text-muted-foreground text-center py-4",
|
|
315
315
|
children: "No releases linked to this product yet."
|
|
@@ -320,7 +320,7 @@ function K({ productId: e, releases: n }) {
|
|
|
320
320
|
children: [/* @__PURE__ */ S("button", {
|
|
321
321
|
type: "button",
|
|
322
322
|
className: "min-w-0 truncate text-left hover:underline",
|
|
323
|
-
onClick: () =>
|
|
323
|
+
onClick: () => r(c("/products/release-detail-page", e.id)),
|
|
324
324
|
children: [/* @__PURE__ */ x("span", {
|
|
325
325
|
className: "text-muted-foreground mr-2",
|
|
326
326
|
children: e.version
|
|
@@ -330,7 +330,7 @@ function K({ productId: e, releases: n }) {
|
|
|
330
330
|
children: [/* @__PURE__ */ x(C, {
|
|
331
331
|
variant: "outline",
|
|
332
332
|
className: "text-xs capitalize",
|
|
333
|
-
children:
|
|
333
|
+
children: s(e.status)
|
|
334
334
|
}), /* @__PURE__ */ x(w, {
|
|
335
335
|
size: "sm",
|
|
336
336
|
variant: "ghost",
|
|
@@ -346,9 +346,9 @@ function K({ productId: e, releases: n }) {
|
|
|
346
346
|
});
|
|
347
347
|
}
|
|
348
348
|
function q({ productId: t, existingIds: n }) {
|
|
349
|
-
let { workspaceId:
|
|
350
|
-
variables: { workspaceId:
|
|
351
|
-
skip: !
|
|
349
|
+
let { workspaceId: r } = e(), [a, s] = u(!1), [c, l] = u(/* @__PURE__ */ new Set()), [d, f] = u(null), { data: p, loading: h } = y(G, {
|
|
350
|
+
variables: { workspaceId: r ?? "" },
|
|
351
|
+
skip: !a || !r
|
|
352
352
|
}), g = (p?.planmagnetReleases.items ?? []).filter((e) => !n.includes(e.id)), [_, b] = v(U, {
|
|
353
353
|
refetchQueries: F,
|
|
354
354
|
awaitRefetchQueries: !0
|
|
@@ -360,7 +360,7 @@ function q({ productId: t, existingIds: n }) {
|
|
|
360
360
|
}, E = async () => {
|
|
361
361
|
f(null);
|
|
362
362
|
try {
|
|
363
|
-
await Promise.all([...c].map((e) =>
|
|
363
|
+
await Promise.all([...c].map((e) => i(_({ variables: {
|
|
364
364
|
productId: t,
|
|
365
365
|
releaseId: e
|
|
366
366
|
} })))), T(), s(!1);
|
|
@@ -369,7 +369,7 @@ function q({ productId: t, existingIds: n }) {
|
|
|
369
369
|
}
|
|
370
370
|
};
|
|
371
371
|
return /* @__PURE__ */ S(O, {
|
|
372
|
-
open:
|
|
372
|
+
open: a,
|
|
373
373
|
onOpenChange: (e) => {
|
|
374
374
|
s(e), e || T();
|
|
375
375
|
},
|
|
@@ -417,7 +417,7 @@ function q({ productId: t, existingIds: n }) {
|
|
|
417
417
|
})
|
|
418
418
|
]
|
|
419
419
|
}),
|
|
420
|
-
d && /* @__PURE__ */ x(
|
|
420
|
+
d && /* @__PURE__ */ x(o, { message: d }),
|
|
421
421
|
/* @__PURE__ */ x(j, { children: /* @__PURE__ */ x(w, {
|
|
422
422
|
onClick: () => void E(),
|
|
423
423
|
disabled: c.size === 0 || b.loading,
|
|
@@ -459,13 +459,13 @@ var J = _`
|
|
|
459
459
|
}
|
|
460
460
|
`;
|
|
461
461
|
function se({ productId: e, featureRequests: n }) {
|
|
462
|
-
let
|
|
462
|
+
let r = t(), [a, l] = v(ae, {
|
|
463
463
|
refetchQueries: F,
|
|
464
464
|
awaitRefetchQueries: !0
|
|
465
465
|
}), [d, f] = u(null), [p, m] = u(null), h = async (t) => {
|
|
466
466
|
f(null), m(t);
|
|
467
467
|
try {
|
|
468
|
-
await
|
|
468
|
+
await i(a({ variables: {
|
|
469
469
|
productId: e,
|
|
470
470
|
featureRequestId: t
|
|
471
471
|
} }));
|
|
@@ -493,7 +493,7 @@ function se({ productId: e, featureRequests: n }) {
|
|
|
493
493
|
existingIds: n.map((e) => e.id)
|
|
494
494
|
})]
|
|
495
495
|
}),
|
|
496
|
-
d && /* @__PURE__ */ x(
|
|
496
|
+
d && /* @__PURE__ */ x(o, { message: d }),
|
|
497
497
|
n.length === 0 ? /* @__PURE__ */ x("p", {
|
|
498
498
|
className: "text-sm text-muted-foreground text-center py-4",
|
|
499
499
|
children: "No feature requests linked to this product yet."
|
|
@@ -504,14 +504,14 @@ function se({ productId: e, featureRequests: n }) {
|
|
|
504
504
|
children: [/* @__PURE__ */ x("button", {
|
|
505
505
|
type: "button",
|
|
506
506
|
className: "min-w-0 truncate text-left hover:underline",
|
|
507
|
-
onClick: () =>
|
|
507
|
+
onClick: () => r(c("/products/feature-detail-page", e.id)),
|
|
508
508
|
children: e.title
|
|
509
509
|
}), /* @__PURE__ */ S("div", {
|
|
510
510
|
className: "flex items-center gap-2 shrink-0",
|
|
511
511
|
children: [/* @__PURE__ */ x(C, {
|
|
512
512
|
variant: "secondary",
|
|
513
513
|
className: "text-xs capitalize",
|
|
514
|
-
children:
|
|
514
|
+
children: s(e.status)
|
|
515
515
|
}), /* @__PURE__ */ x(w, {
|
|
516
516
|
size: "sm",
|
|
517
517
|
variant: "ghost",
|
|
@@ -527,9 +527,9 @@ function se({ productId: e, featureRequests: n }) {
|
|
|
527
527
|
});
|
|
528
528
|
}
|
|
529
529
|
function ce({ productId: t, existingIds: n }) {
|
|
530
|
-
let { workspaceId:
|
|
531
|
-
variables: { workspaceId:
|
|
532
|
-
skip: !
|
|
530
|
+
let { workspaceId: r } = e(), [a, s] = u(!1), [c, l] = u(/* @__PURE__ */ new Set()), [d, f] = u(null), { data: p, loading: h } = y(oe, {
|
|
531
|
+
variables: { workspaceId: r ?? "" },
|
|
532
|
+
skip: !a || !r
|
|
533
533
|
}), g = (p?.planmagnetFeatureRequests.items ?? []).filter((e) => !n.includes(e.id)), [_, b] = v(J, {
|
|
534
534
|
refetchQueries: F,
|
|
535
535
|
awaitRefetchQueries: !0
|
|
@@ -541,7 +541,7 @@ function ce({ productId: t, existingIds: n }) {
|
|
|
541
541
|
}, E = async () => {
|
|
542
542
|
f(null);
|
|
543
543
|
try {
|
|
544
|
-
await Promise.all([...c].map((e) =>
|
|
544
|
+
await Promise.all([...c].map((e) => i(_({ variables: {
|
|
545
545
|
productId: t,
|
|
546
546
|
featureRequestId: e
|
|
547
547
|
} })))), T(), s(!1);
|
|
@@ -550,7 +550,7 @@ function ce({ productId: t, existingIds: n }) {
|
|
|
550
550
|
}
|
|
551
551
|
};
|
|
552
552
|
return /* @__PURE__ */ S(O, {
|
|
553
|
-
open:
|
|
553
|
+
open: a,
|
|
554
554
|
onOpenChange: (e) => {
|
|
555
555
|
s(e), e || T();
|
|
556
556
|
},
|
|
@@ -595,7 +595,7 @@ function ce({ productId: t, existingIds: n }) {
|
|
|
595
595
|
})
|
|
596
596
|
]
|
|
597
597
|
}),
|
|
598
|
-
d && /* @__PURE__ */ x(
|
|
598
|
+
d && /* @__PURE__ */ x(o, { message: d }),
|
|
599
599
|
/* @__PURE__ */ x(j, { children: /* @__PURE__ */ x(w, {
|
|
600
600
|
onClick: () => void E(),
|
|
601
601
|
disabled: c.size === 0 || b.loading,
|
|
@@ -629,13 +629,13 @@ var le = _`
|
|
|
629
629
|
}
|
|
630
630
|
`;
|
|
631
631
|
function fe({ productId: e, objectives: n }) {
|
|
632
|
-
let
|
|
632
|
+
let r = t(), [a, c] = v(ue, {
|
|
633
633
|
refetchQueries: F,
|
|
634
634
|
awaitRefetchQueries: !0
|
|
635
635
|
}), [l, d] = u(null), [f, p] = u(null), m = async (t) => {
|
|
636
636
|
d(null), p(t);
|
|
637
637
|
try {
|
|
638
|
-
await
|
|
638
|
+
await i(a({ variables: {
|
|
639
639
|
productId: e,
|
|
640
640
|
objectiveId: t
|
|
641
641
|
} }));
|
|
@@ -663,7 +663,7 @@ function fe({ productId: e, objectives: n }) {
|
|
|
663
663
|
existingIds: n.map((e) => e.id)
|
|
664
664
|
})]
|
|
665
665
|
}),
|
|
666
|
-
l && /* @__PURE__ */ x(
|
|
666
|
+
l && /* @__PURE__ */ x(o, { message: l }),
|
|
667
667
|
n.length === 0 ? /* @__PURE__ */ x("p", {
|
|
668
668
|
className: "text-sm text-muted-foreground text-center py-4",
|
|
669
669
|
children: "No OKR objectives linked to this product yet."
|
|
@@ -674,14 +674,14 @@ function fe({ productId: e, objectives: n }) {
|
|
|
674
674
|
children: [/* @__PURE__ */ x("button", {
|
|
675
675
|
type: "button",
|
|
676
676
|
className: "min-w-0 truncate text-left hover:underline",
|
|
677
|
-
onClick: () =>
|
|
677
|
+
onClick: () => r(`/goals/objective-detail-page?objectiveId=${e.id}`),
|
|
678
678
|
children: e.title
|
|
679
679
|
}), /* @__PURE__ */ S("div", {
|
|
680
680
|
className: "flex items-center gap-2 shrink-0",
|
|
681
681
|
children: [/* @__PURE__ */ x(C, {
|
|
682
682
|
variant: "secondary",
|
|
683
683
|
className: "text-xs capitalize",
|
|
684
|
-
children:
|
|
684
|
+
children: s(e.status)
|
|
685
685
|
}), /* @__PURE__ */ x(w, {
|
|
686
686
|
size: "sm",
|
|
687
687
|
variant: "ghost",
|
|
@@ -697,9 +697,9 @@ function fe({ productId: e, objectives: n }) {
|
|
|
697
697
|
});
|
|
698
698
|
}
|
|
699
699
|
function pe({ productId: t, existingIds: n }) {
|
|
700
|
-
let { workspaceId:
|
|
701
|
-
variables: { workspaceId:
|
|
702
|
-
skip: !
|
|
700
|
+
let { workspaceId: r } = e(), [a, s] = u(!1), [c, l] = u(/* @__PURE__ */ new Set()), [d, f] = u(null), { data: p, loading: h } = y(de, {
|
|
701
|
+
variables: { workspaceId: r ?? "" },
|
|
702
|
+
skip: !a || !r
|
|
703
703
|
}), g = (p?.planmagnetObjectives.items ?? []).filter((e) => !n.includes(e.id)), [_, b] = v(le, {
|
|
704
704
|
refetchQueries: F,
|
|
705
705
|
awaitRefetchQueries: !0
|
|
@@ -711,7 +711,7 @@ function pe({ productId: t, existingIds: n }) {
|
|
|
711
711
|
}, E = async () => {
|
|
712
712
|
f(null);
|
|
713
713
|
try {
|
|
714
|
-
await Promise.all([...c].map((e) =>
|
|
714
|
+
await Promise.all([...c].map((e) => i(_({ variables: {
|
|
715
715
|
productId: t,
|
|
716
716
|
objectiveId: e
|
|
717
717
|
} })))), T(), s(!1);
|
|
@@ -720,7 +720,7 @@ function pe({ productId: t, existingIds: n }) {
|
|
|
720
720
|
}
|
|
721
721
|
};
|
|
722
722
|
return /* @__PURE__ */ S(O, {
|
|
723
|
-
open:
|
|
723
|
+
open: a,
|
|
724
724
|
onOpenChange: (e) => {
|
|
725
725
|
s(e), e || T();
|
|
726
726
|
},
|
|
@@ -765,7 +765,7 @@ function pe({ productId: t, existingIds: n }) {
|
|
|
765
765
|
})
|
|
766
766
|
]
|
|
767
767
|
}),
|
|
768
|
-
d && /* @__PURE__ */ x(
|
|
768
|
+
d && /* @__PURE__ */ x(o, { message: d }),
|
|
769
769
|
/* @__PURE__ */ x(j, { children: /* @__PURE__ */ x(w, {
|
|
770
770
|
onClick: () => void E(),
|
|
771
771
|
disabled: c.size === 0 || b.loading,
|
|
@@ -854,37 +854,37 @@ function he({ product: e }) {
|
|
|
854
854
|
valueProposition: e.valueProposition ?? "",
|
|
855
855
|
businessModel: e.businessModel ?? "",
|
|
856
856
|
targetSegments: e.targetSegments
|
|
857
|
-
}, [
|
|
857
|
+
}, [r, a] = u(!1), [s, c] = u(t), [l, d] = u(null), [f, m] = v(me, {
|
|
858
858
|
refetchQueries: F,
|
|
859
859
|
awaitRefetchQueries: !0
|
|
860
860
|
}), h = () => {
|
|
861
|
-
c(t), d(null),
|
|
861
|
+
c(t), d(null), a(!0);
|
|
862
862
|
}, g = [
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
].some((e) => e.length > Y), _ =
|
|
863
|
+
s.mission,
|
|
864
|
+
s.valueProposition,
|
|
865
|
+
s.businessModel
|
|
866
|
+
].some((e) => e.length > Y), _ = s.targetSegments.length <= X && s.targetSegments.every((e) => e.length <= Z), y = !g && _ && !m.loading, C = async () => {
|
|
867
867
|
d(null);
|
|
868
868
|
let t = (e) => e.trim() ? e.trim() : null;
|
|
869
869
|
try {
|
|
870
|
-
await
|
|
870
|
+
await i(f({ variables: {
|
|
871
871
|
id: e.id,
|
|
872
872
|
input: {
|
|
873
|
-
mission: t(
|
|
874
|
-
valueProposition: t(
|
|
875
|
-
businessModel: t(
|
|
876
|
-
targetSegments:
|
|
873
|
+
mission: t(s.mission),
|
|
874
|
+
valueProposition: t(s.valueProposition),
|
|
875
|
+
businessModel: t(s.businessModel),
|
|
876
|
+
targetSegments: s.targetSegments
|
|
877
877
|
}
|
|
878
|
-
} })),
|
|
878
|
+
} })), a(!1);
|
|
879
879
|
} catch (e) {
|
|
880
|
-
d(
|
|
880
|
+
d(n(e, "The product information could not be saved."));
|
|
881
881
|
}
|
|
882
882
|
}, D = "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[72px]";
|
|
883
883
|
return /* @__PURE__ */ S(T, {
|
|
884
884
|
"data-testid": "product-info",
|
|
885
885
|
children: [/* @__PURE__ */ S(ee, {
|
|
886
886
|
className: "flex flex-row items-center justify-between gap-2",
|
|
887
|
-
children: [/* @__PURE__ */ x(te, { children: "About this product" }), !
|
|
887
|
+
children: [/* @__PURE__ */ x(te, { children: "About this product" }), !r && /* @__PURE__ */ S(w, {
|
|
888
888
|
size: "sm",
|
|
889
889
|
variant: "outline",
|
|
890
890
|
"data-testid": "product-info-edit",
|
|
@@ -893,7 +893,7 @@ function he({ product: e }) {
|
|
|
893
893
|
})]
|
|
894
894
|
}), /* @__PURE__ */ x(E, {
|
|
895
895
|
className: "space-y-4",
|
|
896
|
-
children:
|
|
896
|
+
children: r ? /* @__PURE__ */ S(b, { children: [
|
|
897
897
|
/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("label", {
|
|
898
898
|
htmlFor: "product-info-mission",
|
|
899
899
|
className: "text-sm font-medium",
|
|
@@ -902,9 +902,9 @@ function he({ product: e }) {
|
|
|
902
902
|
id: "product-info-mission",
|
|
903
903
|
className: D,
|
|
904
904
|
maxLength: Y,
|
|
905
|
-
value:
|
|
905
|
+
value: s.mission,
|
|
906
906
|
onChange: (e) => c({
|
|
907
|
-
...
|
|
907
|
+
...s,
|
|
908
908
|
mission: e.target.value
|
|
909
909
|
})
|
|
910
910
|
})] }),
|
|
@@ -916,9 +916,9 @@ function he({ product: e }) {
|
|
|
916
916
|
id: "product-info-value-proposition",
|
|
917
917
|
className: D,
|
|
918
918
|
maxLength: Y,
|
|
919
|
-
value:
|
|
919
|
+
value: s.valueProposition,
|
|
920
920
|
onChange: (e) => c({
|
|
921
|
-
...
|
|
921
|
+
...s,
|
|
922
922
|
valueProposition: e.target.value
|
|
923
923
|
})
|
|
924
924
|
})] }),
|
|
@@ -930,9 +930,9 @@ function he({ product: e }) {
|
|
|
930
930
|
id: "product-info-business-model",
|
|
931
931
|
className: D,
|
|
932
932
|
maxLength: Y,
|
|
933
|
-
value:
|
|
933
|
+
value: s.businessModel,
|
|
934
934
|
onChange: (e) => c({
|
|
935
|
-
...
|
|
935
|
+
...s,
|
|
936
936
|
businessModel: e.target.value
|
|
937
937
|
})
|
|
938
938
|
})] }),
|
|
@@ -942,20 +942,20 @@ function he({ product: e }) {
|
|
|
942
942
|
}), /* @__PURE__ */ x("div", {
|
|
943
943
|
className: "mt-1",
|
|
944
944
|
children: /* @__PURE__ */ x(Q, {
|
|
945
|
-
value:
|
|
945
|
+
value: s.targetSegments,
|
|
946
946
|
onChange: (e) => c({
|
|
947
|
-
...
|
|
947
|
+
...s,
|
|
948
948
|
targetSegments: e
|
|
949
949
|
})
|
|
950
950
|
})
|
|
951
951
|
})] }),
|
|
952
|
-
l && /* @__PURE__ */ x(
|
|
952
|
+
l && /* @__PURE__ */ x(o, { message: l }),
|
|
953
953
|
/* @__PURE__ */ S("div", {
|
|
954
954
|
className: "flex justify-end gap-2",
|
|
955
955
|
children: [/* @__PURE__ */ x(w, {
|
|
956
956
|
size: "sm",
|
|
957
957
|
variant: "outline",
|
|
958
|
-
onClick: () =>
|
|
958
|
+
onClick: () => a(!1),
|
|
959
959
|
children: "Cancel"
|
|
960
960
|
}), /* @__PURE__ */ x(w, {
|
|
961
961
|
size: "sm",
|
|
@@ -1013,8 +1013,8 @@ var ge = _`
|
|
|
1013
1013
|
planmagnetUnlinkProductCompetitor(productId: $productId, competitorId: $competitorId)
|
|
1014
1014
|
}
|
|
1015
1015
|
`;
|
|
1016
|
-
function _e({ productId: e, competitors:
|
|
1017
|
-
let
|
|
1016
|
+
function _e({ productId: e, competitors: r }) {
|
|
1017
|
+
let s = t(), [d, f] = u(""), [p, h] = v(ge, {
|
|
1018
1018
|
refetchQueries: F,
|
|
1019
1019
|
awaitRefetchQueries: !0
|
|
1020
1020
|
}), [_, y] = v($, {
|
|
@@ -1024,45 +1024,45 @@ function _e({ productId: e, competitors: n }) {
|
|
|
1024
1024
|
if (d) {
|
|
1025
1025
|
C(null);
|
|
1026
1026
|
try {
|
|
1027
|
-
await
|
|
1027
|
+
await i(p({ variables: {
|
|
1028
1028
|
productId: e,
|
|
1029
1029
|
competitorId: d
|
|
1030
1030
|
} })), f("");
|
|
1031
1031
|
} catch (e) {
|
|
1032
|
-
C(
|
|
1032
|
+
C(n(e, "The competitor could not be linked."));
|
|
1033
1033
|
}
|
|
1034
1034
|
}
|
|
1035
1035
|
}, E = async (t) => {
|
|
1036
1036
|
C(null);
|
|
1037
1037
|
try {
|
|
1038
|
-
await
|
|
1038
|
+
await i(_({ variables: {
|
|
1039
1039
|
productId: e,
|
|
1040
1040
|
competitorId: t
|
|
1041
1041
|
} }));
|
|
1042
1042
|
} catch (e) {
|
|
1043
|
-
C(
|
|
1043
|
+
C(n(e, "The competitor could not be unlinked."));
|
|
1044
1044
|
}
|
|
1045
1045
|
};
|
|
1046
1046
|
return /* @__PURE__ */ S("div", {
|
|
1047
1047
|
className: "space-y-3",
|
|
1048
1048
|
"data-testid": "product-competitors",
|
|
1049
1049
|
children: [
|
|
1050
|
-
|
|
1050
|
+
r.length === 0 ? /* @__PURE__ */ x("p", {
|
|
1051
1051
|
className: "text-sm text-muted-foreground text-center py-4",
|
|
1052
1052
|
children: "No competitors linked to this product yet."
|
|
1053
1053
|
}) : /* @__PURE__ */ x("ul", {
|
|
1054
1054
|
className: "space-y-1",
|
|
1055
|
-
children:
|
|
1055
|
+
children: r.map((e) => /* @__PURE__ */ S("li", {
|
|
1056
1056
|
className: "flex items-center justify-between gap-2 border rounded-md p-2 text-sm",
|
|
1057
1057
|
children: [/* @__PURE__ */ S("button", {
|
|
1058
1058
|
type: "button",
|
|
1059
1059
|
className: "min-w-0 flex-1 text-left truncate hover:underline",
|
|
1060
|
-
onClick: () =>
|
|
1060
|
+
onClick: () => s(c("/products/competitor-detail-page", e.id)),
|
|
1061
1061
|
children: [e.name, e.website && /* @__PURE__ */ x("span", {
|
|
1062
1062
|
className: "ml-2 text-xs text-primary",
|
|
1063
1063
|
children: e.website
|
|
1064
1064
|
})]
|
|
1065
|
-
}), /* @__PURE__ */ x(
|
|
1065
|
+
}), /* @__PURE__ */ x(a, {
|
|
1066
1066
|
label: "",
|
|
1067
1067
|
ariaLabel: `Unlink ${e.name} from this product`,
|
|
1068
1068
|
testId: "product-competitor-unlink",
|
|
@@ -1085,7 +1085,7 @@ function _e({ productId: e, competitors: n }) {
|
|
|
1085
1085
|
id: "product-add-competitor",
|
|
1086
1086
|
value: d,
|
|
1087
1087
|
onChange: f,
|
|
1088
|
-
exclude:
|
|
1088
|
+
exclude: r.map((e) => e.id)
|
|
1089
1089
|
})
|
|
1090
1090
|
}), /* @__PURE__ */ S(w, {
|
|
1091
1091
|
size: "sm",
|
|
@@ -1095,7 +1095,7 @@ function _e({ productId: e, competitors: n }) {
|
|
|
1095
1095
|
children: [/* @__PURE__ */ x(m, { className: "mr-1 h-4 w-4" }), "Add"]
|
|
1096
1096
|
})]
|
|
1097
1097
|
}),
|
|
1098
|
-
b && /* @__PURE__ */ x(
|
|
1098
|
+
b && /* @__PURE__ */ x(o, { message: b })
|
|
1099
1099
|
]
|
|
1100
1100
|
});
|
|
1101
1101
|
}
|