@burdenoff/microfe-eventfullymanaged 2026.825.1 → 2026.827.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eventfullymanaged/lib/format.d.ts +9 -0
- package/dist/eventfullymanaged/lib/format.d.ts.map +1 -1
- package/dist/eventfullymanaged/lib/format.js +11 -3
- package/dist/eventfullymanaged/lib/format.js.map +1 -1
- package/dist/eventfullymanaged/pages/events/EventDetailPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/events/EventDetailPage.js +294 -269
- package/dist/eventfullymanaged/pages/events/EventDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/events/SessionFormPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/events/SessionFormPage.js +91 -81
- package/dist/eventfullymanaged/pages/events/SessionFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +120 -102
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +128 -120
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.d.ts.map +1 -1
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js +68 -75
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js +41 -41
- package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkingPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/NetworkingPage.tsx"],"sourcesContent":["import {\n CalendarDays,\n CalendarPlus,\n Clock,\n Heart,\n MapPin,\n Megaphone,\n MessagesSquare,\n Sparkles,\n UserPlus,\n Users,\n Wand2,\n} from 'lucide-react';\nimport { ContextConversationWidget } from '@burdenoff/fe-libs/shared';\nimport { useRegisterPageConversationContext } from '@burdenoff/fe-libs/shared/providers/shell';\nimport {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState, type ReactNode } from 'react';\n\nimport {\n useAttendeesQuery,\n useDeleteMeetingMutation,\n useEventsQuery,\n useGenerateNetworkingMatchesMutation,\n useMeetingsQuery,\n useNetworkingMatchesQuery,\n useNetworkingProfilesQuery,\n} from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination, type UsePaginationResult } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\nconst COLUMN_PAGE_SIZE = 8;\nconst LOOKUP_FETCH = 200;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['active', 'published', 'live', 'confirmed', 'completed', 'approved', 'public'].includes(value)) {\n return 'success';\n }\n if (['inactive', 'cancelled', 'archived', 'closed', 'expired', 'private'].includes(value)) {\n return 'warning';\n }\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) {\n return 'info';\n }\n return 'secondary';\n}\n\nfunction initials(label: string): string {\n const parts = label.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return '?';\n }\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction readString(metadata: Record<string, unknown> | null | undefined, key: string): string | null {\n const value = metadata?.[key];\n return typeof value === 'string' && value.trim() ? value : null;\n}\n\nfunction formatMeetingTime(startIso: string | null, endIso: string | null): string | null {\n if (!startIso) {\n return null;\n }\n const start = new Date(startIso);\n if (Number.isNaN(start.getTime())) {\n return null;\n }\n const startLabel = start.toLocaleString([], {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n if (endIso) {\n const end = new Date(endIso);\n if (!Number.isNaN(end.getTime())) {\n return `${startLabel} – ${end.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' })}`;\n }\n }\n return startLabel;\n}\n\nfunction InterestTags({ items }: { items: string[] }) {\n if (items.length === 0) {\n return null;\n }\n return (\n <div className=\"flex flex-wrap gap-1.5\">\n {items.slice(0, 4).map((item) => (\n <span key={item} className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {item}\n </span>\n ))}\n </div>\n );\n}\n\nfunction Avatar({ label }: { label: string }) {\n return (\n <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-accent-primary/10 text-sm font-semibold text-accent-primary ring-2 ring-bg-surface\"\n aria-hidden=\"true\"\n >\n {initials(label)}\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Column shell\n// ---------------------------------------------------------------------------\n\ninterface ColumnProps {\n icon: ReactNode;\n heading: string;\n loading: boolean;\n total: number;\n loadedCount: number;\n pagination: UsePaginationResult;\n itemLabel: string;\n empty: ReactNode;\n children: ReactNode;\n}\n\nfunction Column({ icon, heading, loading, total, loadedCount, pagination, itemLabel, empty, children }: ColumnProps) {\n return (\n <GlassCard treatment=\"plain\" className=\"flex flex-col border-border-seam p-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-accent-primary\">{icon}</span>\n <h2 className=\"text-base font-semibold text-text-primary\">{heading}</h2>\n <span className=\"ml-auto rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium tabular-nums text-text-secondary\">\n {loading ? '…' : total.toLocaleString()}\n </span>\n </div>\n <ScrollArea className=\"mt-3 max-h-[30rem] pr-2\">\n <div className=\"space-y-3\">{loadedCount === 0 ? empty : children}</div>\n </ScrollArea>\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={loadedCount}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel={itemLabel}\n loading={loading}\n />\n </GlassCard>\n );\n}\n\n/**\n * Registration payload for the networking lounge conversation context.\n *\n * MUST be a stable (module-level) reference. `useRegisterPageConversationContext`\n * keys its effect on this object's identity; passing a fresh inline object on\n * every render makes the effect re-run each render, which toggles state on the\n * shared PageConversationContextProvider (an ancestor of this MFE's <Routes> in\n * the app shell). That perpetual re-render loop races client-side navigations\n * dispatched from this page, so links like \"Opt in a profile\" / \"Book a meeting\"\n * changed the URL but never re-matched the create route. Keeping the reference\n * constant lets the effect settle after the first run.\n */\nconst NETWORKING_LOUNGE_CONTEXT = {\n entityType: 'EVENTFULLYMANAGED_NETWORKING_LOUNGE',\n entityId: 'general',\n contextTitle: 'Networking Lounge',\n};\n\n/**\n * Shared networking lounge chat, backed by wspace-conversations-svc. Scoped by a\n * stable networking entity so every organizer/attendee on this workspace lands in\n * the same thread.\n */\nfunction NetworkingLounge() {\n useRegisterPageConversationContext(NETWORKING_LOUNGE_CONTEXT);\n return <ContextConversationWidget widgetKey=\"networking-lounge\" />;\n}\n\nexport default function NetworkingPage() {\n const { navigate } = useEventfullyManaged();\n\n const profilesPagination = usePagination({ pageSize: COLUMN_PAGE_SIZE });\n const matchesPagination = usePagination({ pageSize: COLUMN_PAGE_SIZE });\n const meetingsPagination = usePagination({ pageSize: COLUMN_PAGE_SIZE });\n\n const profilesQuery = useNetworkingProfilesQuery({\n limit: profilesPagination.limit,\n offset: profilesPagination.offset,\n });\n const matchesQuery = useNetworkingMatchesQuery({\n limit: matchesPagination.limit,\n offset: matchesPagination.offset,\n });\n const meetingsQuery = useMeetingsQuery({\n limit: meetingsPagination.limit,\n offset: meetingsPagination.offset,\n });\n // Broad lookups so we can resolve attendee names + profile→attendee links for\n // the match cards without paging through every list.\n const { data: attendeesData } = useAttendeesQuery({ limit: LOOKUP_FETCH, offset: 0 });\n const { data: allProfilesData } = useNetworkingProfilesQuery({ limit: LOOKUP_FETCH, offset: 0 });\n\n const [deleteMeeting] = useDeleteMeetingMutation();\n\n // BOFF-4321 — deterministic matchmaking engine. Generation is scoped to\n // one event at a time (organizer picks which event to run it for);\n // profiles/matches themselves are workspace-wide in this page.\n const { data: eventsData } = useEventsQuery({ limit: 100, offset: 0 });\n const events = useMemo(() => eventsData?.events?.items ?? [], [eventsData]);\n const [generateEventId, setGenerateEventId] = useState('');\n const [generateNetworkingMatches, { loading: generating }] = useGenerateNetworkingMatchesMutation();\n\n const onGenerateMatches = async () => {\n if (!generateEventId) {\n notify.error('Pick an event first', 'Choose which event to generate matches for.');\n return;\n }\n try {\n const response = await generateNetworkingMatches({ variables: { eventId: generateEventId } });\n if (response.error) {\n notify.error('Could not generate matches', response.error.message);\n return;\n }\n const total = response.data?.generateNetworkingMatches.total ?? 0;\n if (total === 0) {\n notify.info(\n 'No matches yet',\n 'This event needs at least 5 opted-in networking profiles before matches can be generated.'\n );\n return;\n }\n notify.success('Matches generated', `Found ${total} suggested connection${total === 1 ? '' : 's'}.`);\n await matchesQuery.refetch();\n } catch (error) {\n notify.error('Could not generate matches', describeError(error));\n }\n };\n\n const attendees = useMemo(() => attendeesData?.attendees?.items ?? [], [attendeesData]);\n const attendeeById = useMemo(() => {\n const map = new Map<string, { name: string; role?: string | null; company?: string | null }>();\n for (const a of attendees) {\n map.set(a.id, { name: a.fullName, role: a.role, company: a.company });\n }\n return map;\n }, [attendees]);\n\n // profileId → attendee display name (for resolving match participants).\n const profileNameById = useMemo(() => {\n const map = new Map<string, string>();\n for (const p of allProfilesData?.networkingProfiles?.items ?? []) {\n const attendee = attendeeById.get(p.attendeeId);\n map.set(p.id, attendee?.name ?? p.role ?? `Profile ${p.id.slice(0, 6)}`);\n }\n return map;\n }, [allProfilesData, attendeeById]);\n\n const profiles = useMemo(() => profilesQuery.data?.networkingProfiles.items ?? [], [profilesQuery.data]);\n const matches = useMemo(() => matchesQuery.data?.networkingMatches.items ?? [], [matchesQuery.data]);\n const meetings = useMemo(() => meetingsQuery.data?.meetings.items ?? [], [meetingsQuery.data]);\n\n const onDeleteMeeting = async (id: string, title: string) => {\n try {\n const response = await deleteMeeting({ variables: { id } });\n const deleted = response.data?.deleteMeeting === true;\n if (!mutationSucceeded(response, deleted ? id : undefined, 'Could not delete meeting')) {\n return;\n }\n notify.success('Meeting removed', `${title} was deleted.`);\n await meetingsQuery.refetch();\n } catch (error) {\n notify.error('Could not delete meeting', describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Networking turns attendees into connections. Profiles describe who each attendee is and what they are looking\n for, matches are the suggestions the engine makes between them, and meetings are the 1:1s they book. Opt an\n attendee in, review strong matches, and book meetings that mirror straight into the calendar.\n </PagePurpose>\n\n <EmphasisPanel className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Networking</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage profiles, matches and meeting schedules from live backend data.\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('/networking/profiles/create')}>\n <UserPlus className=\"h-4 w-4\" />\n Opt in a profile\n </Button>\n <Button type=\"button\" onClick={() => navigate('/networking/meetings/create')}>\n <CalendarPlus className=\"h-4 w-4\" />\n Book a meeting\n </Button>\n </div>\n </EmphasisPanel>\n\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-3 border-border-seam p-4 sm:flex-row sm:items-center\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 text-sm font-semibold text-text-primary\">\n <Wand2 className=\"h-4 w-4 text-accent-primary\" />\n Matchmaking engine\n </p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n Scores every opted-in profile pair at an event by shared interests and complementary asks. Needs at least 5\n opted-in profiles to run.\n </p>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center gap-2\">\n <Select value={generateEventId} onValueChange={setGenerateEventId}>\n <SelectTrigger aria-label=\"Event\" className=\"w-56\">\n <SelectValue placeholder=\"Select an event\" />\n </SelectTrigger>\n <SelectContent>\n {events.map((event) => (\n <SelectItem key={event.id} value={event.id}>\n {event.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button type=\"button\" onClick={onGenerateMatches} disabled={generating || !generateEventId}>\n <Wand2 className=\"h-4 w-4\" />\n {generating ? 'Generating…' : 'Generate matches'}\n </Button>\n </div>\n </GlassCard>\n\n <div className=\"flex flex-col gap-6 xl:flex-row\">\n {/* Three columns: Profiles / Matches / Meetings */}\n <div className=\"grid min-w-0 flex-1 grid-cols-1 gap-6 md:grid-cols-3\">\n {/* Profiles */}\n <Column\n icon={<Users className=\"h-4 w-4\" />}\n heading=\"Profiles\"\n loading={profilesQuery.loading}\n total={profilesQuery.data?.networkingProfiles.total ?? 0}\n loadedCount={profiles.length}\n pagination={profilesPagination}\n itemLabel=\"profiles\"\n empty={\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No profiles yet\"\n description=\"Opt an attendee in to start matchmaking.\"\n className=\"py-6\"\n />\n }\n >\n {profiles.map((profile) => {\n const attendee = attendeeById.get(profile.attendeeId);\n const name =\n attendee?.name ?? (profile.attendeeId ? `Attendee ${profile.attendeeId.slice(0, 6)}` : 'Profile');\n const subtitle = [profile.role ?? attendee?.role, profile.industry ?? attendee?.company]\n .filter(Boolean)\n .join(' • ');\n return (\n <div key={profile.id} className=\"rounded-card border border-border-seam bg-bg-surface p-3\">\n <div className=\"flex items-start gap-3\">\n <Avatar label={name} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-text-primary\">{name}</p>\n {subtitle ? <p className=\"truncate text-xs text-text-secondary\">{subtitle}</p> : null}\n </div>\n <ActionMenu\n ariaLabel={`${name} profile actions`}\n onEdit={() => navigate(`/networking/profiles/${profile.id}/edit`)}\n />\n </div>\n </div>\n </div>\n {profile.interests.length > 0 ? (\n <div className=\"mt-2.5\">\n <InterestTags items={profile.interests} />\n </div>\n ) : null}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3 w-full\"\n onClick={() => navigate('/networking/meetings/create')}\n >\n <CalendarPlus className=\"h-4 w-4\" />\n Book meeting\n </Button>\n </div>\n );\n })}\n </Column>\n\n {/* Suggested Matches */}\n <Column\n icon={<Sparkles className=\"h-4 w-4\" />}\n heading=\"Suggested Matches\"\n loading={matchesQuery.loading}\n total={matchesQuery.data?.networkingMatches.total ?? 0}\n loadedCount={matches.length}\n pagination={matchesPagination}\n itemLabel=\"matches\"\n empty={\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No matches yet\"\n description=\"Matches appear as the engine suggests connections.\"\n className=\"py-6\"\n />\n }\n >\n {matches.map((match) => {\n // BOFF-4321 — score/reason/sourceProfileId/targetProfileId are\n // now real typed fields (see event.gql EventfullyManagedNetworkingMatch),\n // not metadata the deterministic scorer stores separately.\n const sourceName = profileNameById.get(match.sourceProfileId);\n const targetName = profileNameById.get(match.targetProfileId);\n const label =\n sourceName && targetName ? `${sourceName} & ${targetName}` : `Match ${match.id.slice(0, 6)}`;\n return (\n <div key={match.id} className=\"rounded-card border border-border-seam bg-bg-surface p-3\">\n <div className=\"flex items-center justify-between gap-2\">\n {sourceName && targetName ? (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Avatar label={sourceName} />\n <span className=\"text-xs text-text-muted\">×</span>\n <Avatar label={targetName} />\n </div>\n ) : (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Avatar label={label} />\n <p className=\"truncate text-sm font-medium text-text-primary\">{label}</p>\n </div>\n )}\n <Badge variant=\"success\" className=\"shrink-0 gap-1\">\n <Heart className=\"h-3 w-3\" />\n {match.score}%\n </Badge>\n </div>\n\n {sourceName && targetName ? (\n <p className=\"mt-2 truncate text-xs text-text-secondary\">\n {sourceName} & {targetName}\n </p>\n ) : null}\n\n {match.reason ? (\n <p className=\"mt-2 line-clamp-2 text-xs text-text-secondary\">{match.reason}</p>\n ) : null}\n\n {match.status !== 'suggested' ? (\n <Badge variant={statusVariant(match.status)} className=\"mt-2 uppercase\">\n {match.status}\n </Badge>\n ) : null}\n\n <Button\n type=\"button\"\n size=\"sm\"\n className=\"mt-3 w-full\"\n onClick={() => {\n document.getElementById('networking-lounge')?.scrollIntoView({ behavior: 'smooth' });\n }}\n >\n <MessagesSquare className=\"h-4 w-4\" />\n Connect & Chat\n </Button>\n </div>\n );\n })}\n </Column>\n\n {/* Meetings */}\n <Column\n icon={<CalendarDays className=\"h-4 w-4\" />}\n heading=\"Meetings\"\n loading={meetingsQuery.loading}\n total={meetingsQuery.data?.meetings.total ?? 0}\n loadedCount={meetings.length}\n pagination={meetingsPagination}\n itemLabel=\"meetings\"\n empty={\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No meetings yet\"\n description=\"Booked 1:1s show up here with their time and place.\"\n className=\"py-6\"\n />\n }\n >\n {meetings.map((meeting) => {\n const title = meeting.title ?? meeting.name ?? `Meeting ${meeting.id.slice(0, 6)}`;\n const time = formatMeetingTime(\n readString(meeting.metadata, 'startsAt'),\n readString(meeting.metadata, 'endsAt')\n );\n const location = readString(meeting.metadata, 'location');\n return (\n <div\n key={meeting.id}\n className=\"rounded-card border-l-2 border-l-accent-primary bg-bg-surface p-3 pl-3.5 shadow-elevation-1\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n {time ? (\n <p className=\"flex items-center gap-1.5 text-xs font-medium text-text-secondary\">\n <Clock className=\"h-3.5 w-3.5\" />\n {time}\n </p>\n ) : null}\n <p className=\"mt-1 truncate font-medium text-text-primary\">{title}</p>\n </div>\n <ActionMenu\n ariaLabel={`${title} meeting actions`}\n entityName={title}\n onEdit={() => navigate(`/networking/meetings/${meeting.id}/edit`)}\n onDelete={() => onDeleteMeeting(meeting.id, title)}\n />\n </div>\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n {meeting.status ? (\n <Badge variant={statusVariant(meeting.status)} className=\"uppercase\">\n {meeting.status}\n </Badge>\n ) : null}\n {location ? (\n <span className=\"inline-flex items-center gap-1 text-xs text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5\" />\n {location}\n </span>\n ) : null}\n </div>\n </div>\n );\n })}\n </Column>\n </div>\n\n {/* Docked Networking Lounge */}\n <div id=\"networking-lounge\" className=\"w-full xl:w-[360px] xl:shrink-0\">\n <div className=\"space-y-3\">\n <div>\n <h2 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <MessagesSquare className=\"h-5 w-5 text-accent-primary\" />\n Networking Lounge\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n A shared space for attendees and organizers to connect, backed by the conversations service.\n </p>\n </div>\n <NetworkingLounge />\n </div>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"eventfullymanaged-networking\"\n title=\"Make networking land\"\n steps={[\n {\n id: 'grow-attendees',\n label: 'Bring in more attendees',\n description: 'More registered attendees means richer matches and meetings.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('/registration'),\n },\n {\n id: 'announce-networking',\n label: 'Announce networking sessions',\n description: 'Let attendees know how and when to connect.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n {\n id: 'review-event',\n label: 'Review the event schedule',\n description: 'Make sure networking slots fit around your sessions.',\n icon: <CalendarDays className=\"h-4 w-4\" />,\n onClick: () => navigate('/events'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NetworkingPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/NetworkingPage.tsx"],"sourcesContent":["import {\n CalendarDays,\n CalendarPlus,\n Clock,\n Heart,\n MapPin,\n Megaphone,\n MessagesSquare,\n Sparkles,\n UserPlus,\n Users,\n Wand2,\n} from 'lucide-react';\nimport { ContextConversationWidget } from '@burdenoff/fe-libs/shared';\nimport { useRegisterPageConversationContext } from '@burdenoff/fe-libs/shared/providers/shell';\nimport {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState, type ReactNode } from 'react';\n\nimport {\n useAttendeesQuery,\n useDeleteMeetingMutation,\n useEventsQuery,\n useGenerateNetworkingMatchesMutation,\n useMeetingsQuery,\n useNetworkingMatchesQuery,\n useNetworkingProfilesQuery,\n} from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination, type UsePaginationResult } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\nconst COLUMN_PAGE_SIZE = 8;\nconst LOOKUP_FETCH = 200;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['active', 'published', 'live', 'confirmed', 'completed', 'approved', 'public'].includes(value)) {\n return 'success';\n }\n if (['inactive', 'cancelled', 'archived', 'closed', 'expired', 'private'].includes(value)) {\n return 'warning';\n }\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) {\n return 'info';\n }\n return 'secondary';\n}\n\nfunction initials(label: string): string {\n const parts = label.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return '?';\n }\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction readString(metadata: Record<string, unknown> | null | undefined, key: string): string | null {\n const value = metadata?.[key];\n return typeof value === 'string' && value.trim() ? value : null;\n}\n\nfunction formatMeetingTime(startIso: string | null, endIso: string | null): string | null {\n if (!startIso) {\n return null;\n }\n const start = new Date(startIso);\n if (Number.isNaN(start.getTime())) {\n return null;\n }\n const startLabel = start.toLocaleString([], {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n if (endIso) {\n const end = new Date(endIso);\n if (!Number.isNaN(end.getTime())) {\n return `${startLabel} – ${end.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' })}`;\n }\n }\n return startLabel;\n}\n\nfunction InterestTags({ items }: { items: string[] }) {\n if (items.length === 0) {\n return null;\n }\n return (\n <div className=\"flex flex-wrap gap-1.5\">\n {items.slice(0, 4).map((item) => (\n <span key={item} className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {item}\n </span>\n ))}\n </div>\n );\n}\n\nfunction Avatar({ label }: { label: string }) {\n return (\n <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-accent-primary/10 text-sm font-semibold text-accent-primary ring-2 ring-bg-surface\"\n aria-hidden=\"true\"\n >\n {initials(label)}\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Column shell\n// ---------------------------------------------------------------------------\n\ninterface ColumnProps {\n icon: ReactNode;\n heading: string;\n loading: boolean;\n total: number;\n loadedCount: number;\n pagination: UsePaginationResult;\n itemLabel: string;\n empty: ReactNode;\n children: ReactNode;\n}\n\nfunction Column({ icon, heading, loading, total, loadedCount, pagination, itemLabel, empty, children }: ColumnProps) {\n return (\n <GlassCard treatment=\"plain\" className=\"flex flex-col border-border-seam p-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-accent-primary\">{icon}</span>\n <h2 className=\"text-base font-semibold text-text-primary\">{heading}</h2>\n <span className=\"ml-auto rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium tabular-nums text-text-secondary\">\n {loading ? '…' : total.toLocaleString()}\n </span>\n </div>\n <ScrollArea className=\"mt-3 max-h-[30rem] pr-2\">\n <div className=\"space-y-3\">{loadedCount === 0 ? empty : children}</div>\n </ScrollArea>\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={loadedCount}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel={itemLabel}\n loading={loading}\n />\n </GlassCard>\n );\n}\n\n/**\n * Registration payload for the networking lounge conversation context.\n *\n * MUST be a stable (module-level) reference. `useRegisterPageConversationContext`\n * keys its effect on this object's identity; passing a fresh inline object on\n * every render makes the effect re-run each render, which toggles state on the\n * shared PageConversationContextProvider (an ancestor of this MFE's <Routes> in\n * the app shell). That perpetual re-render loop races client-side navigations\n * dispatched from this page, so links like \"Opt in a profile\" / \"Book a meeting\"\n * changed the URL but never re-matched the create route. Keeping the reference\n * constant lets the effect settle after the first run.\n */\nconst NETWORKING_LOUNGE_CONTEXT = {\n entityType: 'EVENTFULLYMANAGED_NETWORKING_LOUNGE',\n entityId: 'general',\n contextTitle: 'Networking Lounge',\n};\n\n/**\n * Shared networking lounge chat, backed by wspace-conversations-svc. Scoped by a\n * stable networking entity so every organizer/attendee on this workspace lands in\n * the same thread.\n */\nfunction NetworkingLounge() {\n useRegisterPageConversationContext(NETWORKING_LOUNGE_CONTEXT);\n return <ContextConversationWidget widgetKey=\"networking-lounge\" />;\n}\n\nexport default function NetworkingPage() {\n const { navigate } = useEventfullyManaged();\n\n const profilesPagination = usePagination({ pageSize: COLUMN_PAGE_SIZE });\n const matchesPagination = usePagination({ pageSize: COLUMN_PAGE_SIZE });\n const meetingsPagination = usePagination({ pageSize: COLUMN_PAGE_SIZE });\n\n const profilesQuery = useNetworkingProfilesQuery({\n limit: profilesPagination.limit,\n offset: profilesPagination.offset,\n });\n const matchesQuery = useNetworkingMatchesQuery({\n limit: matchesPagination.limit,\n offset: matchesPagination.offset,\n });\n const meetingsQuery = useMeetingsQuery({\n limit: meetingsPagination.limit,\n offset: meetingsPagination.offset,\n });\n // Broad lookups so we can resolve attendee names + profile→attendee links for\n // the match cards without paging through every list.\n const { data: attendeesData } = useAttendeesQuery({ limit: LOOKUP_FETCH, offset: 0 });\n const { data: allProfilesData } = useNetworkingProfilesQuery({ limit: LOOKUP_FETCH, offset: 0 });\n\n const [deleteMeeting] = useDeleteMeetingMutation();\n\n // BOFF-4321 — deterministic matchmaking engine. Generation is scoped to\n // one event at a time (organizer picks which event to run it for);\n // profiles/matches themselves are workspace-wide in this page.\n const { data: eventsData } = useEventsQuery({ limit: 100, offset: 0 });\n const events = useMemo(() => eventsData?.events?.items ?? [], [eventsData]);\n const [generateEventId, setGenerateEventId] = useState('');\n const [generateNetworkingMatches, { loading: generating }] = useGenerateNetworkingMatchesMutation();\n\n const onGenerateMatches = async () => {\n if (!generateEventId) {\n notify.error('Pick an event first', 'Choose which event to generate matches for.');\n return;\n }\n try {\n const response = await generateNetworkingMatches({ variables: { eventId: generateEventId } });\n if (response.error) {\n notify.error('Could not generate matches', response.error.message);\n return;\n }\n const total = response.data?.generateNetworkingMatches.total ?? 0;\n if (total === 0) {\n notify.info(\n 'No matches yet',\n 'This event needs at least 5 opted-in networking profiles before matches can be generated.'\n );\n return;\n }\n notify.success('Matches generated', `Found ${total} suggested connection${total === 1 ? '' : 's'}.`);\n await matchesQuery.refetch();\n } catch (error) {\n notify.error('Could not generate matches', describeError(error));\n }\n };\n\n const attendees = useMemo(() => attendeesData?.attendees?.items ?? [], [attendeesData]);\n const attendeeById = useMemo(() => {\n const map = new Map<string, { name: string; role?: string | null; company?: string | null }>();\n for (const a of attendees) {\n map.set(a.id, { name: a.fullName, role: a.role, company: a.company });\n }\n return map;\n }, [attendees]);\n\n // profileId → attendee display name (for resolving match participants).\n const profileNameById = useMemo(() => {\n const map = new Map<string, string>();\n for (const p of allProfilesData?.networkingProfiles?.items ?? []) {\n const attendee = attendeeById.get(p.attendeeId);\n map.set(p.id, attendee?.name ?? p.role ?? `Profile ${p.id.slice(0, 6)}`);\n }\n return map;\n }, [allProfilesData, attendeeById]);\n\n const profiles = useMemo(() => profilesQuery.data?.networkingProfiles.items ?? [], [profilesQuery.data]);\n const matches = useMemo(() => matchesQuery.data?.networkingMatches.items ?? [], [matchesQuery.data]);\n const meetings = useMemo(() => meetingsQuery.data?.meetings.items ?? [], [meetingsQuery.data]);\n\n const onDeleteMeeting = async (id: string, title: string) => {\n try {\n const response = await deleteMeeting({ variables: { id } });\n const deleted = response.data?.deleteMeeting === true;\n if (!mutationSucceeded(response, deleted ? id : undefined, 'Could not delete meeting')) {\n return;\n }\n notify.success('Meeting removed', `${title} was deleted.`);\n await meetingsQuery.refetch();\n } catch (error) {\n notify.error('Could not delete meeting', describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Networking turns attendees into connections. Profiles describe who each attendee is and what they are looking\n for, matches are the suggestions the engine makes between them, and meetings are the 1:1s they book. Opt an\n attendee in, review strong matches, and book meetings that mirror straight into the calendar.\n </PagePurpose>\n\n <EmphasisPanel className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Networking</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage profiles, matches and meeting schedules from live backend data.\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('/networking/profiles/create')}>\n <UserPlus className=\"h-4 w-4\" />\n Opt in a profile\n </Button>\n <Button type=\"button\" onClick={() => navigate('/networking/meetings/create')}>\n <CalendarPlus className=\"h-4 w-4\" />\n Book a meeting\n </Button>\n </div>\n </EmphasisPanel>\n\n <GlassCard treatment=\"plain\" className=\"flex flex-col gap-3 border-border-seam p-4 sm:flex-row sm:items-center\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 text-sm font-semibold text-text-primary\">\n <Wand2 className=\"h-4 w-4 text-accent-primary\" />\n Matchmaking engine\n </p>\n <p className=\"mt-0.5 text-xs text-text-secondary\">\n Scores every opted-in profile pair at an event by shared interests and complementary asks. Needs at least 5\n opted-in profiles to run.\n </p>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center gap-2\">\n <Select value={generateEventId} onValueChange={setGenerateEventId}>\n <SelectTrigger aria-label=\"Event\" className=\"w-56\">\n <SelectValue placeholder=\"Select an event\" />\n </SelectTrigger>\n <SelectContent>\n {events.map((event) => (\n <SelectItem key={event.id} value={event.id}>\n {event.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button type=\"button\" onClick={onGenerateMatches} disabled={generating || !generateEventId}>\n <Wand2 className=\"h-4 w-4\" />\n {generating ? 'Generating…' : 'Generate matches'}\n </Button>\n </div>\n </GlassCard>\n\n <div className=\"flex flex-col gap-6 xl:flex-row\">\n {/* Three columns: Profiles / Matches / Meetings */}\n <div className=\"grid min-w-0 flex-1 grid-cols-1 gap-6 md:grid-cols-3\">\n {/* Profiles */}\n <Column\n icon={<Users className=\"h-4 w-4\" />}\n heading=\"Profiles\"\n loading={profilesQuery.loading}\n total={profilesQuery.data?.networkingProfiles.total ?? 0}\n loadedCount={profiles.length}\n pagination={profilesPagination}\n itemLabel=\"profiles\"\n empty={\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No profiles yet\"\n description=\"Opt an attendee in to start matchmaking.\"\n className=\"py-6\"\n />\n }\n >\n {profiles.map((profile) => {\n const attendee = attendeeById.get(profile.attendeeId);\n const name =\n attendee?.name ?? (profile.attendeeId ? `Attendee ${profile.attendeeId.slice(0, 6)}` : 'Profile');\n const subtitle = [profile.role ?? attendee?.role, profile.industry ?? attendee?.company]\n .filter(Boolean)\n .join(' • ');\n return (\n <div key={profile.id} className=\"rounded-card border border-border-seam bg-bg-surface p-3\">\n <div className=\"flex items-start gap-3\">\n <Avatar label={name} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-text-primary\">{name}</p>\n {subtitle ? <p className=\"truncate text-xs text-text-secondary\">{subtitle}</p> : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {profile.visibility ? (\n <Badge variant={statusVariant(profile.visibility)} className=\"capitalize\">\n {profile.visibility.toLowerCase()}\n </Badge>\n ) : null}\n <ActionMenu\n ariaLabel={`${name} profile actions`}\n onEdit={() => navigate(`/networking/profiles/${profile.id}/edit`)}\n />\n </div>\n </div>\n </div>\n </div>\n {profile.interests.length > 0 ? (\n <div className=\"mt-2.5\">\n <InterestTags items={profile.interests} />\n </div>\n ) : null}\n {profile.lookingFor.length > 0 ? (\n <p className=\"mt-2 text-xs text-text-secondary\">\n <span className=\"font-medium text-text-muted\">Looking for:</span> {profile.lookingFor.join(', ')}\n </p>\n ) : null}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3 w-full\"\n onClick={() => navigate('/networking/meetings/create')}\n >\n <CalendarPlus className=\"h-4 w-4\" />\n Book meeting\n </Button>\n </div>\n );\n })}\n </Column>\n\n {/* Suggested Matches */}\n <Column\n icon={<Sparkles className=\"h-4 w-4\" />}\n heading=\"Suggested Matches\"\n loading={matchesQuery.loading}\n total={matchesQuery.data?.networkingMatches.total ?? 0}\n loadedCount={matches.length}\n pagination={matchesPagination}\n itemLabel=\"matches\"\n empty={\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No matches yet\"\n description=\"Matches appear as the engine suggests connections.\"\n className=\"py-6\"\n />\n }\n >\n {matches.map((match) => {\n // BOFF-4321 — score/reason/sourceProfileId/targetProfileId are\n // now real typed fields (see event.gql EventfullyManagedNetworkingMatch),\n // not metadata the deterministic scorer stores separately.\n const sourceName = profileNameById.get(match.sourceProfileId);\n const targetName = profileNameById.get(match.targetProfileId);\n const label =\n sourceName && targetName ? `${sourceName} & ${targetName}` : `Match ${match.id.slice(0, 6)}`;\n return (\n <div key={match.id} className=\"rounded-card border border-border-seam bg-bg-surface p-3\">\n <div className=\"flex items-center justify-between gap-2\">\n {sourceName && targetName ? (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Avatar label={sourceName} />\n <span className=\"text-xs text-text-muted\">×</span>\n <Avatar label={targetName} />\n </div>\n ) : (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Avatar label={label} />\n <p className=\"truncate text-sm font-medium text-text-primary\">{label}</p>\n </div>\n )}\n <Badge variant=\"success\" className=\"shrink-0 gap-1\">\n <Heart className=\"h-3 w-3\" />\n {match.score}%\n </Badge>\n </div>\n\n {sourceName && targetName ? (\n <p className=\"mt-2 truncate text-xs text-text-secondary\">\n {sourceName} & {targetName}\n </p>\n ) : null}\n\n {match.reason ? (\n <p className=\"mt-2 line-clamp-2 text-xs text-text-secondary\">{match.reason}</p>\n ) : null}\n\n {match.status !== 'suggested' ? (\n <Badge variant={statusVariant(match.status)} className=\"mt-2 uppercase\">\n {match.status}\n </Badge>\n ) : null}\n\n <Button\n type=\"button\"\n size=\"sm\"\n className=\"mt-3 w-full\"\n onClick={() => {\n document.getElementById('networking-lounge')?.scrollIntoView({ behavior: 'smooth' });\n }}\n >\n <MessagesSquare className=\"h-4 w-4\" />\n Connect & Chat\n </Button>\n </div>\n );\n })}\n </Column>\n\n {/* Meetings */}\n <Column\n icon={<CalendarDays className=\"h-4 w-4\" />}\n heading=\"Meetings\"\n loading={meetingsQuery.loading}\n total={meetingsQuery.data?.meetings.total ?? 0}\n loadedCount={meetings.length}\n pagination={meetingsPagination}\n itemLabel=\"meetings\"\n empty={\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No meetings yet\"\n description=\"Booked 1:1s show up here with their time and place.\"\n className=\"py-6\"\n />\n }\n >\n {meetings.map((meeting) => {\n const title = meeting.title ?? meeting.name ?? `Meeting ${meeting.id.slice(0, 6)}`;\n const time = formatMeetingTime(\n readString(meeting.metadata, 'startsAt'),\n readString(meeting.metadata, 'endsAt')\n );\n const location = readString(meeting.metadata, 'location');\n return (\n <div\n key={meeting.id}\n className=\"rounded-card border-l-2 border-l-accent-primary bg-bg-surface p-3 pl-3.5 shadow-elevation-1\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n {time ? (\n <p className=\"flex items-center gap-1.5 text-xs font-medium text-text-secondary\">\n <Clock className=\"h-3.5 w-3.5\" />\n {time}\n </p>\n ) : null}\n <p className=\"mt-1 truncate font-medium text-text-primary\">{title}</p>\n </div>\n <ActionMenu\n ariaLabel={`${title} meeting actions`}\n entityName={title}\n onEdit={() => navigate(`/networking/meetings/${meeting.id}/edit`)}\n onDelete={() => onDeleteMeeting(meeting.id, title)}\n />\n </div>\n <div className=\"mt-2 flex flex-wrap items-center gap-2\">\n {meeting.status ? (\n <Badge variant={statusVariant(meeting.status)} className=\"uppercase\">\n {meeting.status}\n </Badge>\n ) : null}\n {location ? (\n <span className=\"inline-flex items-center gap-1 text-xs text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5\" />\n {location}\n </span>\n ) : null}\n </div>\n </div>\n );\n })}\n </Column>\n </div>\n\n {/* Docked Networking Lounge */}\n <div id=\"networking-lounge\" className=\"w-full xl:w-[360px] xl:shrink-0\">\n <div className=\"space-y-3\">\n <div>\n <h2 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <MessagesSquare className=\"h-5 w-5 text-accent-primary\" />\n Networking Lounge\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n A shared space for attendees and organizers to connect, backed by the conversations service.\n </p>\n </div>\n <NetworkingLounge />\n </div>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"eventfullymanaged-networking\"\n title=\"Make networking land\"\n steps={[\n {\n id: 'grow-attendees',\n label: 'Bring in more attendees',\n description: 'More registered attendees means richer matches and meetings.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('/registration'),\n },\n {\n id: 'announce-networking',\n label: 'Announce networking sessions',\n description: 'Let attendees know how and when to connect.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n {\n id: 'review-event',\n label: 'Review the event schedule',\n description: 'Make sure networking slots fit around your sessions.',\n icon: <CalendarDays className=\"h-4 w-4\" />,\n onClick: () => navigate('/events'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegistrationPage.d.ts","sourceRoot":"","sources":["../../../../src/eventfullymanaged/pages/modules/RegistrationPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RegistrationPage.d.ts","sourceRoot":"","sources":["../../../../src/eventfullymanaged/pages/modules/RegistrationPage.tsx"],"names":[],"mappings":"AA6lBA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CAuEvC"}
|