@riverbankcms/sdk 0.85.0 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PreviewEditorSidebar-4PH35ZIE.mjs → PreviewEditorSidebar-JDR64FEC.mjs} +3 -3
- package/dist/{PreviewEditorUI-WHMCRJGM.mjs → PreviewEditorUI-67TMJMAF.mjs} +3 -3
- package/dist/SdkPreviewModeRuntime-ZBEMRV7N.mjs +8 -0
- package/dist/_dts/api/src/accessAdmin.d.ts +7 -0
- package/dist/_dts/api/src/endpoints.d.ts +66 -14
- package/dist/_dts/api/src/index.d.ts +5 -2
- package/dist/_dts/api/src/launchReadiness.d.ts +3 -3
- package/dist/_dts/api/src/mailchimpIntegration.d.ts +215 -0
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +35 -15
- package/dist/_dts/api/src/siteInfrastructure.d.ts +0 -14
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +5 -1
- package/dist/_dts/api/src/siteMembers.d.ts +6 -1
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +1 -13
- package/dist/_dts/api/src/types.d.ts +7 -4
- package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -0
- package/dist/_dts/blocks/src/index.d.ts +2 -1
- package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
- package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +42 -42
- package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +300 -0
- package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +63 -3
- package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
- package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +53 -1
- package/dist/_dts/blocks/src/system/icons/cta.d.ts +3 -3
- package/dist/_dts/blocks/src/system/icons/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -2
- package/dist/_dts/blocks/src/system/icons/semantic.d.ts +3 -3
- package/dist/_dts/blocks/src/system/icons/svg.d.ts +72 -0
- package/dist/_dts/blocks/src/system/manifest/richTextSchema.d.ts +27 -0
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +23 -23
- package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +11 -2
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -0
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/loadStateError.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableDates.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableDates.state.d.ts +55 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.state.d.ts +39 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFormConfig.d.ts +4 -27
- package/dist/_dts/blocks/src/system/runtime/hooks/useBookingFormConfig.state.d.ts +40 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +20 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.state.d.ts +31 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.d.ts +3 -3
- package/dist/_dts/blocks/src/system/runtime/hooks/useEventPagination.state.d.ts +39 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventPaginatedListView.client.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +11 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.state.d.ts +24 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +15 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +32 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +5 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +24 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +5 -1
- package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.state.d.ts +35 -0
- package/dist/_dts/blocks/src/system/runtime/shared/utils/formatting.d.ts +1 -1
- package/dist/_dts/content-model/src/entry-slots/types.d.ts +54 -0
- package/dist/_dts/content-model/src/referenceFields.d.ts +1 -1
- package/dist/_dts/core/src/branded.d.ts +7 -0
- package/dist/_dts/core/src/currency-format.d.ts +37 -2
- package/dist/_dts/core/src/event-pricing.d.ts +24 -0
- package/dist/_dts/core/src/index.d.ts +1 -0
- package/dist/_dts/core/src/site-route-target.d.ts +40 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +705 -17
- package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +3 -1
- package/dist/_dts/media-core/src/fileDomain.d.ts +4 -0
- package/dist/_dts/sdk/src/client/runtimeCachePolicy.d.ts +160 -0
- package/dist/_dts/sdk/src/client/types.d.ts +35 -1
- package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +3 -0
- package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +3 -9
- package/dist/_dts/sdk/src/index.d.ts +3 -1
- package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +1 -1
- package/dist/_dts/sdk/src/manifest/three-pass-converter.d.ts +7 -18
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -1
- package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -3
- package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +4 -24
- package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +45 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
- package/dist/_dts/theme-core/src/schema.d.ts +11 -11
- package/dist/{chunk-PYDHOMEO.mjs → chunk-7N46MZHI.mjs} +1 -1
- package/dist/{chunk-ZR2GQK2A.mjs → chunk-7YUAXONX.mjs} +1880 -588
- package/dist/{chunk-4QNLOTES.mjs → chunk-F645A5UV.mjs} +76 -14
- package/dist/{chunk-OCGTXHSO.mjs → chunk-HKJQERFR.mjs} +7 -7
- package/dist/{chunk-NFWGLRZZ.mjs → chunk-TGBJWKMP.mjs} +37 -3
- package/dist/{chunk-WFPYN7KA.mjs → chunk-ZQRBLCW5.mjs} +2 -2
- package/dist/cli/index.mjs +1075 -126
- package/dist/client/{accordion-2UZPBMYM.mjs → accordion-MUCVNGQ7.mjs} +2 -2
- package/dist/client/{bookingForm-36CWQUMV.mjs → bookingForm-PKD6EFIE.mjs} +193 -77
- package/dist/client/bookings.mjs +487 -197
- package/dist/client/{carousel-QH77HR6X.mjs → carousel-3TKQSNJC.mjs} +4 -3
- package/dist/client/cart-6XHSZK23.mjs +19 -0
- package/dist/client/checkout-FVSPM6FI.mjs +19 -0
- package/dist/client/{chunk-ZE5G642V.mjs → chunk-25W2EQUN.mjs} +75 -1
- package/dist/client/chunk-6N7YRNYU.mjs +183 -0
- package/dist/client/{chunk-4OXKTA3D.mjs → chunk-7DH35FGA.mjs} +2 -2
- package/dist/client/{chunk-3C2VTPWI.mjs → chunk-CQKKFEQD.mjs} +363 -66
- package/dist/client/{chunk-7UCLJ5SP.mjs → chunk-EY42X22F.mjs} +4 -7
- package/dist/client/{chunk-SYIJ5JO2.mjs → chunk-FHU6PFPM.mjs} +1 -1
- package/dist/client/{chunk-ZKUO52W3.mjs → chunk-LQFDYWPJ.mjs} +1 -1
- package/dist/client/chunk-RSQWWUAD.mjs +390 -0
- package/dist/client/{chunk-UDNSI5PY.mjs → chunk-STJ2NCQM.mjs} +2 -3
- package/dist/client/{chunk-VGDBVNOO.mjs → chunk-UQFY4AHX.mjs} +511 -406
- package/dist/client/{chunk-F5VRX5Y6.mjs → chunk-VGLXACVK.mjs} +1 -1
- package/dist/client/{chunk-DVNUDUVT.mjs → chunk-WBQG7VJA.mjs} +4 -1
- package/dist/client/{chunk-52CGCQ7B.mjs → chunk-ZJZZA5EP.mjs} +10 -80
- package/dist/client/{chunk-XSV6KW4D.mjs → chunk-ZT5XE7FK.mjs} +1 -1
- package/dist/client/client.mjs +5820 -4782
- package/dist/client/{courseRegistration-TMKU6ABO.mjs → courseRegistration-ATZSYDHM.mjs} +7 -7
- package/dist/client/{eventCalendar-G6TI32X6.mjs → eventCalendar-6T2UGKKP.mjs} +11 -11
- package/dist/client/{eventCombined-SCKEMNAR.mjs → eventCombined-Q4VANXVF.mjs} +11 -11
- package/dist/client/{eventDetails-XPIFXXPK.mjs → eventDetails-DW37E7VW.mjs} +11 -11
- package/dist/client/{eventListing-7QFMEMGT.mjs → eventListing-XURTSAUW.mjs} +11 -11
- package/dist/client/{eventRegistration-TOODSZUI.mjs → eventRegistration-MRKEVAXW.mjs} +11 -11
- package/dist/client/{form-MTCMVCZT.mjs → form-WZZFFGMU.mjs} +3 -3
- package/dist/client/{headerSection-Y5TMR3TW.mjs → headerSection-EQYVQBLM.mjs} +4 -4
- package/dist/client/hooks.mjs +1700 -1412
- package/dist/client/{locationMap-RH2LG7FZ.mjs → locationMap-MFF5VAZR.mjs} +3 -4
- package/dist/client/{newsletterForm-PCAIPFMA.mjs → newsletterForm-JQ77UYIE.mjs} +127 -43
- package/dist/client/{productDetail-OIGDR4YE.mjs → productDetail-25LMT3IZ.mjs} +9 -9
- package/dist/client/{productList-4MA5S2CX.mjs → productList-5ABEMKUG.mjs} +9 -9
- package/dist/client/rendering/client.mjs +3884 -3722
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +6774 -6331
- package/dist/client/shop-OMMQZ6YO.mjs +21 -0
- package/dist/preview-next/before-render.mjs +76 -14
- package/dist/preview-next/client/runtime.mjs +5 -5
- package/dist/preview-next/editor-chrome.css +56 -9
- package/dist/preview-next/middleware.mjs +76 -14
- package/dist/{sdk-runtime-QLOCYKVU.mjs → sdk-runtime-WNLBZ3ZH.mjs} +6 -6
- package/dist/server/components.mjs +2579 -2548
- package/dist/server/config-validation.mjs +1737 -1461
- package/dist/server/config.mjs +1737 -1461
- package/dist/server/data.mjs +1701 -1413
- package/dist/server/index.mjs +1048 -400
- package/dist/server/next.mjs +3602 -2858
- package/dist/server/page-converter.mjs +2193 -1169
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +2770 -2742
- package/dist/server/rendering.mjs +2961 -2886
- package/dist/server/routing.mjs +2186 -1508
- package/dist/server/server.mjs +2237 -1287
- package/dist/server/theme-bridge.mjs +260 -0
- package/dist/styles/index.css +258 -0
- package/package.json +2 -1
- package/dist/SdkPreviewModeRuntime-4FGSVUYI.mjs +0 -8
- package/dist/client/cart-X4YK4FTW.mjs +0 -19
- package/dist/client/checkout-OM2BEPWD.mjs +0 -19
- package/dist/client/chunk-3DTWLTXM.mjs +0 -204
- package/dist/client/chunk-I2MMZO53.mjs +0 -6
- package/dist/client/shop-WXSYV5QO.mjs +0 -21
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { LeafletStaticMap } from './chunk-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { LeafletStaticMap } from './chunk-ZT5XE7FK.mjs';
|
|
3
|
+
import { resolveCoursePricingState, useWaitlistClaim, MagicLinkForm, formatCoursePriceAmount, formatCoursePriceDisplay } from './chunk-RSQWWUAD.mjs';
|
|
4
|
+
import { CreditCard, Ticket, Star, Sparkles } from './chunk-6N7YRNYU.mjs';
|
|
5
|
+
import { usePolling } from './chunk-LQFDYWPJ.mjs';
|
|
6
|
+
import { SpinnerNode } from './chunk-FHU6PFPM.mjs';
|
|
6
7
|
import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
|
|
7
|
-
import { createBodyThemePortalRoot, TabBarFragment, logoutPortal, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon,
|
|
8
|
+
import { createBodyThemePortalRoot, TabBarFragment, logoutPortal, consumeSearchParam, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, LoggedInAsUser, CheckIcon } from './chunk-EY42X22F.mjs';
|
|
8
9
|
import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
|
|
9
|
-
import { ModalShell } from './chunk-
|
|
10
|
+
import { ModalShell } from './chunk-WBQG7VJA.mjs';
|
|
10
11
|
import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-SDIYSQAY.mjs';
|
|
11
|
-
import { useBlockApi, FeedbackMessage } from './chunk-
|
|
12
|
-
import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, WIZARD_STEPS, getWizardStepsForContext, getStepNumber,
|
|
13
|
-
import { publicEventPricingType, getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, publicEventPricingCurrency, formatBookingDateTime, publicEventPricingMode, publicEventScalarPrice, publicEventTicketTypes, formatBookingDate, formatBookingTime } from './chunk-
|
|
14
|
-
import React9, { createContext, useId, useMemo, useState, useRef, useEffect, useCallback, useContext
|
|
12
|
+
import { useBlockApi, FeedbackMessage } from './chunk-STJ2NCQM.mjs';
|
|
13
|
+
import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, WIZARD_STEPS, getWizardStepsForContext, getStepNumber, formatEventPriceDisplay, resolveRuntimeEventPricing, formatEventPrice, formatEventDateParts, DateTimeTile, assertNever11, EventCard, buildCalendarViewport, shiftCalendarAnchorDate, addMonths, getThreeMonthRange, buildTimetableModel, formatDate, toRegistrationEvents, isEventContentType, findPreSelectedEvent, resolveRegistrationTarget, findEventByOccurrenceId, resolveEventRequiresPayment, resolveDiscountContext, MONTH_NAMES, getEventAvailability, formatEventTeacherLine } from './chunk-UQFY4AHX.mjs';
|
|
14
|
+
import { publicEventPricingType, getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, publicEventPricingCurrency, formatBookingDateTime, publicEventPricingMode, publicEventScalarPrice, publicEventTicketTypes, formatCurrencyAmount, formatBookingDate, formatBookingTime } from './chunk-25W2EQUN.mjs';
|
|
15
|
+
import React9, { createContext, useId, useMemo, useReducer, useState, useRef, useEffect, useCallback, useContext } from 'react';
|
|
16
|
+
import { createPortal } from 'react-dom';
|
|
15
17
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
16
18
|
|
|
17
19
|
function StepIndicator2(props) {
|
|
@@ -2744,6 +2746,12 @@ function EventPortalAuthPrompt(props) {
|
|
|
2744
2746
|
/* @__PURE__ */ jsx("button", { type: "button", className: "er-portal-auth-link", onClick: props.onRequestLogin, children: props.copy.buttonText })
|
|
2745
2747
|
] });
|
|
2746
2748
|
}
|
|
2749
|
+
function getActiveTicketTypes(event) {
|
|
2750
|
+
return event?.pricing.kind === "ticket_types" ? event.pricing.ticketTypes.filter((ticketType) => ticketType.isActive).sort((left, right) => left.sortOrder - right.sortOrder) : [];
|
|
2751
|
+
}
|
|
2752
|
+
function formatTicketTypePrice(ticketType, currency) {
|
|
2753
|
+
return formatCurrencyAmount(ticketType.priceAmount, currency, { decimals: "auto" });
|
|
2754
|
+
}
|
|
2747
2755
|
function EventRegistrationWizard(props) {
|
|
2748
2756
|
const {
|
|
2749
2757
|
occurrenceContext,
|
|
@@ -2763,6 +2771,8 @@ function EventRegistrationWizard(props) {
|
|
|
2763
2771
|
const maxTicketsNum = normalizeEventRegistrationMaxTickets(maxTickets);
|
|
2764
2772
|
const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();
|
|
2765
2773
|
const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
|
|
2774
|
+
const registrationRootClassName = `event-registration ${className || ""}`;
|
|
2775
|
+
const registrationRootRef = React9.useRef(null);
|
|
2766
2776
|
const wizard = useEventRegistrationWizard({
|
|
2767
2777
|
anchorId: EVENT_REGISTRATION_ANCHOR_ID,
|
|
2768
2778
|
occurrenceContext: occurrenceContext ?? null,
|
|
@@ -2770,13 +2780,44 @@ function EventRegistrationWizard(props) {
|
|
|
2770
2780
|
events: events ?? [],
|
|
2771
2781
|
maxTicketsNum
|
|
2772
2782
|
});
|
|
2783
|
+
const [bookingOverlayOpen, setBookingOverlayOpen] = useState(false);
|
|
2784
|
+
const [floatingPortalRoot, setFloatingPortalRoot] = useState(null);
|
|
2785
|
+
useEffect(() => {
|
|
2786
|
+
const sourceEl = registrationRootRef.current;
|
|
2787
|
+
if (!sourceEl) return;
|
|
2788
|
+
const portal = createBodyThemePortalRoot(sourceEl);
|
|
2789
|
+
if (!portal) return;
|
|
2790
|
+
setFloatingPortalRoot(portal.root);
|
|
2791
|
+
return () => {
|
|
2792
|
+
setFloatingPortalRoot(null);
|
|
2793
|
+
portal.cleanup();
|
|
2794
|
+
};
|
|
2795
|
+
}, []);
|
|
2773
2796
|
if (wizard.scopedEvents.length === 0 && !wizard.occurrenceContext) {
|
|
2774
|
-
return /* @__PURE__ */ jsx(
|
|
2797
|
+
return /* @__PURE__ */ jsx(
|
|
2798
|
+
"div",
|
|
2799
|
+
{
|
|
2800
|
+
ref: registrationRootRef,
|
|
2801
|
+
id: EVENT_REGISTRATION_ANCHOR_ID,
|
|
2802
|
+
className: registrationRootClassName,
|
|
2803
|
+
"data-block": "event-registration",
|
|
2804
|
+
children: /* @__PURE__ */ jsx("div", { className: "er-empty", children: /* @__PURE__ */ jsx("p", { className: "er-empty__text", children: "No events available for registration." }) })
|
|
2805
|
+
}
|
|
2806
|
+
);
|
|
2775
2807
|
}
|
|
2776
2808
|
const allowedStatuses = getRegistrableStatuses(wizard.api.config.isPreview);
|
|
2777
2809
|
const hasRegistrableEvents = wizard.scopedEvents.some((event) => !event.status || allowedStatuses.includes(event.status));
|
|
2778
2810
|
if (!hasRegistrableEvents && !wizard.occurrenceContext) {
|
|
2779
|
-
return /* @__PURE__ */ jsx(
|
|
2811
|
+
return /* @__PURE__ */ jsx(
|
|
2812
|
+
"div",
|
|
2813
|
+
{
|
|
2814
|
+
ref: registrationRootRef,
|
|
2815
|
+
id: EVENT_REGISTRATION_ANCHOR_ID,
|
|
2816
|
+
className: registrationRootClassName,
|
|
2817
|
+
"data-block": "event-registration",
|
|
2818
|
+
children: /* @__PURE__ */ jsx("div", { className: "er-empty", children: /* @__PURE__ */ jsx("p", { className: "er-empty__text", children: "Registration is not currently available for this event." }) })
|
|
2819
|
+
}
|
|
2820
|
+
);
|
|
2780
2821
|
}
|
|
2781
2822
|
const isWizardStep = WIZARD_STEPS.includes(wizard.step);
|
|
2782
2823
|
const activeWizardSteps = useMemo(
|
|
@@ -2818,13 +2859,15 @@ function EventRegistrationWizard(props) {
|
|
|
2818
2859
|
const currentStepNumber = getStepNumber(wizard.step, activeWizardSteps);
|
|
2819
2860
|
const summaryEvent = wizard.selectedEvent ?? wizard.preSelectedEvent;
|
|
2820
2861
|
const summaryEventPricingType = summaryEvent ? publicEventPricingType(summaryEvent.pricing) : "free";
|
|
2862
|
+
const summaryPriceLabel = summaryEvent ? formatEventPriceDisplay(summaryEvent.pricing) : null;
|
|
2863
|
+
const summaryAvailabilityLabel = summaryEvent?.availableSpots === null || summaryEvent?.availableSpots === void 0 ? null : summaryEvent.availableSpots > 0 ? `${summaryEvent.availableSpots} spots left` : summaryEvent.waitlistEnabled ? "Waitlist available" : "Fully booked";
|
|
2821
2864
|
const waitlistClaimRequiresPortalLogin = wizard.waitlistClaim.requiresPortalLogin && wizard.portalAuthState !== "authenticated" && wizard.portalAuthState !== "checking";
|
|
2822
2865
|
const portalAuthCopy = waitlistClaimRequiresPortalLogin ? {
|
|
2823
2866
|
...EVENT_PORTAL_AUTH_COPY["waitlist-claim"],
|
|
2824
2867
|
description: wizard.waitlistClaim.loginMessage ?? "Log in to continue with your waitlist claim."
|
|
2825
2868
|
} : EVENT_PORTAL_AUTH_COPY.membership;
|
|
2826
2869
|
const showPortalAuthPrompt = waitlistClaimRequiresPortalLogin || wizard.step === "select-tickets" && wizard.portalAuthState !== "authenticated" && wizard.portalAuthState !== "checking" && summaryEventPricingType !== "free";
|
|
2827
|
-
|
|
2870
|
+
const renderRegistrationSurface = (variant) => /* @__PURE__ */ jsxs("div", { className: `er-container${variant === "overlay" ? " er-container--overlay" : ""}`, children: [
|
|
2828
2871
|
isWizardStep && /* @__PURE__ */ jsxs("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
|
|
2829
2872
|
/* @__PURE__ */ jsxs("div", { className: "er-payment-layout-main", children: [
|
|
2830
2873
|
totalSteps > 1 && /* @__PURE__ */ jsx(StepIndicator2, { currentStep: currentStepNumber, totalSteps, stepLabels }),
|
|
@@ -2892,7 +2935,100 @@ function EventRegistrationWizard(props) {
|
|
|
2892
2935
|
}
|
|
2893
2936
|
),
|
|
2894
2937
|
wizard.step === "error" && /* @__PURE__ */ jsx(ErrorStep, { message: wizard.errorMessage, onRetry: wizard.handleRetry })
|
|
2895
|
-
] })
|
|
2938
|
+
] });
|
|
2939
|
+
const isEmbedded = (className ?? "").includes("event-registration--embedded");
|
|
2940
|
+
const overlayEnabled = props.overlayEnabled === true;
|
|
2941
|
+
if (isEmbedded || !overlayEnabled) {
|
|
2942
|
+
return /* @__PURE__ */ jsx(
|
|
2943
|
+
"div",
|
|
2944
|
+
{
|
|
2945
|
+
ref: registrationRootRef,
|
|
2946
|
+
id: EVENT_REGISTRATION_ANCHOR_ID,
|
|
2947
|
+
className: registrationRootClassName,
|
|
2948
|
+
"data-block": "event-registration",
|
|
2949
|
+
children: renderRegistrationSurface("inline")
|
|
2950
|
+
}
|
|
2951
|
+
);
|
|
2952
|
+
}
|
|
2953
|
+
const bookingSummaryMeta = [summaryPriceLabel, summaryAvailabilityLabel].filter(Boolean).join(" \xB7 ");
|
|
2954
|
+
const bookingTicketTypes = getActiveTicketTypes(summaryEvent);
|
|
2955
|
+
const bookingTicketTypesCurrency = summaryEvent?.pricing.kind === "ticket_types" ? summaryEvent.pricing.currency : null;
|
|
2956
|
+
const renderBookingEntry = (base) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2957
|
+
/* @__PURE__ */ jsxs("div", { className: `${base}__info`, children: [
|
|
2958
|
+
/* @__PURE__ */ jsx("span", { className: `${base}__title`, children: "Book this event" }),
|
|
2959
|
+
bookingSummaryMeta && /* @__PURE__ */ jsx("span", { className: `${base}__meta`, children: bookingSummaryMeta }),
|
|
2960
|
+
base === "er-booking-teaser" && bookingTicketTypesCurrency && bookingTicketTypes.length > 0 ? /* @__PURE__ */ jsx("div", { className: "er-booking-teaser__tickets", children: bookingTicketTypes.map((ticketType) => /* @__PURE__ */ jsxs("div", { className: "er-booking-teaser__ticket", children: [
|
|
2961
|
+
/* @__PURE__ */ jsx("span", { className: "er-booking-teaser__ticket-name", children: ticketType.name }),
|
|
2962
|
+
/* @__PURE__ */ jsx("strong", { children: formatTicketTypePrice(ticketType, bookingTicketTypesCurrency) })
|
|
2963
|
+
] }, ticketType.id)) }) : null
|
|
2964
|
+
] }),
|
|
2965
|
+
/* @__PURE__ */ jsx(
|
|
2966
|
+
"button",
|
|
2967
|
+
{
|
|
2968
|
+
type: "button",
|
|
2969
|
+
className: `${base}__cta ${buttonClass}`,
|
|
2970
|
+
onClick: () => setBookingOverlayOpen(true),
|
|
2971
|
+
children: "Book now"
|
|
2972
|
+
}
|
|
2973
|
+
)
|
|
2974
|
+
] });
|
|
2975
|
+
const floatingBookingUi = !bookingOverlayOpen && isWizardStep ? /* @__PURE__ */ jsx("div", { className: "er-booking-bar", children: /* @__PURE__ */ jsx("div", { className: "er-booking-bar__inner", children: renderBookingEntry("er-booking-bar") }) }) : null;
|
|
2976
|
+
const floatingBookingLayer = floatingPortalRoot ? createPortal(
|
|
2977
|
+
/* @__PURE__ */ jsx("div", { className: registrationRootClassName, "data-block": "event-registration", children: floatingBookingUi }),
|
|
2978
|
+
floatingPortalRoot
|
|
2979
|
+
) : floatingBookingUi;
|
|
2980
|
+
const bookingOverlayLayer = bookingOverlayOpen ? /* @__PURE__ */ jsx(
|
|
2981
|
+
ModalShell,
|
|
2982
|
+
{
|
|
2983
|
+
title: "Book this event",
|
|
2984
|
+
titleId: "event-registration-booking-title",
|
|
2985
|
+
onClose: () => setBookingOverlayOpen(false),
|
|
2986
|
+
portal: floatingPortalRoot != null,
|
|
2987
|
+
portalRoot: floatingPortalRoot,
|
|
2988
|
+
portalWrapperClassName: registrationRootClassName,
|
|
2989
|
+
portalWrapperProps: { "data-block": "event-registration" },
|
|
2990
|
+
overlayClassName: "er-booking-overlay",
|
|
2991
|
+
modalClassName: "er-booking-overlay__panel",
|
|
2992
|
+
renderHeader: ({ closeButtonRef, onClose, title, titleId }) => /* @__PURE__ */ jsxs("div", { className: "er-booking-overlay__header", children: [
|
|
2993
|
+
/* @__PURE__ */ jsx("h2", { className: "er-booking-overlay__title", id: titleId, children: title }),
|
|
2994
|
+
/* @__PURE__ */ jsx(
|
|
2995
|
+
"button",
|
|
2996
|
+
{
|
|
2997
|
+
ref: closeButtonRef,
|
|
2998
|
+
type: "button",
|
|
2999
|
+
className: "er-booking-overlay__close",
|
|
3000
|
+
onClick: onClose,
|
|
3001
|
+
"aria-label": "Close booking",
|
|
3002
|
+
children: "\xD7"
|
|
3003
|
+
}
|
|
3004
|
+
)
|
|
3005
|
+
] }),
|
|
3006
|
+
children: renderRegistrationSurface("overlay")
|
|
3007
|
+
}
|
|
3008
|
+
) : null;
|
|
3009
|
+
return /* @__PURE__ */ jsxs(
|
|
3010
|
+
"div",
|
|
3011
|
+
{
|
|
3012
|
+
ref: registrationRootRef,
|
|
3013
|
+
id: EVENT_REGISTRATION_ANCHOR_ID,
|
|
3014
|
+
className: registrationRootClassName,
|
|
3015
|
+
"data-block": "event-registration",
|
|
3016
|
+
children: [
|
|
3017
|
+
isWizardStep ? (
|
|
3018
|
+
// In-flow: a lightweight teaser at the block's position. The full wizard
|
|
3019
|
+
// lives in the sheet, so there is only ever one form surface mounted.
|
|
3020
|
+
/* @__PURE__ */ jsx("div", { className: "er-booking-teaser", children: renderBookingEntry("er-booking-teaser") })
|
|
3021
|
+
) : (
|
|
3022
|
+
// Terminal states (success, error, payment verification on redirect
|
|
3023
|
+
// return) render in the page where the visitor lands, unless the sheet is
|
|
3024
|
+
// open and already showing them.
|
|
3025
|
+
!bookingOverlayOpen && renderRegistrationSurface("inline")
|
|
3026
|
+
),
|
|
3027
|
+
floatingBookingLayer,
|
|
3028
|
+
bookingOverlayLayer
|
|
3029
|
+
]
|
|
3030
|
+
}
|
|
3031
|
+
);
|
|
2896
3032
|
}
|
|
2897
3033
|
function isPastOccurrence(startsAt) {
|
|
2898
3034
|
if (!startsAt) return false;
|
|
@@ -3081,6 +3217,32 @@ function TeamMemberName({
|
|
|
3081
3217
|
}) {
|
|
3082
3218
|
return profilePath ? /* @__PURE__ */ jsx("a", { href: profilePath, className: "rb-hover-opacity-80", children: /* @__PURE__ */ jsx("strong", { children: name }) }) : /* @__PURE__ */ jsx("strong", { children: name });
|
|
3083
3219
|
}
|
|
3220
|
+
function formatTicketTypePrice2(ticketType, currency) {
|
|
3221
|
+
return formatCurrencyAmount(ticketType.priceAmount, currency, { decimals: "auto" });
|
|
3222
|
+
}
|
|
3223
|
+
function getActiveTicketTypes2(event) {
|
|
3224
|
+
return event.pricing.kind === "ticket_types" ? event.pricing.ticketTypes.filter((ticketType) => ticketType.isActive).sort((left, right) => left.sortOrder - right.sortOrder) : [];
|
|
3225
|
+
}
|
|
3226
|
+
function TicketTypePriceList({
|
|
3227
|
+
ticketTypes,
|
|
3228
|
+
currency
|
|
3229
|
+
}) {
|
|
3230
|
+
if (ticketTypes.length === 0) return null;
|
|
3231
|
+
return /* @__PURE__ */ jsx("div", { className: "rb-mt-3 rb-flex rb-flex-col rb-gap-2", children: ticketTypes.map((ticketType) => /* @__PURE__ */ jsxs(
|
|
3232
|
+
"div",
|
|
3233
|
+
{
|
|
3234
|
+
className: "rb-flex rb-items-start rb-justify-between rb-gap-4",
|
|
3235
|
+
children: [
|
|
3236
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
3237
|
+
/* @__PURE__ */ jsx("p", { children: ticketType.name }),
|
|
3238
|
+
ticketType.description ? /* @__PURE__ */ jsx("p", { className: "rb-caption status-muted", children: ticketType.description }) : null
|
|
3239
|
+
] }),
|
|
3240
|
+
/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx("strong", { children: formatTicketTypePrice2(ticketType, currency) }) })
|
|
3241
|
+
]
|
|
3242
|
+
},
|
|
3243
|
+
ticketType.id
|
|
3244
|
+
)) });
|
|
3245
|
+
}
|
|
3084
3246
|
function EventDetailsView({
|
|
3085
3247
|
selection,
|
|
3086
3248
|
showVenue,
|
|
@@ -3115,6 +3277,7 @@ function EventDetailsView({
|
|
|
3115
3277
|
const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
|
|
3116
3278
|
const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
|
|
3117
3279
|
const eventCostLabel = shouldShowEventCost ? formatEventPrice(selected) : null;
|
|
3280
|
+
const ticketTypes = shouldShowEventCost ? getActiveTicketTypes2(selected) : [];
|
|
3118
3281
|
const acceptedItems = [];
|
|
3119
3282
|
if (showAcceptedPasses) {
|
|
3120
3283
|
acceptedItems.push(...applicablePasses.map((p) => p.name));
|
|
@@ -3171,6 +3334,7 @@ function EventDetailsView({
|
|
|
3171
3334
|
/* @__PURE__ */ jsx("div", { className: "rb-label rb-mb-2", children: "Cost" }),
|
|
3172
3335
|
/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx("strong", { children: eventCostLabel }) }),
|
|
3173
3336
|
autoApplyDiscount ? /* @__PURE__ */ jsx("p", { className: "rb-caption rb-mt-1", children: formatAutoApplyDiscountLine(autoApplyDiscount, eventPricingCurrency) }) : null,
|
|
3337
|
+
/* @__PURE__ */ jsx(TicketTypePriceList, { ticketTypes, currency: eventPricingCurrency }),
|
|
3174
3338
|
hasAcceptedItems ? /* @__PURE__ */ jsxs("p", { className: "rb-caption rb-mt-1", children: [
|
|
3175
3339
|
"You can also attend with: ",
|
|
3176
3340
|
acceptedItems.join(", ")
|
|
@@ -3534,9 +3698,74 @@ var EventPaginatedListView = ({
|
|
|
3534
3698
|
}
|
|
3535
3699
|
);
|
|
3536
3700
|
};
|
|
3701
|
+
|
|
3702
|
+
// ../blocks/src/system/runtime/hooks/loadStateError.ts
|
|
3703
|
+
function toError(error, fallbackMessage) {
|
|
3704
|
+
return error instanceof Error ? error : new Error(fallbackMessage);
|
|
3705
|
+
}
|
|
3706
|
+
|
|
3707
|
+
// ../blocks/src/system/runtime/hooks/useEventPagination.state.ts
|
|
3708
|
+
function createInitialEventPaginationLoadState(events, pageSize) {
|
|
3709
|
+
return {
|
|
3710
|
+
kind: "ready",
|
|
3711
|
+
events,
|
|
3712
|
+
hasMore: hasMoreEventPages(events, pageSize)
|
|
3713
|
+
};
|
|
3714
|
+
}
|
|
3715
|
+
function eventPaginationLoadReducer(state, action) {
|
|
3716
|
+
switch (action.type) {
|
|
3717
|
+
case "started":
|
|
3718
|
+
return {
|
|
3719
|
+
kind: "loading",
|
|
3720
|
+
events: state.events,
|
|
3721
|
+
hasMore: action.reset ? true : state.hasMore
|
|
3722
|
+
};
|
|
3723
|
+
case "succeeded":
|
|
3724
|
+
return {
|
|
3725
|
+
kind: "ready",
|
|
3726
|
+
events: action.events,
|
|
3727
|
+
hasMore: action.hasMore
|
|
3728
|
+
};
|
|
3729
|
+
case "failed":
|
|
3730
|
+
return {
|
|
3731
|
+
kind: "error",
|
|
3732
|
+
events: state.events,
|
|
3733
|
+
hasMore: state.hasMore,
|
|
3734
|
+
error: action.error
|
|
3735
|
+
};
|
|
3736
|
+
case "synced":
|
|
3737
|
+
return createInitialEventPaginationLoadState(action.events, action.pageSize);
|
|
3738
|
+
default:
|
|
3739
|
+
return assertNever11(action);
|
|
3740
|
+
}
|
|
3741
|
+
}
|
|
3537
3742
|
function getEventIdentity(event) {
|
|
3538
3743
|
return event.occurrenceId || event.id;
|
|
3539
3744
|
}
|
|
3745
|
+
function mergeEventPaginationEvents(existingEvents, newEvents) {
|
|
3746
|
+
const existingIds = new Set(existingEvents.map(getEventIdentity));
|
|
3747
|
+
const uniqueNew = newEvents.filter(
|
|
3748
|
+
(event) => !existingIds.has(getEventIdentity(event))
|
|
3749
|
+
);
|
|
3750
|
+
return [...existingEvents, ...uniqueNew];
|
|
3751
|
+
}
|
|
3752
|
+
function toEventPaginationLoadError(error) {
|
|
3753
|
+
return toError(error, "Unknown error");
|
|
3754
|
+
}
|
|
3755
|
+
function getEventPaginationEvents(state) {
|
|
3756
|
+
return state.events;
|
|
3757
|
+
}
|
|
3758
|
+
function isEventPaginationLoading(state) {
|
|
3759
|
+
return state.kind === "loading";
|
|
3760
|
+
}
|
|
3761
|
+
function getEventPaginationError(state) {
|
|
3762
|
+
return state.kind === "error" ? state.error : null;
|
|
3763
|
+
}
|
|
3764
|
+
function hasMoreEventPages(events, pageSize) {
|
|
3765
|
+
return events.length >= pageSize;
|
|
3766
|
+
}
|
|
3767
|
+
|
|
3768
|
+
// ../blocks/src/system/runtime/hooks/useEventPagination.ts
|
|
3540
3769
|
function getEventsKey(events) {
|
|
3541
3770
|
return events.map((e) => `${getEventIdentity(e)}:${e.startsAt}`).join("|");
|
|
3542
3771
|
}
|
|
@@ -3559,10 +3788,15 @@ function useEventPagination({
|
|
|
3559
3788
|
useEffect(() => {
|
|
3560
3789
|
initialEventsRef.current = initialEvents;
|
|
3561
3790
|
}, [initialEventsKey]);
|
|
3562
|
-
const [
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3791
|
+
const [loadState, dispatchLoadState] = useReducer(
|
|
3792
|
+
eventPaginationLoadReducer,
|
|
3793
|
+
{ events: initialEvents, pageSize },
|
|
3794
|
+
({ events: events2, pageSize: initialPageSize }) => createInitialEventPaginationLoadState(events2, initialPageSize)
|
|
3795
|
+
);
|
|
3796
|
+
const events = getEventPaginationEvents(loadState);
|
|
3797
|
+
const loading = isEventPaginationLoading(loadState);
|
|
3798
|
+
const error = getEventPaginationError(loadState);
|
|
3799
|
+
const hasMore = loadState.hasMore;
|
|
3566
3800
|
const normalizedCategoryIds = normalizeCsvString(filters?.categoryIds);
|
|
3567
3801
|
const normalizedStaffMemberId = normalizeOptionalId(filters?.staffMemberId);
|
|
3568
3802
|
const normalizedVenueId = normalizeOptionalId(filters?.venueId);
|
|
@@ -3587,9 +3821,11 @@ function useEventPagination({
|
|
|
3587
3821
|
if (loadingRef.current) return;
|
|
3588
3822
|
if (!hasMoreRef.current && !options.reset) return;
|
|
3589
3823
|
const currentRequestId = ++requestIdRef.current;
|
|
3590
|
-
|
|
3824
|
+
dispatchLoadState({ type: "started", reset: options.reset });
|
|
3591
3825
|
loadingRef.current = true;
|
|
3592
|
-
|
|
3826
|
+
if (options.reset) {
|
|
3827
|
+
hasMoreRef.current = true;
|
|
3828
|
+
}
|
|
3593
3829
|
try {
|
|
3594
3830
|
const currentEvents = eventsRef.current;
|
|
3595
3831
|
const lastEvent = options.reset ? void 0 : currentEvents[currentEvents.length - 1];
|
|
@@ -3610,29 +3846,25 @@ function useEventPagination({
|
|
|
3610
3846
|
venueId: normalizedVenueId ?? void 0
|
|
3611
3847
|
});
|
|
3612
3848
|
if (currentRequestId === requestIdRef.current) {
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
eventsRef.current = updated;
|
|
3622
|
-
return updated;
|
|
3623
|
-
});
|
|
3624
|
-
}
|
|
3625
|
-
const nextHasMore = newEvents.length >= pageSize;
|
|
3626
|
-
setHasMore(nextHasMore);
|
|
3849
|
+
const nextEvents = options.reset ? newEvents : mergeEventPaginationEvents(eventsRef.current, newEvents);
|
|
3850
|
+
const nextHasMore = hasMoreEventPages(newEvents, pageSize);
|
|
3851
|
+
dispatchLoadState({
|
|
3852
|
+
type: "succeeded",
|
|
3853
|
+
events: nextEvents,
|
|
3854
|
+
hasMore: nextHasMore
|
|
3855
|
+
});
|
|
3856
|
+
eventsRef.current = [...nextEvents];
|
|
3627
3857
|
hasMoreRef.current = nextHasMore;
|
|
3628
3858
|
}
|
|
3629
3859
|
} catch (err) {
|
|
3630
3860
|
if (currentRequestId === requestIdRef.current) {
|
|
3631
|
-
|
|
3861
|
+
dispatchLoadState({
|
|
3862
|
+
type: "failed",
|
|
3863
|
+
error: toEventPaginationLoadError(err)
|
|
3864
|
+
});
|
|
3632
3865
|
}
|
|
3633
3866
|
} finally {
|
|
3634
3867
|
if (currentRequestId === requestIdRef.current) {
|
|
3635
|
-
setLoading(false);
|
|
3636
3868
|
loadingRef.current = false;
|
|
3637
3869
|
}
|
|
3638
3870
|
}
|
|
@@ -3674,19 +3906,20 @@ function useEventPagination({
|
|
|
3674
3906
|
try {
|
|
3675
3907
|
if (filtersMatchInitial) {
|
|
3676
3908
|
if (!prevFiltersMatchInitial || prevInitialEventsKey !== initialEventsKey) {
|
|
3677
|
-
|
|
3909
|
+
dispatchLoadState({
|
|
3910
|
+
type: "synced",
|
|
3911
|
+
events: latestInitialEvents,
|
|
3912
|
+
pageSize
|
|
3913
|
+
});
|
|
3678
3914
|
eventsRef.current = latestInitialEvents;
|
|
3679
3915
|
}
|
|
3680
|
-
const nextHasMore = latestInitialEvents
|
|
3916
|
+
const nextHasMore = hasMoreEventPages(latestInitialEvents, pageSize);
|
|
3681
3917
|
if (hasMoreRef.current !== nextHasMore) {
|
|
3682
|
-
setHasMore(nextHasMore);
|
|
3683
3918
|
hasMoreRef.current = nextHasMore;
|
|
3684
3919
|
}
|
|
3685
|
-
if (error !== null) setError(null);
|
|
3686
3920
|
return;
|
|
3687
3921
|
}
|
|
3688
3922
|
if (prevFiltersMatchInitial || prevFiltersKey !== filtersKey) {
|
|
3689
|
-
setHasMore(true);
|
|
3690
3923
|
hasMoreRef.current = true;
|
|
3691
3924
|
void fetchPage({ reset: true });
|
|
3692
3925
|
}
|
|
@@ -3695,7 +3928,7 @@ function useEventPagination({
|
|
|
3695
3928
|
prevInitialEventsKeyRef.current = initialEventsKey;
|
|
3696
3929
|
prevFiltersKeyRef.current = filtersKey;
|
|
3697
3930
|
}
|
|
3698
|
-
}, [
|
|
3931
|
+
}, [fetchPage, filtersKey, filtersMatchInitial, initialEventsKey, pageSize]);
|
|
3699
3932
|
return {
|
|
3700
3933
|
events,
|
|
3701
3934
|
loading,
|
|
@@ -3704,6 +3937,43 @@ function useEventPagination({
|
|
|
3704
3937
|
loadMore
|
|
3705
3938
|
};
|
|
3706
3939
|
}
|
|
3940
|
+
|
|
3941
|
+
// ../blocks/src/system/runtime/hooks/useEventFilters.state.ts
|
|
3942
|
+
var EMPTY_EVENT_FILTERS = Object.freeze({
|
|
3943
|
+
categories: [],
|
|
3944
|
+
venues: [],
|
|
3945
|
+
staffMembers: [],
|
|
3946
|
+
labels: Object.freeze({ courseOption: "Course" })
|
|
3947
|
+
});
|
|
3948
|
+
function createInitialEventFiltersLoadState() {
|
|
3949
|
+
return { kind: "idle", filters: EMPTY_EVENT_FILTERS };
|
|
3950
|
+
}
|
|
3951
|
+
function eventFiltersLoadReducer(state, action) {
|
|
3952
|
+
switch (action.type) {
|
|
3953
|
+
case "started":
|
|
3954
|
+
return { kind: "loading", filters: state.filters };
|
|
3955
|
+
case "succeeded":
|
|
3956
|
+
return { kind: "loaded", filters: action.filters };
|
|
3957
|
+
case "failed":
|
|
3958
|
+
return { kind: "error", filters: state.filters, error: action.error };
|
|
3959
|
+
default:
|
|
3960
|
+
return assertNever11(action);
|
|
3961
|
+
}
|
|
3962
|
+
}
|
|
3963
|
+
function toEventFiltersLoadError(error) {
|
|
3964
|
+
return toError(error, "Failed to load filters");
|
|
3965
|
+
}
|
|
3966
|
+
function getEventFiltersData(state) {
|
|
3967
|
+
return state.filters;
|
|
3968
|
+
}
|
|
3969
|
+
function isEventFiltersLoading(state) {
|
|
3970
|
+
return state.kind === "loading";
|
|
3971
|
+
}
|
|
3972
|
+
function getEventFiltersError(state) {
|
|
3973
|
+
return state.kind === "error" ? state.error : null;
|
|
3974
|
+
}
|
|
3975
|
+
|
|
3976
|
+
// ../blocks/src/system/runtime/hooks/useEventFilters.ts
|
|
3707
3977
|
function useEventFilters({
|
|
3708
3978
|
showCategoryFilter = "auto",
|
|
3709
3979
|
showVenueFilter = false,
|
|
@@ -3717,14 +3987,14 @@ function useEventFilters({
|
|
|
3717
3987
|
preFilterScheduleScope
|
|
3718
3988
|
} = {}) {
|
|
3719
3989
|
const api = useBlockApi();
|
|
3720
|
-
const [
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
const
|
|
3727
|
-
const
|
|
3990
|
+
const [loadState, dispatchLoadState] = useReducer(
|
|
3991
|
+
eventFiltersLoadReducer,
|
|
3992
|
+
void 0,
|
|
3993
|
+
createInitialEventFiltersLoadState
|
|
3994
|
+
);
|
|
3995
|
+
const filters = getEventFiltersData(loadState);
|
|
3996
|
+
const loading = isEventFiltersLoading(loadState);
|
|
3997
|
+
const error = getEventFiltersError(loadState);
|
|
3728
3998
|
const [selectedKind, setSelectedKindState] = useState("all");
|
|
3729
3999
|
const [selectedCategoryId, setSelectedCategoryId] = useState("all");
|
|
3730
4000
|
const [selectedStaffMemberId, setSelectedStaffMemberId] = useState("all");
|
|
@@ -3759,7 +4029,7 @@ function useEventFilters({
|
|
|
3759
4029
|
const needFilters = showCategoryFilter !== "never" && fixedKind !== "courses" || showVenueFilter || showStaffFilter;
|
|
3760
4030
|
if (!needFilters) return;
|
|
3761
4031
|
hasFetchedRef.current = true;
|
|
3762
|
-
|
|
4032
|
+
dispatchLoadState({ type: "started" });
|
|
3763
4033
|
api.getEventFilters({
|
|
3764
4034
|
categoryIds: allowedCategoryIds.length > 0 ? allowedCategoryIds.join(",") : void 0,
|
|
3765
4035
|
venueId: fixedVenueId ?? void 0,
|
|
@@ -3769,12 +4039,12 @@ function useEventFilters({
|
|
|
3769
4039
|
eventPresets: fixedEventPresets,
|
|
3770
4040
|
scheduleScope: fixedScheduleScope
|
|
3771
4041
|
}).then((data) => {
|
|
3772
|
-
|
|
3773
|
-
setError(null);
|
|
4042
|
+
dispatchLoadState({ type: "succeeded", filters: data });
|
|
3774
4043
|
}).catch((err) => {
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
4044
|
+
dispatchLoadState({
|
|
4045
|
+
type: "failed",
|
|
4046
|
+
error: toEventFiltersLoadError(err)
|
|
4047
|
+
});
|
|
3778
4048
|
});
|
|
3779
4049
|
}, [
|
|
3780
4050
|
allowedCategoryIds,
|
|
@@ -4106,6 +4376,31 @@ var TabBar = ({
|
|
|
4106
4376
|
}
|
|
4107
4377
|
);
|
|
4108
4378
|
};
|
|
4379
|
+
|
|
4380
|
+
// ../blocks/src/system/runtime/hooks/useCalendarEvents.state.ts
|
|
4381
|
+
function calendarEventCacheLoadReducer(_state, action) {
|
|
4382
|
+
switch (action.type) {
|
|
4383
|
+
case "started":
|
|
4384
|
+
return { kind: "loading" };
|
|
4385
|
+
case "succeeded":
|
|
4386
|
+
return { kind: "idle" };
|
|
4387
|
+
case "failed":
|
|
4388
|
+
return { kind: "error", error: action.error };
|
|
4389
|
+
default:
|
|
4390
|
+
return assertNever11(action);
|
|
4391
|
+
}
|
|
4392
|
+
}
|
|
4393
|
+
function toCalendarEventCacheLoadError(error) {
|
|
4394
|
+
return toError(error, "Unknown error");
|
|
4395
|
+
}
|
|
4396
|
+
function isCalendarEventCacheLoading(state) {
|
|
4397
|
+
return state.kind === "loading";
|
|
4398
|
+
}
|
|
4399
|
+
function getCalendarEventCacheError(state) {
|
|
4400
|
+
return state.kind === "error" ? state.error : null;
|
|
4401
|
+
}
|
|
4402
|
+
|
|
4403
|
+
// ../blocks/src/system/runtime/hooks/useCalendarEvents.ts
|
|
4109
4404
|
var CALENDAR_FETCH_LIMIT = 200;
|
|
4110
4405
|
function getMonthKey(date) {
|
|
4111
4406
|
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}`;
|
|
@@ -4149,8 +4444,10 @@ function useCalendarEventCache({
|
|
|
4149
4444
|
stage
|
|
4150
4445
|
}) {
|
|
4151
4446
|
const { getPublicEvents } = useBlockApi();
|
|
4152
|
-
const [
|
|
4153
|
-
|
|
4447
|
+
const [loadState, dispatchLoadState] = useReducer(
|
|
4448
|
+
calendarEventCacheLoadReducer,
|
|
4449
|
+
{ kind: "idle" }
|
|
4450
|
+
);
|
|
4154
4451
|
const [cacheVersion, setCacheVersion] = useState(0);
|
|
4155
4452
|
const filtersKey = useMemo(
|
|
4156
4453
|
() => getEventRuntimeFiltersKey(filters),
|
|
@@ -4195,8 +4492,7 @@ function useCalendarEventCache({
|
|
|
4195
4492
|
if (monthsToFetch.length === 0) return;
|
|
4196
4493
|
monthsToFetch.forEach((m) => fetchingRef.current.add(m));
|
|
4197
4494
|
const currentRequestId = ++requestIdRef.current;
|
|
4198
|
-
|
|
4199
|
-
setError(null);
|
|
4495
|
+
dispatchLoadState({ type: "started" });
|
|
4200
4496
|
try {
|
|
4201
4497
|
const result = await getPublicEvents({
|
|
4202
4498
|
from,
|
|
@@ -4228,16 +4524,17 @@ function useCalendarEventCache({
|
|
|
4228
4524
|
}
|
|
4229
4525
|
}
|
|
4230
4526
|
setCacheVersion((v) => v + 1);
|
|
4527
|
+
dispatchLoadState({ type: "succeeded" });
|
|
4231
4528
|
}
|
|
4232
4529
|
} catch (err) {
|
|
4233
4530
|
if (currentRequestId === requestIdRef.current) {
|
|
4234
|
-
|
|
4531
|
+
dispatchLoadState({
|
|
4532
|
+
type: "failed",
|
|
4533
|
+
error: toCalendarEventCacheLoadError(err)
|
|
4534
|
+
});
|
|
4235
4535
|
}
|
|
4236
4536
|
} finally {
|
|
4237
4537
|
monthsToFetch.forEach((m) => fetchingRef.current.delete(m));
|
|
4238
|
-
if (currentRequestId === requestIdRef.current) {
|
|
4239
|
-
setLoading(false);
|
|
4240
|
-
}
|
|
4241
4538
|
}
|
|
4242
4539
|
}, [
|
|
4243
4540
|
getPublicEvents,
|
|
@@ -4287,8 +4584,8 @@ function useCalendarEventCache({
|
|
|
4287
4584
|
}, [viewDate, cacheVersion]);
|
|
4288
4585
|
return {
|
|
4289
4586
|
events,
|
|
4290
|
-
loading,
|
|
4291
|
-
error
|
|
4587
|
+
loading: isCalendarEventCacheLoading(loadState),
|
|
4588
|
+
error: getCalendarEventCacheError(loadState)
|
|
4292
4589
|
};
|
|
4293
4590
|
}
|
|
4294
4591
|
function useCalendarEvents({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FeedbackMessage } from './chunk-
|
|
2
|
-
import { themeButtonClassName } from './chunk-
|
|
3
|
-
import { clsx_default } from './chunk-
|
|
1
|
+
import { FeedbackMessage } from './chunk-STJ2NCQM.mjs';
|
|
2
|
+
import { themeButtonClassName } from './chunk-UQFY4AHX.mjs';
|
|
3
|
+
import { formatCurrencyAmount, clsx_default } from './chunk-25W2EQUN.mjs';
|
|
4
4
|
import { useId } from 'react';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -213,10 +213,7 @@ var DEFAULT_CURRENCY = "GBP";
|
|
|
213
213
|
|
|
214
214
|
// ../blocks/src/system/runtime/shared/utils/formatting.ts
|
|
215
215
|
function formatPrice(cents, currency = DEFAULT_CURRENCY, locale) {
|
|
216
|
-
return
|
|
217
|
-
style: "currency",
|
|
218
|
-
currency: currency.toUpperCase()
|
|
219
|
-
}).format(cents / 100);
|
|
216
|
+
return formatCurrencyAmount(cents, currency, { locale });
|
|
220
217
|
}
|
|
221
218
|
|
|
222
219
|
// ../blocks/src/system/runtime/shared/utils/portalLogout.ts
|