@burdenoff/microfe-planmagnet 2026.927.4 → 2026.927.6
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/global-types.d.ts +9 -1
- package/dist/generated/global-types.d.ts.map +1 -1
- package/dist/generated/wspace-operations.d.ts +0 -12
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +14 -10
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +1 -1
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +149 -127
- package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +1 -1
- package/dist/planmagnet/board/ProjectBoard.d.ts +2 -0
- package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
- package/dist/planmagnet/board/ProjectBoard.js +492 -225
- package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
- package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/FeatureControls.js +142 -139
- package/dist/planmagnet/controls/FeatureControls.js.map +1 -1
- package/dist/planmagnet/controls/FeatureTriage.d.ts +21 -0
- package/dist/planmagnet/controls/FeatureTriage.d.ts.map +1 -0
- package/dist/planmagnet/controls/FeatureTriage.js +398 -0
- package/dist/planmagnet/controls/FeatureTriage.js.map +1 -0
- package/dist/planmagnet/controls/MilestoneControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/MilestoneControls.js +76 -73
- package/dist/planmagnet/controls/MilestoneControls.js.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.js +47 -44
- package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
- package/dist/planmagnet/controls/ReleaseControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/ReleaseControls.js +47 -44
- package/dist/planmagnet/controls/ReleaseControls.js.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.js +68 -65
- package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
- package/dist/planmagnet/hooks/useCounts.d.ts +39 -0
- package/dist/planmagnet/hooks/useCounts.d.ts.map +1 -0
- package/dist/planmagnet/hooks/useCounts.js +209 -0
- package/dist/planmagnet/hooks/useCounts.js.map +1 -0
- package/dist/planmagnet/import/exportColumns.d.ts +52 -0
- package/dist/planmagnet/import/exportColumns.d.ts.map +1 -0
- package/dist/planmagnet/import/exportColumns.js +81 -0
- package/dist/planmagnet/import/exportColumns.js.map +1 -0
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +255 -242
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +199 -160
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +147 -144
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js +2 -7
- package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +173 -173
- 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 +120 -117
- package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +97 -117
- 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 +168 -103
- 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 +117 -103
- package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +4 -8
- package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsProductsPagePage.js +85 -90
- package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +12 -2
- 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 -2
- package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +48 -71
- package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +17 -13
- package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +1 -1
- package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +6 -6
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +11 -8
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +4 -4
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +152 -139
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +75 -74
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts +7 -0
- package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +39 -201
- package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +118 -99
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksImportPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TasksImportPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TasksImportPagePage.js +309 -0
- package/dist/planmagnet/pages/TasksImportPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTasksPagePage.js +110 -104
- package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamTeamPagePage.js +99 -177
- package/dist/planmagnet/pages/TeamTeamPagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +8 -4
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +1 -1
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.js +10 -4
- package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +151 -138
- package/dist/planmagnet/roadmaps/RoadmapControls.js.map +1 -1
- package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
- package/dist/planmagnet/sprints/SprintControls.js +32 -30
- package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
- package/dist/planmagnet/utils/mutationResult.d.ts +10 -0
- package/dist/planmagnet/utils/mutationResult.d.ts.map +1 -1
- package/dist/planmagnet/utils/mutationResult.js +2 -1
- package/dist/planmagnet/utils/mutationResult.js.map +1 -1
- package/dist/planmagnet/utils/rowNavigation.d.ts +2 -0
- package/dist/planmagnet/utils/rowNavigation.d.ts.map +1 -1
- package/dist/planmagnet/utils/rowNavigation.js +9 -8
- package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
|
|
2
|
+
import { throwOnError as t } from "../utils/mutationResult.js";
|
|
3
|
+
import { ProjectSelect as n } from "../controls/Pickers.js";
|
|
4
|
+
import { ErrorLine as r } from "../controls/ConfirmButton.js";
|
|
5
|
+
import { IMPORT_FIELDS as i, exportColumns as a, formatOf as o } from "../import/exportColumns.js";
|
|
6
|
+
import { useState as s } from "react";
|
|
7
|
+
import { ArrowLeft as c, ExternalLink as l, FileUp as u, Loader2 as d } from "lucide-react";
|
|
8
|
+
import { gql as f } from "@apollo/client";
|
|
9
|
+
import { useMutation 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 } from "@burdenoff/fe-libs/ui";
|
|
12
|
+
//#region src/planmagnet/pages/TasksImportPagePage.tsx
|
|
13
|
+
var x = f`
|
|
14
|
+
mutation ImportLinearIssues($input: PlanmagnetImportExternalIssuesInput!) {
|
|
15
|
+
planmagnetImportExternalIssues(input: $input) {
|
|
16
|
+
dryRun
|
|
17
|
+
imported
|
|
18
|
+
skipped
|
|
19
|
+
failed
|
|
20
|
+
errors
|
|
21
|
+
notCarriedOver
|
|
22
|
+
issues {
|
|
23
|
+
externalId
|
|
24
|
+
title
|
|
25
|
+
externalUrl
|
|
26
|
+
outcome
|
|
27
|
+
workItemId
|
|
28
|
+
notes
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
`, S = 1e7, C = 200, w = {
|
|
33
|
+
IMPORTED: "Imported",
|
|
34
|
+
ALREADY_IMPORTED: "Already imported",
|
|
35
|
+
WOULD_IMPORT: "Will be imported",
|
|
36
|
+
FAILED: "Failed"
|
|
37
|
+
};
|
|
38
|
+
function T() {
|
|
39
|
+
let f = e(), [T, E] = s(""), [D, O] = s(null), [k, A] = s([]), [j, M] = s({}), [N, P] = s(null), [F, I] = s(null), [L, R] = s(null), [z, B] = s(null), [V, H] = p(x, { refetchQueries: [
|
|
40
|
+
"GetWorkItems",
|
|
41
|
+
"ProjectBoard",
|
|
42
|
+
"CountsProjects"
|
|
43
|
+
] }), U = () => {
|
|
44
|
+
R(null), B(null), I(null);
|
|
45
|
+
}, W = async (e) => {
|
|
46
|
+
if (U(), O(null), A([]), M({}), P(null), !e) return;
|
|
47
|
+
let t = o(e.name);
|
|
48
|
+
if (!t) return P("Choose a Linear export: a .csv or .json file.");
|
|
49
|
+
if (e.size > S) return P("The file is larger than 10 MB. Split the export and import the parts.");
|
|
50
|
+
let n = await e.text(), r = a(n, t);
|
|
51
|
+
if ("error" in r) return P(r.error);
|
|
52
|
+
O({
|
|
53
|
+
name: e.name,
|
|
54
|
+
text: n,
|
|
55
|
+
format: t
|
|
56
|
+
}), A(r.columns);
|
|
57
|
+
}, G = async (e) => {
|
|
58
|
+
if (!D || !T) return;
|
|
59
|
+
I(null);
|
|
60
|
+
let n = Object.fromEntries(Object.entries(j).filter(([, e]) => !!e));
|
|
61
|
+
try {
|
|
62
|
+
let r = (await t(V({ variables: { input: {
|
|
63
|
+
projectId: T,
|
|
64
|
+
provider: "LINEAR",
|
|
65
|
+
format: D.format,
|
|
66
|
+
data: D.text,
|
|
67
|
+
dryRun: e,
|
|
68
|
+
...Object.keys(n).length > 0 && { fieldMapping: n }
|
|
69
|
+
} } }))).data?.planmagnetImportExternalIssues ?? null;
|
|
70
|
+
e ? R(r) : (B(r), R(null));
|
|
71
|
+
} catch (e) {
|
|
72
|
+
I(e instanceof Error ? e.message : "The export could not be read.");
|
|
73
|
+
}
|
|
74
|
+
}, K = (z ?? L)?.issues ?? [], q = L?.issues.filter((e) => e.outcome === "WOULD_IMPORT").length ?? 0, J = "text-sm font-medium";
|
|
75
|
+
return /* @__PURE__ */ h("div", {
|
|
76
|
+
className: "space-y-6 p-6",
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ h("div", {
|
|
79
|
+
className: "flex items-start gap-3",
|
|
80
|
+
children: [/* @__PURE__ */ m(g, {
|
|
81
|
+
variant: "ghost",
|
|
82
|
+
size: "icon",
|
|
83
|
+
"aria-label": "Back to the Task Board",
|
|
84
|
+
onClick: () => f("/tasks/tasks-page"),
|
|
85
|
+
children: /* @__PURE__ */ m(c, { className: "h-4 w-4" })
|
|
86
|
+
}), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
|
|
87
|
+
className: "text-2xl font-semibold",
|
|
88
|
+
children: "Import from Linear"
|
|
89
|
+
}), /* @__PURE__ */ m("p", {
|
|
90
|
+
className: "text-sm text-muted-foreground",
|
|
91
|
+
children: "A one-time copy of the issues in a Linear CSV or JSON export into a project. It does not stay in sync with Linear. Preview first: nothing is written until you import, and every field that cannot be carried over is named."
|
|
92
|
+
})] })]
|
|
93
|
+
}),
|
|
94
|
+
/* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, { children: /* @__PURE__ */ m(b, { children: "1. Project and export" }) }), /* @__PURE__ */ h(v, {
|
|
95
|
+
className: "space-y-4",
|
|
96
|
+
children: [/* @__PURE__ */ h("div", {
|
|
97
|
+
className: "max-w-md",
|
|
98
|
+
children: [/* @__PURE__ */ m("label", {
|
|
99
|
+
htmlFor: "import-project",
|
|
100
|
+
className: J,
|
|
101
|
+
children: "Import into project"
|
|
102
|
+
}), /* @__PURE__ */ m("div", {
|
|
103
|
+
className: "mt-1",
|
|
104
|
+
children: /* @__PURE__ */ m(n, {
|
|
105
|
+
id: "import-project",
|
|
106
|
+
value: T,
|
|
107
|
+
noneLabel: "Choose a project",
|
|
108
|
+
onChange: (e) => {
|
|
109
|
+
E(e), U();
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
})]
|
|
113
|
+
}), /* @__PURE__ */ h("div", { children: [
|
|
114
|
+
/* @__PURE__ */ m("label", {
|
|
115
|
+
htmlFor: "import-file",
|
|
116
|
+
className: J,
|
|
117
|
+
children: "Linear export (.csv or .json)"
|
|
118
|
+
}),
|
|
119
|
+
/* @__PURE__ */ m("input", {
|
|
120
|
+
id: "import-file",
|
|
121
|
+
type: "file",
|
|
122
|
+
accept: ".csv,.json,text/csv,application/json",
|
|
123
|
+
className: "mt-1 block text-sm",
|
|
124
|
+
onChange: (e) => void W(e.target.files?.[0])
|
|
125
|
+
}),
|
|
126
|
+
D && /* @__PURE__ */ h("p", {
|
|
127
|
+
className: "mt-1 text-xs text-muted-foreground",
|
|
128
|
+
children: [
|
|
129
|
+
D.name,
|
|
130
|
+
" · ",
|
|
131
|
+
D.format,
|
|
132
|
+
" · ",
|
|
133
|
+
k.length,
|
|
134
|
+
" column",
|
|
135
|
+
k.length === 1 ? "" : "s"
|
|
136
|
+
]
|
|
137
|
+
}),
|
|
138
|
+
N && /* @__PURE__ */ m(r, { message: N })
|
|
139
|
+
] })]
|
|
140
|
+
})] }),
|
|
141
|
+
D && /* @__PURE__ */ h(_, { children: [/* @__PURE__ */ m(y, { children: /* @__PURE__ */ m(b, { children: "2. Columns" }) }), /* @__PURE__ */ h(v, {
|
|
142
|
+
className: "space-y-3",
|
|
143
|
+
children: [/* @__PURE__ */ m("p", {
|
|
144
|
+
className: "text-sm text-muted-foreground",
|
|
145
|
+
children: "Automatic recognises Linear's own column names. Pick a column only where yours differ."
|
|
146
|
+
}), /* @__PURE__ */ m("div", {
|
|
147
|
+
className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-3",
|
|
148
|
+
children: i.map((e) => /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("label", {
|
|
149
|
+
htmlFor: `import-map-${e.key}`,
|
|
150
|
+
className: J,
|
|
151
|
+
children: [e.label, e.required && /* @__PURE__ */ m("span", {
|
|
152
|
+
className: "text-muted-foreground",
|
|
153
|
+
children: " (required)"
|
|
154
|
+
})]
|
|
155
|
+
}), /* @__PURE__ */ h("select", {
|
|
156
|
+
id: `import-map-${e.key}`,
|
|
157
|
+
className: "mt-1 w-full rounded-md border border-input bg-background px-2 py-1 text-sm",
|
|
158
|
+
value: j[e.key] ?? "",
|
|
159
|
+
onChange: (t) => {
|
|
160
|
+
M({
|
|
161
|
+
...j,
|
|
162
|
+
[e.key]: t.target.value
|
|
163
|
+
}), U();
|
|
164
|
+
},
|
|
165
|
+
children: [/* @__PURE__ */ m("option", {
|
|
166
|
+
value: "",
|
|
167
|
+
children: "Automatic"
|
|
168
|
+
}), k.map((e) => /* @__PURE__ */ m("option", {
|
|
169
|
+
value: e,
|
|
170
|
+
children: e
|
|
171
|
+
}, e))]
|
|
172
|
+
})] }, e.key))
|
|
173
|
+
})]
|
|
174
|
+
})] }),
|
|
175
|
+
D && /* @__PURE__ */ h("div", {
|
|
176
|
+
className: "flex flex-wrap items-center gap-2",
|
|
177
|
+
children: [
|
|
178
|
+
/* @__PURE__ */ h(g, {
|
|
179
|
+
variant: "outline",
|
|
180
|
+
"data-testid": "import-preview",
|
|
181
|
+
disabled: !T || H.loading,
|
|
182
|
+
onClick: () => void G(!0),
|
|
183
|
+
children: [H.loading && !L ? /* @__PURE__ */ m(d, { className: "mr-1 h-4 w-4 animate-spin" }) : null, "Preview"]
|
|
184
|
+
}),
|
|
185
|
+
/* @__PURE__ */ h(g, {
|
|
186
|
+
"data-testid": "import-run",
|
|
187
|
+
disabled: !L || q === 0 || H.loading,
|
|
188
|
+
onClick: () => void G(!1),
|
|
189
|
+
children: [/* @__PURE__ */ m(u, { className: "mr-1 h-4 w-4" }), L ? `Import ${q} issue${q === 1 ? "" : "s"}` : "Import"]
|
|
190
|
+
}),
|
|
191
|
+
!T && /* @__PURE__ */ m("span", {
|
|
192
|
+
className: "text-sm text-muted-foreground",
|
|
193
|
+
children: "Choose a project first."
|
|
194
|
+
}),
|
|
195
|
+
L && q === 0 && /* @__PURE__ */ m("span", {
|
|
196
|
+
className: "text-sm text-muted-foreground",
|
|
197
|
+
children: "Nothing new to import."
|
|
198
|
+
})
|
|
199
|
+
]
|
|
200
|
+
}),
|
|
201
|
+
F && /* @__PURE__ */ m(r, { message: F }),
|
|
202
|
+
(L || z) && /* @__PURE__ */ h(_, {
|
|
203
|
+
"data-testid": "import-report",
|
|
204
|
+
children: [/* @__PURE__ */ m(y, { children: /* @__PURE__ */ m(b, { children: z ? "Imported" : "Preview — nothing has been written" }) }), /* @__PURE__ */ h(v, {
|
|
205
|
+
className: "space-y-4",
|
|
206
|
+
children: [
|
|
207
|
+
/* @__PURE__ */ m("p", {
|
|
208
|
+
className: "text-sm",
|
|
209
|
+
"data-testid": "import-summary",
|
|
210
|
+
children: z ? `${z.imported} imported · ${z.skipped} already imported before · ${z.failed} failed` : `${q} will be imported · ${L?.skipped ?? 0} already imported before`
|
|
211
|
+
}),
|
|
212
|
+
(z ?? L).notCarriedOver.length > 0 && /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
213
|
+
className: "text-sm font-medium",
|
|
214
|
+
children: "Not carried over"
|
|
215
|
+
}), /* @__PURE__ */ m("ul", {
|
|
216
|
+
className: "mt-1 list-disc pl-5 text-sm text-muted-foreground",
|
|
217
|
+
"data-testid": "import-not-carried",
|
|
218
|
+
children: (z ?? L).notCarriedOver.map((e) => /* @__PURE__ */ m("li", { children: e }, e))
|
|
219
|
+
})] }),
|
|
220
|
+
(z ?? L).errors.length > 0 && /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
221
|
+
className: "text-sm font-medium",
|
|
222
|
+
children: "Rows and issues that could not be imported"
|
|
223
|
+
}), /* @__PURE__ */ m("ul", {
|
|
224
|
+
className: "mt-1 list-disc pl-5 text-sm text-destructive",
|
|
225
|
+
children: (z ?? L).errors.slice(0, C).map((e) => /* @__PURE__ */ m("li", { children: e }, e))
|
|
226
|
+
})] }),
|
|
227
|
+
/* @__PURE__ */ h("div", {
|
|
228
|
+
className: "overflow-x-auto",
|
|
229
|
+
children: [/* @__PURE__ */ h("table", {
|
|
230
|
+
className: "w-full text-sm",
|
|
231
|
+
children: [/* @__PURE__ */ m("thead", { children: /* @__PURE__ */ h("tr", {
|
|
232
|
+
className: "text-left text-muted-foreground",
|
|
233
|
+
children: [
|
|
234
|
+
/* @__PURE__ */ m("th", {
|
|
235
|
+
className: "py-1 pr-3 font-medium",
|
|
236
|
+
children: "Issue"
|
|
237
|
+
}),
|
|
238
|
+
/* @__PURE__ */ m("th", {
|
|
239
|
+
className: "py-1 pr-3 font-medium",
|
|
240
|
+
children: "Title"
|
|
241
|
+
}),
|
|
242
|
+
/* @__PURE__ */ m("th", {
|
|
243
|
+
className: "py-1 pr-3 font-medium",
|
|
244
|
+
children: "Result"
|
|
245
|
+
}),
|
|
246
|
+
/* @__PURE__ */ m("th", {
|
|
247
|
+
className: "py-1 font-medium",
|
|
248
|
+
children: "Notes"
|
|
249
|
+
})
|
|
250
|
+
]
|
|
251
|
+
}) }), /* @__PURE__ */ m("tbody", { children: K.slice(0, C).map((e) => /* @__PURE__ */ h("tr", {
|
|
252
|
+
className: "border-t align-top",
|
|
253
|
+
"data-testid": "import-row",
|
|
254
|
+
children: [
|
|
255
|
+
/* @__PURE__ */ m("td", {
|
|
256
|
+
className: "py-1 pr-3 whitespace-nowrap",
|
|
257
|
+
children: e.externalUrl ? /* @__PURE__ */ h("a", {
|
|
258
|
+
href: e.externalUrl,
|
|
259
|
+
target: "_blank",
|
|
260
|
+
rel: "noreferrer noopener",
|
|
261
|
+
className: "inline-flex items-center gap-1 text-primary hover:underline",
|
|
262
|
+
children: [e.externalId, /* @__PURE__ */ m(l, { className: "h-3 w-3" })]
|
|
263
|
+
}) : e.externalId
|
|
264
|
+
}),
|
|
265
|
+
/* @__PURE__ */ m("td", {
|
|
266
|
+
className: "py-1 pr-3",
|
|
267
|
+
children: e.workItemId ? /* @__PURE__ */ m("button", {
|
|
268
|
+
type: "button",
|
|
269
|
+
className: "text-left text-primary hover:underline",
|
|
270
|
+
onClick: () => f(`/tasks/task-detail-page?taskId=${encodeURIComponent(e.workItemId ?? "")}`),
|
|
271
|
+
children: e.title
|
|
272
|
+
}) : e.title
|
|
273
|
+
}),
|
|
274
|
+
/* @__PURE__ */ m("td", {
|
|
275
|
+
className: "py-1 pr-3 whitespace-nowrap",
|
|
276
|
+
children: w[e.outcome]
|
|
277
|
+
}),
|
|
278
|
+
/* @__PURE__ */ m("td", {
|
|
279
|
+
className: "py-1 text-muted-foreground",
|
|
280
|
+
children: e.notes.join(" · ") || "—"
|
|
281
|
+
})
|
|
282
|
+
]
|
|
283
|
+
}, e.externalId)) })]
|
|
284
|
+
}), K.length > C && /* @__PURE__ */ h("p", {
|
|
285
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
286
|
+
children: [
|
|
287
|
+
"Showing the first ",
|
|
288
|
+
C,
|
|
289
|
+
" of ",
|
|
290
|
+
K.length,
|
|
291
|
+
" issues; the counts above cover all of them."
|
|
292
|
+
]
|
|
293
|
+
})]
|
|
294
|
+
}),
|
|
295
|
+
z && /* @__PURE__ */ m(g, {
|
|
296
|
+
variant: "outline",
|
|
297
|
+
onClick: () => f("/tasks/tasks-page"),
|
|
298
|
+
children: "Open the Task Board"
|
|
299
|
+
})
|
|
300
|
+
]
|
|
301
|
+
})]
|
|
302
|
+
})
|
|
303
|
+
]
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
//#endregion
|
|
307
|
+
export { T as TasksImportPagePage };
|
|
308
|
+
|
|
309
|
+
//# sourceMappingURL=TasksImportPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TasksImportPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TasksImportPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport { Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, ExternalLink, FileUp, Loader2 } from 'lucide-react';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { throwOnError } from '../utils/mutationResult';\nimport { ErrorLine } from '../controls/ConfirmButton';\nimport { ProjectSelect } from '../controls/Pickers';\nimport {\n IMPORT_FIELDS,\n type ExportFormat,\n type ImportField,\n exportColumns,\n formatOf,\n} from '../import/exportColumns';\n\n/**\n * Import from Linear (BUILD_PLAN P1.4). The importer existed in the service with no way to reach it, and it was\n * silent about what it dropped. This page: pick the project and the export, map columns if the defaults miss,\n * PREVIEW (nothing is written) with every loss named, then import. Reruns are safe — issues imported before are\n * left alone and reported as such. It is a one-time copy, not a live sync, and the page says so.\n */\n\nconst IMPORT = gql`\n mutation ImportLinearIssues($input: PlanmagnetImportExternalIssuesInput!) {\n planmagnetImportExternalIssues(input: $input) {\n dryRun\n imported\n skipped\n failed\n errors\n notCarriedOver\n issues {\n externalId\n title\n externalUrl\n outcome\n workItemId\n notes\n }\n }\n }\n`;\n\ninterface IssueReport {\n externalId: string;\n title: string;\n externalUrl: string | null;\n outcome: 'IMPORTED' | 'ALREADY_IMPORTED' | 'WOULD_IMPORT' | 'FAILED';\n workItemId: string | null;\n notes: string[];\n}\ninterface ImportResult {\n dryRun: boolean;\n imported: number;\n skipped: number;\n failed: number;\n errors: string[];\n notCarriedOver: string[];\n issues: IssueReport[];\n}\n\nconst MAX_BYTES = 10_000_000;\nconst SHOWN = 200;\nconst OUTCOME_LABEL: Record<IssueReport['outcome'], string> = {\n IMPORTED: 'Imported',\n ALREADY_IMPORTED: 'Already imported',\n WOULD_IMPORT: 'Will be imported',\n FAILED: 'Failed',\n};\n\nexport function TasksImportPagePage() {\n const navigate = usePlanMagnetNavigate();\n const [projectId, setProjectId] = useState('');\n const [file, setFile] = useState<{ name: string; text: string; format: ExportFormat } | null>(\n null\n );\n const [columns, setColumns] = useState<string[]>([]);\n const [mapping, setMapping] = useState<Partial<Record<ImportField, string>>>({});\n const [fileError, setFileError] = useState<string | null>(null);\n const [runError, setRunError] = useState<string | null>(null);\n const [preview, setPreview] = useState<ImportResult | null>(null);\n const [done, setDone] = useState<ImportResult | null>(null);\n const [run, state] = useMutation<{ planmagnetImportExternalIssues: ImportResult }>(IMPORT, {\n refetchQueries: ['GetWorkItems', 'ProjectBoard', 'CountsProjects'],\n });\n\n // Anything that changes what would be imported invalidates the preview: Import only runs what was previewed.\n const reset = () => {\n setPreview(null);\n setDone(null);\n setRunError(null);\n };\n\n const onFile = async (picked: File | undefined) => {\n reset();\n setFile(null);\n setColumns([]);\n setMapping({});\n setFileError(null);\n if (!picked) return;\n const format = formatOf(picked.name);\n if (!format) return setFileError('Choose a Linear export: a .csv or .json file.');\n if (picked.size > MAX_BYTES)\n return setFileError('The file is larger than 10 MB. Split the export and import the parts.');\n const text = await picked.text();\n const read = exportColumns(text, format);\n if ('error' in read) return setFileError(read.error);\n setFile({ name: picked.name, text, format });\n setColumns(read.columns);\n };\n\n const submit = async (dryRun: boolean) => {\n if (!file || !projectId) return;\n setRunError(null);\n const fieldMapping = Object.fromEntries(\n Object.entries(mapping).filter(([, column]) => !!column)\n );\n try {\n const res = await throwOnError(\n run({\n variables: {\n input: {\n projectId,\n provider: 'LINEAR',\n format: file.format,\n data: file.text,\n dryRun,\n ...(Object.keys(fieldMapping).length > 0 && { fieldMapping }),\n },\n },\n })\n );\n const result = res.data?.planmagnetImportExternalIssues ?? null;\n if (dryRun) setPreview(result);\n else {\n setDone(result);\n setPreview(null);\n }\n } catch (e) {\n setRunError(e instanceof Error ? e.message : 'The export could not be read.');\n }\n };\n\n const shown = (done ?? preview)?.issues ?? [];\n const toImport = preview?.issues.filter((i) => i.outcome === 'WOULD_IMPORT').length ?? 0;\n const label = 'text-sm font-medium';\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-start gap-3\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Back to the Task Board\"\n onClick={() => navigate('/tasks/tasks-page')}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Import from Linear</h1>\n <p className=\"text-sm text-muted-foreground\">\n A one-time copy of the issues in a Linear CSV or JSON export into a project. It does not\n stay in sync with Linear. Preview first: nothing is written until you import, and every\n field that cannot be carried over is named.\n </p>\n </div>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>1. Project and export</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"max-w-md\">\n <label htmlFor=\"import-project\" className={label}>\n Import into project\n </label>\n <div className=\"mt-1\">\n <ProjectSelect\n id=\"import-project\"\n value={projectId}\n noneLabel=\"Choose a project\"\n onChange={(id) => {\n setProjectId(id);\n reset();\n }}\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"import-file\" className={label}>\n Linear export (.csv or .json)\n </label>\n <input\n id=\"import-file\"\n type=\"file\"\n accept=\".csv,.json,text/csv,application/json\"\n className=\"mt-1 block text-sm\"\n onChange={(e) => void onFile(e.target.files?.[0])}\n />\n {file && (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {file.name} · {file.format} · {columns.length} column\n {columns.length === 1 ? '' : 's'}\n </p>\n )}\n {fileError && <ErrorLine message={fileError} />}\n </div>\n </CardContent>\n </Card>\n\n {file && (\n <Card>\n <CardHeader>\n <CardTitle>2. Columns</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n Automatic recognises Linear's own column names. Pick a column only where yours\n differ.\n </p>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {IMPORT_FIELDS.map((f) => (\n <div key={f.key}>\n <label htmlFor={`import-map-${f.key}`} className={label}>\n {f.label}\n {f.required && <span className=\"text-muted-foreground\"> (required)</span>}\n </label>\n <select\n id={`import-map-${f.key}`}\n className=\"mt-1 w-full rounded-md border border-input bg-background px-2 py-1 text-sm\"\n value={mapping[f.key] ?? ''}\n onChange={(e) => {\n setMapping({ ...mapping, [f.key]: e.target.value });\n reset();\n }}\n >\n <option value=\"\">Automatic</option>\n {columns.map((c) => (\n <option key={c} value={c}>\n {c}\n </option>\n ))}\n </select>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n\n {file && (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n variant=\"outline\"\n data-testid=\"import-preview\"\n disabled={!projectId || state.loading}\n onClick={() => void submit(true)}\n >\n {state.loading && !preview ? <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" /> : null}\n Preview\n </Button>\n <Button\n data-testid=\"import-run\"\n disabled={!preview || toImport === 0 || state.loading}\n onClick={() => void submit(false)}\n >\n <FileUp className=\"mr-1 h-4 w-4\" />\n {preview ? `Import ${toImport} issue${toImport === 1 ? '' : 's'}` : 'Import'}\n </Button>\n {!projectId && (\n <span className=\"text-sm text-muted-foreground\">Choose a project first.</span>\n )}\n {preview && toImport === 0 && (\n <span className=\"text-sm text-muted-foreground\">Nothing new to import.</span>\n )}\n </div>\n )}\n {runError && <ErrorLine message={runError} />}\n\n {(preview || done) && (\n <Card data-testid=\"import-report\">\n <CardHeader>\n <CardTitle>{done ? 'Imported' : 'Preview — nothing has been written'}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm\" data-testid=\"import-summary\">\n {done\n ? `${done.imported} imported · ${done.skipped} already imported before · ${done.failed} failed`\n : `${toImport} will be imported · ${preview?.skipped ?? 0} already imported before`}\n </p>\n {(done ?? preview)!.notCarriedOver.length > 0 && (\n <div>\n <p className=\"text-sm font-medium\">Not carried over</p>\n <ul\n className=\"mt-1 list-disc pl-5 text-sm text-muted-foreground\"\n data-testid=\"import-not-carried\"\n >\n {(done ?? preview)!.notCarriedOver.map((line) => (\n <li key={line}>{line}</li>\n ))}\n </ul>\n </div>\n )}\n {(done ?? preview)!.errors.length > 0 && (\n <div>\n <p className=\"text-sm font-medium\">Rows and issues that could not be imported</p>\n <ul className=\"mt-1 list-disc pl-5 text-sm text-destructive\">\n {(done ?? preview)!.errors.slice(0, SHOWN).map((line) => (\n <li key={line}>{line}</li>\n ))}\n </ul>\n </div>\n )}\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-muted-foreground\">\n <th className=\"py-1 pr-3 font-medium\">Issue</th>\n <th className=\"py-1 pr-3 font-medium\">Title</th>\n <th className=\"py-1 pr-3 font-medium\">Result</th>\n <th className=\"py-1 font-medium\">Notes</th>\n </tr>\n </thead>\n <tbody>\n {shown.slice(0, SHOWN).map((i) => (\n <tr key={i.externalId} className=\"border-t align-top\" data-testid=\"import-row\">\n <td className=\"py-1 pr-3 whitespace-nowrap\">\n {i.externalUrl ? (\n <a\n href={i.externalUrl}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n className=\"inline-flex items-center gap-1 text-primary hover:underline\"\n >\n {i.externalId}\n <ExternalLink className=\"h-3 w-3\" />\n </a>\n ) : (\n i.externalId\n )}\n </td>\n <td className=\"py-1 pr-3\">\n {i.workItemId ? (\n <button\n type=\"button\"\n className=\"text-left text-primary hover:underline\"\n onClick={() =>\n navigate(\n `/tasks/task-detail-page?taskId=${encodeURIComponent(i.workItemId ?? '')}`\n )\n }\n >\n {i.title}\n </button>\n ) : (\n i.title\n )}\n </td>\n <td className=\"py-1 pr-3 whitespace-nowrap\">{OUTCOME_LABEL[i.outcome]}</td>\n <td className=\"py-1 text-muted-foreground\">{i.notes.join(' · ') || '—'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n {shown.length > SHOWN && (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n Showing the first {SHOWN} of {shown.length} issues; the counts above cover all of\n them.\n </p>\n )}\n </div>\n {done && (\n <Button variant=\"outline\" onClick={() => navigate('/tasks/tasks-page')}>\n Open the Task Board\n </Button>\n )}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AAyIA,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"TasksTasksPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTasksPagePage.tsx"],"names":[],"mappings":"AAyIA,wBAAgB,kBAAkB,4CAgQjC"}
|