@burdenoff/microfe-crewfoundry 2026.1013.2 → 2026.1029.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/CrewFoundryRoot.d.ts.map +1 -1
- package/dist/crewfoundry/CrewFoundryRoot.js +160 -256
- package/dist/crewfoundry/CrewFoundryRoot.js.map +1 -1
- package/dist/crewfoundry/CrewFoundryRoutes.d.ts.map +1 -1
- package/dist/crewfoundry/CrewFoundryRoutes.js +152 -192
- package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
- package/dist/crewfoundry/components/InlineError.d.ts +5 -0
- package/dist/crewfoundry/components/InlineError.d.ts.map +1 -0
- package/dist/crewfoundry/components/InlineError.js +17 -0
- package/dist/crewfoundry/components/InlineError.js.map +1 -0
- package/dist/crewfoundry/components/marketplace/BookServiceModal.d.ts +14 -0
- package/dist/crewfoundry/components/marketplace/BookServiceModal.d.ts.map +1 -0
- package/dist/crewfoundry/components/marketplace/BookServiceModal.js +75 -0
- package/dist/crewfoundry/components/marketplace/BookServiceModal.js.map +1 -0
- package/dist/crewfoundry/components/marketplace/MarketplaceTabs.d.ts +24 -0
- package/dist/crewfoundry/components/marketplace/MarketplaceTabs.d.ts.map +1 -0
- package/dist/crewfoundry/components/marketplace/MarketplaceTabs.js +47 -0
- package/dist/crewfoundry/components/marketplace/MarketplaceTabs.js.map +1 -0
- package/dist/crewfoundry/components/marketplace/ServiceListingModal.d.ts +12 -0
- package/dist/crewfoundry/components/marketplace/ServiceListingModal.d.ts.map +1 -0
- package/dist/crewfoundry/components/marketplace/ServiceListingModal.js +123 -0
- package/dist/crewfoundry/components/marketplace/ServiceListingModal.js.map +1 -0
- package/dist/crewfoundry/components/viz/CertificateCard.js +4 -118
- package/dist/crewfoundry/components/viz/PathSteps.js +3 -68
- package/dist/crewfoundry/components/viz/lib/geometry.js +5 -13
- package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -1
- package/dist/crewfoundry/lib/analytics.d.ts +1 -6
- package/dist/crewfoundry/lib/analytics.d.ts.map +1 -1
- package/dist/crewfoundry/lib/analytics.js +3 -18
- package/dist/crewfoundry/lib/analytics.js.map +1 -1
- package/dist/crewfoundry/lib/companyFinance.d.ts +3 -7
- package/dist/crewfoundry/lib/companyFinance.d.ts.map +1 -1
- package/dist/crewfoundry/lib/companyFinance.js +3 -8
- package/dist/crewfoundry/lib/companyFinance.js.map +1 -1
- package/dist/crewfoundry/lib/learning.d.ts +12 -0
- package/dist/crewfoundry/lib/learning.d.ts.map +1 -0
- package/dist/crewfoundry/lib/learning.js +26 -0
- package/dist/crewfoundry/lib/learning.js.map +1 -0
- package/dist/crewfoundry/lib/marketplace.d.ts +30 -0
- package/dist/crewfoundry/lib/marketplace.d.ts.map +1 -0
- package/dist/crewfoundry/lib/marketplace.js +91 -0
- package/dist/crewfoundry/lib/marketplace.js.map +1 -0
- package/dist/crewfoundry/lib/useEnsureLoaded.d.ts +7 -0
- package/dist/crewfoundry/lib/useEnsureLoaded.d.ts.map +1 -0
- package/dist/crewfoundry/lib/useEnsureLoaded.js +25 -0
- package/dist/crewfoundry/lib/useEnsureLoaded.js.map +1 -0
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +12 -25
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +145 -157
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +14 -14
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +14 -14
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +71 -33
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +247 -173
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.d.ts +12 -0
- package/dist/crewfoundry/pages/LearningCoursesPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +307 -293
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.d.ts +2 -0
- package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.d.ts.map +1 -0
- package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.js +223 -0
- package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.js.map +1 -0
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.d.ts +4 -0
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +115 -160
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +165 -75
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.d.ts +7 -0
- package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.d.ts.map +1 -0
- package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.js +175 -0
- package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.js.map +1 -0
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +182 -223
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +168 -227
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +127 -290
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.d.ts +138 -78
- package/dist/crewfoundry/store/crewfoundryStore.d.ts.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js +323 -244
- package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
- package/dist/crewfoundry/utils/dateUtils.d.ts +5 -0
- package/dist/crewfoundry/utils/dateUtils.d.ts.map +1 -1
- package/dist/crewfoundry/utils/dateUtils.js +10 -1
- package/dist/crewfoundry/utils/dateUtils.js.map +1 -1
- package/dist/generated/global-types.d.ts +5145 -1627
- package/dist/generated/global-types.d.ts.map +1 -1
- package/dist/generated/wspace-types.d.ts +100373 -34602
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/utils/pageContext.d.ts.map +1 -1
- package/dist/utils/pageContext.js +0 -1
- package/dist/utils/pageContext.js.map +1 -1
- package/package.json +1 -1
- package/dist/crewfoundry/components/viz/CertificateCard.js.map +0 -1
- package/dist/crewfoundry/components/viz/PathSteps.js.map +0 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +0 -53
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +0 -107
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +0 -62
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +0 -37
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +0 -111
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +0 -309
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningLearningPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +0 -200
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +0 -190
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +0 -230
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +0 -293
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +0 -163
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.d.ts +0 -2
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +0 -365
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +0 -224
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +0 -180
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +0 -38
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +0 -204
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +0 -55
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +0 -335
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +0 -160
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +0 -80
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +0 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.d.ts +0 -2
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.d.ts.map +0 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +0 -191
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +0 -1
- package/dist/crewfoundry/utils/courseProgress.d.ts +0 -33
- package/dist/crewfoundry/utils/courseProgress.d.ts.map +0 -1
- package/dist/crewfoundry/utils/courseProgress.js +0 -46
- package/dist/crewfoundry/utils/courseProgress.js.map +0 -1
|
@@ -1,258 +1,217 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { useTr as t } from "../../shared/hooks/useTr.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { SegmentedTabs as i } from "../components/viz/SegmentedTabs.js";
|
|
3
|
+
import { StatCard as n } from "../components/viz/StatCard.js";
|
|
4
|
+
import { AvatarStack as r } from "../components/viz/AvatarStack.js";
|
|
6
5
|
import "../components/viz/index.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
6
|
+
import { InlineError as i } from "../components/InlineError.js";
|
|
7
|
+
import { useEnsureLoaded as a } from "../lib/useEnsureLoaded.js";
|
|
8
|
+
import { MarketplaceTabs as o } from "../components/marketplace/MarketplaceTabs.js";
|
|
9
|
+
import { formatRate as s } from "../lib/marketplace.js";
|
|
10
|
+
import { BookServiceModal as c } from "../components/marketplace/BookServiceModal.js";
|
|
11
|
+
import { ServiceListingModal as ee } from "../components/marketplace/ServiceListingModal.js";
|
|
12
|
+
import { useMemo as l, useState as u } from "react";
|
|
13
|
+
import { Plus as d, Search as f } from "lucide-react";
|
|
14
|
+
import { useNavigate as p } from "react-router";
|
|
15
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
16
|
+
import { Badge as g, Button as _, CardContent as v, CardHeader as y, CardTitle as b, GlassCard as te, GradientText as ne, IllustratedEmptyState as x, Input as re, PagePurpose as ie, Pagination as ae, Select as oe, SelectContent as se, SelectItem as S, SelectTrigger as C, SelectValue as w, Spinner as T } from "@burdenoff/fe-libs/ui";
|
|
17
|
+
import { usePagination as E } from "@burdenoff/fe-libs/shared/hooks";
|
|
13
18
|
//#region src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
label: "Available",
|
|
18
|
-
icon: c,
|
|
19
|
-
className: "bg-status-success-bg text-status-success-text"
|
|
20
|
-
};
|
|
21
|
-
case "pending": return {
|
|
22
|
-
label: "Pending",
|
|
23
|
-
icon: l,
|
|
24
|
-
className: "bg-status-warning-bg text-status-warning-text"
|
|
25
|
-
};
|
|
26
|
-
default: return {
|
|
27
|
-
label: "Unavailable",
|
|
28
|
-
icon: u,
|
|
29
|
-
className: "bg-bg-sunken text-text-secondary"
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function A() {
|
|
34
|
-
let c = t(), u = h(), { marketplaceServices: A } = e(), { page: j, pageSize: M, offset: N, setPage: P } = O({ initialPageSize: 9 }), [F, I] = s(""), [L, R] = s("all"), z = o(() => {
|
|
35
|
-
let e = /* @__PURE__ */ new Map();
|
|
36
|
-
for (let t of A) e.set(t.category, (e.get(t.category) ?? 0) + 1);
|
|
37
|
-
let t = [{
|
|
38
|
-
id: "all",
|
|
39
|
-
label: "All",
|
|
40
|
-
count: A.length
|
|
41
|
-
}];
|
|
42
|
-
for (let [n, r] of [...e.entries()].sort((e, t) => e[0].localeCompare(t[0]))) t.push({
|
|
43
|
-
id: n,
|
|
44
|
-
label: n,
|
|
45
|
-
count: r
|
|
46
|
-
});
|
|
47
|
-
return t;
|
|
48
|
-
}, [A]), B = o(() => {
|
|
49
|
-
let e = F.trim().toLowerCase();
|
|
50
|
-
return A.filter((t) => L !== "all" && t.category !== L ? !1 : e ? `${t.title} ${t.provider} ${t.category} ${t.skills.join(" ")}`.toLowerCase().includes(e) : !0);
|
|
51
|
-
}, [
|
|
52
|
-
A,
|
|
53
|
-
F,
|
|
54
|
-
L
|
|
55
|
-
]);
|
|
56
|
-
a(() => {
|
|
57
|
-
P(1);
|
|
58
|
-
}, [
|
|
59
|
-
F,
|
|
60
|
-
L,
|
|
61
|
-
P
|
|
62
|
-
]);
|
|
63
|
-
let V = A.length > 0 ? (A.reduce((e, t) => e + t.rating, 0) / A.length).toFixed(1) : "0.0", H = A.reduce((e, t) => e + t.reviews, 0), U = B.slice(N, N + M), W = (e) => u(`../marketplace/service-details-page?id=${e}`);
|
|
64
|
-
return /* @__PURE__ */ _("div", {
|
|
19
|
+
function D() {
|
|
20
|
+
let D = p(), O = t(), { serviceListings: k, bookings: A, marketplaceLoaded: j, fetchMarketplace: M, initParams: N } = e(), P = a(j, M), [F, I] = u(""), [L, ce] = u("all"), [R, z] = u(null), [B, V] = u(!1), [H, U] = u(null), { page: W, pageSize: G, offset: K, setPage: q } = E({ initialPageSize: 12 }), J = k.filter((e) => e.status === "active"), le = l(() => [...new Set(J.map((e) => e.category).filter((e) => !!e))].sort(), [J]), Y = new Set(J.map((e) => e.providerActorId)).size, ue = A.filter((e) => e.status === "requested" || e.status === "confirmed").length, X = F.trim().toLowerCase(), Z = J.filter((e) => (L === "all" || e.category === L) && (X === "" || `${e.title} ${e.description} ${e.providerName} ${e.category ?? ""}`.toLowerCase().includes(X))), Q = Z.slice(K, K + G), $ = (e) => D(`../marketplace/service-details-page?id=${encodeURIComponent(e.id)}`);
|
|
21
|
+
return /* @__PURE__ */ h("div", {
|
|
65
22
|
className: "space-y-6 p-6",
|
|
66
23
|
children: [
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
24
|
+
/* @__PURE__ */ h("div", {
|
|
25
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
26
|
+
children: [/* @__PURE__ */ h("div", { children: [
|
|
27
|
+
/* @__PURE__ */ m("h1", {
|
|
28
|
+
className: "text-2xl font-semibold",
|
|
29
|
+
children: /* @__PURE__ */ m(ne, { children: O("crewfoundry.marketplace.title", "Talent Marketplace") })
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ h("p", {
|
|
32
|
+
className: "text-sm text-text-secondary",
|
|
33
|
+
children: [
|
|
34
|
+
J.length,
|
|
35
|
+
" services from ",
|
|
36
|
+
Y,
|
|
37
|
+
" providers"
|
|
38
|
+
]
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ m(ie, {
|
|
41
|
+
className: "mt-1",
|
|
42
|
+
children: "Find in-house experts and contractors offering services to your workspace, book them for a piece of work, and track each booking through to completion."
|
|
43
|
+
})
|
|
44
|
+
] }), /* @__PURE__ */ h(_, {
|
|
45
|
+
size: "sm",
|
|
46
|
+
onClick: () => V(!0),
|
|
47
|
+
children: [/* @__PURE__ */ m(d, { className: "mr-1 h-4 w-4" }), "Publish a service"]
|
|
48
|
+
})]
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ m(o, { value: "browse" }),
|
|
51
|
+
/* @__PURE__ */ m(i, { message: P }),
|
|
52
|
+
H && /* @__PURE__ */ m("div", {
|
|
53
|
+
role: "status",
|
|
54
|
+
className: "rounded-[var(--radius-card)] border border-border-default bg-status-info-bg p-3 text-sm text-status-info-text",
|
|
55
|
+
children: H
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ h("div", {
|
|
58
|
+
className: "grid gap-4 sm:grid-cols-3",
|
|
83
59
|
children: [
|
|
84
|
-
/* @__PURE__ */
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
className: "border-border-seam",
|
|
88
|
-
children: [/* @__PURE__ */ _(b, {
|
|
89
|
-
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
90
|
-
children: [/* @__PURE__ */ g(x, {
|
|
91
|
-
className: "text-sm font-medium",
|
|
92
|
-
children: c("crewfoundry.marketplace.stats.services", "Services")
|
|
93
|
-
}), /* @__PURE__ */ g(f, { className: "h-4 w-4 text-text-secondary" })]
|
|
94
|
-
}), /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g("div", {
|
|
95
|
-
className: "text-2xl font-bold tabular-nums",
|
|
96
|
-
children: A.length
|
|
97
|
-
}) })]
|
|
60
|
+
/* @__PURE__ */ m(n, {
|
|
61
|
+
label: O("crewfoundry.marketplace.stats.services", "Services"),
|
|
62
|
+
value: J.length
|
|
98
63
|
}),
|
|
99
|
-
/* @__PURE__ */
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
children: [/* @__PURE__ */ _(b, {
|
|
103
|
-
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
104
|
-
children: [/* @__PURE__ */ g(x, {
|
|
105
|
-
className: "text-sm font-medium",
|
|
106
|
-
children: c("crewfoundry.marketplace.stats.avgRating", "Avg Rating")
|
|
107
|
-
}), /* @__PURE__ */ g(p, { className: "h-4 w-4 text-status-warning-text" })]
|
|
108
|
-
}), /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g("div", {
|
|
109
|
-
className: "text-2xl font-bold tabular-nums",
|
|
110
|
-
children: V
|
|
111
|
-
}) })]
|
|
64
|
+
/* @__PURE__ */ m(n, {
|
|
65
|
+
label: "Providers",
|
|
66
|
+
value: Y
|
|
112
67
|
}),
|
|
113
|
-
/* @__PURE__ */
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
children: [/* @__PURE__ */ _(b, {
|
|
117
|
-
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
118
|
-
children: [/* @__PURE__ */ g(x, {
|
|
119
|
-
className: "text-sm font-medium",
|
|
120
|
-
children: c("crewfoundry.marketplace.stats.totalReviews", "Total Reviews")
|
|
121
|
-
}), /* @__PURE__ */ g(m, { className: "h-4 w-4 text-text-secondary" })]
|
|
122
|
-
}), /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g("div", {
|
|
123
|
-
className: "text-2xl font-bold tabular-nums",
|
|
124
|
-
children: H
|
|
125
|
-
}) })]
|
|
68
|
+
/* @__PURE__ */ m(n, {
|
|
69
|
+
label: "Open Bookings",
|
|
70
|
+
value: ue
|
|
126
71
|
})
|
|
127
72
|
]
|
|
128
73
|
}),
|
|
129
|
-
/* @__PURE__ */
|
|
130
|
-
className: "flex flex-col gap-
|
|
131
|
-
children: [/* @__PURE__ */
|
|
132
|
-
className: "relative
|
|
133
|
-
children: [/* @__PURE__ */
|
|
134
|
-
placeholder: "Search services
|
|
74
|
+
/* @__PURE__ */ h("div", {
|
|
75
|
+
className: "flex flex-col gap-2 sm:flex-row sm:items-center",
|
|
76
|
+
children: [/* @__PURE__ */ h("div", {
|
|
77
|
+
className: "relative flex-1",
|
|
78
|
+
children: [/* @__PURE__ */ m(f, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ m(re, {
|
|
79
|
+
placeholder: "Search services or providers...",
|
|
135
80
|
className: "pl-9",
|
|
136
81
|
value: F,
|
|
137
|
-
onChange: (e) =>
|
|
138
|
-
|
|
82
|
+
onChange: (e) => {
|
|
83
|
+
I(e.target.value), q(1);
|
|
84
|
+
}
|
|
139
85
|
})]
|
|
140
|
-
}), /* @__PURE__ */
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
86
|
+
}), /* @__PURE__ */ h(oe, {
|
|
87
|
+
value: L,
|
|
88
|
+
onValueChange: (e) => {
|
|
89
|
+
ce(e), q(1);
|
|
90
|
+
},
|
|
91
|
+
children: [/* @__PURE__ */ m(C, {
|
|
92
|
+
className: "w-full sm:w-48",
|
|
93
|
+
"aria-label": "Filter by category",
|
|
94
|
+
children: /* @__PURE__ */ m(w, {})
|
|
95
|
+
}), /* @__PURE__ */ h(se, { children: [/* @__PURE__ */ m(S, {
|
|
96
|
+
value: "all",
|
|
97
|
+
children: "All categories"
|
|
98
|
+
}), le.map((e) => /* @__PURE__ */ m(S, {
|
|
99
|
+
value: e,
|
|
100
|
+
children: e
|
|
101
|
+
}, e))] })]
|
|
148
102
|
})]
|
|
149
103
|
}),
|
|
150
|
-
|
|
104
|
+
!j && !P ? /* @__PURE__ */ m("div", {
|
|
105
|
+
className: "flex min-h-[240px] items-center justify-center",
|
|
106
|
+
children: /* @__PURE__ */ m(T, { size: "lg" })
|
|
107
|
+
}) : J.length === 0 ? /* @__PURE__ */ m(x, {
|
|
108
|
+
illustration: "empty-data",
|
|
109
|
+
title: "No services yet",
|
|
110
|
+
description: "Publish a service so colleagues in this workspace can book you.",
|
|
111
|
+
action: /* @__PURE__ */ h(_, {
|
|
112
|
+
size: "sm",
|
|
113
|
+
onClick: () => V(!0),
|
|
114
|
+
children: [/* @__PURE__ */ m(d, { className: "mr-1 h-4 w-4" }), "Publish a service"]
|
|
115
|
+
})
|
|
116
|
+
}) : Z.length === 0 ? /* @__PURE__ */ m(x, {
|
|
151
117
|
illustration: "empty-search",
|
|
152
|
-
title: "No services
|
|
153
|
-
description: "Try a different search term or category
|
|
154
|
-
}) : /* @__PURE__ */
|
|
118
|
+
title: "No services match",
|
|
119
|
+
description: "Try a different search term or category."
|
|
120
|
+
}) : /* @__PURE__ */ m("div", {
|
|
155
121
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
156
|
-
children:
|
|
157
|
-
let t =
|
|
158
|
-
return /* @__PURE__ */
|
|
122
|
+
children: Q.map((e) => {
|
|
123
|
+
let t = e.providerActorId === N.actorId;
|
|
124
|
+
return /* @__PURE__ */ h(te, {
|
|
159
125
|
treatment: "glass",
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
className: "flex h-full flex-col gap-3 p-4",
|
|
170
|
-
children: [
|
|
171
|
-
/* @__PURE__ */ _("div", {
|
|
172
|
-
className: "flex items-start justify-between gap-2",
|
|
173
|
-
children: [/* @__PURE__ */ _("div", {
|
|
174
|
-
className: "flex items-center gap-2.5",
|
|
175
|
-
children: [/* @__PURE__ */ g("span", {
|
|
176
|
-
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-sm font-semibold text-action-primary-text",
|
|
177
|
-
"aria-hidden": "true",
|
|
178
|
-
children: n(e.provider)
|
|
179
|
-
}), /* @__PURE__ */ _("div", {
|
|
180
|
-
className: "min-w-0",
|
|
181
|
-
children: [/* @__PURE__ */ g("p", {
|
|
182
|
-
className: "truncate text-sm font-semibold",
|
|
183
|
-
children: e.provider
|
|
184
|
-
}), /* @__PURE__ */ g("span", {
|
|
185
|
-
className: "inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary",
|
|
186
|
-
children: e.category
|
|
187
|
-
})]
|
|
188
|
-
})]
|
|
189
|
-
}), /* @__PURE__ */ _("div", {
|
|
190
|
-
className: "shrink-0 text-right",
|
|
191
|
-
children: [/* @__PURE__ */ _("p", {
|
|
192
|
-
className: "text-base font-bold tabular-nums",
|
|
193
|
-
children: ["$", e.price.toLocaleString()]
|
|
194
|
-
}), /* @__PURE__ */ _("p", {
|
|
195
|
-
className: "text-[10px] text-text-secondary",
|
|
196
|
-
children: ["/", e.priceType]
|
|
197
|
-
})]
|
|
198
|
-
})]
|
|
199
|
-
}),
|
|
200
|
-
/* @__PURE__ */ g("p", {
|
|
201
|
-
className: "text-sm font-medium",
|
|
126
|
+
className: "flex flex-col",
|
|
127
|
+
children: [/* @__PURE__ */ m(y, { children: /* @__PURE__ */ h("div", {
|
|
128
|
+
className: "flex items-start justify-between gap-2",
|
|
129
|
+
children: [/* @__PURE__ */ m("button", {
|
|
130
|
+
type: "button",
|
|
131
|
+
className: "min-w-0 text-left",
|
|
132
|
+
onClick: () => $(e),
|
|
133
|
+
children: /* @__PURE__ */ m(b, {
|
|
134
|
+
className: "line-clamp-2 text-base hover:underline",
|
|
202
135
|
children: e.title
|
|
136
|
+
})
|
|
137
|
+
}), e.category && /* @__PURE__ */ m(g, {
|
|
138
|
+
variant: "outline",
|
|
139
|
+
className: "shrink-0 text-[10px]",
|
|
140
|
+
children: e.category
|
|
141
|
+
})]
|
|
142
|
+
}) }), /* @__PURE__ */ h(v, {
|
|
143
|
+
className: "flex flex-1 flex-col gap-3",
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ h("div", {
|
|
146
|
+
className: "flex items-center gap-2",
|
|
147
|
+
children: [
|
|
148
|
+
/* @__PURE__ */ m(r, {
|
|
149
|
+
people: [{ name: e.providerName }],
|
|
150
|
+
size: 28
|
|
151
|
+
}),
|
|
152
|
+
/* @__PURE__ */ m("span", {
|
|
153
|
+
className: "text-sm",
|
|
154
|
+
children: e.providerName
|
|
155
|
+
}),
|
|
156
|
+
t && /* @__PURE__ */ m(g, {
|
|
157
|
+
variant: "secondary",
|
|
158
|
+
className: "text-[10px]",
|
|
159
|
+
children: "You"
|
|
160
|
+
})
|
|
161
|
+
]
|
|
203
162
|
}),
|
|
204
|
-
/* @__PURE__ */
|
|
205
|
-
className: "
|
|
206
|
-
children: [/* @__PURE__ */ g(r, {
|
|
207
|
-
value: e.rating,
|
|
208
|
-
count: e.reviews,
|
|
209
|
-
showValue: !0,
|
|
210
|
-
size: 14
|
|
211
|
-
}), /* @__PURE__ */ _("span", {
|
|
212
|
-
className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${t.className}`,
|
|
213
|
-
children: [/* @__PURE__ */ g(i, { className: "h-3 w-3" }), t.label]
|
|
214
|
-
})]
|
|
215
|
-
}),
|
|
216
|
-
/* @__PURE__ */ g("p", {
|
|
217
|
-
className: "line-clamp-2 text-xs text-text-secondary",
|
|
163
|
+
/* @__PURE__ */ m("p", {
|
|
164
|
+
className: "line-clamp-3 text-sm text-text-secondary",
|
|
218
165
|
children: e.description
|
|
219
166
|
}),
|
|
220
|
-
/* @__PURE__ */
|
|
221
|
-
className: "flex
|
|
222
|
-
children:
|
|
223
|
-
className: "
|
|
224
|
-
children: e
|
|
225
|
-
},
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
167
|
+
/* @__PURE__ */ h("div", {
|
|
168
|
+
className: "mt-auto flex items-center justify-between border-t border-border-default pt-3",
|
|
169
|
+
children: [/* @__PURE__ */ m("span", {
|
|
170
|
+
className: "text-sm font-semibold tabular-nums",
|
|
171
|
+
children: s(e)
|
|
172
|
+
}), /* @__PURE__ */ h("div", {
|
|
173
|
+
className: "flex gap-2",
|
|
174
|
+
children: [/* @__PURE__ */ m(_, {
|
|
175
|
+
size: "sm",
|
|
176
|
+
variant: "ghost",
|
|
177
|
+
onClick: () => $(e),
|
|
178
|
+
children: "Details"
|
|
179
|
+
}), /* @__PURE__ */ m(_, {
|
|
180
|
+
size: "sm",
|
|
181
|
+
onClick: () => {
|
|
182
|
+
U(null), z(e);
|
|
183
|
+
},
|
|
184
|
+
children: O("crewfoundry.marketplace.card.book", "Book")
|
|
185
|
+
})]
|
|
186
|
+
})]
|
|
240
187
|
})
|
|
241
188
|
]
|
|
242
|
-
})
|
|
189
|
+
})]
|
|
243
190
|
}, e.id);
|
|
244
191
|
})
|
|
245
192
|
}),
|
|
246
|
-
|
|
247
|
-
page:
|
|
248
|
-
pageSize:
|
|
249
|
-
totalItems:
|
|
250
|
-
onPageChange:
|
|
251
|
-
})
|
|
193
|
+
Z.length > G && /* @__PURE__ */ m(ae, {
|
|
194
|
+
page: W,
|
|
195
|
+
pageSize: G,
|
|
196
|
+
totalItems: Z.length,
|
|
197
|
+
onPageChange: q
|
|
198
|
+
}),
|
|
199
|
+
/* @__PURE__ */ m(c, {
|
|
200
|
+
listing: R,
|
|
201
|
+
onOpenChange: (e) => {
|
|
202
|
+
e || z(null);
|
|
203
|
+
},
|
|
204
|
+
onBooked: () => U("Booking requested. Track it under Bookings; the provider confirms it there.")
|
|
205
|
+
}),
|
|
206
|
+
/* @__PURE__ */ m(ee, {
|
|
207
|
+
open: B,
|
|
208
|
+
onOpenChange: V,
|
|
209
|
+
listing: null
|
|
210
|
+
})
|
|
252
211
|
]
|
|
253
212
|
});
|
|
254
213
|
}
|
|
255
214
|
//#endregion
|
|
256
|
-
export {
|
|
215
|
+
export { D as MarketplaceMarketplacePagePage };
|
|
257
216
|
|
|
258
217
|
//# sourceMappingURL=MarketplaceMarketplacePagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceMarketplacePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport {\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Pagination,\n} from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { CheckCircle2, Clock3, PauseCircle, Search, ShoppingBag, Star, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router';\nimport { useCrewFoundryStore, type MarketplaceService } from '../store/crewfoundryStore';\nimport { RatingStars, SegmentedTabs, getInitials, type SegmentedTab } from '../components/viz';\n\n/** Honest availability derived from the real service `status` enum (never \"Booked\"). */\nfunction availabilityOf(status: MarketplaceService['status']): {\n label: string;\n icon: typeof CheckCircle2;\n className: string;\n} {\n switch (status) {\n case 'active':\n return {\n label: 'Available',\n icon: CheckCircle2,\n className: 'bg-status-success-bg text-status-success-text',\n };\n case 'pending':\n return {\n label: 'Pending',\n icon: Clock3,\n className: 'bg-status-warning-bg text-status-warning-text',\n };\n default:\n return {\n label: 'Unavailable',\n icon: PauseCircle,\n className: 'bg-bg-sunken text-text-secondary',\n };\n }\n}\n\nexport function MarketplaceMarketplacePagePage() {\n const tr = useTr();\n const navigate = useNavigate();\n const { marketplaceServices } = useCrewFoundryStore();\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 9 });\n const [search, setSearch] = useState('');\n const [category, setCategory] = useState('all');\n\n const categoryTabs = useMemo<SegmentedTab[]>(() => {\n const counts = new Map<string, number>();\n for (const svc of marketplaceServices) {\n counts.set(svc.category, (counts.get(svc.category) ?? 0) + 1);\n }\n const tabs: SegmentedTab[] = [{ id: 'all', label: 'All', count: marketplaceServices.length }];\n for (const [name, count] of [...counts.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {\n tabs.push({ id: name, label: name, count });\n }\n return tabs;\n }, [marketplaceServices]);\n\n const filtered = useMemo(() => {\n const query = search.trim().toLowerCase();\n return marketplaceServices.filter((svc) => {\n if (category !== 'all' && svc.category !== category) {\n return false;\n }\n if (!query) {\n return true;\n }\n return `${svc.title} ${svc.provider} ${svc.category} ${svc.skills.join(' ')}`\n .toLowerCase()\n .includes(query);\n });\n }, [marketplaceServices, search, category]);\n\n useEffect(() => {\n setPage(1);\n }, [search, category, setPage]);\n\n const avgRating =\n marketplaceServices.length > 0\n ? (\n marketplaceServices.reduce((s, m) => s + m.rating, 0) / marketplaceServices.length\n ).toFixed(1)\n : '0.0';\n const totalReviews = marketplaceServices.reduce((s, m) => s + m.reviews, 0);\n const pagedServices = filtered.slice(offset, offset + pageSize);\n const openService = (id: string) => navigate(`../marketplace/service-details-page?id=${id}`);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{tr('crewfoundry.marketplace.title', 'Talent Marketplace')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {tr('crewfoundry.marketplace.subtitle', 'Book vetted specialists and services')}\n </p>\n <PagePurpose className=\"mt-1\">\n Discover freelancers and services for your projects — search, filter by category, and hire\n the right talent on demand.\n </PagePurpose>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow 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\">\n {tr('crewfoundry.marketplace.stats.services', 'Services')}\n </CardTitle>\n <ShoppingBag className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{marketplaceServices.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\">\n {tr('crewfoundry.marketplace.stats.avgRating', 'Avg Rating')}\n </CardTitle>\n <Star className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{avgRating}</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\">\n {tr('crewfoundry.marketplace.stats.totalReviews', 'Total Reviews')}\n </CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{totalReviews}</div>\n </CardContent>\n </GlassCard>\n </div>\n\n <div className=\"flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"relative w-full max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search services, providers, skills…\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n aria-label=\"Search marketplace services\"\n />\n </div>\n <div className=\"-mx-1 overflow-x-auto px-1 pb-1\">\n <SegmentedTabs\n tabs={categoryTabs}\n value={category}\n onChange={setCategory}\n aria-label=\"Filter services by category\"\n />\n </div>\n </div>\n\n {pagedServices.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No services found\"\n description=\"Try a different search term or category to find the help you need.\"\n />\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {pagedServices.map((svc) => {\n const availability = availabilityOf(svc.status);\n const AvailabilityIcon = availability.icon;\n return (\n <GlassCard\n key={svc.id}\n treatment=\"glass\"\n role=\"button\"\n tabIndex={0}\n aria-label={`View and book ${svc.title} by ${svc.provider}`}\n onClick={() => openService(svc.id)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openService(svc.id);\n }\n }}\n className=\"cursor-pointer border-border-seam transition-shadow hover:shadow-elevation-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <CardContent className=\"flex h-full flex-col gap-3 p-4\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex items-center gap-2.5\">\n <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-sm font-semibold text-action-primary-text\"\n aria-hidden=\"true\"\n >\n {getInitials(svc.provider)}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{svc.provider}</p>\n <span className=\"inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary\">\n {svc.category}\n </span>\n </div>\n </div>\n <div className=\"shrink-0 text-right\">\n <p className=\"text-base font-bold tabular-nums\">\n ${svc.price.toLocaleString()}\n </p>\n <p className=\"text-[10px] text-text-secondary\">/{svc.priceType}</p>\n </div>\n </div>\n\n <p className=\"text-sm font-medium\">{svc.title}</p>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <RatingStars value={svc.rating} count={svc.reviews} showValue size={14} />\n <span\n className={`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${availability.className}`}\n >\n <AvailabilityIcon className=\"h-3 w-3\" />\n {availability.label}\n </span>\n </div>\n\n <p className=\"line-clamp-2 text-xs text-text-secondary\">{svc.description}</p>\n\n <div className=\"flex flex-wrap gap-1\">\n {svc.skills.slice(0, 4).map((skill) => (\n <span\n key={skill}\n className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary\"\n >\n {skill}\n </span>\n ))}\n </div>\n\n <div className=\"mt-auto flex items-center justify-between pt-1 text-[11px] text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Clock3 className=\"h-3 w-3\" />\n {svc.deliveryTime}\n </span>\n </div>\n\n <Button\n className=\"w-full\"\n onClick={(event) => {\n event.stopPropagation();\n openService(svc.id);\n }}\n >\n {tr('crewfoundry.marketplace.card.book', 'View & Book')}\n </Button>\n </CardContent>\n </GlassCard>\n );\n })}\n </div>\n )}\n\n {filtered.length > pageSize ? (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={filtered.length}\n onPageChange={setPage}\n />\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketplaceMarketplacePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Pagination,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Spinner,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { Plus, Search } from 'lucide-react';\nimport { useNavigate } from 'react-router';\nimport { InlineError } from '../components/InlineError';\nimport { BookServiceModal } from '../components/marketplace/BookServiceModal';\nimport { MarketplaceTabs } from '../components/marketplace/MarketplaceTabs';\nimport { ServiceListingModal } from '../components/marketplace/ServiceListingModal';\nimport { AvatarStack, StatCard } from '../components/viz';\nimport { useCrewFoundryStore, type CrewServiceListing } from '../store/crewfoundryStore';\nimport { formatRate } from '../lib/marketplace';\nimport { useEnsureLoaded } from '../lib/useEnsureLoaded';\nimport { useTr } from '../../shared/hooks/useTr';\n\nexport function MarketplaceMarketplacePagePage() {\n const navigate = useNavigate();\n const tr = useTr();\n const { serviceListings, bookings, marketplaceLoaded, fetchMarketplace, initParams } =\n useCrewFoundryStore();\n const loadError = useEnsureLoaded(marketplaceLoaded, fetchMarketplace);\n const [search, setSearch] = useState('');\n const [category, setCategory] = useState('all');\n const [bookTarget, setBookTarget] = useState<CrewServiceListing | null>(null);\n const [publishOpen, setPublishOpen] = useState(false);\n const [notice, setNotice] = useState<string | null>(null);\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 12 });\n\n const active = serviceListings.filter((listing) => listing.status === 'active');\n const categories = useMemo(\n () =>\n [\n ...new Set(active.map((listing) => listing.category).filter((c): c is string => !!c)),\n ].sort(),\n [active]\n );\n const providers = new Set(active.map((listing) => listing.providerActorId)).size;\n const openBookings = bookings.filter(\n (booking) => booking.status === 'requested' || booking.status === 'confirmed'\n ).length;\n\n const query = search.trim().toLowerCase();\n const filtered = active.filter(\n (listing) =>\n (category === 'all' || listing.category === category) &&\n (query === '' ||\n `${listing.title} ${listing.description} ${listing.providerName} ${listing.category ?? ''}`\n .toLowerCase()\n .includes(query))\n );\n const paged = filtered.slice(offset, offset + pageSize);\n\n const openDetails = (listing: CrewServiceListing) =>\n navigate(`../marketplace/service-details-page?id=${encodeURIComponent(listing.id)}`);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{tr('crewfoundry.marketplace.title', 'Talent Marketplace')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {active.length} services from {providers} providers\n </p>\n <PagePurpose className=\"mt-1\">\n Find in-house experts and contractors offering services to your workspace, book them for\n a piece of work, and track each booking through to completion.\n </PagePurpose>\n </div>\n <Button size=\"sm\" onClick={() => setPublishOpen(true)}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Publish a service\n </Button>\n </div>\n\n <MarketplaceTabs value=\"browse\" />\n\n <InlineError message={loadError} />\n {notice && (\n <div\n role=\"status\"\n className=\"rounded-[var(--radius-card)] border border-border-default bg-status-info-bg p-3 text-sm text-status-info-text\"\n >\n {notice}\n </div>\n )}\n\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <StatCard\n label={tr('crewfoundry.marketplace.stats.services', 'Services')}\n value={active.length}\n />\n <StatCard label=\"Providers\" value={providers} />\n <StatCard label=\"Open Bookings\" value={openBookings} />\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search services or providers...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setPage(1);\n }}\n />\n </div>\n <Select\n value={category}\n onValueChange={(value) => {\n setCategory(value);\n setPage(1);\n }}\n >\n <SelectTrigger className=\"w-full sm:w-48\" aria-label=\"Filter by category\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All categories</SelectItem>\n {categories.map((item) => (\n <SelectItem key={item} value={item}>\n {item}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!marketplaceLoaded && !loadError ? (\n <div className=\"flex min-h-[240px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n ) : active.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No services yet\"\n description=\"Publish a service so colleagues in this workspace can book you.\"\n action={\n <Button size=\"sm\" onClick={() => setPublishOpen(true)}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Publish a service\n </Button>\n }\n />\n ) : filtered.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No services match\"\n description=\"Try a different search term or category.\"\n />\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {paged.map((listing) => {\n const own = listing.providerActorId === initParams.actorId;\n return (\n <GlassCard key={listing.id} treatment=\"glass\" className=\"flex flex-col\">\n <CardHeader>\n <div className=\"flex items-start justify-between gap-2\">\n <button\n type=\"button\"\n className=\"min-w-0 text-left\"\n onClick={() => openDetails(listing)}\n >\n <CardTitle className=\"line-clamp-2 text-base hover:underline\">\n {listing.title}\n </CardTitle>\n </button>\n {listing.category && (\n <Badge variant=\"outline\" className=\"shrink-0 text-[10px]\">\n {listing.category}\n </Badge>\n )}\n </div>\n </CardHeader>\n <CardContent className=\"flex flex-1 flex-col gap-3\">\n <div className=\"flex items-center gap-2\">\n <AvatarStack people={[{ name: listing.providerName }]} size={28} />\n <span className=\"text-sm\">{listing.providerName}</span>\n {own && (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n You\n </Badge>\n )}\n </div>\n <p className=\"line-clamp-3 text-sm text-text-secondary\">{listing.description}</p>\n <div className=\"mt-auto flex items-center justify-between border-t border-border-default pt-3\">\n <span className=\"text-sm font-semibold tabular-nums\">\n {formatRate(listing)}\n </span>\n <div className=\"flex gap-2\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => openDetails(listing)}>\n Details\n </Button>\n <Button\n size=\"sm\"\n onClick={() => {\n setNotice(null);\n setBookTarget(listing);\n }}\n >\n {tr('crewfoundry.marketplace.card.book', 'Book')}\n </Button>\n </div>\n </div>\n </CardContent>\n </GlassCard>\n );\n })}\n </div>\n )}\n {filtered.length > pageSize && (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={filtered.length}\n onPageChange={setPage}\n />\n )}\n\n <BookServiceModal\n listing={bookTarget}\n onOpenChange={(open) => {\n if (!open) setBookTarget(null);\n }}\n onBooked={() =>\n setNotice('Booking requested. Track it under Bookings; the provider confirms it there.')\n }\n />\n <ServiceListingModal open={publishOpen} onOpenChange={setPublishOpen} listing={null} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceMyServicesPagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarketplaceMyServicesPagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,6BAA6B,gCAgO5C"}
|