feat: support optional start/end time on events

event_start_date / event_end_date now accept either YYYY-MM-DD (date-only)
or YYYY-MM-DDTHH:MM (ISO datetime). The NIP-52 publisher switches kind
on the "T" delimiter: kind 31922 (date-based, YYYY-MM-DD start/end) when
absent, kind 31923 (time-based, unix-timestamp start/end + day-granularity
D tags) when present. Delete events match the original publish kind.

Closing-date parsing accepts both formats. The LNbits admin form gains
optional HH:MM inputs alongside each date picker; they fold into the
wire-format string on submit and split back on edit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-05-20 01:22:38 +02:00
commit df4775126f
5 changed files with 138 additions and 32 deletions

View file

@ -475,28 +475,46 @@
></q-input>
</div>
</div>
<div class="row">
<div class="row q-col-gutter-sm">
<div class="col-4">Event begins</div>
<div class="col-8">
<div class="col-5">
<q-input
filled
dense
v-model.trim="formDialog.data.event_start_date"
v-model.trim="formDialog.data.event_start_day"
type="date"
></q-input>
</div>
<div class="col-3">
<q-input
filled
dense
v-model.trim="formDialog.data.event_start_time"
type="time"
hint="Optional"
></q-input>
</div>
</div>
<div class="row">
<div class="row q-col-gutter-sm">
<div class="col-4">Event ends</div>
<div class="col-8">
<div class="col-5">
<q-input
filled
dense
v-model.trim="formDialog.data.event_end_date"
v-model.trim="formDialog.data.event_end_day"
type="date"
></q-input>
</div>
<div class="col-3">
<q-input
filled
dense
v-model.trim="formDialog.data.event_end_time"
type="time"
hint="Optional"
></q-input>
</div>
</div>
<div class="row q-col-gutter-sm">
<div class="col">
@ -710,8 +728,8 @@
formDialog.data.name == null ||
formDialog.data.info == null ||
formDialog.data.closing_date == null ||
formDialog.data.event_start_date == null ||
formDialog.data.event_end_date == null ||
formDialog.data.event_start_day == null ||
formDialog.data.event_end_day == null ||
formDialog.data.amount_tickets == null ||
formDialog.data.price_per_ticket == null
"