@burdenoff/microfe-eventfullymanaged 2026.703.1 → 2026.703.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.
@@ -143,7 +143,6 @@ var i = (e) => {
143
143
  phone
144
144
  company
145
145
  role
146
- tags
147
146
  metadata
148
147
  }
149
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"eventApi.js","names":[],"sources":["../../../src/eventfullymanaged/api/eventApi.ts"],"sourcesContent":["import { gql, type ErrorLike } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\n\nimport { notify } from '../lib/toast';\n\n/**\n * Shared mutation error sink. The gateway client runs with `errorPolicy: 'all'`,\n * so in-band GraphQL errors also invoke `onError`; wiring this on every write\n * mutation guarantees a failure is always surfaced to the user even if a caller\n * forgets to inspect the resolved result.\n */\nconst onMutationError = (error: ErrorLike): void => {\n notify.error('Something went wrong', error.message || 'Please try again.');\n};\n\ntype DashboardSummaryResponse = {\n dashboardSummary: {\n totalEvents: number;\n activeEvents: number;\n totalRegistrations: number;\n totalAttendees: number;\n totalVenues: number;\n totalSponsors: number;\n upcomingSessions: number;\n };\n};\n\nexport type EventGql = {\n id: string;\n name: string;\n};\n\nexport type VenueGql = {\n id: string;\n workspaceId: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n status: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type FloorPlanGql = {\n id: string;\n venueId: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n interactiveAreas?: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type TicketTypeGql = {\n id: string;\n eventId: string;\n name: string;\n description?: string | null;\n price: string;\n currency: string;\n capacity?: number | null;\n soldCount: number;\n salesStartAt?: string | null;\n salesEndAt?: string | null;\n isActive: boolean;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type PromoCodeGql = {\n id: string;\n eventId: string;\n code: string;\n description?: string | null;\n discountType: string;\n discountValue: string;\n maxUses?: number | null;\n usedCount: number;\n startsAt?: string | null;\n endsAt?: string | null;\n isActive: boolean;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type ExhibitorGql = {\n id: string;\n eventId: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n status: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type LeadGql = {\n id: string;\n eventId: string;\n sponsorId?: string | null;\n exhibitorId?: string | null;\n attendeeName: string;\n attendeeEmail: string;\n score?: number | null;\n status: string;\n notes?: string | null;\n capturedAt: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type CheckInRecordGql = {\n id: string;\n eventId: string;\n stationId?: string | null;\n attendeeId?: string | null;\n registrationId?: string | null;\n method: string;\n status: string;\n direction: string;\n recordedAt: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type NetworkingProfileGql = {\n id: string;\n eventId: string;\n attendeeId: string;\n interests: string[];\n lookingFor: string[];\n industry?: string | null;\n role?: string | null;\n visibility: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type SponsorGql = {\n id: string;\n eventId: string;\n name: string;\n level: string;\n logoUrl?: string | null;\n website?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n contactPhone?: string | null;\n metrics?: { value?: number; leads?: number } | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype EventsResponse = { events: { total: number; items: EventGql[] } };\ntype VenuesResponse = { venues: { total: number; items: VenueGql[] } };\ntype VenueResponse = { venue: VenueGql | null; floorPlans: { total: number; items: FloorPlanGql[] } };\ntype SponsorsResponse = { sponsors: { total: number; items: SponsorGql[] } };\ntype CreateVenueResponse = { createVenue: VenueGql };\ntype UpdateVenueResponse = { updateVenue: VenueGql };\ntype CreateSponsorResponse = { createSponsor: SponsorGql };\ntype UpdateSponsorResponse = { updateSponsor: SponsorGql };\ntype CreateFloorPlanResponse = { createFloorPlan: FloorPlanGql };\ntype UpdateFloorPlanResponse = { updateFloorPlan: FloorPlanGql };\ntype TicketTypesResponse = { ticketTypes: { total: number; items: TicketTypeGql[] } };\ntype PromoCodesResponse = { promoCodes: { total: number; items: PromoCodeGql[] } };\ntype ExhibitorsResponse = { exhibitors: { total: number; items: ExhibitorGql[] } };\ntype LeadsResponse = { leads: { total: number; items: LeadGql[] } };\ntype CheckInRecordsResponse = { checkInRecords: { total: number; items: CheckInRecordGql[] } };\ntype NetworkingProfilesResponse = { networkingProfiles: { total: number; items: NetworkingProfileGql[] } };\ntype RegistrationsResponse = { registrations: { total: number; items: Array<Record<string, unknown>> } };\ntype AttendeesResponse = { attendees: { total: number; items: Array<Record<string, unknown>> } };\ntype EventSessionsResponse = { eventSessions: { total: number; items: Array<Record<string, unknown>> } };\ntype SpeakersResponse = { speakers: { total: number; items: Array<Record<string, unknown>> } };\ntype SimpleEntity = {\n id: string;\n workspaceId: string;\n eventId?: string | null;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n metadata?: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n};\ntype SimpleEntityResponse = { total: number; items: SimpleEntity[] };\ntype CheckInStationsResponse = { checkInStations: SimpleEntityResponse };\ntype NetworkingMatchesResponse = { networkingMatches: SimpleEntityResponse };\ntype MeetingsResponse = { meetings: SimpleEntityResponse };\ntype AnnouncementsResponse = { announcements: SimpleEntityResponse };\ntype WorkflowTemplatesResponse = { workflowTemplates: SimpleEntityResponse };\ntype AutomationRulesResponse = { automationRules: SimpleEntityResponse };\ntype CommunicationCampaignsResponse = { communicationCampaigns: SimpleEntityResponse };\ntype AnalyticsSnapshotsResponse = { analyticsSnapshots: SimpleEntityResponse };\ntype UpsertSimpleEntityResponse = { [key: string]: SimpleEntity };\n\nexport const DASHBOARD_SUMMARY_QUERY = gql`\n query EventfullymanagedDashboardSummary {\n dashboardSummary: eventfullyManagedDashboardSummary {\n totalEvents\n activeEvents\n totalRegistrations\n totalAttendees\n totalVenues\n totalSponsors\n upcomingSessions\n }\n }\n`;\n\nexport const EVENTS_QUERY = gql`\n query EventfullymanagedEvents($search: String, $limit: Int, $offset: Int) {\n events: eventfullyManagedEvents(search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n name\n description\n type\n status\n timezone\n startAt\n endAt\n visibility\n capacity\n metadata\n }\n }\n }\n`;\n\nexport const VENUES_QUERY = gql`\n query EventfullymanagedVenues($search: String, $limit: Int, $offset: Int) {\n venues: eventfullyManagedVenues(search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n name\n description\n addressLine1\n city\n state\n country\n postalCode\n capacity\n amenities\n pricing\n openingHours\n status\n metadata\n }\n }\n }\n`;\n\nexport const VENUE_QUERY = gql`\n query EventfullymanagedVenue($id: ID!) {\n venue: eventfullyManagedVenue(id: $id) {\n id\n workspaceId\n name\n description\n addressLine1\n city\n state\n country\n postalCode\n capacity\n amenities\n pricing\n openingHours\n status\n metadata\n createdAt\n updatedAt\n }\n floorPlans: eventfullyManagedFloorPlans(venueId: $id, limit: 100, offset: 0) {\n total\n items {\n id\n name\n imageUrl\n dimensions\n interactiveAreas\n createdAt\n }\n }\n }\n`;\n\nexport const SPONSORS_QUERY = gql`\n query EventfullymanagedSponsors($search: String, $limit: Int, $offset: Int) {\n sponsors: eventfullyManagedSponsors(search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n name\n level\n logoUrl\n website\n contactName\n contactEmail\n contactPhone\n metrics\n metadata\n createdAt\n }\n }\n }\n`;\n\nexport const REGISTRATIONS_QUERY = gql`\n query EventfullymanagedRegistrations($eventId: ID, $limit: Int, $offset: Int) {\n registrations: eventfullyManagedRegistrations(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n attendeeId\n ticketTypeId\n status\n quantity\n totalAmount\n currency\n registeredAt\n checkedInAt\n }\n }\n }\n`;\n\nexport const ATTENDEES_QUERY = gql`\n query EventfullymanagedAttendees($eventId: ID, $limit: Int, $offset: Int) {\n attendees: eventfullyManagedAttendees(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n fullName\n email\n phone\n company\n role\n tags\n metadata\n }\n }\n }\n`;\n\nexport const EVENT_SESSIONS_QUERY = gql`\n query EventfullymanagedEventSessions($eventId: ID, $limit: Int, $offset: Int) {\n eventSessions: eventfullyManagedEventSessions(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n venueId\n title\n sessionType\n track\n startsAt\n endsAt\n status\n }\n }\n }\n`;\n\nexport const SPEAKERS_QUERY = gql`\n query EventfullymanagedSpeakers($limit: Int, $offset: Int) {\n speakers: eventfullyManagedSpeakers(limit: $limit, offset: $offset) {\n total\n items {\n id\n fullName\n title\n organization\n email\n }\n }\n }\n`;\n\nexport const TICKET_TYPES_QUERY = gql`\n query EventfullymanagedTicketTypes($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n ticketTypes: eventfullyManagedTicketTypes(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n name\n description\n price\n currency\n capacity\n soldCount\n salesStartAt\n salesEndAt\n isActive\n metadata\n }\n }\n }\n`;\n\nexport const PROMO_CODES_QUERY = gql`\n query EventfullymanagedPromoCodes($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n promoCodes: eventfullyManagedPromoCodes(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n code\n description\n discountType\n discountValue\n maxUses\n usedCount\n startsAt\n endsAt\n isActive\n metadata\n }\n }\n }\n`;\n\nexport const EXHIBITORS_QUERY = gql`\n query EventfullymanagedExhibitors($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n exhibitors: eventfullyManagedExhibitors(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n name\n boothCode\n category\n contactName\n contactEmail\n status\n metadata\n }\n }\n }\n`;\n\nexport const LEADS_QUERY = gql`\n query EventfullymanagedLeads($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n leads: eventfullyManagedLeads(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n sponsorId\n exhibitorId\n attendeeName\n attendeeEmail\n score\n status\n notes\n capturedAt\n metadata\n }\n }\n }\n`;\n\nexport const CHECKIN_RECORDS_QUERY = gql`\n query EventfullymanagedCheckInRecords($eventId: ID, $limit: Int, $offset: Int) {\n checkInRecords: eventfullyManagedCheckInRecords(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n stationId\n attendeeId\n registrationId\n method\n status\n direction\n recordedAt\n metadata\n }\n }\n }\n`;\n\nexport const NETWORKING_PROFILES_QUERY = gql`\n query EventfullymanagedNetworkingProfiles($eventId: ID, $limit: Int, $offset: Int) {\n networkingProfiles: eventfullyManagedNetworkingProfiles(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n attendeeId\n interests\n lookingFor\n industry\n role\n visibility\n metadata\n }\n }\n }\n`;\n\nexport const CHECKIN_STATIONS_QUERY = gql`\n query EventfullymanagedCheckInStations($eventId: ID, $limit: Int, $offset: Int) {\n checkInStations: eventfullyManagedCheckInStations(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const NETWORKING_MATCHES_QUERY = gql`\n query EventfullymanagedNetworkingMatches($eventId: ID, $limit: Int, $offset: Int) {\n networkingMatches: eventfullyManagedNetworkingMatches(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const MEETINGS_QUERY = gql`\n query EventfullymanagedMeetings($eventId: ID, $limit: Int, $offset: Int) {\n meetings: eventfullyManagedMeetings(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const ANNOUNCEMENTS_QUERY = gql`\n query EventfullymanagedAnnouncements($eventId: ID, $limit: Int, $offset: Int) {\n announcements: eventfullyManagedAnnouncements(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const WORKFLOW_TEMPLATES_QUERY = gql`\n query EventfullymanagedWorkflowTemplates($eventId: ID, $limit: Int, $offset: Int) {\n workflowTemplates: eventfullyManagedWorkflowTemplates(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const AUTOMATION_RULES_QUERY = gql`\n query EventfullymanagedAutomationRules($eventId: ID, $limit: Int, $offset: Int) {\n automationRules: eventfullyManagedAutomationRules(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const COMMUNICATION_CAMPAIGNS_QUERY = gql`\n query EventfullymanagedCommunicationCampaigns($eventId: ID, $limit: Int, $offset: Int) {\n communicationCampaigns: eventfullyManagedCommunicationCampaigns(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const ANALYTICS_SNAPSHOTS_QUERY = gql`\n query EventfullymanagedAnalyticsSnapshots($eventId: ID, $limit: Int, $offset: Int) {\n analyticsSnapshots: eventfullyManagedAnalyticsSnapshots(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const CREATE_VENUE_MUTATION = gql`\n mutation EventfullymanagedCreateVenue($input: EventfullyManagedVenueInput!) {\n createVenue: eventfullyManagedCreateVenue(input: $input) {\n id\n name\n description\n city\n state\n country\n capacity\n amenities\n status\n pricing\n openingHours\n metadata\n }\n }\n`;\n\nexport const UPDATE_VENUE_MUTATION = gql`\n mutation EventfullymanagedUpdateVenue($id: ID!, $input: EventfullyManagedVenueInput!) {\n updateVenue: eventfullyManagedUpdateVenue(id: $id, input: $input) {\n id\n name\n description\n city\n state\n country\n capacity\n amenities\n status\n pricing\n openingHours\n metadata\n }\n }\n`;\n\nexport const CREATE_SPONSOR_MUTATION = gql`\n mutation EventfullymanagedCreateSponsor($input: EventfullyManagedSponsorInput!) {\n createSponsor: eventfullyManagedCreateSponsor(input: $input) {\n id\n eventId\n name\n level\n logoUrl\n website\n contactName\n contactEmail\n contactPhone\n metrics\n metadata\n }\n }\n`;\n\nexport const UPDATE_SPONSOR_MUTATION = gql`\n mutation EventfullymanagedUpdateSponsor($id: ID!, $input: EventfullyManagedSponsorInput!) {\n updateSponsor: eventfullyManagedUpdateSponsor(id: $id, input: $input) {\n id\n eventId\n name\n level\n logoUrl\n website\n contactName\n contactEmail\n contactPhone\n metrics\n metadata\n }\n }\n`;\n\nexport const CREATE_FLOOR_PLAN_MUTATION = gql`\n mutation EventfullymanagedCreateFloorPlan($input: EventfullyManagedFloorPlanInput!) {\n createFloorPlan: eventfullyManagedCreateFloorPlan(input: $input) {\n id\n venueId\n name\n imageUrl\n dimensions\n interactiveAreas\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPDATE_FLOOR_PLAN_MUTATION = gql`\n mutation EventfullymanagedUpdateFloorPlan($id: ID!, $input: EventfullyManagedFloorPlanInput!) {\n updateFloorPlan: eventfullyManagedUpdateFloorPlan(id: $id, input: $input) {\n id\n venueId\n name\n imageUrl\n dimensions\n interactiveAreas\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const CREATE_EVENT_MUTATION = gql`\n mutation EventfullymanagedCreateEvent($input: EventfullyManagedEventInput!) {\n createEvent: eventfullyManagedCreateEvent(input: $input) {\n id\n name\n type\n status\n startAt\n endAt\n timezone\n visibility\n capacity\n metadata\n }\n }\n`;\n\nexport const UPDATE_EVENT_MUTATION = gql`\n mutation EventfullymanagedUpdateEvent($id: ID!, $input: EventfullyManagedEventInput!) {\n updateEvent: eventfullyManagedUpdateEvent(id: $id, input: $input) {\n id\n name\n type\n status\n startAt\n endAt\n timezone\n visibility\n capacity\n metadata\n }\n }\n`;\n\nexport const UPSERT_ANNOUNCEMENT_MUTATION = gql`\n mutation EventfullymanagedUpsertAnnouncement($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertAnnouncement: eventfullyManagedUpsertAnnouncement(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_WORKFLOW_TEMPLATE_MUTATION = gql`\n mutation EventfullymanagedUpsertWorkflowTemplate($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertWorkflowTemplate: eventfullyManagedUpsertWorkflowTemplate(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_AUTOMATION_RULE_MUTATION = gql`\n mutation EventfullymanagedUpsertAutomationRule($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertAutomationRule: eventfullyManagedUpsertAutomationRule(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_COMMUNICATION_CAMPAIGN_MUTATION = gql`\n mutation EventfullymanagedUpsertCommunicationCampaign($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertCommunicationCampaign: eventfullyManagedUpsertCommunicationCampaign(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_ANALYTICS_SNAPSHOT_MUTATION = gql`\n mutation EventfullymanagedUpsertAnalyticsSnapshot($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertAnalyticsSnapshot: eventfullyManagedUpsertAnalyticsSnapshot(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const useDashboardSummaryQuery = () => useQuery<DashboardSummaryResponse>(DASHBOARD_SUMMARY_QUERY);\nexport const useEventsQuery = (variables: { search?: string; limit?: number; offset?: number }) =>\n useQuery<EventsResponse, { search?: string; limit?: number; offset?: number }>(EVENTS_QUERY, { variables });\nexport const useVenuesQuery = (variables: { search?: string; limit?: number; offset?: number }) =>\n useQuery<VenuesResponse, { search?: string; limit?: number; offset?: number }>(VENUES_QUERY, { variables });\nexport const useVenueQuery = (id: string) =>\n useQuery<VenueResponse, { id: string }>(VENUE_QUERY, { variables: { id }, skip: !id });\nexport const useSponsorsQuery = (variables: { search?: string; limit?: number; offset?: number }) =>\n useQuery<SponsorsResponse, { search?: string; limit?: number; offset?: number }>(SPONSORS_QUERY, { variables });\nexport const useRegistrationsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<RegistrationsResponse, { eventId?: string; limit?: number; offset?: number }>(REGISTRATIONS_QUERY, {\n variables,\n });\nexport const useAttendeesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AttendeesResponse, { eventId?: string; limit?: number; offset?: number }>(ATTENDEES_QUERY, { variables });\nexport const useEventSessionsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<EventSessionsResponse, { eventId?: string; limit?: number; offset?: number }>(EVENT_SESSIONS_QUERY, {\n variables,\n });\nexport const useSpeakersQuery = (variables: { limit?: number; offset?: number }) =>\n useQuery<SpeakersResponse, { limit?: number; offset?: number }>(SPEAKERS_QUERY, { variables });\nexport const useTicketTypesQuery = (variables: {\n eventId?: string;\n search?: string;\n limit?: number;\n offset?: number;\n}) =>\n useQuery<TicketTypesResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(\n TICKET_TYPES_QUERY,\n {\n variables,\n }\n );\nexport const usePromoCodesQuery = (variables: { eventId?: string; search?: string; limit?: number; offset?: number }) =>\n useQuery<PromoCodesResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(\n PROMO_CODES_QUERY,\n {\n variables,\n }\n );\nexport const useExhibitorsQuery = (variables: { eventId?: string; search?: string; limit?: number; offset?: number }) =>\n useQuery<ExhibitorsResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(\n EXHIBITORS_QUERY,\n {\n variables,\n }\n );\nexport const useLeadsQuery = (variables: { eventId?: string; search?: string; limit?: number; offset?: number }) =>\n useQuery<LeadsResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(LEADS_QUERY, {\n variables,\n });\nexport const useCheckInStationsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<CheckInStationsResponse, { eventId?: string; limit?: number; offset?: number }>(CHECKIN_STATIONS_QUERY, {\n variables,\n });\nexport const useCheckInRecordsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<CheckInRecordsResponse, { eventId?: string; limit?: number; offset?: number }>(CHECKIN_RECORDS_QUERY, {\n variables,\n });\nexport const useNetworkingProfilesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<NetworkingProfilesResponse, { eventId?: string; limit?: number; offset?: number }>(\n NETWORKING_PROFILES_QUERY,\n {\n variables,\n }\n );\nexport const useNetworkingMatchesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<NetworkingMatchesResponse, { eventId?: string; limit?: number; offset?: number }>(NETWORKING_MATCHES_QUERY, {\n variables,\n });\nexport const useMeetingsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<MeetingsResponse, { eventId?: string; limit?: number; offset?: number }>(MEETINGS_QUERY, { variables });\nexport const useAnnouncementsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AnnouncementsResponse, { eventId?: string; limit?: number; offset?: number }>(ANNOUNCEMENTS_QUERY, {\n variables,\n });\nexport const useWorkflowTemplatesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<WorkflowTemplatesResponse, { eventId?: string; limit?: number; offset?: number }>(WORKFLOW_TEMPLATES_QUERY, {\n variables,\n });\nexport const useAutomationRulesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AutomationRulesResponse, { eventId?: string; limit?: number; offset?: number }>(AUTOMATION_RULES_QUERY, {\n variables,\n });\nexport const useCommunicationCampaignsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<CommunicationCampaignsResponse, { eventId?: string; limit?: number; offset?: number }>(\n COMMUNICATION_CAMPAIGNS_QUERY,\n {\n variables,\n }\n );\nexport const useAnalyticsSnapshotsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AnalyticsSnapshotsResponse, { eventId?: string; limit?: number; offset?: number }>(\n ANALYTICS_SNAPSHOTS_QUERY,\n {\n variables,\n }\n );\n\nexport const useCreateVenueMutation = () =>\n useMutation<CreateVenueResponse, { input: Record<string, unknown> }>(CREATE_VENUE_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: VENUES_QUERY }],\n });\nexport const useUpdateVenueMutation = () =>\n useMutation<UpdateVenueResponse, { id: string; input: Record<string, unknown> }>(UPDATE_VENUE_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: VENUES_QUERY }],\n });\nexport const useCreateSponsorMutation = () =>\n useMutation<CreateSponsorResponse, { input: Record<string, unknown> }>(CREATE_SPONSOR_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: SPONSORS_QUERY }],\n });\nexport const useUpdateSponsorMutation = () =>\n useMutation<UpdateSponsorResponse, { id: string; input: Record<string, unknown> }>(UPDATE_SPONSOR_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: SPONSORS_QUERY }],\n });\nexport const useCreateFloorPlanMutation = () =>\n useMutation<CreateFloorPlanResponse, { input: Record<string, unknown> }>(CREATE_FLOOR_PLAN_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n });\nexport const useUpdateFloorPlanMutation = () =>\n useMutation<UpdateFloorPlanResponse, { id: string; input: Record<string, unknown> }>(UPDATE_FLOOR_PLAN_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n });\nexport const useCreateEventMutation = () =>\n useMutation<{ createEvent: EventGql }, { input: Record<string, unknown> }>(CREATE_EVENT_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: EVENTS_QUERY }, { query: DASHBOARD_SUMMARY_QUERY }],\n });\nexport const useUpdateEventMutation = () =>\n useMutation<{ updateEvent: EventGql }, { id: string; input: Record<string, unknown> }>(UPDATE_EVENT_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: EVENTS_QUERY }, { query: DASHBOARD_SUMMARY_QUERY }],\n });\nexport const useUpsertAnnouncementMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_ANNOUNCEMENT_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: ANNOUNCEMENTS_QUERY }],\n }\n );\nexport const useUpsertWorkflowTemplateMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_WORKFLOW_TEMPLATE_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: WORKFLOW_TEMPLATES_QUERY }],\n }\n );\nexport const useUpsertAutomationRuleMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_AUTOMATION_RULE_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: AUTOMATION_RULES_QUERY }],\n }\n );\nexport const useUpsertCommunicationCampaignMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_COMMUNICATION_CAMPAIGN_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: COMMUNICATION_CAMPAIGNS_QUERY }],\n }\n );\nexport const useUpsertAnalyticsSnapshotMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_ANALYTICS_SNAPSHOT_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: ANALYTICS_SNAPSHOTS_QUERY }],\n }\n );\n"],"mappings":"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"}
1
+ {"version":3,"file":"eventApi.js","names":[],"sources":["../../../src/eventfullymanaged/api/eventApi.ts"],"sourcesContent":["import { gql, type ErrorLike } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\n\nimport { notify } from '../lib/toast';\n\n/**\n * Shared mutation error sink. The gateway client runs with `errorPolicy: 'all'`,\n * so in-band GraphQL errors also invoke `onError`; wiring this on every write\n * mutation guarantees a failure is always surfaced to the user even if a caller\n * forgets to inspect the resolved result.\n */\nconst onMutationError = (error: ErrorLike): void => {\n notify.error('Something went wrong', error.message || 'Please try again.');\n};\n\ntype DashboardSummaryResponse = {\n dashboardSummary: {\n totalEvents: number;\n activeEvents: number;\n totalRegistrations: number;\n totalAttendees: number;\n totalVenues: number;\n totalSponsors: number;\n upcomingSessions: number;\n };\n};\n\nexport type EventGql = {\n id: string;\n name: string;\n};\n\nexport type VenueGql = {\n id: string;\n workspaceId: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n status: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type FloorPlanGql = {\n id: string;\n venueId: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n interactiveAreas?: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n};\n\nexport type TicketTypeGql = {\n id: string;\n eventId: string;\n name: string;\n description?: string | null;\n price: string;\n currency: string;\n capacity?: number | null;\n soldCount: number;\n salesStartAt?: string | null;\n salesEndAt?: string | null;\n isActive: boolean;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type PromoCodeGql = {\n id: string;\n eventId: string;\n code: string;\n description?: string | null;\n discountType: string;\n discountValue: string;\n maxUses?: number | null;\n usedCount: number;\n startsAt?: string | null;\n endsAt?: string | null;\n isActive: boolean;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type ExhibitorGql = {\n id: string;\n eventId: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n status: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type LeadGql = {\n id: string;\n eventId: string;\n sponsorId?: string | null;\n exhibitorId?: string | null;\n attendeeName: string;\n attendeeEmail: string;\n score?: number | null;\n status: string;\n notes?: string | null;\n capturedAt: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type CheckInRecordGql = {\n id: string;\n eventId: string;\n stationId?: string | null;\n attendeeId?: string | null;\n registrationId?: string | null;\n method: string;\n status: string;\n direction: string;\n recordedAt: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type NetworkingProfileGql = {\n id: string;\n eventId: string;\n attendeeId: string;\n interests: string[];\n lookingFor: string[];\n industry?: string | null;\n role?: string | null;\n visibility: string;\n metadata?: Record<string, unknown> | null;\n};\n\nexport type SponsorGql = {\n id: string;\n eventId: string;\n name: string;\n level: string;\n logoUrl?: string | null;\n website?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n contactPhone?: string | null;\n metrics?: { value?: number; leads?: number } | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype EventsResponse = { events: { total: number; items: EventGql[] } };\ntype VenuesResponse = { venues: { total: number; items: VenueGql[] } };\ntype VenueResponse = { venue: VenueGql | null; floorPlans: { total: number; items: FloorPlanGql[] } };\ntype SponsorsResponse = { sponsors: { total: number; items: SponsorGql[] } };\ntype CreateVenueResponse = { createVenue: VenueGql };\ntype UpdateVenueResponse = { updateVenue: VenueGql };\ntype CreateSponsorResponse = { createSponsor: SponsorGql };\ntype UpdateSponsorResponse = { updateSponsor: SponsorGql };\ntype CreateFloorPlanResponse = { createFloorPlan: FloorPlanGql };\ntype UpdateFloorPlanResponse = { updateFloorPlan: FloorPlanGql };\ntype TicketTypesResponse = { ticketTypes: { total: number; items: TicketTypeGql[] } };\ntype PromoCodesResponse = { promoCodes: { total: number; items: PromoCodeGql[] } };\ntype ExhibitorsResponse = { exhibitors: { total: number; items: ExhibitorGql[] } };\ntype LeadsResponse = { leads: { total: number; items: LeadGql[] } };\ntype CheckInRecordsResponse = { checkInRecords: { total: number; items: CheckInRecordGql[] } };\ntype NetworkingProfilesResponse = { networkingProfiles: { total: number; items: NetworkingProfileGql[] } };\ntype RegistrationsResponse = { registrations: { total: number; items: Array<Record<string, unknown>> } };\ntype AttendeesResponse = { attendees: { total: number; items: Array<Record<string, unknown>> } };\ntype EventSessionsResponse = { eventSessions: { total: number; items: Array<Record<string, unknown>> } };\ntype SpeakersResponse = { speakers: { total: number; items: Array<Record<string, unknown>> } };\ntype SimpleEntity = {\n id: string;\n workspaceId: string;\n eventId?: string | null;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n metadata?: Record<string, unknown> | null;\n createdAt: string;\n updatedAt: string;\n};\ntype SimpleEntityResponse = { total: number; items: SimpleEntity[] };\ntype CheckInStationsResponse = { checkInStations: SimpleEntityResponse };\ntype NetworkingMatchesResponse = { networkingMatches: SimpleEntityResponse };\ntype MeetingsResponse = { meetings: SimpleEntityResponse };\ntype AnnouncementsResponse = { announcements: SimpleEntityResponse };\ntype WorkflowTemplatesResponse = { workflowTemplates: SimpleEntityResponse };\ntype AutomationRulesResponse = { automationRules: SimpleEntityResponse };\ntype CommunicationCampaignsResponse = { communicationCampaigns: SimpleEntityResponse };\ntype AnalyticsSnapshotsResponse = { analyticsSnapshots: SimpleEntityResponse };\ntype UpsertSimpleEntityResponse = { [key: string]: SimpleEntity };\n\nexport const DASHBOARD_SUMMARY_QUERY = gql`\n query EventfullymanagedDashboardSummary {\n dashboardSummary: eventfullyManagedDashboardSummary {\n totalEvents\n activeEvents\n totalRegistrations\n totalAttendees\n totalVenues\n totalSponsors\n upcomingSessions\n }\n }\n`;\n\nexport const EVENTS_QUERY = gql`\n query EventfullymanagedEvents($search: String, $limit: Int, $offset: Int) {\n events: eventfullyManagedEvents(search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n name\n description\n type\n status\n timezone\n startAt\n endAt\n visibility\n capacity\n metadata\n }\n }\n }\n`;\n\nexport const VENUES_QUERY = gql`\n query EventfullymanagedVenues($search: String, $limit: Int, $offset: Int) {\n venues: eventfullyManagedVenues(search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n name\n description\n addressLine1\n city\n state\n country\n postalCode\n capacity\n amenities\n pricing\n openingHours\n status\n metadata\n }\n }\n }\n`;\n\nexport const VENUE_QUERY = gql`\n query EventfullymanagedVenue($id: ID!) {\n venue: eventfullyManagedVenue(id: $id) {\n id\n workspaceId\n name\n description\n addressLine1\n city\n state\n country\n postalCode\n capacity\n amenities\n pricing\n openingHours\n status\n metadata\n createdAt\n updatedAt\n }\n floorPlans: eventfullyManagedFloorPlans(venueId: $id, limit: 100, offset: 0) {\n total\n items {\n id\n name\n imageUrl\n dimensions\n interactiveAreas\n createdAt\n }\n }\n }\n`;\n\nexport const SPONSORS_QUERY = gql`\n query EventfullymanagedSponsors($search: String, $limit: Int, $offset: Int) {\n sponsors: eventfullyManagedSponsors(search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n name\n level\n logoUrl\n website\n contactName\n contactEmail\n contactPhone\n metrics\n metadata\n createdAt\n }\n }\n }\n`;\n\nexport const REGISTRATIONS_QUERY = gql`\n query EventfullymanagedRegistrations($eventId: ID, $limit: Int, $offset: Int) {\n registrations: eventfullyManagedRegistrations(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n attendeeId\n ticketTypeId\n status\n quantity\n totalAmount\n currency\n registeredAt\n checkedInAt\n }\n }\n }\n`;\n\nexport const ATTENDEES_QUERY = gql`\n query EventfullymanagedAttendees($eventId: ID, $limit: Int, $offset: Int) {\n attendees: eventfullyManagedAttendees(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n fullName\n email\n phone\n company\n role\n metadata\n }\n }\n }\n`;\n\nexport const EVENT_SESSIONS_QUERY = gql`\n query EventfullymanagedEventSessions($eventId: ID, $limit: Int, $offset: Int) {\n eventSessions: eventfullyManagedEventSessions(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n venueId\n title\n sessionType\n track\n startsAt\n endsAt\n status\n }\n }\n }\n`;\n\nexport const SPEAKERS_QUERY = gql`\n query EventfullymanagedSpeakers($limit: Int, $offset: Int) {\n speakers: eventfullyManagedSpeakers(limit: $limit, offset: $offset) {\n total\n items {\n id\n fullName\n title\n organization\n email\n }\n }\n }\n`;\n\nexport const TICKET_TYPES_QUERY = gql`\n query EventfullymanagedTicketTypes($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n ticketTypes: eventfullyManagedTicketTypes(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n name\n description\n price\n currency\n capacity\n soldCount\n salesStartAt\n salesEndAt\n isActive\n metadata\n }\n }\n }\n`;\n\nexport const PROMO_CODES_QUERY = gql`\n query EventfullymanagedPromoCodes($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n promoCodes: eventfullyManagedPromoCodes(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n code\n description\n discountType\n discountValue\n maxUses\n usedCount\n startsAt\n endsAt\n isActive\n metadata\n }\n }\n }\n`;\n\nexport const EXHIBITORS_QUERY = gql`\n query EventfullymanagedExhibitors($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n exhibitors: eventfullyManagedExhibitors(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n name\n boothCode\n category\n contactName\n contactEmail\n status\n metadata\n }\n }\n }\n`;\n\nexport const LEADS_QUERY = gql`\n query EventfullymanagedLeads($eventId: ID, $search: String, $limit: Int, $offset: Int) {\n leads: eventfullyManagedLeads(eventId: $eventId, search: $search, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n sponsorId\n exhibitorId\n attendeeName\n attendeeEmail\n score\n status\n notes\n capturedAt\n metadata\n }\n }\n }\n`;\n\nexport const CHECKIN_RECORDS_QUERY = gql`\n query EventfullymanagedCheckInRecords($eventId: ID, $limit: Int, $offset: Int) {\n checkInRecords: eventfullyManagedCheckInRecords(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n stationId\n attendeeId\n registrationId\n method\n status\n direction\n recordedAt\n metadata\n }\n }\n }\n`;\n\nexport const NETWORKING_PROFILES_QUERY = gql`\n query EventfullymanagedNetworkingProfiles($eventId: ID, $limit: Int, $offset: Int) {\n networkingProfiles: eventfullyManagedNetworkingProfiles(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n eventId\n attendeeId\n interests\n lookingFor\n industry\n role\n visibility\n metadata\n }\n }\n }\n`;\n\nexport const CHECKIN_STATIONS_QUERY = gql`\n query EventfullymanagedCheckInStations($eventId: ID, $limit: Int, $offset: Int) {\n checkInStations: eventfullyManagedCheckInStations(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const NETWORKING_MATCHES_QUERY = gql`\n query EventfullymanagedNetworkingMatches($eventId: ID, $limit: Int, $offset: Int) {\n networkingMatches: eventfullyManagedNetworkingMatches(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const MEETINGS_QUERY = gql`\n query EventfullymanagedMeetings($eventId: ID, $limit: Int, $offset: Int) {\n meetings: eventfullyManagedMeetings(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const ANNOUNCEMENTS_QUERY = gql`\n query EventfullymanagedAnnouncements($eventId: ID, $limit: Int, $offset: Int) {\n announcements: eventfullyManagedAnnouncements(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const WORKFLOW_TEMPLATES_QUERY = gql`\n query EventfullymanagedWorkflowTemplates($eventId: ID, $limit: Int, $offset: Int) {\n workflowTemplates: eventfullyManagedWorkflowTemplates(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const AUTOMATION_RULES_QUERY = gql`\n query EventfullymanagedAutomationRules($eventId: ID, $limit: Int, $offset: Int) {\n automationRules: eventfullyManagedAutomationRules(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const COMMUNICATION_CAMPAIGNS_QUERY = gql`\n query EventfullymanagedCommunicationCampaigns($eventId: ID, $limit: Int, $offset: Int) {\n communicationCampaigns: eventfullyManagedCommunicationCampaigns(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const ANALYTICS_SNAPSHOTS_QUERY = gql`\n query EventfullymanagedAnalyticsSnapshots($eventId: ID, $limit: Int, $offset: Int) {\n analyticsSnapshots: eventfullyManagedAnalyticsSnapshots(eventId: $eventId, limit: $limit, offset: $offset) {\n total\n items {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n }\n`;\n\nexport const CREATE_VENUE_MUTATION = gql`\n mutation EventfullymanagedCreateVenue($input: EventfullyManagedVenueInput!) {\n createVenue: eventfullyManagedCreateVenue(input: $input) {\n id\n name\n description\n city\n state\n country\n capacity\n amenities\n status\n pricing\n openingHours\n metadata\n }\n }\n`;\n\nexport const UPDATE_VENUE_MUTATION = gql`\n mutation EventfullymanagedUpdateVenue($id: ID!, $input: EventfullyManagedVenueInput!) {\n updateVenue: eventfullyManagedUpdateVenue(id: $id, input: $input) {\n id\n name\n description\n city\n state\n country\n capacity\n amenities\n status\n pricing\n openingHours\n metadata\n }\n }\n`;\n\nexport const CREATE_SPONSOR_MUTATION = gql`\n mutation EventfullymanagedCreateSponsor($input: EventfullyManagedSponsorInput!) {\n createSponsor: eventfullyManagedCreateSponsor(input: $input) {\n id\n eventId\n name\n level\n logoUrl\n website\n contactName\n contactEmail\n contactPhone\n metrics\n metadata\n }\n }\n`;\n\nexport const UPDATE_SPONSOR_MUTATION = gql`\n mutation EventfullymanagedUpdateSponsor($id: ID!, $input: EventfullyManagedSponsorInput!) {\n updateSponsor: eventfullyManagedUpdateSponsor(id: $id, input: $input) {\n id\n eventId\n name\n level\n logoUrl\n website\n contactName\n contactEmail\n contactPhone\n metrics\n metadata\n }\n }\n`;\n\nexport const CREATE_FLOOR_PLAN_MUTATION = gql`\n mutation EventfullymanagedCreateFloorPlan($input: EventfullyManagedFloorPlanInput!) {\n createFloorPlan: eventfullyManagedCreateFloorPlan(input: $input) {\n id\n venueId\n name\n imageUrl\n dimensions\n interactiveAreas\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPDATE_FLOOR_PLAN_MUTATION = gql`\n mutation EventfullymanagedUpdateFloorPlan($id: ID!, $input: EventfullyManagedFloorPlanInput!) {\n updateFloorPlan: eventfullyManagedUpdateFloorPlan(id: $id, input: $input) {\n id\n venueId\n name\n imageUrl\n dimensions\n interactiveAreas\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const CREATE_EVENT_MUTATION = gql`\n mutation EventfullymanagedCreateEvent($input: EventfullyManagedEventInput!) {\n createEvent: eventfullyManagedCreateEvent(input: $input) {\n id\n name\n type\n status\n startAt\n endAt\n timezone\n visibility\n capacity\n metadata\n }\n }\n`;\n\nexport const UPDATE_EVENT_MUTATION = gql`\n mutation EventfullymanagedUpdateEvent($id: ID!, $input: EventfullyManagedEventInput!) {\n updateEvent: eventfullyManagedUpdateEvent(id: $id, input: $input) {\n id\n name\n type\n status\n startAt\n endAt\n timezone\n visibility\n capacity\n metadata\n }\n }\n`;\n\nexport const UPSERT_ANNOUNCEMENT_MUTATION = gql`\n mutation EventfullymanagedUpsertAnnouncement($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertAnnouncement: eventfullyManagedUpsertAnnouncement(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_WORKFLOW_TEMPLATE_MUTATION = gql`\n mutation EventfullymanagedUpsertWorkflowTemplate($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertWorkflowTemplate: eventfullyManagedUpsertWorkflowTemplate(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_AUTOMATION_RULE_MUTATION = gql`\n mutation EventfullymanagedUpsertAutomationRule($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertAutomationRule: eventfullyManagedUpsertAutomationRule(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_COMMUNICATION_CAMPAIGN_MUTATION = gql`\n mutation EventfullymanagedUpsertCommunicationCampaign($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertCommunicationCampaign: eventfullyManagedUpsertCommunicationCampaign(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPSERT_ANALYTICS_SNAPSHOT_MUTATION = gql`\n mutation EventfullymanagedUpsertAnalyticsSnapshot($id: ID, $input: EventfullyManagedSimpleEntityInput!) {\n upsertAnalyticsSnapshot: eventfullyManagedUpsertAnalyticsSnapshot(id: $id, input: $input) {\n id\n workspaceId\n eventId\n name\n title\n status\n metadata\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const useDashboardSummaryQuery = () => useQuery<DashboardSummaryResponse>(DASHBOARD_SUMMARY_QUERY);\nexport const useEventsQuery = (variables: { search?: string; limit?: number; offset?: number }) =>\n useQuery<EventsResponse, { search?: string; limit?: number; offset?: number }>(EVENTS_QUERY, { variables });\nexport const useVenuesQuery = (variables: { search?: string; limit?: number; offset?: number }) =>\n useQuery<VenuesResponse, { search?: string; limit?: number; offset?: number }>(VENUES_QUERY, { variables });\nexport const useVenueQuery = (id: string) =>\n useQuery<VenueResponse, { id: string }>(VENUE_QUERY, { variables: { id }, skip: !id });\nexport const useSponsorsQuery = (variables: { search?: string; limit?: number; offset?: number }) =>\n useQuery<SponsorsResponse, { search?: string; limit?: number; offset?: number }>(SPONSORS_QUERY, { variables });\nexport const useRegistrationsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<RegistrationsResponse, { eventId?: string; limit?: number; offset?: number }>(REGISTRATIONS_QUERY, {\n variables,\n });\nexport const useAttendeesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AttendeesResponse, { eventId?: string; limit?: number; offset?: number }>(ATTENDEES_QUERY, { variables });\nexport const useEventSessionsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<EventSessionsResponse, { eventId?: string; limit?: number; offset?: number }>(EVENT_SESSIONS_QUERY, {\n variables,\n });\nexport const useSpeakersQuery = (variables: { limit?: number; offset?: number }) =>\n useQuery<SpeakersResponse, { limit?: number; offset?: number }>(SPEAKERS_QUERY, { variables });\nexport const useTicketTypesQuery = (variables: {\n eventId?: string;\n search?: string;\n limit?: number;\n offset?: number;\n}) =>\n useQuery<TicketTypesResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(\n TICKET_TYPES_QUERY,\n {\n variables,\n }\n );\nexport const usePromoCodesQuery = (variables: { eventId?: string; search?: string; limit?: number; offset?: number }) =>\n useQuery<PromoCodesResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(\n PROMO_CODES_QUERY,\n {\n variables,\n }\n );\nexport const useExhibitorsQuery = (variables: { eventId?: string; search?: string; limit?: number; offset?: number }) =>\n useQuery<ExhibitorsResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(\n EXHIBITORS_QUERY,\n {\n variables,\n }\n );\nexport const useLeadsQuery = (variables: { eventId?: string; search?: string; limit?: number; offset?: number }) =>\n useQuery<LeadsResponse, { eventId?: string; search?: string; limit?: number; offset?: number }>(LEADS_QUERY, {\n variables,\n });\nexport const useCheckInStationsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<CheckInStationsResponse, { eventId?: string; limit?: number; offset?: number }>(CHECKIN_STATIONS_QUERY, {\n variables,\n });\nexport const useCheckInRecordsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<CheckInRecordsResponse, { eventId?: string; limit?: number; offset?: number }>(CHECKIN_RECORDS_QUERY, {\n variables,\n });\nexport const useNetworkingProfilesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<NetworkingProfilesResponse, { eventId?: string; limit?: number; offset?: number }>(\n NETWORKING_PROFILES_QUERY,\n {\n variables,\n }\n );\nexport const useNetworkingMatchesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<NetworkingMatchesResponse, { eventId?: string; limit?: number; offset?: number }>(NETWORKING_MATCHES_QUERY, {\n variables,\n });\nexport const useMeetingsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<MeetingsResponse, { eventId?: string; limit?: number; offset?: number }>(MEETINGS_QUERY, { variables });\nexport const useAnnouncementsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AnnouncementsResponse, { eventId?: string; limit?: number; offset?: number }>(ANNOUNCEMENTS_QUERY, {\n variables,\n });\nexport const useWorkflowTemplatesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<WorkflowTemplatesResponse, { eventId?: string; limit?: number; offset?: number }>(WORKFLOW_TEMPLATES_QUERY, {\n variables,\n });\nexport const useAutomationRulesQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AutomationRulesResponse, { eventId?: string; limit?: number; offset?: number }>(AUTOMATION_RULES_QUERY, {\n variables,\n });\nexport const useCommunicationCampaignsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<CommunicationCampaignsResponse, { eventId?: string; limit?: number; offset?: number }>(\n COMMUNICATION_CAMPAIGNS_QUERY,\n {\n variables,\n }\n );\nexport const useAnalyticsSnapshotsQuery = (variables: { eventId?: string; limit?: number; offset?: number }) =>\n useQuery<AnalyticsSnapshotsResponse, { eventId?: string; limit?: number; offset?: number }>(\n ANALYTICS_SNAPSHOTS_QUERY,\n {\n variables,\n }\n );\n\nexport const useCreateVenueMutation = () =>\n useMutation<CreateVenueResponse, { input: Record<string, unknown> }>(CREATE_VENUE_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: VENUES_QUERY }],\n });\nexport const useUpdateVenueMutation = () =>\n useMutation<UpdateVenueResponse, { id: string; input: Record<string, unknown> }>(UPDATE_VENUE_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: VENUES_QUERY }],\n });\nexport const useCreateSponsorMutation = () =>\n useMutation<CreateSponsorResponse, { input: Record<string, unknown> }>(CREATE_SPONSOR_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: SPONSORS_QUERY }],\n });\nexport const useUpdateSponsorMutation = () =>\n useMutation<UpdateSponsorResponse, { id: string; input: Record<string, unknown> }>(UPDATE_SPONSOR_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: SPONSORS_QUERY }],\n });\nexport const useCreateFloorPlanMutation = () =>\n useMutation<CreateFloorPlanResponse, { input: Record<string, unknown> }>(CREATE_FLOOR_PLAN_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n });\nexport const useUpdateFloorPlanMutation = () =>\n useMutation<UpdateFloorPlanResponse, { id: string; input: Record<string, unknown> }>(UPDATE_FLOOR_PLAN_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n });\nexport const useCreateEventMutation = () =>\n useMutation<{ createEvent: EventGql }, { input: Record<string, unknown> }>(CREATE_EVENT_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: EVENTS_QUERY }, { query: DASHBOARD_SUMMARY_QUERY }],\n });\nexport const useUpdateEventMutation = () =>\n useMutation<{ updateEvent: EventGql }, { id: string; input: Record<string, unknown> }>(UPDATE_EVENT_MUTATION, {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: EVENTS_QUERY }, { query: DASHBOARD_SUMMARY_QUERY }],\n });\nexport const useUpsertAnnouncementMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_ANNOUNCEMENT_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: ANNOUNCEMENTS_QUERY }],\n }\n );\nexport const useUpsertWorkflowTemplateMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_WORKFLOW_TEMPLATE_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: WORKFLOW_TEMPLATES_QUERY }],\n }\n );\nexport const useUpsertAutomationRuleMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_AUTOMATION_RULE_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: AUTOMATION_RULES_QUERY }],\n }\n );\nexport const useUpsertCommunicationCampaignMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_COMMUNICATION_CAMPAIGN_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: COMMUNICATION_CAMPAIGNS_QUERY }],\n }\n );\nexport const useUpsertAnalyticsSnapshotMutation = () =>\n useMutation<UpsertSimpleEntityResponse, { id?: string; input: Record<string, unknown> }>(\n UPSERT_ANALYTICS_SNAPSHOT_MUTATION,\n {\n errorPolicy: 'all',\n onError: onMutationError,\n refetchQueries: [{ query: ANALYTICS_SNAPSHOTS_QUERY }],\n }\n );\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import { EmphasisPanel, GradientText, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport { useCheckInRecordsQuery, useCheckInStationsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype StationRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function KioskPage() {\n const stationsQuery = useCheckInStationsQuery({ limit: 100, offset: 0 });\n const recordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const stations = useMemo(\n () => (stationsQuery.data?.checkInStations.items ?? []) as StationRow[],\n [stationsQuery.data]\n );\n const records = useMemo(() => recordsQuery.data?.checkInRecords.items ?? [], [recordsQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Kiosks are the front desk of your event. Each check-in station is a device or counter where attendees scan in,\n and check-in records are the live log of who arrived and when. Use this page to confirm your stations are\n online before doors open and to watch arrivals flow in on the day.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Kiosk</GradientText> &amp; Check-In\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">View configured check-in stations and station status.</p>\n </EmphasisPanel>\n\n <EntityListSection\n heading={stationsQuery.loading ? 'Loading check-in stations...' : `Stations (${stations.length})`}\n emptyLabel=\"No check-in stations configured yet.\"\n rows={stations.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Station ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={recordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${records.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={records.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAaA,SAAwB,IAAY;CAClC,IAAM,IAAgB,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAClE,IAAe,EAAuB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAChE,IAAW,QACR,EAAc,MAAM,gBAAgB,SAAS,EAAE,EACtD,CAAC,EAAc,KAAK,CACrB,EACK,IAAU,QAAc,EAAa,MAAM,eAAe,SAAS,EAAE,EAAE,CAAC,EAAa,KAAK,CAAC;AAEjG,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,+RAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,GAAD,EAAA,UAAc,SAAoB,CAAA,EAAA,cAC/B;OACL,kBAAC,KAAD;IAAG,WAAU;cAAmC;IAAyD,CAAA,CAC3F,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,iCAAiC,aAAa,EAAS,OAAO;IAC/F,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,WAAW,EAAI;KAC/C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,gCAAgC,qBAAqB,EAAQ,OAAO;IACpG,YAAW;IACX,MAAM,EAAQ,KAAK,OAAS;KAC1B,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,UAAU,EAAI;KACrE,UAAU,GAAG,EAAI,OAAO,KAAK,EAAI;KACjC,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import { EmphasisPanel, GradientText, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport { useCheckInRecordsQuery, useCheckInStationsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype StationRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function KioskPage() {\n const stationsQuery = useCheckInStationsQuery({ limit: 100, offset: 0 });\n const recordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const stations = useMemo(\n () => (stationsQuery.data?.checkInStations.items ?? []) as StationRow[],\n [stationsQuery.data]\n );\n const records = useMemo(() => recordsQuery.data?.checkInRecords.items ?? [], [recordsQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Kiosks are the front desk of your event. Each check-in station is a device or counter where attendees scan in,\n and check-in records are the live log of who arrived and when. Use this page to confirm your stations are online\n before doors open and to watch arrivals flow in on the day.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Kiosk</GradientText> &amp; Check-In\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">View configured check-in stations and station status.</p>\n </EmphasisPanel>\n\n <EntityListSection\n heading={stationsQuery.loading ? 'Loading check-in stations...' : `Stations (${stations.length})`}\n emptyLabel=\"No check-in stations configured yet.\"\n rows={stations.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Station ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={recordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${records.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={records.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAaA,SAAwB,IAAY;CAClC,IAAM,IAAgB,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAClE,IAAe,EAAuB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAChE,IAAW,QACR,EAAc,MAAM,gBAAgB,SAAS,EAAE,EACtD,CAAC,EAAc,KAAK,CACrB,EACK,IAAU,QAAc,EAAa,MAAM,eAAe,SAAS,EAAE,EAAE,CAAC,EAAa,KAAK,CAAC;AAEjG,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,+RAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,GAAD,EAAA,UAAc,SAAoB,CAAA,EAAA,cAC/B;OACL,kBAAC,KAAD;IAAG,WAAU;cAAmC;IAAyD,CAAA,CAC3F,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,iCAAiC,aAAa,EAAS,OAAO;IAC/F,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,WAAW,EAAI;KAC/C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,gCAAgC,qBAAqB,EAAQ,OAAO;IACpG,YAAW;IACX,MAAM,EAAQ,KAAK,OAAS;KAC1B,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,UAAU,EAAI;KACrE,UAAU,GAAG,EAAI,OAAO,KAAK,EAAI;KACjC,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GACE"}
@@ -1 +1 @@
1
- {"version":3,"file":"OperationsHubPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/OperationsHubPage.tsx"],"sourcesContent":["import { LayoutDashboard, Megaphone, Workflow } from 'lucide-react';\nimport { EmphasisPanel, GlassCard, GradientText, NextSteps, PagePurpose, ShowMore } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport {\n useExhibitorsQuery,\n useLeadsQuery,\n useCheckInRecordsQuery,\n useNetworkingProfilesQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n useAnalyticsSnapshotsQuery,\n useAnnouncementsQuery,\n useAutomationRulesQuery,\n useCommunicationCampaignsQuery,\n useDashboardSummaryQuery,\n useEventSessionsQuery,\n useRegistrationsQuery,\n useSponsorsQuery,\n useVenuesQuery,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SectionKey =\n | 'announcements'\n | 'campaigns'\n | 'templates'\n | 'rules'\n | 'snapshots'\n | 'registrations'\n | 'ticketTypes'\n | 'promoCodes'\n | 'sponsors'\n | 'exhibitors'\n | 'leads'\n | 'venues'\n | 'sessions'\n | 'checkInRecords'\n | 'networkingProfiles';\n\ninterface OperationsHubPageProps {\n title: string;\n description: string;\n sectionKeys: SectionKey[];\n}\n\ntype NamedEntity = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype RegistrationEntity = {\n id: string;\n attendeeId?: string | null;\n status?: string | null;\n totalAmount?: string | null;\n currency?: string | null;\n};\n\ntype SponsorEntity = {\n id: string;\n name: string;\n level: string;\n};\n\ntype VenueEntity = {\n id: string;\n name: string;\n city?: string | null;\n status: string;\n};\n\ntype SessionEntity = {\n id: string;\n title?: string | null;\n sessionType?: string | null;\n status?: string | null;\n};\n\ntype ExhibitorEntity = {\n id: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n status: string;\n};\n\ntype LeadEntity = {\n id: string;\n attendeeName: string;\n attendeeEmail: string;\n status: string;\n score?: number | null;\n};\n\nexport default function OperationsHubPage({ title, description, sectionKeys }: OperationsHubPageProps) {\n const { navigate } = useEventfullyManaged();\n const summaryQuery = useDashboardSummaryQuery();\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const snapshotsQuery = useAnalyticsSnapshotsQuery({ limit: 100, offset: 0 });\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const exhibitorsQuery = useExhibitorsQuery({ limit: 100, offset: 0 });\n const leadsQuery = useLeadsQuery({ limit: 100, offset: 0 });\n const venuesQuery = useVenuesQuery({ limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ limit: 100, offset: 0 });\n const checkInRecordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const networkingProfilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n\n const summary = summaryQuery.data?.dashboardSummary;\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationEntity[],\n [registrationsQuery.data]\n );\n\n const trackedRevenue = useMemo(\n () =>\n registrations.reduce((total, registration) => {\n const value = Number(registration.totalAmount ?? 0);\n return Number.isFinite(value) ? total + value : total;\n }, 0),\n [registrations]\n );\n\n const cards = [\n { label: 'Events', value: summary?.totalEvents ?? 0 },\n { label: 'Active', value: summary?.activeEvents ?? 0 },\n { label: 'Registrations', value: summary?.totalRegistrations ?? 0 },\n { label: 'Attendees', value: summary?.totalAttendees ?? 0 },\n { label: 'Venues', value: summary?.totalVenues ?? 0 },\n { label: 'Sponsors', value: summary?.totalSponsors ?? 0 },\n { label: 'Tracked Revenue', value: trackedRevenue.toFixed(2) },\n ];\n\n const renderSection = (sectionKey: SectionKey) => {\n if (sectionKey === 'announcements') {\n const rows = (announcementsQuery.data?.announcements.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={announcementsQuery.loading ? 'Loading announcements...' : `Announcements (${rows.length})`}\n emptyLabel=\"No announcements recorded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Announcement ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'campaigns') {\n const rows = (campaignsQuery.data?.communicationCampaigns.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaigns (${rows.length})`}\n emptyLabel=\"No communication campaigns available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Campaign ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'templates') {\n const rows = (templatesQuery.data?.workflowTemplates.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Workflow Templates (${rows.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'rules') {\n const rows = (rulesQuery.data?.automationRules.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading rules...' : `Automation Rules (${rows.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'snapshots') {\n const rows = (snapshotsQuery.data?.analyticsSnapshots.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={snapshotsQuery.loading ? 'Loading analytics snapshots...' : `Snapshots (${rows.length})`}\n emptyLabel=\"No analytics snapshots generated.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Snapshot ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'registrations') {\n return (\n <EntityListSection\n heading={registrationsQuery.loading ? 'Loading registrations...' : `Registrations (${registrations.length})`}\n emptyLabel=\"No registrations available.\"\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Registration ${row.id}`,\n subtitle: row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}`.trim() : undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'ticketTypes') {\n const rows = ticketTypesQuery.data?.ticketTypes.items ?? [];\n return (\n <EntityListSection\n heading={ticketTypesQuery.loading ? 'Loading ticket types...' : `Ticket Types (${rows.length})`}\n emptyLabel=\"No ticket types configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • Sold ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'promoCodes') {\n const rows = promoCodesQuery.data?.promoCodes.items ?? [];\n return (\n <EntityListSection\n heading={promoCodesQuery.loading ? 'Loading promo codes...' : `Promo Codes (${rows.length})`}\n emptyLabel=\"No promo codes configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.code,\n subtitle: `${row.discountType} ${row.discountValue}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'sponsors') {\n const rows = (sponsorsQuery.data?.sponsors.items ?? []) as SponsorEntity[];\n return (\n <EntityListSection\n heading={sponsorsQuery.loading ? 'Loading sponsors...' : `Sponsors (${rows.length})`}\n emptyLabel=\"No sponsors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.level,\n }))}\n />\n );\n }\n\n if (sectionKey === 'exhibitors') {\n const rows = (exhibitorsQuery.data?.exhibitors.items ?? []) as ExhibitorEntity[];\n return (\n <EntityListSection\n heading={exhibitorsQuery.loading ? 'Loading exhibitors...' : `Exhibitors (${rows.length})`}\n emptyLabel=\"No exhibitors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.boothCode, row.category].filter(Boolean).join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'leads') {\n const rows = (leadsQuery.data?.leads.items ?? []) as LeadEntity[];\n return (\n <EntityListSection\n heading={leadsQuery.loading ? 'Loading leads...' : `Leads (${rows.length})`}\n emptyLabel=\"No leads captured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeName,\n subtitle: [row.attendeeEmail, row.score != null ? `Score ${row.score}` : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'venues') {\n const rows = (venuesQuery.data?.venues.items ?? []) as VenueEntity[];\n return (\n <EntityListSection\n heading={venuesQuery.loading ? 'Loading venues...' : `Venues (${rows.length})`}\n emptyLabel=\"No venues configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.city ?? undefined,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'checkInRecords') {\n const rows = checkInRecordsQuery.data?.checkInRecords.items ?? [];\n return (\n <EntityListSection\n heading={checkInRecordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${rows.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'networkingProfiles') {\n const rows = networkingProfilesQuery.data?.networkingProfiles.items ?? [];\n return (\n <EntityListSection\n heading={networkingProfilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${rows.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n );\n }\n\n const rows = (sessionsQuery.data?.eventSessions.items ?? []) as SessionEntity[];\n return (\n <EntityListSection\n heading={sessionsQuery.loading ? 'Loading sessions...' : `Sessions (${rows.length})`}\n emptyLabel=\"No sessions scheduled.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? `Session ${row.id}`,\n subtitle: row.sessionType ?? undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n };\n\n const primarySections = sectionKeys.slice(0, 3);\n const secondarySections = sectionKeys.slice(3);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n A focused operations hub that pulls together the live records most relevant to {title}. Instead of jumping\n between modules, you get the key metrics plus the specific lists you need for this area in one place — handy\n for a quick health check or a stand-up update.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{title}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n </EmphasisPanel>\n\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary\">Operational Metrics</h2>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {cards.map((card) => (\n <GlassCard key={card.label} treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">{card.label}</p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums text-text-primary\">{card.value}</p>\n </GlassCard>\n ))}\n </div>\n </section>\n\n {primarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n\n {secondarySections.length > 0 ? (\n <ShowMore collapsedHeight={160} label=\"Show all sections\">\n <div className=\"space-y-6\">\n {secondarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n </div>\n </ShowMore>\n ) : null}\n\n <NextSteps\n storageKey=\"eventfullymanaged-operations-hub\"\n title=\"Where to go from here\"\n steps={[\n {\n id: 'overview',\n label: 'Back to the dashboard',\n description: 'See the big picture across every part of your events.',\n icon: <LayoutDashboard className=\"h-4 w-4\" />,\n onClick: () => navigate('/'),\n },\n {\n id: 'automate',\n label: 'Automate routine work',\n description: 'Set up workflow templates and rules to save time.',\n icon: <Workflow className=\"h-4 w-4\" />,\n onClick: () => navigate('/workflows'),\n },\n {\n id: 'communicate',\n label: 'Reach your audience',\n description: 'Send announcements and run campaigns.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"OperationsHubPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/OperationsHubPage.tsx"],"sourcesContent":["import { LayoutDashboard, Megaphone, Workflow } from 'lucide-react';\nimport { EmphasisPanel, GlassCard, GradientText, NextSteps, PagePurpose, ShowMore } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport {\n useExhibitorsQuery,\n useLeadsQuery,\n useCheckInRecordsQuery,\n useNetworkingProfilesQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n useAnalyticsSnapshotsQuery,\n useAnnouncementsQuery,\n useAutomationRulesQuery,\n useCommunicationCampaignsQuery,\n useDashboardSummaryQuery,\n useEventSessionsQuery,\n useRegistrationsQuery,\n useSponsorsQuery,\n useVenuesQuery,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SectionKey =\n | 'announcements'\n | 'campaigns'\n | 'templates'\n | 'rules'\n | 'snapshots'\n | 'registrations'\n | 'ticketTypes'\n | 'promoCodes'\n | 'sponsors'\n | 'exhibitors'\n | 'leads'\n | 'venues'\n | 'sessions'\n | 'checkInRecords'\n | 'networkingProfiles';\n\ninterface OperationsHubPageProps {\n title: string;\n description: string;\n sectionKeys: SectionKey[];\n}\n\ntype NamedEntity = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype RegistrationEntity = {\n id: string;\n attendeeId?: string | null;\n status?: string | null;\n totalAmount?: string | null;\n currency?: string | null;\n};\n\ntype SponsorEntity = {\n id: string;\n name: string;\n level: string;\n};\n\ntype VenueEntity = {\n id: string;\n name: string;\n city?: string | null;\n status: string;\n};\n\ntype SessionEntity = {\n id: string;\n title?: string | null;\n sessionType?: string | null;\n status?: string | null;\n};\n\ntype ExhibitorEntity = {\n id: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n status: string;\n};\n\ntype LeadEntity = {\n id: string;\n attendeeName: string;\n attendeeEmail: string;\n status: string;\n score?: number | null;\n};\n\nexport default function OperationsHubPage({ title, description, sectionKeys }: OperationsHubPageProps) {\n const { navigate } = useEventfullyManaged();\n const summaryQuery = useDashboardSummaryQuery();\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const snapshotsQuery = useAnalyticsSnapshotsQuery({ limit: 100, offset: 0 });\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const exhibitorsQuery = useExhibitorsQuery({ limit: 100, offset: 0 });\n const leadsQuery = useLeadsQuery({ limit: 100, offset: 0 });\n const venuesQuery = useVenuesQuery({ limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ limit: 100, offset: 0 });\n const checkInRecordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const networkingProfilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n\n const summary = summaryQuery.data?.dashboardSummary;\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationEntity[],\n [registrationsQuery.data]\n );\n\n const trackedRevenue = useMemo(\n () =>\n registrations.reduce((total, registration) => {\n const value = Number(registration.totalAmount ?? 0);\n return Number.isFinite(value) ? total + value : total;\n }, 0),\n [registrations]\n );\n\n const cards = [\n { label: 'Events', value: summary?.totalEvents ?? 0 },\n { label: 'Active', value: summary?.activeEvents ?? 0 },\n { label: 'Registrations', value: summary?.totalRegistrations ?? 0 },\n { label: 'Attendees', value: summary?.totalAttendees ?? 0 },\n { label: 'Venues', value: summary?.totalVenues ?? 0 },\n { label: 'Sponsors', value: summary?.totalSponsors ?? 0 },\n { label: 'Tracked Revenue', value: trackedRevenue.toFixed(2) },\n ];\n\n const renderSection = (sectionKey: SectionKey) => {\n if (sectionKey === 'announcements') {\n const rows = (announcementsQuery.data?.announcements.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={announcementsQuery.loading ? 'Loading announcements...' : `Announcements (${rows.length})`}\n emptyLabel=\"No announcements recorded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Announcement ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'campaigns') {\n const rows = (campaignsQuery.data?.communicationCampaigns.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaigns (${rows.length})`}\n emptyLabel=\"No communication campaigns available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Campaign ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'templates') {\n const rows = (templatesQuery.data?.workflowTemplates.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Workflow Templates (${rows.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'rules') {\n const rows = (rulesQuery.data?.automationRules.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading rules...' : `Automation Rules (${rows.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'snapshots') {\n const rows = (snapshotsQuery.data?.analyticsSnapshots.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={snapshotsQuery.loading ? 'Loading analytics snapshots...' : `Snapshots (${rows.length})`}\n emptyLabel=\"No analytics snapshots generated.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Snapshot ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'registrations') {\n return (\n <EntityListSection\n heading={registrationsQuery.loading ? 'Loading registrations...' : `Registrations (${registrations.length})`}\n emptyLabel=\"No registrations available.\"\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Registration ${row.id}`,\n subtitle: row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}`.trim() : undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'ticketTypes') {\n const rows = ticketTypesQuery.data?.ticketTypes.items ?? [];\n return (\n <EntityListSection\n heading={ticketTypesQuery.loading ? 'Loading ticket types...' : `Ticket Types (${rows.length})`}\n emptyLabel=\"No ticket types configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • Sold ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'promoCodes') {\n const rows = promoCodesQuery.data?.promoCodes.items ?? [];\n return (\n <EntityListSection\n heading={promoCodesQuery.loading ? 'Loading promo codes...' : `Promo Codes (${rows.length})`}\n emptyLabel=\"No promo codes configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.code,\n subtitle: `${row.discountType} ${row.discountValue}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'sponsors') {\n const rows = (sponsorsQuery.data?.sponsors.items ?? []) as SponsorEntity[];\n return (\n <EntityListSection\n heading={sponsorsQuery.loading ? 'Loading sponsors...' : `Sponsors (${rows.length})`}\n emptyLabel=\"No sponsors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.level,\n }))}\n />\n );\n }\n\n if (sectionKey === 'exhibitors') {\n const rows = (exhibitorsQuery.data?.exhibitors.items ?? []) as ExhibitorEntity[];\n return (\n <EntityListSection\n heading={exhibitorsQuery.loading ? 'Loading exhibitors...' : `Exhibitors (${rows.length})`}\n emptyLabel=\"No exhibitors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.boothCode, row.category].filter(Boolean).join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'leads') {\n const rows = (leadsQuery.data?.leads.items ?? []) as LeadEntity[];\n return (\n <EntityListSection\n heading={leadsQuery.loading ? 'Loading leads...' : `Leads (${rows.length})`}\n emptyLabel=\"No leads captured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeName,\n subtitle: [row.attendeeEmail, row.score != null ? `Score ${row.score}` : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'venues') {\n const rows = (venuesQuery.data?.venues.items ?? []) as VenueEntity[];\n return (\n <EntityListSection\n heading={venuesQuery.loading ? 'Loading venues...' : `Venues (${rows.length})`}\n emptyLabel=\"No venues configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.city ?? undefined,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'checkInRecords') {\n const rows = checkInRecordsQuery.data?.checkInRecords.items ?? [];\n return (\n <EntityListSection\n heading={checkInRecordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${rows.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'networkingProfiles') {\n const rows = networkingProfilesQuery.data?.networkingProfiles.items ?? [];\n return (\n <EntityListSection\n heading={networkingProfilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${rows.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n );\n }\n\n const rows = (sessionsQuery.data?.eventSessions.items ?? []) as SessionEntity[];\n return (\n <EntityListSection\n heading={sessionsQuery.loading ? 'Loading sessions...' : `Sessions (${rows.length})`}\n emptyLabel=\"No sessions scheduled.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? `Session ${row.id}`,\n subtitle: row.sessionType ?? undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n };\n\n const primarySections = sectionKeys.slice(0, 3);\n const secondarySections = sectionKeys.slice(3);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n A focused operations hub that pulls together the live records most relevant to {title}. Instead of jumping\n between modules, you get the key metrics plus the specific lists you need for this area in one place — handy for\n a quick health check or a stand-up update.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{title}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n </EmphasisPanel>\n\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary\">Operational Metrics</h2>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {cards.map((card) => (\n <GlassCard key={card.label} treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">{card.label}</p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums text-text-primary\">{card.value}</p>\n </GlassCard>\n ))}\n </div>\n </section>\n\n {primarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n\n {secondarySections.length > 0 ? (\n <ShowMore collapsedHeight={160} label=\"Show all sections\">\n <div className=\"space-y-6\">\n {secondarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n </div>\n </ShowMore>\n ) : null}\n\n <NextSteps\n storageKey=\"eventfullymanaged-operations-hub\"\n title=\"Where to go from here\"\n steps={[\n {\n id: 'overview',\n label: 'Back to the dashboard',\n description: 'See the big picture across every part of your events.',\n icon: <LayoutDashboard className=\"h-4 w-4\" />,\n onClick: () => navigate('/'),\n },\n {\n id: 'automate',\n label: 'Automate routine work',\n description: 'Set up workflow templates and rules to save time.',\n icon: <Workflow className=\"h-4 w-4\" />,\n onClick: () => navigate('/workflows'),\n },\n {\n id: 'communicate',\n label: 'Reach your audience',\n description: 'Send announcements and run campaigns.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAmGA,SAAwB,EAAkB,EAAE,UAAO,gBAAa,kBAAuC;CACrG,IAAM,EAAE,gBAAa,GAAsB,EACrC,IAAe,GAA0B,EACzC,IAAqB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAiB,EAA+B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC1E,IAAiB,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAa,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,IAAiB,EAA2B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACtE,IAAqB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAmB,EAAoB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACjE,IAAkB,EAAmB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC3D,IAAkB,EAAmB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,IAAa,EAAc;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrD,IAAc,EAAe;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACvD,IAAgB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAChE,IAAsB,EAAuB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACvE,IAA0B,EAA2B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE/E,IAAU,EAAa,MAAM,kBAE7B,IAAgB,QACb,EAAmB,MAAM,cAAc,SAAS,EAAE,EACzD,CAAC,EAAmB,KAAK,CAC1B,EAEK,IAAiB,QAEnB,EAAc,QAAQ,GAAO,MAAiB;EAC5C,IAAM,IAAQ,OAAO,EAAa,eAAe,EAAE;AACnD,SAAO,OAAO,SAAS,EAAM,GAAG,IAAQ,IAAQ;IAC/C,EAAE,EACP,CAAC,EAAc,CAChB,EAEK,IAAQ;EACZ;GAAE,OAAO;GAAU,OAAO,GAAS,eAAe;GAAG;EACrD;GAAE,OAAO;GAAU,OAAO,GAAS,gBAAgB;GAAG;EACtD;GAAE,OAAO;GAAiB,OAAO,GAAS,sBAAsB;GAAG;EACnE;GAAE,OAAO;GAAa,OAAO,GAAS,kBAAkB;GAAG;EAC3D;GAAE,OAAO;GAAU,OAAO,GAAS,eAAe;GAAG;EACrD;GAAE,OAAO;GAAY,OAAO,GAAS,iBAAiB;GAAG;EACzD;GAAE,OAAO;GAAmB,OAAO,EAAe,QAAQ,EAAE;GAAE;EAC/D,EAEK,KAAiB,MAA2B;AAChD,MAAI,MAAe,iBAAiB;GAClC,IAAM,IAAQ,EAAmB,MAAM,cAAc,SAAS,EAAE;AAChE,UACE,kBAAC,GAAD;IACE,SAAS,EAAmB,UAAU,6BAA6B,kBAAkB,EAAK,OAAO;IACjG,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,gBAAgB,EAAI;KACpD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,aAAa;GAC9B,IAAM,IAAQ,EAAe,MAAM,uBAAuB,SAAS,EAAE;AACrE,UACE,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,cAAc,EAAK,OAAO;IACrF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,aAAa;GAC9B,IAAM,IAAQ,EAAe,MAAM,kBAAkB,SAAS,EAAE;AAChE,UACE,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,uBAAuB,EAAK,OAAO;IAC9F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,SAAS;GAC1B,IAAM,IAAQ,EAAW,MAAM,gBAAgB,SAAS,EAAE;AAC1D,UACE,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,qBAAqB,qBAAqB,EAAK,OAAO;IACpF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,QAAQ,EAAI;KAC5C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,aAAa;GAC9B,IAAM,IAAQ,EAAe,MAAM,mBAAmB,SAAS,EAAE;AACjE,UACE,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,mCAAmC,cAAc,EAAK,OAAO;IAC/F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,gBACjB,QACE,kBAAC,GAAD;GACE,SAAS,EAAmB,UAAU,6BAA6B,kBAAkB,EAAc,OAAO;GAC1G,YAAW;GACX,MAAM,EAAc,KAAK,OAAS;IAChC,IAAI,EAAI;IACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,gBAAgB,EAAI;IAC3E,UAAU,EAAI,cAAc,GAAG,EAAI,YAAY,GAAG,EAAI,YAAY,KAAK,MAAM,GAAG,KAAA;IAChF,QAAQ,EAAI,UAAU,KAAA;IACvB,EAAE;GACH,CAAA;AAIN,MAAI,MAAe,eAAe;GAChC,IAAM,IAAO,EAAiB,MAAM,YAAY,SAAS,EAAE;AAC3D,UACE,kBAAC,GAAD;IACE,SAAS,EAAiB,UAAU,4BAA4B,iBAAiB,EAAK,OAAO;IAC7F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,MAAM,GAAG,EAAI,SAAS,UAAU,EAAI;KACrD,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,cAAc;GAC/B,IAAM,IAAO,EAAgB,MAAM,WAAW,SAAS,EAAE;AACzD,UACE,kBAAC,GAAD;IACE,SAAS,EAAgB,UAAU,2BAA2B,gBAAgB,EAAK,OAAO;IAC1F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,aAAa,GAAG,EAAI;KACrC,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,YAAY;GAC7B,IAAM,IAAQ,EAAc,MAAM,SAAS,SAAS,EAAE;AACtD,UACE,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,wBAAwB,aAAa,EAAK,OAAO;IAClF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,EAAI;KACf,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,cAAc;GAC/B,IAAM,IAAQ,EAAgB,MAAM,WAAW,SAAS,EAAE;AAC1D,UACE,kBAAC,GAAD;IACE,SAAS,EAAgB,UAAU,0BAA0B,eAAe,EAAK,OAAO;IACxF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,CAAC,EAAI,WAAW,EAAI,SAAS,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KACnE,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,SAAS;GAC1B,IAAM,IAAQ,EAAW,MAAM,MAAM,SAAS,EAAE;AAChD,UACE,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,qBAAqB,UAAU,EAAK,OAAO;IACzE,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,CAAC,EAAI,eAAe,EAAI,SAAS,OAA8B,KAAA,IAAvB,SAAS,EAAI,QAAoB,CAChF,OAAO,QAAQ,CACf,KAAK,MAAM;KACd,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,UAAU;GAC3B,IAAM,IAAQ,EAAY,MAAM,OAAO,SAAS,EAAE;AAClD,UACE,kBAAC,GAAD;IACE,SAAS,EAAY,UAAU,sBAAsB,WAAW,EAAK,OAAO;IAC5E,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,EAAI,QAAQ,KAAA;KACtB,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,kBAAkB;GACnC,IAAM,IAAO,EAAoB,MAAM,eAAe,SAAS,EAAE;AACjE,UACE,kBAAC,GAAD;IACE,SAAS,EAAoB,UAAU,gCAAgC,qBAAqB,EAAK,OAAO;IACxG,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,UAAU,EAAI;KACrE,UAAU,GAAG,EAAI,OAAO,KAAK,EAAI;KACjC,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,sBAAsB;GACvC,IAAM,IAAO,EAAwB,MAAM,mBAAmB,SAAS,EAAE;AACzE,UACE,kBAAC,GAAD;IACE,SAAS,EAAwB,UAAU,mCAAmC,aAAa,EAAK,OAAO;IACvG,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,WAAW,EAAI;KACtE,UAAU,CAAC,EAAI,MAAM,EAAI,SAAS,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KAC9D,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;EAIN,IAAM,IAAQ,EAAc,MAAM,cAAc,SAAS,EAAE;AAC3D,SACE,kBAAC,GAAD;GACE,SAAS,EAAc,UAAU,wBAAwB,aAAa,EAAK,OAAO;GAClF,YAAW;GACX,MAAM,EAAK,KAAK,OAAS;IACvB,IAAI,EAAI;IACR,OAAO,EAAI,SAAS,WAAW,EAAI;IACnC,UAAU,EAAI,eAAe,KAAA;IAC7B,QAAQ,EAAI,UAAU,KAAA;IACvB,EAAE;GACH,CAAA;IAIA,KAAkB,EAAY,MAAM,GAAG,EAAE,EACzC,IAAoB,EAAY,MAAM,EAAE;AAE9C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,IAAD,EAAA,UAAA;IAAa;IACqE;IAAM;IAG1E,EAAA,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAe,GAAqB,CAAA;IACjC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAoC;IAAgB,CAAA,CACnD,EAAA,CAAA;GAEhB,kBAAC,WAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAA0C;IAAwB,CAAA,EAChF,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAM,KAAK,MACV,kBAAC,GAAD;KAA4B,WAAU;KAAS,WAAU;eAAzD,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAuD,EAAK;MAAU,CAAA,EACnF,kBAAC,KAAD;MAAG,WAAU;gBAA6D,EAAK;MAAU,CAAA,CAC/E;OAHI,EAAK,MAGT,CACZ;IACE,CAAA,CACE,EAAA,CAAA;GAET,GAAgB,KAAK,MACpB,kBAAC,OAAD,EAAA,UAAuB,EAAc,EAAW,EAAO,EAA7C,EAA6C,CACvD;GAED,EAAkB,SAAS,IAC1B,kBAAC,IAAD;IAAU,iBAAiB;IAAK,OAAM;cACpC,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAkB,KAAK,MACtB,kBAAC,OAAD,EAAA,UAAuB,EAAc,EAAW,EAAO,EAA7C,EAA6C,CACvD;KACE,CAAA;IACG,CAAA,GACT;GAEJ,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAiB,WAAU,WAAY,CAAA;MAC7C,eAAe,EAAS,IAAI;MAC7B;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;MACtC,eAAe,EAAS,aAAa;MACtC;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,eAAe,EAAS,iBAAiB;MAC1C;KACF;IACD,CAAA;GACE"}
@@ -1 +1 @@
1
- {"version":3,"file":"VenueDetailPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueDetailPage.tsx"],"sourcesContent":["import { ArrowLeft, Building2, Edit, MapPin, Megaphone, SquareStack, Users } from 'lucide-react';\nimport { Badge, Button, GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueRecord = {\n id: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FloorPlanRecord = {\n id: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n};\n\nexport default function VenueDetailPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading } = useVenueQuery(id);\n\n const venue = (data?.venue ?? null) as VenueRecord | null;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlanRecord[];\n\n if (loading) {\n return <div className=\"p-6 text-sm text-text-secondary\">Loading venue...</div>;\n }\n\n if (!venue) {\n return (\n <div className=\"space-y-4 p-6\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Venue not found.\"\n description=\"This venue may have been removed or is outside your current scope.\"\n />\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n The full record for one venue. Review its location, capacity and status, see what amenities it offers, and\n manage the floor plans attendees will navigate. Come here to confirm a space is ready before you assign an\n event to it.\n </PagePurpose>\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">{venue.name}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue.description ?? 'No description provided.'}</p>\n </div>\n </div>\n <Button type=\"button\" onClick={() => navigate(`/venues/${venue.id}/edit`)}>\n <Edit className=\"h-4 w-4\" />\n Edit Venue\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <MapPin className=\"h-4 w-4 text-action-primary-bg\" />\n Location\n </div>\n <p className=\"text-sm text-text-secondary\">\n {[venue.addressLine1, venue.city, venue.state, venue.country, venue.postalCode]\n .filter(Boolean)\n .join(', ') || 'Location not configured'}\n </p>\n </GlassCard>\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Users className=\"h-4 w-4 text-action-primary-bg\" />\n Capacity\n </div>\n <p className=\"text-sm tabular-nums text-text-secondary\">{venue.capacity ?? 0} attendees</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Building2 className=\"h-4 w-4 text-action-primary-bg\" />\n Status\n </div>\n <p className=\"text-sm uppercase text-text-secondary\">{venue.status}</p>\n </GlassCard>\n </div>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Amenities</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {venue.amenities.length > 0 ? (\n venue.amenities.map((amenity) => (\n <Badge key={amenity} variant=\"secondary\">\n {amenity}\n </Badge>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No amenities configured.</p>\n )}\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Floor Plans</h2>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => navigate(`/venues/${venue.id}/floor-plans`)}>\n <SquareStack className=\"h-4 w-4\" />\n Manage Floor Plans\n </Button>\n </div>\n <div className=\"mt-4\">\n {floorPlans.length > 0 ? (\n <ul className=\"space-y-2.5\">\n {floorPlans.map((plan) => (\n <li\n key={plan.id}\n className=\"rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"font-medium text-text-primary\">{plan.name}</p>\n <p className=\"text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image configured' : 'No image configured'}\n </p>\n </li>\n ))}\n </ul>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans have been added yet.\"\n className=\"py-8\"\n />\n )}\n </div>\n </GlassCard>\n\n <NextSteps\n storageKey=\"eventfullymanaged-venue-detail\"\n title=\"Get this venue ready to host\"\n steps={[\n {\n id: 'edit-venue',\n label: 'Edit venue details',\n description: 'Update capacity, address, status and amenities.',\n icon: <Edit className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/edit`),\n },\n {\n id: 'floor-plans',\n label: 'Add floor plans',\n description: 'Map the layout so attendees and staff can navigate.',\n icon: <SquareStack className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/floor-plans`),\n },\n {\n id: 'resources',\n label: 'Review resource readiness',\n description: 'Check capacity, amenities and plans at a glance.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/resources`),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VenueDetailPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueDetailPage.tsx"],"sourcesContent":["import { ArrowLeft, Building2, Edit, MapPin, Megaphone, SquareStack, Users } from 'lucide-react';\nimport { Badge, Button, GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueRecord = {\n id: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FloorPlanRecord = {\n id: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n};\n\nexport default function VenueDetailPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading } = useVenueQuery(id);\n\n const venue = (data?.venue ?? null) as VenueRecord | null;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlanRecord[];\n\n if (loading) {\n return <div className=\"p-6 text-sm text-text-secondary\">Loading venue...</div>;\n }\n\n if (!venue) {\n return (\n <div className=\"space-y-4 p-6\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Venue not found.\"\n description=\"This venue may have been removed or is outside your current scope.\"\n />\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n The full record for one venue. Review its location, capacity and status, see what amenities it offers, and\n manage the floor plans attendees will navigate. Come here to confirm a space is ready before you assign an event\n to it.\n </PagePurpose>\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">{venue.name}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue.description ?? 'No description provided.'}</p>\n </div>\n </div>\n <Button type=\"button\" onClick={() => navigate(`/venues/${venue.id}/edit`)}>\n <Edit className=\"h-4 w-4\" />\n Edit Venue\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <MapPin className=\"h-4 w-4 text-action-primary-bg\" />\n Location\n </div>\n <p className=\"text-sm text-text-secondary\">\n {[venue.addressLine1, venue.city, venue.state, venue.country, venue.postalCode]\n .filter(Boolean)\n .join(', ') || 'Location not configured'}\n </p>\n </GlassCard>\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Users className=\"h-4 w-4 text-action-primary-bg\" />\n Capacity\n </div>\n <p className=\"text-sm tabular-nums text-text-secondary\">{venue.capacity ?? 0} attendees</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Building2 className=\"h-4 w-4 text-action-primary-bg\" />\n Status\n </div>\n <p className=\"text-sm uppercase text-text-secondary\">{venue.status}</p>\n </GlassCard>\n </div>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Amenities</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {venue.amenities.length > 0 ? (\n venue.amenities.map((amenity) => (\n <Badge key={amenity} variant=\"secondary\">\n {amenity}\n </Badge>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No amenities configured.</p>\n )}\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Floor Plans</h2>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => navigate(`/venues/${venue.id}/floor-plans`)}>\n <SquareStack className=\"h-4 w-4\" />\n Manage Floor Plans\n </Button>\n </div>\n <div className=\"mt-4\">\n {floorPlans.length > 0 ? (\n <ul className=\"space-y-2.5\">\n {floorPlans.map((plan) => (\n <li\n key={plan.id}\n className=\"rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"font-medium text-text-primary\">{plan.name}</p>\n <p className=\"text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image configured' : 'No image configured'}\n </p>\n </li>\n ))}\n </ul>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans have been added yet.\"\n className=\"py-8\"\n />\n )}\n </div>\n </GlassCard>\n\n <NextSteps\n storageKey=\"eventfullymanaged-venue-detail\"\n title=\"Get this venue ready to host\"\n steps={[\n {\n id: 'edit-venue',\n label: 'Edit venue details',\n description: 'Update capacity, address, status and amenities.',\n icon: <Edit className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/edit`),\n },\n {\n id: 'floor-plans',\n label: 'Add floor plans',\n description: 'Map the layout so attendees and staff can navigate.',\n icon: <SquareStack className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/floor-plans`),\n },\n {\n id: 'resources',\n label: 'Review resource readiness',\n description: 'Check capacity, amenities and plans at a glance.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/resources`),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"VenueListPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueListPage.tsx"],"sourcesContent":["import { Building2, MapPin, Plus, Search, Users } from 'lucide-react';\nimport { Badge, Button, EmphasisPanel, GlassCard, IllustratedEmptyState, Input, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useVenuesQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueItem = {\n id: string;\n name: string;\n description?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n};\n\nexport default function VenueListPage() {\n const { navigate } = useEventfullyManaged();\n const [search, setSearch] = useState('');\n const { data, loading } = useVenuesQuery({ search, limit: 100, offset: 0 });\n\n const venues = useMemo(() => (data?.venues?.items ?? []) as VenueItem[], [data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Venues are the physical (or virtual) spaces where your events happen. Catalog them once — with capacity,\n location, amenities and floor plans — and reuse them across events. Start here when you are scouting or\n onboarding a new space to host an event.\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\">Venues</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">Browse and manage event venues using live backend data.</p>\n </div>\n <Button type=\"button\" onClick={() => navigate('/venues/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Venue\n </Button>\n </EmphasisPanel>\n\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search venues by name or location\"\n aria-label=\"Search venues by name or location\"\n className=\"pl-10\"\n />\n </div>\n\n {loading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n Loading venues...\n </GlassCard>\n ) : venues.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration={search ? 'empty-search' : 'empty-data'}\n title={search ? 'No venues match your search.' : 'No venues yet.'}\n description={\n search ? 'Try a different name or location.' : 'Add your first venue to start mapping events to spaces.'\n }\n action={\n !search ? (\n <Button type=\"button\" onClick={() => navigate('/venues/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Venue\n </Button>\n ) : undefined\n }\n />\n </GlassCard>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {venues.map((venue) => (\n <GlassCard\n key={venue.id}\n treatment=\"plain\"\n role=\"button\"\n tabIndex={0}\n aria-label={`Open ${venue.name}`}\n onClick={() => navigate(`/venues/${venue.id}`)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n navigate(`/venues/${venue.id}`);\n }\n }}\n className=\"cursor-pointer border-border-seam p-5 text-left outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <h2 className=\"text-lg font-semibold text-text-primary\">{venue.name}</h2>\n <p className=\"mt-1 line-clamp-2 text-sm text-text-secondary\">\n {venue.description ?? 'No description available.'}\n </p>\n </div>\n <Badge variant=\"secondary\" className=\"shrink-0 uppercase\">\n {venue.status}\n </Badge>\n </div>\n\n <div className=\"mt-4 grid grid-cols-1 gap-2 text-sm text-text-secondary sm:grid-cols-3\">\n <div className=\"flex items-center gap-2\">\n <MapPin className=\"h-4 w-4\" />\n <span>\n {[venue.city, venue.state, venue.country].filter(Boolean).join(', ') || 'Location not set'}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n <span className=\"tabular-nums\">{venue.capacity ?? 0} capacity</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Building2 className=\"h-4 w-4\" />\n <span className=\"tabular-nums\">{venue.amenities.length} amenities</span>\n </div>\n </div>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAmBA,SAAwB,IAAgB;CACtC,IAAM,EAAE,gBAAa,GAAsB,EACrC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,EAAE,SAAM,eAAY,EAAe;EAAE;EAAQ,OAAO;EAAK,QAAQ;EAAG,CAAC,EAErE,IAAS,QAAe,GAAM,QAAQ,SAAS,EAAE,EAAkB,CAAC,EAAK,CAAC;AAEhF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,6PAIC,CAAA;GAEd,kBAAC,GAAD;IAAe,WAAU;cAAzB,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuC;KAAW,CAAA,EAChE,kBAAC,KAAD;KAAG,WAAU;eAAmC;KAA2D,CAAA,CACvG,EAAA,CAAA,EACN,kBAAC,GAAD;KAAQ,MAAK;KAAS,eAAe,EAAS,iBAAiB;eAA/D,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,YAErB;OACK;;GAEhB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,wFAAyF,CAAA,EAC3G,kBAAC,GAAD;KACE,MAAK;KACL,OAAO;KACP,WAAW,MAAU,EAAU,EAAM,OAAO,MAAM;KAClD,aAAY;KACZ,cAAW;KACX,WAAU;KACV,CAAA,CACE;;GAEL,IACC,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cAAiE;IAE5F,CAAA,GACV,EAAO,WAAW,IACpB,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cACrC,kBAAC,GAAD;KACE,cAAc,IAAS,iBAAiB;KACxC,OAAO,IAAS,iCAAiC;KACjD,aACE,IAAS,sCAAsC;KAEjD,QACG,IAKG,KAAA,IAJF,kBAAC,GAAD;MAAQ,MAAK;MAAS,eAAe,EAAS,iBAAiB;gBAA/D,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,YAErB;;KAGb,CAAA;IACQ,CAAA,GAEZ,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAO,KAAK,MACX,kBAAC,GAAD;KAEE,WAAU;KACV,MAAK;KACL,UAAU;KACV,cAAY,QAAQ,EAAM;KAC1B,eAAe,EAAS,WAAW,EAAM,KAAK;KAC9C,YAAY,MAAU;AACpB,OAAI,EAAM,QAAQ,WAAW,EAAM,QAAQ,SACzC,EAAM,gBAAgB,EACtB,EAAS,WAAW,EAAM,KAAK;;KAGnC,WAAU;eAbZ,CAeE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,MAAD;QAAI,WAAU;kBAA2C,EAAM;QAAU,CAAA,EACzE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAM,eAAe;QACpB,CAAA,CACA;UACN,kBAAC,GAAD;OAAO,SAAQ;OAAY,WAAU;iBAClC,EAAM;OACD,CAAA,CACJ;SAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAC9B,kBAAC,QAAD,EAAA,UACG;SAAC,EAAM;SAAM,EAAM;SAAO,EAAM;SAAQ,CAAC,OAAO,QAAQ,CAAC,KAAK,KAAK,IAAI,oBACnE,CAAA,CACH;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC7B,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CAAgC,EAAM,YAAY,GAAE,YAAgB;WAChE;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EACjC,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CAAgC,EAAM,UAAU,QAAO,aAAiB;WACpE;;OACF;QACI;OA1CL,EAAM,GA0CD,CACZ;IACE,CAAA;GAEJ"}
1
+ {"version":3,"file":"VenueListPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueListPage.tsx"],"sourcesContent":["import { Building2, MapPin, Plus, Search, Users } from 'lucide-react';\nimport {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useVenuesQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueItem = {\n id: string;\n name: string;\n description?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n};\n\nexport default function VenueListPage() {\n const { navigate } = useEventfullyManaged();\n const [search, setSearch] = useState('');\n const { data, loading } = useVenuesQuery({ search, limit: 100, offset: 0 });\n\n const venues = useMemo(() => (data?.venues?.items ?? []) as VenueItem[], [data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Venues are the physical (or virtual) spaces where your events happen. Catalog them once — with capacity,\n location, amenities and floor plans — and reuse them across events. Start here when you are scouting or\n onboarding a new space to host an event.\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\">Venues</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">Browse and manage event venues using live backend data.</p>\n </div>\n <Button type=\"button\" onClick={() => navigate('/venues/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Venue\n </Button>\n </EmphasisPanel>\n\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search venues by name or location\"\n aria-label=\"Search venues by name or location\"\n className=\"pl-10\"\n />\n </div>\n\n {loading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n Loading venues...\n </GlassCard>\n ) : venues.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration={search ? 'empty-search' : 'empty-data'}\n title={search ? 'No venues match your search.' : 'No venues yet.'}\n description={\n search ? 'Try a different name or location.' : 'Add your first venue to start mapping events to spaces.'\n }\n action={\n !search ? (\n <Button type=\"button\" onClick={() => navigate('/venues/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Venue\n </Button>\n ) : undefined\n }\n />\n </GlassCard>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {venues.map((venue) => (\n <GlassCard\n key={venue.id}\n treatment=\"plain\"\n role=\"button\"\n tabIndex={0}\n aria-label={`Open ${venue.name}`}\n onClick={() => navigate(`/venues/${venue.id}`)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n navigate(`/venues/${venue.id}`);\n }\n }}\n className=\"cursor-pointer border-border-seam p-5 text-left outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <h2 className=\"text-lg font-semibold text-text-primary\">{venue.name}</h2>\n <p className=\"mt-1 line-clamp-2 text-sm text-text-secondary\">\n {venue.description ?? 'No description available.'}\n </p>\n </div>\n <Badge variant=\"secondary\" className=\"shrink-0 uppercase\">\n {venue.status}\n </Badge>\n </div>\n\n <div className=\"mt-4 grid grid-cols-1 gap-2 text-sm text-text-secondary sm:grid-cols-3\">\n <div className=\"flex items-center gap-2\">\n <MapPin className=\"h-4 w-4\" />\n <span>\n {[venue.city, venue.state, venue.country].filter(Boolean).join(', ') || 'Location not set'}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4\" />\n <span className=\"tabular-nums\">{venue.capacity ?? 0} capacity</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Building2 className=\"h-4 w-4\" />\n <span className=\"tabular-nums\">{venue.amenities.length} amenities</span>\n </div>\n </div>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-eventfullymanaged",
3
- "version": "2026.703.1",
3
+ "version": "2026.703.2",
4
4
  "description": "EventfullyManaged - End-to-end event management platform",
5
5
  "type": "module",
6
6
  "files": [