@burdenoff/microfe-technospam 2026.705.2 → 2026.709.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/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +267 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +67 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +43083 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -1
- package/dist/technospam/TechnoSpamRoot.d.ts +5 -0
- package/dist/technospam/TechnoSpamRoot.d.ts.map +1 -0
- package/dist/technospam/TechnoSpamRoutes.d.ts +2 -0
- package/dist/technospam/TechnoSpamRoutes.d.ts.map +1 -0
- package/dist/technospam/api/technospamApi.d.ts +402 -0
- package/dist/technospam/api/technospamApi.d.ts.map +1 -0
- package/dist/technospam/components/LoadMore.d.ts +11 -0
- package/dist/technospam/components/LoadMore.d.ts.map +1 -0
- package/dist/technospam/components/MediaCover.d.ts +20 -0
- package/dist/technospam/components/MediaCover.d.ts.map +1 -0
- package/dist/technospam/components/PageLayout.d.ts +20 -0
- package/dist/technospam/components/PageLayout.d.ts.map +1 -0
- package/dist/technospam/components/StatCard.d.ts +20 -0
- package/dist/technospam/components/StatCard.d.ts.map +1 -0
- package/dist/technospam/components/StateViews.d.ts +30 -0
- package/dist/technospam/components/StateViews.d.ts.map +1 -0
- package/dist/technospam/components/StatusBadge.d.ts +5 -0
- package/dist/technospam/components/StatusBadge.d.ts.map +1 -0
- package/dist/technospam/components/index.d.ts +7 -0
- package/dist/technospam/components/index.d.ts.map +1 -0
- package/dist/technospam/hooks/useTechnoSpamAnalytics.d.ts +20 -0
- package/dist/technospam/hooks/useTechnoSpamAnalytics.d.ts.map +1 -0
- package/dist/technospam/hooks/useTechnoSpamAnalytics.js +13 -0
- package/dist/technospam/hooks/useTechnoSpamAnalytics.js.map +1 -0
- package/dist/technospam/index.d.ts +6 -0
- package/dist/technospam/index.d.ts.map +1 -0
- package/dist/technospam/index.js +2 -0
- package/dist/technospam/lib/toast.d.ts +18 -0
- package/dist/technospam/lib/toast.d.ts.map +1 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts +2 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts +2 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +129 -105
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts +2 -0
- package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js +87 -72
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +174 -143
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesCoursesPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesCoursesPagePage.js +95 -80
- package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/DashboardDashboardPagePage.d.ts +2 -0
- package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts +2 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js +93 -78
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +135 -121
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipMentorsPagePage.js +156 -142
- package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipSessionsPagePage.js +129 -112
- package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
- package/dist/technospam/providers/TechnoSpamProvider.d.ts +13 -0
- package/dist/technospam/providers/TechnoSpamProvider.d.ts.map +1 -0
- package/dist/technospam/services/assistantApi.d.ts +76 -0
- package/dist/technospam/services/assistantApi.d.ts.map +1 -0
- package/dist/technospam/services/assistantApi.js +222 -0
- package/dist/technospam/services/assistantApi.js.map +1 -0
- package/dist/technospam/services/createSandboxAssistantTransport.d.ts +40 -0
- package/dist/technospam/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/technospam/services/createSandboxAssistantTransport.js +120 -0
- package/dist/technospam/services/createSandboxAssistantTransport.js.map +1 -0
- package/dist/technospam/types/assistant.d.ts +15 -0
- package/dist/technospam/types/assistant.d.ts.map +1 -0
- package/dist/technospam/types/index.d.ts +51 -0
- package/dist/technospam/types/index.d.ts.map +1 -0
- package/dist/technospam/utils/cn.d.ts +4 -0
- package/dist/technospam/utils/cn.d.ts.map +1 -0
- package/dist/technospam/utils/format.d.ts +9 -0
- package/dist/technospam/utils/format.d.ts.map +1 -0
- package/dist/technospam/utils/i18n.d.ts +6 -0
- package/dist/technospam/utils/i18n.d.ts.map +1 -0
- package/dist/technospam/utils/navigation.d.ts +2 -0
- package/dist/technospam/utils/navigation.d.ts.map +1 -0
- package/dist/technospam/utils/pageContext.d.ts +28 -0
- package/dist/technospam/utils/pageContext.d.ts.map +1 -0
- package/dist/technospam/utils/pageContext.js +46 -0
- package/dist/technospam/utils/pageContext.js.map +1 -0
- package/package.json +5 -1
|
@@ -9,100 +9,101 @@ import { EmptyView as l, ErrorView as u, LoadingGrid as d } from "../components/
|
|
|
9
9
|
import "../components/index.js";
|
|
10
10
|
import { notify as f } from "../lib/toast.js";
|
|
11
11
|
import { pageArg as p, useBecomeMentor as m, useMentorsQuery as h, usePageLimit as g } from "../api/technospamApi.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
12
|
+
import { useTechnoSpamAnalytics as _ } from "../hooks/useTechnoSpamAnalytics.js";
|
|
13
|
+
import { createElement as v, useMemo as y, useState as b } from "react";
|
|
14
|
+
import { Award as x, MessageSquare as S, Search as C, Sparkles as w, Star as T, UserPlus as E, Users as D, X as O } from "lucide-react";
|
|
15
|
+
import { jsx as k, jsxs as A } from "react/jsx-runtime";
|
|
16
|
+
import { Badge as j, Button as M, GlassCard as N, Input as P, Textarea as F } from "@burdenoff/fe-libs/ui";
|
|
16
17
|
//#region src/technospam/pages/MentorshipMentorsPagePage.tsx
|
|
17
|
-
function
|
|
18
|
-
return /* @__PURE__ */
|
|
18
|
+
function I({ mentor: e, size: t = "md" }) {
|
|
19
|
+
return /* @__PURE__ */ A("div", {
|
|
19
20
|
className: "relative shrink-0",
|
|
20
|
-
children: [/* @__PURE__ */
|
|
21
|
+
children: [/* @__PURE__ */ k("span", {
|
|
21
22
|
className: n("flex items-center justify-center rounded-full bg-gradient-to-br text-white shadow-md ring-1 ring-white/15", t === "lg" ? "h-20 w-20" : "h-16 w-16", a(e.headline)),
|
|
22
|
-
children:
|
|
23
|
+
children: v(o(e.expertise.join(" ") || e.headline), {
|
|
23
24
|
size: t === "lg" ? 32 : 26,
|
|
24
25
|
strokeWidth: 1.7
|
|
25
26
|
})
|
|
26
|
-
}), e.isAcceptingMentees ? /* @__PURE__ */
|
|
27
|
+
}), e.isAcceptingMentees ? /* @__PURE__ */ k("span", { className: "absolute -bottom-0.5 -right-0.5 h-4 w-4 rounded-full border-2 border-bg-surface bg-status-success-text" }) : null]
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
|
-
function
|
|
30
|
-
return /* @__PURE__ */
|
|
30
|
+
function L({ mentor: e, onOpen: t }) {
|
|
31
|
+
return /* @__PURE__ */ A(N, {
|
|
31
32
|
className: "group flex cursor-pointer flex-col gap-4 p-5 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg",
|
|
32
33
|
onClick: t,
|
|
33
34
|
children: [
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
+
/* @__PURE__ */ A("div", {
|
|
35
36
|
className: "flex items-start gap-4",
|
|
36
|
-
children: [/* @__PURE__ */
|
|
37
|
+
children: [/* @__PURE__ */ k(I, { mentor: e }), /* @__PURE__ */ A("div", {
|
|
37
38
|
className: "min-w-0 flex-1",
|
|
38
|
-
children: [/* @__PURE__ */
|
|
39
|
+
children: [/* @__PURE__ */ k("h3", {
|
|
39
40
|
className: "truncate text-base font-semibold text-text-primary group-hover:text-accent-primary",
|
|
40
41
|
children: e.headline
|
|
41
|
-
}), e.isAcceptingMentees ? /* @__PURE__ */
|
|
42
|
+
}), e.isAcceptingMentees ? /* @__PURE__ */ A(j, {
|
|
42
43
|
variant: "outline",
|
|
43
44
|
className: "mt-1.5 inline-flex items-center gap-1.5 border-status-success-border bg-status-success-bg-subtle text-status-success-text",
|
|
44
|
-
children: [/* @__PURE__ */
|
|
45
|
-
}) : /* @__PURE__ */
|
|
45
|
+
children: [/* @__PURE__ */ k("span", { className: "h-1.5 w-1.5 rounded-full bg-status-success-text" }), " Accepting mentees"]
|
|
46
|
+
}) : /* @__PURE__ */ k(j, {
|
|
46
47
|
variant: "outline",
|
|
47
48
|
className: "mt-1.5 border-border-seam bg-bg-sunken text-text-secondary",
|
|
48
49
|
children: "Not accepting"
|
|
49
50
|
})]
|
|
50
51
|
})]
|
|
51
52
|
}),
|
|
52
|
-
e.bio ? /* @__PURE__ */
|
|
53
|
+
e.bio ? /* @__PURE__ */ k("p", {
|
|
53
54
|
className: "line-clamp-2 text-sm text-text-secondary",
|
|
54
55
|
children: e.bio
|
|
55
56
|
}) : null,
|
|
56
|
-
e.expertise.length ? /* @__PURE__ */
|
|
57
|
+
e.expertise.length ? /* @__PURE__ */ A("div", {
|
|
57
58
|
className: "flex flex-wrap gap-1.5",
|
|
58
|
-
children: [e.expertise.slice(0, 4).map((e) => /* @__PURE__ */
|
|
59
|
+
children: [e.expertise.slice(0, 4).map((e) => /* @__PURE__ */ k(j, {
|
|
59
60
|
variant: "secondary",
|
|
60
61
|
className: "text-[11px]",
|
|
61
62
|
children: e
|
|
62
|
-
}, e)), e.expertise.length > 4 ? /* @__PURE__ */
|
|
63
|
+
}, e)), e.expertise.length > 4 ? /* @__PURE__ */ A("span", {
|
|
63
64
|
className: "self-center text-xs text-text-muted",
|
|
64
65
|
children: ["+", e.expertise.length - 4]
|
|
65
66
|
}) : null]
|
|
66
67
|
}) : null,
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
+
/* @__PURE__ */ A("div", {
|
|
68
69
|
className: "mt-auto grid grid-cols-3 divide-x divide-border-seam rounded-xl border border-border-seam bg-bg-sunken text-center",
|
|
69
70
|
children: [
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ A("div", {
|
|
71
72
|
className: "px-2 py-2.5",
|
|
72
|
-
children: [/* @__PURE__ */
|
|
73
|
+
children: [/* @__PURE__ */ A("div", {
|
|
73
74
|
className: "flex items-center justify-center gap-1 text-sm font-semibold text-text-primary",
|
|
74
|
-
children: [/* @__PURE__ */
|
|
75
|
+
children: [/* @__PURE__ */ k(T, {
|
|
75
76
|
size: 13,
|
|
76
77
|
className: "text-accent-teal"
|
|
77
78
|
}), e.ratingAvg > 0 ? e.ratingAvg.toFixed(1) : "New"]
|
|
78
|
-
}), /* @__PURE__ */
|
|
79
|
+
}), /* @__PURE__ */ k("div", {
|
|
79
80
|
className: "text-[11px] text-text-muted",
|
|
80
81
|
children: "rating"
|
|
81
82
|
})]
|
|
82
83
|
}),
|
|
83
|
-
/* @__PURE__ */
|
|
84
|
+
/* @__PURE__ */ A("div", {
|
|
84
85
|
className: "px-2 py-2.5",
|
|
85
|
-
children: [/* @__PURE__ */
|
|
86
|
+
children: [/* @__PURE__ */ k("div", {
|
|
86
87
|
className: "text-sm font-semibold text-text-primary",
|
|
87
88
|
children: e.sessionsCount
|
|
88
|
-
}), /* @__PURE__ */
|
|
89
|
+
}), /* @__PURE__ */ k("div", {
|
|
89
90
|
className: "text-[11px] text-text-muted",
|
|
90
91
|
children: "sessions"
|
|
91
92
|
})]
|
|
92
93
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
94
|
+
/* @__PURE__ */ A("div", {
|
|
94
95
|
className: "px-2 py-2.5",
|
|
95
|
-
children: [/* @__PURE__ */
|
|
96
|
+
children: [/* @__PURE__ */ k("div", {
|
|
96
97
|
className: "text-sm font-semibold text-text-primary",
|
|
97
98
|
children: s(e.hourlyRate, e.currency)
|
|
98
|
-
}), /* @__PURE__ */
|
|
99
|
+
}), /* @__PURE__ */ k("div", {
|
|
99
100
|
className: "text-[11px] text-text-muted",
|
|
100
101
|
children: "/ hr"
|
|
101
102
|
})]
|
|
102
103
|
})
|
|
103
104
|
]
|
|
104
105
|
}),
|
|
105
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ k(M, {
|
|
106
107
|
className: "w-full",
|
|
107
108
|
onClick: (e) => {
|
|
108
109
|
e.stopPropagation(), t();
|
|
@@ -112,118 +113,124 @@ function I({ mentor: e, onOpen: t }) {
|
|
|
112
113
|
]
|
|
113
114
|
});
|
|
114
115
|
}
|
|
115
|
-
function
|
|
116
|
-
let [
|
|
117
|
-
return /* @__PURE__ */
|
|
116
|
+
function R({ onClose: e, onDone: t, workspaceId: n }) {
|
|
117
|
+
let [r, i] = b(""), [a, o] = b(""), [s, c] = b(""), [l, u] = b(""), [d, p] = b("USD"), [h, { loading: g }] = m(), { emit: v } = _(), y = r.trim().length > 0 && !g;
|
|
118
|
+
return /* @__PURE__ */ A(N, {
|
|
118
119
|
className: "mb-6 p-5",
|
|
119
|
-
children: [/* @__PURE__ */
|
|
120
|
+
children: [/* @__PURE__ */ A("div", {
|
|
120
121
|
className: "mb-4 flex items-start justify-between gap-3",
|
|
121
|
-
children: [/* @__PURE__ */
|
|
122
|
+
children: [/* @__PURE__ */ A("div", {
|
|
122
123
|
className: "flex items-center gap-3",
|
|
123
|
-
children: [/* @__PURE__ */
|
|
124
|
+
children: [/* @__PURE__ */ k("span", {
|
|
124
125
|
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-accent-primary to-accent-indigo text-white shadow-sm",
|
|
125
|
-
children: /* @__PURE__ */
|
|
126
|
-
}), /* @__PURE__ */
|
|
126
|
+
children: /* @__PURE__ */ k(E, { size: 20 })
|
|
127
|
+
}), /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("h2", {
|
|
127
128
|
className: "text-base font-semibold text-text-primary",
|
|
128
129
|
children: "Become a mentor"
|
|
129
|
-
}), /* @__PURE__ */
|
|
130
|
+
}), /* @__PURE__ */ k("p", {
|
|
130
131
|
className: "text-sm text-text-secondary",
|
|
131
132
|
children: "Share your expertise and start mentoring builders in the community."
|
|
132
133
|
})] })]
|
|
133
|
-
}), /* @__PURE__ */
|
|
134
|
+
}), /* @__PURE__ */ k(M, {
|
|
134
135
|
variant: "ghost",
|
|
135
136
|
size: "sm",
|
|
136
137
|
onClick: e,
|
|
137
138
|
"aria-label": "Close",
|
|
138
|
-
children: /* @__PURE__ */ O
|
|
139
|
+
children: /* @__PURE__ */ k(O, { size: 16 })
|
|
139
140
|
})]
|
|
140
|
-
}), /* @__PURE__ */
|
|
141
|
+
}), /* @__PURE__ */ A("div", {
|
|
141
142
|
className: "grid grid-cols-1 gap-4",
|
|
142
143
|
children: [
|
|
143
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ A("label", {
|
|
144
145
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
145
|
-
children: ["Headline ", /* @__PURE__ */
|
|
146
|
+
children: ["Headline ", /* @__PURE__ */ k("span", {
|
|
146
147
|
className: "text-status-error-text",
|
|
147
148
|
children: "*"
|
|
148
149
|
})]
|
|
149
|
-
}), /* @__PURE__ */
|
|
150
|
+
}), /* @__PURE__ */ k(P, {
|
|
150
151
|
placeholder: "e.g. Staff Engineer · Distributed systems & career growth",
|
|
151
|
-
value:
|
|
152
|
-
onChange: (e) =>
|
|
152
|
+
value: r,
|
|
153
|
+
onChange: (e) => i(e.target.value)
|
|
153
154
|
})] }),
|
|
154
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
155
156
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
156
157
|
children: "Bio"
|
|
157
|
-
}), /* @__PURE__ */
|
|
158
|
+
}), /* @__PURE__ */ k(F, {
|
|
158
159
|
rows: 3,
|
|
159
160
|
placeholder: "Tell mentees about your experience and how you can help.",
|
|
160
|
-
value:
|
|
161
|
-
onChange: (e) =>
|
|
161
|
+
value: a,
|
|
162
|
+
onChange: (e) => o(e.target.value)
|
|
162
163
|
})] }),
|
|
163
|
-
/* @__PURE__ */
|
|
164
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ A("div", { children: [
|
|
165
|
+
/* @__PURE__ */ k("label", {
|
|
165
166
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
166
167
|
children: "Expertise"
|
|
167
168
|
}),
|
|
168
|
-
/* @__PURE__ */
|
|
169
|
+
/* @__PURE__ */ k(P, {
|
|
169
170
|
placeholder: "React, System design, Career coaching",
|
|
170
|
-
value:
|
|
171
|
-
onChange: (e) =>
|
|
171
|
+
value: s,
|
|
172
|
+
onChange: (e) => c(e.target.value)
|
|
172
173
|
}),
|
|
173
|
-
/* @__PURE__ */
|
|
174
|
+
/* @__PURE__ */ k("p", {
|
|
174
175
|
className: "mt-1 text-xs text-text-muted",
|
|
175
176
|
children: "Comma-separated topics."
|
|
176
177
|
})
|
|
177
178
|
] }),
|
|
178
|
-
/* @__PURE__ */
|
|
179
|
+
/* @__PURE__ */ A("div", {
|
|
179
180
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
|
|
180
|
-
children: [/* @__PURE__ */
|
|
181
|
-
/* @__PURE__ */
|
|
181
|
+
children: [/* @__PURE__ */ A("div", { children: [
|
|
182
|
+
/* @__PURE__ */ k("label", {
|
|
182
183
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
183
184
|
children: "Hourly rate"
|
|
184
185
|
}),
|
|
185
|
-
/* @__PURE__ */
|
|
186
|
+
/* @__PURE__ */ k(P, {
|
|
186
187
|
type: "number",
|
|
187
188
|
min: 0,
|
|
188
189
|
placeholder: "0",
|
|
189
|
-
value:
|
|
190
|
-
onChange: (e) =>
|
|
190
|
+
value: l,
|
|
191
|
+
onChange: (e) => u(e.target.value)
|
|
191
192
|
}),
|
|
192
|
-
/* @__PURE__ */
|
|
193
|
+
/* @__PURE__ */ k("p", {
|
|
193
194
|
className: "mt-1 text-xs text-text-muted",
|
|
194
195
|
children: "Whole number. Leave 0 for free."
|
|
195
196
|
})
|
|
196
|
-
] }), /* @__PURE__ */
|
|
197
|
+
] }), /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("label", {
|
|
197
198
|
className: "mb-1.5 block text-sm font-medium text-text-primary",
|
|
198
199
|
children: "Currency"
|
|
199
|
-
}), /* @__PURE__ */
|
|
200
|
+
}), /* @__PURE__ */ k(P, {
|
|
200
201
|
placeholder: "USD",
|
|
201
|
-
value:
|
|
202
|
-
onChange: (e) =>
|
|
202
|
+
value: d,
|
|
203
|
+
onChange: (e) => p(e.target.value)
|
|
203
204
|
})] })]
|
|
204
205
|
}),
|
|
205
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ A("div", {
|
|
206
207
|
className: "flex flex-wrap items-center gap-2",
|
|
207
|
-
children: [/* @__PURE__ */
|
|
208
|
+
children: [/* @__PURE__ */ A(M, {
|
|
208
209
|
onClick: async () => {
|
|
209
|
-
if (!
|
|
210
|
-
let e = { headline:
|
|
211
|
-
|
|
212
|
-
let
|
|
213
|
-
|
|
214
|
-
let
|
|
215
|
-
!Number.isNaN(
|
|
210
|
+
if (!y) return;
|
|
211
|
+
let e = { headline: r.trim() };
|
|
212
|
+
a.trim() && (e.bio = a.trim());
|
|
213
|
+
let i = s.split(",").map((e) => e.trim()).filter(Boolean);
|
|
214
|
+
i.length && (e.expertise = i);
|
|
215
|
+
let o = Number.parseInt(l, 10);
|
|
216
|
+
!Number.isNaN(o) && o >= 0 && (e.hourlyRate = o), d.trim() && (e.currency = d.trim().toUpperCase()), v("technospam.mentor.become_mentor_clicked", { workspaceId: n });
|
|
217
|
+
let c = await h({ variables: { input: e } });
|
|
218
|
+
c.data?.tecBecomeMentor && (v("technospam.mentor.became_mentor", {
|
|
219
|
+
workspaceId: n,
|
|
220
|
+
entityId: c.data.tecBecomeMentor.id,
|
|
221
|
+
entityType: "TEC_MENTOR"
|
|
222
|
+
}), f.success("Mentor profile created", "Your profile is pending review."), t());
|
|
216
223
|
},
|
|
217
|
-
disabled: !
|
|
224
|
+
disabled: !y,
|
|
218
225
|
children: [
|
|
219
|
-
/* @__PURE__ */
|
|
226
|
+
/* @__PURE__ */ k(E, { size: 16 }),
|
|
220
227
|
" ",
|
|
221
|
-
|
|
228
|
+
g ? "Submitting…" : "Submit profile"
|
|
222
229
|
]
|
|
223
|
-
}), /* @__PURE__ */
|
|
230
|
+
}), /* @__PURE__ */ k(M, {
|
|
224
231
|
variant: "outline",
|
|
225
232
|
onClick: e,
|
|
226
|
-
disabled:
|
|
233
|
+
disabled: g,
|
|
227
234
|
children: "Cancel"
|
|
228
235
|
})]
|
|
229
236
|
})
|
|
@@ -231,116 +238,123 @@ function L({ onClose: e, onDone: t }) {
|
|
|
231
238
|
})]
|
|
232
239
|
});
|
|
233
240
|
}
|
|
234
|
-
function
|
|
235
|
-
let n = t(), { currentUser: a } = e(), [
|
|
241
|
+
function z() {
|
|
242
|
+
let n = t(), { currentUser: a, workspaceId: o } = e(), { emit: s } = _(), [f, m] = b(""), [v, O] = b(!1), { limit: j, more: F } = g(), { data: I, loading: z, error: B, refetch: V } = h({
|
|
236
243
|
status: "ACTIVE",
|
|
237
|
-
pagination: p(
|
|
238
|
-
}),
|
|
239
|
-
let e =
|
|
240
|
-
return e ?
|
|
241
|
-
}, [
|
|
242
|
-
return /* @__PURE__ */
|
|
244
|
+
pagination: p(j)
|
|
245
|
+
}), H = I?.tecListMentors.items ?? [], U = I?.tecListMentors.pageInfo.hasMore ?? !1, W = a?.id, G = !!(W && H.some((e) => e.userId === W)), K = y(() => {
|
|
246
|
+
let e = f.trim().toLowerCase();
|
|
247
|
+
return e ? H.filter((t) => t.headline.toLowerCase().includes(e) || t.expertise.some((t) => t.toLowerCase().includes(e))) : H;
|
|
248
|
+
}, [H, f]), q = H.filter((e) => e.isAcceptingMentees).length, J = H.reduce((e, t) => e + t.sessionsCount, 0), Y = H.filter((e) => e.ratingAvg > 0), X = Y.length ? (Y.reduce((e, t) => e + t.ratingAvg, 0) / Y.length).toFixed(1) : "—";
|
|
249
|
+
return /* @__PURE__ */ A(r, {
|
|
243
250
|
hero: !0,
|
|
244
251
|
title: "Find a Mentor",
|
|
245
252
|
description: "Connect with experienced builders for 1:1 guidance, code review, and career coaching.",
|
|
246
|
-
actions: /* @__PURE__ */
|
|
253
|
+
actions: /* @__PURE__ */ A(M, {
|
|
247
254
|
variant: "outline",
|
|
248
255
|
onClick: () => n("/mentorship/sessions-page"),
|
|
249
|
-
children: [/* @__PURE__ */
|
|
256
|
+
children: [/* @__PURE__ */ k(S, { size: 16 }), " My sessions"]
|
|
250
257
|
}),
|
|
251
258
|
children: [
|
|
252
|
-
|
|
259
|
+
G ? /* @__PURE__ */ A(N, {
|
|
253
260
|
className: "mb-6 flex items-center gap-3 p-4",
|
|
254
|
-
children: [/* @__PURE__ */
|
|
261
|
+
children: [/* @__PURE__ */ k("span", {
|
|
255
262
|
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-status-success-bg-subtle text-status-success-text",
|
|
256
|
-
children: /* @__PURE__ */
|
|
257
|
-
}), /* @__PURE__ */
|
|
263
|
+
children: /* @__PURE__ */ k(x, { size: 20 })
|
|
264
|
+
}), /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("div", {
|
|
258
265
|
className: "text-sm font-semibold text-text-primary",
|
|
259
266
|
children: "You're a mentor"
|
|
260
|
-
}), /* @__PURE__ */
|
|
267
|
+
}), /* @__PURE__ */ k("div", {
|
|
261
268
|
className: "text-xs text-text-secondary",
|
|
262
269
|
children: "Your mentor profile is live. Mentees can request sessions with you."
|
|
263
270
|
})] })]
|
|
264
|
-
}) :
|
|
265
|
-
onClose: () =>
|
|
271
|
+
}) : v ? /* @__PURE__ */ k(R, {
|
|
272
|
+
onClose: () => O(!1),
|
|
266
273
|
onDone: () => {
|
|
267
|
-
|
|
268
|
-
}
|
|
274
|
+
O(!1), V();
|
|
275
|
+
},
|
|
276
|
+
workspaceId: o
|
|
269
277
|
}) : null,
|
|
270
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ A("div", {
|
|
271
279
|
className: "mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4",
|
|
272
280
|
children: [
|
|
273
|
-
/* @__PURE__ */
|
|
281
|
+
/* @__PURE__ */ k(i, {
|
|
274
282
|
label: "Mentors",
|
|
275
|
-
value:
|
|
276
|
-
icon:
|
|
283
|
+
value: H.length,
|
|
284
|
+
icon: D,
|
|
277
285
|
tone: "blue"
|
|
278
286
|
}),
|
|
279
|
-
/* @__PURE__ */
|
|
287
|
+
/* @__PURE__ */ k(i, {
|
|
280
288
|
label: "Accepting mentees",
|
|
281
|
-
value:
|
|
282
|
-
icon:
|
|
289
|
+
value: q,
|
|
290
|
+
icon: w,
|
|
283
291
|
tone: "green"
|
|
284
292
|
}),
|
|
285
|
-
/* @__PURE__ */
|
|
293
|
+
/* @__PURE__ */ k(i, {
|
|
286
294
|
label: "Avg rating",
|
|
287
|
-
value:
|
|
288
|
-
icon:
|
|
295
|
+
value: X,
|
|
296
|
+
icon: T,
|
|
289
297
|
tone: "amber"
|
|
290
298
|
}),
|
|
291
|
-
/* @__PURE__ */
|
|
299
|
+
/* @__PURE__ */ k(i, {
|
|
292
300
|
label: "Total sessions",
|
|
293
|
-
value:
|
|
294
|
-
icon:
|
|
301
|
+
value: J,
|
|
302
|
+
icon: S,
|
|
295
303
|
tone: "purple"
|
|
296
304
|
})
|
|
297
305
|
]
|
|
298
306
|
}),
|
|
299
|
-
/* @__PURE__ */
|
|
307
|
+
/* @__PURE__ */ A("div", {
|
|
300
308
|
className: "mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
301
|
-
children: [/* @__PURE__ */
|
|
309
|
+
children: [/* @__PURE__ */ A("div", {
|
|
302
310
|
className: "relative w-full sm:w-80",
|
|
303
|
-
children: [/* @__PURE__ */
|
|
311
|
+
children: [/* @__PURE__ */ k(C, {
|
|
304
312
|
className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted",
|
|
305
313
|
size: 16
|
|
306
|
-
}), /* @__PURE__ */
|
|
314
|
+
}), /* @__PURE__ */ k(P, {
|
|
307
315
|
className: "pl-9",
|
|
308
316
|
placeholder: "Search by headline or expertise…",
|
|
309
|
-
value:
|
|
310
|
-
onChange: (e) =>
|
|
317
|
+
value: f,
|
|
318
|
+
onChange: (e) => m(e.target.value)
|
|
311
319
|
})]
|
|
312
|
-
}), !
|
|
313
|
-
onClick: () =>
|
|
314
|
-
children: [/* @__PURE__ */
|
|
320
|
+
}), !G && !v ? /* @__PURE__ */ A(M, {
|
|
321
|
+
onClick: () => O(!0),
|
|
322
|
+
children: [/* @__PURE__ */ k(E, { size: 16 }), " Become a mentor"]
|
|
315
323
|
}) : null]
|
|
316
324
|
}),
|
|
317
|
-
|
|
325
|
+
z && !H.length ? /* @__PURE__ */ k(d, {}) : B ? /* @__PURE__ */ k(u, {
|
|
318
326
|
title: "Couldn't load mentors",
|
|
319
|
-
error:
|
|
320
|
-
}) :
|
|
321
|
-
icon: /* @__PURE__ */
|
|
322
|
-
title:
|
|
323
|
-
description:
|
|
324
|
-
action: !
|
|
325
|
-
onClick: () =>
|
|
327
|
+
error: B
|
|
328
|
+
}) : K.length === 0 ? /* @__PURE__ */ k(l, {
|
|
329
|
+
icon: /* @__PURE__ */ k(D, { size: 26 }),
|
|
330
|
+
title: f ? "No matching mentors" : "No mentors yet",
|
|
331
|
+
description: f ? "Try a different search term." : "Active mentors will appear here. TechnoSpam is pre-launch — be one of the first to sign up.",
|
|
332
|
+
action: !f && !G ? /* @__PURE__ */ k(M, {
|
|
333
|
+
onClick: () => O(!0),
|
|
326
334
|
children: "Become a mentor"
|
|
327
335
|
}) : void 0
|
|
328
|
-
}) : /* @__PURE__ */
|
|
336
|
+
}) : /* @__PURE__ */ k("div", {
|
|
329
337
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
330
|
-
children:
|
|
338
|
+
children: K.map((e) => /* @__PURE__ */ k(L, {
|
|
331
339
|
mentor: e,
|
|
332
|
-
onOpen: () =>
|
|
340
|
+
onOpen: () => {
|
|
341
|
+
s("technospam.mentor.viewed", {
|
|
342
|
+
workspaceId: o,
|
|
343
|
+
entityId: e.id,
|
|
344
|
+
entityType: "TEC_MENTOR"
|
|
345
|
+
}), n(`/mentorship/mentor-profile-page?id=${e.id}`);
|
|
346
|
+
}
|
|
333
347
|
}, e.id))
|
|
334
348
|
}),
|
|
335
|
-
/* @__PURE__ */
|
|
336
|
-
hasMore:
|
|
337
|
-
loading:
|
|
338
|
-
onClick:
|
|
349
|
+
/* @__PURE__ */ k(c, {
|
|
350
|
+
hasMore: U,
|
|
351
|
+
loading: z,
|
|
352
|
+
onClick: F
|
|
339
353
|
})
|
|
340
354
|
]
|
|
341
355
|
});
|
|
342
356
|
}
|
|
343
357
|
//#endregion
|
|
344
|
-
export {
|
|
358
|
+
export { z as MentorshipMentorsPagePage };
|
|
345
359
|
|
|
346
360
|
//# sourceMappingURL=MentorshipMentorsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentorshipMentorsPagePage.js","names":[],"sources":["../../../src/technospam/pages/MentorshipMentorsPagePage.tsx"],"sourcesContent":["import { createElement, useMemo, useState } from 'react';\nimport { Award, MessageSquare, Search, Sparkles, Star, UserPlus, Users, X } from 'lucide-react';\nimport { Badge, Button, GlassCard, Input, Textarea } from '@burdenoff/fe-libs/ui';\nimport {\n EmptyView,\n ErrorView,\n LoadMore,\n LoadingGrid,\n PageLayout,\n StatCard,\n coverGradient,\n topicIcon,\n} from '../components';\nimport { useTechnoSpam, useTechnoSpamNavigate } from '../providers/TechnoSpamProvider';\nimport {\n pageArg,\n useBecomeMentor,\n useMentorsQuery,\n usePageLimit,\n type TecMentor,\n} from '../api/technospamApi';\nimport { formatMoney } from '../utils/format';\nimport { cn } from '../utils/cn';\nimport { notify } from '../lib/toast';\n\n/** Circular gradient medallion standing in for a mentor avatar, with a live\n * \"accepting\" presence dot — mirrors the directory mockup within the dark theme. */\nfunction MentorMedallion({ mentor, size = 'md' }: { mentor: TecMentor; size?: 'md' | 'lg' }) {\n const box = size === 'lg' ? 'h-20 w-20' : 'h-16 w-16';\n return (\n <div className=\"relative shrink-0\">\n <span\n className={cn(\n 'flex items-center justify-center rounded-full bg-gradient-to-br text-white shadow-md ring-1 ring-white/15',\n box,\n coverGradient(mentor.headline)\n )}\n >\n {createElement(topicIcon(mentor.expertise.join(' ') || mentor.headline), {\n size: size === 'lg' ? 32 : 26,\n strokeWidth: 1.7,\n })}\n </span>\n {mentor.isAcceptingMentees ? (\n <span className=\"absolute -bottom-0.5 -right-0.5 h-4 w-4 rounded-full border-2 border-bg-surface bg-status-success-text\" />\n ) : null}\n </div>\n );\n}\n\nfunction MentorCard({ mentor, onOpen }: { mentor: TecMentor; onOpen: () => void }) {\n return (\n <GlassCard\n className=\"group flex cursor-pointer flex-col gap-4 p-5 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg\"\n onClick={onOpen}\n >\n <div className=\"flex items-start gap-4\">\n <MentorMedallion mentor={mentor} />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"truncate text-base font-semibold text-text-primary group-hover:text-accent-primary\">\n {mentor.headline}\n </h3>\n {mentor.isAcceptingMentees ? (\n <Badge\n variant=\"outline\"\n className=\"mt-1.5 inline-flex items-center gap-1.5 border-status-success-border bg-status-success-bg-subtle text-status-success-text\"\n >\n <span className=\"h-1.5 w-1.5 rounded-full bg-status-success-text\" /> Accepting mentees\n </Badge>\n ) : (\n <Badge\n variant=\"outline\"\n className=\"mt-1.5 border-border-seam bg-bg-sunken text-text-secondary\"\n >\n Not accepting\n </Badge>\n )}\n </div>\n </div>\n\n {mentor.bio ? <p className=\"line-clamp-2 text-sm text-text-secondary\">{mentor.bio}</p> : null}\n\n {mentor.expertise.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {mentor.expertise.slice(0, 4).map((skill) => (\n <Badge key={skill} variant=\"secondary\" className=\"text-[11px]\">\n {skill}\n </Badge>\n ))}\n {mentor.expertise.length > 4 ? (\n <span className=\"self-center text-xs text-text-muted\">\n +{mentor.expertise.length - 4}\n </span>\n ) : null}\n </div>\n ) : null}\n\n <div className=\"mt-auto grid grid-cols-3 divide-x divide-border-seam rounded-xl border border-border-seam bg-bg-sunken text-center\">\n <div className=\"px-2 py-2.5\">\n <div className=\"flex items-center justify-center gap-1 text-sm font-semibold text-text-primary\">\n <Star size={13} className=\"text-accent-teal\" />\n {mentor.ratingAvg > 0 ? mentor.ratingAvg.toFixed(1) : 'New'}\n </div>\n <div className=\"text-[11px] text-text-muted\">rating</div>\n </div>\n <div className=\"px-2 py-2.5\">\n <div className=\"text-sm font-semibold text-text-primary\">{mentor.sessionsCount}</div>\n <div className=\"text-[11px] text-text-muted\">sessions</div>\n </div>\n <div className=\"px-2 py-2.5\">\n <div className=\"text-sm font-semibold text-text-primary\">\n {formatMoney(mentor.hourlyRate, mentor.currency)}\n </div>\n <div className=\"text-[11px] text-text-muted\">/ hr</div>\n </div>\n </div>\n\n <Button\n className=\"w-full\"\n onClick={(e) => {\n e.stopPropagation();\n onOpen();\n }}\n >\n View profile\n </Button>\n </GlassCard>\n );\n}\n\nfunction BecomeMentorForm({ onClose, onDone }: { onClose: () => void; onDone: () => void }) {\n const [headline, setHeadline] = useState('');\n const [bio, setBio] = useState('');\n const [expertise, setExpertise] = useState('');\n const [hourlyRate, setHourlyRate] = useState('');\n const [currency, setCurrency] = useState('USD');\n const [becomeMentor, { loading }] = useBecomeMentor();\n\n const canSubmit = headline.trim().length > 0 && !loading;\n\n const handleSubmit = async () => {\n if (!canSubmit) return;\n const input: {\n headline: string;\n bio?: string;\n expertise?: string[];\n hourlyRate?: number;\n currency?: string;\n } = { headline: headline.trim() };\n if (bio.trim()) input.bio = bio.trim();\n const exp = expertise\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n if (exp.length) input.expertise = exp;\n const rate = Number.parseInt(hourlyRate, 10);\n if (!Number.isNaN(rate) && rate >= 0) input.hourlyRate = rate;\n if (currency.trim()) input.currency = currency.trim().toUpperCase();\n\n const res = await becomeMentor({ variables: { input } });\n if (res.data?.tecBecomeMentor) {\n notify.success('Mentor profile created', 'Your profile is pending review.');\n onDone();\n }\n };\n\n return (\n <GlassCard className=\"mb-6 p-5\">\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-accent-primary to-accent-indigo text-white shadow-sm\">\n <UserPlus size={20} />\n </span>\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">Become a mentor</h2>\n <p className=\"text-sm text-text-secondary\">\n Share your expertise and start mentoring builders in the community.\n </p>\n </div>\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} aria-label=\"Close\">\n <X size={16} />\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4\">\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Headline <span className=\"text-status-error-text\">*</span>\n </label>\n <Input\n placeholder=\"e.g. Staff Engineer · Distributed systems & career growth\"\n value={headline}\n onChange={(e) => setHeadline(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">Bio</label>\n <Textarea\n rows={3}\n placeholder=\"Tell mentees about your experience and how you can help.\"\n value={bio}\n onChange={(e) => setBio(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">Expertise</label>\n <Input\n placeholder=\"React, System design, Career coaching\"\n value={expertise}\n onChange={(e) => setExpertise(e.target.value)}\n />\n <p className=\"mt-1 text-xs text-text-muted\">Comma-separated topics.</p>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Hourly rate\n </label>\n <Input\n type=\"number\"\n min={0}\n placeholder=\"0\"\n value={hourlyRate}\n onChange={(e) => setHourlyRate(e.target.value)}\n />\n <p className=\"mt-1 text-xs text-text-muted\">Whole number. Leave 0 for free.</p>\n </div>\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">Currency</label>\n <Input\n placeholder=\"USD\"\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button onClick={handleSubmit} disabled={!canSubmit}>\n <UserPlus size={16} /> {loading ? 'Submitting…' : 'Submit profile'}\n </Button>\n <Button variant=\"outline\" onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n </div>\n </div>\n </GlassCard>\n );\n}\n\nexport function MentorshipMentorsPagePage() {\n const navigate = useTechnoSpamNavigate();\n const { currentUser } = useTechnoSpam();\n const [search, setSearch] = useState('');\n const [showForm, setShowForm] = useState(false);\n\n const { limit, more } = usePageLimit();\n const { data, loading, error, refetch } = useMentorsQuery({\n status: 'ACTIVE',\n pagination: pageArg(limit),\n });\n\n const mentors = data?.tecListMentors.items ?? [];\n const hasMore = data?.tecListMentors.pageInfo.hasMore ?? false;\n const userId = currentUser?.id;\n const alreadyMentor = Boolean(userId && mentors.some((m) => m.userId === userId));\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return mentors;\n return mentors.filter(\n (m) =>\n m.headline.toLowerCase().includes(q) ||\n m.expertise.some((skill) => skill.toLowerCase().includes(q))\n );\n }, [mentors, search]);\n\n const accepting = mentors.filter((m) => m.isAcceptingMentees).length;\n const totalSessions = mentors.reduce((s, m) => s + m.sessionsCount, 0);\n const rated = mentors.filter((m) => m.ratingAvg > 0);\n const avgRating = rated.length\n ? (rated.reduce((s, m) => s + m.ratingAvg, 0) / rated.length).toFixed(1)\n : '—';\n\n return (\n <PageLayout\n hero\n title=\"Find a Mentor\"\n description=\"Connect with experienced builders for 1:1 guidance, code review, and career coaching.\"\n actions={\n <Button variant=\"outline\" onClick={() => navigate('/mentorship/sessions-page')}>\n <MessageSquare size={16} /> My sessions\n </Button>\n }\n >\n {alreadyMentor ? (\n <GlassCard className=\"mb-6 flex items-center gap-3 p-4\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-status-success-bg-subtle text-status-success-text\">\n <Award size={20} />\n </span>\n <div>\n <div className=\"text-sm font-semibold text-text-primary\">You're a mentor</div>\n <div className=\"text-xs text-text-secondary\">\n Your mentor profile is live. Mentees can request sessions with you.\n </div>\n </div>\n </GlassCard>\n ) : showForm ? (\n <BecomeMentorForm\n onClose={() => setShowForm(false)}\n onDone={() => {\n setShowForm(false);\n void refetch();\n }}\n />\n ) : null}\n\n <div className=\"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <StatCard label=\"Mentors\" value={mentors.length} icon={Users} tone=\"blue\" />\n <StatCard label=\"Accepting mentees\" value={accepting} icon={Sparkles} tone=\"green\" />\n <StatCard label=\"Avg rating\" value={avgRating} icon={Star} tone=\"amber\" />\n <StatCard label=\"Total sessions\" value={totalSessions} icon={MessageSquare} tone=\"purple\" />\n </div>\n\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"relative w-full sm:w-80\">\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted\"\n size={16}\n />\n <Input\n className=\"pl-9\"\n placeholder=\"Search by headline or expertise…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n {!alreadyMentor && !showForm ? (\n <Button onClick={() => setShowForm(true)}>\n <UserPlus size={16} /> Become a mentor\n </Button>\n ) : null}\n </div>\n\n {loading && !mentors.length ? (\n <LoadingGrid />\n ) : error ? (\n <ErrorView title=\"Couldn't load mentors\" error={error} />\n ) : filtered.length === 0 ? (\n <EmptyView\n icon={<Users size={26} />}\n title={search ? 'No matching mentors' : 'No mentors yet'}\n description={\n search\n ? 'Try a different search term.'\n : 'Active mentors will appear here. TechnoSpam is pre-launch — be one of the first to sign up.'\n }\n action={\n !search && !alreadyMentor ? (\n <Button onClick={() => setShowForm(true)}>Become a mentor</Button>\n ) : undefined\n }\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((mentor) => (\n <MentorCard\n key={mentor.id}\n mentor={mentor}\n onOpen={() => navigate(`/mentorship/mentor-profile-page?id=${mentor.id}`)}\n />\n ))}\n </div>\n )}\n <LoadMore hasMore={hasMore} loading={loading} onClick={more} />\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MentorshipMentorsPagePage.js","names":[],"sources":["../../../src/technospam/pages/MentorshipMentorsPagePage.tsx"],"sourcesContent":["import { createElement, useMemo, useState } from 'react';\nimport { Award, MessageSquare, Search, Sparkles, Star, UserPlus, Users, X } from 'lucide-react';\nimport { Badge, Button, GlassCard, Input, Textarea } from '@burdenoff/fe-libs/ui';\nimport {\n EmptyView,\n ErrorView,\n LoadMore,\n LoadingGrid,\n PageLayout,\n StatCard,\n coverGradient,\n topicIcon,\n} from '../components';\nimport { useTechnoSpam, useTechnoSpamNavigate } from '../providers/TechnoSpamProvider';\nimport {\n pageArg,\n useBecomeMentor,\n useMentorsQuery,\n usePageLimit,\n type TecMentor,\n} from '../api/technospamApi';\nimport { formatMoney } from '../utils/format';\nimport { cn } from '../utils/cn';\nimport { notify } from '../lib/toast';\nimport { useTechnoSpamAnalytics } from '../hooks/useTechnoSpamAnalytics';\n\n/** Circular gradient medallion standing in for a mentor avatar, with a live\n * \"accepting\" presence dot — mirrors the directory mockup within the dark theme. */\nfunction MentorMedallion({ mentor, size = 'md' }: { mentor: TecMentor; size?: 'md' | 'lg' }) {\n const box = size === 'lg' ? 'h-20 w-20' : 'h-16 w-16';\n return (\n <div className=\"relative shrink-0\">\n <span\n className={cn(\n 'flex items-center justify-center rounded-full bg-gradient-to-br text-white shadow-md ring-1 ring-white/15',\n box,\n coverGradient(mentor.headline)\n )}\n >\n {createElement(topicIcon(mentor.expertise.join(' ') || mentor.headline), {\n size: size === 'lg' ? 32 : 26,\n strokeWidth: 1.7,\n })}\n </span>\n {mentor.isAcceptingMentees ? (\n <span className=\"absolute -bottom-0.5 -right-0.5 h-4 w-4 rounded-full border-2 border-bg-surface bg-status-success-text\" />\n ) : null}\n </div>\n );\n}\n\nfunction MentorCard({ mentor, onOpen }: { mentor: TecMentor; onOpen: () => void }) {\n return (\n <GlassCard\n className=\"group flex cursor-pointer flex-col gap-4 p-5 transition-all duration-200 hover:-translate-y-1 hover:shadow-lg\"\n onClick={onOpen}\n >\n <div className=\"flex items-start gap-4\">\n <MentorMedallion mentor={mentor} />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"truncate text-base font-semibold text-text-primary group-hover:text-accent-primary\">\n {mentor.headline}\n </h3>\n {mentor.isAcceptingMentees ? (\n <Badge\n variant=\"outline\"\n className=\"mt-1.5 inline-flex items-center gap-1.5 border-status-success-border bg-status-success-bg-subtle text-status-success-text\"\n >\n <span className=\"h-1.5 w-1.5 rounded-full bg-status-success-text\" /> Accepting mentees\n </Badge>\n ) : (\n <Badge\n variant=\"outline\"\n className=\"mt-1.5 border-border-seam bg-bg-sunken text-text-secondary\"\n >\n Not accepting\n </Badge>\n )}\n </div>\n </div>\n\n {mentor.bio ? <p className=\"line-clamp-2 text-sm text-text-secondary\">{mentor.bio}</p> : null}\n\n {mentor.expertise.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {mentor.expertise.slice(0, 4).map((skill) => (\n <Badge key={skill} variant=\"secondary\" className=\"text-[11px]\">\n {skill}\n </Badge>\n ))}\n {mentor.expertise.length > 4 ? (\n <span className=\"self-center text-xs text-text-muted\">\n +{mentor.expertise.length - 4}\n </span>\n ) : null}\n </div>\n ) : null}\n\n <div className=\"mt-auto grid grid-cols-3 divide-x divide-border-seam rounded-xl border border-border-seam bg-bg-sunken text-center\">\n <div className=\"px-2 py-2.5\">\n <div className=\"flex items-center justify-center gap-1 text-sm font-semibold text-text-primary\">\n <Star size={13} className=\"text-accent-teal\" />\n {mentor.ratingAvg > 0 ? mentor.ratingAvg.toFixed(1) : 'New'}\n </div>\n <div className=\"text-[11px] text-text-muted\">rating</div>\n </div>\n <div className=\"px-2 py-2.5\">\n <div className=\"text-sm font-semibold text-text-primary\">{mentor.sessionsCount}</div>\n <div className=\"text-[11px] text-text-muted\">sessions</div>\n </div>\n <div className=\"px-2 py-2.5\">\n <div className=\"text-sm font-semibold text-text-primary\">\n {formatMoney(mentor.hourlyRate, mentor.currency)}\n </div>\n <div className=\"text-[11px] text-text-muted\">/ hr</div>\n </div>\n </div>\n\n <Button\n className=\"w-full\"\n onClick={(e) => {\n e.stopPropagation();\n onOpen();\n }}\n >\n View profile\n </Button>\n </GlassCard>\n );\n}\n\nfunction BecomeMentorForm({\n onClose,\n onDone,\n workspaceId,\n}: {\n onClose: () => void;\n onDone: () => void;\n workspaceId?: string;\n}) {\n const [headline, setHeadline] = useState('');\n const [bio, setBio] = useState('');\n const [expertise, setExpertise] = useState('');\n const [hourlyRate, setHourlyRate] = useState('');\n const [currency, setCurrency] = useState('USD');\n const [becomeMentor, { loading }] = useBecomeMentor();\n const { emit } = useTechnoSpamAnalytics();\n\n const canSubmit = headline.trim().length > 0 && !loading;\n\n const handleSubmit = async () => {\n if (!canSubmit) return;\n const input: {\n headline: string;\n bio?: string;\n expertise?: string[];\n hourlyRate?: number;\n currency?: string;\n } = { headline: headline.trim() };\n if (bio.trim()) input.bio = bio.trim();\n const exp = expertise\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n if (exp.length) input.expertise = exp;\n const rate = Number.parseInt(hourlyRate, 10);\n if (!Number.isNaN(rate) && rate >= 0) input.hourlyRate = rate;\n if (currency.trim()) input.currency = currency.trim().toUpperCase();\n\n emit('technospam.mentor.become_mentor_clicked', { workspaceId });\n const res = await becomeMentor({ variables: { input } });\n if (res.data?.tecBecomeMentor) {\n emit('technospam.mentor.became_mentor', {\n workspaceId,\n entityId: res.data.tecBecomeMentor.id,\n entityType: 'TEC_MENTOR',\n });\n notify.success('Mentor profile created', 'Your profile is pending review.');\n onDone();\n }\n };\n\n return (\n <GlassCard className=\"mb-6 p-5\">\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-accent-primary to-accent-indigo text-white shadow-sm\">\n <UserPlus size={20} />\n </span>\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">Become a mentor</h2>\n <p className=\"text-sm text-text-secondary\">\n Share your expertise and start mentoring builders in the community.\n </p>\n </div>\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} aria-label=\"Close\">\n <X size={16} />\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4\">\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Headline <span className=\"text-status-error-text\">*</span>\n </label>\n <Input\n placeholder=\"e.g. Staff Engineer · Distributed systems & career growth\"\n value={headline}\n onChange={(e) => setHeadline(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">Bio</label>\n <Textarea\n rows={3}\n placeholder=\"Tell mentees about your experience and how you can help.\"\n value={bio}\n onChange={(e) => setBio(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">Expertise</label>\n <Input\n placeholder=\"React, System design, Career coaching\"\n value={expertise}\n onChange={(e) => setExpertise(e.target.value)}\n />\n <p className=\"mt-1 text-xs text-text-muted\">Comma-separated topics.</p>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Hourly rate\n </label>\n <Input\n type=\"number\"\n min={0}\n placeholder=\"0\"\n value={hourlyRate}\n onChange={(e) => setHourlyRate(e.target.value)}\n />\n <p className=\"mt-1 text-xs text-text-muted\">Whole number. Leave 0 for free.</p>\n </div>\n <div>\n <label className=\"mb-1.5 block text-sm font-medium text-text-primary\">Currency</label>\n <Input\n placeholder=\"USD\"\n value={currency}\n onChange={(e) => setCurrency(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button onClick={handleSubmit} disabled={!canSubmit}>\n <UserPlus size={16} /> {loading ? 'Submitting…' : 'Submit profile'}\n </Button>\n <Button variant=\"outline\" onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n </div>\n </div>\n </GlassCard>\n );\n}\n\nexport function MentorshipMentorsPagePage() {\n const navigate = useTechnoSpamNavigate();\n const { currentUser, workspaceId } = useTechnoSpam();\n const { emit } = useTechnoSpamAnalytics();\n const [search, setSearch] = useState('');\n const [showForm, setShowForm] = useState(false);\n\n const { limit, more } = usePageLimit();\n const { data, loading, error, refetch } = useMentorsQuery({\n status: 'ACTIVE',\n pagination: pageArg(limit),\n });\n\n const mentors = data?.tecListMentors.items ?? [];\n const hasMore = data?.tecListMentors.pageInfo.hasMore ?? false;\n const userId = currentUser?.id;\n const alreadyMentor = Boolean(userId && mentors.some((m) => m.userId === userId));\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return mentors;\n return mentors.filter(\n (m) =>\n m.headline.toLowerCase().includes(q) ||\n m.expertise.some((skill) => skill.toLowerCase().includes(q))\n );\n }, [mentors, search]);\n\n const accepting = mentors.filter((m) => m.isAcceptingMentees).length;\n const totalSessions = mentors.reduce((s, m) => s + m.sessionsCount, 0);\n const rated = mentors.filter((m) => m.ratingAvg > 0);\n const avgRating = rated.length\n ? (rated.reduce((s, m) => s + m.ratingAvg, 0) / rated.length).toFixed(1)\n : '—';\n\n return (\n <PageLayout\n hero\n title=\"Find a Mentor\"\n description=\"Connect with experienced builders for 1:1 guidance, code review, and career coaching.\"\n actions={\n <Button variant=\"outline\" onClick={() => navigate('/mentorship/sessions-page')}>\n <MessageSquare size={16} /> My sessions\n </Button>\n }\n >\n {alreadyMentor ? (\n <GlassCard className=\"mb-6 flex items-center gap-3 p-4\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-status-success-bg-subtle text-status-success-text\">\n <Award size={20} />\n </span>\n <div>\n <div className=\"text-sm font-semibold text-text-primary\">You're a mentor</div>\n <div className=\"text-xs text-text-secondary\">\n Your mentor profile is live. Mentees can request sessions with you.\n </div>\n </div>\n </GlassCard>\n ) : showForm ? (\n <BecomeMentorForm\n onClose={() => setShowForm(false)}\n onDone={() => {\n setShowForm(false);\n void refetch();\n }}\n workspaceId={workspaceId}\n />\n ) : null}\n\n <div className=\"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <StatCard label=\"Mentors\" value={mentors.length} icon={Users} tone=\"blue\" />\n <StatCard label=\"Accepting mentees\" value={accepting} icon={Sparkles} tone=\"green\" />\n <StatCard label=\"Avg rating\" value={avgRating} icon={Star} tone=\"amber\" />\n <StatCard label=\"Total sessions\" value={totalSessions} icon={MessageSquare} tone=\"purple\" />\n </div>\n\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"relative w-full sm:w-80\">\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted\"\n size={16}\n />\n <Input\n className=\"pl-9\"\n placeholder=\"Search by headline or expertise…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n </div>\n {!alreadyMentor && !showForm ? (\n <Button onClick={() => setShowForm(true)}>\n <UserPlus size={16} /> Become a mentor\n </Button>\n ) : null}\n </div>\n\n {loading && !mentors.length ? (\n <LoadingGrid />\n ) : error ? (\n <ErrorView title=\"Couldn't load mentors\" error={error} />\n ) : filtered.length === 0 ? (\n <EmptyView\n icon={<Users size={26} />}\n title={search ? 'No matching mentors' : 'No mentors yet'}\n description={\n search\n ? 'Try a different search term.'\n : 'Active mentors will appear here. TechnoSpam is pre-launch — be one of the first to sign up.'\n }\n action={\n !search && !alreadyMentor ? (\n <Button onClick={() => setShowForm(true)}>Become a mentor</Button>\n ) : undefined\n }\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((mentor) => (\n <MentorCard\n key={mentor.id}\n mentor={mentor}\n onOpen={() => {\n emit('technospam.mentor.viewed', {\n workspaceId,\n entityId: mentor.id,\n entityType: 'TEC_MENTOR',\n });\n navigate(`/mentorship/mentor-profile-page?id=${mentor.id}`);\n }}\n />\n ))}\n </div>\n )}\n <LoadMore hasMore={hasMore} loading={loading} onClick={more} />\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentorshipSessionsPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/MentorshipSessionsPagePage.tsx"],"names":[],"mappings":"AAkPA,wBAAgB,0BAA0B,gCAwLzC"}
|