@burdenoff/microfe-planmagnet 2026.928.3 → 2026.928.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +102 -84
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +103 -55
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/controls/CompetitorControls.d.ts +20 -0
- package/dist/planmagnet/controls/CompetitorControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/CompetitorControls.js +172 -0
- package/dist/planmagnet/controls/CompetitorControls.js.map +1 -0
- package/dist/planmagnet/controls/FeatureControls.js +29 -29
- package/dist/planmagnet/controls/FeatureTriage.js +11 -11
- package/dist/planmagnet/controls/ObjectiveControls.js +24 -24
- package/dist/planmagnet/controls/Pickers.d.ts +17 -2
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
- package/dist/planmagnet/controls/Pickers.js +100 -9
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/controls/PortfolioControls.d.ts +13 -0
- package/dist/planmagnet/controls/PortfolioControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/PortfolioControls.js +114 -0
- package/dist/planmagnet/controls/PortfolioControls.js.map +1 -0
- package/dist/planmagnet/controls/ProgramControls.d.ts +25 -0
- package/dist/planmagnet/controls/ProgramControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/ProgramControls.js +187 -0
- package/dist/planmagnet/controls/ProgramControls.js.map +1 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js +127 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js +129 -0
- package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js.map +1 -0
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js +132 -0
- package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js.map +1 -0
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js +181 -0
- package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js.map +1 -0
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js +242 -0
- package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js.map +1 -0
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +302 -0
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js.map +1 -0
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +335 -0
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +154 -0
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +124 -138
- package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +221 -0
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +279 -0
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js +178 -0
- package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +157 -0
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +130 -103
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +156 -136
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksImportPagePage.js +5 -5
- package/package.json +1 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { PersonName as e } from "../people/People.js";
|
|
2
|
+
import { enumLabel as t } from "../controls/WorkItemControls.js";
|
|
3
|
+
import { ProgramHeaderActions as n, ProgramProjectsCard as r } from "../controls/ProgramControls.js";
|
|
4
|
+
import { Calendar as i, FolderKanban as a, Loader2 as o } from "lucide-react";
|
|
5
|
+
import { useParams as s } from "react-router";
|
|
6
|
+
import { gql as c } from "@apollo/client";
|
|
7
|
+
import { useQuery as l } from "@apollo/client/react";
|
|
8
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
|
+
import { Badge as f, Card as p, CardContent as m, CardHeader as h, CardTitle as g } from "@burdenoff/fe-libs/ui";
|
|
10
|
+
//#region src/planmagnet/pages/ProgramsProgramDetailPagePage.tsx
|
|
11
|
+
var _ = c`
|
|
12
|
+
query GetProgram($id: ID!) {
|
|
13
|
+
planmagnetProgram(id: $id) {
|
|
14
|
+
id
|
|
15
|
+
workspaceId
|
|
16
|
+
name
|
|
17
|
+
description
|
|
18
|
+
status
|
|
19
|
+
startDate
|
|
20
|
+
endDate
|
|
21
|
+
ownerId
|
|
22
|
+
budgetTotal
|
|
23
|
+
currency
|
|
24
|
+
tags
|
|
25
|
+
createdAt
|
|
26
|
+
updatedAt
|
|
27
|
+
projects {
|
|
28
|
+
id
|
|
29
|
+
name
|
|
30
|
+
status
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`;
|
|
35
|
+
function v() {
|
|
36
|
+
let c = s().id ?? "", { data: v, loading: y, error: b } = l(_, {
|
|
37
|
+
variables: { id: c },
|
|
38
|
+
skip: !c
|
|
39
|
+
});
|
|
40
|
+
if (y && !v) return /* @__PURE__ */ u("div", {
|
|
41
|
+
className: "flex items-center justify-center p-12",
|
|
42
|
+
children: /* @__PURE__ */ u(o, { className: "h-8 w-8 animate-spin text-muted-foreground" })
|
|
43
|
+
});
|
|
44
|
+
if (b) return /* @__PURE__ */ d("div", {
|
|
45
|
+
className: "p-6 text-destructive",
|
|
46
|
+
children: ["Failed to load program: ", b.message]
|
|
47
|
+
});
|
|
48
|
+
let x = v?.planmagnetProgram;
|
|
49
|
+
return x ? /* @__PURE__ */ d("div", {
|
|
50
|
+
className: "space-y-6 p-6",
|
|
51
|
+
children: [/* @__PURE__ */ d("div", {
|
|
52
|
+
className: "flex items-center justify-between",
|
|
53
|
+
children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ d("div", {
|
|
54
|
+
className: "flex items-center gap-2",
|
|
55
|
+
children: [
|
|
56
|
+
/* @__PURE__ */ u(a, { className: "h-5 w-5 text-primary" }),
|
|
57
|
+
/* @__PURE__ */ u("h1", {
|
|
58
|
+
className: "text-2xl font-semibold",
|
|
59
|
+
children: x.name
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ u(f, {
|
|
62
|
+
variant: "outline",
|
|
63
|
+
className: "text-xs",
|
|
64
|
+
children: t(x.status)
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
}), /* @__PURE__ */ d("p", {
|
|
68
|
+
className: "text-sm text-muted-foreground mt-1",
|
|
69
|
+
children: [
|
|
70
|
+
x.projects.length,
|
|
71
|
+
" project",
|
|
72
|
+
x.projects.length === 1 ? "" : "s"
|
|
73
|
+
]
|
|
74
|
+
})] }), /* @__PURE__ */ u(n, {
|
|
75
|
+
programId: x.id,
|
|
76
|
+
name: x.name,
|
|
77
|
+
status: x.status
|
|
78
|
+
})]
|
|
79
|
+
}), /* @__PURE__ */ d("div", {
|
|
80
|
+
className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
|
|
81
|
+
children: [/* @__PURE__ */ d("div", {
|
|
82
|
+
className: "lg:col-span-2 space-y-6",
|
|
83
|
+
children: [/* @__PURE__ */ d(p, { children: [/* @__PURE__ */ u(h, { children: /* @__PURE__ */ u(g, { children: "Overview" }) }), /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u("p", {
|
|
84
|
+
className: "text-sm",
|
|
85
|
+
children: x.description ?? "No description provided."
|
|
86
|
+
}) })] }), /* @__PURE__ */ d(p, { children: [/* @__PURE__ */ u(h, { children: /* @__PURE__ */ u(g, { children: "Projects" }) }), /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(r, {
|
|
87
|
+
programId: x.id,
|
|
88
|
+
projects: x.projects
|
|
89
|
+
}) })] })]
|
|
90
|
+
}), /* @__PURE__ */ d("div", {
|
|
91
|
+
className: "space-y-6",
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ d(p, { children: [/* @__PURE__ */ u(h, { children: /* @__PURE__ */ u(g, { children: "Timeline" }) }), /* @__PURE__ */ d(m, {
|
|
94
|
+
className: "space-y-3 text-sm",
|
|
95
|
+
children: [/* @__PURE__ */ d("div", {
|
|
96
|
+
className: "flex items-center gap-2",
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ u(i, { className: "h-4 w-4 text-muted-foreground" }),
|
|
99
|
+
/* @__PURE__ */ u("span", {
|
|
100
|
+
className: "text-muted-foreground",
|
|
101
|
+
children: "Start:"
|
|
102
|
+
}),
|
|
103
|
+
/* @__PURE__ */ u("span", {
|
|
104
|
+
className: "font-medium",
|
|
105
|
+
children: x.startDate ? new Date(x.startDate).toLocaleDateString() : "Not set"
|
|
106
|
+
})
|
|
107
|
+
]
|
|
108
|
+
}), /* @__PURE__ */ d("div", {
|
|
109
|
+
className: "flex items-center gap-2",
|
|
110
|
+
children: [
|
|
111
|
+
/* @__PURE__ */ u(i, { className: "h-4 w-4 text-muted-foreground" }),
|
|
112
|
+
/* @__PURE__ */ u("span", {
|
|
113
|
+
className: "text-muted-foreground",
|
|
114
|
+
children: "End:"
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ u("span", {
|
|
117
|
+
className: "font-medium",
|
|
118
|
+
children: x.endDate ? new Date(x.endDate).toLocaleDateString() : "Not set"
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
})]
|
|
122
|
+
})] }),
|
|
123
|
+
/* @__PURE__ */ d(p, { children: [/* @__PURE__ */ u(h, { children: /* @__PURE__ */ u(g, { children: "Details" }) }), /* @__PURE__ */ d(m, {
|
|
124
|
+
className: "space-y-2 text-sm",
|
|
125
|
+
children: [
|
|
126
|
+
/* @__PURE__ */ d("div", {
|
|
127
|
+
className: "flex justify-between",
|
|
128
|
+
children: [/* @__PURE__ */ u("span", {
|
|
129
|
+
className: "text-muted-foreground",
|
|
130
|
+
children: "Owner"
|
|
131
|
+
}), /* @__PURE__ */ u(e, { id: x.ownerId })]
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ d("div", {
|
|
134
|
+
className: "flex justify-between",
|
|
135
|
+
children: [/* @__PURE__ */ u("span", {
|
|
136
|
+
className: "text-muted-foreground",
|
|
137
|
+
children: "Budget"
|
|
138
|
+
}), /* @__PURE__ */ u("span", {
|
|
139
|
+
className: "font-medium",
|
|
140
|
+
children: x.budgetTotal == null ? "Not set" : `${x.currency ?? ""} ${x.budgetTotal.toLocaleString()}`.trim()
|
|
141
|
+
})]
|
|
142
|
+
}),
|
|
143
|
+
/* @__PURE__ */ d("div", {
|
|
144
|
+
className: "flex justify-between",
|
|
145
|
+
children: [/* @__PURE__ */ u("span", {
|
|
146
|
+
className: "text-muted-foreground",
|
|
147
|
+
children: "Created"
|
|
148
|
+
}), /* @__PURE__ */ u("span", { children: new Date(x.createdAt).toLocaleDateString() })]
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ d("div", {
|
|
151
|
+
className: "flex justify-between",
|
|
152
|
+
children: [/* @__PURE__ */ u("span", {
|
|
153
|
+
className: "text-muted-foreground",
|
|
154
|
+
children: "Updated"
|
|
155
|
+
}), /* @__PURE__ */ u("span", { children: new Date(x.updatedAt).toLocaleDateString() })]
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
})] }),
|
|
159
|
+
x.tags.length > 0 && /* @__PURE__ */ d(p, { children: [/* @__PURE__ */ u(h, { children: /* @__PURE__ */ u(g, { children: "Tags" }) }), /* @__PURE__ */ u(m, {
|
|
160
|
+
className: "flex flex-wrap gap-1",
|
|
161
|
+
children: x.tags.map((e) => /* @__PURE__ */ u(f, {
|
|
162
|
+
variant: "outline",
|
|
163
|
+
className: "text-xs",
|
|
164
|
+
children: e
|
|
165
|
+
}, e))
|
|
166
|
+
})] })
|
|
167
|
+
]
|
|
168
|
+
})]
|
|
169
|
+
})]
|
|
170
|
+
}) : /* @__PURE__ */ u("div", {
|
|
171
|
+
className: "p-6 text-muted-foreground",
|
|
172
|
+
children: "Program not found."
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
//#endregion
|
|
176
|
+
export { v as ProgramsProgramDetailPagePage };
|
|
177
|
+
|
|
178
|
+
//# sourceMappingURL=ProgramsProgramDetailPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgramsProgramDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProgramsProgramDetailPagePage.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Calendar, Loader2 } from 'lucide-react';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { ProgramHeaderActions, ProgramProjectsCard } from '../controls/ProgramControls';\n\nconst GET_PROGRAM = gql`\n query GetProgram($id: ID!) {\n planmagnetProgram(id: $id) {\n id\n workspaceId\n name\n description\n status\n startDate\n endDate\n ownerId\n budgetTotal\n currency\n tags\n createdAt\n updatedAt\n projects {\n id\n name\n status\n }\n }\n }\n`;\n\ninterface ProjectNode {\n id: string;\n name: string;\n status: string;\n}\n\nexport function ProgramsProgramDetailPagePage() {\n const params = useParams<{ id: string }>();\n const programId = params.id ?? '';\n\n const { data, loading, error } = useQuery<{\n planmagnetProgram: {\n id: string;\n name: string;\n description: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n ownerId: string;\n budgetTotal: number | null;\n currency: string | null;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n projects: ProjectNode[];\n } | null;\n }>(GET_PROGRAM, { variables: { id: programId }, skip: !programId });\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it and\n // loses their state).\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load program: {error.message}</div>;\n }\n\n const program = data?.planmagnetProgram;\n if (!program) return <div className=\"p-6 text-muted-foreground\">Program not found.</div>;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{program.name}</h1>\n <Badge variant=\"outline\" className=\"text-xs\">\n {enumLabel(program.status)}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {program.projects.length} project{program.projects.length === 1 ? '' : 's'}\n </p>\n </div>\n <ProgramHeaderActions programId={program.id} name={program.name} status={program.status} />\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Overview</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm\">{program.description ?? 'No description provided.'}</p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Projects</CardTitle>\n </CardHeader>\n <CardContent>\n <ProgramProjectsCard programId={program.id} projects={program.projects} />\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Start:</span>\n <span className=\"font-medium\">\n {program.startDate ? new Date(program.startDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">End:</span>\n <span className=\"font-medium\">\n {program.endDate ? new Date(program.endDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <PersonName id={program.ownerId} />\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Budget</span>\n <span className=\"font-medium\">\n {program.budgetTotal != null\n ? `${program.currency ?? ''} ${program.budgetTotal.toLocaleString()}`.trim()\n : 'Not set'}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(program.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(program.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {program.tags.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {program.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgramsProgramsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProgramsProgramsPagePage.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,wBAAwB,4CAsIvC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
|
+
import { PersonName as n } from "../people/People.js";
|
|
3
|
+
import { detailPath as r, rowLinkProps as i } from "../utils/rowNavigation.js";
|
|
4
|
+
import { enumLabel as a } from "../controls/WorkItemControls.js";
|
|
5
|
+
import { PROGRAM_STATUSES as o } from "../controls/ProgramControls.js";
|
|
6
|
+
import { useState as s } from "react";
|
|
7
|
+
import { FolderKanban as c, Loader2 as l, Plus as u } from "lucide-react";
|
|
8
|
+
import { gql as d } from "@apollo/client";
|
|
9
|
+
import { useQuery as f } from "@apollo/client/react";
|
|
10
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
11
|
+
import { Badge as h, Button as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b, Input as x } from "@burdenoff/fe-libs/ui";
|
|
12
|
+
//#region src/planmagnet/pages/ProgramsProgramsPagePage.tsx
|
|
13
|
+
var S = d`
|
|
14
|
+
query ListPrograms(
|
|
15
|
+
$workspaceId: ID!
|
|
16
|
+
$filter: PlanmagnetProgramFilter
|
|
17
|
+
$pagination: PlanmagnetPaginationInput
|
|
18
|
+
) {
|
|
19
|
+
planmagnetPrograms(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {
|
|
20
|
+
items {
|
|
21
|
+
id
|
|
22
|
+
name
|
|
23
|
+
description
|
|
24
|
+
status
|
|
25
|
+
startDate
|
|
26
|
+
endDate
|
|
27
|
+
ownerId
|
|
28
|
+
budgetTotal
|
|
29
|
+
currency
|
|
30
|
+
tags
|
|
31
|
+
updatedAt
|
|
32
|
+
projects {
|
|
33
|
+
id
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
totalCount
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
function C() {
|
|
41
|
+
let d = t(), { workspaceId: C } = e(), [w, T] = s("all"), [E, D] = s(""), { data: O, loading: k, error: A } = f(S, {
|
|
42
|
+
variables: {
|
|
43
|
+
workspaceId: C,
|
|
44
|
+
pagination: { first: 50 },
|
|
45
|
+
filter: {
|
|
46
|
+
...w === "all" ? {} : { status: w },
|
|
47
|
+
...E.trim() ? { search: E.trim() } : {}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
skip: !C
|
|
51
|
+
});
|
|
52
|
+
if (k && !O) return /* @__PURE__ */ p("div", {
|
|
53
|
+
className: "flex items-center justify-center p-12",
|
|
54
|
+
children: /* @__PURE__ */ p(l, { className: "h-8 w-8 animate-spin text-muted-foreground" })
|
|
55
|
+
});
|
|
56
|
+
if (A) return /* @__PURE__ */ m("div", {
|
|
57
|
+
className: "p-6 text-destructive",
|
|
58
|
+
children: ["Failed to load programs: ", A.message]
|
|
59
|
+
});
|
|
60
|
+
let j = O?.planmagnetPrograms.items ?? [], M = O?.planmagnetPrograms.totalCount ?? 0, N = ["all", ...o];
|
|
61
|
+
return /* @__PURE__ */ m("div", {
|
|
62
|
+
className: "space-y-6 p-6",
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ m("div", {
|
|
65
|
+
className: "flex items-center justify-between",
|
|
66
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
|
|
67
|
+
className: "text-2xl font-semibold",
|
|
68
|
+
children: "Programs"
|
|
69
|
+
}), /* @__PURE__ */ m("p", {
|
|
70
|
+
className: "text-sm text-muted-foreground",
|
|
71
|
+
children: [
|
|
72
|
+
M,
|
|
73
|
+
" program",
|
|
74
|
+
M === 1 ? "" : "s",
|
|
75
|
+
" across the workspace"
|
|
76
|
+
]
|
|
77
|
+
})] }), /* @__PURE__ */ m(g, {
|
|
78
|
+
size: "sm",
|
|
79
|
+
onClick: () => d("/products/create-program-page"),
|
|
80
|
+
children: [/* @__PURE__ */ p(u, { className: "mr-1 h-4 w-4" }), "New Program"]
|
|
81
|
+
})]
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ m("div", {
|
|
84
|
+
className: "flex flex-wrap items-center gap-4",
|
|
85
|
+
children: [/* @__PURE__ */ p(x, {
|
|
86
|
+
"aria-label": "Search programs",
|
|
87
|
+
placeholder: "Search by name…",
|
|
88
|
+
value: E,
|
|
89
|
+
onChange: (e) => D(e.target.value),
|
|
90
|
+
className: "max-w-xs"
|
|
91
|
+
}), /* @__PURE__ */ p("div", {
|
|
92
|
+
className: "flex items-center gap-2 flex-wrap",
|
|
93
|
+
children: N.map((e) => /* @__PURE__ */ p("button", {
|
|
94
|
+
type: "button",
|
|
95
|
+
"aria-pressed": w === e,
|
|
96
|
+
onClick: () => T(e),
|
|
97
|
+
className: `px-2 py-1 text-xs rounded-md capitalize ${w === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"}`,
|
|
98
|
+
children: e === "all" ? "All" : a(e)
|
|
99
|
+
}, e))
|
|
100
|
+
})]
|
|
101
|
+
}),
|
|
102
|
+
/* @__PURE__ */ p("div", {
|
|
103
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
|
104
|
+
children: j.map((e) => /* @__PURE__ */ m(_, {
|
|
105
|
+
...i(() => d(r("/products/program-detail-page", e.id)), e.name),
|
|
106
|
+
children: [/* @__PURE__ */ p(y, {
|
|
107
|
+
className: "pb-2",
|
|
108
|
+
children: /* @__PURE__ */ m("div", {
|
|
109
|
+
className: "flex items-center justify-between gap-2",
|
|
110
|
+
children: [/* @__PURE__ */ m(b, {
|
|
111
|
+
className: "text-base flex items-center gap-2",
|
|
112
|
+
children: [/* @__PURE__ */ p(c, { className: "h-4 w-4 text-primary" }), e.name]
|
|
113
|
+
}), /* @__PURE__ */ p(h, {
|
|
114
|
+
variant: "outline",
|
|
115
|
+
className: "text-xs",
|
|
116
|
+
children: a(e.status)
|
|
117
|
+
})]
|
|
118
|
+
})
|
|
119
|
+
}), /* @__PURE__ */ m(v, {
|
|
120
|
+
className: "space-y-3",
|
|
121
|
+
children: [
|
|
122
|
+
/* @__PURE__ */ p("p", {
|
|
123
|
+
className: "text-sm text-muted-foreground",
|
|
124
|
+
children: e.description ?? "No description"
|
|
125
|
+
}),
|
|
126
|
+
/* @__PURE__ */ m("div", {
|
|
127
|
+
className: "flex items-center gap-4 text-xs text-muted-foreground",
|
|
128
|
+
children: [/* @__PURE__ */ m("span", { children: [
|
|
129
|
+
e.projects.length,
|
|
130
|
+
" project",
|
|
131
|
+
e.projects.length === 1 ? "" : "s"
|
|
132
|
+
] }), e.startDate && e.endDate && /* @__PURE__ */ m("span", { children: [
|
|
133
|
+
new Date(e.startDate).toLocaleDateString(),
|
|
134
|
+
" -",
|
|
135
|
+
" ",
|
|
136
|
+
new Date(e.endDate).toLocaleDateString()
|
|
137
|
+
] })]
|
|
138
|
+
}),
|
|
139
|
+
/* @__PURE__ */ m("div", {
|
|
140
|
+
className: "flex items-center justify-between text-xs text-muted-foreground border-t pt-2",
|
|
141
|
+
children: [/* @__PURE__ */ m("span", { children: ["Owner: ", /* @__PURE__ */ p(n, { id: e.ownerId })] }), /* @__PURE__ */ p("span", { children: e.budgetTotal == null ? "No budget set" : `${e.currency ?? ""} ${e.budgetTotal.toLocaleString()}`.trim() })]
|
|
142
|
+
})
|
|
143
|
+
]
|
|
144
|
+
})]
|
|
145
|
+
}, e.id))
|
|
146
|
+
}),
|
|
147
|
+
j.length === 0 && /* @__PURE__ */ p("p", {
|
|
148
|
+
className: "text-center text-muted-foreground py-8",
|
|
149
|
+
children: w !== "all" || E ? "No programs match the selected filters." : "No programs yet. Create one to group related projects together."
|
|
150
|
+
})
|
|
151
|
+
]
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
export { C as ProgramsProgramsPagePage };
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=ProgramsProgramsPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgramsProgramsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProgramsProgramsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Plus, Loader2 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { PROGRAM_STATUSES } from '../controls/ProgramControls';\n\nconst LIST_PROGRAMS = gql`\n query ListPrograms(\n $workspaceId: ID!\n $filter: PlanmagnetProgramFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetPrograms(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n description\n status\n startDate\n endDate\n ownerId\n budgetTotal\n currency\n tags\n updatedAt\n projects {\n id\n }\n }\n totalCount\n }\n }\n`;\n\ninterface ProgramNode {\n id: string;\n name: string;\n description: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n ownerId: string;\n budgetTotal: number | null;\n currency: string | null;\n tags: string[];\n projects: { id: string }[];\n}\n\nexport function ProgramsProgramsPagePage() {\n const navigate = usePlanMagnetNavigate();\n const { workspaceId } = usePlanMagnet();\n const [statusFilter, setStatusFilter] = useState<string>('all');\n const [search, setSearch] = useState('');\n\n const { data, loading, error } = useQuery<{\n planmagnetPrograms: { items: ProgramNode[]; totalCount: number };\n }>(LIST_PROGRAMS, {\n variables: {\n workspaceId,\n pagination: { first: 50 },\n filter: {\n ...(statusFilter !== 'all' ? { status: statusFilter } : {}),\n ...(search.trim() ? { search: search.trim() } : {}),\n },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it and\n // loses their state).\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load programs: {error.message}</div>;\n }\n\n const programs = data?.planmagnetPrograms.items ?? [];\n const totalCount = data?.planmagnetPrograms.totalCount ?? 0;\n const statuses = ['all', ...PROGRAM_STATUSES];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Programs</h1>\n <p className=\"text-sm text-muted-foreground\">\n {totalCount} program{totalCount === 1 ? '' : 's'} across the workspace\n </p>\n </div>\n <Button size=\"sm\" onClick={() => navigate('/products/create-program-page')}>\n <Plus className=\"mr-1 h-4 w-4\" />\n New Program\n </Button>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-4\">\n <Input\n aria-label=\"Search programs\"\n placeholder=\"Search by name…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"max-w-xs\"\n />\n <div className=\"flex items-center gap-2 flex-wrap\">\n {statuses.map((s) => (\n <button\n key={s}\n type=\"button\"\n aria-pressed={statusFilter === s}\n onClick={() => setStatusFilter(s)}\n className={`px-2 py-1 text-xs rounded-md capitalize ${statusFilter === s ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {s === 'all' ? 'All' : enumLabel(s)}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {programs.map((program) => (\n <Card\n key={program.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/program-detail-page', program.id)),\n program.name\n )}\n >\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <FolderKanban className=\"h-4 w-4 text-primary\" />\n {program.name}\n </CardTitle>\n <Badge variant=\"outline\" className=\"text-xs\">\n {enumLabel(program.status)}\n </Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {program.description ?? 'No description'}\n </p>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span>\n {program.projects.length} project{program.projects.length === 1 ? '' : 's'}\n </span>\n {program.startDate && program.endDate && (\n <span>\n {new Date(program.startDate).toLocaleDateString()} -{' '}\n {new Date(program.endDate).toLocaleDateString()}\n </span>\n )}\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground border-t pt-2\">\n <span>\n Owner: <PersonName id={program.ownerId} />\n </span>\n <span>\n {program.budgetTotal != null\n ? `${program.currency ?? ''} ${program.budgetTotal.toLocaleString()}`.trim()\n : 'No budget set'}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n {programs.length === 0 && (\n <p className=\"text-center text-muted-foreground py-8\">\n {statusFilter !== 'all' || search\n ? 'No programs match the selected filters.'\n : 'No programs yet. Create one to group related projects together.'}\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectsEditProjectPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsEditProjectPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProjectsEditProjectPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsEditProjectPagePage.tsx"],"names":[],"mappings":"AAwDA,wBAAgB,2BAA2B,4CA0P1C"}
|