@burdenoff/microfe-crewfoundry 2026.1013.2 → 2026.1029.2
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 +338 -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,365 +0,0 @@
|
|
|
1
|
-
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
|
|
3
|
-
import { useMemo as n, useState as r } from "react";
|
|
4
|
-
import { Briefcase as i, Calendar as a, DollarSign as o, MessageSquare as s, Star as c, TrendingUp as l, Video as u } from "lucide-react";
|
|
5
|
-
import { useLocation as d, useNavigate as f } from "react-router";
|
|
6
|
-
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
7
|
-
import { Badge as h, Button as g, Card as _, CardContent as v, CardDescription as y, CardHeader as b, CardTitle as x, GlassCard as S, GradientText as C, IllustratedEmptyState as w, NextSteps as T, PagePurpose as E, Separator as D, Tabs as O, TabsContent as k, TabsList as A, TabsTrigger as j } from "@burdenoff/fe-libs/ui";
|
|
8
|
-
//#region src/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.tsx
|
|
9
|
-
var M = (e) => e.split(" ").map((e) => e[0] ?? "").join("").slice(0, 2).toUpperCase() || "—";
|
|
10
|
-
function N() {
|
|
11
|
-
let [N, P] = r("overview"), F = f(), I = d(), { marketplaceServices: L } = e(), R = new URLSearchParams(I.search).get("id"), z = L.find((e) => e.id === R) ?? L[0], B = z?.provider ?? "", V = n(() => L.filter((e) => e.provider === B), [L, B]), H = n(() => Array.from(new Set(V.flatMap((e) => e.skills))).slice(0, 20), [V]), U = n(() => Array.from(new Set(V.map((e) => e.category))), [V]), W = n(() => V.map((e) => ({
|
|
12
|
-
id: e.id,
|
|
13
|
-
title: e.title,
|
|
14
|
-
price: e.priceType === "hourly" ? `$${e.price}/hr` : e.priceType === "monthly" ? `$${e.price}/mo` : `$${e.price}`,
|
|
15
|
-
type: e.priceType,
|
|
16
|
-
description: e.description,
|
|
17
|
-
delivery: e.deliveryTime,
|
|
18
|
-
rating: e.rating,
|
|
19
|
-
reviews: e.reviews
|
|
20
|
-
})), [V]), G = V.length > 0 ? (V.reduce((e, t) => e + t.rating, 0) / V.length).toFixed(1) : "0.0", K = V.reduce((e, t) => e + t.reviews, 0), q = V.length > 0 ? Math.min(...V.map((e) => e.price)) : 0, J = Number(G) >= 4.5 && K > 0, Y = [
|
|
21
|
-
{
|
|
22
|
-
label: "Services",
|
|
23
|
-
value: `${V.length}`
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
label: "Avg Rating",
|
|
27
|
-
value: G
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
label: "Total Reviews",
|
|
31
|
-
value: `${K}`
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
label: "Starting Rate",
|
|
35
|
-
value: `$${q.toLocaleString()}`
|
|
36
|
-
}
|
|
37
|
-
];
|
|
38
|
-
return z ? /* @__PURE__ */ m("div", {
|
|
39
|
-
className: "space-y-6 p-6",
|
|
40
|
-
children: [
|
|
41
|
-
/* @__PURE__ */ p(S, {
|
|
42
|
-
treatment: "glass",
|
|
43
|
-
glow: !0,
|
|
44
|
-
className: "border-border-seam",
|
|
45
|
-
children: /* @__PURE__ */ p(v, {
|
|
46
|
-
className: "pt-6",
|
|
47
|
-
children: /* @__PURE__ */ m("div", {
|
|
48
|
-
className: "flex items-start gap-6",
|
|
49
|
-
children: [/* @__PURE__ */ p("div", {
|
|
50
|
-
className: "flex h-24 w-24 shrink-0 items-center justify-center rounded-2xl bg-gradient-to-br from-primary to-primary/60 text-action-primary-text text-3xl font-semibold",
|
|
51
|
-
children: M(B)
|
|
52
|
-
}), /* @__PURE__ */ m("div", {
|
|
53
|
-
className: "flex-1 space-y-2",
|
|
54
|
-
children: [
|
|
55
|
-
/* @__PURE__ */ m("div", {
|
|
56
|
-
className: "flex items-center gap-3 flex-wrap",
|
|
57
|
-
children: [/* @__PURE__ */ p("h1", {
|
|
58
|
-
className: "text-2xl font-semibold",
|
|
59
|
-
children: /* @__PURE__ */ p(C, { children: B })
|
|
60
|
-
}), J ? /* @__PURE__ */ p(h, { children: "Top Rated" }) : null]
|
|
61
|
-
}),
|
|
62
|
-
/* @__PURE__ */ p("p", {
|
|
63
|
-
className: "text-sm font-medium",
|
|
64
|
-
children: U.length > 0 ? U.join(" · ") : "Marketplace provider"
|
|
65
|
-
}),
|
|
66
|
-
/* @__PURE__ */ m("div", {
|
|
67
|
-
className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
|
|
68
|
-
children: [
|
|
69
|
-
/* @__PURE__ */ m("span", {
|
|
70
|
-
className: "flex items-center gap-1",
|
|
71
|
-
children: [
|
|
72
|
-
/* @__PURE__ */ p(c, { className: "h-3 w-3 text-status-warning-text" }),
|
|
73
|
-
" ",
|
|
74
|
-
G,
|
|
75
|
-
" (",
|
|
76
|
-
K,
|
|
77
|
-
" ",
|
|
78
|
-
"reviews)"
|
|
79
|
-
]
|
|
80
|
-
}),
|
|
81
|
-
/* @__PURE__ */ m("span", {
|
|
82
|
-
className: "flex items-center gap-1",
|
|
83
|
-
children: [
|
|
84
|
-
/* @__PURE__ */ p(i, { className: "h-3 w-3" }),
|
|
85
|
-
" ",
|
|
86
|
-
V.length,
|
|
87
|
-
" services"
|
|
88
|
-
]
|
|
89
|
-
}),
|
|
90
|
-
/* @__PURE__ */ m("span", {
|
|
91
|
-
className: "flex items-center gap-1",
|
|
92
|
-
children: [
|
|
93
|
-
/* @__PURE__ */ p(o, { className: "h-3 w-3" }),
|
|
94
|
-
" from $",
|
|
95
|
-
q.toLocaleString()
|
|
96
|
-
]
|
|
97
|
-
})
|
|
98
|
-
]
|
|
99
|
-
}),
|
|
100
|
-
/* @__PURE__ */ m("div", {
|
|
101
|
-
className: "flex gap-2 pt-2 flex-wrap",
|
|
102
|
-
children: [
|
|
103
|
-
/* @__PURE__ */ m(g, {
|
|
104
|
-
size: "sm",
|
|
105
|
-
onClick: () => F("../marketplace/messaging-page"),
|
|
106
|
-
children: [/* @__PURE__ */ p(s, { className: "h-3 w-3 mr-1" }), " Send Proposal"]
|
|
107
|
-
}),
|
|
108
|
-
/* @__PURE__ */ m(g, {
|
|
109
|
-
size: "sm",
|
|
110
|
-
variant: "outline",
|
|
111
|
-
disabled: !0,
|
|
112
|
-
title: "Video intro is coming soon",
|
|
113
|
-
"aria-label": "Video intro — coming soon",
|
|
114
|
-
children: [/* @__PURE__ */ p(u, { className: "h-3 w-3 mr-1" }), " Video Intro · Coming soon"]
|
|
115
|
-
}),
|
|
116
|
-
/* @__PURE__ */ m(g, {
|
|
117
|
-
size: "sm",
|
|
118
|
-
variant: "outline",
|
|
119
|
-
onClick: () => P("availability"),
|
|
120
|
-
children: [/* @__PURE__ */ p(a, { className: "h-3 w-3 mr-1" }), " Schedule Call"]
|
|
121
|
-
})
|
|
122
|
-
]
|
|
123
|
-
}),
|
|
124
|
-
/* @__PURE__ */ p(E, {
|
|
125
|
-
className: "pt-2",
|
|
126
|
-
children: "A freelancer's full profile — skills, listed services, and performance — so you can vet them thoroughly and decide whether to hire before you reach out."
|
|
127
|
-
})
|
|
128
|
-
]
|
|
129
|
-
})]
|
|
130
|
-
})
|
|
131
|
-
})
|
|
132
|
-
}),
|
|
133
|
-
/* @__PURE__ */ p(T, {
|
|
134
|
-
storageKey: "crewfoundry-freelancer-profile-enhanced",
|
|
135
|
-
steps: [
|
|
136
|
-
{
|
|
137
|
-
id: "services",
|
|
138
|
-
label: "Review their services",
|
|
139
|
-
description: "See exactly what this freelancer offers and at what price.",
|
|
140
|
-
icon: /* @__PURE__ */ p(i, { className: "h-4 w-4" }),
|
|
141
|
-
onClick: () => P("services")
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
id: "availability",
|
|
145
|
-
label: "Check availability",
|
|
146
|
-
description: "Find open slots before you schedule a call.",
|
|
147
|
-
icon: /* @__PURE__ */ p(a, { className: "h-4 w-4" }),
|
|
148
|
-
onClick: () => P("availability")
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
id: "performance",
|
|
152
|
-
label: "Inspect performance",
|
|
153
|
-
description: "Look at ratings and delivery history to reduce risk.",
|
|
154
|
-
icon: /* @__PURE__ */ p(l, { className: "h-4 w-4" }),
|
|
155
|
-
onClick: () => P("analytics")
|
|
156
|
-
}
|
|
157
|
-
]
|
|
158
|
-
}),
|
|
159
|
-
/* @__PURE__ */ p("div", {
|
|
160
|
-
className: "grid gap-4 md:grid-cols-4",
|
|
161
|
-
children: Y.map((e) => /* @__PURE__ */ p(_, { children: /* @__PURE__ */ m(v, {
|
|
162
|
-
className: "pt-6",
|
|
163
|
-
children: [/* @__PURE__ */ p("p", {
|
|
164
|
-
className: "text-xs text-text-secondary",
|
|
165
|
-
children: e.label
|
|
166
|
-
}), /* @__PURE__ */ p("p", {
|
|
167
|
-
className: "text-lg font-bold",
|
|
168
|
-
children: e.value
|
|
169
|
-
})]
|
|
170
|
-
}) }, e.label))
|
|
171
|
-
}),
|
|
172
|
-
/* @__PURE__ */ m(O, {
|
|
173
|
-
value: N,
|
|
174
|
-
onValueChange: P,
|
|
175
|
-
children: [
|
|
176
|
-
/* @__PURE__ */ m(A, { children: [
|
|
177
|
-
/* @__PURE__ */ p(j, {
|
|
178
|
-
value: "overview",
|
|
179
|
-
children: "Overview"
|
|
180
|
-
}),
|
|
181
|
-
/* @__PURE__ */ p(j, {
|
|
182
|
-
value: "services",
|
|
183
|
-
children: "Services"
|
|
184
|
-
}),
|
|
185
|
-
/* @__PURE__ */ p(j, {
|
|
186
|
-
value: "availability",
|
|
187
|
-
children: "Availability"
|
|
188
|
-
}),
|
|
189
|
-
/* @__PURE__ */ p(j, {
|
|
190
|
-
value: "analytics",
|
|
191
|
-
children: "Performance"
|
|
192
|
-
})
|
|
193
|
-
] }),
|
|
194
|
-
/* @__PURE__ */ p(k, {
|
|
195
|
-
value: "overview",
|
|
196
|
-
className: "space-y-6 mt-4",
|
|
197
|
-
children: /* @__PURE__ */ m("div", {
|
|
198
|
-
className: "grid gap-6 lg:grid-cols-3",
|
|
199
|
-
children: [/* @__PURE__ */ p("div", {
|
|
200
|
-
className: "lg:col-span-2 space-y-4",
|
|
201
|
-
children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(b, { children: /* @__PURE__ */ p(x, {
|
|
202
|
-
className: "text-base",
|
|
203
|
-
children: "Summary"
|
|
204
|
-
}) }), /* @__PURE__ */ m(v, {
|
|
205
|
-
className: "text-sm text-text-secondary space-y-3",
|
|
206
|
-
children: [/* @__PURE__ */ m("p", { children: [
|
|
207
|
-
B,
|
|
208
|
-
" offers ",
|
|
209
|
-
V.length,
|
|
210
|
-
" ",
|
|
211
|
-
V.length === 1 ? "service" : "services",
|
|
212
|
-
" on the marketplace",
|
|
213
|
-
U.length > 0 ? ` across ${U.join(", ")}` : "",
|
|
214
|
-
"."
|
|
215
|
-
] }), /* @__PURE__ */ m("p", { children: [
|
|
216
|
-
"Across all listings the provider holds an average rating of ",
|
|
217
|
-
G,
|
|
218
|
-
" from",
|
|
219
|
-
" ",
|
|
220
|
-
K,
|
|
221
|
-
" reviews, with rates starting at $",
|
|
222
|
-
q.toLocaleString(),
|
|
223
|
-
"."
|
|
224
|
-
] })]
|
|
225
|
-
})] })
|
|
226
|
-
}), /* @__PURE__ */ p("div", {
|
|
227
|
-
className: "space-y-4",
|
|
228
|
-
children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(b, { children: /* @__PURE__ */ p(x, {
|
|
229
|
-
className: "text-sm",
|
|
230
|
-
children: "Expertise Areas"
|
|
231
|
-
}) }), /* @__PURE__ */ p(v, {
|
|
232
|
-
className: "flex flex-wrap gap-1.5",
|
|
233
|
-
children: H.length > 0 ? H.map((e) => /* @__PURE__ */ p(h, {
|
|
234
|
-
variant: "secondary",
|
|
235
|
-
className: "text-xs",
|
|
236
|
-
children: e
|
|
237
|
-
}, e)) : /* @__PURE__ */ p("p", {
|
|
238
|
-
className: "text-xs text-text-secondary",
|
|
239
|
-
children: "No skills listed yet."
|
|
240
|
-
})
|
|
241
|
-
})] })
|
|
242
|
-
})]
|
|
243
|
-
})
|
|
244
|
-
}),
|
|
245
|
-
/* @__PURE__ */ p(k, {
|
|
246
|
-
value: "services",
|
|
247
|
-
className: "mt-4",
|
|
248
|
-
children: W.length > 0 ? /* @__PURE__ */ p("div", {
|
|
249
|
-
className: "grid gap-4 md:grid-cols-2",
|
|
250
|
-
children: W.map((e) => /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(b, { children: [/* @__PURE__ */ m("div", {
|
|
251
|
-
className: "flex items-center justify-between",
|
|
252
|
-
children: [/* @__PURE__ */ p(x, {
|
|
253
|
-
className: "text-sm",
|
|
254
|
-
children: e.title
|
|
255
|
-
}), /* @__PURE__ */ p(h, {
|
|
256
|
-
variant: "outline",
|
|
257
|
-
className: "text-xs",
|
|
258
|
-
children: t(e.type)
|
|
259
|
-
})]
|
|
260
|
-
}), /* @__PURE__ */ p(y, {
|
|
261
|
-
className: "text-xs",
|
|
262
|
-
children: e.description
|
|
263
|
-
})] }), /* @__PURE__ */ m(v, {
|
|
264
|
-
className: "pt-0",
|
|
265
|
-
children: [/* @__PURE__ */ p(D, { className: "mb-3" }), /* @__PURE__ */ m("div", {
|
|
266
|
-
className: "flex items-center justify-between",
|
|
267
|
-
children: [/* @__PURE__ */ m("div", {
|
|
268
|
-
className: "space-y-0.5",
|
|
269
|
-
children: [/* @__PURE__ */ p("p", {
|
|
270
|
-
className: "text-sm font-semibold",
|
|
271
|
-
children: e.price
|
|
272
|
-
}), /* @__PURE__ */ m("p", {
|
|
273
|
-
className: "text-[10px] text-text-secondary",
|
|
274
|
-
children: ["Delivery: ", e.delivery]
|
|
275
|
-
})]
|
|
276
|
-
}), /* @__PURE__ */ p(g, {
|
|
277
|
-
size: "sm",
|
|
278
|
-
variant: "outline",
|
|
279
|
-
onClick: () => F(`../marketplace/service-details-page?id=${e.id}`),
|
|
280
|
-
children: "View"
|
|
281
|
-
})]
|
|
282
|
-
})]
|
|
283
|
-
})] }, e.id))
|
|
284
|
-
}) : /* @__PURE__ */ p(w, {
|
|
285
|
-
illustration: "empty-generic",
|
|
286
|
-
title: "No services listed",
|
|
287
|
-
description: "This provider has not published any services yet."
|
|
288
|
-
})
|
|
289
|
-
}),
|
|
290
|
-
/* @__PURE__ */ p(k, {
|
|
291
|
-
value: "availability",
|
|
292
|
-
className: "mt-4",
|
|
293
|
-
children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(b, { children: [/* @__PURE__ */ p(x, {
|
|
294
|
-
className: "text-base",
|
|
295
|
-
children: "Availability"
|
|
296
|
-
}), /* @__PURE__ */ p(y, { children: "Real-time scheduling with this provider" })] }), /* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(w, {
|
|
297
|
-
illustration: "empty-generic",
|
|
298
|
-
title: "Scheduling is coming soon",
|
|
299
|
-
description: "Live availability and consultation booking will appear here once the scheduling backend ships. In the meantime, send a message to arrange a time.",
|
|
300
|
-
action: /* @__PURE__ */ m(g, {
|
|
301
|
-
size: "sm",
|
|
302
|
-
onClick: () => F("../marketplace/messaging-page"),
|
|
303
|
-
children: [/* @__PURE__ */ p(s, { className: "h-3 w-3 mr-1" }), " Message provider"]
|
|
304
|
-
})
|
|
305
|
-
}) })] })
|
|
306
|
-
}),
|
|
307
|
-
/* @__PURE__ */ p(k, {
|
|
308
|
-
value: "analytics",
|
|
309
|
-
className: "mt-4",
|
|
310
|
-
children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(b, { children: [/* @__PURE__ */ p(x, {
|
|
311
|
-
className: "text-base",
|
|
312
|
-
children: "Service Performance"
|
|
313
|
-
}), /* @__PURE__ */ p(y, { children: "Ratings and reviews per listed service" })] }), /* @__PURE__ */ p(v, {
|
|
314
|
-
className: "space-y-3",
|
|
315
|
-
children: V.length > 0 ? V.map((e) => /* @__PURE__ */ m("div", {
|
|
316
|
-
className: "flex items-center justify-between",
|
|
317
|
-
children: [/* @__PURE__ */ m("div", {
|
|
318
|
-
className: "min-w-0",
|
|
319
|
-
children: [/* @__PURE__ */ p("p", {
|
|
320
|
-
className: "text-sm font-medium truncate",
|
|
321
|
-
children: e.title
|
|
322
|
-
}), /* @__PURE__ */ p("p", {
|
|
323
|
-
className: "text-xs text-text-secondary",
|
|
324
|
-
children: e.category
|
|
325
|
-
})]
|
|
326
|
-
}), /* @__PURE__ */ m("div", {
|
|
327
|
-
className: "flex items-center gap-2 text-sm shrink-0",
|
|
328
|
-
children: [
|
|
329
|
-
/* @__PURE__ */ p(c, { className: "h-3.5 w-3.5 text-status-warning-text" }),
|
|
330
|
-
/* @__PURE__ */ p("span", {
|
|
331
|
-
className: "font-semibold",
|
|
332
|
-
children: e.rating
|
|
333
|
-
}),
|
|
334
|
-
/* @__PURE__ */ m("span", {
|
|
335
|
-
className: "text-xs text-text-secondary",
|
|
336
|
-
children: [
|
|
337
|
-
"(",
|
|
338
|
-
e.reviews,
|
|
339
|
-
")"
|
|
340
|
-
]
|
|
341
|
-
})
|
|
342
|
-
]
|
|
343
|
-
})]
|
|
344
|
-
}, e.id)) : /* @__PURE__ */ p("p", {
|
|
345
|
-
className: "text-sm text-text-secondary",
|
|
346
|
-
children: "No performance data yet."
|
|
347
|
-
})
|
|
348
|
-
})] })
|
|
349
|
-
})
|
|
350
|
-
]
|
|
351
|
-
})
|
|
352
|
-
]
|
|
353
|
-
}) : /* @__PURE__ */ p("div", {
|
|
354
|
-
className: "p-6",
|
|
355
|
-
children: /* @__PURE__ */ p(w, {
|
|
356
|
-
illustration: "empty-search",
|
|
357
|
-
title: "Provider not found",
|
|
358
|
-
description: "This freelancer is no longer available on the marketplace."
|
|
359
|
-
})
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
//#endregion
|
|
363
|
-
export { N as MarketplaceFreelancerProfilePageEnhancedPage };
|
|
364
|
-
|
|
365
|
-
//# sourceMappingURL=MarketplaceFreelancerProfilePageEnhancedPage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceFreelancerProfilePageEnhancedPage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\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 Separator,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Briefcase,\n Calendar,\n DollarSign,\n MessageSquare,\n Star,\n TrendingUp,\n Video,\n} from 'lucide-react';\nimport { useLocation, useNavigate } from 'react-router';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nconst initialsOf = (name: string): string =>\n name\n .split(' ')\n .map((part) => part[0] ?? '')\n .join('')\n .slice(0, 2)\n .toUpperCase() || '—';\n\nexport function MarketplaceFreelancerProfilePageEnhancedPage() {\n const [selectedTab, setSelectedTab] = useState('overview');\n const navigate = useNavigate();\n const location = useLocation();\n const { marketplaceServices } = useCrewFoundryStore();\n const selectedId = new URLSearchParams(location.search).get('id');\n\n const baseService =\n marketplaceServices.find((service) => service.id === selectedId) ?? marketplaceServices[0];\n const providerName = baseService?.provider ?? '';\n\n const providerServices = useMemo(\n () => marketplaceServices.filter((service) => service.provider === providerName),\n [marketplaceServices, providerName]\n );\n\n const skills = useMemo(\n () => Array.from(new Set(providerServices.flatMap((service) => service.skills))).slice(0, 20),\n [providerServices]\n );\n\n const categories = useMemo(\n () => Array.from(new Set(providerServices.map((service) => service.category))),\n [providerServices]\n );\n\n const services = useMemo(\n () =>\n providerServices.map((service) => ({\n id: service.id,\n title: service.title,\n price:\n service.priceType === 'hourly'\n ? `$${service.price}/hr`\n : service.priceType === 'monthly'\n ? `$${service.price}/mo`\n : `$${service.price}`,\n type: service.priceType,\n description: service.description,\n delivery: service.deliveryTime,\n rating: service.rating,\n reviews: service.reviews,\n })),\n [providerServices]\n );\n\n const avgRating =\n providerServices.length > 0\n ? (\n providerServices.reduce((sum, service) => sum + service.rating, 0) /\n providerServices.length\n ).toFixed(1)\n : '0.0';\n const totalReviews = providerServices.reduce((sum, service) => sum + service.reviews, 0);\n const startingRate =\n providerServices.length > 0 ? Math.min(...providerServices.map((service) => service.price)) : 0;\n const isTopRated = Number(avgRating) >= 4.5 && totalReviews > 0;\n\n const stats = [\n { label: 'Services', value: `${providerServices.length}` },\n { label: 'Avg Rating', value: avgRating },\n { label: 'Total Reviews', value: `${totalReviews}` },\n { label: 'Starting Rate', value: `$${startingRate.toLocaleString()}` },\n ];\n\n if (!baseService) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Provider not found\"\n description=\"This freelancer is no longer available on the marketplace.\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start gap-6\">\n <div className=\"flex h-24 w-24 shrink-0 items-center justify-center rounded-2xl bg-gradient-to-br from-primary to-primary/60 text-action-primary-text text-3xl font-semibold\">\n {initialsOf(providerName)}\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3 flex-wrap\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{providerName}</GradientText>\n </h1>\n {isTopRated ? <Badge>Top Rated</Badge> : null}\n </div>\n <p className=\"text-sm font-medium\">\n {categories.length > 0 ? categories.join(' · ') : 'Marketplace provider'}\n </p>\n <div className=\"flex flex-wrap items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" /> {avgRating} ({totalReviews}{' '}\n reviews)\n </span>\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" /> {providerServices.length} services\n </span>\n <span className=\"flex items-center gap-1\">\n <DollarSign className=\"h-3 w-3\" /> from ${startingRate.toLocaleString()}\n </span>\n </div>\n <div className=\"flex gap-2 pt-2 flex-wrap\">\n <Button size=\"sm\" onClick={() => navigate('../marketplace/messaging-page')}>\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Send Proposal\n </Button>\n {/* No video-intro/call surface exists yet — honest disabled control. */}\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled\n title=\"Video intro is coming soon\"\n aria-label=\"Video intro — coming soon\"\n >\n <Video className=\"h-3 w-3 mr-1\" /> Video Intro · Coming soon\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setSelectedTab('availability')}>\n <Calendar className=\"h-3 w-3 mr-1\" /> Schedule Call\n </Button>\n </div>\n <PagePurpose className=\"pt-2\">\n A freelancer's full profile — skills, listed services, and performance — so you\n can vet them thoroughly and decide whether to hire before you reach out.\n </PagePurpose>\n </div>\n </div>\n </CardContent>\n </GlassCard>\n\n <NextSteps\n storageKey=\"crewfoundry-freelancer-profile-enhanced\"\n steps={[\n {\n id: 'services',\n label: 'Review their services',\n description: 'See exactly what this freelancer offers and at what price.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => setSelectedTab('services'),\n },\n {\n id: 'availability',\n label: 'Check availability',\n description: 'Find open slots before you schedule a call.',\n icon: <Calendar className=\"h-4 w-4\" />,\n onClick: () => setSelectedTab('availability'),\n },\n {\n id: 'performance',\n label: 'Inspect performance',\n description: 'Look at ratings and delivery history to reduce risk.',\n icon: <TrendingUp className=\"h-4 w-4\" />,\n onClick: () => setSelectedTab('analytics'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {stats.map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"pt-6\">\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <Tabs value={selectedTab} onValueChange={setSelectedTab}>\n <TabsList>\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"services\">Services</TabsTrigger>\n <TabsTrigger value=\"availability\">Availability</TabsTrigger>\n <TabsTrigger value=\"analytics\">Performance</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"overview\" className=\"space-y-6 mt-4\">\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Summary</CardTitle>\n </CardHeader>\n <CardContent className=\"text-sm text-text-secondary space-y-3\">\n <p>\n {providerName} offers {providerServices.length}{' '}\n {providerServices.length === 1 ? 'service' : 'services'} on the marketplace\n {categories.length > 0 ? ` across ${categories.join(', ')}` : ''}.\n </p>\n <p>\n Across all listings the provider holds an average rating of {avgRating} from{' '}\n {totalReviews} reviews, with rates starting at ${startingRate.toLocaleString()}.\n </p>\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Expertise Areas</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1.5\">\n {skills.length > 0 ? (\n skills.map((s) => (\n <Badge key={s} variant=\"secondary\" className=\"text-xs\">\n {s}\n </Badge>\n ))\n ) : (\n <p className=\"text-xs text-text-secondary\">No skills listed yet.</p>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"services\" className=\"mt-4\">\n {services.length > 0 ? (\n <div className=\"grid gap-4 md:grid-cols-2\">\n {services.map((svc) => (\n <Card key={svc.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-sm\">{svc.title}</CardTitle>\n <Badge variant=\"outline\" className=\"text-xs\">\n {formatEnumLabel(svc.type)}\n </Badge>\n </div>\n <CardDescription className=\"text-xs\">{svc.description}</CardDescription>\n </CardHeader>\n <CardContent className=\"pt-0\">\n <Separator className=\"mb-3\" />\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-semibold\">{svc.price}</p>\n <p className=\"text-[10px] text-text-secondary\">Delivery: {svc.delivery}</p>\n </div>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => navigate(`../marketplace/service-details-page?id=${svc.id}`)}\n >\n View\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No services listed\"\n description=\"This provider has not published any services yet.\"\n />\n )}\n </TabsContent>\n\n <TabsContent value=\"availability\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Availability</CardTitle>\n <CardDescription>Real-time scheduling with this provider</CardDescription>\n </CardHeader>\n <CardContent>\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"Scheduling is coming soon\"\n description=\"Live availability and consultation booking will appear here once the scheduling backend ships. In the meantime, send a message to arrange a time.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('../marketplace/messaging-page')}>\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Message provider\n </Button>\n }\n />\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"analytics\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Service Performance</CardTitle>\n <CardDescription>Ratings and reviews per listed service</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {providerServices.length > 0 ? (\n providerServices.map((service) => (\n <div key={service.id} className=\"flex items-center justify-between\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium truncate\">{service.title}</p>\n <p className=\"text-xs text-text-secondary\">{service.category}</p>\n </div>\n <div className=\"flex items-center gap-2 text-sm shrink-0\">\n <Star className=\"h-3.5 w-3.5 text-status-warning-text\" />\n <span className=\"font-semibold\">{service.rating}</span>\n <span className=\"text-xs text-text-secondary\">({service.reviews})</span>\n </div>\n </div>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No performance data yet.</p>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceFreelancerProfilePagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,oCAAoC,gCAqNnD"}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import { getInitials as t } from "../components/viz/lib/format.js";
|
|
3
|
-
import { RatingStars as n } from "../components/viz/RatingStars.js";
|
|
4
|
-
import "../components/viz/index.js";
|
|
5
|
-
import { useMemo as r } from "react";
|
|
6
|
-
import { Award as i, Briefcase as a, DollarSign as o, MessageSquare as s, Star as c } from "lucide-react";
|
|
7
|
-
import { useLocation as l, useNavigate as u } from "react-router";
|
|
8
|
-
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
9
|
-
import { Badge as p, Button as m, Card as h, CardContent as g, CardHeader as _, CardTitle as v, EmphasisPanel as y, GradientText as b, IllustratedEmptyState as x, PagePurpose as S } from "@burdenoff/fe-libs/ui";
|
|
10
|
-
//#region src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx
|
|
11
|
-
var C = (e) => t(e);
|
|
12
|
-
function w() {
|
|
13
|
-
let t = u(), w = l(), { marketplaceServices: T } = e(), E = new URLSearchParams(w.search).get("id"), D = T.find((e) => e.id === E) ?? T[0], O = D?.provider ?? "", k = r(() => T.filter((e) => e.provider === O), [T, O]), A = r(() => Array.from(new Set(k.flatMap((e) => e.skills))).slice(0, 20), [k]), j = r(() => Array.from(new Set(k.map((e) => e.category))), [k]), M = k.length > 0 ? (k.reduce((e, t) => e + t.rating, 0) / k.length).toFixed(1) : "0.0", N = k.reduce((e, t) => e + t.reviews, 0), P = k.length > 0 ? Math.min(...k.map((e) => e.price)) : 0, F = Number(M) >= 4.5 && N > 0;
|
|
14
|
-
return D ? /* @__PURE__ */ f("div", {
|
|
15
|
-
className: "space-y-6 p-6",
|
|
16
|
-
children: [
|
|
17
|
-
/* @__PURE__ */ f("div", {
|
|
18
|
-
className: "flex items-start gap-6",
|
|
19
|
-
children: [/* @__PURE__ */ d("div", {
|
|
20
|
-
className: "flex h-20 w-20 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text text-2xl font-semibold",
|
|
21
|
-
children: C(O)
|
|
22
|
-
}), /* @__PURE__ */ f("div", {
|
|
23
|
-
className: "flex-1 space-y-2",
|
|
24
|
-
children: [
|
|
25
|
-
/* @__PURE__ */ f("div", {
|
|
26
|
-
className: "flex items-center gap-3",
|
|
27
|
-
children: [/* @__PURE__ */ d("h1", {
|
|
28
|
-
className: "text-2xl font-semibold",
|
|
29
|
-
children: /* @__PURE__ */ d(b, { children: O })
|
|
30
|
-
}), F ? /* @__PURE__ */ d(p, { children: "Top Rated" }) : null]
|
|
31
|
-
}),
|
|
32
|
-
/* @__PURE__ */ d("p", {
|
|
33
|
-
className: "text-sm text-text-secondary",
|
|
34
|
-
children: j.length > 0 ? `Provider · ${j.join(", ")}` : "Marketplace provider"
|
|
35
|
-
}),
|
|
36
|
-
/* @__PURE__ */ d(S, {
|
|
37
|
-
className: "mt-1",
|
|
38
|
-
children: "Review a freelancer's full profile — skills, listed services, and ratings — to decide if they're the right fit before you hire."
|
|
39
|
-
}),
|
|
40
|
-
/* @__PURE__ */ f("div", {
|
|
41
|
-
className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
|
|
42
|
-
children: [/* @__PURE__ */ d(n, {
|
|
43
|
-
value: Number(M),
|
|
44
|
-
count: N,
|
|
45
|
-
showValue: !0,
|
|
46
|
-
size: 14
|
|
47
|
-
}), /* @__PURE__ */ f("span", {
|
|
48
|
-
className: "flex items-center gap-1",
|
|
49
|
-
children: [
|
|
50
|
-
/* @__PURE__ */ d(a, { className: "h-3 w-3" }),
|
|
51
|
-
" ",
|
|
52
|
-
k.length,
|
|
53
|
-
" services"
|
|
54
|
-
]
|
|
55
|
-
})]
|
|
56
|
-
}),
|
|
57
|
-
/* @__PURE__ */ f("div", {
|
|
58
|
-
className: "flex gap-2 pt-1",
|
|
59
|
-
children: [/* @__PURE__ */ f(m, {
|
|
60
|
-
size: "sm",
|
|
61
|
-
onClick: () => t("../marketplace/messaging-page"),
|
|
62
|
-
children: [/* @__PURE__ */ d(s, { className: "h-3 w-3 mr-1" }), " Message"]
|
|
63
|
-
}), /* @__PURE__ */ d(m, {
|
|
64
|
-
size: "sm",
|
|
65
|
-
variant: "outline",
|
|
66
|
-
disabled: !0,
|
|
67
|
-
title: "Consultation booking is coming soon",
|
|
68
|
-
"aria-label": "Book consultation — coming soon",
|
|
69
|
-
children: "Book Consultation · Coming soon"
|
|
70
|
-
})]
|
|
71
|
-
})
|
|
72
|
-
]
|
|
73
|
-
})]
|
|
74
|
-
}),
|
|
75
|
-
/* @__PURE__ */ d("div", {
|
|
76
|
-
className: "grid gap-4 md:grid-cols-4",
|
|
77
|
-
children: [
|
|
78
|
-
{
|
|
79
|
-
icon: a,
|
|
80
|
-
label: "Services",
|
|
81
|
-
value: `${k.length}`,
|
|
82
|
-
color: "text-status-info-text"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
icon: c,
|
|
86
|
-
label: "Avg Rating",
|
|
87
|
-
value: `${M}`,
|
|
88
|
-
color: "text-status-warning-text"
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
icon: i,
|
|
92
|
-
label: "Total Reviews",
|
|
93
|
-
value: `${N}`,
|
|
94
|
-
color: "text-status-success-text"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
icon: o,
|
|
98
|
-
label: "Starting Rate",
|
|
99
|
-
value: `$${P.toLocaleString()}`,
|
|
100
|
-
color: "text-action-primary-bg"
|
|
101
|
-
}
|
|
102
|
-
].map((e) => /* @__PURE__ */ d(h, { children: /* @__PURE__ */ f(g, {
|
|
103
|
-
className: "flex items-center gap-3 pt-6",
|
|
104
|
-
children: [/* @__PURE__ */ d(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
|
|
105
|
-
className: "text-xs text-text-secondary",
|
|
106
|
-
children: e.label
|
|
107
|
-
}), /* @__PURE__ */ d("p", {
|
|
108
|
-
className: "text-lg font-bold",
|
|
109
|
-
children: e.value
|
|
110
|
-
})] })]
|
|
111
|
-
}) }, e.label))
|
|
112
|
-
}),
|
|
113
|
-
/* @__PURE__ */ f("div", {
|
|
114
|
-
className: "grid gap-6 lg:grid-cols-3",
|
|
115
|
-
children: [/* @__PURE__ */ f("div", {
|
|
116
|
-
className: "lg:col-span-2 space-y-6",
|
|
117
|
-
children: [/* @__PURE__ */ f(y, { children: [/* @__PURE__ */ d("div", {
|
|
118
|
-
className: "mb-2 text-base font-semibold",
|
|
119
|
-
children: "Overview"
|
|
120
|
-
}), /* @__PURE__ */ f("p", {
|
|
121
|
-
className: "text-sm text-text-secondary",
|
|
122
|
-
children: [
|
|
123
|
-
O,
|
|
124
|
-
" offers ",
|
|
125
|
-
k.length,
|
|
126
|
-
" ",
|
|
127
|
-
k.length === 1 ? "service" : "services",
|
|
128
|
-
" on the marketplace",
|
|
129
|
-
j.length > 0 ? ` across ${j.join(", ")}` : "",
|
|
130
|
-
", with an average rating of ",
|
|
131
|
-
M,
|
|
132
|
-
" from ",
|
|
133
|
-
N,
|
|
134
|
-
" reviews."
|
|
135
|
-
]
|
|
136
|
-
})] }), /* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, {
|
|
137
|
-
className: "text-base",
|
|
138
|
-
children: "Listed Services"
|
|
139
|
-
}) }), /* @__PURE__ */ d(g, {
|
|
140
|
-
className: "space-y-4",
|
|
141
|
-
children: k.map((e) => /* @__PURE__ */ f("button", {
|
|
142
|
-
type: "button",
|
|
143
|
-
onClick: () => t(`../marketplace/service-details-page?id=${e.id}`),
|
|
144
|
-
className: "w-full rounded-lg border p-4 space-y-2 text-left hover:bg-bg-sunken/50 focus:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-bg",
|
|
145
|
-
children: [
|
|
146
|
-
/* @__PURE__ */ f("div", {
|
|
147
|
-
className: "flex items-center justify-between",
|
|
148
|
-
children: [/* @__PURE__ */ d("p", {
|
|
149
|
-
className: "font-medium text-sm",
|
|
150
|
-
children: e.title
|
|
151
|
-
}), /* @__PURE__ */ d(p, {
|
|
152
|
-
variant: "secondary",
|
|
153
|
-
className: "text-[10px]",
|
|
154
|
-
children: e.deliveryTime
|
|
155
|
-
})]
|
|
156
|
-
}),
|
|
157
|
-
/* @__PURE__ */ d("p", {
|
|
158
|
-
className: "text-xs text-text-secondary",
|
|
159
|
-
children: e.description
|
|
160
|
-
}),
|
|
161
|
-
/* @__PURE__ */ f("div", {
|
|
162
|
-
className: "flex items-center gap-3 text-xs",
|
|
163
|
-
children: [/* @__PURE__ */ f("span", {
|
|
164
|
-
className: "font-medium",
|
|
165
|
-
children: [
|
|
166
|
-
"$",
|
|
167
|
-
e.price.toLocaleString(),
|
|
168
|
-
"/",
|
|
169
|
-
e.priceType
|
|
170
|
-
]
|
|
171
|
-
}), /* @__PURE__ */ d(n, {
|
|
172
|
-
value: e.rating,
|
|
173
|
-
count: e.reviews,
|
|
174
|
-
size: 12
|
|
175
|
-
})]
|
|
176
|
-
})
|
|
177
|
-
]
|
|
178
|
-
}, e.id))
|
|
179
|
-
})] })]
|
|
180
|
-
}), /* @__PURE__ */ f("div", {
|
|
181
|
-
className: "space-y-4",
|
|
182
|
-
children: [/* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, {
|
|
183
|
-
className: "text-sm",
|
|
184
|
-
children: "Skills & Expertise"
|
|
185
|
-
}) }), /* @__PURE__ */ d(g, {
|
|
186
|
-
className: "flex flex-wrap gap-1.5",
|
|
187
|
-
children: A.length > 0 ? A.map((e) => /* @__PURE__ */ d(p, {
|
|
188
|
-
variant: "secondary",
|
|
189
|
-
className: "text-xs",
|
|
190
|
-
children: e
|
|
191
|
-
}, e)) : /* @__PURE__ */ d("p", {
|
|
192
|
-
className: "text-xs text-text-secondary",
|
|
193
|
-
children: "No skills listed yet."
|
|
194
|
-
})
|
|
195
|
-
})] }), /* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, {
|
|
196
|
-
className: "text-sm",
|
|
197
|
-
children: "Service Categories"
|
|
198
|
-
}) }), /* @__PURE__ */ d(g, {
|
|
199
|
-
className: "flex flex-wrap gap-1.5",
|
|
200
|
-
children: j.length > 0 ? j.map((e) => /* @__PURE__ */ d(p, {
|
|
201
|
-
variant: "outline",
|
|
202
|
-
className: "text-xs",
|
|
203
|
-
children: e
|
|
204
|
-
}, e)) : /* @__PURE__ */ d("p", {
|
|
205
|
-
className: "text-xs text-text-secondary",
|
|
206
|
-
children: "No categories listed yet."
|
|
207
|
-
})
|
|
208
|
-
})] })]
|
|
209
|
-
})]
|
|
210
|
-
})
|
|
211
|
-
]
|
|
212
|
-
}) : /* @__PURE__ */ d("div", {
|
|
213
|
-
className: "p-6",
|
|
214
|
-
children: /* @__PURE__ */ d(x, {
|
|
215
|
-
illustration: "empty-search",
|
|
216
|
-
title: "Provider not found",
|
|
217
|
-
description: "This freelancer is no longer available on the marketplace."
|
|
218
|
-
})
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
//#endregion
|
|
222
|
-
export { w as MarketplaceFreelancerProfilePagePage };
|
|
223
|
-
|
|
224
|
-
//# sourceMappingURL=MarketplaceFreelancerProfilePagePage.js.map
|