@burdenoff/microfe-planmagnet 2026.1002.1 → 2026.1002.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/generated/wspace-operations.d.ts +1814 -401
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-types.d.ts +5167 -54
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +172 -160
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +95 -83
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/controls/Pickers.d.ts +7 -2
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
- package/dist/planmagnet/controls/Pickers.js +10 -9
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/index.d.ts +1 -1
- package/dist/planmagnet/index.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +4 -4
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +133 -131
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +5 -5
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +6 -6
- package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +105 -82
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js +174 -0
- package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js +350 -0
- package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.js +168 -0
- package/dist/planmagnet/pages/ProductsProductLinesPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +156 -154
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +1 -1
- package/dist/planmagnet/product/FeatureLinkPanels.d.ts +29 -0
- package/dist/planmagnet/product/FeatureLinkPanels.d.ts.map +1 -0
- package/dist/planmagnet/product/FeatureLinkPanels.js +373 -0
- package/dist/planmagnet/product/FeatureLinkPanels.js.map +1 -0
- package/dist/planmagnet/product/ProductControls.js +1 -1
- package/dist/planmagnet/product/ProductControls.js.map +1 -1
- package/dist/planmagnet/product/ProductFeatureControls.d.ts +39 -0
- package/dist/planmagnet/product/ProductFeatureControls.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductFeatureControls.js +315 -0
- package/dist/planmagnet/product/ProductFeatureControls.js.map +1 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts +4 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.js +192 -0
- package/dist/planmagnet/product/ProductFeatureLinkCard.js.map +1 -0
- package/dist/planmagnet/product/ProductLineControls.d.ts +52 -0
- package/dist/planmagnet/product/ProductLineControls.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductLineControls.js +417 -0
- package/dist/planmagnet/product/ProductLineControls.js.map +1 -0
- package/dist/planmagnet/product/ProductTeamsPanel.d.ts +4 -0
- package/dist/planmagnet/product/ProductTeamsPanel.d.ts.map +1 -0
- package/dist/planmagnet/product/ProductTeamsPanel.js +129 -0
- package/dist/planmagnet/product/ProductTeamsPanel.js.map +1 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts +4 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts.map +1 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.js +41 -0
- package/dist/planmagnet/product/WorkItemProductFeatureChip.js.map +1 -0
- package/dist/planmagnet/product/hierarchy.d.ts +127 -0
- package/dist/planmagnet/product/hierarchy.d.ts.map +1 -0
- package/dist/planmagnet/product/hierarchy.js +173 -0
- package/dist/planmagnet/product/hierarchy.js.map +1 -0
- package/dist/planmagnet/product/hierarchyOperations.d.ts +35 -0
- package/dist/planmagnet/product/hierarchyOperations.d.ts.map +1 -0
- package/dist/planmagnet/product/hierarchyOperations.js +440 -0
- package/dist/planmagnet/product/hierarchyOperations.js.map +1 -0
- package/dist/planmagnet/product/refusal.d.ts +14 -0
- package/dist/planmagnet/product/refusal.d.ts.map +1 -0
- package/dist/planmagnet/product/refusal.js +10 -0
- package/dist/planmagnet/product/refusal.js.map +1 -0
- package/dist/planmagnet/product/routes.d.ts +4 -0
- package/dist/planmagnet/product/routes.d.ts.map +1 -1
- package/dist/planmagnet/product/routes.js +2 -2
- package/dist/planmagnet/product/routes.js.map +1 -1
- package/dist/shared/utils/i18n.d.ts +3 -0
- package/dist/shared/utils/i18n.d.ts.map +1 -1
- package/dist/shared/utils/i18n.js +1 -1
- package/dist/shared/utils/i18n.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
import { gql as e } from "@apollo/client";
|
|
2
|
+
//#region src/planmagnet/product/hierarchyOperations.ts
|
|
3
|
+
var t = "\n id\n name\n description\n ownerId\n archivedAt\n createdAt\n updatedAt\n", n = "\n id\n productId\n name\n description\n status\n ownerId\n archivedAt\n createdAt\n updatedAt\n", r = e`
|
|
4
|
+
query ProductLinesPage($workspaceId: ID!, $filter: PlanmagnetProductLineFilter) {
|
|
5
|
+
planmagnetProductLines(workspaceId: $workspaceId, filter: $filter, pagination: { first: 100 }) {
|
|
6
|
+
items {
|
|
7
|
+
${t}
|
|
8
|
+
products {
|
|
9
|
+
id
|
|
10
|
+
name
|
|
11
|
+
archivedAt
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
pageInfo {
|
|
15
|
+
hasNextPage
|
|
16
|
+
}
|
|
17
|
+
totalCount
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
`, i = e`
|
|
21
|
+
query ProductLineOptions($workspaceId: ID!) {
|
|
22
|
+
planmagnetProductLines(
|
|
23
|
+
workspaceId: $workspaceId
|
|
24
|
+
filter: { isActive: true }
|
|
25
|
+
pagination: { first: 100 }
|
|
26
|
+
) {
|
|
27
|
+
items {
|
|
28
|
+
id
|
|
29
|
+
name
|
|
30
|
+
}
|
|
31
|
+
totalCount
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`, a = e`
|
|
35
|
+
query ProductLineAssignment($productId: ID!) {
|
|
36
|
+
planmagnetProduct(id: $productId) {
|
|
37
|
+
id
|
|
38
|
+
productLineId
|
|
39
|
+
productLine {
|
|
40
|
+
id
|
|
41
|
+
name
|
|
42
|
+
archivedAt
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`, o = e`
|
|
47
|
+
query ProductLineCandidateProducts($workspaceId: ID!) {
|
|
48
|
+
planmagnetProducts(workspaceId: $workspaceId, pagination: { first: 100 }) {
|
|
49
|
+
items {
|
|
50
|
+
id
|
|
51
|
+
name
|
|
52
|
+
archivedAt
|
|
53
|
+
productLine {
|
|
54
|
+
id
|
|
55
|
+
name
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
totalCount
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
`, s = e`
|
|
62
|
+
query ProductTeams($productId: ID!) {
|
|
63
|
+
planmagnetProduct(id: $productId) {
|
|
64
|
+
id
|
|
65
|
+
archivedAt
|
|
66
|
+
teams {
|
|
67
|
+
id
|
|
68
|
+
name
|
|
69
|
+
description
|
|
70
|
+
members {
|
|
71
|
+
id
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
`, c = e`
|
|
77
|
+
query ProductFeaturesList(
|
|
78
|
+
$workspaceId: ID!
|
|
79
|
+
$productId: ID!
|
|
80
|
+
$filter: PlanmagnetProductFeatureFilter
|
|
81
|
+
) {
|
|
82
|
+
planmagnetProductFeatures(
|
|
83
|
+
workspaceId: $workspaceId
|
|
84
|
+
productId: $productId
|
|
85
|
+
filter: $filter
|
|
86
|
+
pagination: { first: 100 }
|
|
87
|
+
) {
|
|
88
|
+
items {
|
|
89
|
+
${n}
|
|
90
|
+
epics {
|
|
91
|
+
id
|
|
92
|
+
}
|
|
93
|
+
featureRequests {
|
|
94
|
+
id
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
pageInfo {
|
|
98
|
+
hasNextPage
|
|
99
|
+
}
|
|
100
|
+
totalCount
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
`, l = e`
|
|
104
|
+
query ProductFeatureDetail($id: ID!) {
|
|
105
|
+
planmagnetProductFeature(id: $id) {
|
|
106
|
+
${n}
|
|
107
|
+
product {
|
|
108
|
+
id
|
|
109
|
+
name
|
|
110
|
+
archivedAt
|
|
111
|
+
productLine {
|
|
112
|
+
id
|
|
113
|
+
name
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
epics {
|
|
117
|
+
id
|
|
118
|
+
key
|
|
119
|
+
title
|
|
120
|
+
type
|
|
121
|
+
status
|
|
122
|
+
children {
|
|
123
|
+
id
|
|
124
|
+
key
|
|
125
|
+
title
|
|
126
|
+
type
|
|
127
|
+
status
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
featureRequests {
|
|
131
|
+
id
|
|
132
|
+
title
|
|
133
|
+
status
|
|
134
|
+
voteCount
|
|
135
|
+
productId
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
`, u = e`
|
|
140
|
+
query ProductFeatureEpicCandidates($workspaceId: ID!, $filter: PlanmagnetWorkItemFilter) {
|
|
141
|
+
planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {
|
|
142
|
+
items {
|
|
143
|
+
id
|
|
144
|
+
key
|
|
145
|
+
title
|
|
146
|
+
type
|
|
147
|
+
productFeature {
|
|
148
|
+
id
|
|
149
|
+
name
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
totalCount
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
`, d = e`
|
|
156
|
+
query ProductFeatureRequestCandidates(
|
|
157
|
+
$workspaceId: ID!
|
|
158
|
+
$sameProduct: PlanmagnetFeatureRequestFilter!
|
|
159
|
+
$anyProduct: PlanmagnetFeatureRequestFilter
|
|
160
|
+
) {
|
|
161
|
+
sameProduct: planmagnetFeatureRequests(
|
|
162
|
+
workspaceId: $workspaceId
|
|
163
|
+
filter: $sameProduct
|
|
164
|
+
pagination: { first: 50 }
|
|
165
|
+
) {
|
|
166
|
+
items {
|
|
167
|
+
id
|
|
168
|
+
title
|
|
169
|
+
status
|
|
170
|
+
productId
|
|
171
|
+
productFeature {
|
|
172
|
+
id
|
|
173
|
+
name
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
totalCount
|
|
177
|
+
}
|
|
178
|
+
anyProduct: planmagnetFeatureRequests(
|
|
179
|
+
workspaceId: $workspaceId
|
|
180
|
+
filter: $anyProduct
|
|
181
|
+
pagination: { first: 50 }
|
|
182
|
+
) {
|
|
183
|
+
items {
|
|
184
|
+
id
|
|
185
|
+
title
|
|
186
|
+
status
|
|
187
|
+
productId
|
|
188
|
+
productFeature {
|
|
189
|
+
id
|
|
190
|
+
name
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
totalCount
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
`, f = e`
|
|
197
|
+
query ProductHierarchy(
|
|
198
|
+
$workspaceId: ID!
|
|
199
|
+
$lineFilter: PlanmagnetProductLineFilter
|
|
200
|
+
$productFilter: PlanmagnetProductFilter
|
|
201
|
+
$includeArchivedFeatures: Boolean
|
|
202
|
+
) {
|
|
203
|
+
planmagnetProductLines(
|
|
204
|
+
workspaceId: $workspaceId
|
|
205
|
+
filter: $lineFilter
|
|
206
|
+
pagination: { first: 100 }
|
|
207
|
+
) {
|
|
208
|
+
items {
|
|
209
|
+
id
|
|
210
|
+
name
|
|
211
|
+
archivedAt
|
|
212
|
+
}
|
|
213
|
+
totalCount
|
|
214
|
+
}
|
|
215
|
+
planmagnetProducts(
|
|
216
|
+
workspaceId: $workspaceId
|
|
217
|
+
filter: $productFilter
|
|
218
|
+
pagination: { first: 100 }
|
|
219
|
+
) {
|
|
220
|
+
items {
|
|
221
|
+
id
|
|
222
|
+
name
|
|
223
|
+
lifecycleStage
|
|
224
|
+
archivedAt
|
|
225
|
+
productLine {
|
|
226
|
+
id
|
|
227
|
+
name
|
|
228
|
+
archivedAt
|
|
229
|
+
}
|
|
230
|
+
features(includeArchived: $includeArchivedFeatures) {
|
|
231
|
+
id
|
|
232
|
+
name
|
|
233
|
+
status
|
|
234
|
+
archivedAt
|
|
235
|
+
epics {
|
|
236
|
+
id
|
|
237
|
+
key
|
|
238
|
+
title
|
|
239
|
+
type
|
|
240
|
+
status
|
|
241
|
+
children {
|
|
242
|
+
id
|
|
243
|
+
key
|
|
244
|
+
title
|
|
245
|
+
type
|
|
246
|
+
status
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
totalCount
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
`, p = e`
|
|
255
|
+
query FeatureRequestProductFeature($id: ID!) {
|
|
256
|
+
planmagnetFeatureRequest(id: $id) {
|
|
257
|
+
id
|
|
258
|
+
productId
|
|
259
|
+
productFeature {
|
|
260
|
+
id
|
|
261
|
+
name
|
|
262
|
+
status
|
|
263
|
+
archivedAt
|
|
264
|
+
product {
|
|
265
|
+
id
|
|
266
|
+
name
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
`, m = e`
|
|
272
|
+
query FeatureRequestFeatureOptions($workspaceId: ID!, $productId: ID!) {
|
|
273
|
+
planmagnetProductFeatures(
|
|
274
|
+
workspaceId: $workspaceId
|
|
275
|
+
productId: $productId
|
|
276
|
+
filter: { isActive: true }
|
|
277
|
+
pagination: { first: 100 }
|
|
278
|
+
) {
|
|
279
|
+
items {
|
|
280
|
+
id
|
|
281
|
+
name
|
|
282
|
+
status
|
|
283
|
+
}
|
|
284
|
+
totalCount
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
`, h = e`
|
|
288
|
+
query WorkItemProductFeature($id: ID!) {
|
|
289
|
+
planmagnetWorkItem(id: $id) {
|
|
290
|
+
id
|
|
291
|
+
type
|
|
292
|
+
productFeature {
|
|
293
|
+
id
|
|
294
|
+
name
|
|
295
|
+
}
|
|
296
|
+
parent {
|
|
297
|
+
id
|
|
298
|
+
key
|
|
299
|
+
type
|
|
300
|
+
productFeature {
|
|
301
|
+
id
|
|
302
|
+
name
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
`, g = e`
|
|
308
|
+
mutation CreateProductLine($input: PlanmagnetCreateProductLineInput!) {
|
|
309
|
+
planmagnetCreateProductLine(input: $input) {
|
|
310
|
+
${t}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
`, _ = e`
|
|
314
|
+
mutation UpdateProductLine($id: ID!, $input: PlanmagnetUpdateProductLineInput!) {
|
|
315
|
+
planmagnetUpdateProductLine(id: $id, input: $input) {
|
|
316
|
+
${t}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
`, v = e`
|
|
320
|
+
mutation ArchiveProductLine($id: ID!) {
|
|
321
|
+
planmagnetArchiveProductLine(id: $id) {
|
|
322
|
+
id
|
|
323
|
+
archivedAt
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
`, y = e`
|
|
327
|
+
mutation UnarchiveProductLine($id: ID!) {
|
|
328
|
+
planmagnetUnarchiveProductLine(id: $id) {
|
|
329
|
+
id
|
|
330
|
+
archivedAt
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
`, b = e`
|
|
334
|
+
mutation DeleteProductLine($id: ID!) {
|
|
335
|
+
planmagnetDeleteProductLine(id: $id)
|
|
336
|
+
}
|
|
337
|
+
`, x = e`
|
|
338
|
+
mutation AssignProductLine($productId: ID!, $productLineId: ID) {
|
|
339
|
+
planmagnetAssignProductLine(productId: $productId, productLineId: $productLineId) {
|
|
340
|
+
id
|
|
341
|
+
productLineId
|
|
342
|
+
productLine {
|
|
343
|
+
id
|
|
344
|
+
name
|
|
345
|
+
archivedAt
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
`, S = e`
|
|
350
|
+
mutation LinkProductTeam($productId: ID!, $teamId: ID!) {
|
|
351
|
+
planmagnetLinkProductTeam(productId: $productId, teamId: $teamId) {
|
|
352
|
+
id
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
`, C = e`
|
|
356
|
+
mutation UnlinkProductTeam($productId: ID!, $teamId: ID!) {
|
|
357
|
+
planmagnetUnlinkProductTeam(productId: $productId, teamId: $teamId)
|
|
358
|
+
}
|
|
359
|
+
`, w = e`
|
|
360
|
+
mutation CreateProductFeature($input: PlanmagnetCreateProductFeatureInput!) {
|
|
361
|
+
planmagnetCreateProductFeature(input: $input) {
|
|
362
|
+
${n}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
`, T = e`
|
|
366
|
+
mutation UpdateProductFeature($id: ID!, $input: PlanmagnetUpdateProductFeatureInput!) {
|
|
367
|
+
planmagnetUpdateProductFeature(id: $id, input: $input) {
|
|
368
|
+
${n}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
`, E = e`
|
|
372
|
+
mutation ArchiveProductFeature($id: ID!) {
|
|
373
|
+
planmagnetArchiveProductFeature(id: $id) {
|
|
374
|
+
id
|
|
375
|
+
archivedAt
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
`, D = e`
|
|
379
|
+
mutation UnarchiveProductFeature($id: ID!) {
|
|
380
|
+
planmagnetUnarchiveProductFeature(id: $id) {
|
|
381
|
+
id
|
|
382
|
+
archivedAt
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
`, O = e`
|
|
386
|
+
mutation DeleteProductFeature($id: ID!) {
|
|
387
|
+
planmagnetDeleteProductFeature(id: $id)
|
|
388
|
+
}
|
|
389
|
+
`, k = e`
|
|
390
|
+
mutation LinkFeatureRequestToProductFeature($featureRequestId: ID!, $productFeatureId: ID!) {
|
|
391
|
+
planmagnetLinkFeatureRequestToProductFeature(
|
|
392
|
+
featureRequestId: $featureRequestId
|
|
393
|
+
productFeatureId: $productFeatureId
|
|
394
|
+
) {
|
|
395
|
+
id
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
`, A = e`
|
|
399
|
+
mutation UnlinkFeatureRequestFromProductFeature($featureRequestId: ID!, $productFeatureId: ID!) {
|
|
400
|
+
planmagnetUnlinkFeatureRequestFromProductFeature(
|
|
401
|
+
featureRequestId: $featureRequestId
|
|
402
|
+
productFeatureId: $productFeatureId
|
|
403
|
+
) {
|
|
404
|
+
id
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
`, j = e`
|
|
408
|
+
mutation LinkEpicToProductFeature($productFeatureId: ID!, $workItemId: ID!) {
|
|
409
|
+
planmagnetLinkEpicToProductFeature(
|
|
410
|
+
productFeatureId: $productFeatureId
|
|
411
|
+
workItemId: $workItemId
|
|
412
|
+
) {
|
|
413
|
+
id
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
`, M = e`
|
|
417
|
+
mutation UnlinkEpicFromProductFeature($productFeatureId: ID!, $workItemId: ID!) {
|
|
418
|
+
planmagnetUnlinkEpicFromProductFeature(
|
|
419
|
+
productFeatureId: $productFeatureId
|
|
420
|
+
workItemId: $workItemId
|
|
421
|
+
)
|
|
422
|
+
}
|
|
423
|
+
`, N = [
|
|
424
|
+
"ProductLinesPage",
|
|
425
|
+
"ProductLineOptions",
|
|
426
|
+
"ProductLineAssignment",
|
|
427
|
+
"ProductLineCandidateProducts",
|
|
428
|
+
"ProductHierarchy"
|
|
429
|
+
], P = [
|
|
430
|
+
"ProductFeaturesList",
|
|
431
|
+
"ProductFeatureDetail",
|
|
432
|
+
"ProductHierarchy",
|
|
433
|
+
"FeatureRequestProductFeature",
|
|
434
|
+
"FeatureRequestFeatureOptions",
|
|
435
|
+
"WorkItemProductFeature"
|
|
436
|
+
];
|
|
437
|
+
//#endregion
|
|
438
|
+
export { E as ARCHIVE_PRODUCT_FEATURE, v as ARCHIVE_PRODUCT_LINE, x as ASSIGN_PRODUCT_LINE, w as CREATE_PRODUCT_FEATURE, g as CREATE_PRODUCT_LINE, O as DELETE_PRODUCT_FEATURE, b as DELETE_PRODUCT_LINE, m as FEATURE_REQUEST_FEATURE_OPTIONS, p as FEATURE_REQUEST_PRODUCT_FEATURE, j as LINK_EPIC_TO_PRODUCT_FEATURE, k as LINK_FEATURE_REQUEST_TO_PRODUCT_FEATURE, S as LINK_PRODUCT_TEAM, c as PRODUCT_FEATURES_LIST, l as PRODUCT_FEATURE_DETAIL, u as PRODUCT_FEATURE_EPIC_CANDIDATES, P as PRODUCT_FEATURE_QUERIES, d as PRODUCT_FEATURE_REQUEST_CANDIDATES, f as PRODUCT_HIERARCHY, r as PRODUCT_LINES_PAGE, a as PRODUCT_LINE_ASSIGNMENT, o as PRODUCT_LINE_CANDIDATE_PRODUCTS, i as PRODUCT_LINE_OPTIONS, N as PRODUCT_LINE_QUERIES, s as PRODUCT_TEAMS, D as UNARCHIVE_PRODUCT_FEATURE, y as UNARCHIVE_PRODUCT_LINE, M as UNLINK_EPIC_FROM_PRODUCT_FEATURE, A as UNLINK_FEATURE_REQUEST_FROM_PRODUCT_FEATURE, C as UNLINK_PRODUCT_TEAM, T as UPDATE_PRODUCT_FEATURE, _ as UPDATE_PRODUCT_LINE, h as WORK_ITEM_PRODUCT_FEATURE };
|
|
439
|
+
|
|
440
|
+
//# sourceMappingURL=hierarchyOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchyOperations.js","names":[],"sources":["../../../src/planmagnet/product/hierarchyOperations.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\n/**\n * PRM-01 GraphQL documents — product lines, product↔team links, product features and their epic / feature\n * request links, and the hierarchy read. Every document here has a twin in\n * src/operations/wspace/planmagnet/{queries,mutations,fragments}/productHierarchy.graphql, which `bun run codegen`\n * validates against the planmagnet schema and CI's live-supergraph drift job validates against what production\n * serves. tests/productHierarchyOperations.test.ts fails when the two copies differ, so what the pages send is what\n * those gates checked.\n *\n * Each page section that reads a PRM-01 field has a query of its own rather than a field added to an existing\n * page query: a field the gateway does not serve fails the WHOLE query, so a shared query would blank the product\n * page instead of one card.\n */\n\nconst PRODUCT_LINE_FIELDS = `\n id\n name\n description\n ownerId\n archivedAt\n createdAt\n updatedAt\n`;\n\nconst PRODUCT_FEATURE_FIELDS = `\n id\n productId\n name\n description\n status\n ownerId\n archivedAt\n createdAt\n updatedAt\n`;\n\n// ─── Queries ────────────────────────────────────────────────────────────────\n\nexport const PRODUCT_LINES_PAGE = gql`\n query ProductLinesPage($workspaceId: ID!, $filter: PlanmagnetProductLineFilter) {\n planmagnetProductLines(workspaceId: $workspaceId, filter: $filter, pagination: { first: 100 }) {\n items {\n ${PRODUCT_LINE_FIELDS}\n products {\n id\n name\n archivedAt\n }\n }\n pageInfo {\n hasNextPage\n }\n totalCount\n }\n }\n`;\n\nexport const PRODUCT_LINE_OPTIONS = gql`\n query ProductLineOptions($workspaceId: ID!) {\n planmagnetProductLines(\n workspaceId: $workspaceId\n filter: { isActive: true }\n pagination: { first: 100 }\n ) {\n items {\n id\n name\n }\n totalCount\n }\n }\n`;\n\nexport const PRODUCT_LINE_ASSIGNMENT = gql`\n query ProductLineAssignment($productId: ID!) {\n planmagnetProduct(id: $productId) {\n id\n productLineId\n productLine {\n id\n name\n archivedAt\n }\n }\n }\n`;\n\nexport const PRODUCT_LINE_CANDIDATE_PRODUCTS = gql`\n query ProductLineCandidateProducts($workspaceId: ID!) {\n planmagnetProducts(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n archivedAt\n productLine {\n id\n name\n }\n }\n totalCount\n }\n }\n`;\n\nexport const PRODUCT_TEAMS = gql`\n query ProductTeams($productId: ID!) {\n planmagnetProduct(id: $productId) {\n id\n archivedAt\n teams {\n id\n name\n description\n members {\n id\n }\n }\n }\n }\n`;\n\nexport const PRODUCT_FEATURES_LIST = gql`\n query ProductFeaturesList(\n $workspaceId: ID!\n $productId: ID!\n $filter: PlanmagnetProductFeatureFilter\n ) {\n planmagnetProductFeatures(\n workspaceId: $workspaceId\n productId: $productId\n filter: $filter\n pagination: { first: 100 }\n ) {\n items {\n ${PRODUCT_FEATURE_FIELDS}\n epics {\n id\n }\n featureRequests {\n id\n }\n }\n pageInfo {\n hasNextPage\n }\n totalCount\n }\n }\n`;\n\nexport const PRODUCT_FEATURE_DETAIL = gql`\n query ProductFeatureDetail($id: ID!) {\n planmagnetProductFeature(id: $id) {\n ${PRODUCT_FEATURE_FIELDS}\n product {\n id\n name\n archivedAt\n productLine {\n id\n name\n }\n }\n epics {\n id\n key\n title\n type\n status\n children {\n id\n key\n title\n type\n status\n }\n }\n featureRequests {\n id\n title\n status\n voteCount\n productId\n }\n }\n }\n`;\n\nexport const PRODUCT_FEATURE_EPIC_CANDIDATES = gql`\n query ProductFeatureEpicCandidates($workspaceId: ID!, $filter: PlanmagnetWorkItemFilter) {\n planmagnetWorkItems(workspaceId: $workspaceId, filter: $filter, pagination: { first: 20 }) {\n items {\n id\n key\n title\n type\n productFeature {\n id\n name\n }\n }\n totalCount\n }\n }\n`;\n\nexport const PRODUCT_FEATURE_REQUEST_CANDIDATES = gql`\n query ProductFeatureRequestCandidates(\n $workspaceId: ID!\n $sameProduct: PlanmagnetFeatureRequestFilter!\n $anyProduct: PlanmagnetFeatureRequestFilter\n ) {\n sameProduct: planmagnetFeatureRequests(\n workspaceId: $workspaceId\n filter: $sameProduct\n pagination: { first: 50 }\n ) {\n items {\n id\n title\n status\n productId\n productFeature {\n id\n name\n }\n }\n totalCount\n }\n anyProduct: planmagnetFeatureRequests(\n workspaceId: $workspaceId\n filter: $anyProduct\n pagination: { first: 50 }\n ) {\n items {\n id\n title\n status\n productId\n productFeature {\n id\n name\n }\n }\n totalCount\n }\n }\n`;\n\nexport const PRODUCT_HIERARCHY = gql`\n query ProductHierarchy(\n $workspaceId: ID!\n $lineFilter: PlanmagnetProductLineFilter\n $productFilter: PlanmagnetProductFilter\n $includeArchivedFeatures: Boolean\n ) {\n planmagnetProductLines(\n workspaceId: $workspaceId\n filter: $lineFilter\n pagination: { first: 100 }\n ) {\n items {\n id\n name\n archivedAt\n }\n totalCount\n }\n planmagnetProducts(\n workspaceId: $workspaceId\n filter: $productFilter\n pagination: { first: 100 }\n ) {\n items {\n id\n name\n lifecycleStage\n archivedAt\n productLine {\n id\n name\n archivedAt\n }\n features(includeArchived: $includeArchivedFeatures) {\n id\n name\n status\n archivedAt\n epics {\n id\n key\n title\n type\n status\n children {\n id\n key\n title\n type\n status\n }\n }\n }\n }\n totalCount\n }\n }\n`;\n\nexport const FEATURE_REQUEST_PRODUCT_FEATURE = gql`\n query FeatureRequestProductFeature($id: ID!) {\n planmagnetFeatureRequest(id: $id) {\n id\n productId\n productFeature {\n id\n name\n status\n archivedAt\n product {\n id\n name\n }\n }\n }\n }\n`;\n\nexport const FEATURE_REQUEST_FEATURE_OPTIONS = gql`\n query FeatureRequestFeatureOptions($workspaceId: ID!, $productId: ID!) {\n planmagnetProductFeatures(\n workspaceId: $workspaceId\n productId: $productId\n filter: { isActive: true }\n pagination: { first: 100 }\n ) {\n items {\n id\n name\n status\n }\n totalCount\n }\n }\n`;\n\nexport const WORK_ITEM_PRODUCT_FEATURE = gql`\n query WorkItemProductFeature($id: ID!) {\n planmagnetWorkItem(id: $id) {\n id\n type\n productFeature {\n id\n name\n }\n parent {\n id\n key\n type\n productFeature {\n id\n name\n }\n }\n }\n }\n`;\n\n// ─── Mutations ──────────────────────────────────────────────────────────────\n\nexport const CREATE_PRODUCT_LINE = gql`\n mutation CreateProductLine($input: PlanmagnetCreateProductLineInput!) {\n planmagnetCreateProductLine(input: $input) {\n ${PRODUCT_LINE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PRODUCT_LINE = gql`\n mutation UpdateProductLine($id: ID!, $input: PlanmagnetUpdateProductLineInput!) {\n planmagnetUpdateProductLine(id: $id, input: $input) {\n ${PRODUCT_LINE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_PRODUCT_LINE = gql`\n mutation ArchiveProductLine($id: ID!) {\n planmagnetArchiveProductLine(id: $id) {\n id\n archivedAt\n }\n }\n`;\n\nexport const UNARCHIVE_PRODUCT_LINE = gql`\n mutation UnarchiveProductLine($id: ID!) {\n planmagnetUnarchiveProductLine(id: $id) {\n id\n archivedAt\n }\n }\n`;\n\nexport const DELETE_PRODUCT_LINE = gql`\n mutation DeleteProductLine($id: ID!) {\n planmagnetDeleteProductLine(id: $id)\n }\n`;\n\nexport const ASSIGN_PRODUCT_LINE = gql`\n mutation AssignProductLine($productId: ID!, $productLineId: ID) {\n planmagnetAssignProductLine(productId: $productId, productLineId: $productLineId) {\n id\n productLineId\n productLine {\n id\n name\n archivedAt\n }\n }\n }\n`;\n\nexport const LINK_PRODUCT_TEAM = gql`\n mutation LinkProductTeam($productId: ID!, $teamId: ID!) {\n planmagnetLinkProductTeam(productId: $productId, teamId: $teamId) {\n id\n }\n }\n`;\n\nexport const UNLINK_PRODUCT_TEAM = gql`\n mutation UnlinkProductTeam($productId: ID!, $teamId: ID!) {\n planmagnetUnlinkProductTeam(productId: $productId, teamId: $teamId)\n }\n`;\n\nexport const CREATE_PRODUCT_FEATURE = gql`\n mutation CreateProductFeature($input: PlanmagnetCreateProductFeatureInput!) {\n planmagnetCreateProductFeature(input: $input) {\n ${PRODUCT_FEATURE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_PRODUCT_FEATURE = gql`\n mutation UpdateProductFeature($id: ID!, $input: PlanmagnetUpdateProductFeatureInput!) {\n planmagnetUpdateProductFeature(id: $id, input: $input) {\n ${PRODUCT_FEATURE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_PRODUCT_FEATURE = gql`\n mutation ArchiveProductFeature($id: ID!) {\n planmagnetArchiveProductFeature(id: $id) {\n id\n archivedAt\n }\n }\n`;\n\nexport const UNARCHIVE_PRODUCT_FEATURE = gql`\n mutation UnarchiveProductFeature($id: ID!) {\n planmagnetUnarchiveProductFeature(id: $id) {\n id\n archivedAt\n }\n }\n`;\n\nexport const DELETE_PRODUCT_FEATURE = gql`\n mutation DeleteProductFeature($id: ID!) {\n planmagnetDeleteProductFeature(id: $id)\n }\n`;\n\nexport const LINK_FEATURE_REQUEST_TO_PRODUCT_FEATURE = gql`\n mutation LinkFeatureRequestToProductFeature($featureRequestId: ID!, $productFeatureId: ID!) {\n planmagnetLinkFeatureRequestToProductFeature(\n featureRequestId: $featureRequestId\n productFeatureId: $productFeatureId\n ) {\n id\n }\n }\n`;\n\nexport const UNLINK_FEATURE_REQUEST_FROM_PRODUCT_FEATURE = gql`\n mutation UnlinkFeatureRequestFromProductFeature($featureRequestId: ID!, $productFeatureId: ID!) {\n planmagnetUnlinkFeatureRequestFromProductFeature(\n featureRequestId: $featureRequestId\n productFeatureId: $productFeatureId\n ) {\n id\n }\n }\n`;\n\nexport const LINK_EPIC_TO_PRODUCT_FEATURE = gql`\n mutation LinkEpicToProductFeature($productFeatureId: ID!, $workItemId: ID!) {\n planmagnetLinkEpicToProductFeature(\n productFeatureId: $productFeatureId\n workItemId: $workItemId\n ) {\n id\n }\n }\n`;\n\nexport const UNLINK_EPIC_FROM_PRODUCT_FEATURE = gql`\n mutation UnlinkEpicFromProductFeature($productFeatureId: ID!, $workItemId: ID!) {\n planmagnetUnlinkEpicFromProductFeature(\n productFeatureId: $productFeatureId\n workItemId: $workItemId\n )\n }\n`;\n\n// ─── Refetch groups ─────────────────────────────────────────────────────────\n\n/** Every query that shows a product line, or which line a product is in. */\nexport const PRODUCT_LINE_QUERIES = [\n 'ProductLinesPage',\n 'ProductLineOptions',\n 'ProductLineAssignment',\n 'ProductLineCandidateProducts',\n 'ProductHierarchy',\n];\n\n/** Every query that shows a product feature, its epics or its requests. */\nexport const PRODUCT_FEATURE_QUERIES = [\n 'ProductFeaturesList',\n 'ProductFeatureDetail',\n 'ProductHierarchy',\n 'FeatureRequestProductFeature',\n 'FeatureRequestFeatureOptions',\n 'WorkItemProductFeature',\n];\n"],"mappings":";;AAeA,IAAM,IAAsB,sFAUtB,IAAyB,6GAclB,IAAqB,CAAG;;;;UAI3B,EAAoB;;;;;;;;;;;;;GAejB,IAAuB,CAAG;;;;;;;;;;;;;;GAgB1B,IAA0B,CAAG;;;;;;;;;;;;GAc7B,IAAkC,CAAG;;;;;;;;;;;;;;;GAiBrC,IAAgB,CAAG;;;;;;;;;;;;;;;GAiBnB,IAAwB,CAAG;;;;;;;;;;;;;UAa9B,EAAuB;;;;;;;;;;;;;;GAgBpB,IAAyB,CAAG;;;QAGjC,EAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmClB,IAAkC,CAAG;;;;;;;;;;;;;;;;GAkBrC,IAAqC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CxC,IAAoB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DvB,IAAkC,CAAG;;;;;;;;;;;;;;;;;GAmBrC,IAAkC,CAAG;;;;;;;;;;;;;;;;GAkBrC,IAA4B,CAAG;;;;;;;;;;;;;;;;;;;;GAwB/B,IAAsB,CAAG;;;QAG9B,EAAoB;;;GAKf,IAAsB,CAAG;;;QAG9B,EAAoB;;;GAKf,IAAuB,CAAG;;;;;;;GAS1B,IAAyB,CAAG;;;;;;;GAS5B,IAAsB,CAAG;;;;GAMzB,IAAsB,CAAG;;;;;;;;;;;;GAczB,IAAoB,CAAG;;;;;;GAQvB,IAAsB,CAAG;;;;GAMzB,IAAyB,CAAG;;;QAGjC,EAAuB;;;GAKlB,IAAyB,CAAG;;;QAGjC,EAAuB;;;GAKlB,IAA0B,CAAG;;;;;;;GAS7B,IAA4B,CAAG;;;;;;;GAS/B,IAAyB,CAAG;;;;GAM5B,IAA0C,CAAG;;;;;;;;;GAW7C,IAA8C,CAAG;;;;;;;;;GAWjD,IAA+B,CAAG;;;;;;;;;GAWlC,IAAmC,CAAG;;;;;;;GAYtC,IAAuB;CAClC;CACA;CACA;CACA;CACA;CACD,EAGY,IAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A refused PRM-01 write, in words. The gateway's role refusal (FORBIDDEN) reads as the plain `forbidden` sentence
|
|
3
|
+
* the caller passes; anything else shows the service's own reason verbatim — a BAD_USER_INPUT such as "That feature
|
|
4
|
+
* request belongs to another product…" is the actionable message, never paraphrased. Every PRM-01 operation sits on
|
|
5
|
+
* the `planmagnet-product` RBAC resource, and, like the rest of the product pages, the controls stay visible: the
|
|
6
|
+
* gateway decides, and the refusal says why.
|
|
7
|
+
*
|
|
8
|
+
* Verbatim means without `mutationErrorMessage`'s `field: ` prefix. The service tags several of these refusals with
|
|
9
|
+
* `extensions.field` (featureRequestId, workItemId, name, status) and the public gateway forwards it, but every PRM-01
|
|
10
|
+
* reason is already a whole sentence that says what was wrong, so the prefix would only put a raw input name in front
|
|
11
|
+
* of it ("featureRequestId: That feature request belongs to another product…").
|
|
12
|
+
*/
|
|
13
|
+
export declare function refusalMessage(error: unknown, fallback: string, forbidden: string): string;
|
|
14
|
+
//# sourceMappingURL=refusal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/product/refusal.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAI1F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CombinedGraphQLErrors as e } from "../../node_modules/@apollo/client/errors/CombinedGraphQLErrors.js";
|
|
2
|
+
import { isForbidden as t, mutationErrorMessage as n } from "../utils/graphqlErrors.js";
|
|
3
|
+
//#region src/planmagnet/product/refusal.ts
|
|
4
|
+
function r(r, i, a) {
|
|
5
|
+
return t(r) ? a : e.is(r) ? r.errors[0]?.message || i : n(r, i);
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { r as refusalMessage };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=refusal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.js","names":[],"sources":["../../../src/planmagnet/product/refusal.ts"],"sourcesContent":["import { CombinedGraphQLErrors } from '@apollo/client/errors';\nimport { isForbidden, mutationErrorMessage } from '../utils/graphqlErrors';\n\n/**\n * A refused PRM-01 write, in words. The gateway's role refusal (FORBIDDEN) reads as the plain `forbidden` sentence\n * the caller passes; anything else shows the service's own reason verbatim — a BAD_USER_INPUT such as \"That feature\n * request belongs to another product…\" is the actionable message, never paraphrased. Every PRM-01 operation sits on\n * the `planmagnet-product` RBAC resource, and, like the rest of the product pages, the controls stay visible: the\n * gateway decides, and the refusal says why.\n *\n * Verbatim means without `mutationErrorMessage`'s `field: ` prefix. The service tags several of these refusals with\n * `extensions.field` (featureRequestId, workItemId, name, status) and the public gateway forwards it, but every PRM-01\n * reason is already a whole sentence that says what was wrong, so the prefix would only put a raw input name in front\n * of it (\"featureRequestId: That feature request belongs to another product…\").\n */\nexport function refusalMessage(error: unknown, fallback: string, forbidden: string): string {\n if (isForbidden(error)) return forbidden;\n if (CombinedGraphQLErrors.is(error)) return error.errors[0]?.message || fallback;\n return mutationErrorMessage(error, fallback);\n}\n"],"mappings":";;;AAeA,SAAgB,EAAe,GAAgB,GAAkB,GAA2B;AAG1F,QAFI,EAAY,EAAM,GAAS,IAC3B,EAAsB,GAAG,EAAM,GAAS,EAAM,OAAO,IAAI,WAAW,IACjE,EAAqB,GAAO,EAAS"}
|
|
@@ -7,4 +7,8 @@
|
|
|
7
7
|
* so the export here is additionally consumed there.
|
|
8
8
|
*/
|
|
9
9
|
export declare const PRIORITIZATION_PATH = "products/prioritization-page";
|
|
10
|
+
/** Product lines page (PRM-01) — the top of the product hierarchy. Same relative form as PRIORITIZATION_PATH. */
|
|
11
|
+
export declare const PRODUCT_LINES_PATH = "products/product-lines-page";
|
|
12
|
+
/** Product hierarchy page (PRM-01): Product line > Product > Feature > Epic > Story. */
|
|
13
|
+
export declare const PRODUCT_HIERARCHY_PATH = "products/product-hierarchy-page";
|
|
10
14
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/product/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/product/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAElE,iHAAiH;AACjH,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAEhE,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,oCAAoC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/planmagnet/product/routes.ts
|
|
2
|
-
var e = "products/prioritization-page";
|
|
2
|
+
var e = "products/prioritization-page", t = "products/product-lines-page", n = "products/product-hierarchy-page";
|
|
3
3
|
//#endregion
|
|
4
|
-
export { e as PRIORITIZATION_PATH };
|
|
4
|
+
export { e as PRIORITIZATION_PATH, n as PRODUCT_HIERARCHY_PATH, t as PRODUCT_LINES_PATH };
|
|
5
5
|
|
|
6
6
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","names":[],"sources":["../../../src/planmagnet/product/routes.ts"],"sourcesContent":["/**\n * Prioritization page route target (PRM-27), exported so the host shell can build a `NavItem` against the real,\n * routed path instead of a hand-typed string that can drift from `PlanMagnetRoutes.tsx` — same reasoning as\n * `integrations/routes.ts`. Relative, no leading slash — the same form `PlanMagnetRoot.tsx` passes through\n * `joinPath(basePath, ...)` for every other nav entry in this package, and the same form `path=\"…\"` carries in\n * `PlanMagnetRoutes.tsx`. This MFE also registers its own \"Products\" nav tree internally (PlanMagnetRoot.tsx),\n * so the export here is additionally consumed there.\n */\nexport const PRIORITIZATION_PATH = 'products/prioritization-page';\n"],"mappings":";AAQA,IAAa,IAAsB"}
|
|
1
|
+
{"version":3,"file":"routes.js","names":[],"sources":["../../../src/planmagnet/product/routes.ts"],"sourcesContent":["/**\n * Prioritization page route target (PRM-27), exported so the host shell can build a `NavItem` against the real,\n * routed path instead of a hand-typed string that can drift from `PlanMagnetRoutes.tsx` — same reasoning as\n * `integrations/routes.ts`. Relative, no leading slash — the same form `PlanMagnetRoot.tsx` passes through\n * `joinPath(basePath, ...)` for every other nav entry in this package, and the same form `path=\"…\"` carries in\n * `PlanMagnetRoutes.tsx`. This MFE also registers its own \"Products\" nav tree internally (PlanMagnetRoot.tsx),\n * so the export here is additionally consumed there.\n */\nexport const PRIORITIZATION_PATH = 'products/prioritization-page';\n\n/** Product lines page (PRM-01) — the top of the product hierarchy. Same relative form as PRIORITIZATION_PATH. */\nexport const PRODUCT_LINES_PATH = 'products/product-lines-page';\n\n/** Product hierarchy page (PRM-01): Product line > Product > Feature > Epic > Story. */\nexport const PRODUCT_HIERARCHY_PATH = 'products/product-hierarchy-page';\n"],"mappings":";AAQA,IAAa,IAAsB,gCAGtB,IAAqB,+BAGrB,IAAyB"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Interpolate placeholders of the form {{key}} in a translation string.
|
|
3
|
+
*
|
|
4
|
+
* The value is inserted through a replacer function, never as a replacement string: user text such as a product
|
|
5
|
+
* named "R&D $&" would otherwise have its `$&` / `$1` / `$$` read as replacement patterns and be garbled.
|
|
3
6
|
*/
|
|
4
7
|
export declare function interpolate(template: string, params?: Record<string, string | number>): string;
|
|
5
8
|
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/i18n.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/i18n.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAM9F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/shared/utils/i18n.ts
|
|
2
2
|
function e(e, t) {
|
|
3
|
-
return t ? Object.entries(t).reduce((e, [t, n]) => e.replace(RegExp(`\\{\\{${t}\\}\\}`, "g"), String(n)), e) : e;
|
|
3
|
+
return t ? Object.entries(t).reduce((e, [t, n]) => e.replace(RegExp(`\\{\\{${t}\\}\\}`, "g"), () => String(n)), e) : e;
|
|
4
4
|
}
|
|
5
5
|
//#endregion
|
|
6
6
|
export { e as interpolate };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","names":[],"sources":["../../../src/shared/utils/i18n.ts"],"sourcesContent":["/**\n * Interpolate placeholders of the form {{key}} in a translation string.\n */\nexport function interpolate(template: string, params?: Record<string, string | number>): string {\n if (!params) return template;\n return Object.entries(params).reduce(\n (str, [key, value]) => str.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), String(value)),\n template\n );\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"i18n.js","names":[],"sources":["../../../src/shared/utils/i18n.ts"],"sourcesContent":["/**\n * Interpolate placeholders of the form {{key}} in a translation string.\n *\n * The value is inserted through a replacer function, never as a replacement string: user text such as a product\n * named \"R&D $&\" would otherwise have its `$&` / `$1` / `$$` read as replacement patterns and be garbled.\n */\nexport function interpolate(template: string, params?: Record<string, string | number>): string {\n if (!params) return template;\n return Object.entries(params).reduce(\n (str, [key, value]) => str.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), () => String(value)),\n template\n );\n}\n"],"mappings":";AAMA,SAAgB,EAAY,GAAkB,GAAkD;AAE9F,QADK,IACE,OAAO,QAAQ,EAAO,CAAC,QAC3B,GAAK,CAAC,GAAK,OAAW,EAAI,QAAY,OAAO,SAAS,EAAI,SAAS,IAAI,QAAQ,OAAO,EAAM,CAAC,EAC9F,EACD,GAJmB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/microfe-planmagnet",
|
|
3
|
-
"version": "2026.1002.
|
|
3
|
+
"version": "2026.1002.2",
|
|
4
4
|
"description": "Burdenoff PlanMagnet Microfrontend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
"dev": "vite",
|
|
25
25
|
"build": "tsc && MFE_DTS=1 bash scripts/build-limits.sh --gate vite build",
|
|
26
26
|
"lint": "eslint .",
|
|
27
|
-
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
27
|
+
"format": "prettier --write \"src/**/*.{ts,tsx}\" \"tests/**/*.ts\"",
|
|
28
28
|
"type:check": "bash scripts/build-limits.sh tsc --noEmit",
|
|
29
|
-
"test": "bun test tests",
|
|
30
29
|
"sanity": "bash scripts/build-limits.sh --gate bash -c 'bun run codegen && bun run validate:schema && bun run check:nav && bun run check:mutations && bun run check:refetch && bun run lint && bun run format && bun run test && bun run type:check && bun run build && bun run build-storybook'",
|
|
31
30
|
"validate:schema": "graphql-schema-drift",
|
|
32
31
|
"check:nav": "bun scripts/check-nav-targets.ts",
|
|
33
32
|
"check:mutations": "bun scripts/check-mutation-errors.ts",
|
|
34
33
|
"check:refetch": "bun scripts/check-refetch-blanking.ts",
|
|
34
|
+
"test": "bun test ./tests",
|
|
35
35
|
"schema:pull": "graphql-codegen --project schema-wspace && graphql-codegen --project schema-global && bun run schema:roots",
|
|
36
36
|
"schema:roots": "bun scripts/gen-gateway-roots.mjs",
|
|
37
37
|
"codegen": "graphql-codegen --project wspace && graphql-codegen --project global",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"switch:local": "bun scripts/deps-mode.ts local",
|
|
45
45
|
"switch:check": "bun scripts/deps-mode.ts check",
|
|
46
46
|
"prepare": "lefthook install || true",
|
|
47
|
-
"format:check": "prettier --check \"src/**/*.{ts,tsx}\""
|
|
47
|
+
"format:check": "prettier --check \"src/**/*.{ts,tsx}\" \"tests/**/*.ts\""
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@apollo/client": ">=4.0.11 <4.2.0",
|