fix(ui): ticket waves never rendered in the organiser table
Some checks failed
lint.yml / fix(ui): ticket waves never rendered in the organiser table (pull_request) Failing after 0s
Some checks failed
lint.yml / fix(ui): ticket waves never rendered in the organiser table (pull_request) Failing after 0s
The expanded event row showed "Ticket waves" with a + button and an
empty list, however many waves the event had. Reported from aio-demo and
reproduced in a fresh incognito window, so not a caching artifact.
The chip built its label inline with `LNbits.utils.formatCurrency(...)`.
Vue resolves template expressions against the component instance, where
the `LNbits` global is not in scope, so the expression threw
TypeError: Cannot read properties of undefined (reading 'utils')
and the whole v-for rendered nothing. The promo-code chips beside it
were unaffected, which is what made the list look like a data problem —
the waves were always present in the response.
That line arrived with the v1.6.8 merge: it is upstream's, and upstream
is the only `LNbits.` reference in any template in this extension
(display.vue and ticket.vue have none). So the convention here was
already "format in a method", and the merge quietly broke it.
`waveSummary` now builds the label in index.js, where the global is in
scope. It also trims the day off wave dates for display — closing_date
defaults from event_end_date and can carry a time, which was rendering
as "2026-12-09T16:00:00+01:00" in the chip.
Verified in a browser against a two-wave event: both chips render as
"Primary wave - 2026-10-03 to 2026-11-02 - €30.00 - 50 tickets - 0 sold"
with no TypeError.
This commit is contained in:
parent
69c9a4f757
commit
b4ca9fe65d
2 changed files with 21 additions and 17 deletions
|
|
@ -414,6 +414,26 @@ window.PageEvents = {
|
|||
this.ticketImageUploadTarget = null
|
||||
}
|
||||
},
|
||||
waveSummary(eventId, wave) {
|
||||
// Built here, not in the template. Vue resolves template expressions
|
||||
// against the component instance, where the `LNbits` global is NOT
|
||||
// in scope — upstream's v1.6.8 chip called `LNbits.utils` inline and
|
||||
// threw "Cannot read properties of undefined (reading 'utils')",
|
||||
// which killed the whole v-for and left the wave list looking empty.
|
||||
// No other template in this extension touches `LNbits` directly.
|
||||
const price = this.isFiatCurrency(wave.currency)
|
||||
? LNbits.utils.formatCurrency(
|
||||
Number(wave.price_per_ticket || 0).toFixed(2),
|
||||
wave.currency
|
||||
)
|
||||
: `${wave.price_per_ticket} sats`
|
||||
// Wave dates can carry a time (closing_date defaults from
|
||||
// event_end_date); show the day only.
|
||||
const opens = String(wave.opening_date || '').slice(0, 10)
|
||||
const closes = String(wave.closing_date || '').slice(0, 10)
|
||||
const sold = this.soldTicketsForWave(eventId, wave.id)
|
||||
return `${wave.title} - ${opens} to ${closes} - ${price} - ${wave.amount_tickets} tickets - ${sold} sold`
|
||||
},
|
||||
soldTicketsForWave(eventId, waveId) {
|
||||
return this.allPaidTickets.filter(
|
||||
ticket =>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue