@burdenoff/microfe-crewfoundry 2026.608.1 → 2026.625.1
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 +94 -78
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +112 -96
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +101 -85
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +131 -115
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +116 -100
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +15 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +63 -51
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +16 -16
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +26 -26
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +28 -28
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +71 -59
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +59 -47
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +77 -61
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +40 -40
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +13 -13
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +102 -86
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +173 -139
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +59 -59
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +113 -97
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +45 -45
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +85 -69
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +23 -23
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +40 -40
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +59 -47
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +52 -48
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +31 -26
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +61 -49
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +54 -42
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +16 -16
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +39 -35
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +24 -24
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +14 -14
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +81 -65
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +73 -57
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +28 -28
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +12 -12
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -59
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +57 -45
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +71 -59
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +48 -48
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +44 -43
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +58 -46
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +16 -16
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +23 -23
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +9 -9
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +43 -39
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +31 -27
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +59 -47
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +13 -13
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +66 -50
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +18 -18
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +74 -62
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +21 -21
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +47 -43
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +20 -20
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +58 -46
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +38 -34
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +14 -14
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +67 -67
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +16 -16
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,14 +2,14 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { Award as n, BookOpen as r, Clock as i, Play as a, Star as o } from "lucide-react";
|
|
4
4
|
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as l, Button as u, Card as d, CardContent as f, CardDescription as p, CardHeader as m, CardTitle as h } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Badge as l, Button as u, Card as d, CardContent as f, CardDescription as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _ } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/LearningMyLearningPagePage.tsx
|
|
7
|
-
var
|
|
7
|
+
var v = (/* @__PURE__ */ new Date("2026-03-01T00:00:00Z")).getTime(), y = (e) => {
|
|
8
8
|
let t = new Date(e);
|
|
9
9
|
return Number.isNaN(t.getTime()) ? "Unknown" : t.toISOString().split("T")[0];
|
|
10
10
|
};
|
|
11
|
-
function
|
|
12
|
-
let { courses:
|
|
11
|
+
function b() {
|
|
12
|
+
let { courses: b } = e(), x = t(() => b.filter((e) => e.status === "active").slice(0, 8).map((e, t) => {
|
|
13
13
|
let n = Math.min(e.modules, Math.round(e.completed / Math.max(e.enrolled, 1) * e.modules)), r = Math.round(n / Math.max(e.modules, 1) * 100);
|
|
14
14
|
return {
|
|
15
15
|
id: e.id,
|
|
@@ -18,73 +18,89 @@ function v() {
|
|
|
18
18
|
modules: e.modules,
|
|
19
19
|
completedModules: n,
|
|
20
20
|
instructor: e.instructor,
|
|
21
|
-
dueDate:
|
|
21
|
+
dueDate: y(new Date(v + (t + 1) * 864e5 * 12).toISOString())
|
|
22
22
|
};
|
|
23
|
-
}), [
|
|
23
|
+
}), [b]), S = t(() => b.filter((e) => e.completed > 0).slice(0, 8).map((e, t) => ({
|
|
24
24
|
id: `completed-${e.id}`,
|
|
25
25
|
title: e.title,
|
|
26
|
-
completedDate:
|
|
26
|
+
completedDate: y((/* @__PURE__ */ new Date(v - (t + 1) * 864e5 * 15)).toISOString()),
|
|
27
27
|
rating: Number(e.rating.toFixed(1)),
|
|
28
28
|
certificate: e.completed / Math.max(e.enrolled, 1) > .35
|
|
29
|
-
})), [
|
|
29
|
+
})), [b]), C = x.reduce((e, t) => e + t.completedModules * 1.25, 0);
|
|
30
30
|
return /* @__PURE__ */ c("div", {
|
|
31
31
|
className: "space-y-6 p-6",
|
|
32
32
|
children: [
|
|
33
33
|
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
|
|
34
34
|
className: "text-2xl font-semibold",
|
|
35
|
-
children: "My Learning"
|
|
35
|
+
children: /* @__PURE__ */ s(_, { children: "My Learning" })
|
|
36
36
|
}), /* @__PURE__ */ s("p", {
|
|
37
|
-
className: "text-sm text-
|
|
37
|
+
className: "text-sm text-text-secondary",
|
|
38
38
|
children: "Track your learning progress and achievements"
|
|
39
39
|
})] }),
|
|
40
40
|
/* @__PURE__ */ c("div", {
|
|
41
41
|
className: "grid gap-4 md:grid-cols-4",
|
|
42
42
|
children: [
|
|
43
|
-
/* @__PURE__ */ c(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
43
|
+
/* @__PURE__ */ c(g, {
|
|
44
|
+
treatment: "metric",
|
|
45
|
+
className: "border-border-seam",
|
|
46
|
+
children: [/* @__PURE__ */ c(m, {
|
|
47
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
48
|
+
children: [/* @__PURE__ */ s(h, {
|
|
49
|
+
className: "text-sm font-medium",
|
|
50
|
+
children: "In Progress"
|
|
51
|
+
}), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-status-info-text" })]
|
|
52
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
|
|
53
|
+
className: "text-2xl font-bold tabular-nums",
|
|
54
|
+
children: x.length
|
|
55
|
+
}) })]
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ c(g, {
|
|
58
|
+
treatment: "metric",
|
|
59
|
+
className: "border-border-seam",
|
|
60
|
+
children: [/* @__PURE__ */ c(m, {
|
|
61
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
62
|
+
children: [/* @__PURE__ */ s(h, {
|
|
63
|
+
className: "text-sm font-medium",
|
|
64
|
+
children: "Completed"
|
|
65
|
+
}), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-status-success-text" })]
|
|
66
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
|
|
67
|
+
className: "text-2xl font-bold tabular-nums",
|
|
68
|
+
children: S.length
|
|
69
|
+
}) })]
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ c(g, {
|
|
72
|
+
treatment: "metric",
|
|
73
|
+
className: "border-border-seam",
|
|
74
|
+
children: [/* @__PURE__ */ c(m, {
|
|
75
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
76
|
+
children: [/* @__PURE__ */ s(h, {
|
|
77
|
+
className: "text-sm font-medium",
|
|
78
|
+
children: "Hours Logged"
|
|
79
|
+
}), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-text-secondary" })]
|
|
80
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
|
|
81
|
+
className: "text-2xl font-bold tabular-nums",
|
|
82
|
+
children: C.toFixed(1)
|
|
83
|
+
}) })]
|
|
84
|
+
}),
|
|
85
|
+
/* @__PURE__ */ c(g, {
|
|
86
|
+
treatment: "metric",
|
|
87
|
+
className: "border-border-seam",
|
|
88
|
+
children: [/* @__PURE__ */ c(m, {
|
|
89
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
90
|
+
children: [/* @__PURE__ */ s(h, {
|
|
91
|
+
className: "text-sm font-medium",
|
|
92
|
+
children: "Certificates"
|
|
93
|
+
}), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-status-warning-text" })]
|
|
94
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
|
|
95
|
+
className: "text-2xl font-bold tabular-nums",
|
|
96
|
+
children: S.filter((e) => e.certificate).length
|
|
97
|
+
}) })]
|
|
98
|
+
})
|
|
83
99
|
]
|
|
84
100
|
}),
|
|
85
101
|
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(m, { children: [/* @__PURE__ */ s(h, { children: "In Progress" }), /* @__PURE__ */ s(p, { children: "Continue where you left off" })] }), /* @__PURE__ */ s(f, {
|
|
86
102
|
className: "space-y-4",
|
|
87
|
-
children:
|
|
103
|
+
children: x.map((e) => /* @__PURE__ */ c("div", {
|
|
88
104
|
className: "flex items-center gap-4 rounded border p-4",
|
|
89
105
|
children: [/* @__PURE__ */ c("div", {
|
|
90
106
|
className: "flex-1",
|
|
@@ -94,7 +110,7 @@ function v() {
|
|
|
94
110
|
children: e.title
|
|
95
111
|
}),
|
|
96
112
|
/* @__PURE__ */ c("p", {
|
|
97
|
-
className: "text-xs text-
|
|
113
|
+
className: "text-xs text-text-secondary",
|
|
98
114
|
children: [
|
|
99
115
|
e.instructor,
|
|
100
116
|
" · Due ",
|
|
@@ -104,9 +120,9 @@ function v() {
|
|
|
104
120
|
/* @__PURE__ */ c("div", {
|
|
105
121
|
className: "mt-2 flex items-center gap-2",
|
|
106
122
|
children: [/* @__PURE__ */ s("div", {
|
|
107
|
-
className: "h-2 flex-1 overflow-hidden rounded bg-
|
|
123
|
+
className: "h-2 flex-1 overflow-hidden rounded bg-bg-sunken",
|
|
108
124
|
children: /* @__PURE__ */ s("div", {
|
|
109
|
-
className: "h-2 rounded bg-primary",
|
|
125
|
+
className: "h-2 rounded bg-action-primary-bg",
|
|
110
126
|
style: { width: `${e.progress}%` }
|
|
111
127
|
})
|
|
112
128
|
}), /* @__PURE__ */ c("span", {
|
|
@@ -115,7 +131,7 @@ function v() {
|
|
|
115
131
|
})]
|
|
116
132
|
}),
|
|
117
133
|
/* @__PURE__ */ c("p", {
|
|
118
|
-
className: "mt-1 text-xs text-
|
|
134
|
+
className: "mt-1 text-xs text-text-secondary",
|
|
119
135
|
children: [
|
|
120
136
|
e.completedModules,
|
|
121
137
|
"/",
|
|
@@ -132,20 +148,20 @@ function v() {
|
|
|
132
148
|
})] }),
|
|
133
149
|
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(m, { children: /* @__PURE__ */ s(h, { children: "Completed" }) }), /* @__PURE__ */ s(f, {
|
|
134
150
|
className: "space-y-3",
|
|
135
|
-
children:
|
|
151
|
+
children: S.map((e) => /* @__PURE__ */ c("div", {
|
|
136
152
|
className: "flex items-center justify-between rounded border p-3",
|
|
137
153
|
children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
|
|
138
154
|
className: "text-sm font-medium",
|
|
139
155
|
children: e.title
|
|
140
156
|
}), /* @__PURE__ */ c("p", {
|
|
141
|
-
className: "text-xs text-
|
|
157
|
+
className: "text-xs text-text-secondary",
|
|
142
158
|
children: ["Completed ", e.completedDate]
|
|
143
159
|
})] }), /* @__PURE__ */ c("div", {
|
|
144
160
|
className: "flex items-center gap-2",
|
|
145
161
|
children: [/* @__PURE__ */ c("div", {
|
|
146
162
|
className: "flex items-center gap-1",
|
|
147
163
|
children: [
|
|
148
|
-
/* @__PURE__ */ s(o, { className: "h-3 w-3 text-
|
|
164
|
+
/* @__PURE__ */ s(o, { className: "h-3 w-3 text-status-warning-text" }),
|
|
149
165
|
e.rating,
|
|
150
166
|
"/5"
|
|
151
167
|
]
|
|
@@ -161,6 +177,6 @@ function v() {
|
|
|
161
177
|
});
|
|
162
178
|
}
|
|
163
179
|
//#endregion
|
|
164
|
-
export {
|
|
180
|
+
export { b as LearningMyLearningPagePage };
|
|
165
181
|
|
|
166
182
|
//# sourceMappingURL=LearningMyLearningPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LearningMyLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningMyLearningPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Award, BookOpen, Clock, Play, Star } from 'lucide-react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EnrolledCourse = {\n id: string;\n title: string;\n progress: number;\n modules: number;\n completedModules: number;\n instructor: string;\n dueDate: string;\n};\n\ntype CompletedCourse = {\n id: string;\n title: string;\n completedDate: string;\n rating: number;\n certificate: boolean;\n};\n\nconst BASE_TS = new Date('2026-03-01T00:00:00Z').getTime();\n\nconst isoDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function LearningMyLearningPagePage() {\n const { courses } = useCrewFoundryStore();\n\n const myEnrolledCourses = useMemo<EnrolledCourse[]>(() => {\n return courses\n .filter((course) => course.status === 'active')\n .slice(0, 8)\n .map((course, index) => {\n const completedModules = Math.min(\n course.modules,\n Math.round((course.completed / Math.max(course.enrolled, 1)) * course.modules)\n );\n const progress = Math.round((completedModules / Math.max(course.modules, 1)) * 100);\n return {\n id: course.id,\n title: course.title,\n progress,\n modules: course.modules,\n completedModules,\n instructor: course.instructor,\n dueDate: isoDate(new Date(BASE_TS + (index + 1) * 86400000 * 12).toISOString()),\n };\n });\n }, [courses]);\n\n const completedCourses = useMemo<CompletedCourse[]>(() => {\n return courses\n .filter((course) => course.completed > 0)\n .slice(0, 8)\n .map((course, index) => ({\n id: `completed-${course.id}`,\n title: course.title,\n completedDate: isoDate(new Date(BASE_TS - (index + 1) * 86400000 * 15).toISOString()),\n rating: Number(course.rating.toFixed(1)),\n certificate: course.completed / Math.max(course.enrolled, 1) > 0.35,\n }));\n }, [courses]);\n\n const hoursLogged = myEnrolledCourses.reduce(\n (sum, course) => sum + course.completedModules * 1.25,\n 0\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">My Learning</h1>\n <p className=\"text-sm text-muted-foreground\">\n Track your learning progress and achievements\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">In Progress</CardTitle>\n <BookOpen className=\"h-4 w-4 text-blue-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{myEnrolledCourses.length}</div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Completed</CardTitle>\n <Award className=\"h-4 w-4 text-green-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{completedCourses.length}</div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Hours Logged</CardTitle>\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{hoursLogged.toFixed(1)}</div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Certificates</CardTitle>\n <Award className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {completedCourses.filter((course) => course.certificate).length}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>In Progress</CardTitle>\n <CardDescription>Continue where you left off</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {myEnrolledCourses.map((course) => (\n <div key={course.id} className=\"flex items-center gap-4 rounded border p-4\">\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{course.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n {course.instructor} · Due {course.dueDate}\n </p>\n <div className=\"mt-2 flex items-center gap-2\">\n <div className=\"h-2 flex-1 overflow-hidden rounded bg-muted\">\n <div\n className=\"h-2 rounded bg-primary\"\n style={{ width: `${course.progress}%` }}\n />\n </div>\n <span className=\"text-xs font-medium\">{course.progress}%</span>\n </div>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {course.completedModules}/{course.modules} modules\n </p>\n </div>\n <Button size=\"sm\">\n <Play className=\"mr-1 h-3 w-3\" />\n Continue\n </Button>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Completed</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {completedCourses.map((course) => (\n <div key={course.id} className=\"flex items-center justify-between rounded border p-3\">\n <div>\n <p className=\"text-sm font-medium\">{course.title}</p>\n <p className=\"text-xs text-muted-foreground\">Completed {course.completedDate}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500\" />\n {course.rating}/5\n </div>\n {course.certificate ? (\n <Badge variant=\"default\" className=\"text-[10px]\">\n Certificate\n </Badge>\n ) : null}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LearningMyLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningMyLearningPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Award, BookOpen, Clock, Play, Star } from 'lucide-react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EnrolledCourse = {\n id: string;\n title: string;\n progress: number;\n modules: number;\n completedModules: number;\n instructor: string;\n dueDate: string;\n};\n\ntype CompletedCourse = {\n id: string;\n title: string;\n completedDate: string;\n rating: number;\n certificate: boolean;\n};\n\nconst BASE_TS = new Date('2026-03-01T00:00:00Z').getTime();\n\nconst isoDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function LearningMyLearningPagePage() {\n const { courses } = useCrewFoundryStore();\n\n const myEnrolledCourses = useMemo<EnrolledCourse[]>(() => {\n return courses\n .filter((course) => course.status === 'active')\n .slice(0, 8)\n .map((course, index) => {\n const completedModules = Math.min(\n course.modules,\n Math.round((course.completed / Math.max(course.enrolled, 1)) * course.modules)\n );\n const progress = Math.round((completedModules / Math.max(course.modules, 1)) * 100);\n return {\n id: course.id,\n title: course.title,\n progress,\n modules: course.modules,\n completedModules,\n instructor: course.instructor,\n dueDate: isoDate(new Date(BASE_TS + (index + 1) * 86400000 * 12).toISOString()),\n };\n });\n }, [courses]);\n\n const completedCourses = useMemo<CompletedCourse[]>(() => {\n return courses\n .filter((course) => course.completed > 0)\n .slice(0, 8)\n .map((course, index) => ({\n id: `completed-${course.id}`,\n title: course.title,\n completedDate: isoDate(new Date(BASE_TS - (index + 1) * 86400000 * 15).toISOString()),\n rating: Number(course.rating.toFixed(1)),\n certificate: course.completed / Math.max(course.enrolled, 1) > 0.35,\n }));\n }, [courses]);\n\n const hoursLogged = myEnrolledCourses.reduce(\n (sum, course) => sum + course.completedModules * 1.25,\n 0\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>My Learning</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Track your learning progress and achievements</p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">In Progress</CardTitle>\n <BookOpen className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{myEnrolledCourses.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Completed</CardTitle>\n <Award className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{completedCourses.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Hours Logged</CardTitle>\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{hoursLogged.toFixed(1)}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Certificates</CardTitle>\n <Award className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {completedCourses.filter((course) => course.certificate).length}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>In Progress</CardTitle>\n <CardDescription>Continue where you left off</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {myEnrolledCourses.map((course) => (\n <div key={course.id} className=\"flex items-center gap-4 rounded border p-4\">\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{course.title}</p>\n <p className=\"text-xs text-text-secondary\">\n {course.instructor} · Due {course.dueDate}\n </p>\n <div className=\"mt-2 flex items-center gap-2\">\n <div className=\"h-2 flex-1 overflow-hidden rounded bg-bg-sunken\">\n <div\n className=\"h-2 rounded bg-action-primary-bg\"\n style={{ width: `${course.progress}%` }}\n />\n </div>\n <span className=\"text-xs font-medium\">{course.progress}%</span>\n </div>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {course.completedModules}/{course.modules} modules\n </p>\n </div>\n <Button size=\"sm\">\n <Play className=\"mr-1 h-3 w-3\" />\n Continue\n </Button>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Completed</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {completedCourses.map((course) => (\n <div key={course.id} className=\"flex items-center justify-between rounded border p-3\">\n <div>\n <p className=\"text-sm font-medium\">{course.title}</p>\n <p className=\"text-xs text-text-secondary\">Completed {course.completedDate}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {course.rating}/5\n </div>\n {course.certificate ? (\n <Badge variant=\"default\" className=\"text-[10px]\">\n Certificate\n </Badge>\n ) : null}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,28 +2,28 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { Calendar as n, CheckCircle as r, Clock as i, Plus as a } from "lucide-react";
|
|
4
4
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, GlassCard as m, GradientText as h } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/MarketplaceBookingManagementPagePage.tsx
|
|
7
|
-
var
|
|
7
|
+
var g = (e) => {
|
|
8
8
|
let t = new Date(e);
|
|
9
9
|
return Number.isNaN(t.getTime()) ? "Unknown" : t.toISOString().split("T")[0];
|
|
10
10
|
};
|
|
11
|
-
function
|
|
12
|
-
let { marketplaceServices:
|
|
13
|
-
let n =
|
|
11
|
+
function _() {
|
|
12
|
+
let { marketplaceServices: _, projects: v, teams: y } = e(), b = t(() => _.slice(0, 12).map((e, t) => {
|
|
13
|
+
let n = v[t % Math.max(v.length, 1)], r = y[t % Math.max(y.length, 1)], i = e.status === "active" ? "confirmed" : e.status === "pending" ? "pending" : "completed";
|
|
14
14
|
return {
|
|
15
15
|
id: e.id,
|
|
16
16
|
service: e.title,
|
|
17
17
|
provider: e.provider,
|
|
18
|
-
date:
|
|
18
|
+
date: g(n?.startDate || e.deliveryTime),
|
|
19
19
|
time: `${String(t % 12 + 1).padStart(2, "0")}:00 ${t % 2 == 0 ? "AM" : "PM"}`,
|
|
20
20
|
duration: `${Math.max(1, Math.ceil((r?.memberCount || 4) / 4))} hours`,
|
|
21
21
|
status: i
|
|
22
22
|
};
|
|
23
23
|
}), [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
_,
|
|
25
|
+
v,
|
|
26
|
+
y
|
|
27
27
|
]);
|
|
28
28
|
return /* @__PURE__ */ s("div", {
|
|
29
29
|
className: "space-y-6 p-6",
|
|
@@ -32,9 +32,9 @@ function h() {
|
|
|
32
32
|
className: "flex items-center justify-between",
|
|
33
33
|
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
34
34
|
className: "text-2xl font-semibold",
|
|
35
|
-
children: "Booking Management"
|
|
35
|
+
children: /* @__PURE__ */ o(h, { children: "Booking Management" })
|
|
36
36
|
}), /* @__PURE__ */ o("p", {
|
|
37
|
-
className: "text-sm text-
|
|
37
|
+
className: "text-sm text-text-secondary",
|
|
38
38
|
children: "Manage service provider appointments"
|
|
39
39
|
})] }), /* @__PURE__ */ s(l, {
|
|
40
40
|
size: "sm",
|
|
@@ -44,47 +44,59 @@ function h() {
|
|
|
44
44
|
/* @__PURE__ */ s("div", {
|
|
45
45
|
className: "grid gap-4 md:grid-cols-3",
|
|
46
46
|
children: [
|
|
47
|
-
/* @__PURE__ */ s(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
47
|
+
/* @__PURE__ */ s(m, {
|
|
48
|
+
treatment: "metric",
|
|
49
|
+
className: "border-border-seam",
|
|
50
|
+
children: [/* @__PURE__ */ s(f, {
|
|
51
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
52
|
+
children: [/* @__PURE__ */ o(p, {
|
|
53
|
+
className: "text-sm font-medium",
|
|
54
|
+
children: "Upcoming"
|
|
55
|
+
}), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-status-info-text" })]
|
|
56
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
57
|
+
className: "text-2xl font-bold tabular-nums",
|
|
58
|
+
children: b.filter((e) => e.status !== "completed").length
|
|
59
|
+
}) })]
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ s(m, {
|
|
62
|
+
treatment: "metric",
|
|
63
|
+
className: "border-border-seam",
|
|
64
|
+
children: [/* @__PURE__ */ s(f, {
|
|
65
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
66
|
+
children: [/* @__PURE__ */ o(p, {
|
|
67
|
+
className: "text-sm font-medium",
|
|
68
|
+
children: "Confirmed"
|
|
69
|
+
}), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-status-success-text" })]
|
|
70
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
71
|
+
className: "text-2xl font-bold tabular-nums",
|
|
72
|
+
children: b.filter((e) => e.status === "confirmed").length
|
|
73
|
+
}) })]
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ s(m, {
|
|
76
|
+
treatment: "metric",
|
|
77
|
+
className: "border-border-seam",
|
|
78
|
+
children: [/* @__PURE__ */ s(f, {
|
|
79
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
80
|
+
children: [/* @__PURE__ */ o(p, {
|
|
81
|
+
className: "text-sm font-medium",
|
|
82
|
+
children: "Pending"
|
|
83
|
+
}), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-status-warning-text" })]
|
|
84
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
85
|
+
className: "text-2xl font-bold tabular-nums",
|
|
86
|
+
children: b.filter((e) => e.status === "pending").length
|
|
87
|
+
}) })]
|
|
88
|
+
})
|
|
77
89
|
]
|
|
78
90
|
}),
|
|
79
91
|
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "All Bookings" }) }), /* @__PURE__ */ o(d, {
|
|
80
92
|
className: "space-y-3",
|
|
81
|
-
children:
|
|
93
|
+
children: b.map((e) => /* @__PURE__ */ s("div", {
|
|
82
94
|
className: "flex items-center justify-between rounded border p-4",
|
|
83
95
|
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
|
|
84
96
|
className: "text-sm font-medium",
|
|
85
97
|
children: e.service
|
|
86
98
|
}), /* @__PURE__ */ o("p", {
|
|
87
|
-
className: "text-xs text-
|
|
99
|
+
className: "text-xs text-text-secondary",
|
|
88
100
|
children: e.provider
|
|
89
101
|
})] }), /* @__PURE__ */ s("div", {
|
|
90
102
|
className: "flex items-center gap-3",
|
|
@@ -94,7 +106,7 @@ function h() {
|
|
|
94
106
|
className: "font-medium",
|
|
95
107
|
children: e.date
|
|
96
108
|
}), /* @__PURE__ */ s("p", {
|
|
97
|
-
className: "text-
|
|
109
|
+
className: "text-text-secondary",
|
|
98
110
|
children: [
|
|
99
111
|
e.time,
|
|
100
112
|
" · ",
|
|
@@ -113,6 +125,6 @@ function h() {
|
|
|
113
125
|
});
|
|
114
126
|
}
|
|
115
127
|
//#endregion
|
|
116
|
-
export {
|
|
128
|
+
export { _ as MarketplaceBookingManagementPagePage };
|
|
117
129
|
|
|
118
130
|
//# sourceMappingURL=MarketplaceBookingManagementPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceBookingManagementPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceBookingManagementPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"MarketplaceBookingManagementPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceBookingManagementPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { Calendar, CheckCircle, Clock, Plus } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype Booking = {\n id: string;\n service: string;\n provider: string;\n date: string;\n time: string;\n duration: string;\n status: 'confirmed' | 'pending' | 'completed';\n};\n\nconst formatDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function MarketplaceBookingManagementPagePage() {\n const { marketplaceServices, projects, teams } = useCrewFoundryStore();\n\n const bookings = useMemo<Booking[]>(() => {\n return marketplaceServices.slice(0, 12).map((service, index) => {\n const project = projects[index % Math.max(projects.length, 1)];\n const team = teams[index % Math.max(teams.length, 1)];\n const status: Booking['status'] =\n service.status === 'active'\n ? 'confirmed'\n : service.status === 'pending'\n ? 'pending'\n : 'completed';\n\n return {\n id: service.id,\n service: service.title,\n provider: service.provider,\n date: formatDate(project?.startDate || service.deliveryTime),\n time: `${String((index % 12) + 1).padStart(2, '0')}:00 ${index % 2 === 0 ? 'AM' : 'PM'}`,\n duration: `${Math.max(1, Math.ceil((team?.memberCount || 4) / 4))} hours`,\n status,\n };\n });\n }, [marketplaceServices, projects, teams]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Booking Management</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Manage service provider appointments</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New Booking\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Upcoming</CardTitle>\n <Calendar className=\"h-4 w-4 text-status-info-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {bookings.filter((booking) => booking.status !== 'completed').length}\n </div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Confirmed</CardTitle>\n <CheckCircle className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {bookings.filter((booking) => booking.status === 'confirmed').length}\n </div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Pending</CardTitle>\n <Clock className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">\n {bookings.filter((booking) => booking.status === 'pending').length}\n </div>\n </CardContent>\n </GlassCard>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>All Bookings</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {bookings.map((booking) => (\n <div key={booking.id} className=\"flex items-center justify-between rounded border p-4\">\n <div>\n <p className=\"text-sm font-medium\">{booking.service}</p>\n <p className=\"text-xs text-text-secondary\">{booking.provider}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"text-right text-xs\">\n <p className=\"font-medium\">{booking.date}</p>\n <p className=\"text-text-secondary\">\n {booking.time} · {booking.duration}\n </p>\n </div>\n <Badge\n variant={\n booking.status === 'confirmed'\n ? 'default'\n : booking.status === 'completed'\n ? 'secondary'\n : 'outline'\n }\n className=\"text-[10px]\"\n >\n {booking.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|