@burdenoff/microfe-crewfoundry 2026.704.3 → 2026.704.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/crewfoundry/pages/AdminAdminPagePage.js +76 -75
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +118 -117
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +115 -114
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +105 -104
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +52 -51
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +94 -93
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +97 -96
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +68 -67
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +96 -95
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +153 -152
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +111 -110
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +77 -76
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +80 -79
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +102 -101
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +126 -125
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +64 -63
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +96 -95
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +129 -127
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +118 -117
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +123 -122
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +77 -76
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +49 -48
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +62 -61
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +72 -71
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +70 -69
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +57 -56
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +58 -57
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +122 -121
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +2 -2
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +70 -69
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +41 -40
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +65 -64
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +75 -74
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +4 -4
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +60 -59
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +53 -52
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +37 -36
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +126 -125
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +62 -61
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +50 -49
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +72 -71
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +40 -39
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +134 -133
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +60 -59
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js +177 -146
- package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
- package/dist/crewfoundry/utils/formatEnumLabel.js +8 -0
- package/dist/crewfoundry/utils/formatEnumLabel.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,123 +1,124 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
|
|
3
|
+
import { BarChart3 as n, Calendar as r, FolderKanban as i, Settings as a, Star as o, Users as s } from "lucide-react";
|
|
4
|
+
import { useNavigate as c, useSearchParams as l } from "react-router-dom";
|
|
5
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
6
|
+
import { Badge as f, Card as p, CardContent as m, CardHeader as h, CardTitle as g, EmphasisPanel as _, GradientText as v, IllustratedEmptyState as y, NextSteps as b, PagePurpose as x, ResponsiveTable as S } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/crewfoundry/pages/TeamsTeamDetailPagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let
|
|
9
|
-
if (!
|
|
8
|
+
function C() {
|
|
9
|
+
let C = c(), [w] = l(), { teams: T, employees: E, projects: D } = e(), O = w.get("id"), k = T.find((e) => e.id === O) ?? T[0];
|
|
10
|
+
if (!k) return /* @__PURE__ */ u("div", {
|
|
10
11
|
className: "p-6",
|
|
11
|
-
children: /* @__PURE__ */
|
|
12
|
+
children: /* @__PURE__ */ u(y, {
|
|
12
13
|
illustration: "empty-search",
|
|
13
14
|
title: "Team not found",
|
|
14
15
|
description: "This team is no longer available."
|
|
15
16
|
})
|
|
16
17
|
});
|
|
17
|
-
let
|
|
18
|
-
return /* @__PURE__ */
|
|
18
|
+
let A = E.filter((e) => k.members.includes(e.id)), j = D.filter((e) => e.teamId === k.id);
|
|
19
|
+
return /* @__PURE__ */ d("div", {
|
|
19
20
|
className: "space-y-6 p-6 max-w-4xl",
|
|
20
21
|
children: [
|
|
21
|
-
/* @__PURE__ */
|
|
22
|
+
/* @__PURE__ */ d("div", {
|
|
22
23
|
className: "flex items-center justify-between",
|
|
23
|
-
children: [/* @__PURE__ */
|
|
24
|
-
/* @__PURE__ */
|
|
24
|
+
children: [/* @__PURE__ */ d("div", { children: [
|
|
25
|
+
/* @__PURE__ */ u("h1", {
|
|
25
26
|
className: "text-2xl font-semibold",
|
|
26
|
-
children: /* @__PURE__ */
|
|
27
|
+
children: /* @__PURE__ */ u(v, { children: k.name })
|
|
27
28
|
}),
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ u("p", {
|
|
29
30
|
className: "text-sm text-text-secondary",
|
|
30
|
-
children:
|
|
31
|
+
children: k.description
|
|
31
32
|
}),
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ u(x, {
|
|
33
34
|
className: "mt-2",
|
|
34
35
|
children: "A complete view of one team — who's on it, what they're working on, and how they're performing — so you can support the group and keep its projects on track."
|
|
35
36
|
})
|
|
36
|
-
] }), /* @__PURE__ */
|
|
37
|
-
variant:
|
|
38
|
-
children:
|
|
37
|
+
] }), /* @__PURE__ */ u(f, {
|
|
38
|
+
variant: k.status === "active" ? "default" : "secondary",
|
|
39
|
+
children: t(k.status)
|
|
39
40
|
})]
|
|
40
41
|
}),
|
|
41
|
-
/* @__PURE__ */
|
|
42
|
+
/* @__PURE__ */ u(b, {
|
|
42
43
|
storageKey: "crewfoundry-team-details",
|
|
43
44
|
steps: [
|
|
44
45
|
{
|
|
45
46
|
id: "analytics",
|
|
46
47
|
label: "View team analytics",
|
|
47
48
|
description: "See productivity and workload trends for this team.",
|
|
48
|
-
icon: /* @__PURE__ */
|
|
49
|
-
onClick: () =>
|
|
49
|
+
icon: /* @__PURE__ */ u(n, { className: "h-4 w-4" }),
|
|
50
|
+
onClick: () => C("../teams/team-analytics-page")
|
|
50
51
|
},
|
|
51
52
|
{
|
|
52
53
|
id: "settings",
|
|
53
54
|
label: "Adjust team settings",
|
|
54
55
|
description: "Manage membership, permissions, and preferences.",
|
|
55
|
-
icon: /* @__PURE__ */
|
|
56
|
-
onClick: () =>
|
|
56
|
+
icon: /* @__PURE__ */ u(a, { className: "h-4 w-4" }),
|
|
57
|
+
onClick: () => C(`../teams/team-settings-page?id=${encodeURIComponent(k.id)}`)
|
|
57
58
|
},
|
|
58
59
|
{
|
|
59
60
|
id: "directory",
|
|
60
61
|
label: "Browse all teams",
|
|
61
62
|
description: "Explore how the rest of the organization is structured.",
|
|
62
|
-
icon: /* @__PURE__ */
|
|
63
|
-
onClick: () =>
|
|
63
|
+
icon: /* @__PURE__ */ u(s, { className: "h-4 w-4" }),
|
|
64
|
+
onClick: () => C("../teams/team-directory-page")
|
|
64
65
|
}
|
|
65
66
|
]
|
|
66
67
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
+
/* @__PURE__ */ d("div", {
|
|
68
69
|
className: "grid gap-4 md:grid-cols-4",
|
|
69
70
|
children: [
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ u(p, { children: /* @__PURE__ */ d(m, {
|
|
71
72
|
className: "p-4 text-center",
|
|
72
73
|
children: [
|
|
73
|
-
/* @__PURE__ */
|
|
74
|
-
/* @__PURE__ */
|
|
74
|
+
/* @__PURE__ */ u(s, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
75
|
+
/* @__PURE__ */ u("p", {
|
|
75
76
|
className: "text-lg font-bold",
|
|
76
|
-
children:
|
|
77
|
+
children: k.memberCount
|
|
77
78
|
}),
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
+
/* @__PURE__ */ u("p", {
|
|
79
80
|
className: "text-xs text-text-secondary",
|
|
80
81
|
children: "Members"
|
|
81
82
|
})
|
|
82
83
|
]
|
|
83
84
|
}) }),
|
|
84
|
-
/* @__PURE__ */
|
|
85
|
+
/* @__PURE__ */ u(p, { children: /* @__PURE__ */ d(m, {
|
|
85
86
|
className: "p-4 text-center",
|
|
86
87
|
children: [
|
|
87
|
-
/* @__PURE__ */
|
|
88
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ u(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
89
|
+
/* @__PURE__ */ u("p", {
|
|
89
90
|
className: "text-lg font-bold",
|
|
90
|
-
children:
|
|
91
|
+
children: k.projectCount
|
|
91
92
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
93
|
+
/* @__PURE__ */ u("p", {
|
|
93
94
|
className: "text-xs text-text-secondary",
|
|
94
95
|
children: "Projects"
|
|
95
96
|
})
|
|
96
97
|
]
|
|
97
98
|
}) }),
|
|
98
|
-
/* @__PURE__ */
|
|
99
|
+
/* @__PURE__ */ u(p, { children: /* @__PURE__ */ d(m, {
|
|
99
100
|
className: "p-4 text-center",
|
|
100
101
|
children: [
|
|
101
|
-
/* @__PURE__ */
|
|
102
|
-
/* @__PURE__ */
|
|
102
|
+
/* @__PURE__ */ u(o, { className: "h-5 w-5 mx-auto text-status-warning-text mb-1" }),
|
|
103
|
+
/* @__PURE__ */ u("p", {
|
|
103
104
|
className: "text-lg font-bold",
|
|
104
|
-
children:
|
|
105
|
+
children: k.leadName
|
|
105
106
|
}),
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ u("p", {
|
|
107
108
|
className: "text-xs text-text-secondary",
|
|
108
109
|
children: "Lead"
|
|
109
110
|
})
|
|
110
111
|
]
|
|
111
112
|
}) }),
|
|
112
|
-
/* @__PURE__ */
|
|
113
|
+
/* @__PURE__ */ u(p, { children: /* @__PURE__ */ d(m, {
|
|
113
114
|
className: "p-4 text-center",
|
|
114
115
|
children: [
|
|
115
|
-
/* @__PURE__ */
|
|
116
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ u(r, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
117
|
+
/* @__PURE__ */ u("p", {
|
|
117
118
|
className: "text-lg font-bold",
|
|
118
|
-
children:
|
|
119
|
+
children: k.createdAt
|
|
119
120
|
}),
|
|
120
|
-
/* @__PURE__ */
|
|
121
|
+
/* @__PURE__ */ u("p", {
|
|
121
122
|
className: "text-xs text-text-secondary",
|
|
122
123
|
children: "Created"
|
|
123
124
|
})
|
|
@@ -125,20 +126,20 @@ function S() {
|
|
|
125
126
|
}) })
|
|
126
127
|
]
|
|
127
128
|
}),
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ d(_, { children: [/* @__PURE__ */ u("div", {
|
|
129
130
|
className: "mb-2 text-lg font-semibold",
|
|
130
131
|
children: "Team Members"
|
|
131
|
-
}),
|
|
132
|
+
}), A.length === 0 ? /* @__PURE__ */ u(y, {
|
|
132
133
|
illustration: "empty-people",
|
|
133
134
|
title: "No members yet",
|
|
134
135
|
description: "Add people to this team to start collaborating."
|
|
135
|
-
}) : /* @__PURE__ */
|
|
136
|
+
}) : /* @__PURE__ */ u(S, {
|
|
136
137
|
columns: [
|
|
137
138
|
{
|
|
138
139
|
key: "name",
|
|
139
140
|
header: "Name",
|
|
140
141
|
priority: "primary",
|
|
141
|
-
cell: (e) => /* @__PURE__ */
|
|
142
|
+
cell: (e) => /* @__PURE__ */ d("span", {
|
|
142
143
|
className: "font-medium text-text-primary",
|
|
143
144
|
children: [
|
|
144
145
|
e.firstName,
|
|
@@ -151,7 +152,7 @@ function S() {
|
|
|
151
152
|
key: "position",
|
|
152
153
|
header: "Position",
|
|
153
154
|
priority: "secondary",
|
|
154
|
-
cell: (e) => /* @__PURE__ */
|
|
155
|
+
cell: (e) => /* @__PURE__ */ u("span", {
|
|
155
156
|
className: "text-text-secondary",
|
|
156
157
|
children: e.position
|
|
157
158
|
})
|
|
@@ -160,64 +161,64 @@ function S() {
|
|
|
160
161
|
key: "performance",
|
|
161
162
|
header: "Performance",
|
|
162
163
|
priority: "secondary",
|
|
163
|
-
cell: (e) => /* @__PURE__ */
|
|
164
|
+
cell: (e) => /* @__PURE__ */ d("span", {
|
|
164
165
|
className: "flex items-center gap-1 md:justify-center",
|
|
165
|
-
children: [/* @__PURE__ */
|
|
166
|
+
children: [/* @__PURE__ */ u(o, { className: "h-3 w-3 text-status-warning-text" }), e.performanceScore]
|
|
166
167
|
})
|
|
167
168
|
},
|
|
168
169
|
{
|
|
169
170
|
key: "status",
|
|
170
171
|
header: "Status",
|
|
171
172
|
priority: "primary",
|
|
172
|
-
cell: (e) => /* @__PURE__ */
|
|
173
|
+
cell: (e) => /* @__PURE__ */ u(f, {
|
|
173
174
|
variant: e.status === "active" ? "default" : "secondary",
|
|
174
175
|
className: "text-[10px]",
|
|
175
|
-
children: e.status
|
|
176
|
+
children: t(e.status)
|
|
176
177
|
})
|
|
177
178
|
}
|
|
178
179
|
],
|
|
179
|
-
data:
|
|
180
|
+
data: A,
|
|
180
181
|
rowKey: (e) => e.id
|
|
181
182
|
})] }),
|
|
182
|
-
|
|
183
|
+
j.length > 0 && /* @__PURE__ */ d(p, { children: [/* @__PURE__ */ u(h, { children: /* @__PURE__ */ u(g, { children: "Team Projects" }) }), /* @__PURE__ */ u(m, {
|
|
183
184
|
className: "space-y-3",
|
|
184
|
-
children:
|
|
185
|
+
children: j.map((e) => /* @__PURE__ */ d("div", {
|
|
185
186
|
role: "button",
|
|
186
187
|
tabIndex: 0,
|
|
187
188
|
"aria-label": `Open ${e.name} project detail`,
|
|
188
|
-
onClick: () =>
|
|
189
|
+
onClick: () => C(`../projects/project-details-page?id=${encodeURIComponent(e.id)}`),
|
|
189
190
|
onKeyDown: (t) => {
|
|
190
|
-
(t.key === "Enter" || t.key === " ") && (t.preventDefault(),
|
|
191
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), C(`../projects/project-details-page?id=${encodeURIComponent(e.id)}`));
|
|
191
192
|
},
|
|
192
193
|
className: "flex items-center justify-between rounded border p-3 cursor-pointer hover:bg-bg-sunken/50 focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]",
|
|
193
|
-
children: [/* @__PURE__ */
|
|
194
|
+
children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
|
|
194
195
|
className: "text-sm font-medium",
|
|
195
196
|
children: e.name
|
|
196
|
-
}), /* @__PURE__ */
|
|
197
|
+
}), /* @__PURE__ */ d("p", {
|
|
197
198
|
className: "text-xs text-text-secondary",
|
|
198
199
|
children: [
|
|
199
200
|
e.startDate,
|
|
200
201
|
" — ",
|
|
201
202
|
e.endDate
|
|
202
203
|
]
|
|
203
|
-
})] }), /* @__PURE__ */
|
|
204
|
+
})] }), /* @__PURE__ */ d("div", {
|
|
204
205
|
className: "flex items-center gap-2",
|
|
205
206
|
children: [
|
|
206
|
-
/* @__PURE__ */
|
|
207
|
+
/* @__PURE__ */ u("div", {
|
|
207
208
|
className: "w-24 h-2 bg-bg-sunken rounded overflow-hidden",
|
|
208
|
-
children: /* @__PURE__ */
|
|
209
|
+
children: /* @__PURE__ */ u("div", {
|
|
209
210
|
className: "h-2 bg-action-primary-bg rounded",
|
|
210
211
|
style: { width: `${e.progress}%` }
|
|
211
212
|
})
|
|
212
213
|
}),
|
|
213
|
-
/* @__PURE__ */
|
|
214
|
+
/* @__PURE__ */ d("span", {
|
|
214
215
|
className: "text-xs",
|
|
215
216
|
children: [e.progress, "%"]
|
|
216
217
|
}),
|
|
217
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ u(f, {
|
|
218
219
|
variant: e.status === "active" ? "default" : "secondary",
|
|
219
220
|
className: "text-[10px]",
|
|
220
|
-
children: e.status
|
|
221
|
+
children: t(e.status)
|
|
221
222
|
})
|
|
222
223
|
]
|
|
223
224
|
})]
|
|
@@ -227,6 +228,6 @@ function S() {
|
|
|
227
228
|
});
|
|
228
229
|
}
|
|
229
230
|
//#endregion
|
|
230
|
-
export {
|
|
231
|
+
export { C as TeamsTeamDetailPagePage };
|
|
231
232
|
|
|
232
233
|
//# sourceMappingURL=TeamsTeamDetailPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamsTeamDetailPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDetailPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n ResponsiveTable,\n type ResponsiveTableColumn,\n} from '@burdenoff/fe-libs/ui';\nimport { BarChart3, Calendar, FolderKanban, Settings, Star, Users } from 'lucide-react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { useCrewFoundryStore, type Employee } from '../store/crewfoundryStore';\n\nexport function TeamsTeamDetailPagePage() {\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const { teams, employees, projects } = useCrewFoundryStore();\n const teamId = searchParams.get('id');\n const team = teams.find((t) => t.id === teamId) ?? teams[0];\n if (!team)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Team not found\"\n description=\"This team is no longer available.\"\n />\n </div>\n );\n const teamMembers = employees.filter((e) => team.members.includes(e.id));\n const teamProjects = projects.filter((p) => p.teamId === team.id);\n\n const memberColumns: ResponsiveTableColumn<Employee>[] = [\n {\n key: 'name',\n header: 'Name',\n priority: 'primary',\n cell: (emp) => (\n <span className=\"font-medium text-text-primary\">\n {emp.firstName} {emp.lastName}\n </span>\n ),\n },\n {\n key: 'position',\n header: 'Position',\n priority: 'secondary',\n cell: (emp) => <span className=\"text-text-secondary\">{emp.position}</span>,\n },\n {\n key: 'performance',\n header: 'Performance',\n priority: 'secondary',\n cell: (emp) => (\n <span className=\"flex items-center gap-1 md:justify-center\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {emp.performanceScore}\n </span>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n priority: 'primary',\n cell: (emp) => (\n <Badge variant={emp.status === 'active' ? 'default' : 'secondary'} className=\"text-[10px]\">\n {emp.status}\n </Badge>\n ),\n },\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\">\n <GradientText>{team.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{team.description}</p>\n <PagePurpose className=\"mt-2\">\n A complete view of one team — who's on it, what they're working on, and how\n they're performing — so you can support the group and keep its projects on track.\n </PagePurpose>\n </div>\n <Badge variant={team.status === 'active' ? 'default' : 'secondary'}>{team.status}</Badge>\n </div>\n\n <NextSteps\n storageKey=\"crewfoundry-team-details\"\n steps={[\n {\n id: 'analytics',\n label: 'View team analytics',\n description: 'See productivity and workload trends for this team.',\n icon: <BarChart3 className=\"h-4 w-4\" />,\n onClick: () => navigate('../../teams/team-analytics-page'),\n },\n {\n id: 'settings',\n label: 'Adjust team settings',\n description: 'Manage membership, permissions, and preferences.',\n icon: <Settings className=\"h-4 w-4\" />,\n onClick: () =>\n navigate(`../../teams/team-settings-page?id=${encodeURIComponent(team.id)}`),\n },\n {\n id: 'directory',\n label: 'Browse all teams',\n description: 'Explore how the rest of the organization is structured.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../../teams/team-directory-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.memberCount}</p>\n <p className=\"text-xs text-text-secondary\">Members</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <FolderKanban className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.projectCount}</p>\n <p className=\"text-xs text-text-secondary\">Projects</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-status-warning-text mb-1\" />\n <p className=\"text-lg font-bold\">{team.leadName}</p>\n <p className=\"text-xs text-text-secondary\">Lead</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.createdAt}</p>\n <p className=\"text-xs text-text-secondary\">Created</p>\n </CardContent>\n </Card>\n </div>\n <EmphasisPanel>\n <div className=\"mb-2 text-lg font-semibold\">Team Members</div>\n {teamMembers.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No members yet\"\n description=\"Add people to this team to start collaborating.\"\n />\n ) : (\n <ResponsiveTable columns={memberColumns} data={teamMembers} rowKey={(emp) => emp.id} />\n )}\n </EmphasisPanel>\n {teamProjects.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Team Projects</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {teamProjects.map((p) => (\n <div\n key={p.id}\n role=\"button\"\n tabIndex={0}\n aria-label={`Open ${p.name} project detail`}\n onClick={() =>\n navigate(`../../projects/project-details-page?id=${encodeURIComponent(p.id)}`)\n }\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigate(`../../projects/project-details-page?id=${encodeURIComponent(p.id)}`);\n }\n }}\n className=\"flex items-center justify-between rounded border p-3 cursor-pointer hover:bg-bg-sunken/50 focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]\"\n >\n <div>\n <p className=\"text-sm font-medium\">{p.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {p.startDate} — {p.endDate}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"w-24 h-2 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-2 bg-action-primary-bg rounded\"\n style={{ width: `${p.progress}%` }}\n />\n </div>\n <span className=\"text-xs\">{p.progress}%</span>\n <Badge\n variant={p.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {p.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TeamsTeamDetailPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDetailPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n ResponsiveTable,\n type ResponsiveTableColumn,\n} from '@burdenoff/fe-libs/ui';\nimport { BarChart3, Calendar, FolderKanban, Settings, Star, Users } from 'lucide-react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { useCrewFoundryStore, type Employee } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nexport function TeamsTeamDetailPagePage() {\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const { teams, employees, projects } = useCrewFoundryStore();\n const teamId = searchParams.get('id');\n const team = teams.find((t) => t.id === teamId) ?? teams[0];\n if (!team)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Team not found\"\n description=\"This team is no longer available.\"\n />\n </div>\n );\n const teamMembers = employees.filter((e) => team.members.includes(e.id));\n const teamProjects = projects.filter((p) => p.teamId === team.id);\n\n const memberColumns: ResponsiveTableColumn<Employee>[] = [\n {\n key: 'name',\n header: 'Name',\n priority: 'primary',\n cell: (emp) => (\n <span className=\"font-medium text-text-primary\">\n {emp.firstName} {emp.lastName}\n </span>\n ),\n },\n {\n key: 'position',\n header: 'Position',\n priority: 'secondary',\n cell: (emp) => <span className=\"text-text-secondary\">{emp.position}</span>,\n },\n {\n key: 'performance',\n header: 'Performance',\n priority: 'secondary',\n cell: (emp) => (\n <span className=\"flex items-center gap-1 md:justify-center\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {emp.performanceScore}\n </span>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n priority: 'primary',\n cell: (emp) => (\n <Badge variant={emp.status === 'active' ? 'default' : 'secondary'} className=\"text-[10px]\">\n {formatEnumLabel(emp.status)}\n </Badge>\n ),\n },\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\">\n <GradientText>{team.name}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{team.description}</p>\n <PagePurpose className=\"mt-2\">\n A complete view of one team — who's on it, what they're working on, and how\n they're performing — so you can support the group and keep its projects on track.\n </PagePurpose>\n </div>\n <Badge variant={team.status === 'active' ? 'default' : 'secondary'}>\n {formatEnumLabel(team.status)}\n </Badge>\n </div>\n\n <NextSteps\n storageKey=\"crewfoundry-team-details\"\n steps={[\n {\n id: 'analytics',\n label: 'View team analytics',\n description: 'See productivity and workload trends for this team.',\n icon: <BarChart3 className=\"h-4 w-4\" />,\n onClick: () => navigate('../teams/team-analytics-page'),\n },\n {\n id: 'settings',\n label: 'Adjust team settings',\n description: 'Manage membership, permissions, and preferences.',\n icon: <Settings className=\"h-4 w-4\" />,\n onClick: () =>\n navigate(`../teams/team-settings-page?id=${encodeURIComponent(team.id)}`),\n },\n {\n id: 'directory',\n label: 'Browse all teams',\n description: 'Explore how the rest of the organization is structured.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../teams/team-directory-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.memberCount}</p>\n <p className=\"text-xs text-text-secondary\">Members</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <FolderKanban className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.projectCount}</p>\n <p className=\"text-xs text-text-secondary\">Projects</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-status-warning-text mb-1\" />\n <p className=\"text-lg font-bold\">{team.leadName}</p>\n <p className=\"text-xs text-text-secondary\">Lead</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{team.createdAt}</p>\n <p className=\"text-xs text-text-secondary\">Created</p>\n </CardContent>\n </Card>\n </div>\n <EmphasisPanel>\n <div className=\"mb-2 text-lg font-semibold\">Team Members</div>\n {teamMembers.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No members yet\"\n description=\"Add people to this team to start collaborating.\"\n />\n ) : (\n <ResponsiveTable columns={memberColumns} data={teamMembers} rowKey={(emp) => emp.id} />\n )}\n </EmphasisPanel>\n {teamProjects.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Team Projects</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {teamProjects.map((p) => (\n <div\n key={p.id}\n role=\"button\"\n tabIndex={0}\n aria-label={`Open ${p.name} project detail`}\n onClick={() =>\n navigate(`../projects/project-details-page?id=${encodeURIComponent(p.id)}`)\n }\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigate(`../projects/project-details-page?id=${encodeURIComponent(p.id)}`);\n }\n }}\n className=\"flex items-center justify-between rounded border p-3 cursor-pointer hover:bg-bg-sunken/50 focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]\"\n >\n <div>\n <p className=\"text-sm font-medium\">{p.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {p.startDate} — {p.endDate}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"w-24 h-2 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-2 bg-action-primary-bg rounded\"\n style={{ width: `${p.progress}%` }}\n />\n </div>\n <span className=\"text-xs\">{p.progress}%</span>\n <Badge\n variant={p.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {formatEnumLabel(p.status)}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,52 +1,53 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
|
|
3
|
+
import { useState as n } from "react";
|
|
4
|
+
import { Search as r, Users as i } from "lucide-react";
|
|
5
|
+
import { useNavigate as a } from "react-router-dom";
|
|
6
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
|
+
import { Badge as c, CardContent as l, GlassCard as u, GradientText as d, IllustratedEmptyState as f, Input as p, PagePurpose as m, Pagination as h, ResponsiveTable as g } from "@burdenoff/fe-libs/ui";
|
|
8
|
+
import { usePagination as _ } from "@burdenoff/fe-libs/shared/hooks";
|
|
8
9
|
//#region src/crewfoundry/pages/TeamsTeamDirectoryPagePage.tsx
|
|
9
|
-
function
|
|
10
|
-
let
|
|
11
|
-
return /* @__PURE__ */
|
|
10
|
+
function v() {
|
|
11
|
+
let v = a(), { teams: y } = e(), [b, x] = n(""), { page: S, pageSize: C, setPage: w } = _({ initialPageSize: 25 }), T = y.filter((e) => `${e.name} ${e.department} ${e.leadName}`.toLowerCase().includes(b.toLowerCase())), E = T.slice((S - 1) * C, (S - 1) * C + C);
|
|
12
|
+
return /* @__PURE__ */ s("div", {
|
|
12
13
|
className: "space-y-6 p-6",
|
|
13
14
|
children: [
|
|
14
|
-
/* @__PURE__ */
|
|
15
|
-
/* @__PURE__ */
|
|
15
|
+
/* @__PURE__ */ s("div", { children: [
|
|
16
|
+
/* @__PURE__ */ o("h1", {
|
|
16
17
|
className: "text-2xl font-semibold",
|
|
17
|
-
children: /* @__PURE__ */
|
|
18
|
+
children: /* @__PURE__ */ o(d, { children: "Team Directory" })
|
|
18
19
|
}),
|
|
19
|
-
/* @__PURE__ */
|
|
20
|
+
/* @__PURE__ */ o("p", {
|
|
20
21
|
className: "text-sm text-text-secondary",
|
|
21
22
|
children: "Browse all teams in the organization"
|
|
22
23
|
}),
|
|
23
|
-
/* @__PURE__ */
|
|
24
|
+
/* @__PURE__ */ o(m, {
|
|
24
25
|
className: "mt-1",
|
|
25
26
|
children: "Browse every team in the company — find a team, see who's on it, and understand how your organization is structured."
|
|
26
27
|
})
|
|
27
28
|
] }),
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ s("div", {
|
|
29
30
|
className: "relative max-w-sm",
|
|
30
|
-
children: [/* @__PURE__ */
|
|
31
|
+
children: [/* @__PURE__ */ o(r, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ o(p, {
|
|
31
32
|
placeholder: "Search teams...",
|
|
32
33
|
className: "pl-9",
|
|
33
|
-
value:
|
|
34
|
-
onChange: (e) =>
|
|
34
|
+
value: b,
|
|
35
|
+
onChange: (e) => x(e.target.value)
|
|
35
36
|
})]
|
|
36
37
|
}),
|
|
37
|
-
/* @__PURE__ */
|
|
38
|
+
/* @__PURE__ */ o(u, {
|
|
38
39
|
treatment: "glass",
|
|
39
40
|
glow: !0,
|
|
40
41
|
className: "border-border-seam",
|
|
41
|
-
children: /* @__PURE__ */
|
|
42
|
+
children: /* @__PURE__ */ s(l, {
|
|
42
43
|
className: "p-4",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
44
|
+
children: [/* @__PURE__ */ o(g, {
|
|
44
45
|
columns: [
|
|
45
46
|
{
|
|
46
47
|
key: "name",
|
|
47
48
|
header: "Team",
|
|
48
49
|
priority: "primary",
|
|
49
|
-
cell: (e) => /* @__PURE__ */
|
|
50
|
+
cell: (e) => /* @__PURE__ */ o("span", {
|
|
50
51
|
className: "font-medium text-text-primary",
|
|
51
52
|
children: e.name
|
|
52
53
|
})
|
|
@@ -55,7 +56,7 @@ function _() {
|
|
|
55
56
|
key: "description",
|
|
56
57
|
header: "Description",
|
|
57
58
|
priority: "secondary",
|
|
58
|
-
cell: (e) => /* @__PURE__ */
|
|
59
|
+
cell: (e) => /* @__PURE__ */ o("span", {
|
|
59
60
|
className: "text-text-secondary line-clamp-2 md:truncate md:block",
|
|
60
61
|
children: e.description
|
|
61
62
|
})
|
|
@@ -64,7 +65,7 @@ function _() {
|
|
|
64
65
|
key: "department",
|
|
65
66
|
header: "Department",
|
|
66
67
|
priority: "secondary",
|
|
67
|
-
cell: (e) => /* @__PURE__ */
|
|
68
|
+
cell: (e) => /* @__PURE__ */ o("span", {
|
|
68
69
|
className: "text-sm",
|
|
69
70
|
children: e.department
|
|
70
71
|
})
|
|
@@ -73,7 +74,7 @@ function _() {
|
|
|
73
74
|
key: "lead",
|
|
74
75
|
header: "Lead",
|
|
75
76
|
priority: "secondary",
|
|
76
|
-
cell: (e) => /* @__PURE__ */
|
|
77
|
+
cell: (e) => /* @__PURE__ */ o("span", {
|
|
77
78
|
className: "text-text-secondary",
|
|
78
79
|
children: e.leadName
|
|
79
80
|
})
|
|
@@ -82,37 +83,37 @@ function _() {
|
|
|
82
83
|
key: "members",
|
|
83
84
|
header: "Members",
|
|
84
85
|
priority: "primary",
|
|
85
|
-
cell: (e) => /* @__PURE__ */
|
|
86
|
+
cell: (e) => /* @__PURE__ */ s("span", {
|
|
86
87
|
className: "flex items-center gap-1 md:justify-end",
|
|
87
|
-
children: [/* @__PURE__ */
|
|
88
|
+
children: [/* @__PURE__ */ o(i, { className: "h-3 w-3" }), e.memberCount]
|
|
88
89
|
})
|
|
89
90
|
},
|
|
90
91
|
{
|
|
91
92
|
key: "status",
|
|
92
93
|
header: "Status",
|
|
93
94
|
priority: "primary",
|
|
94
|
-
cell: (e) => /* @__PURE__ */
|
|
95
|
+
cell: (e) => /* @__PURE__ */ o(c, {
|
|
95
96
|
variant: e.status === "active" ? "default" : "secondary",
|
|
96
97
|
className: "text-[10px]",
|
|
97
|
-
children: e.status
|
|
98
|
+
children: t(e.status)
|
|
98
99
|
})
|
|
99
100
|
}
|
|
100
101
|
],
|
|
101
|
-
data:
|
|
102
|
+
data: E,
|
|
102
103
|
rowKey: (e) => e.id,
|
|
103
|
-
onRowClick: (e) =>
|
|
104
|
-
emptyState: /* @__PURE__ */
|
|
104
|
+
onRowClick: (e) => v(`../teams/team-detail-page?id=${encodeURIComponent(e.id)}`),
|
|
105
|
+
emptyState: /* @__PURE__ */ o(f, {
|
|
105
106
|
illustration: "empty-search",
|
|
106
107
|
title: "No teams found",
|
|
107
108
|
description: "Try a different search term to find a team."
|
|
108
109
|
})
|
|
109
|
-
}),
|
|
110
|
+
}), T.length > C && /* @__PURE__ */ o("div", {
|
|
110
111
|
className: "mt-4",
|
|
111
|
-
children: /* @__PURE__ */
|
|
112
|
-
page:
|
|
113
|
-
pageSize:
|
|
114
|
-
totalItems:
|
|
115
|
-
onPageChange:
|
|
112
|
+
children: /* @__PURE__ */ o(h, {
|
|
113
|
+
page: S,
|
|
114
|
+
pageSize: C,
|
|
115
|
+
totalItems: T.length,
|
|
116
|
+
onPageChange: w
|
|
116
117
|
})
|
|
117
118
|
})]
|
|
118
119
|
})
|
|
@@ -121,6 +122,6 @@ function _() {
|
|
|
121
122
|
});
|
|
122
123
|
}
|
|
123
124
|
//#endregion
|
|
124
|
-
export {
|
|
125
|
+
export { v as TeamsTeamDirectoryPagePage };
|
|
125
126
|
|
|
126
127
|
//# sourceMappingURL=TeamsTeamDirectoryPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamsTeamDirectoryPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDirectoryPagePage.tsx"],"sourcesContent":["import {\n Badge,\n CardContent,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Pagination,\n ResponsiveTable,\n type ResponsiveTableColumn,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { Search, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore, type Team } from '../store/crewfoundryStore';\nimport { useState } from 'react';\n\nexport function TeamsTeamDirectoryPagePage() {\n const navigate = useNavigate();\n const { teams } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const { page, pageSize, setPage } = usePagination({ initialPageSize: 25 });\n const filtered = teams.filter((t) =>\n `${t.name} ${t.department} ${t.leadName}`.toLowerCase().includes(search.toLowerCase())\n );\n const pageTeams = filtered.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize);\n\n const columns: ResponsiveTableColumn<Team>[] = [\n {\n key: 'name',\n header: 'Team',\n priority: 'primary',\n cell: (team) => <span className=\"font-medium text-text-primary\">{team.name}</span>,\n },\n {\n key: 'description',\n header: 'Description',\n priority: 'secondary',\n cell: (team) => (\n <span className=\"text-text-secondary line-clamp-2 md:truncate md:block\">\n {team.description}\n </span>\n ),\n },\n {\n key: 'department',\n header: 'Department',\n priority: 'secondary',\n cell: (team) => <span className=\"text-sm\">{team.department}</span>,\n },\n {\n key: 'lead',\n header: 'Lead',\n priority: 'secondary',\n cell: (team) => <span className=\"text-text-secondary\">{team.leadName}</span>,\n },\n {\n key: 'members',\n header: 'Members',\n priority: 'primary',\n cell: (team) => (\n <span className=\"flex items-center gap-1 md:justify-end\">\n <Users className=\"h-3 w-3\" />\n {team.memberCount}\n </span>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n priority: 'primary',\n cell: (team) => (\n <Badge variant={team.status === 'active' ? 'default' : 'secondary'} className=\"text-[10px]\">\n {team.status}\n </Badge>\n ),\n },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Team Directory</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Browse all teams in the organization</p>\n <PagePurpose className=\"mt-1\">\n Browse every team in the company — find a team, see who's on it, and understand how\n your organization is structured.\n </PagePurpose>\n </div>\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder=\"Search teams...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-4\">\n <ResponsiveTable\n columns={columns}\n data={pageTeams}\n rowKey={(team) => team.id}\n onRowClick={(team) =>\n navigate(
|
|
1
|
+
{"version":3,"file":"TeamsTeamDirectoryPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/TeamsTeamDirectoryPagePage.tsx"],"sourcesContent":["import {\n Badge,\n CardContent,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Pagination,\n ResponsiveTable,\n type ResponsiveTableColumn,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { Search, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore, type Team } from '../store/crewfoundryStore';\nimport { useState } from 'react';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nexport function TeamsTeamDirectoryPagePage() {\n const navigate = useNavigate();\n const { teams } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const { page, pageSize, setPage } = usePagination({ initialPageSize: 25 });\n const filtered = teams.filter((t) =>\n `${t.name} ${t.department} ${t.leadName}`.toLowerCase().includes(search.toLowerCase())\n );\n const pageTeams = filtered.slice((page - 1) * pageSize, (page - 1) * pageSize + pageSize);\n\n const columns: ResponsiveTableColumn<Team>[] = [\n {\n key: 'name',\n header: 'Team',\n priority: 'primary',\n cell: (team) => <span className=\"font-medium text-text-primary\">{team.name}</span>,\n },\n {\n key: 'description',\n header: 'Description',\n priority: 'secondary',\n cell: (team) => (\n <span className=\"text-text-secondary line-clamp-2 md:truncate md:block\">\n {team.description}\n </span>\n ),\n },\n {\n key: 'department',\n header: 'Department',\n priority: 'secondary',\n cell: (team) => <span className=\"text-sm\">{team.department}</span>,\n },\n {\n key: 'lead',\n header: 'Lead',\n priority: 'secondary',\n cell: (team) => <span className=\"text-text-secondary\">{team.leadName}</span>,\n },\n {\n key: 'members',\n header: 'Members',\n priority: 'primary',\n cell: (team) => (\n <span className=\"flex items-center gap-1 md:justify-end\">\n <Users className=\"h-3 w-3\" />\n {team.memberCount}\n </span>\n ),\n },\n {\n key: 'status',\n header: 'Status',\n priority: 'primary',\n cell: (team) => (\n <Badge variant={team.status === 'active' ? 'default' : 'secondary'} className=\"text-[10px]\">\n {formatEnumLabel(team.status)}\n </Badge>\n ),\n },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Team Directory</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Browse all teams in the organization</p>\n <PagePurpose className=\"mt-1\">\n Browse every team in the company — find a team, see who's on it, and understand how\n your organization is structured.\n </PagePurpose>\n </div>\n <div className=\"relative max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input\n placeholder=\"Search teams...\"\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-4\">\n <ResponsiveTable\n columns={columns}\n data={pageTeams}\n rowKey={(team) => team.id}\n onRowClick={(team) =>\n navigate(`../teams/team-detail-page?id=${encodeURIComponent(team.id)}`)\n }\n emptyState={\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No teams found\"\n description=\"Try a different search term to find a team.\"\n />\n }\n />\n {filtered.length > pageSize && (\n <div className=\"mt-4\">\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={filtered.length}\n onPageChange={setPage}\n />\n </div>\n )}\n </CardContent>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAmBA,SAAgB,IAA6B;CAC3C,IAAM,IAAW,GAAa,EACxB,EAAE,aAAU,GAAqB,EACjC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,EAAE,SAAM,aAAU,eAAY,EAAc,EAAE,iBAAiB,IAAI,CAAC,EACpE,IAAW,EAAM,QAAQ,MAC7B,GAAG,EAAE,KAAK,GAAG,EAAE,WAAW,GAAG,EAAE,WAAW,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,CACvF,EACK,IAAY,EAAS,OAAO,IAAO,KAAK,IAAW,IAAO,KAAK,IAAW,EAAS;AAsDzF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;KACxC,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAAwC,CAAA;IACnF,kBAAC,GAAD;KAAa,WAAU;eAAO;KAGhB,CAAA;IACV,EAAA,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,wEAAyE,CAAA,EAC3F,kBAAC,GAAD;KACE,aAAY;KACZ,WAAU;KACV,OAAO;KACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;KAC1C,CAAA,CACE;;GACN,kBAAC,GAAD;IAAW,WAAU;IAAQ,MAAA;IAAK,WAAU;cAC1C,kBAAC,GAAD;KAAa,WAAU;eAAvB,CACE,kBAAC,GAAD;MACW,SA5E4B;OAC7C;QACE,KAAK;QACL,QAAQ;QACR,UAAU;QACV,OAAO,MAAS,kBAAC,QAAD;SAAM,WAAU;mBAAiC,EAAK;SAAY,CAAA;QACnF;OACD;QACE,KAAK;QACL,QAAQ;QACR,UAAU;QACV,OAAO,MACL,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAK;SACD,CAAA;QAEV;OACD;QACE,KAAK;QACL,QAAQ;QACR,UAAU;QACV,OAAO,MAAS,kBAAC,QAAD;SAAM,WAAU;mBAAW,EAAK;SAAkB,CAAA;QACnE;OACD;QACE,KAAK;QACL,QAAQ;QACR,UAAU;QACV,OAAO,MAAS,kBAAC,QAAD;SAAM,WAAU;mBAAuB,EAAK;SAAgB,CAAA;QAC7E;OACD;QACE,KAAK;QACL,QAAQ;QACR,UAAU;QACV,OAAO,MACL,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAK,YACD;;QAEV;OACD;QACE,KAAK;QACL,QAAQ;QACR,UAAU;QACV,OAAO,MACL,kBAAC,GAAD;SAAO,SAAS,EAAK,WAAW,WAAW,YAAY;SAAa,WAAU;mBAC3E,EAAgB,EAAK,OAAO;SACvB,CAAA;QAEX;OACF;MA2BS,MAAM;MACN,SAAS,MAAS,EAAK;MACvB,aAAa,MACX,EAAS,gCAAgC,mBAAmB,EAAK,GAAG,GAAG;MAEzE,YACE,kBAAC,GAAD;OACE,cAAa;OACb,OAAM;OACN,aAAY;OACZ,CAAA;MAEJ,CAAA,EACD,EAAS,SAAS,KACjB,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACQ;OACI;OACV,YAAY,EAAS;OACrB,cAAc;OACd,CAAA;MACE,CAAA,CAEI;;IACJ,CAAA;GACR"}
|