@burdenoff/microfe-planmagnet 2026.927.3 → 2026.927.4
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/controls/FeatureControls.d.ts +26 -0
- package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/FeatureControls.js +318 -0
- package/dist/planmagnet/controls/FeatureControls.js.map +1 -0
- package/dist/planmagnet/controls/MilestoneControls.d.ts +17 -0
- package/dist/planmagnet/controls/MilestoneControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/MilestoneControls.js +200 -0
- package/dist/planmagnet/controls/MilestoneControls.js.map +1 -0
- package/dist/planmagnet/controls/ObjectiveControls.d.ts +31 -0
- package/dist/planmagnet/controls/ObjectiveControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/ObjectiveControls.js +296 -0
- package/dist/planmagnet/controls/ObjectiveControls.js.map +1 -0
- package/dist/planmagnet/controls/Pickers.d.ts +26 -0
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -0
- package/dist/planmagnet/controls/Pickers.js +171 -0
- package/dist/planmagnet/controls/Pickers.js.map +1 -0
- package/dist/planmagnet/controls/ProjectControls.js +7 -7
- package/dist/planmagnet/controls/ReleaseControls.d.ts +14 -0
- package/dist/planmagnet/controls/ReleaseControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/ReleaseControls.js +108 -0
- package/dist/planmagnet/controls/ReleaseControls.js.map +1 -0
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +186 -152
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js +63 -56
- package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +229 -214
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js +142 -114
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsEditReleasePagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsEditReleasePagePage.js +134 -105
- package/dist/planmagnet/pages/ProductsEditReleasePagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +102 -108
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +119 -94
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +107 -106
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js +2 -0
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +6 -6
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +55 -63
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +4 -4
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +123 -128
- 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 +139 -107
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +173 -126
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTasksPagePage.js +1 -0
- package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +23 -23
- package/package.json +1 -1
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
2
|
+
import { throwOnError as n } from "../utils/mutationResult.js";
|
|
3
|
+
import { MarkdownEditor as r } from "../../components/MarkdownEditor.js";
|
|
4
|
+
import { RELEASE_STATUSES as i } from "../controls/ReleaseControls.js";
|
|
5
|
+
import { useMemo as a, useState as o } from "react";
|
|
6
|
+
import { ArrowLeft as s, Loader2 as c, Save as l } from "lucide-react";
|
|
7
|
+
import { useParams as u } from "react-router";
|
|
8
|
+
import { gql as d } from "@apollo/client";
|
|
9
|
+
import { useMutation as f, useQuery as p } from "@apollo/client/react";
|
|
10
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
11
|
+
import { Button as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b, Input as x } from "@burdenoff/fe-libs/ui";
|
|
10
12
|
//#region src/planmagnet/pages/ProductsEditReleasePagePage.tsx
|
|
11
|
-
var
|
|
13
|
+
var S = d`
|
|
12
14
|
query GetReleaseForEdit($id: ID!) {
|
|
13
15
|
planmagnetRelease(id: $id) {
|
|
14
16
|
id
|
|
@@ -23,7 +25,7 @@ var b = l`
|
|
|
23
25
|
tags
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
|
-
`,
|
|
28
|
+
`, C = d`
|
|
27
29
|
mutation UpdateRelease($id: ID!, $input: PlanmagnetUpdateReleaseInput!) {
|
|
28
30
|
planmagnetUpdateRelease(id: $id, input: $input) {
|
|
29
31
|
id
|
|
@@ -38,167 +40,194 @@ var b = l`
|
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
`;
|
|
41
|
-
function
|
|
42
|
-
let { workspaceId:
|
|
43
|
-
variables: { id:
|
|
44
|
-
skip: !
|
|
45
|
-
}), [
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}), [
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
43
|
+
function w() {
|
|
44
|
+
let { workspaceId: d } = e(), w = t(), T = u().id ?? "", { data: E, loading: D, error: O } = p(S, {
|
|
45
|
+
variables: { id: T },
|
|
46
|
+
skip: !T
|
|
47
|
+
}), [k, { loading: A }] = f(C, {
|
|
48
|
+
refetchQueries: [
|
|
49
|
+
"ListReleases",
|
|
50
|
+
"GetReleaseForEdit",
|
|
51
|
+
"GetRelease",
|
|
52
|
+
"ReleaseReadiness"
|
|
53
|
+
],
|
|
54
|
+
awaitRefetchQueries: !0
|
|
55
|
+
}), [j, M] = o(null), [N, P] = o(!1), F = E?.planmagnetRelease, I = a(() => ({
|
|
56
|
+
version: F?.version ?? "",
|
|
57
|
+
name: F?.name ?? "",
|
|
58
|
+
description: F?.description ?? "",
|
|
59
|
+
status: F?.status ?? "DRAFT",
|
|
60
|
+
plannedDate: F?.plannedDate ? new Date(F.plannedDate).toISOString().split("T")[0] : "",
|
|
61
|
+
releaseNotes: F?.releaseNotes ?? "",
|
|
62
|
+
tags: F?.tags?.join(", ") ?? ""
|
|
63
|
+
}), [F]), [L, R] = o({}), z = {
|
|
64
|
+
...I,
|
|
65
|
+
...L
|
|
66
|
+
}, B = (e) => R(e), V = i.includes(z.status) ? i : [z.status, ...i];
|
|
67
|
+
return D && !E ? /* @__PURE__ */ m("div", {
|
|
58
68
|
className: "flex items-center justify-center p-12",
|
|
59
|
-
children: /* @__PURE__ */
|
|
60
|
-
}) :
|
|
69
|
+
children: /* @__PURE__ */ m(c, { className: "h-8 w-8 animate-spin text-muted-foreground" })
|
|
70
|
+
}) : O ? /* @__PURE__ */ h("div", {
|
|
61
71
|
className: "p-6 text-destructive",
|
|
62
|
-
children: ["Failed to load release: ",
|
|
63
|
-
}) :
|
|
72
|
+
children: ["Failed to load release: ", O.message]
|
|
73
|
+
}) : F ? /* @__PURE__ */ h("div", {
|
|
64
74
|
className: "space-y-6 p-6 max-w-4xl",
|
|
65
75
|
children: [
|
|
66
|
-
/* @__PURE__ */
|
|
76
|
+
/* @__PURE__ */ h("div", {
|
|
67
77
|
className: "flex items-center justify-between",
|
|
68
|
-
children: [/* @__PURE__ */
|
|
78
|
+
children: [/* @__PURE__ */ h("div", {
|
|
69
79
|
className: "flex items-center gap-3",
|
|
70
|
-
children: [/* @__PURE__ */
|
|
80
|
+
children: [/* @__PURE__ */ m(g, {
|
|
71
81
|
variant: "ghost",
|
|
72
82
|
size: "sm",
|
|
73
|
-
onClick: () =>
|
|
74
|
-
children: /* @__PURE__ */
|
|
75
|
-
}), /* @__PURE__ */
|
|
83
|
+
onClick: () => w("/products/releases-page"),
|
|
84
|
+
children: /* @__PURE__ */ m(s, { className: "h-4 w-4" })
|
|
85
|
+
}), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
|
|
76
86
|
className: "text-2xl font-semibold",
|
|
77
87
|
children: "Edit Release"
|
|
78
|
-
}), /* @__PURE__ */
|
|
88
|
+
}), /* @__PURE__ */ h("p", {
|
|
79
89
|
className: "text-sm text-muted-foreground",
|
|
80
90
|
children: [
|
|
81
|
-
|
|
91
|
+
F.version,
|
|
82
92
|
" - ",
|
|
83
|
-
|
|
93
|
+
F.name
|
|
84
94
|
]
|
|
85
95
|
})] })]
|
|
86
|
-
}), /* @__PURE__ */
|
|
96
|
+
}), /* @__PURE__ */ h(g, {
|
|
87
97
|
size: "sm",
|
|
88
|
-
onClick: () => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
onClick: async () => {
|
|
99
|
+
if (!z.version.trim() || !z.name.trim()) {
|
|
100
|
+
M("Version and name are required.");
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
let e = (e) => e.split(",").map((e) => e.trim()).filter(Boolean), t = {
|
|
104
|
+
version: z.version.trim(),
|
|
105
|
+
name: z.name.trim(),
|
|
106
|
+
description: z.description.trim() || null,
|
|
107
|
+
status: z.status,
|
|
108
|
+
plannedDate: z.plannedDate || null,
|
|
109
|
+
releaseNotes: z.releaseNotes.trim() ? z.releaseNotes : null,
|
|
110
|
+
tags: e(z.tags)
|
|
111
|
+
}, r = {
|
|
112
|
+
version: I.version,
|
|
113
|
+
name: I.name,
|
|
114
|
+
description: I.description.trim() || null,
|
|
115
|
+
status: I.status,
|
|
116
|
+
plannedDate: I.plannedDate || null,
|
|
117
|
+
releaseNotes: I.releaseNotes.trim() ? I.releaseNotes : null,
|
|
118
|
+
tags: e(I.tags)
|
|
119
|
+
}, i = Object.fromEntries(Object.entries(t).filter(([e, t]) => JSON.stringify(t) !== JSON.stringify(r[e])));
|
|
120
|
+
if (M(null), P(!1), Object.keys(i).length === 0) {
|
|
121
|
+
P(!0);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
await n(k({ variables: {
|
|
126
|
+
id: T,
|
|
127
|
+
input: i
|
|
128
|
+
} })), P(!0);
|
|
129
|
+
} catch (e) {
|
|
130
|
+
M(e instanceof Error ? e.message : "The release could not be saved.");
|
|
131
|
+
}
|
|
101
132
|
},
|
|
102
|
-
disabled:
|
|
103
|
-
children: [
|
|
133
|
+
disabled: A,
|
|
134
|
+
children: [A ? /* @__PURE__ */ m(c, { className: "mr-1 h-4 w-4 animate-spin" }) : /* @__PURE__ */ m(l, { className: "mr-1 h-4 w-4" }), "Save Changes"]
|
|
104
135
|
})]
|
|
105
136
|
}),
|
|
106
|
-
|
|
137
|
+
N && /* @__PURE__ */ m("div", {
|
|
138
|
+
role: "status",
|
|
139
|
+
className: "p-3 bg-muted text-status-success-text rounded-md text-sm",
|
|
140
|
+
children: "Changes saved."
|
|
141
|
+
}),
|
|
142
|
+
j && /* @__PURE__ */ m("div", {
|
|
143
|
+
role: "alert",
|
|
107
144
|
className: "p-3 rounded-md bg-destructive/10 text-destructive text-sm",
|
|
108
|
-
children:
|
|
145
|
+
children: j
|
|
109
146
|
}),
|
|
110
|
-
/* @__PURE__ */
|
|
147
|
+
/* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, { children: /* @__PURE__ */ m(b, { children: "Release Details" }) }), /* @__PURE__ */ h(v, {
|
|
111
148
|
className: "space-y-4",
|
|
112
149
|
children: [
|
|
113
|
-
/* @__PURE__ */
|
|
150
|
+
/* @__PURE__ */ h("div", {
|
|
114
151
|
className: "grid grid-cols-2 gap-4",
|
|
115
|
-
children: [/* @__PURE__ */
|
|
152
|
+
children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
|
|
116
153
|
className: "text-sm font-medium",
|
|
117
154
|
children: "Version"
|
|
118
|
-
}), /* @__PURE__ */
|
|
119
|
-
value:
|
|
120
|
-
onChange: (e) =>
|
|
121
|
-
...
|
|
155
|
+
}), /* @__PURE__ */ m(x, {
|
|
156
|
+
value: z.version,
|
|
157
|
+
onChange: (e) => B({
|
|
158
|
+
...z,
|
|
122
159
|
version: e.target.value
|
|
123
160
|
}),
|
|
124
161
|
className: "mt-1",
|
|
125
162
|
placeholder: "v1.0.0"
|
|
126
|
-
})] }), /* @__PURE__ */
|
|
163
|
+
})] }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
|
|
127
164
|
className: "text-sm font-medium",
|
|
128
165
|
children: "Name"
|
|
129
|
-
}), /* @__PURE__ */
|
|
130
|
-
value:
|
|
131
|
-
onChange: (e) =>
|
|
132
|
-
...
|
|
166
|
+
}), /* @__PURE__ */ m(x, {
|
|
167
|
+
value: z.name,
|
|
168
|
+
onChange: (e) => B({
|
|
169
|
+
...z,
|
|
133
170
|
name: e.target.value
|
|
134
171
|
}),
|
|
135
172
|
className: "mt-1"
|
|
136
173
|
})] })]
|
|
137
174
|
}),
|
|
138
|
-
/* @__PURE__ */
|
|
175
|
+
/* @__PURE__ */ m(r, {
|
|
139
176
|
label: "Description",
|
|
140
|
-
value:
|
|
141
|
-
onChange: (e) =>
|
|
142
|
-
...
|
|
177
|
+
value: z.description,
|
|
178
|
+
onChange: (e) => B({
|
|
179
|
+
...z,
|
|
143
180
|
description: e
|
|
144
181
|
}),
|
|
145
182
|
minHeight: 80
|
|
146
183
|
}),
|
|
147
|
-
/* @__PURE__ */
|
|
184
|
+
/* @__PURE__ */ h("div", {
|
|
148
185
|
className: "grid grid-cols-2 gap-4",
|
|
149
|
-
children: [/* @__PURE__ */
|
|
186
|
+
children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
|
|
150
187
|
className: "text-sm font-medium",
|
|
151
188
|
children: "Status"
|
|
152
|
-
}), /* @__PURE__ */
|
|
189
|
+
}), /* @__PURE__ */ m("select", {
|
|
153
190
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
|
|
154
|
-
value:
|
|
155
|
-
onChange: (e) =>
|
|
156
|
-
...
|
|
191
|
+
value: z.status,
|
|
192
|
+
onChange: (e) => B({
|
|
193
|
+
...z,
|
|
157
194
|
status: e.target.value
|
|
158
195
|
}),
|
|
159
|
-
children:
|
|
160
|
-
"DRAFT",
|
|
161
|
-
"PLANNING",
|
|
162
|
-
"IN_PROGRESS",
|
|
163
|
-
"READY",
|
|
164
|
-
"RELEASED",
|
|
165
|
-
"CANCELLED",
|
|
166
|
-
"ROLLED_BACK"
|
|
167
|
-
].map((e) => /* @__PURE__ */ f("option", {
|
|
196
|
+
children: V.map((e) => /* @__PURE__ */ m("option", {
|
|
168
197
|
value: e,
|
|
169
198
|
className: "capitalize",
|
|
170
199
|
children: e.toLowerCase().replace("_", " ")
|
|
171
200
|
}, e))
|
|
172
|
-
})] }), /* @__PURE__ */
|
|
201
|
+
})] }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
|
|
173
202
|
className: "text-sm font-medium",
|
|
174
203
|
children: "Planned Date"
|
|
175
|
-
}), /* @__PURE__ */
|
|
204
|
+
}), /* @__PURE__ */ m(x, {
|
|
176
205
|
type: "date",
|
|
177
|
-
value:
|
|
178
|
-
onChange: (e) =>
|
|
179
|
-
...
|
|
206
|
+
value: z.plannedDate,
|
|
207
|
+
onChange: (e) => B({
|
|
208
|
+
...z,
|
|
180
209
|
plannedDate: e.target.value
|
|
181
210
|
}),
|
|
182
211
|
className: "mt-1"
|
|
183
212
|
})] })]
|
|
184
213
|
}),
|
|
185
|
-
/* @__PURE__ */
|
|
214
|
+
/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
|
|
186
215
|
className: "text-sm font-medium",
|
|
187
216
|
children: "Tags (comma-separated)"
|
|
188
|
-
}), /* @__PURE__ */
|
|
189
|
-
value:
|
|
190
|
-
onChange: (e) =>
|
|
191
|
-
...
|
|
217
|
+
}), /* @__PURE__ */ m(x, {
|
|
218
|
+
value: z.tags,
|
|
219
|
+
onChange: (e) => B({
|
|
220
|
+
...z,
|
|
192
221
|
tags: e.target.value
|
|
193
222
|
}),
|
|
194
223
|
className: "mt-1",
|
|
195
224
|
placeholder: "e.g. critical, security, performance"
|
|
196
225
|
})] }),
|
|
197
|
-
/* @__PURE__ */
|
|
226
|
+
/* @__PURE__ */ m(r, {
|
|
198
227
|
label: "Release Notes",
|
|
199
|
-
value:
|
|
200
|
-
onChange: (e) =>
|
|
201
|
-
...
|
|
228
|
+
value: z.releaseNotes,
|
|
229
|
+
onChange: (e) => B({
|
|
230
|
+
...z,
|
|
202
231
|
releaseNotes: e
|
|
203
232
|
}),
|
|
204
233
|
placeholder: "Describe what changed in this release...",
|
|
@@ -207,12 +236,12 @@ function S() {
|
|
|
207
236
|
]
|
|
208
237
|
})] })
|
|
209
238
|
]
|
|
210
|
-
}) : /* @__PURE__ */
|
|
239
|
+
}) : /* @__PURE__ */ m("div", {
|
|
211
240
|
className: "p-6 text-muted-foreground",
|
|
212
241
|
children: "Release not found."
|
|
213
242
|
});
|
|
214
243
|
}
|
|
215
244
|
//#endregion
|
|
216
|
-
export {
|
|
245
|
+
export { w as ProductsEditReleasePagePage };
|
|
217
246
|
|
|
218
247
|
//# sourceMappingURL=ProductsEditReleasePagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsEditReleasePagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsEditReleasePagePage.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, Loader2 } from 'lucide-react';\nimport { MarkdownEditor } from '#src/components/MarkdownEditor';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\n\nconst GET_RELEASE = gql`\n query GetReleaseForEdit($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n }\n }\n`;\n\nconst UPDATE_RELEASE = gql`\n mutation UpdateRelease($id: ID!, $input: PlanmagnetUpdateReleaseInput!) {\n planmagnetUpdateRelease(id: $id, input: $input) {\n id\n name\n description\n version\n status\n plannedDate\n releaseNotes\n tags\n updatedAt\n }\n }\n`;\n\nexport function ProductsEditReleasePagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\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_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\n });\n\n const [updateRelease, { loading: saving, error: saveError }] = useMutation(UPDATE_RELEASE, {\n refetchQueries: ['ListReleases', 'GetReleaseForEdit'],\n });\n\n const release = data?.planmagnetRelease;\n\n const defaultForm = useMemo(\n () => ({\n version: release?.version ?? '',\n name: release?.name ?? '',\n description: release?.description ?? '',\n status: release?.status ?? 'DRAFT',\n plannedDate: release?.plannedDate\n ? new Date(release.plannedDate).toISOString().split('T')[0]\n : '',\n releaseNotes: release?.releaseNotes ?? '',\n tags: release?.tags?.join(', ') ?? '',\n }),\n [release]\n );\n\n const [formOverrides, setFormOverrides] = useState<Record<string, string>>({});\n const form = { ...defaultForm, ...formOverrides };\n const setForm = (val: Record<string, string>) => setFormOverrides(val);\n\n const statuses = [\n 'DRAFT',\n 'PLANNING',\n 'IN_PROGRESS',\n 'READY',\n 'RELEASED',\n 'CANCELLED',\n 'ROLLED_BACK',\n ] as const;\n\n const handleSave = () => {\n updateRelease({\n variables: {\n id: releaseId,\n input: {\n version: form.version || undefined,\n name: form.name || undefined,\n description: form.description || undefined,\n status: form.status || undefined,\n plannedDate: form.plannedDate || undefined,\n releaseNotes: form.releaseNotes || undefined,\n tags: form.tags\n ? form.tags\n .split(',')\n .map((t: string) => t.trim())\n .filter(Boolean)\n : undefined,\n },\n },\n });\n };\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\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 <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release 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\" onClick={() => navigate('/products/releases-page')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Edit Release</h1>\n <p className=\"text-sm text-muted-foreground\">\n {release.version} - {release.name}\n </p>\n </div>\n </div>\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n {saving ? (\n <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"mr-1 h-4 w-4\" />\n )}\n Save Changes\n </Button>\n </div>\n\n {saveError && (\n <div className=\"p-3 rounded-md bg-destructive/10 text-destructive text-sm\">\n Failed to save: {saveError.message}\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Release Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Version</label>\n <Input\n value={form.version}\n onChange={(e) => setForm({ ...form, version: e.target.value })}\n className=\"mt-1\"\n placeholder=\"v1.0.0\"\n />\n </div>\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>\n <MarkdownEditor\n label=\"Description\"\n value={form.description}\n onChange={(value) => setForm({ ...form, description: value })}\n minHeight={80}\n />\n <div className=\"grid grid-cols-2 gap-4\">\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} className=\"capitalize\">\n {s.toLowerCase().replace('_', ' ')}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Planned Date</label>\n <Input\n type=\"date\"\n value={form.plannedDate}\n onChange={(e) => setForm({ ...form, plannedDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Tags (comma-separated)</label>\n <Input\n value={form.tags}\n onChange={(e) => setForm({ ...form, tags: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. critical, security, performance\"\n />\n </div>\n <MarkdownEditor\n label=\"Release Notes\"\n value={form.releaseNotes}\n onChange={(value) => setForm({ ...form, releaseNotes: value })}\n placeholder=\"Describe what changed in this release...\"\n minHeight={120}\n />\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProductsEditReleasePagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsEditReleasePagePage.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, Loader2 } from 'lucide-react';\nimport { MarkdownEditor } from '#src/components/MarkdownEditor';\nimport { throwOnError } from '../utils/mutationResult';\nimport { RELEASE_STATUSES } from '../controls/ReleaseControls';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\n\nconst GET_RELEASE = gql`\n query GetReleaseForEdit($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n }\n }\n`;\n\nconst UPDATE_RELEASE = gql`\n mutation UpdateRelease($id: ID!, $input: PlanmagnetUpdateReleaseInput!) {\n planmagnetUpdateRelease(id: $id, input: $input) {\n id\n name\n description\n version\n status\n plannedDate\n releaseNotes\n tags\n updatedAt\n }\n }\n`;\n\nexport function ProductsEditReleasePagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\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_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\n });\n\n const [updateRelease, { loading: saving }] = useMutation(UPDATE_RELEASE, {\n refetchQueries: ['ListReleases', 'GetReleaseForEdit', 'GetRelease', 'ReleaseReadiness'],\n awaitRefetchQueries: true,\n });\n const [saveError, setSaveError] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n\n const release = data?.planmagnetRelease;\n\n const defaultForm = useMemo(\n () => ({\n version: release?.version ?? '',\n name: release?.name ?? '',\n description: release?.description ?? '',\n status: release?.status ?? 'DRAFT',\n plannedDate: release?.plannedDate\n ? new Date(release.plannedDate).toISOString().split('T')[0]\n : '',\n releaseNotes: release?.releaseNotes ?? '',\n tags: release?.tags?.join(', ') ?? '',\n }),\n [release]\n );\n\n const [formOverrides, setFormOverrides] = useState<Record<string, string>>({});\n const form = { ...defaultForm, ...formOverrides };\n const setForm = (val: Record<string, string>) => setFormOverrides(val);\n\n // Every ReleaseStatus: STAGING was missing, so a staging release showed as \"draft\" (BOFF-7985).\n const statuses = (RELEASE_STATUSES as readonly string[]).includes(form.status)\n ? RELEASE_STATUSES\n : [form.status, ...RELEASE_STATUSES];\n\n // BOFF-7979: only changed fields are sent, an emptied optional field is cleared (it used to be omitted, so the\n // old value stayed), and success is confirmed.\n const handleSave = async () => {\n if (!form.version.trim() || !form.name.trim()) {\n setSaveError('Version and name are required.');\n return;\n }\n const tagList = (v: string) =>\n v\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n const next: Record<string, unknown> = {\n version: form.version.trim(),\n name: form.name.trim(),\n description: form.description.trim() || null,\n status: form.status,\n plannedDate: form.plannedDate || null,\n releaseNotes: form.releaseNotes.trim() ? form.releaseNotes : null,\n tags: tagList(form.tags),\n };\n const before: Record<string, unknown> = {\n version: defaultForm.version,\n name: defaultForm.name,\n description: defaultForm.description.trim() || null,\n status: defaultForm.status,\n plannedDate: defaultForm.plannedDate || null,\n releaseNotes: defaultForm.releaseNotes.trim() ? defaultForm.releaseNotes : null,\n tags: tagList(defaultForm.tags),\n };\n const input = Object.fromEntries(\n Object.entries(next).filter(([k, v]) => JSON.stringify(v) !== JSON.stringify(before[k]))\n );\n setSaveError(null);\n setSaved(false);\n if (Object.keys(input).length === 0) {\n setSaved(true);\n return;\n }\n try {\n await throwOnError(updateRelease({ variables: { id: releaseId, input } }));\n setSaved(true);\n } catch (e) {\n setSaveError(e instanceof Error ? e.message : 'The release could not be saved.');\n }\n };\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\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 <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release 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\" onClick={() => navigate('/products/releases-page')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Edit Release</h1>\n <p className=\"text-sm text-muted-foreground\">\n {release.version} - {release.name}\n </p>\n </div>\n </div>\n <Button size=\"sm\" onClick={handleSave} disabled={saving}>\n {saving ? (\n <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"mr-1 h-4 w-4\" />\n )}\n Save Changes\n </Button>\n </div>\n\n {saved && (\n <div role=\"status\" className=\"p-3 bg-muted text-status-success-text rounded-md text-sm\">\n Changes saved.\n </div>\n )}\n {saveError && (\n <div role=\"alert\" className=\"p-3 rounded-md bg-destructive/10 text-destructive text-sm\">\n {saveError}\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Release Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Version</label>\n <Input\n value={form.version}\n onChange={(e) => setForm({ ...form, version: e.target.value })}\n className=\"mt-1\"\n placeholder=\"v1.0.0\"\n />\n </div>\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>\n <MarkdownEditor\n label=\"Description\"\n value={form.description}\n onChange={(value) => setForm({ ...form, description: value })}\n minHeight={80}\n />\n <div className=\"grid grid-cols-2 gap-4\">\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} className=\"capitalize\">\n {s.toLowerCase().replace('_', ' ')}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Planned Date</label>\n <Input\n type=\"date\"\n value={form.plannedDate}\n onChange={(e) => setForm({ ...form, plannedDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div>\n <label className=\"text-sm font-medium\">Tags (comma-separated)</label>\n <Input\n value={form.tags}\n onChange={(e) => setForm({ ...form, tags: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. critical, security, performance\"\n />\n </div>\n <MarkdownEditor\n label=\"Release Notes\"\n value={form.releaseNotes}\n onChange={(value) => setForm({ ...form, releaseNotes: value })}\n placeholder=\"Describe what changed in this release...\"\n minHeight={120}\n />\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductsFeatureDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsFeatureDetailPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProductsFeatureDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsFeatureDetailPagePage.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,6BAA6B,4CA6M5C"}
|