@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
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { Briefcase as t, Calendar as n, CheckCircle as r, DollarSign as i, MapPin as a, Share2 as o, Users as s } from "lucide-react";
|
|
3
3
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as u, Button as d, Card as f, CardContent as p, CardDescription as m, CardHeader as h, CardTitle as g } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
import { Badge as u, Button as d, Card as f, CardContent as p, CardDescription as m, CardHeader as h, CardTitle as g, GlassCard as _, GradientText as v } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/HiringJobDetailsPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { jobPostings:
|
|
8
|
-
if (!
|
|
9
|
-
className: "p-6 text-center text-
|
|
6
|
+
function y() {
|
|
7
|
+
let { jobPostings: y, candidates: b } = e(), x = y[0];
|
|
8
|
+
if (!x) return /* @__PURE__ */ c("div", {
|
|
9
|
+
className: "p-6 text-center text-text-secondary",
|
|
10
10
|
children: "No job posting found."
|
|
11
11
|
});
|
|
12
|
-
let
|
|
12
|
+
let S = b.filter((e) => e.position === x.title);
|
|
13
13
|
return /* @__PURE__ */ l("div", {
|
|
14
14
|
className: "space-y-6 p-6 max-w-4xl",
|
|
15
15
|
children: [
|
|
@@ -19,28 +19,28 @@ function _() {
|
|
|
19
19
|
className: "flex items-center gap-2 mb-1",
|
|
20
20
|
children: [/* @__PURE__ */ c("h1", {
|
|
21
21
|
className: "text-2xl font-semibold",
|
|
22
|
-
children:
|
|
22
|
+
children: /* @__PURE__ */ c(v, { children: x.title })
|
|
23
23
|
}), /* @__PURE__ */ c(u, {
|
|
24
|
-
variant:
|
|
25
|
-
children:
|
|
24
|
+
variant: x.status === "active" ? "default" : "secondary",
|
|
25
|
+
children: x.status
|
|
26
26
|
})]
|
|
27
27
|
}), /* @__PURE__ */ l("div", {
|
|
28
|
-
className: "flex items-center gap-4 text-sm text-
|
|
28
|
+
className: "flex items-center gap-4 text-sm text-text-secondary",
|
|
29
29
|
children: [
|
|
30
30
|
/* @__PURE__ */ l("span", {
|
|
31
31
|
className: "flex items-center gap-1",
|
|
32
|
-
children: [/* @__PURE__ */ c(t, { className: "h-3 w-3" }),
|
|
32
|
+
children: [/* @__PURE__ */ c(t, { className: "h-3 w-3" }), x.department]
|
|
33
33
|
}),
|
|
34
34
|
/* @__PURE__ */ l("span", {
|
|
35
35
|
className: "flex items-center gap-1",
|
|
36
|
-
children: [/* @__PURE__ */ c(a, { className: "h-3 w-3" }),
|
|
36
|
+
children: [/* @__PURE__ */ c(a, { className: "h-3 w-3" }), x.location]
|
|
37
37
|
}),
|
|
38
38
|
/* @__PURE__ */ l("span", {
|
|
39
39
|
className: "flex items-center gap-1",
|
|
40
40
|
children: [
|
|
41
41
|
/* @__PURE__ */ c(n, { className: "h-3 w-3" }),
|
|
42
42
|
"Posted ",
|
|
43
|
-
|
|
43
|
+
x.postedDate
|
|
44
44
|
]
|
|
45
45
|
})
|
|
46
46
|
]
|
|
@@ -59,36 +59,40 @@ function _() {
|
|
|
59
59
|
/* @__PURE__ */ l("div", {
|
|
60
60
|
className: "grid gap-4 md:grid-cols-4",
|
|
61
61
|
children: [
|
|
62
|
+
/* @__PURE__ */ c(_, {
|
|
63
|
+
treatment: "metric",
|
|
64
|
+
className: "border-border-seam",
|
|
65
|
+
children: /* @__PURE__ */ l(p, {
|
|
66
|
+
className: "p-4 text-center",
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ c(s, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
69
|
+
/* @__PURE__ */ c("p", {
|
|
70
|
+
className: "text-2xl font-bold tabular-nums",
|
|
71
|
+
children: x.applicants
|
|
72
|
+
}),
|
|
73
|
+
/* @__PURE__ */ c("p", {
|
|
74
|
+
className: "text-xs text-text-secondary",
|
|
75
|
+
children: "Applicants"
|
|
76
|
+
})
|
|
77
|
+
]
|
|
78
|
+
})
|
|
79
|
+
}),
|
|
62
80
|
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
63
81
|
className: "p-4 text-center",
|
|
64
82
|
children: [
|
|
65
|
-
/* @__PURE__ */ c(
|
|
66
|
-
/* @__PURE__ */ c("p", {
|
|
67
|
-
className: "text-2xl font-bold",
|
|
68
|
-
children: y.applicants
|
|
69
|
-
}),
|
|
70
|
-
/* @__PURE__ */ c("p", {
|
|
71
|
-
className: "text-xs text-muted-foreground",
|
|
72
|
-
children: "Applicants"
|
|
73
|
-
})
|
|
74
|
-
]
|
|
75
|
-
}) }),
|
|
76
|
-
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
77
|
-
className: "p-4 text-center",
|
|
78
|
-
children: [
|
|
79
|
-
/* @__PURE__ */ c(i, { className: "h-5 w-5 mx-auto text-muted-foreground mb-1" }),
|
|
83
|
+
/* @__PURE__ */ c(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
80
84
|
/* @__PURE__ */ l("p", {
|
|
81
85
|
className: "text-lg font-bold",
|
|
82
86
|
children: [
|
|
83
87
|
"$",
|
|
84
|
-
(
|
|
88
|
+
(x.salaryMin / 1e3).toFixed(0),
|
|
85
89
|
"K-$",
|
|
86
|
-
(
|
|
90
|
+
(x.salaryMax / 1e3).toFixed(0),
|
|
87
91
|
"K"
|
|
88
92
|
]
|
|
89
93
|
}),
|
|
90
94
|
/* @__PURE__ */ c("p", {
|
|
91
|
-
className: "text-xs text-
|
|
95
|
+
className: "text-xs text-text-secondary",
|
|
92
96
|
children: "Salary Range"
|
|
93
97
|
})
|
|
94
98
|
]
|
|
@@ -96,13 +100,13 @@ function _() {
|
|
|
96
100
|
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
97
101
|
className: "p-4 text-center",
|
|
98
102
|
children: [
|
|
99
|
-
/* @__PURE__ */ c(n, { className: "h-5 w-5 mx-auto text-
|
|
103
|
+
/* @__PURE__ */ c(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
100
104
|
/* @__PURE__ */ c("p", {
|
|
101
105
|
className: "text-lg font-bold",
|
|
102
|
-
children:
|
|
106
|
+
children: x.deadline
|
|
103
107
|
}),
|
|
104
108
|
/* @__PURE__ */ c("p", {
|
|
105
|
-
className: "text-xs text-
|
|
109
|
+
className: "text-xs text-text-secondary",
|
|
106
110
|
children: "Deadline"
|
|
107
111
|
})
|
|
108
112
|
]
|
|
@@ -110,13 +114,13 @@ function _() {
|
|
|
110
114
|
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
111
115
|
className: "p-4 text-center",
|
|
112
116
|
children: [
|
|
113
|
-
/* @__PURE__ */ c(r, { className: "h-5 w-5 mx-auto text-
|
|
117
|
+
/* @__PURE__ */ c(r, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
114
118
|
/* @__PURE__ */ c("p", {
|
|
115
119
|
className: "text-lg font-bold",
|
|
116
|
-
children:
|
|
120
|
+
children: x.experienceLevel
|
|
117
121
|
}),
|
|
118
122
|
/* @__PURE__ */ c("p", {
|
|
119
|
-
className: "text-xs text-
|
|
123
|
+
className: "text-xs text-text-secondary",
|
|
120
124
|
children: "Level"
|
|
121
125
|
})
|
|
122
126
|
]
|
|
@@ -124,27 +128,27 @@ function _() {
|
|
|
124
128
|
]
|
|
125
129
|
}),
|
|
126
130
|
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(h, { children: /* @__PURE__ */ c(g, { children: "Description" }) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("p", {
|
|
127
|
-
className: "text-sm text-
|
|
128
|
-
children:
|
|
131
|
+
className: "text-sm text-text-secondary",
|
|
132
|
+
children: x.description
|
|
129
133
|
}) })] }),
|
|
130
134
|
/* @__PURE__ */ l("div", {
|
|
131
135
|
className: "grid gap-4 md:grid-cols-2",
|
|
132
136
|
children: [/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(h, { children: /* @__PURE__ */ c(g, { children: "Requirements" }) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("ul", {
|
|
133
137
|
className: "space-y-2",
|
|
134
|
-
children:
|
|
138
|
+
children: x.requirements.map((e, t) => /* @__PURE__ */ l("li", {
|
|
135
139
|
className: "flex items-start gap-2 text-sm",
|
|
136
|
-
children: [/* @__PURE__ */ c(r, { className: "h-4 w-4 text-
|
|
140
|
+
children: [/* @__PURE__ */ c(r, { className: "h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0" }), e]
|
|
137
141
|
}, t))
|
|
138
142
|
}) })] }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(h, { children: /* @__PURE__ */ c(g, { children: "Benefits" }) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("ul", {
|
|
139
143
|
className: "space-y-2",
|
|
140
|
-
children:
|
|
144
|
+
children: x.benefits.map((e, t) => /* @__PURE__ */ l("li", {
|
|
141
145
|
className: "flex items-start gap-2 text-sm",
|
|
142
|
-
children: [/* @__PURE__ */ c(r, { className: "h-4 w-4 text-
|
|
146
|
+
children: [/* @__PURE__ */ c(r, { className: "h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0" }), e]
|
|
143
147
|
}, t))
|
|
144
148
|
}) })] })]
|
|
145
149
|
}),
|
|
146
|
-
|
|
147
|
-
className: "grid grid-cols-5 gap-2 text-xs font-medium text-
|
|
150
|
+
S.length > 0 && /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(h, { children: [/* @__PURE__ */ c(g, { children: "Applicants for this Role" }), /* @__PURE__ */ l(m, { children: [S.length, " candidates"] })] }), /* @__PURE__ */ l(p, { children: [/* @__PURE__ */ l("div", {
|
|
151
|
+
className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
|
|
148
152
|
children: [
|
|
149
153
|
/* @__PURE__ */ c("span", { children: "Name" }),
|
|
150
154
|
/* @__PURE__ */ c("span", { children: "Source" }),
|
|
@@ -161,7 +165,7 @@ function _() {
|
|
|
161
165
|
children: "Status"
|
|
162
166
|
})
|
|
163
167
|
]
|
|
164
|
-
}),
|
|
168
|
+
}), S.map((e) => /* @__PURE__ */ l("div", {
|
|
165
169
|
className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
|
|
166
170
|
children: [
|
|
167
171
|
/* @__PURE__ */ l("span", {
|
|
@@ -173,7 +177,7 @@ function _() {
|
|
|
173
177
|
]
|
|
174
178
|
}),
|
|
175
179
|
/* @__PURE__ */ c("span", {
|
|
176
|
-
className: "text-
|
|
180
|
+
className: "text-text-secondary",
|
|
177
181
|
children: e.source
|
|
178
182
|
}),
|
|
179
183
|
/* @__PURE__ */ l("span", {
|
|
@@ -198,6 +202,6 @@ function _() {
|
|
|
198
202
|
});
|
|
199
203
|
}
|
|
200
204
|
//#endregion
|
|
201
|
-
export {
|
|
205
|
+
export { y as HiringJobDetailsPagePage };
|
|
202
206
|
|
|
203
207
|
//# sourceMappingURL=HiringJobDetailsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HiringJobDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringJobDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport { Briefcase, Calendar, CheckCircle, DollarSign, MapPin, Share2, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringJobDetailsPagePage() {\n const { jobPostings, candidates } = useCrewFoundryStore();\n const job = jobPostings[0]; // Show first job as detail view\n\n if (!job) {\n return <div className=\"p-6 text-center text-muted-foreground\">No job posting found.</div>;\n }\n\n const jobCandidates = candidates.filter((c) => c.position === job.title);\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 <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">{job.title}</h1>\n <Badge variant={job.status === 'active' ? 'default' : 'secondary'}>{job.status}</Badge>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" />\n {job.department}\n </span>\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {job.location}\n </span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n Posted {job.postedDate}\n </span>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Share2 className=\"h-4 w-4 mr-1\" />\n Share\n </Button>\n <Button size=\"sm\">Edit Posting</Button>\n </div>\n </div>\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-muted-foreground mb-1\" />\n <p className=\"text-2xl font-bold\">{job.applicants}</p>\n <p className=\"text-xs text-muted-foreground\">Applicants</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-muted-foreground mb-1\" />\n <p className=\"text-lg font-bold\">\n ${(job.salaryMin / 1000).toFixed(0)}K-${(job.salaryMax / 1000).toFixed(0)}K\n </p>\n <p className=\"text-xs text-muted-foreground\">Salary Range</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-muted-foreground mb-1\" />\n <p className=\"text-lg font-bold\">{job.deadline}</p>\n <p className=\"text-xs text-muted-foreground\">Deadline</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <CheckCircle className=\"h-5 w-5 mx-auto text-muted-foreground mb-1\" />\n <p className=\"text-lg font-bold\">{job.experienceLevel}</p>\n <p className=\"text-xs text-muted-foreground\">Level</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">{job.description}</p>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Requirements</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.requirements.map((req, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-green-500 mt-0.5 flex-shrink-0\" />\n {req}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Benefits</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.benefits.map((ben, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-blue-500 mt-0.5 flex-shrink-0\" />\n {ben}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n </div>\n\n {jobCandidates.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Applicants for this Role</CardTitle>\n <CardDescription>{jobCandidates.length} candidates</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-muted-foreground border-b pb-2 mb-2\">\n <span>Name</span>\n <span>Source</span>\n <span className=\"text-right\">Experience</span>\n <span className=\"text-center\">Rating</span>\n <span className=\"text-center\">Status</span>\n </div>\n {jobCandidates.map((c) => (\n <div\n key={c.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">\n {c.firstName} {c.lastName}\n </span>\n <span className=\"text-muted-foreground\">{c.source}</span>\n <span className=\"text-right\">{c.experience} yrs</span>\n <div className=\"text-center\">{c.rating}/5</div>\n <div className=\"text-center\">\n <Badge\n variant={c.status === 'hired' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {c.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":"HiringJobDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringJobDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport { Briefcase, Calendar, CheckCircle, DollarSign, MapPin, Share2, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringJobDetailsPagePage() {\n const { jobPostings, candidates } = useCrewFoundryStore();\n const job = jobPostings[0]; // Show first job as detail view\n\n if (!job) {\n return <div className=\"p-6 text-center text-text-secondary\">No job posting found.</div>;\n }\n\n const jobCandidates = candidates.filter((c) => c.position === job.title);\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 <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{job.title}</GradientText>\n </h1>\n <Badge variant={job.status === 'active' ? 'default' : 'secondary'}>{job.status}</Badge>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" />\n {job.department}\n </span>\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {job.location}\n </span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n Posted {job.postedDate}\n </span>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Share2 className=\"h-4 w-4 mr-1\" />\n Share\n </Button>\n <Button size=\"sm\">Edit Posting</Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\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-2xl font-bold tabular-nums\">{job.applicants}</p>\n <p className=\"text-xs text-text-secondary\">Applicants</p>\n </CardContent>\n </GlassCard>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">\n ${(job.salaryMin / 1000).toFixed(0)}K-${(job.salaryMax / 1000).toFixed(0)}K\n </p>\n <p className=\"text-xs text-text-secondary\">Salary Range</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\">{job.deadline}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <CheckCircle className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{job.experienceLevel}</p>\n <p className=\"text-xs text-text-secondary\">Level</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{job.description}</p>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Requirements</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.requirements.map((req, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0\" />\n {req}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Benefits</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.benefits.map((ben, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0\" />\n {ben}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n </div>\n\n {jobCandidates.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Applicants for this Role</CardTitle>\n <CardDescription>{jobCandidates.length} candidates</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Name</span>\n <span>Source</span>\n <span className=\"text-right\">Experience</span>\n <span className=\"text-center\">Rating</span>\n <span className=\"text-center\">Status</span>\n </div>\n {jobCandidates.map((c) => (\n <div\n key={c.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">\n {c.firstName} {c.lastName}\n </span>\n <span className=\"text-text-secondary\">{c.source}</span>\n <span className=\"text-right\">{c.experience} yrs</span>\n <div className=\"text-center\">{c.rating}/5</div>\n <div className=\"text-center\">\n <Badge\n variant={c.status === 'hired' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {c.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,14 +2,14 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { Briefcase as n, MapPin as r, Plus as i, Search as a, Users 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,
|
|
6
|
-
import { useI18n as
|
|
5
|
+
import { Badge as l, Button as u, Card as d, CardContent as f, CardDescription as p, CardHeader as m, CardTitle as h, GradientText as g, IllustratedEmptyState as _, Input as v } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { useI18n as y } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
7
7
|
//#region src/crewfoundry/pages/HiringJobsPagePage.tsx
|
|
8
|
-
function
|
|
9
|
-
let { t:
|
|
10
|
-
let n =
|
|
8
|
+
function b() {
|
|
9
|
+
let { t: b } = y(), { jobPostings: x } = e(), [S, C] = t(""), w = (e, t) => {
|
|
10
|
+
let n = b(e);
|
|
11
11
|
return n === e ? t : n;
|
|
12
|
-
},
|
|
12
|
+
}, T = x.filter((e) => `${e.title} ${e.department} ${e.location}`.toLowerCase().includes(S.toLowerCase())), E = x.filter((e) => e.status === "active").length, D = x.reduce((e, t) => e + t.applicants, 0);
|
|
13
13
|
return /* @__PURE__ */ c("div", {
|
|
14
14
|
className: "space-y-6 p-6",
|
|
15
15
|
children: [
|
|
@@ -17,36 +17,41 @@ function v() {
|
|
|
17
17
|
className: "flex items-center justify-between",
|
|
18
18
|
children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
|
|
19
19
|
className: "text-2xl font-semibold",
|
|
20
|
-
children:
|
|
20
|
+
children: /* @__PURE__ */ s(g, { children: w("crewfoundry.hiringJobs.title", "Job Postings") })
|
|
21
21
|
}), /* @__PURE__ */ c("p", {
|
|
22
|
-
className: "text-sm text-
|
|
22
|
+
className: "text-sm text-text-secondary",
|
|
23
23
|
children: [
|
|
24
|
-
|
|
24
|
+
E,
|
|
25
25
|
" ",
|
|
26
|
-
|
|
26
|
+
w("crewfoundry.hiringJobs.summary.activePositions", "active positions"),
|
|
27
27
|
" ·",
|
|
28
28
|
" ",
|
|
29
|
-
|
|
29
|
+
D,
|
|
30
30
|
" ",
|
|
31
|
-
|
|
31
|
+
w("crewfoundry.hiringJobs.summary.totalApplicants", "total applicants")
|
|
32
32
|
]
|
|
33
33
|
})] }), /* @__PURE__ */ c(u, {
|
|
34
34
|
size: "sm",
|
|
35
|
-
children: [/* @__PURE__ */ s(i, { className: "h-4 w-4 mr-1" }),
|
|
35
|
+
children: [/* @__PURE__ */ s(i, { className: "h-4 w-4 mr-1" }), w("crewfoundry.hiringJobs.actions.postNewJob", "Post New Job")]
|
|
36
36
|
})]
|
|
37
37
|
}),
|
|
38
38
|
/* @__PURE__ */ c("div", {
|
|
39
39
|
className: "relative max-w-sm",
|
|
40
|
-
children: [/* @__PURE__ */ s(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-
|
|
41
|
-
placeholder:
|
|
40
|
+
children: [/* @__PURE__ */ s(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ s(v, {
|
|
41
|
+
placeholder: w("crewfoundry.hiringJobs.searchPlaceholder", "Search positions..."),
|
|
42
42
|
className: "pl-9",
|
|
43
|
-
value:
|
|
44
|
-
onChange: (e) =>
|
|
43
|
+
value: S,
|
|
44
|
+
onChange: (e) => C(e.target.value)
|
|
45
45
|
})]
|
|
46
46
|
}),
|
|
47
|
+
T.length === 0 && /* @__PURE__ */ s(_, {
|
|
48
|
+
illustration: "empty-search",
|
|
49
|
+
title: "No job postings found",
|
|
50
|
+
description: "Try adjusting your search, or create a new job posting."
|
|
51
|
+
}),
|
|
47
52
|
/* @__PURE__ */ s("div", {
|
|
48
53
|
className: "grid gap-4 md:grid-cols-2",
|
|
49
|
-
children:
|
|
54
|
+
children: T.map((e) => /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(m, { children: [/* @__PURE__ */ c("div", {
|
|
50
55
|
className: "flex items-center justify-between",
|
|
51
56
|
children: [/* @__PURE__ */ s(h, {
|
|
52
57
|
className: "text-lg",
|
|
@@ -59,24 +64,24 @@ function v() {
|
|
|
59
64
|
className: "grid grid-cols-2 gap-3 mb-3",
|
|
60
65
|
children: [
|
|
61
66
|
/* @__PURE__ */ c("div", {
|
|
62
|
-
className: "flex items-center gap-1 text-sm text-
|
|
67
|
+
className: "flex items-center gap-1 text-sm text-text-secondary",
|
|
63
68
|
children: [/* @__PURE__ */ s(n, { className: "h-3 w-3" }), e.department]
|
|
64
69
|
}),
|
|
65
70
|
/* @__PURE__ */ c("div", {
|
|
66
|
-
className: "flex items-center gap-1 text-sm text-
|
|
71
|
+
className: "flex items-center gap-1 text-sm text-text-secondary",
|
|
67
72
|
children: [/* @__PURE__ */ s(r, { className: "h-3 w-3" }), e.location]
|
|
68
73
|
}),
|
|
69
74
|
/* @__PURE__ */ c("div", {
|
|
70
|
-
className: "flex items-center gap-1 text-sm text-
|
|
75
|
+
className: "flex items-center gap-1 text-sm text-text-secondary",
|
|
71
76
|
children: [
|
|
72
77
|
/* @__PURE__ */ s(o, { className: "h-3 w-3" }),
|
|
73
78
|
e.applicants,
|
|
74
79
|
" ",
|
|
75
|
-
|
|
80
|
+
w("crewfoundry.hiringJobs.card.applicants", "applicants")
|
|
76
81
|
]
|
|
77
82
|
}),
|
|
78
83
|
/* @__PURE__ */ c("div", {
|
|
79
|
-
className: "text-sm text-
|
|
84
|
+
className: "text-sm text-text-secondary",
|
|
80
85
|
children: [
|
|
81
86
|
"$",
|
|
82
87
|
(e.salaryMin / 1e3).toFixed(0),
|
|
@@ -87,7 +92,7 @@ function v() {
|
|
|
87
92
|
})
|
|
88
93
|
]
|
|
89
94
|
}), /* @__PURE__ */ c("div", {
|
|
90
|
-
className: "flex items-center justify-between text-xs text-
|
|
95
|
+
className: "flex items-center justify-between text-xs text-text-secondary",
|
|
91
96
|
children: [/* @__PURE__ */ c("div", {
|
|
92
97
|
className: "flex gap-1",
|
|
93
98
|
children: [/* @__PURE__ */ s(l, {
|
|
@@ -100,7 +105,7 @@ function v() {
|
|
|
100
105
|
children: e.experienceLevel
|
|
101
106
|
})]
|
|
102
107
|
}), /* @__PURE__ */ c("span", { children: [
|
|
103
|
-
|
|
108
|
+
w("crewfoundry.hiringJobs.card.deadline", "Deadline"),
|
|
104
109
|
": ",
|
|
105
110
|
e.deadline
|
|
106
111
|
] })]
|
|
@@ -110,6 +115,6 @@ function v() {
|
|
|
110
115
|
});
|
|
111
116
|
}
|
|
112
117
|
//#endregion
|
|
113
|
-
export {
|
|
118
|
+
export { b as HiringJobsPagePage };
|
|
114
119
|
|
|
115
120
|
//# sourceMappingURL=HiringJobsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HiringJobsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringJobsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Briefcase, MapPin, Plus, Search, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringJobsPagePage() {\n const { t: translate } = useI18n();\n const { jobPostings } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n\n const filtered = jobPostings.filter((j) =>\n `${j.title} ${j.department} ${j.location}`.toLowerCase().includes(search.toLowerCase())\n );\n const activeJobs = jobPostings.filter((j) => j.status === 'active').length;\n const totalApplicants = jobPostings.reduce((s, j) => s + j.applicants, 0);\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 {t('crewfoundry.hiringJobs.title', 'Job Postings')}
|
|
1
|
+
{"version":3,"file":"HiringJobsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringJobsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n IllustratedEmptyState,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Briefcase, MapPin, Plus, Search, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringJobsPagePage() {\n const { t: translate } = useI18n();\n const { jobPostings } = useCrewFoundryStore();\n const [search, setSearch] = useState('');\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n\n const filtered = jobPostings.filter((j) =>\n `${j.title} ${j.department} ${j.location}`.toLowerCase().includes(search.toLowerCase())\n );\n const activeJobs = jobPostings.filter((j) => j.status === 'active').length;\n const totalApplicants = jobPostings.reduce((s, j) => s + j.applicants, 0);\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>{t('crewfoundry.hiringJobs.title', 'Job Postings')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {activeJobs} {t('crewfoundry.hiringJobs.summary.activePositions', 'active positions')} ·{' '}\n {totalApplicants}{' '}\n {t('crewfoundry.hiringJobs.summary.totalApplicants', 'total applicants')}\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('crewfoundry.hiringJobs.actions.postNewJob', 'Post New Job')}\n </Button>\n </div>\n\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={t('crewfoundry.hiringJobs.searchPlaceholder', 'Search positions...')}\n className=\"pl-9\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n\n {filtered.length === 0 && (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No job postings found\"\n description=\"Try adjusting your search, or create a new job posting.\"\n />\n )}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n {filtered.map((job) => (\n <Card key={job.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-lg\">{job.title}</CardTitle>\n <Badge\n variant={\n job.status === 'active'\n ? 'default'\n : job.status === 'paused'\n ? 'secondary'\n : 'outline'\n }\n >\n {job.status}\n </Badge>\n </div>\n <CardDescription>{job.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 gap-3 mb-3\">\n <div className=\"flex items-center gap-1 text-sm text-text-secondary\">\n <Briefcase className=\"h-3 w-3\" />\n {job.department}\n </div>\n <div className=\"flex items-center gap-1 text-sm text-text-secondary\">\n <MapPin className=\"h-3 w-3\" />\n {job.location}\n </div>\n <div className=\"flex items-center gap-1 text-sm text-text-secondary\">\n <Users className=\"h-3 w-3\" />\n {job.applicants} {t('crewfoundry.hiringJobs.card.applicants', 'applicants')}\n </div>\n <div className=\"text-sm text-text-secondary\">\n ${(job.salaryMin / 1000).toFixed(0)}K — ${(job.salaryMax / 1000).toFixed(0)}K\n </div>\n </div>\n <div className=\"flex items-center justify-between text-xs text-text-secondary\">\n <div className=\"flex gap-1\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {job.type.replace('_', ' ')}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {job.experienceLevel}\n </Badge>\n </div>\n <span>\n {t('crewfoundry.hiringJobs.card.deadline', 'Deadline')}: {job.deadline}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { Building2 as t, DollarSign as n, MapPin as r, Plus as i, Users as a } from "lucide-react";
|
|
3
3
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as c, Button as l, Card as u, CardContent as d, CardDescription as f, CardHeader as p, CardTitle as m,
|
|
4
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardDescription as f, CardHeader as p, CardTitle as m, GlassCard as h, GradientText as g, Separator as _ } from "@burdenoff/fe-libs/ui";
|
|
5
5
|
//#region src/crewfoundry/pages/HrDepartmentsPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { departments:
|
|
6
|
+
function v() {
|
|
7
|
+
let { departments: v, employees: y } = e(), b = v.reduce((e, t) => e + t.budget, 0), x = v.reduce((e, t) => e + t.employeeCount, 0);
|
|
8
8
|
return /* @__PURE__ */ s("div", {
|
|
9
9
|
className: "space-y-6 p-6",
|
|
10
10
|
children: [
|
|
@@ -12,9 +12,9 @@ function g() {
|
|
|
12
12
|
className: "flex items-center justify-between",
|
|
13
13
|
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
14
14
|
className: "text-2xl font-semibold",
|
|
15
|
-
children: "Departments"
|
|
15
|
+
children: /* @__PURE__ */ o(g, { children: "Departments" })
|
|
16
16
|
}), /* @__PURE__ */ o("p", {
|
|
17
|
-
className: "text-sm text-
|
|
17
|
+
className: "text-sm text-text-secondary",
|
|
18
18
|
children: "Organizational structure and department management"
|
|
19
19
|
})] }), /* @__PURE__ */ s(l, {
|
|
20
20
|
size: "sm",
|
|
@@ -24,46 +24,58 @@ function g() {
|
|
|
24
24
|
/* @__PURE__ */ s("div", {
|
|
25
25
|
className: "grid gap-4 md:grid-cols-3",
|
|
26
26
|
children: [
|
|
27
|
-
/* @__PURE__ */ s(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
/* @__PURE__ */ s(h, {
|
|
28
|
+
treatment: "metric",
|
|
29
|
+
className: "border-border-seam",
|
|
30
|
+
children: [/* @__PURE__ */ s(p, {
|
|
31
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
32
|
+
children: [/* @__PURE__ */ o(m, {
|
|
33
|
+
className: "text-sm font-medium",
|
|
34
|
+
children: "Total Departments"
|
|
35
|
+
}), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-text-secondary" })]
|
|
36
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
37
|
+
className: "text-2xl font-bold tabular-nums",
|
|
38
|
+
children: v.length
|
|
39
|
+
}) })]
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ s(h, {
|
|
42
|
+
treatment: "metric",
|
|
43
|
+
className: "border-border-seam",
|
|
44
|
+
children: [/* @__PURE__ */ s(p, {
|
|
45
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
46
|
+
children: [/* @__PURE__ */ o(m, {
|
|
47
|
+
className: "text-sm font-medium",
|
|
48
|
+
children: "Total Headcount"
|
|
49
|
+
}), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-text-secondary" })]
|
|
50
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
51
|
+
className: "text-2xl font-bold tabular-nums",
|
|
52
|
+
children: x
|
|
53
|
+
}) })]
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ s(h, {
|
|
56
|
+
treatment: "metric",
|
|
57
|
+
className: "border-border-seam",
|
|
58
|
+
children: [/* @__PURE__ */ s(p, {
|
|
59
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
60
|
+
children: [/* @__PURE__ */ o(m, {
|
|
61
|
+
className: "text-sm font-medium",
|
|
62
|
+
children: "Total Budget"
|
|
63
|
+
}), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-text-secondary" })]
|
|
64
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ s("div", {
|
|
65
|
+
className: "text-2xl font-bold tabular-nums",
|
|
66
|
+
children: [
|
|
67
|
+
"$",
|
|
68
|
+
(b / 1e6).toFixed(1),
|
|
69
|
+
"M"
|
|
70
|
+
]
|
|
71
|
+
}) })]
|
|
72
|
+
})
|
|
61
73
|
]
|
|
62
74
|
}),
|
|
63
75
|
/* @__PURE__ */ o("div", {
|
|
64
76
|
className: "grid gap-4 md:grid-cols-2",
|
|
65
|
-
children:
|
|
66
|
-
let t =
|
|
77
|
+
children: v.map((e) => {
|
|
78
|
+
let t = y.filter((t) => t.department === e.name), n = t.length > 0 ? Math.round(t.reduce((e, t) => e + t.salary, 0) / t.length) : 0, i = t.length > 0 ? (t.reduce((e, t) => e + t.performanceScore, 0) / t.length).toFixed(1) : "0";
|
|
67
79
|
return /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(p, { children: [/* @__PURE__ */ s("div", {
|
|
68
80
|
className: "flex items-center justify-between",
|
|
69
81
|
children: [/* @__PURE__ */ o(m, {
|
|
@@ -81,21 +93,21 @@ function g() {
|
|
|
81
93
|
className: "grid grid-cols-2 gap-4 mb-4",
|
|
82
94
|
children: [
|
|
83
95
|
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
|
|
84
|
-
className: "text-xs text-
|
|
96
|
+
className: "text-xs text-text-secondary",
|
|
85
97
|
children: "Department Head"
|
|
86
98
|
}), /* @__PURE__ */ o("p", {
|
|
87
99
|
className: "text-sm font-medium",
|
|
88
100
|
children: e.headName
|
|
89
101
|
})] }),
|
|
90
102
|
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
|
|
91
|
-
className: "text-xs text-
|
|
103
|
+
className: "text-xs text-text-secondary",
|
|
92
104
|
children: "Headcount"
|
|
93
105
|
}), /* @__PURE__ */ s("p", {
|
|
94
106
|
className: "text-sm font-medium",
|
|
95
107
|
children: [e.employeeCount, " employees"]
|
|
96
108
|
})] }),
|
|
97
109
|
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
|
|
98
|
-
className: "text-xs text-
|
|
110
|
+
className: "text-xs text-text-secondary",
|
|
99
111
|
children: "Annual Budget"
|
|
100
112
|
}), /* @__PURE__ */ s("p", {
|
|
101
113
|
className: "text-sm font-medium",
|
|
@@ -106,7 +118,7 @@ function g() {
|
|
|
106
118
|
]
|
|
107
119
|
})] }),
|
|
108
120
|
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
|
|
109
|
-
className: "text-xs text-
|
|
121
|
+
className: "text-xs text-text-secondary",
|
|
110
122
|
children: "Avg Salary"
|
|
111
123
|
}), /* @__PURE__ */ s("p", {
|
|
112
124
|
className: "text-sm font-medium",
|
|
@@ -114,18 +126,18 @@ function g() {
|
|
|
114
126
|
})] })
|
|
115
127
|
]
|
|
116
128
|
}),
|
|
117
|
-
/* @__PURE__ */ o(
|
|
129
|
+
/* @__PURE__ */ o(_, { className: "mb-3" }),
|
|
118
130
|
/* @__PURE__ */ s("div", {
|
|
119
131
|
className: "flex items-center justify-between text-xs",
|
|
120
132
|
children: [/* @__PURE__ */ s("span", {
|
|
121
|
-
className: "text-
|
|
133
|
+
className: "text-text-secondary",
|
|
122
134
|
children: [
|
|
123
135
|
"Avg Performance: ",
|
|
124
136
|
i,
|
|
125
137
|
"/5"
|
|
126
138
|
]
|
|
127
139
|
}), /* @__PURE__ */ s("span", {
|
|
128
|
-
className: "text-
|
|
140
|
+
className: "text-text-secondary",
|
|
129
141
|
children: [
|
|
130
142
|
"Cost/Head: $",
|
|
131
143
|
Math.round(e.budget / e.employeeCount / 1e3),
|
|
@@ -140,6 +152,6 @@ function g() {
|
|
|
140
152
|
});
|
|
141
153
|
}
|
|
142
154
|
//#endregion
|
|
143
|
-
export {
|
|
155
|
+
export { v as HrDepartmentsPagePage };
|
|
144
156
|
|
|
145
157
|
//# sourceMappingURL=HrDepartmentsPagePage.js.map
|