@burdenoff/microfe-planmagnet 2026.928.4 → 2026.928.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/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +130 -97
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +256 -156
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts +5 -0
- package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts.map +1 -0
- package/dist/planmagnet/automation/AutomationExecutionsPanel.js +107 -0
- package/dist/planmagnet/automation/AutomationExecutionsPanel.js.map +1 -0
- package/dist/planmagnet/automation/AutomationRuleFields.d.ts +29 -0
- package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +1 -0
- package/dist/planmagnet/automation/AutomationRuleFields.js +308 -0
- package/dist/planmagnet/automation/AutomationRuleFields.js.map +1 -0
- package/dist/planmagnet/automation/automationRuleTypes.d.ts +60 -0
- package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +1 -0
- package/dist/planmagnet/automation/automationRuleTypes.js +113 -0
- package/dist/planmagnet/automation/automationRuleTypes.js.map +1 -0
- package/dist/planmagnet/board/BulkActions.d.ts +11 -0
- package/dist/planmagnet/board/BulkActions.d.ts.map +1 -0
- package/dist/planmagnet/board/BulkActions.js +182 -0
- package/dist/planmagnet/board/BulkActions.js.map +1 -0
- package/dist/planmagnet/board/ProjectBoard.d.ts.map +1 -1
- package/dist/planmagnet/board/ProjectBoard.js +289 -254
- package/dist/planmagnet/board/ProjectBoard.js.map +1 -1
- package/dist/planmagnet/budgets/BudgetControls.d.ts +30 -0
- package/dist/planmagnet/budgets/BudgetControls.d.ts.map +1 -0
- package/dist/planmagnet/budgets/BudgetControls.js +470 -0
- package/dist/planmagnet/budgets/BudgetControls.js.map +1 -0
- package/dist/planmagnet/budgets/ExpenseControls.d.ts +27 -0
- package/dist/planmagnet/budgets/ExpenseControls.d.ts.map +1 -0
- package/dist/planmagnet/budgets/ExpenseControls.js +366 -0
- package/dist/planmagnet/budgets/ExpenseControls.js.map +1 -0
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts +5 -0
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts.map +1 -0
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.js +112 -0
- package/dist/planmagnet/budgets/ProjectBudgetsSummary.js.map +1 -0
- package/dist/planmagnet/budgets/budgetMath.d.ts +26 -0
- package/dist/planmagnet/budgets/budgetMath.d.ts.map +1 -0
- package/dist/planmagnet/budgets/budgetMath.js +49 -0
- package/dist/planmagnet/budgets/budgetMath.js.map +1 -0
- package/dist/planmagnet/controls/AutomationRuleControls.d.ts +23 -0
- package/dist/planmagnet/controls/AutomationRuleControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/AutomationRuleControls.js +172 -0
- package/dist/planmagnet/controls/AutomationRuleControls.js.map +1 -0
- package/dist/planmagnet/controls/CompetitorControls.js +15 -15
- package/dist/planmagnet/controls/CustomFieldControls.d.ts +42 -0
- package/dist/planmagnet/controls/CustomFieldControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/CustomFieldControls.js +84 -0
- package/dist/planmagnet/controls/CustomFieldControls.js.map +1 -0
- package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts +8 -0
- package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts.map +1 -0
- package/dist/planmagnet/controls/CustomFieldValuesPanel.js +315 -0
- package/dist/planmagnet/controls/CustomFieldValuesPanel.js.map +1 -0
- package/dist/planmagnet/controls/FeatureControls.js +54 -54
- package/dist/planmagnet/controls/ObjectiveControls.js +15 -15
- package/dist/planmagnet/controls/Pickers.d.ts +7 -0
- package/dist/planmagnet/controls/Pickers.d.ts.map +1 -1
- package/dist/planmagnet/controls/Pickers.js +58 -20
- package/dist/planmagnet/controls/Pickers.js.map +1 -1
- package/dist/planmagnet/controls/PortfolioControls.js +7 -7
- package/dist/planmagnet/controls/ProgramControls.js +19 -19
- package/dist/planmagnet/controls/ProjectControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/ProjectControls.js +54 -47
- package/dist/planmagnet/controls/ProjectControls.js.map +1 -1
- package/dist/planmagnet/controls/ReleaseControls.js +7 -7
- package/dist/planmagnet/controls/RiskControls.d.ts +27 -0
- package/dist/planmagnet/controls/RiskControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/RiskControls.js +346 -0
- package/dist/planmagnet/controls/RiskControls.js.map +1 -0
- package/dist/planmagnet/controls/TemplateControls.d.ts +15 -0
- package/dist/planmagnet/controls/TemplateControls.d.ts.map +1 -0
- package/dist/planmagnet/controls/TemplateControls.js +55 -0
- package/dist/planmagnet/controls/TemplateControls.js.map +1 -0
- package/dist/planmagnet/controls/WorkItemControls.d.ts +6 -2
- package/dist/planmagnet/controls/WorkItemControls.d.ts.map +1 -1
- package/dist/planmagnet/controls/WorkItemControls.js +9 -9
- package/dist/planmagnet/controls/WorkItemControls.js.map +1 -1
- package/dist/planmagnet/create/CreateDialogs.d.ts +20 -0
- package/dist/planmagnet/create/CreateDialogs.d.ts.map +1 -1
- package/dist/planmagnet/create/CreateDialogs.js +455 -116
- package/dist/planmagnet/create/CreateDialogs.js.map +1 -1
- package/dist/planmagnet/dependency/DependencyPanel.d.ts +6 -0
- package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +1 -0
- package/dist/planmagnet/dependency/DependencyPanel.js +310 -0
- package/dist/planmagnet/dependency/DependencyPanel.js.map +1 -0
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +171 -0
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js +232 -0
- package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +1 -0
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts +2 -0
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +93 -0
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +1 -0
- package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js +11 -3
- package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +5 -5
- package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +9 -9
- package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +6 -6
- package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +4 -4
- package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +6 -6
- package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +5 -5
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js +315 -0
- package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +186 -0
- package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js +164 -0
- package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js +348 -0
- package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +10 -10
- package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +4 -4
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +20 -10
- package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +13 -8
- package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +76 -56
- 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 +372 -203
- 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 +81 -72
- package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.js +278 -0
- package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js +191 -0
- package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +1 -0
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +168 -122
- package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +5 -5
- package/dist/planmagnet/pages/TasksEditTaskPagePage.js +4 -4
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +161 -137
- 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 +124 -113
- package/dist/planmagnet/pages/TasksTasksPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +263 -0
- package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js +254 -0
- package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.js +165 -0
- package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +288 -91
- package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +1 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +217 -0
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.js +211 -0
- package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.js +118 -0
- package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +1 -0
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js +316 -0
- package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +1 -0
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js +208 -0
- package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +1 -0
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts +0 -5
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +47 -89
- package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +24 -24
- package/dist/planmagnet/sprints/SprintControls.d.ts +15 -3
- package/dist/planmagnet/sprints/SprintControls.d.ts.map +1 -1
- package/dist/planmagnet/sprints/SprintControls.js +293 -190
- package/dist/planmagnet/sprints/SprintControls.js.map +1 -1
- package/dist/planmagnet/team/TeamControls.d.ts +31 -0
- package/dist/planmagnet/team/TeamControls.d.ts.map +1 -0
- package/dist/planmagnet/team/TeamControls.js +407 -0
- package/dist/planmagnet/team/TeamControls.js.map +1 -0
- package/dist/planmagnet/time/TaskTimePanel.d.ts +7 -0
- package/dist/planmagnet/time/TaskTimePanel.d.ts.map +1 -0
- package/dist/planmagnet/time/TaskTimePanel.js +104 -0
- package/dist/planmagnet/time/TaskTimePanel.js.map +1 -0
- package/dist/planmagnet/time/TimeEntryControls.d.ts +37 -0
- package/dist/planmagnet/time/TimeEntryControls.d.ts.map +1 -0
- package/dist/planmagnet/time/TimeEntryControls.js +338 -0
- package/dist/planmagnet/time/TimeEntryControls.js.map +1 -0
- package/dist/planmagnet/time/TimesheetControls.d.ts +18 -0
- package/dist/planmagnet/time/TimesheetControls.d.ts.map +1 -0
- package/dist/planmagnet/time/TimesheetControls.js +244 -0
- package/dist/planmagnet/time/TimesheetControls.js.map +1 -0
- package/dist/planmagnet/time/timeShared.d.ts +29 -0
- package/dist/planmagnet/time/timeShared.d.ts.map +1 -0
- package/dist/planmagnet/time/timeShared.js +34 -0
- package/dist/planmagnet/time/timeShared.js.map +1 -0
- package/dist/planmagnet/utils/rowNavigation.js +5 -2
- package/dist/planmagnet/utils/rowNavigation.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,147 +1,344 @@
|
|
|
1
1
|
import { usePlanMagnet as e, usePlanMagnetNavigate as t } from "../providers/PlanMagnetProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { throwOnError as n } from "../utils/mutationResult.js";
|
|
3
|
+
import { AssigneeSelect as r } from "../controls/WorkItemControls.js";
|
|
4
|
+
import { detailPath as ee } from "../utils/rowNavigation.js";
|
|
5
|
+
import { parseIntField as te } from "../utils/formValidation.js";
|
|
6
|
+
import { TEAM_QUERIES as i } from "../team/TeamControls.js";
|
|
7
|
+
import { useDeferredValue as a, useEffect as ne, useState as o } from "react";
|
|
8
|
+
import { ArrowRight as re, FolderKanban as s, Save as c, Users as l, X as ie } from "lucide-react";
|
|
9
|
+
import { gql as u } from "@apollo/client";
|
|
10
|
+
import { useMutation as d, useQuery as f } from "@apollo/client/react";
|
|
11
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
12
|
+
import { Button as h, Card as g, CardContent as _, CardHeader as v, CardTitle as y, Checkbox as b, Input as x } from "@burdenoff/fe-libs/ui";
|
|
13
|
+
import { useWorkspaceDirectory as ae } from "@burdenoff/fe-libs/sharing";
|
|
8
14
|
//#region src/planmagnet/pages/TeamCreateTeamPagePage.tsx
|
|
9
|
-
var
|
|
15
|
+
var S = u`
|
|
10
16
|
query GetProjectsForTeamCreation($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {
|
|
11
17
|
planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {
|
|
12
18
|
items {
|
|
13
19
|
id
|
|
14
20
|
name
|
|
15
21
|
key
|
|
16
|
-
ownerId
|
|
17
22
|
}
|
|
18
23
|
totalCount
|
|
19
24
|
}
|
|
20
25
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
`, oe = u`
|
|
27
|
+
mutation CreateTeam($input: PlanmagnetCreateTeamInput!) {
|
|
28
|
+
planmagnetCreateTeam(input: $input) {
|
|
29
|
+
id
|
|
30
|
+
name
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
`, se = u`
|
|
34
|
+
mutation CreateTeamAddProjects($id: ID!, $input: PlanmagnetTeamProjectsInput!) {
|
|
35
|
+
planmagnetAddTeamProjects(id: $id, input: $input) {
|
|
36
|
+
id
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
`, ce = u`
|
|
40
|
+
mutation CreateTeamAddMembers($id: ID!, $input: PlanmagnetTeamMembersInput!) {
|
|
41
|
+
planmagnetAddTeamMembers(id: $id, input: $input) {
|
|
42
|
+
id
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
`, C = {
|
|
46
|
+
name: "",
|
|
47
|
+
description: "",
|
|
48
|
+
leadId: "",
|
|
49
|
+
capacity: ""
|
|
50
|
+
};
|
|
51
|
+
function w() {
|
|
52
|
+
let { workspaceId: u, authToken: w, apiGatewayUrl: T } = e(), E = t(), [D, O] = o(C), [k, A] = o(/* @__PURE__ */ new Set()), [j, M] = o(/* @__PURE__ */ new Set()), [N, P] = o(""), F = a(N.trim()), { data: I, loading: L, error: R } = f(S, {
|
|
29
53
|
variables: {
|
|
30
|
-
workspaceId:
|
|
54
|
+
workspaceId: u ?? "",
|
|
31
55
|
pagination: { first: 100 }
|
|
32
56
|
},
|
|
33
|
-
skip: !
|
|
34
|
-
}),
|
|
35
|
-
|
|
57
|
+
skip: !u
|
|
58
|
+
}), z = I?.planmagnetProjects.items ?? [], B = ae({
|
|
59
|
+
workspaceId: u ?? "",
|
|
60
|
+
authToken: w ?? void 0,
|
|
61
|
+
apiGatewayUrl: T ?? void 0
|
|
62
|
+
}), { search: V } = B;
|
|
63
|
+
ne(() => {
|
|
64
|
+
V(F);
|
|
65
|
+
}, [F, V]);
|
|
66
|
+
let [H, { loading: U }] = d(oe, { refetchQueries: i }), [W] = d(se, { refetchQueries: i }), [le] = d(ce, { refetchQueries: i }), [G, K] = o(null), [q, J] = o([]), [Y, X] = o(null), Z = te(D.capacity, { min: 0 }), Q = D.name.trim() === "", ue = U, $ = !Q && !Z.invalid && !ue && !!u, de = (e, t) => A((n) => {
|
|
67
|
+
let r = new Set(n);
|
|
68
|
+
return t ? r.add(e) : r.delete(e), r;
|
|
69
|
+
}), fe = (e, t) => M((n) => {
|
|
70
|
+
let r = new Set(n);
|
|
71
|
+
return t ? r.add(e) : r.delete(e), r;
|
|
72
|
+
});
|
|
73
|
+
return L && !I ? /* @__PURE__ */ p("div", {
|
|
36
74
|
className: "flex items-center justify-center p-12",
|
|
37
|
-
children: /* @__PURE__ */
|
|
38
|
-
}) :
|
|
39
|
-
className: "p-6 text-
|
|
40
|
-
children: ["Error: ",
|
|
41
|
-
}) : /* @__PURE__ */
|
|
75
|
+
children: /* @__PURE__ */ p("div", { className: "animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full" })
|
|
76
|
+
}) : R ? /* @__PURE__ */ m("div", {
|
|
77
|
+
className: "p-6 text-destructive",
|
|
78
|
+
children: ["Error: ", R.message]
|
|
79
|
+
}) : /* @__PURE__ */ m("div", {
|
|
42
80
|
className: "space-y-6 p-6 max-w-4xl",
|
|
43
81
|
children: [
|
|
44
|
-
/* @__PURE__ */
|
|
82
|
+
/* @__PURE__ */ m("div", {
|
|
45
83
|
className: "flex items-center justify-between",
|
|
46
|
-
children: [/* @__PURE__ */
|
|
84
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
|
|
47
85
|
className: "text-2xl font-semibold",
|
|
48
86
|
children: "Create Team"
|
|
49
|
-
}), /* @__PURE__ */
|
|
87
|
+
}), /* @__PURE__ */ p("p", {
|
|
50
88
|
className: "text-sm text-muted-foreground",
|
|
51
|
-
children: "
|
|
52
|
-
})] }), /* @__PURE__ */
|
|
89
|
+
children: "A team can own its own cross-project sprints. Adding someone here does not grant them access to the team's projects — that stays controlled by each person's own workspace role."
|
|
90
|
+
})] }), /* @__PURE__ */ m("div", {
|
|
53
91
|
className: "flex gap-2",
|
|
54
|
-
children: [/* @__PURE__ */
|
|
92
|
+
children: [/* @__PURE__ */ m(h, {
|
|
55
93
|
variant: "outline",
|
|
56
94
|
size: "sm",
|
|
57
|
-
onClick: () =>
|
|
58
|
-
children: [/* @__PURE__ */
|
|
59
|
-
}), /* @__PURE__ */
|
|
95
|
+
onClick: () => E("/team/teams-page"),
|
|
96
|
+
children: [/* @__PURE__ */ p(ie, { className: "mr-1 h-4 w-4" }), "Cancel"]
|
|
97
|
+
}), /* @__PURE__ */ m(h, {
|
|
60
98
|
size: "sm",
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
99
|
+
onClick: async () => {
|
|
100
|
+
if (!$) return;
|
|
101
|
+
K(null), J([]), X(null);
|
|
102
|
+
let e;
|
|
103
|
+
try {
|
|
104
|
+
let t = await n(H({ variables: { input: {
|
|
105
|
+
name: D.name.trim(),
|
|
106
|
+
description: D.description.trim() || void 0,
|
|
107
|
+
leadId: D.leadId || void 0,
|
|
108
|
+
capacity: Z.value
|
|
109
|
+
} } }));
|
|
110
|
+
if (!t.data) throw Error("The team was not created.");
|
|
111
|
+
e = t.data.planmagnetCreateTeam;
|
|
112
|
+
} catch (e) {
|
|
113
|
+
K(e instanceof Error ? e.message : "The team could not be created.");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
let t = [];
|
|
117
|
+
if (k.size > 0) try {
|
|
118
|
+
await n(W({ variables: {
|
|
119
|
+
id: e.id,
|
|
120
|
+
input: { projectIds: [...k] }
|
|
121
|
+
} }));
|
|
122
|
+
} catch (e) {
|
|
123
|
+
t.push(`Projects could not be added: ${e instanceof Error ? e.message : "unknown error"}`);
|
|
124
|
+
}
|
|
125
|
+
if (j.size > 0) try {
|
|
126
|
+
await n(le({ variables: {
|
|
127
|
+
id: e.id,
|
|
128
|
+
input: { actorIds: [...j] }
|
|
129
|
+
} }));
|
|
130
|
+
} catch (e) {
|
|
131
|
+
t.push(`Members could not be added: ${e instanceof Error ? e.message : "unknown error"}`);
|
|
132
|
+
}
|
|
133
|
+
X(e), J(t), O(C), A(/* @__PURE__ */ new Set()), M(/* @__PURE__ */ new Set()), P("");
|
|
134
|
+
},
|
|
135
|
+
disabled: !$,
|
|
136
|
+
"data-testid": "team-create-submit",
|
|
137
|
+
children: [/* @__PURE__ */ p(c, { className: "mr-1 h-4 w-4" }), U ? "Creating…" : "Create Team"]
|
|
64
138
|
})]
|
|
65
139
|
})]
|
|
66
140
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
141
|
+
Y && /* @__PURE__ */ m("div", {
|
|
142
|
+
role: "status",
|
|
143
|
+
className: "rounded-md border border-border bg-muted p-3 text-sm text-status-success-text flex items-center justify-between gap-3",
|
|
144
|
+
"data-testid": "team-created",
|
|
145
|
+
children: [/* @__PURE__ */ m("span", { children: [
|
|
146
|
+
"Team \"",
|
|
147
|
+
Y.name,
|
|
148
|
+
"\" created."
|
|
149
|
+
] }), /* @__PURE__ */ m(h, {
|
|
150
|
+
size: "sm",
|
|
151
|
+
variant: "outline",
|
|
152
|
+
onClick: () => E(ee("/team/team-detail-page", Y.id)),
|
|
153
|
+
children: ["View team", /* @__PURE__ */ p(re, { className: "ml-1 h-4 w-4" })]
|
|
154
|
+
})]
|
|
155
|
+
}),
|
|
156
|
+
q.length > 0 && /* @__PURE__ */ p("div", {
|
|
157
|
+
role: "alert",
|
|
158
|
+
className: "space-y-1",
|
|
159
|
+
children: q.map((e) => /* @__PURE__ */ p("p", {
|
|
160
|
+
className: "text-sm text-destructive",
|
|
161
|
+
children: e
|
|
162
|
+
}, e))
|
|
163
|
+
}),
|
|
164
|
+
G && /* @__PURE__ */ p("p", {
|
|
165
|
+
role: "alert",
|
|
166
|
+
className: "text-sm text-destructive",
|
|
167
|
+
children: G
|
|
73
168
|
}),
|
|
74
|
-
/* @__PURE__ */
|
|
169
|
+
/* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ m(y, {
|
|
75
170
|
className: "flex items-center gap-2",
|
|
76
|
-
children: [/* @__PURE__ */
|
|
77
|
-
}) }), /* @__PURE__ */
|
|
171
|
+
children: [/* @__PURE__ */ p(l, { className: "h-4 w-4" }), "Team Details"]
|
|
172
|
+
}) }), /* @__PURE__ */ m(_, {
|
|
78
173
|
className: "space-y-4",
|
|
79
174
|
children: [
|
|
80
|
-
/* @__PURE__ */
|
|
175
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
176
|
+
htmlFor: "new-team-name",
|
|
81
177
|
className: "text-sm font-medium",
|
|
82
178
|
children: "Team Name"
|
|
83
|
-
}), /* @__PURE__ */
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
179
|
+
}), /* @__PURE__ */ p(x, {
|
|
180
|
+
id: "new-team-name",
|
|
181
|
+
value: D.name,
|
|
182
|
+
onChange: (e) => O({
|
|
183
|
+
...D,
|
|
87
184
|
name: e.target.value
|
|
88
185
|
}),
|
|
186
|
+
"aria-invalid": Q,
|
|
89
187
|
className: "mt-1",
|
|
90
188
|
placeholder: "e.g. Platform Engineering"
|
|
91
189
|
})] }),
|
|
92
|
-
/* @__PURE__ */
|
|
190
|
+
/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
191
|
+
htmlFor: "new-team-description",
|
|
93
192
|
className: "text-sm font-medium",
|
|
94
193
|
children: "Description"
|
|
95
|
-
}), /* @__PURE__ */
|
|
194
|
+
}), /* @__PURE__ */ p("textarea", {
|
|
195
|
+
id: "new-team-description",
|
|
96
196
|
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]",
|
|
97
|
-
value:
|
|
98
|
-
onChange: (e) =>
|
|
99
|
-
...
|
|
197
|
+
value: D.description,
|
|
198
|
+
onChange: (e) => O({
|
|
199
|
+
...D,
|
|
100
200
|
description: e.target.value
|
|
101
201
|
}),
|
|
102
202
|
placeholder: "Describe the team's mission and responsibilities..."
|
|
103
203
|
})] }),
|
|
104
|
-
/* @__PURE__ */
|
|
105
|
-
className: "
|
|
106
|
-
children: "
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
204
|
+
/* @__PURE__ */ m("div", {
|
|
205
|
+
className: "grid grid-cols-2 gap-4",
|
|
206
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
|
|
207
|
+
htmlFor: "new-team-lead",
|
|
208
|
+
className: "text-sm font-medium",
|
|
209
|
+
children: "Team Lead"
|
|
210
|
+
}), /* @__PURE__ */ p("div", {
|
|
211
|
+
className: "mt-1",
|
|
212
|
+
children: /* @__PURE__ */ p(r, {
|
|
213
|
+
id: "new-team-lead",
|
|
214
|
+
value: D.leadId,
|
|
215
|
+
onChange: (e) => O({
|
|
216
|
+
...D,
|
|
217
|
+
leadId: e
|
|
218
|
+
}),
|
|
219
|
+
noneLabel: "No lead"
|
|
220
|
+
})
|
|
221
|
+
})] }), /* @__PURE__ */ m("div", { children: [
|
|
222
|
+
/* @__PURE__ */ p("label", {
|
|
223
|
+
htmlFor: "new-team-capacity",
|
|
224
|
+
className: "text-sm font-medium",
|
|
225
|
+
children: "Capacity (story points)"
|
|
226
|
+
}),
|
|
227
|
+
/* @__PURE__ */ p(x, {
|
|
228
|
+
id: "new-team-capacity",
|
|
229
|
+
type: "number",
|
|
230
|
+
min: 0,
|
|
231
|
+
step: 1,
|
|
232
|
+
value: D.capacity,
|
|
233
|
+
onChange: (e) => O({
|
|
234
|
+
...D,
|
|
235
|
+
capacity: e.target.value
|
|
236
|
+
}),
|
|
237
|
+
"aria-invalid": Z.invalid,
|
|
238
|
+
className: "mt-1",
|
|
239
|
+
placeholder: "e.g. 60"
|
|
240
|
+
}),
|
|
241
|
+
Z.invalid && /* @__PURE__ */ p("p", {
|
|
242
|
+
role: "alert",
|
|
243
|
+
className: "mt-1 text-xs text-destructive",
|
|
244
|
+
children: "Capacity must be a whole number, 0 or more."
|
|
245
|
+
})
|
|
246
|
+
] })]
|
|
247
|
+
})
|
|
248
|
+
]
|
|
249
|
+
})] }),
|
|
250
|
+
/* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ m(y, {
|
|
251
|
+
className: "flex items-center gap-2",
|
|
252
|
+
children: [
|
|
253
|
+
/* @__PURE__ */ p(s, { className: "h-4 w-4" }),
|
|
254
|
+
"Projects (",
|
|
255
|
+
k.size,
|
|
256
|
+
" selected)"
|
|
257
|
+
]
|
|
258
|
+
}) }), /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p("p", {
|
|
259
|
+
className: "text-xs text-muted-foreground mb-2",
|
|
260
|
+
children: "A team sprint can only hold work items from a project checked here. More can be added later from the team page."
|
|
261
|
+
}), /* @__PURE__ */ m("div", {
|
|
262
|
+
className: "max-h-56 overflow-y-auto space-y-1",
|
|
263
|
+
children: [z.length === 0 && /* @__PURE__ */ p("p", {
|
|
264
|
+
className: "text-sm text-muted-foreground py-2",
|
|
265
|
+
children: "No projects in this workspace yet."
|
|
266
|
+
}), z.map((e) => {
|
|
267
|
+
let t = `new-team-project-${e.id}`;
|
|
268
|
+
return /* @__PURE__ */ m("label", {
|
|
269
|
+
htmlFor: t,
|
|
270
|
+
className: "flex items-center gap-3 border rounded-md p-2 text-sm cursor-pointer hover:bg-muted",
|
|
271
|
+
children: [/* @__PURE__ */ p(b, {
|
|
272
|
+
id: t,
|
|
273
|
+
checked: k.has(e.id),
|
|
274
|
+
onCheckedChange: (t) => de(e.id, t === !0)
|
|
275
|
+
}), /* @__PURE__ */ m("span", {
|
|
276
|
+
className: "min-w-0 flex-1 truncate",
|
|
277
|
+
children: [/* @__PURE__ */ p("span", {
|
|
278
|
+
className: "text-muted-foreground mr-2",
|
|
279
|
+
children: e.key
|
|
280
|
+
}), e.name]
|
|
281
|
+
})]
|
|
282
|
+
}, e.id);
|
|
283
|
+
})]
|
|
284
|
+
})] })] }),
|
|
285
|
+
/* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(v, { children: /* @__PURE__ */ m(y, {
|
|
286
|
+
className: "flex items-center gap-2",
|
|
287
|
+
children: [
|
|
288
|
+
/* @__PURE__ */ p(l, { className: "h-4 w-4" }),
|
|
289
|
+
"Members (",
|
|
290
|
+
j.size,
|
|
291
|
+
" selected)"
|
|
292
|
+
]
|
|
293
|
+
}) }), /* @__PURE__ */ m(_, {
|
|
294
|
+
className: "space-y-2",
|
|
295
|
+
children: [/* @__PURE__ */ p(x, {
|
|
296
|
+
value: N,
|
|
297
|
+
onChange: (e) => P(e.target.value),
|
|
298
|
+
placeholder: "Search workspace members",
|
|
299
|
+
"aria-label": "Search workspace members"
|
|
300
|
+
}), /* @__PURE__ */ m("div", {
|
|
301
|
+
className: "max-h-56 overflow-y-auto space-y-1",
|
|
302
|
+
children: [
|
|
303
|
+
B.loading && B.members.length === 0 && /* @__PURE__ */ p("p", {
|
|
304
|
+
className: "text-sm text-muted-foreground py-2",
|
|
305
|
+
children: "Loading members…"
|
|
112
306
|
}),
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("label", {
|
|
117
|
-
className: "text-sm font-medium",
|
|
118
|
-
children: "Associated Project (optional)"
|
|
119
|
-
}), /* @__PURE__ */ l("select", {
|
|
120
|
-
className: "mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm",
|
|
121
|
-
value: v.projectId,
|
|
122
|
-
onChange: (e) => y({
|
|
123
|
-
...v,
|
|
124
|
-
projectId: e.target.value
|
|
307
|
+
!B.loading && B.members.length === 0 && /* @__PURE__ */ p("p", {
|
|
308
|
+
className: "text-sm text-muted-foreground py-2",
|
|
309
|
+
children: "No matching members."
|
|
125
310
|
}),
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
311
|
+
B.members.map((e) => {
|
|
312
|
+
let t = `new-team-member-${e.id}`;
|
|
313
|
+
return /* @__PURE__ */ m("label", {
|
|
314
|
+
htmlFor: t,
|
|
315
|
+
className: "flex items-center gap-3 border rounded-md p-2 text-sm cursor-pointer hover:bg-muted",
|
|
316
|
+
children: [/* @__PURE__ */ p(b, {
|
|
317
|
+
id: t,
|
|
318
|
+
checked: j.has(e.id),
|
|
319
|
+
onCheckedChange: (t) => fe(e.id, t === !0)
|
|
320
|
+
}), /* @__PURE__ */ m("span", {
|
|
321
|
+
className: "min-w-0 flex-1 truncate",
|
|
322
|
+
children: [e.name, e.email && /* @__PURE__ */ m("span", {
|
|
323
|
+
className: "text-muted-foreground",
|
|
324
|
+
children: [" · ", e.email]
|
|
325
|
+
})]
|
|
326
|
+
})]
|
|
327
|
+
}, e.id);
|
|
328
|
+
}),
|
|
329
|
+
B.hasMore && /* @__PURE__ */ p("button", {
|
|
330
|
+
type: "button",
|
|
331
|
+
className: "w-full py-1 text-xs text-primary hover:underline",
|
|
332
|
+
onClick: B.fetchMore,
|
|
333
|
+
children: "Show more members"
|
|
334
|
+
})
|
|
335
|
+
]
|
|
336
|
+
})]
|
|
140
337
|
})] })
|
|
141
338
|
]
|
|
142
339
|
});
|
|
143
340
|
}
|
|
144
341
|
//#endregion
|
|
145
|
-
export {
|
|
342
|
+
export { w as TeamCreateTeamPagePage };
|
|
146
343
|
|
|
147
344
|
//# sourceMappingURL=TeamCreateTeamPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamCreateTeamPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TeamCreateTeamPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, Users } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\nconst GET_PROJECTS_FOR_TEAM = gql`\n query GetProjectsForTeamCreation($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n name\n key\n ownerId\n }\n totalCount\n }\n }\n`;\n\ninterface ProjectNode {\n id: string;\n name: string;\n key: string;\n ownerId: string | null;\n}\n\ninterface ProjectsData {\n projects: { items: ProjectNode[]; totalCount: number };\n}\n\nexport function TeamCreateTeamPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const [form, setForm] = useState({ name: '', description: '', lead: '', projectId: '' });\n\n const { data, loading, error } = useQuery<ProjectsData>(GET_PROJECTS_FOR_TEAM, {\n variables: {\n workspaceId,\n pagination: { first: 100 },\n },\n skip: !workspaceId,\n });\n\n const projects = data?.planmagnetProjects?.items ?? [];\n\n // NOTE: there is no Team model in wspace-planmagnet-svc, so this form has nothing\n // to save to. It previously had a handler that navigated to '/team' on submit,\n // which read as a successful save — the user filled the form, was redirected, and\n // nothing was persisted. The submit control is disabled until the model exists\n // (BOFF-7822); the notice above the form says so.\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-red-500\">Error: {error.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Team</h1>\n <p className=\"text-sm text-muted-foreground\">\n Set up a new team with members and a lead.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/team/team-page')}>\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button size=\"sm\" disabled title=\"Not available yet — see the notice below\">\n <Save className=\"mr-1 h-4 w-4\" />\n Create Team\n </Button>\n </div>\n </div>\n <div className=\"rounded-md border border-border bg-muted p-4 text-sm text-muted-foreground\">\n <strong className=\"text-foreground\">Not available yet.</strong> Teams cannot be saved —\n there is no team model behind this form. It is shown so the fields and options are visible,\n but nothing entered here is stored. This page previously returned you to the list on submit,\n which looked like it had saved.\n </div>\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n Team Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Team Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Platform Engineering\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe the team's mission and responsibilities...\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Team Lead</label>\n <Input\n value={form.lead}\n onChange={(e) => setForm({ ...form, lead: e.target.value })}\n className=\"mt-1\"\n placeholder=\"Team lead name or email\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Associated Project (optional)</label>\n <select\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.projectId}\n onChange={(e) => setForm({ ...form, projectId: e.target.value })}\n >\n <option value=\"\">No project</option>\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name} ({p.key})\n </option>\n ))}\n </select>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TeamCreateTeamPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/TeamCreateTeamPagePage.tsx"],"sourcesContent":["import { useDeferredValue, useEffect, useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { useWorkspaceDirectory } from '@burdenoff/fe-libs/sharing';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Button,\n Input,\n Checkbox,\n} from '@burdenoff/fe-libs/ui';\nimport { Save, X, Users, FolderKanban, ArrowRight } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { throwOnError } from '../utils/mutationResult';\nimport { parseIntField } from '../utils/formValidation';\nimport { AssigneeSelect } from '../controls/WorkItemControls';\nimport { TEAM_QUERIES } from '../team/TeamControls';\n\n/**\n * Create Team (BOFF-8044). Rebuilt: there was no Team model behind this form (BOFF-7822), so it could not save\n * anything — Submit was disabled and the page said so. The model now exists; this wires the real mutation, plus\n * inline member and project pickers so a team can start populated instead of being created empty every time.\n */\n\nconst GET_PROJECTS_FOR_TEAM = gql`\n query GetProjectsForTeamCreation($workspaceId: ID!, $pagination: PlanmagnetPaginationInput) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: $pagination) {\n items {\n id\n name\n key\n }\n totalCount\n }\n }\n`;\n\nconst CREATE_TEAM = gql`\n mutation CreateTeam($input: PlanmagnetCreateTeamInput!) {\n planmagnetCreateTeam(input: $input) {\n id\n name\n }\n }\n`;\nconst ADD_TEAM_PROJECTS = gql`\n mutation CreateTeamAddProjects($id: ID!, $input: PlanmagnetTeamProjectsInput!) {\n planmagnetAddTeamProjects(id: $id, input: $input) {\n id\n }\n }\n`;\nconst ADD_TEAM_MEMBERS = gql`\n mutation CreateTeamAddMembers($id: ID!, $input: PlanmagnetTeamMembersInput!) {\n planmagnetAddTeamMembers(id: $id, input: $input) {\n id\n }\n }\n`;\n\ninterface ProjectOption {\n id: string;\n name: string;\n key: string;\n}\n\nconst EMPTY_FORM = { name: '', description: '', leadId: '', capacity: '' };\n\nexport function TeamCreateTeamPagePage() {\n const { workspaceId, authToken, apiGatewayUrl } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n\n const [form, setForm] = useState(EMPTY_FORM);\n const [projectIds, setProjectIds] = useState<Set<string>>(new Set());\n const [memberIds, setMemberIds] = useState<Set<string>>(new Set());\n const [memberSearch, setMemberSearch] = useState('');\n const deferredMemberSearch = useDeferredValue(memberSearch.trim());\n\n const { data, loading, error } = useQuery<{\n planmagnetProjects: { items: ProjectOption[]; totalCount: number };\n }>(GET_PROJECTS_FOR_TEAM, {\n variables: { workspaceId: workspaceId ?? '', pagination: { first: 100 } },\n skip: !workspaceId,\n });\n const projects = data?.planmagnetProjects.items ?? [];\n\n const directory = useWorkspaceDirectory({\n workspaceId: workspaceId ?? '',\n authToken: authToken ?? undefined,\n apiGatewayUrl: apiGatewayUrl ?? undefined,\n });\n const { search: setDirectoryFilter } = directory;\n useEffect(() => {\n setDirectoryFilter(deferredMemberSearch);\n }, [deferredMemberSearch, setDirectoryFilter]);\n\n const [createTeam, { loading: creating }] = useMutation<{\n planmagnetCreateTeam: { id: string; name: string };\n }>(CREATE_TEAM, { refetchQueries: TEAM_QUERIES });\n const [addProjects] = useMutation(ADD_TEAM_PROJECTS, { refetchQueries: TEAM_QUERIES });\n const [addMembers] = useMutation(ADD_TEAM_MEMBERS, { refetchQueries: TEAM_QUERIES });\n\n const [formError, setFormError] = useState<string | null>(null);\n const [attachWarnings, setAttachWarnings] = useState<string[]>([]);\n const [created, setCreated] = useState<{ id: string; name: string } | null>(null);\n\n const capacity = parseIntField(form.capacity, { min: 0 });\n const nameInvalid = form.name.trim() === '';\n const busy = creating;\n const canSubmit = !nameInvalid && !capacity.invalid && !busy && !!workspaceId;\n\n const toggleProject = (id: string, checked: boolean) =>\n setProjectIds((prev) => {\n const next = new Set(prev);\n if (checked) next.add(id);\n else next.delete(id);\n return next;\n });\n const toggleMember = (id: string, checked: boolean) =>\n setMemberIds((prev) => {\n const next = new Set(prev);\n if (checked) next.add(id);\n else next.delete(id);\n return next;\n });\n\n const handleCreate = async () => {\n if (!canSubmit) return;\n setFormError(null);\n setAttachWarnings([]);\n setCreated(null);\n let team: { id: string; name: string };\n try {\n const result = await throwOnError(\n createTeam({\n variables: {\n input: {\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n leadId: form.leadId || undefined,\n capacity: capacity.value,\n },\n },\n })\n );\n if (!result.data) throw new Error('The team was not created.');\n team = result.data.planmagnetCreateTeam;\n } catch (e) {\n setFormError(e instanceof Error ? e.message : 'The team could not be created.');\n return;\n }\n\n // The team exists now — a project or member that fails to attach is fixable from the team's\n // own detail page, so it is reported here, not treated as the create having failed.\n const warnings: string[] = [];\n if (projectIds.size > 0) {\n try {\n await throwOnError(\n addProjects({ variables: { id: team.id, input: { projectIds: [...projectIds] } } })\n );\n } catch (e) {\n warnings.push(\n `Projects could not be added: ${e instanceof Error ? e.message : 'unknown error'}`\n );\n }\n }\n if (memberIds.size > 0) {\n try {\n await throwOnError(\n addMembers({ variables: { id: team.id, input: { actorIds: [...memberIds] } } })\n );\n } catch (e) {\n warnings.push(\n `Members could not be added: ${e instanceof Error ? e.message : 'unknown error'}`\n );\n }\n }\n\n setCreated(team);\n setAttachWarnings(warnings);\n setForm(EMPTY_FORM);\n setProjectIds(new Set());\n setMemberIds(new Set());\n setMemberSearch('');\n };\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"animate-spin h-8 w-8 border-2 border-primary border-t-transparent rounded-full\" />\n </div>\n );\n }\n if (error) {\n return <div className=\"p-6 text-destructive\">Error: {error.message}</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Team</h1>\n <p className=\"text-sm text-muted-foreground\">\n A team can own its own cross-project sprints. Adding someone here does not grant them\n access to the team's projects — that stays controlled by each person's own\n workspace role.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/team/teams-page')}>\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleCreate}\n disabled={!canSubmit}\n data-testid=\"team-create-submit\"\n >\n <Save className=\"mr-1 h-4 w-4\" />\n {creating ? 'Creating…' : 'Create Team'}\n </Button>\n </div>\n </div>\n\n {created && (\n <div\n role=\"status\"\n className=\"rounded-md border border-border bg-muted p-3 text-sm text-status-success-text flex items-center justify-between gap-3\"\n data-testid=\"team-created\"\n >\n <span>Team "{created.name}" created.</span>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => navigate(detailPath('/team/team-detail-page', created.id))}\n >\n View team\n <ArrowRight className=\"ml-1 h-4 w-4\" />\n </Button>\n </div>\n )}\n {attachWarnings.length > 0 && (\n <div role=\"alert\" className=\"space-y-1\">\n {attachWarnings.map((w) => (\n <p key={w} className=\"text-sm text-destructive\">\n {w}\n </p>\n ))}\n </div>\n )}\n {formError && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {formError}\n </p>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n Team Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label htmlFor=\"new-team-name\" className=\"text-sm font-medium\">\n Team Name\n </label>\n <Input\n id=\"new-team-name\"\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n aria-invalid={nameInvalid}\n className=\"mt-1\"\n placeholder=\"e.g. Platform Engineering\"\n />\n </div>\n <div>\n <label htmlFor=\"new-team-description\" className=\"text-sm font-medium\">\n Description\n </label>\n <textarea\n id=\"new-team-description\"\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe the team's mission and responsibilities...\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label htmlFor=\"new-team-lead\" className=\"text-sm font-medium\">\n Team Lead\n </label>\n <div className=\"mt-1\">\n <AssigneeSelect\n id=\"new-team-lead\"\n value={form.leadId}\n onChange={(next) => setForm({ ...form, leadId: next })}\n noneLabel=\"No lead\"\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"new-team-capacity\" className=\"text-sm font-medium\">\n Capacity (story points)\n </label>\n <Input\n id=\"new-team-capacity\"\n type=\"number\"\n min={0}\n step={1}\n value={form.capacity}\n onChange={(e) => setForm({ ...form, capacity: e.target.value })}\n aria-invalid={capacity.invalid}\n className=\"mt-1\"\n placeholder=\"e.g. 60\"\n />\n {capacity.invalid && (\n <p role=\"alert\" className=\"mt-1 text-xs text-destructive\">\n Capacity must be a whole number, 0 or more.\n </p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-4 w-4\" />\n Projects ({projectIds.size} selected)\n </CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-xs text-muted-foreground mb-2\">\n A team sprint can only hold work items from a project checked here. More can be added\n later from the team page.\n </p>\n <div className=\"max-h-56 overflow-y-auto space-y-1\">\n {projects.length === 0 && (\n <p className=\"text-sm text-muted-foreground py-2\">\n No projects in this workspace yet.\n </p>\n )}\n {projects.map((p) => {\n const inputId = `new-team-project-${p.id}`;\n return (\n <label\n key={p.id}\n htmlFor={inputId}\n className=\"flex items-center gap-3 border rounded-md p-2 text-sm cursor-pointer hover:bg-muted\"\n >\n <Checkbox\n id={inputId}\n checked={projectIds.has(p.id)}\n onCheckedChange={(checked) => toggleProject(p.id, checked === true)}\n />\n <span className=\"min-w-0 flex-1 truncate\">\n <span className=\"text-muted-foreground mr-2\">{p.key}</span>\n {p.name}\n </span>\n </label>\n );\n })}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n Members ({memberIds.size} selected)\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <Input\n value={memberSearch}\n onChange={(e) => setMemberSearch(e.target.value)}\n placeholder=\"Search workspace members\"\n aria-label=\"Search workspace members\"\n />\n <div className=\"max-h-56 overflow-y-auto space-y-1\">\n {directory.loading && directory.members.length === 0 && (\n <p className=\"text-sm text-muted-foreground py-2\">Loading members…</p>\n )}\n {!directory.loading && directory.members.length === 0 && (\n <p className=\"text-sm text-muted-foreground py-2\">No matching members.</p>\n )}\n {directory.members.map((m) => {\n const inputId = `new-team-member-${m.id}`;\n return (\n <label\n key={m.id}\n htmlFor={inputId}\n className=\"flex items-center gap-3 border rounded-md p-2 text-sm cursor-pointer hover:bg-muted\"\n >\n <Checkbox\n id={inputId}\n checked={memberIds.has(m.id)}\n onCheckedChange={(checked) => toggleMember(m.id, checked === true)}\n />\n <span className=\"min-w-0 flex-1 truncate\">\n {m.name}\n {m.email && <span className=\"text-muted-foreground\"> · {m.email}</span>}\n </span>\n </label>\n );\n })}\n {directory.hasMore && (\n <button\n type=\"button\"\n className=\"w-full py-1 text-xs text-primary hover:underline\"\n onClick={directory.fetchMore}\n >\n Show more members\n </button>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeamTeamDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/TeamTeamDetailPagePage.tsx"],"names":[],"mappings":"AA2FA,wBAAgB,sBAAsB,4CAqLrC"}
|