Skip to content

Mobile layout: event selector, editor toolbars, Eventor keys in Settings - #32

Merged
ellmkay merged 2 commits into
mainfrom
feature/event-selector-layout
Sep 25, 2026
Merged

ellmkay merged 2 commits into
mainfrom
feature/event-selector-layout

Conversation

@ellmkay

@ellmkay ellmkay commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Two commits of phone-layout work plus one permission fix.

1. Event selector + Eventor keys → Settings (8d63c9a)

Permission fix. The Eventor API key is a club-wide credential but was entered from the selector's import panel on publicProcedure mutations, so any invited user could replace or clear it.

  • eventor.validateKey / setKey / clearKey → adminProcedure; keyStatus / getKey → authedProcedure.
  • New admin-only Settings → Eventor tab (EventorKeysPanel, one card per environment).
  • Import from Eventor no longer has a key step: with no key it links admins to the tab and tells members to ask an admin.

Selector layout.

  • User chip + language switcher move from header to footer.
  • "Select an event to manage" tagline is desktop-only.
  • Search gets its own row on phones; the type <select> gets min-w-0 so it stops running off the right edge.
  • Creator attribution collapses to the bare name below sm.
  • Delete icon hover-revealed only under (hover: hover) → always visible on touch devices.
  • New My events toggle, backed by EventInfo.ownedByMe (direct Event admin grant for the caller).

2. Editor, template and controls toolbars (15ebc59)

  • New ToolbarButton: icon + label, label visible from sm, icon-only below; label kept as aria-label/title. Applied to Hide other controls, Auto slits, Descriptions, Show progress. Fixes "Auto slits" overlapping "Descriptions" at 390px.
  • Undo/redo are 20px icons with touch-sized padding (course editor and template editor).
  • North lines under course purple checkbox removed from the course editor's map footer — it's a base-map property and stays on the club-library card. ISOM 2017 App. 1 ch. 4 puts blue/black 100 % lines above lower purple, so "below" is a deliberate deviation; the default is left unchanged for now (see docs/map-color-stack.md).
  • Template editor header: two rows on phones, one row from sm (sm:contents wrappers); "Preview course" caption dropped (name stays on the select).
  • Controls page: AIR+ / station-mode row wraps instead of widening the page.

Tests

  • Unit: filterEvents onlyMine.
  • Integration: ownedByMe per role; FORBIDDEN / UNAUTHORIZED on Eventor key mutations.
  • E2E: Settings key flow against the Eventor stub; member sees no Eventor tab and gets 403; selector phone layout, touch-context delete visibility, My events filter; editor/template/controls toolbars fit 390px with non-overlapping controls and touch-sized undo.

Verification

  • pnpm build clean · pnpm test 1750 passed · integration 337 passed · full sharded E2E 4/4 PASS (280 passed, 2 pre-existing skips) · Docker rebuilt.

Docs

features.md, authentication.md, club-library.md, e2e-eventor-stub.md, bugfix-eventor-key-wiped-by-e2e.md, mobile-layout.md, map-color-stack.md.

marcus-kempe and others added 2 commits September 25, 2026 20:33
The Eventor API key is a club-wide credential, but it was entered from
the selector's import panel on publicProcedure mutations, so any invited
user could replace or clear it. validateKey / setKey / clearKey are now
adminProcedure and live on a new admin-only Settings → Eventor tab
(EventorKeysPanel, one card per environment). keyStatus / getKey become
authedProcedure so the import panel and the registration dialog can
still tell whether a key exists. With no key, the import panel links
admins to the tab and tells members to ask an admin.

Selector layout:
- user chip + language switcher move from the header to the footer
- "Select an event to manage" tagline is desktop-only
- search gets its own row on phones; the type <select> gets min-w-0 so
  it can no longer run off the right edge
- creator attribution collapses to the bare name below sm
- the per-row delete icon is hover-revealed only under (hover: hover),
  so touch devices always see it
- new "My events" toggle, backed by EventInfo.ownedByMe (direct Event
  admin grant for the caller; false with auth off)

Co-authored-by: Cursor <cursoragent@cursor.com>
Course editor / map toolbar: every toggle (Hide other controls, Auto
slits, Descriptions, Show progress) is now a ToolbarButton — icon plus a
label that is visible from `sm` up and collapses to the icon below it,
with the label kept as aria-label/title. Undo and redo become 20px icons
with touch-sized padding instead of 12px ⟲/⟳ glyphs. At 390px the row
used to overflow and paint "Auto slits" over "Descriptions".

The per-event "North lines under course purple" checkbox is removed from
the editor's map footer. It is a base-map property and stays on the
club-library map card; ISOM 2017 App. 1 puts blue/black 100 % lines
above lower purple, so "below" is a deliberate deviation, not the spec.

Template / map layout editor header: two rows on phones (title + window
controls, then tools) and one row from `sm`, via `sm:contents` wrappers.
The "Preview course" caption is dropped (name stays on the select).

Controls page: the AIR+ / station-mode row wraps instead of widening the
page.

Co-authored-by: Cursor <cursoragent@cursor.com>
@ellmkay
ellmkay merged commit e8dfd41 into main Sep 25, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants