@burdenoff/microfe-planmagnet 2026.927.3 → 2026.927.5
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/controls/FeatureControls.d.ts +26 -0
- package/dist/planmagnet/controls/FeatureControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/FeatureControls.js +321 -0
- package/dist/planmagnet/controls/FeatureControls.js.map +1 -0
- 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 +17 -0
- package/dist/planmagnet/controls/MilestoneControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/MilestoneControls.js +203 -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.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 +14 -0
- package/dist/planmagnet/controls/ReleaseControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/ReleaseControls.js +111 -0
- package/dist/planmagnet/controls/ReleaseControls.js.map +1 -0
- 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 +190 -153
- 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/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 +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 +145 -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/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 +169 -110
- 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/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/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 +118 -107
- 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 +4 -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/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/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/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/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/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/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 +111 -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 +150 -137
- 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":"TasksTaskDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TasksTaskDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TasksTaskDetailPagePage.tsx"],"names":[],"mappings":"AA+UA,wBAAgB,uBAAuB,4CAuItC"}
|