diff --git a/src/modules/events/components/CreateEventDialog.vue b/src/modules/events/components/CreateEventDialog.vue index ad8d9c5..7c35a48 100644 --- a/src/modules/events/components/CreateEventDialog.vue +++ b/src/modules/events/components/CreateEventDialog.vue @@ -342,8 +342,12 @@ const waveErrors = computed(() => validateWaveRows(extraWaves.value, new Set(knownWaveIds.value)), ); const hasWaveErrors = computed(() => Object.keys(waveErrors.value).length > 0); -/** New waves inherit the primary wave's currency. */ +/** New waves inherit the primary wave's currency and fiat settings. */ const primaryCurrency = computed(() => form.values.currency ?? "sat"); +const primaryAllowsFiat = computed( + () => form.values.payment_methods?.includes("fiat") ?? false, +); +const primaryFiatCurrency = computed(() => form.values.fiat_currency ?? "USD"); async function populateFromEvent(event: TicketedEvent) { isPopulating.value = true; @@ -1215,6 +1219,8 @@ const handleOpenChange = (open: boolean) => { v-model="extraWaves" :known-ids="knownWaveIds" :currency="primaryCurrency" + :allow-fiat="primaryAllowsFiat" + :fiat-currency="primaryFiatCurrency" :disabled="isLoading" /> diff --git a/src/modules/events/components/PurchaseTicketDialog.vue b/src/modules/events/components/PurchaseTicketDialog.vue index a1737fb..3f2dd66 100644 --- a/src/modules/events/components/PurchaseTicketDialog.vue +++ b/src/modules/events/components/PurchaseTicketDialog.vue @@ -298,12 +298,16 @@ const isFiatPending = ref(false); const fiatError = ref(null); const enabledRails = computed(() => - effectivePaymentMethods({ - // Fiat is a per-wave opt-in; `event.allow_fiat` is only the primary - // wave's and can disagree with the tier being bought. - allowFiat: pricing.value.allow_fiat, - paymentMethods: props.event.payment_methods, - }), + effectivePaymentMethods( + { + allowFiat: props.event.allow_fiat, + paymentMethods: props.event.payment_methods, + }, + // Fiat is a per-wave opt-in, and the organiser's explicit rail list is + // event-level — without the wave here the dialog offers a card button + // the purchase endpoint then refuses. + pricing.value, + ), ); const canChooseFiat = computed(() => enabledRails.value.includes("fiat")); const isPriceInSats = computed( diff --git a/src/modules/events/components/TicketWavesEditor.vue b/src/modules/events/components/TicketWavesEditor.vue index 0812886..189bc55 100644 --- a/src/modules/events/components/TicketWavesEditor.vue +++ b/src/modules/events/components/TicketWavesEditor.vue @@ -1,6 +1,7 @@