@session-services/web-elements 0.1.23 → 0.1.25
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/cjs/session-services-ticketing.cjs.entry.js +218 -71
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.js +81 -14
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.logic.js +93 -9
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.logic.test.js +183 -0
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.test.js +106 -0
- package/dist/components/session-services-ticketing.js +218 -71
- package/dist/esm/session-services-ticketing.entry.js +218 -71
- package/dist/session-services-elements/p-edf63ff2.entry.js +1 -0
- package/dist/session-services-elements/session-services-elements.esm.js +1 -1
- package/dist/types/components/session-services-ticketing/session-services-ticketing.d.ts +3 -0
- package/dist/types/components/session-services-ticketing/session-services-ticketing.logic.d.ts +11 -6
- package/package.json +2 -2
- package/dist/session-services-elements/p-ddf8ca4b.entry.js +0 -1
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { createClient } from "@session-services/sdk";
|
|
2
|
-
import { createAnalytics, formatPrice } from "@session-services/sdk/analytics";
|
|
2
|
+
import { buildOrderChannel, createAnalytics, formatPrice, } from "@session-services/sdk/analytics";
|
|
3
3
|
import { formatNaiveDateTime } from "@session-services/utils/naive-datetime";
|
|
4
|
-
import { normalizeCouponCode } from "@session-services/utils/ticket-quote";
|
|
5
4
|
import { isSectionSoldOut } from "@session-services/utils/ticket-availability";
|
|
5
|
+
import { normalizeCouponCode } from "@session-services/utils/ticket-quote";
|
|
6
6
|
import { Host,
|
|
7
7
|
// biome-ignore lint/correctness/noUnusedImports: h is required by Stencil JSX transform
|
|
8
8
|
h, } from "@stencil/core";
|
|
9
9
|
import { admissionPriceSavings, discountCouponFromSearch, getAdmissionDisplayState, getAdmissionPriceDisplay, getTicketingState, parseSelectionKey, previewQuoteItems, priceTotal, quoteItemsBySelection, selectionKey, topLevelTicketItems, visibleAdmissions, } from "./session-services-ticketing.logic";
|
|
10
10
|
const quoteTotal = (quote) => quote.price?.total ?? 0;
|
|
11
11
|
const QUOTE_DEBOUNCE_MS = 150;
|
|
12
|
+
const STICKY_CHECKOUT_SCROLL_OFFSET_PX = 100;
|
|
12
13
|
function objectValue(value, key) {
|
|
13
14
|
if (!value || typeof value !== "object")
|
|
14
15
|
return undefined;
|
|
@@ -329,9 +330,11 @@ export class SessionsTicketing {
|
|
|
329
330
|
this.passcodeDenied = false;
|
|
330
331
|
const response = await this.client.event.get({
|
|
331
332
|
key: this.eventId,
|
|
333
|
+
couponCode: this.appliedCouponCode || undefined,
|
|
332
334
|
passcode: this.activePasscode || undefined,
|
|
333
335
|
});
|
|
334
336
|
this.event = response.event;
|
|
337
|
+
this.pruneSelectedItems(response.event);
|
|
335
338
|
this.trackLoadedEvent(response.event);
|
|
336
339
|
await this.updatePreviewQuote();
|
|
337
340
|
}
|
|
@@ -344,6 +347,15 @@ export class SessionsTicketing {
|
|
|
344
347
|
this.loading = false;
|
|
345
348
|
}
|
|
346
349
|
}
|
|
350
|
+
pruneSelectedItems(event) {
|
|
351
|
+
const keys = new Set(event.admissions.map((admission) => selectionKey(admission.id, admission.sectionId ?? null)));
|
|
352
|
+
const selected = Array.from(this.selectedItems).filter(([key]) => keys.has(key));
|
|
353
|
+
if (selected.length === this.selectedItems.size)
|
|
354
|
+
return;
|
|
355
|
+
this.selectedItems = new Map(selected);
|
|
356
|
+
this.quote = null;
|
|
357
|
+
this.quoteError = null;
|
|
358
|
+
}
|
|
347
359
|
trackLoadedEvent(event) {
|
|
348
360
|
this.setupAnalytics(event);
|
|
349
361
|
this.trackProductViewed(event);
|
|
@@ -630,6 +642,7 @@ export class SessionsTicketing {
|
|
|
630
642
|
this.couponInput = "";
|
|
631
643
|
const coupon = this.appliedCouponCode;
|
|
632
644
|
this.appliedCouponCode = "";
|
|
645
|
+
await this.loadEventData();
|
|
633
646
|
this.previewRequestId++;
|
|
634
647
|
this.previewLoading = false;
|
|
635
648
|
this.previewQuote = null;
|
|
@@ -638,8 +651,17 @@ export class SessionsTicketing {
|
|
|
638
651
|
async applyCartCoupon(coupon) {
|
|
639
652
|
this.requestId++;
|
|
640
653
|
const currentId = this.requestId;
|
|
654
|
+
const previousCoupon = this.appliedCouponCode;
|
|
641
655
|
try {
|
|
642
656
|
this.quoteLoading = true;
|
|
657
|
+
this.appliedCouponCode = coupon;
|
|
658
|
+
await this.loadEventData();
|
|
659
|
+
if (currentId !== this.requestId)
|
|
660
|
+
return;
|
|
661
|
+
if (this.selectedItems.size === 0) {
|
|
662
|
+
await this.applyPreviewCoupon(coupon);
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
643
665
|
const response = await this.fetchCartQuote(coupon);
|
|
644
666
|
if (currentId !== this.requestId)
|
|
645
667
|
return;
|
|
@@ -649,6 +671,9 @@ export class SessionsTicketing {
|
|
|
649
671
|
this.trackCouponApplied(coupon, response.quote);
|
|
650
672
|
}
|
|
651
673
|
catch (_err) {
|
|
674
|
+
if (currentId === this.requestId) {
|
|
675
|
+
this.appliedCouponCode = previousCoupon;
|
|
676
|
+
}
|
|
652
677
|
this.handleCouponError(currentId);
|
|
653
678
|
this.trackCouponDenied(coupon);
|
|
654
679
|
}
|
|
@@ -659,6 +684,17 @@ export class SessionsTicketing {
|
|
|
659
684
|
}
|
|
660
685
|
}
|
|
661
686
|
async applyPreviewCoupon(coupon) {
|
|
687
|
+
const previousCoupon = this.appliedCouponCode;
|
|
688
|
+
this.appliedCouponCode = coupon;
|
|
689
|
+
try {
|
|
690
|
+
await this.loadEventData();
|
|
691
|
+
}
|
|
692
|
+
catch (_err) {
|
|
693
|
+
this.appliedCouponCode = previousCoupon;
|
|
694
|
+
this.setCouponError();
|
|
695
|
+
this.trackCouponDenied(coupon);
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
662
698
|
const event = this.event;
|
|
663
699
|
if (!event)
|
|
664
700
|
return;
|
|
@@ -703,6 +739,14 @@ export class SessionsTicketing {
|
|
|
703
739
|
const coupon = this.appliedCouponCode;
|
|
704
740
|
try {
|
|
705
741
|
this.quoteLoading = true;
|
|
742
|
+
this.appliedCouponCode = "";
|
|
743
|
+
await this.loadEventData();
|
|
744
|
+
if (this.selectedItems.size === 0) {
|
|
745
|
+
this.couponInput = "";
|
|
746
|
+
this.previewQuote = null;
|
|
747
|
+
this.trackCouponRemoved(coupon, null);
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
706
750
|
const response = await this.fetchCartQuote("");
|
|
707
751
|
if (currentId !== this.requestId)
|
|
708
752
|
return;
|
|
@@ -787,6 +831,7 @@ export class SessionsTicketing {
|
|
|
787
831
|
items: this.getCheckoutItems(this.quote),
|
|
788
832
|
couponCode: this.appliedCouponCode || undefined,
|
|
789
833
|
returnUrl: this.returnUrl,
|
|
834
|
+
channel: buildOrderChannel("elements"),
|
|
790
835
|
});
|
|
791
836
|
this.handleCheckoutOrder(result.order);
|
|
792
837
|
}
|
|
@@ -803,6 +848,14 @@ export class SessionsTicketing {
|
|
|
803
848
|
products: this.getCheckoutProducts(),
|
|
804
849
|
});
|
|
805
850
|
}
|
|
851
|
+
trackExternalTicketClick(url, surface) {
|
|
852
|
+
this.trackEvent("Checkout Started", {
|
|
853
|
+
ticketing_mode: "external",
|
|
854
|
+
external_ticket_url: url,
|
|
855
|
+
external_ticket_domain: urlDomain(url),
|
|
856
|
+
cta_surface: surface,
|
|
857
|
+
});
|
|
858
|
+
}
|
|
806
859
|
getCheckoutItems(quote) {
|
|
807
860
|
return quote.items.map((item) => ({
|
|
808
861
|
quantity: item.quantity,
|
|
@@ -829,14 +882,21 @@ export class SessionsTicketing {
|
|
|
829
882
|
handleStickyCheckoutClick(state) {
|
|
830
883
|
if (state.isDoorOnly || !hasQuoteItems(this.quote)) {
|
|
831
884
|
this.promptTicketSelection();
|
|
832
|
-
this.
|
|
833
|
-
behavior: "smooth",
|
|
834
|
-
block: "start",
|
|
835
|
-
});
|
|
885
|
+
this.scrollToTicketSelector();
|
|
836
886
|
return;
|
|
837
887
|
}
|
|
838
888
|
this.initiateCheckout().catch(() => undefined);
|
|
839
889
|
}
|
|
890
|
+
scrollToTicketSelector() {
|
|
891
|
+
const target = this.host.shadowRoot?.querySelector(".tickets-wrapper") ??
|
|
892
|
+
this.host;
|
|
893
|
+
window.scrollTo({
|
|
894
|
+
behavior: "smooth",
|
|
895
|
+
top: Math.max(target.getBoundingClientRect().top +
|
|
896
|
+
window.scrollY -
|
|
897
|
+
STICKY_CHECKOUT_SCROLL_OFFSET_PX, 0),
|
|
898
|
+
});
|
|
899
|
+
}
|
|
840
900
|
getCartProducts() {
|
|
841
901
|
if (!this.quote)
|
|
842
902
|
return [];
|
|
@@ -939,7 +999,7 @@ export class SessionsTicketing {
|
|
|
939
999
|
renderQuantityControls(admission, sectionId, disabled, maxQuantity) {
|
|
940
1000
|
const key = selectionKey(admission.id, sectionId);
|
|
941
1001
|
const quantity = this.selectedItems.get(key) || 0;
|
|
942
|
-
return (h("div", { class: "quantity-controls" }, h("button", { type: "button", class: "quantity-btn decrease", onClick: () => this.handleQuantityDecrease(admission.id, sectionId), disabled: disabled || quantity === 0, "aria-label": "Decrease quantity" }, "\u2212"), h("input", { class: "quantity-value", type: "number", min: "0", max: maxQuantity, inputmode: "numeric", value: quantity, onInput: (e) => this.handleQuantityInput(admission.id, sectionId, e), disabled: disabled, "aria-label": `Quantity for ${admission.name}
|
|
1002
|
+
return (h("div", { class: "quantity-controls" }, h("button", { type: "button", class: "quantity-btn decrease", onClick: () => this.handleQuantityDecrease(admission.id, sectionId), disabled: disabled || quantity === 0, "aria-label": "Decrease quantity", "data-testid": "event-admission-decrement" }, "\u2212"), h("input", { class: "quantity-value", type: "number", min: "0", max: maxQuantity, inputmode: "numeric", value: quantity, onInput: (e) => this.handleQuantityInput(admission.id, sectionId, e), disabled: disabled, "aria-label": `Quantity for ${admission.name}`, "data-testid": "event-admission-quantity-input" }), h("button", { type: "button", class: "quantity-btn increase", onClick: () => this.handleQuantityIncrease(admission.id, sectionId), disabled: disabled || quantity >= maxQuantity, "aria-label": "Increase quantity", "data-testid": "event-admission-increment" }, "+")));
|
|
943
1003
|
}
|
|
944
1004
|
getMaxQuantity(admission, sectionId) {
|
|
945
1005
|
if (!this.event)
|
|
@@ -1015,7 +1075,7 @@ export class SessionsTicketing {
|
|
|
1015
1075
|
sectionSoldOut: isSectionSoldOut,
|
|
1016
1076
|
});
|
|
1017
1077
|
const sectionId = section?.id || null;
|
|
1018
|
-
return (h("section", { class: this.getAdmissionClassName(state, section), key: selectionKey(admission.id, sectionId), tabindex: state.disabled ? -1 : 0, "aria-label": this.getAdmissionAriaLabel(admission, section, state) }, h("div", { class: "admission-content" }, h("div", { class: "admission-details" }, this.renderAdmissionHeader(admission), this.renderAdmissionBody(admission, event, sectionId, state, mode)))));
|
|
1078
|
+
return (h("section", { class: this.getAdmissionClassName(state, section), key: selectionKey(admission.id, sectionId), tabindex: state.disabled ? -1 : 0, "aria-label": this.getAdmissionAriaLabel(admission, section, state), "data-testid": "event-admission-card", "data-admission-id": admission.id, "data-admission-name": admission.name, "data-section-id": section?.id ?? "" }, h("div", { class: "admission-content" }, h("div", { class: "admission-details" }, this.renderAdmissionHeader(admission), this.renderAdmissionBody(admission, event, sectionId, state, mode)))));
|
|
1019
1079
|
}
|
|
1020
1080
|
getAdmissionClassName(state, section) {
|
|
1021
1081
|
return `admission-card ${state.soldOut ? "sold-out" : ""} ${state.disabled && !state.soldOut ? "unavailable" : ""} ${section ? "" : "solo-admission"}`;
|
|
@@ -1141,7 +1201,7 @@ export class SessionsTicketing {
|
|
|
1141
1201
|
return this.formatPriceValue(total);
|
|
1142
1202
|
}
|
|
1143
1203
|
renderCheckoutActions() {
|
|
1144
|
-
return (h("div", { class: "checkout-actions" }, this.renderCouponPanel(), this.quoteError && h("div", { class: "error-message" }, this.quoteError), h("button", { type: "button", class: "checkout-btn", onClick: () => this.initiateCheckout(), disabled: this.isCheckoutDisabled(), "aria-label": this.quoteLoading ? "Updating" : undefined }, this.renderCheckoutButtonContent())));
|
|
1204
|
+
return (h("div", { class: "checkout-actions" }, this.renderCouponPanel(), this.quoteError && h("div", { class: "error-message" }, this.quoteError), h("button", { type: "button", class: "checkout-btn", onClick: () => this.initiateCheckout(), disabled: this.isCheckoutDisabled(), "aria-label": this.quoteLoading ? "Updating" : undefined, "data-testid": "event-checkout-cta-desktop" }, this.renderCheckoutButtonContent())));
|
|
1145
1205
|
}
|
|
1146
1206
|
renderStickyCheckout(state) {
|
|
1147
1207
|
if (!this.stickyCheckout)
|
|
@@ -1155,7 +1215,8 @@ export class SessionsTicketing {
|
|
|
1155
1215
|
return null;
|
|
1156
1216
|
if (!state.externalTicketUrl)
|
|
1157
1217
|
return null;
|
|
1158
|
-
|
|
1218
|
+
const domain = urlDomain(state.externalTicketUrl);
|
|
1219
|
+
return (h("div", { class: "sticky-checkout-bar" }, h("a", { class: "external-ticket-button sticky-checkout-btn", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer", onClick: () => this.trackExternalTicketClick(state.externalTicketUrl, "sticky") }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain))));
|
|
1159
1220
|
}
|
|
1160
1221
|
renderModal() {
|
|
1161
1222
|
if (!this.openModalAdmissionId)
|
|
@@ -1170,7 +1231,13 @@ export class SessionsTicketing {
|
|
|
1170
1231
|
renderTicketSections(event) {
|
|
1171
1232
|
const state = getTicketingState(event);
|
|
1172
1233
|
const mode = state.isDoorOnly ? "door" : "default";
|
|
1173
|
-
const items = topLevelTicketItems(event.sections, visibleAdmissions(event, mode)
|
|
1234
|
+
const items = topLevelTicketItems(event.sections, visibleAdmissions(event, mode), {
|
|
1235
|
+
event,
|
|
1236
|
+
initialAdmissionPrices: this.activeInitialAdmissionPrices(),
|
|
1237
|
+
mode,
|
|
1238
|
+
previewQuote: this.previewQuote,
|
|
1239
|
+
quote: this.quote,
|
|
1240
|
+
});
|
|
1174
1241
|
return (h("div", { class: "tickets-wrapper" }, this.renderDoorAlert(event, mode), h("h2", { class: "tickets-heading" }, state.ticketHeading), items.map((item) => this.renderTopLevelItem(item, event, mode))));
|
|
1175
1242
|
}
|
|
1176
1243
|
renderTopLevelItem(item, event, mode) {
|
|
@@ -1215,7 +1282,7 @@ export class SessionsTicketing {
|
|
|
1215
1282
|
const domain = urlDomain(state.externalTicketUrl);
|
|
1216
1283
|
if (!state.externalTicketUrl)
|
|
1217
1284
|
return null;
|
|
1218
|
-
return (h("div", { class: "tickets-wrapper" }, h("h2", { class: "tickets-heading" }, state.ticketHeading), h("div", { class: "external-ticket-panel" }, h("p", { class: "external-ticket-warning" }, "This event sells through an external ticketing site. Checkout, tickets, and support are handled there."), h("a", { class: "external-ticket-button inline-external-ticket-button", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer" }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain)))));
|
|
1285
|
+
return (h("div", { class: "tickets-wrapper" }, h("h2", { class: "tickets-heading" }, state.ticketHeading), h("div", { class: "external-ticket-panel" }, h("p", { class: "external-ticket-warning" }, "This event sells through an external ticketing site. Checkout, tickets, and support are handled there."), h("a", { class: "external-ticket-button inline-external-ticket-button", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer", onClick: () => this.trackExternalTicketClick(state.externalTicketUrl, "inline") }, h("span", { class: "external-ticket-label" }, "Get tickets"), h("span", { class: "external-ticket-domain" }, "via ", domain)))));
|
|
1219
1286
|
}
|
|
1220
1287
|
renderUnavailableState(state) {
|
|
1221
1288
|
return (h("div", { class: "empty-ticketing-state" }, h("strong", null, "Tickets Unavailable"), h("span", null, state.isEnded
|
|
@@ -1384,7 +1451,7 @@ export class SessionsTicketing {
|
|
|
1384
1451
|
"mutable": false,
|
|
1385
1452
|
"complexType": {
|
|
1386
1453
|
"original": "OrderQuote | string",
|
|
1387
|
-
"resolved": "string | { items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"
|
|
1454
|
+
"resolved": "string | { items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"HIDDEN\"; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; subtitle?: string; description?: string; available?: number; sold?: number; reserved?: number; createdAt?: string; updatedAt?: string; sectionId?: string; }; section?: { name: string; capacity: number; limit: number; order: number; visibility: \"ALWAYS\" | \"HIDDEN\" | \"STACKED\"; location: { createdAt: string; updatedAt: string; name: string; address: string; country: string; latitude: number; longitude: number; timeZone: string; id?: string; googlePlaceId?: string; city?: string; state?: string; postcode?: string; types?: string[]; description?: string; image?: { src: string; alt: string; width: number; height: number; }; venueId?: string; }; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; createdAt?: string; updatedAt?: string; available?: number; sold?: number; reserved?: number; }; }[]; price: { net: number; total: number; gross: number; base: number; booking: number; shipping: number; sms: number; refunded: number; discount: number; gateway: number; dispute: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; couponCode?: { name: string; active: boolean; couponId: string; teamId: string; id?: string; createdAt?: string; updatedAt?: string; uses?: number; }; }",
|
|
1388
1455
|
"references": {
|
|
1389
1456
|
"OrderQuote": {
|
|
1390
1457
|
"location": "import",
|
|
@@ -1556,7 +1623,7 @@ export class SessionsTicketing {
|
|
|
1556
1623
|
},
|
|
1557
1624
|
"complexType": {
|
|
1558
1625
|
"original": "OrderQuote",
|
|
1559
|
-
"resolved": "{ items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"
|
|
1626
|
+
"resolved": "{ items: { id: string; kind: \"ADMISSION\" | \"ADDON\"; quantity: number; price: { net: number; total: number; gross: number; base: number; booking: number; refunded: number; discount: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; admissionId?: string; sectionId?: string; admission?: { name: string; capacity: number; limit: number; order: number; entryStartsAt: string; entryEndsAt: string; saleStartsAt: string; saleEndsAt: string; saleEndsBehavior: \"SALE_ENDED\" | \"SOLD_OUT\" | \"DOOR\"; price: { base: number; booking: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; visibility: \"ALWAYS\" | \"HIDDEN\"; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; subtitle?: string; description?: string; available?: number; sold?: number; reserved?: number; createdAt?: string; updatedAt?: string; sectionId?: string; }; section?: { name: string; capacity: number; limit: number; order: number; visibility: \"ALWAYS\" | \"HIDDEN\" | \"STACKED\"; location: { createdAt: string; updatedAt: string; name: string; address: string; country: string; latitude: number; longitude: number; timeZone: string; id?: string; googlePlaceId?: string; city?: string; state?: string; postcode?: string; types?: string[]; description?: string; image?: { src: string; alt: string; width: number; height: number; }; venueId?: string; }; teamId: string; promoterId: string; eventId: string; eventSlug: string; id?: string; createdAt?: string; updatedAt?: string; available?: number; sold?: number; reserved?: number; }; }[]; price: { net: number; total: number; gross: number; base: number; booking: number; shipping: number; sms: number; refunded: number; discount: number; gateway: number; dispute: number; currency: \"AUD\" | \"AED\" | \"ALL\" | \"AMD\" | \"ANG\" | \"AOA\" | \"ARS\" | \"AWG\" | \"AZN\" | \"BAM\" | \"BBD\" | \"BDT\" | \"BGN\" | \"BHD\" | \"BIF\" | \"BMD\" | \"BND\" | \"BOB\" | \"BRL\" | \"BSD\" | \"BTN\" | \"BWP\" | \"BZD\" | \"CAD\" | \"CHF\" | \"CLP\" | \"CNY\" | \"COP\" | \"CRC\" | \"CVE\" | \"CZK\" | \"DJF\" | \"DKK\" | \"DOP\" | \"DZD\" | \"EGP\" | \"ERN\" | \"ETB\" | \"EUR\" | \"FJD\" | \"FKP\" | \"GBP\" | \"GEL\" | \"GHS\" | \"GIP\" | \"GMD\" | \"GNF\" | \"GTQ\" | \"GYD\" | \"HKD\" | \"HNL\" | \"HUF\" | \"IDR\" | \"ILS\" | \"INR\" | \"ISK\" | \"JMD\" | \"JOD\" | \"JPY\" | \"KES\" | \"KGS\" | \"KHR\" | \"KMF\" | \"KRW\" | \"KWD\" | \"KYD\" | \"KZT\" | \"LAK\" | \"LBP\" | \"LKR\" | \"LRD\" | \"LSL\" | \"LYD\" | \"MAD\" | \"MDL\" | \"MGA\" | \"MKD\" | \"MNT\" | \"MOP\" | \"MUR\" | \"MVR\" | \"MWK\" | \"MXN\" | \"MYR\" | \"NAD\" | \"NGN\" | \"NIO\" | \"NOK\" | \"NPR\" | \"NZD\" | \"OMR\" | \"PAB\" | \"PEN\" | \"PGK\" | \"PHP\" | \"PKR\" | \"PLN\" | \"PYG\" | \"QAR\" | \"RON\" | \"RSD\" | \"RWF\" | \"SAR\" | \"SBD\" | \"SCR\" | \"SEK\" | \"SGD\" | \"SHP\" | \"SLE\" | \"SRD\" | \"SVC\" | \"SZL\" | \"THB\" | \"TJS\" | \"TMT\" | \"TND\" | \"TOP\" | \"TRY\" | \"TTD\" | \"TWD\" | \"TZS\" | \"UAH\" | \"UGX\" | \"USD\" | \"UYU\" | \"UZS\" | \"VND\" | \"VUV\" | \"WST\" | \"XAF\" | \"XCD\" | \"XOF\" | \"XPF\" | \"ZAR\" | \"ZMW\" | \"ZWL\"; }; couponCode?: { name: string; active: boolean; couponId: string; teamId: string; id?: string; createdAt?: string; updatedAt?: string; uses?: number; }; }",
|
|
1560
1627
|
"references": {
|
|
1561
1628
|
"OrderQuote": {
|
|
1562
1629
|
"location": "import",
|
package/dist/collection/components/session-services-ticketing/session-services-ticketing.logic.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { formatNaiveDateTime, isNaiveDateTimeFuture, isNaiveDateTimePast, } from "@session-services/utils/naive-datetime";
|
|
2
|
-
import { createQuoteItemMap } from "@session-services/utils/ticket-quote";
|
|
3
2
|
import { getAdmissionSelectionCapacity, isAdmissionSoldOut, } from "@session-services/utils/ticket-availability";
|
|
3
|
+
import { createQuoteItemMap } from "@session-services/utils/ticket-quote";
|
|
4
4
|
const UNLIMITED_CAP = 10;
|
|
5
5
|
const SCARCITY_THRESHOLD = 20;
|
|
6
6
|
export function selectionKey(admissionId, sectionId) {
|
|
@@ -93,8 +93,7 @@ function endedStatus(admissions, zone) {
|
|
|
93
93
|
}
|
|
94
94
|
function salesStatus(event) {
|
|
95
95
|
const sections = sectionsById(event);
|
|
96
|
-
const admissions = event.admissions.filter((admission) => admission
|
|
97
|
-
hasAdmissionSection(admission, sections));
|
|
96
|
+
const admissions = event.admissions.filter((admission) => hasAdmissionSection(admission, sections));
|
|
98
97
|
if (admissions.length === 0)
|
|
99
98
|
return undefined;
|
|
100
99
|
if (hasPurchasableAdmissions(event))
|
|
@@ -133,14 +132,99 @@ export function visibleAdmissions(event, mode) {
|
|
|
133
132
|
return event.admissions.filter((admission) => admission.saleEndsBehavior === "DOOR" &&
|
|
134
133
|
isNaiveDateTimePast(admission.saleEndsAt, zone));
|
|
135
134
|
}
|
|
136
|
-
function
|
|
135
|
+
function isStackableAdmission(input) {
|
|
136
|
+
if (input.mode === "door")
|
|
137
|
+
return true;
|
|
138
|
+
if (!input.event)
|
|
139
|
+
return true;
|
|
140
|
+
return !getAdmissionDisplayState({
|
|
141
|
+
admission: input.admission,
|
|
142
|
+
event: input.event,
|
|
143
|
+
section: input.section,
|
|
144
|
+
}).disabled;
|
|
145
|
+
}
|
|
146
|
+
function stackedAdmissionBase(input) {
|
|
147
|
+
const key = selectionKey(input.admission.id, input.section.id);
|
|
148
|
+
return getAdmissionPriceDisplay({
|
|
149
|
+
admission: input.admission,
|
|
150
|
+
initialPrice: input.initialAdmissionPrices?.[key],
|
|
151
|
+
mode: input.mode,
|
|
152
|
+
previewItem: input.previewItems.get(key),
|
|
153
|
+
quoteItem: input.quoteItems.get(key),
|
|
154
|
+
}).base;
|
|
155
|
+
}
|
|
156
|
+
function compareStackedAdmissions(input, section) {
|
|
157
|
+
const mode = input.mode ?? "default";
|
|
158
|
+
const previewItems = quoteItemsBySelection(input.previewQuote ?? null);
|
|
159
|
+
const quoteItems = quoteItemsBySelection(input.quote ?? null);
|
|
160
|
+
return (a, b) => {
|
|
161
|
+
const price = stackedAdmissionBase({
|
|
162
|
+
admission: a,
|
|
163
|
+
initialAdmissionPrices: input.initialAdmissionPrices,
|
|
164
|
+
mode,
|
|
165
|
+
previewItems,
|
|
166
|
+
quoteItems,
|
|
167
|
+
section,
|
|
168
|
+
}) -
|
|
169
|
+
stackedAdmissionBase({
|
|
170
|
+
admission: b,
|
|
171
|
+
initialAdmissionPrices: input.initialAdmissionPrices,
|
|
172
|
+
mode,
|
|
173
|
+
previewItems,
|
|
174
|
+
quoteItems,
|
|
175
|
+
section,
|
|
176
|
+
});
|
|
177
|
+
if (price !== 0)
|
|
178
|
+
return price;
|
|
179
|
+
const order = a.order - b.order;
|
|
180
|
+
if (order !== 0)
|
|
181
|
+
return order;
|
|
182
|
+
return a.id.localeCompare(b.id);
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function cap(value) {
|
|
186
|
+
if (value == null || value === -1)
|
|
187
|
+
return Number.POSITIVE_INFINITY;
|
|
188
|
+
return Math.max(0, value);
|
|
189
|
+
}
|
|
190
|
+
function shouldShowNextStackedAdmission(admission) {
|
|
191
|
+
const remaining = cap(admission.available);
|
|
192
|
+
if (!Number.isFinite(remaining))
|
|
193
|
+
return false;
|
|
194
|
+
const limit = cap(admission.limit);
|
|
195
|
+
if (!Number.isFinite(limit))
|
|
196
|
+
return remaining < UNLIMITED_CAP;
|
|
197
|
+
return limit > remaining;
|
|
198
|
+
}
|
|
199
|
+
function displayedSectionAdmissions(section, admissions, input) {
|
|
200
|
+
const sorted = admissions
|
|
201
|
+
.filter((admission) => admission.sectionId === section.id)
|
|
202
|
+
.sort((a, b) => a.order - b.order);
|
|
203
|
+
if (section.visibility !== "STACKED" || sorted.length <= 1) {
|
|
204
|
+
return sorted;
|
|
205
|
+
}
|
|
206
|
+
const mode = input.mode ?? "default";
|
|
207
|
+
const stackable = sorted.filter((admission) => isStackableAdmission({
|
|
208
|
+
admission,
|
|
209
|
+
event: input.event,
|
|
210
|
+
mode,
|
|
211
|
+
section,
|
|
212
|
+
}));
|
|
213
|
+
const candidates = stackable.length > 0 ? stackable : sorted;
|
|
214
|
+
const [admission, next] = [...candidates].sort(compareStackedAdmissions(input, section));
|
|
215
|
+
if (!admission)
|
|
216
|
+
return [];
|
|
217
|
+
if (!next || !shouldShowNextStackedAdmission(admission)) {
|
|
218
|
+
return [admission];
|
|
219
|
+
}
|
|
220
|
+
return [admission, next];
|
|
221
|
+
}
|
|
222
|
+
function sectionItems(sections, admissions, input) {
|
|
137
223
|
return sections
|
|
138
224
|
.map((section) => ({
|
|
139
225
|
type: "section",
|
|
140
226
|
section,
|
|
141
|
-
admissions: admissions
|
|
142
|
-
.filter((admission) => admission.sectionId === section.id)
|
|
143
|
-
.sort((a, b) => a.order - b.order),
|
|
227
|
+
admissions: displayedSectionAdmissions(section, admissions, input),
|
|
144
228
|
}))
|
|
145
229
|
.filter((item) => item.admissions.length > 0);
|
|
146
230
|
}
|
|
@@ -149,9 +233,9 @@ function topLevelOrder(item) {
|
|
|
149
233
|
return item.section.order;
|
|
150
234
|
return item.admission.order;
|
|
151
235
|
}
|
|
152
|
-
export function topLevelTicketItems(sections, admissions) {
|
|
236
|
+
export function topLevelTicketItems(sections, admissions, input = {}) {
|
|
153
237
|
return [
|
|
154
|
-
...sectionItems(sections, admissions),
|
|
238
|
+
...sectionItems(sections, admissions, input),
|
|
155
239
|
...admissions
|
|
156
240
|
.filter((admission) => !admission.sectionId)
|
|
157
241
|
.map((admission) => ({ type: "admission", admission })),
|