@burdenoff/microfe-crewfoundry 2026.626.1 → 2026.703.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/components/forms/ConfirmDialog.js +43 -0
- package/dist/crewfoundry/components/forms/ConfirmDialog.js.map +1 -0
- package/dist/crewfoundry/components/forms/FormModal.js +220 -0
- package/dist/crewfoundry/components/forms/FormModal.js.map +1 -0
- package/dist/crewfoundry/components/forms/formValues.js +20 -0
- package/dist/crewfoundry/components/forms/formValues.js.map +1 -0
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +255 -65
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +28 -17
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +57 -53
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +32 -23
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +44 -29
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +183 -57
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +214 -92
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +165 -131
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +163 -133
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +269 -54
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +225 -78
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +213 -59
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +287 -90
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +49 -47
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +166 -59
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +274 -83
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +198 -88
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +216 -88
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +216 -66
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +6 -7
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +83 -68
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +167 -46
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +75 -55
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +152 -79
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -63
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +3 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +235 -87
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +199 -86
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +21 -40
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +117 -45
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +249 -90
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +47 -45
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +262 -133
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +144 -77
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js +306 -51
- package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,164 +1,324 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { FormModal as t } from "../components/forms/FormModal.js";
|
|
3
|
+
import { ConfirmDialog as n } from "../components/forms/ConfirmDialog.js";
|
|
4
|
+
import { getNumber as r, getTags as i, getText as a } from "../components/forms/formValues.js";
|
|
5
|
+
import { useState as o } from "react";
|
|
6
|
+
import { Briefcase as s, Calendar as c, CheckCircle as l, DollarSign as u, MapPin as d, Pencil as f, Share2 as p, Trash2 as m, Users as h } from "lucide-react";
|
|
7
|
+
import { useNavigate as g } from "react-router-dom";
|
|
8
|
+
import { jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
9
|
+
import { Badge as y, Button as b, Card as x, CardContent as S, CardDescription as C, CardHeader as w, CardTitle as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, NextSteps as k, PagePurpose as A } from "@burdenoff/fe-libs/ui";
|
|
10
|
+
import { useGlobalUi as j } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
6
11
|
//#region src/crewfoundry/pages/HiringJobDetailsPagePage.tsx
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
var M = [
|
|
13
|
+
{
|
|
14
|
+
name: "title",
|
|
15
|
+
label: "Job Title",
|
|
16
|
+
type: "text",
|
|
17
|
+
required: !0,
|
|
18
|
+
colSpan: 2
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "department",
|
|
22
|
+
label: "Department",
|
|
23
|
+
type: "text",
|
|
24
|
+
required: !0
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "location",
|
|
28
|
+
label: "Location",
|
|
29
|
+
type: "text",
|
|
30
|
+
required: !0
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "type",
|
|
34
|
+
label: "Employment Type",
|
|
35
|
+
type: "select",
|
|
36
|
+
options: [
|
|
37
|
+
{
|
|
38
|
+
label: "Full time",
|
|
39
|
+
value: "full_time"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: "Part time",
|
|
43
|
+
value: "part_time"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: "Contract",
|
|
47
|
+
value: "contract"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
label: "Remote",
|
|
51
|
+
value: "remote"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: "experienceLevel",
|
|
57
|
+
label: "Experience Level",
|
|
58
|
+
type: "select",
|
|
59
|
+
options: [
|
|
60
|
+
{
|
|
61
|
+
label: "Entry",
|
|
62
|
+
value: "entry"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
label: "Mid",
|
|
66
|
+
value: "mid"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: "Senior",
|
|
70
|
+
value: "senior"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: "Lead",
|
|
74
|
+
value: "lead"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: "Executive",
|
|
78
|
+
value: "executive"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "status",
|
|
84
|
+
label: "Status",
|
|
85
|
+
type: "select",
|
|
86
|
+
options: [
|
|
87
|
+
{
|
|
88
|
+
label: "Draft",
|
|
89
|
+
value: "draft"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
label: "Active",
|
|
93
|
+
value: "active"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
label: "Paused",
|
|
97
|
+
value: "paused"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
label: "Closed",
|
|
101
|
+
value: "closed"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
label: "Filled",
|
|
105
|
+
value: "filled"
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "salaryMin",
|
|
111
|
+
label: "Salary Min ($)",
|
|
112
|
+
type: "number"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "salaryMax",
|
|
116
|
+
label: "Salary Max ($)",
|
|
117
|
+
type: "number"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: "deadline",
|
|
121
|
+
label: "Application Deadline",
|
|
122
|
+
type: "date"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: "description",
|
|
126
|
+
label: "Description",
|
|
127
|
+
type: "textarea",
|
|
128
|
+
colSpan: 2
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: "requirements",
|
|
132
|
+
label: "Requirements",
|
|
133
|
+
type: "tags"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: "benefits",
|
|
137
|
+
label: "Benefits",
|
|
138
|
+
type: "tags"
|
|
139
|
+
}
|
|
140
|
+
];
|
|
141
|
+
function N() {
|
|
142
|
+
let N = g(), { showToast: P } = j(), { jobPostings: F, candidates: I, updateJobPosting: L, removeJobPosting: R } = e(), z = F[0], [B, V] = o(!1), [H, U] = o(!1);
|
|
143
|
+
if (!z) return /* @__PURE__ */ _("div", {
|
|
10
144
|
className: "p-6",
|
|
11
|
-
children: /* @__PURE__ */
|
|
145
|
+
children: /* @__PURE__ */ _(O, {
|
|
12
146
|
illustration: "empty-search",
|
|
13
147
|
title: "No job posting found",
|
|
14
148
|
description: "This job posting is no longer available."
|
|
15
149
|
})
|
|
16
150
|
});
|
|
17
|
-
let
|
|
18
|
-
|
|
151
|
+
let W = I.filter((e) => e.position === z.title), G = {
|
|
152
|
+
title: z.title,
|
|
153
|
+
department: z.department,
|
|
154
|
+
location: z.location,
|
|
155
|
+
type: z.type,
|
|
156
|
+
experienceLevel: z.experienceLevel,
|
|
157
|
+
status: z.status,
|
|
158
|
+
salaryMin: z.salaryMin,
|
|
159
|
+
salaryMax: z.salaryMax,
|
|
160
|
+
deadline: z.deadline,
|
|
161
|
+
description: z.description,
|
|
162
|
+
requirements: z.requirements,
|
|
163
|
+
benefits: z.benefits
|
|
164
|
+
};
|
|
165
|
+
return /* @__PURE__ */ v("div", {
|
|
19
166
|
className: "space-y-6 p-6 max-w-4xl",
|
|
20
167
|
children: [
|
|
21
|
-
/* @__PURE__ */
|
|
168
|
+
/* @__PURE__ */ v("div", {
|
|
22
169
|
className: "flex items-center justify-between",
|
|
23
|
-
children: [/* @__PURE__ */
|
|
24
|
-
/* @__PURE__ */
|
|
170
|
+
children: [/* @__PURE__ */ v("div", { children: [
|
|
171
|
+
/* @__PURE__ */ v("div", {
|
|
25
172
|
className: "flex items-center gap-2 mb-1",
|
|
26
|
-
children: [/* @__PURE__ */
|
|
173
|
+
children: [/* @__PURE__ */ _("h1", {
|
|
27
174
|
className: "text-2xl font-semibold",
|
|
28
|
-
children: /* @__PURE__ */
|
|
29
|
-
}), /* @__PURE__ */
|
|
30
|
-
variant:
|
|
31
|
-
children:
|
|
175
|
+
children: /* @__PURE__ */ _(D, { children: z.title })
|
|
176
|
+
}), /* @__PURE__ */ _(y, {
|
|
177
|
+
variant: z.status === "active" ? "default" : "secondary",
|
|
178
|
+
children: z.status
|
|
32
179
|
})]
|
|
33
180
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
181
|
+
/* @__PURE__ */ v("div", {
|
|
35
182
|
className: "flex items-center gap-4 text-sm text-text-secondary",
|
|
36
183
|
children: [
|
|
37
|
-
/* @__PURE__ */
|
|
184
|
+
/* @__PURE__ */ v("span", {
|
|
38
185
|
className: "flex items-center gap-1",
|
|
39
|
-
children: [/* @__PURE__ */
|
|
186
|
+
children: [/* @__PURE__ */ _(s, { className: "h-3 w-3" }), z.department]
|
|
40
187
|
}),
|
|
41
|
-
/* @__PURE__ */
|
|
188
|
+
/* @__PURE__ */ v("span", {
|
|
42
189
|
className: "flex items-center gap-1",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
190
|
+
children: [/* @__PURE__ */ _(d, { className: "h-3 w-3" }), z.location]
|
|
44
191
|
}),
|
|
45
|
-
/* @__PURE__ */
|
|
192
|
+
/* @__PURE__ */ v("span", {
|
|
46
193
|
className: "flex items-center gap-1",
|
|
47
194
|
children: [
|
|
48
|
-
/* @__PURE__ */
|
|
195
|
+
/* @__PURE__ */ _(c, { className: "h-3 w-3" }),
|
|
49
196
|
"Posted ",
|
|
50
|
-
|
|
197
|
+
z.postedDate
|
|
51
198
|
]
|
|
52
199
|
})
|
|
53
200
|
]
|
|
54
201
|
}),
|
|
55
|
-
/* @__PURE__ */
|
|
202
|
+
/* @__PURE__ */ _(A, {
|
|
56
203
|
className: "mt-2",
|
|
57
204
|
children: "Everything about this role in one place — review applicants, requirements, and compensation here to decide who to interview and keep the posting current."
|
|
58
205
|
})
|
|
59
|
-
] }), /* @__PURE__ */
|
|
206
|
+
] }), /* @__PURE__ */ v("div", {
|
|
60
207
|
className: "flex gap-2",
|
|
61
|
-
children: [
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
208
|
+
children: [
|
|
209
|
+
/* @__PURE__ */ v(b, {
|
|
210
|
+
variant: "outline",
|
|
211
|
+
size: "sm",
|
|
212
|
+
onClick: () => P("Sharing job postings is coming soon", "info"),
|
|
213
|
+
children: [/* @__PURE__ */ _(p, { className: "h-4 w-4 mr-1" }), "Share"]
|
|
214
|
+
}),
|
|
215
|
+
/* @__PURE__ */ v(b, {
|
|
216
|
+
variant: "outline",
|
|
217
|
+
size: "sm",
|
|
218
|
+
onClick: () => V(!0),
|
|
219
|
+
children: [/* @__PURE__ */ _(f, { className: "h-4 w-4 mr-1" }), "Edit Posting"]
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ _(b, {
|
|
222
|
+
variant: "destructive",
|
|
223
|
+
size: "sm",
|
|
224
|
+
"aria-label": "Delete job posting",
|
|
225
|
+
onClick: () => U(!0),
|
|
226
|
+
children: /* @__PURE__ */ _(m, { className: "h-4 w-4" })
|
|
227
|
+
})
|
|
228
|
+
]
|
|
69
229
|
})]
|
|
70
230
|
}),
|
|
71
|
-
/* @__PURE__ */
|
|
231
|
+
/* @__PURE__ */ _(k, {
|
|
72
232
|
storageKey: "crewfoundry-job-details",
|
|
73
233
|
steps: [
|
|
74
234
|
{
|
|
75
235
|
id: "applicants",
|
|
76
236
|
label: "Review applicants",
|
|
77
237
|
description: "Screen the candidates who applied for this role.",
|
|
78
|
-
icon: /* @__PURE__ */
|
|
79
|
-
onClick: () =>
|
|
238
|
+
icon: /* @__PURE__ */ _(h, { className: "h-4 w-4" }),
|
|
239
|
+
onClick: () => N("../../hiring/applications-page")
|
|
80
240
|
},
|
|
81
241
|
{
|
|
82
242
|
id: "interviews",
|
|
83
243
|
label: "Schedule interviews",
|
|
84
244
|
description: "Set up conversations with promising candidates.",
|
|
85
|
-
icon: /* @__PURE__ */
|
|
86
|
-
onClick: () =>
|
|
245
|
+
icon: /* @__PURE__ */ _(c, { className: "h-4 w-4" }),
|
|
246
|
+
onClick: () => N("../../hiring/interviews-page")
|
|
87
247
|
},
|
|
88
248
|
{
|
|
89
249
|
id: "candidates",
|
|
90
250
|
label: "Browse your talent pool",
|
|
91
251
|
description: "Source more candidates that fit this position.",
|
|
92
|
-
icon: /* @__PURE__ */
|
|
93
|
-
onClick: () =>
|
|
252
|
+
icon: /* @__PURE__ */ _(s, { className: "h-4 w-4" }),
|
|
253
|
+
onClick: () => N("../../hiring/candidates-page")
|
|
94
254
|
}
|
|
95
255
|
]
|
|
96
256
|
}),
|
|
97
|
-
/* @__PURE__ */
|
|
257
|
+
/* @__PURE__ */ v("div", {
|
|
98
258
|
className: "grid gap-4 md:grid-cols-4",
|
|
99
259
|
children: [
|
|
100
|
-
/* @__PURE__ */
|
|
260
|
+
/* @__PURE__ */ _(E, {
|
|
101
261
|
treatment: "glass",
|
|
102
262
|
glow: !0,
|
|
103
263
|
className: "border-border-seam",
|
|
104
|
-
children: /* @__PURE__ */
|
|
264
|
+
children: /* @__PURE__ */ v(S, {
|
|
105
265
|
className: "p-4 text-center",
|
|
106
266
|
children: [
|
|
107
|
-
/* @__PURE__ */
|
|
108
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ _(h, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
268
|
+
/* @__PURE__ */ _("p", {
|
|
109
269
|
className: "text-2xl font-bold tabular-nums",
|
|
110
|
-
children:
|
|
270
|
+
children: z.applicants
|
|
111
271
|
}),
|
|
112
|
-
/* @__PURE__ */
|
|
272
|
+
/* @__PURE__ */ _("p", {
|
|
113
273
|
className: "text-xs text-text-secondary",
|
|
114
274
|
children: "Applicants"
|
|
115
275
|
})
|
|
116
276
|
]
|
|
117
277
|
})
|
|
118
278
|
}),
|
|
119
|
-
/* @__PURE__ */
|
|
279
|
+
/* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
|
|
120
280
|
className: "p-4 text-center",
|
|
121
281
|
children: [
|
|
122
|
-
/* @__PURE__ */
|
|
123
|
-
/* @__PURE__ */
|
|
282
|
+
/* @__PURE__ */ _(u, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
283
|
+
/* @__PURE__ */ v("p", {
|
|
124
284
|
className: "text-lg font-bold",
|
|
125
285
|
children: [
|
|
126
286
|
"$",
|
|
127
|
-
(
|
|
287
|
+
(z.salaryMin / 1e3).toFixed(0),
|
|
128
288
|
"K-$",
|
|
129
|
-
(
|
|
289
|
+
(z.salaryMax / 1e3).toFixed(0),
|
|
130
290
|
"K"
|
|
131
291
|
]
|
|
132
292
|
}),
|
|
133
|
-
/* @__PURE__ */
|
|
293
|
+
/* @__PURE__ */ _("p", {
|
|
134
294
|
className: "text-xs text-text-secondary",
|
|
135
295
|
children: "Salary Range"
|
|
136
296
|
})
|
|
137
297
|
]
|
|
138
298
|
}) }),
|
|
139
|
-
/* @__PURE__ */
|
|
299
|
+
/* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
|
|
140
300
|
className: "p-4 text-center",
|
|
141
301
|
children: [
|
|
142
|
-
/* @__PURE__ */
|
|
143
|
-
/* @__PURE__ */
|
|
302
|
+
/* @__PURE__ */ _(c, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
303
|
+
/* @__PURE__ */ _("p", {
|
|
144
304
|
className: "text-lg font-bold",
|
|
145
|
-
children:
|
|
305
|
+
children: z.deadline
|
|
146
306
|
}),
|
|
147
|
-
/* @__PURE__ */
|
|
307
|
+
/* @__PURE__ */ _("p", {
|
|
148
308
|
className: "text-xs text-text-secondary",
|
|
149
309
|
children: "Deadline"
|
|
150
310
|
})
|
|
151
311
|
]
|
|
152
312
|
}) }),
|
|
153
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
|
|
154
314
|
className: "p-4 text-center",
|
|
155
315
|
children: [
|
|
156
|
-
/* @__PURE__ */ l
|
|
157
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ _(l, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
317
|
+
/* @__PURE__ */ _("p", {
|
|
158
318
|
className: "text-lg font-bold",
|
|
159
|
-
children:
|
|
319
|
+
children: z.experienceLevel
|
|
160
320
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
321
|
+
/* @__PURE__ */ _("p", {
|
|
162
322
|
className: "text-xs text-text-secondary",
|
|
163
323
|
children: "Level"
|
|
164
324
|
})
|
|
@@ -166,48 +326,48 @@ function C() {
|
|
|
166
326
|
}) })
|
|
167
327
|
]
|
|
168
328
|
}),
|
|
169
|
-
/* @__PURE__ */
|
|
329
|
+
/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, { children: "Description" }) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("p", {
|
|
170
330
|
className: "text-sm text-text-secondary",
|
|
171
|
-
children:
|
|
331
|
+
children: z.description
|
|
172
332
|
}) })] }),
|
|
173
|
-
/* @__PURE__ */
|
|
333
|
+
/* @__PURE__ */ v("div", {
|
|
174
334
|
className: "grid gap-4 md:grid-cols-2",
|
|
175
|
-
children: [/* @__PURE__ */
|
|
335
|
+
children: [/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, { children: "Requirements" }) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("ul", {
|
|
176
336
|
className: "space-y-2",
|
|
177
|
-
children:
|
|
337
|
+
children: z.requirements.map((e, t) => /* @__PURE__ */ v("li", {
|
|
178
338
|
className: "flex items-start gap-2 text-sm",
|
|
179
|
-
children: [/* @__PURE__ */ l
|
|
339
|
+
children: [/* @__PURE__ */ _(l, { className: "h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0" }), e]
|
|
180
340
|
}, t))
|
|
181
|
-
}) })] }), /* @__PURE__ */
|
|
341
|
+
}) })] }), /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, { children: "Benefits" }) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("ul", {
|
|
182
342
|
className: "space-y-2",
|
|
183
|
-
children:
|
|
343
|
+
children: z.benefits.map((e, t) => /* @__PURE__ */ v("li", {
|
|
184
344
|
className: "flex items-start gap-2 text-sm",
|
|
185
|
-
children: [/* @__PURE__ */ l
|
|
345
|
+
children: [/* @__PURE__ */ _(l, { className: "h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0" }), e]
|
|
186
346
|
}, t))
|
|
187
347
|
}) })] })]
|
|
188
348
|
}),
|
|
189
|
-
|
|
349
|
+
W.length > 0 && /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ v(w, { children: [/* @__PURE__ */ _(T, { children: "Applicants for this Role" }), /* @__PURE__ */ v(C, { children: [W.length, " candidates"] })] }), /* @__PURE__ */ v(S, { children: [/* @__PURE__ */ v("div", {
|
|
190
350
|
className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
|
|
191
351
|
children: [
|
|
192
|
-
/* @__PURE__ */
|
|
193
|
-
/* @__PURE__ */
|
|
194
|
-
/* @__PURE__ */
|
|
352
|
+
/* @__PURE__ */ _("span", { children: "Name" }),
|
|
353
|
+
/* @__PURE__ */ _("span", { children: "Source" }),
|
|
354
|
+
/* @__PURE__ */ _("span", {
|
|
195
355
|
className: "text-right",
|
|
196
356
|
children: "Experience"
|
|
197
357
|
}),
|
|
198
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ _("span", {
|
|
199
359
|
className: "text-center",
|
|
200
360
|
children: "Rating"
|
|
201
361
|
}),
|
|
202
|
-
/* @__PURE__ */
|
|
362
|
+
/* @__PURE__ */ _("span", {
|
|
203
363
|
className: "text-center",
|
|
204
364
|
children: "Status"
|
|
205
365
|
})
|
|
206
366
|
]
|
|
207
|
-
}),
|
|
367
|
+
}), W.map((e) => /* @__PURE__ */ v("div", {
|
|
208
368
|
className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
|
|
209
369
|
children: [
|
|
210
|
-
/* @__PURE__ */
|
|
370
|
+
/* @__PURE__ */ v("span", {
|
|
211
371
|
className: "font-medium",
|
|
212
372
|
children: [
|
|
213
373
|
e.firstName,
|
|
@@ -215,32 +375,69 @@ function C() {
|
|
|
215
375
|
e.lastName
|
|
216
376
|
]
|
|
217
377
|
}),
|
|
218
|
-
/* @__PURE__ */
|
|
378
|
+
/* @__PURE__ */ _("span", {
|
|
219
379
|
className: "text-text-secondary",
|
|
220
380
|
children: e.source
|
|
221
381
|
}),
|
|
222
|
-
/* @__PURE__ */
|
|
382
|
+
/* @__PURE__ */ v("span", {
|
|
223
383
|
className: "text-right",
|
|
224
384
|
children: [e.experience, " yrs"]
|
|
225
385
|
}),
|
|
226
|
-
/* @__PURE__ */
|
|
386
|
+
/* @__PURE__ */ v("div", {
|
|
227
387
|
className: "text-center",
|
|
228
388
|
children: [e.rating, "/5"]
|
|
229
389
|
}),
|
|
230
|
-
/* @__PURE__ */
|
|
390
|
+
/* @__PURE__ */ _("div", {
|
|
231
391
|
className: "text-center",
|
|
232
|
-
children: /* @__PURE__ */
|
|
392
|
+
children: /* @__PURE__ */ _(y, {
|
|
233
393
|
variant: e.status === "hired" ? "default" : "secondary",
|
|
234
394
|
className: "text-[10px]",
|
|
235
395
|
children: e.status
|
|
236
396
|
})
|
|
237
397
|
})
|
|
238
398
|
]
|
|
239
|
-
}, e.id))] })] })
|
|
399
|
+
}, e.id))] })] }),
|
|
400
|
+
/* @__PURE__ */ _(t, {
|
|
401
|
+
open: B,
|
|
402
|
+
onOpenChange: V,
|
|
403
|
+
title: "Edit Job Posting",
|
|
404
|
+
description: "Update the role details, compensation, and status.",
|
|
405
|
+
fields: M,
|
|
406
|
+
initialValues: G,
|
|
407
|
+
submitLabel: "Save changes",
|
|
408
|
+
onSubmit: async (e) => {
|
|
409
|
+
let t = {
|
|
410
|
+
title: a(e, "title"),
|
|
411
|
+
department: a(e, "department"),
|
|
412
|
+
location: a(e, "location"),
|
|
413
|
+
type: e.type,
|
|
414
|
+
experienceLevel: e.experienceLevel,
|
|
415
|
+
status: e.status,
|
|
416
|
+
salaryMin: r(e, "salaryMin"),
|
|
417
|
+
salaryMax: r(e, "salaryMax"),
|
|
418
|
+
deadline: a(e, "deadline"),
|
|
419
|
+
description: a(e, "description"),
|
|
420
|
+
requirements: i(e, "requirements"),
|
|
421
|
+
benefits: i(e, "benefits")
|
|
422
|
+
};
|
|
423
|
+
await L(z.id, t), P("Job posting updated", "success");
|
|
424
|
+
}
|
|
425
|
+
}),
|
|
426
|
+
/* @__PURE__ */ _(n, {
|
|
427
|
+
open: H,
|
|
428
|
+
onOpenChange: U,
|
|
429
|
+
title: "Delete job posting",
|
|
430
|
+
description: `Permanently remove “${z.title}”? This cannot be undone.`,
|
|
431
|
+
confirmLabel: "Delete",
|
|
432
|
+
destructive: !0,
|
|
433
|
+
onConfirm: async () => {
|
|
434
|
+
await R(z.id), P("Job posting deleted", "success"), N("../jobs-page");
|
|
435
|
+
}
|
|
436
|
+
})
|
|
240
437
|
]
|
|
241
438
|
});
|
|
242
439
|
}
|
|
243
440
|
//#endregion
|
|
244
|
-
export {
|
|
441
|
+
export { N as HiringJobDetailsPagePage };
|
|
245
442
|
|
|
246
443
|
//# 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 GlassCard,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Briefcase, Calendar, CheckCircle, DollarSign, MapPin, Share2, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringJobDetailsPagePage() {\n const navigate = useNavigate();\n const { jobPostings, candidates } = useCrewFoundryStore();\n const job = jobPostings[0]; // Show first job as detail view\n\n if (!job) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No job posting found\"\n description=\"This job posting is no longer available.\"\n />\n </div>\n );\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 <PagePurpose className=\"mt-2\">\n Everything about this role in one place — review applicants, requirements, and\n compensation here to decide who to interview and keep the posting current.\n </PagePurpose>\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 <NextSteps\n storageKey=\"crewfoundry-job-details\"\n steps={[\n {\n id: 'applicants',\n label: 'Review applicants',\n description: 'Screen the candidates who applied for this role.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/applications-page'),\n },\n {\n id: 'interviews',\n label: 'Schedule interviews',\n description: 'Set up conversations with promising candidates.',\n icon: <Calendar className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/interviews-page'),\n },\n {\n id: 'candidates',\n label: 'Browse your talent pool',\n description: 'Source more candidates that fit this position.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/candidates-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow 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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"}
|
|
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 IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useState } from 'react';\nimport {\n Briefcase,\n Calendar,\n CheckCircle,\n DollarSign,\n MapPin,\n Pencil,\n Share2,\n Trash2,\n Users,\n} from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useCrewFoundryStore, type JobPosting } from '../store/crewfoundryStore';\nimport { FormModal, type FieldConfig, type FormValues } from '../components/forms/FormModal';\nimport { ConfirmDialog } from '../components/forms/ConfirmDialog';\nimport { getNumber, getTags, getText } from '../components/forms/formValues';\n\nconst JOB_FIELDS: FieldConfig[] = [\n { name: 'title', label: 'Job Title', type: 'text', required: true, colSpan: 2 },\n { name: 'department', label: 'Department', type: 'text', required: true },\n { name: 'location', label: 'Location', type: 'text', required: true },\n {\n name: 'type',\n label: 'Employment Type',\n type: 'select',\n options: [\n { label: 'Full time', value: 'full_time' },\n { label: 'Part time', value: 'part_time' },\n { label: 'Contract', value: 'contract' },\n { label: 'Remote', value: 'remote' },\n ],\n },\n {\n name: 'experienceLevel',\n label: 'Experience Level',\n type: 'select',\n options: [\n { label: 'Entry', value: 'entry' },\n { label: 'Mid', value: 'mid' },\n { label: 'Senior', value: 'senior' },\n { label: 'Lead', value: 'lead' },\n { label: 'Executive', value: 'executive' },\n ],\n },\n {\n name: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { label: 'Draft', value: 'draft' },\n { label: 'Active', value: 'active' },\n { label: 'Paused', value: 'paused' },\n { label: 'Closed', value: 'closed' },\n { label: 'Filled', value: 'filled' },\n ],\n },\n { name: 'salaryMin', label: 'Salary Min ($)', type: 'number' },\n { name: 'salaryMax', label: 'Salary Max ($)', type: 'number' },\n { name: 'deadline', label: 'Application Deadline', type: 'date' },\n { name: 'description', label: 'Description', type: 'textarea', colSpan: 2 },\n { name: 'requirements', label: 'Requirements', type: 'tags' },\n { name: 'benefits', label: 'Benefits', type: 'tags' },\n];\n\nexport function HiringJobDetailsPagePage() {\n const navigate = useNavigate();\n const { showToast } = useGlobalUi();\n const { jobPostings, candidates, updateJobPosting, removeJobPosting } = useCrewFoundryStore();\n const job = jobPostings[0]; // Show first job as detail view\n const [editOpen, setEditOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n if (!job) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No job posting found\"\n description=\"This job posting is no longer available.\"\n />\n </div>\n );\n }\n\n const jobCandidates = candidates.filter((c) => c.position === job.title);\n\n const editInitial: FormValues = {\n title: job.title,\n department: job.department,\n location: job.location,\n type: job.type,\n experienceLevel: job.experienceLevel,\n status: job.status,\n salaryMin: job.salaryMin,\n salaryMax: job.salaryMax,\n deadline: job.deadline,\n description: job.description,\n requirements: job.requirements,\n benefits: job.benefits,\n };\n\n const handleEditSubmit = async (values: FormValues) => {\n const updates: Partial<JobPosting> = {\n title: getText(values, 'title'),\n department: getText(values, 'department'),\n location: getText(values, 'location'),\n type: values.type as JobPosting['type'],\n experienceLevel: values.experienceLevel as JobPosting['experienceLevel'],\n status: values.status as JobPosting['status'],\n salaryMin: getNumber(values, 'salaryMin'),\n salaryMax: getNumber(values, 'salaryMax'),\n deadline: getText(values, 'deadline'),\n description: getText(values, 'description'),\n requirements: getTags(values, 'requirements'),\n benefits: getTags(values, 'benefits'),\n };\n await updateJobPosting(job.id, updates);\n showToast('Job posting updated', 'success');\n };\n\n const handleDelete = async () => {\n await removeJobPosting(job.id);\n showToast('Job posting deleted', 'success');\n navigate('../jobs-page');\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 <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 <PagePurpose className=\"mt-2\">\n Everything about this role in one place — review applicants, requirements, and\n compensation here to decide who to interview and keep the posting current.\n </PagePurpose>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => showToast('Sharing job postings is coming soon', 'info')}\n >\n <Share2 className=\"h-4 w-4 mr-1\" />\n Share\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setEditOpen(true)}>\n <Pencil className=\"h-4 w-4 mr-1\" />\n Edit Posting\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n aria-label=\"Delete job posting\"\n onClick={() => setDeleteOpen(true)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"crewfoundry-job-details\"\n steps={[\n {\n id: 'applicants',\n label: 'Review applicants',\n description: 'Screen the candidates who applied for this role.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/applications-page'),\n },\n {\n id: 'interviews',\n label: 'Schedule interviews',\n description: 'Set up conversations with promising candidates.',\n icon: <Calendar className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/interviews-page'),\n },\n {\n id: 'candidates',\n label: 'Browse your talent pool',\n description: 'Source more candidates that fit this position.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/candidates-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow 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\n <FormModal\n open={editOpen}\n onOpenChange={setEditOpen}\n title=\"Edit Job Posting\"\n description=\"Update the role details, compensation, and status.\"\n fields={JOB_FIELDS}\n initialValues={editInitial}\n submitLabel=\"Save changes\"\n onSubmit={handleEditSubmit}\n />\n <ConfirmDialog\n open={deleteOpen}\n onOpenChange={setDeleteOpen}\n title=\"Delete job posting\"\n description={`Permanently remove “${job.title}”? This cannot be undone.`}\n confirmLabel=\"Delete\"\n destructive\n onConfirm={handleDelete}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|