Skip to content

editor: multipart events need a way to add several non-regular dates without recreating the form #51

Description

@hhkaos

Context

Came up while designing the "Part of (series)" UX (see the series-linking
wizard work). `partOf.type: "multipart"` covers an event held across
several non-consecutive, not-necessarily-regular dates — e.g. a
3-session study jam on arbitrary Saturdays, or day 2/3 of a conference.

Per OTE's spec, each session is still its own document ("un documento =
una ocurrencia"), all pointing at the same `partOf.id`.

Current gap

The editor's only batch-generation mechanism today is "+ Add recurrence"
(renderRecurrenceRows in apps/editor/src/ui/form.ts), and it is
strictly rule-based: daily/weekly/monthly/yearly + interval
(apps/editor/src/lib/recurrence.ts). There is no way to enter a plain
list of arbitrary dates.

Two workarounds exist today, neither good for a genuinely irregular
multipart series:

  1. Approximate with a rule (e.g. weekly) and uncheck the occurrences
    that don't apply in the generation-review dialog (that per-occurrence
    checkbox list already exists, reused from ICS/JSON-LD import) — works
    only when the real dates happen to be a subset of a regular pattern.
  2. Use "Create event" N times by hand, re-entering the same 4
    partOf.* fields (id/name/url/type) on every single occurrence —
    tedious and error-prone (easy to typo the shared partOf.id, which
    breaks the grouping silently).

Suggested direction (not scoped/designed yet)

A dedicated "+ Add session" repeater for the multipart case — plain
date+time rows instead of a frequency rule — reusing the same batch
generation/review/submission pipeline recurrence rows already use
(onGenerateRecurrenceSeries / submitRecurringBatch in
apps/editor/src/main.ts), so all sessions share one partOf filled in
once.

Deliberately left open-ended — needs its own UX pass (where it lives in
the form, how it interacts with the "Part of" series-linking wizard once
that lands, whether it's its own row type or a mode of the existing
recurrence rows) rather than being bundled into the series-identity work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions