Story 5.1: Event Type Configuration - Wireframe

Story: Epic 5, Story 5.1 - Event Type Definition

Last updated: January 2, 2026 Reading time: 17 minutes File size: 44.56 KB

Implementation Status & Scope

CURRENT STATE (Story 2.5.3):

  • βœ… Event Type selector exists in EventForm.tsx (lines 570-603)
  • βœ… Basic dropdown with 3 options: Full Day, Afternoon, Evening
  • βœ… Values stored in event metadata as JSON
  • ❌ NO backend event_types table yet
  • ❌ NO slot configuration details shown
  • ❌ NO preview component
  • ❌ NO admin configuration screen

STORY 5.1 WILL ADD:

  1. Backend: event_types table, REST API endpoints, EventType entity
  2. Frontend Enhancement: Fetch slot details from API, show in dropdown
  3. New Component: SlotTemplatePreview below selector
  4. Admin Screen: Configure event type templates (ORGANIZER only)
  5. Caching: Caffeine cache for event type configurations

Integration Point: Story 5.1 enhances the existing EventForm component (lines 570-603) by:

  • Replacing hardcoded MenuItem values with API-fetched data
  • Adding slot configuration details to each MenuItem
  • Adding SlotTemplatePreview component below the selector

Screen 0: Quick Actions Sidebar - Event Management Dashboard

Context: Quick Actions sidebar on Event Management Dashboard (right column) provides access to Event Type Configuration

Implementation: web-frontend/src/components/organizer/EventManagement/EventManagementDashboard.tsx

New Component: QuickActions.tsx in sidebar (lines 151-172 area)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Event Management Dashboard                                                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ ACTIVE EVENTS ──────────────┬──── QUICK ACTIONS ────────────┐   β”‚
β”‚  β”‚                                              β”‚                                β”‚   β”‚
β”‚  β”‚  Spring Conference 2025                      β”‚ [+ New Event]                 β”‚   β”‚
β”‚  β”‚  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 65%                        β”‚                                β”‚   β”‚
β”‚  β”‚                                              β”‚ [βš™οΈ Event Types]              β”‚   β”‚
β”‚  β”‚  Summer Workshop 2025                        β”‚                                β”‚   β”‚
β”‚  β”‚  β–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ 15%                        β”‚ ℹ️  Configure event type      β”‚   β”‚
β”‚  β”‚                                              β”‚    templates (Admin)           β”‚   β”‚
β”‚  β”‚                                              β”‚                                β”‚   β”‚
β”‚  β”‚                                              β”‚ [πŸ“Š Analytics] (Future)       β”‚   β”‚
β”‚  β”‚                                              β”‚ [πŸ‘₯ Speakers] (Future)        β”‚   β”‚
β”‚  β”‚                                              β”‚ [🏒 Partners] (Future)        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ CRITICAL TASKS ─────────────────┬──── TEAM ACTIVITY ─────────────┐   β”‚
β”‚  β”‚ ⚠️ 3 pending tasks...                       β”‚ Recent activity...             β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Quick Actions Section Details:

  • Located in sidebar (Grid size={{ xs: 12, md: 4 }})
  • First card above Critical Tasks
  • [+ New Event] button: Opens EventForm modal
  • [βš™οΈ Event Types] button: Navigates to /organizer/event-types route
  • Helper text shown below Event Types button for admin-only context
  • Future buttons grayed out with β€œ(Future)” label

Material-UI Components:

  • Paper wrapper with sx={{ p: 3 }}
  • Typography variant="h6" for section header
  • Stack spacing={1} for button list
  • Button fullWidth startIcon={<SettingsIcon />} for Event Types
  • Typography variant="caption" color="text.secondary" for helper text

Access Control:

  • All organizers can see [+ New Event]
  • [βš™οΈ Event Types] visible to all organizers, but only ORGANIZER role can modify configurations
  • Non-organizer roles (SPEAKER, PARTNER, ATTENDEE) don’t see Quick Actions sidebar

Screen 1: Event Type Selector in Event Form Modal (CURRENT IMPLEMENTATION)

Context: Organizer clicks β€œCreate Event” or β€œEdit Event” which opens a modal dialog with the EventForm component. The event type selector is integrated into this form.

Implementation: web-frontend/src/components/organizer/EventManagement/EventForm.tsx (lines 448-721)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Create Event                                                              βœ•    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ“ Auto-save enabled  [●] Saved at 14:32:15                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ BASIC INFORMATION ────────────────────────────────────────────────────────┐ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Event #: [54      ]  Title: [Spring Conference 2025              ] *      β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Description: *                                                            β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ β”‚
β”‚  β”‚  β”‚ A comprehensive Spring conference covering advanced                β”‚   β”‚ β”‚
β”‚  β”‚  β”‚ microservices architecture patterns, cloud-native                  β”‚   β”‚ β”‚
β”‚  β”‚  β”‚ development, and lessons learned from production deployments.      β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ DATES & TIMING ───────────────────────────────────────────────────────────┐ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Event Date: * [2025-03-15  πŸ“…]    Reg. Deadline: [2025-03-10  πŸ“…]        β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ EVENT TYPE & CAPACITY ────────────────────────────────────────────────────┐ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Event Type: [Full Day Event                                          β–Ό] * β”‚ β”‚
β”‚  β”‚              Capacity: [200        ]                                       β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ STATUS ───────────────────────────────────────────────────────────────────┐ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Status: [Planning                                                     β–Ό]  β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ VENUE ────────────────────────────────────────────────────────────────────┐ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Venue Name: * [Kornhausforum Bern                                    ]    β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Address: *    [Kornhausplatz 18, 3011 Bern                           ]    β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ THEME (OPTIONAL) ─────────────────────────────────────────────────────────┐ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Theme:        [Cloud-Native Architecture                             ]    β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  ──────────────────────────────────────────────────────────────────────────│ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  Theme Image                                                               β”‚ β”‚
β”‚  β”‚  Upload a banner image for this event (PNG, JPG, SVG - max 5MB)           β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β”‚  [Choose File]  No file chosen                                             β”‚ β”‚
β”‚  β”‚                                                                             β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                                  β”‚
β”‚  ⚠️ Validation errors shown inline below each field                             β”‚
β”‚                                                                                  β”‚
β”‚  [Cancel]                           [Save as Draft]        [Create Event]       β”‚
β”‚                                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Implementation Details (from EventForm.tsx):

  • Lines 570-603: Event Type selector implementation
  • Lines 484-514: Event Number and Title side-by-side
  • Lines 534-567: Event Date and Registration Deadline side-by-side
  • Lines 570-603: Event Type and Venue Capacity side-by-side
  • Lines 605-632: Status dropdown
  • Lines 634-660: Venue Name and Address
  • Lines 662-668: Theme text field
  • Lines 670-690: Theme Image Upload (FileUpload component)

Actual Material-UI Components Used:

  • Dialog with maxWidth="md" and fullWidth
  • DialogTitle, DialogContent, DialogActions
  • TextField with type="date" for date pickers
  • Select + MenuItem for dropdowns (event type, status)
  • FormControl, InputLabel, FormHelperText for form fields
  • Alert for error messages
  • Chip for auto-save status
  • Box with display: 'flex', gap: 2 for side-by-side layouts

Component: EventTypeSelector

Material-UI Components: Select, MenuItem, FormControl, InputLabel

Props:

typescript
interface EventTypeSelectorProps {
  value: EventType;
  onChange: (type: EventType) => void;
  disabled?: boolean;
}

Behavior:

  • Displays 3 options: Full Day Event, Afternoon Event, Evening Event
  • Each option shows event type name in dropdown
  • When user hovers over option, shows brief description
  • On selection, triggers SlotTemplatePreview update below

Screen 2: Event Type Selector - Dropdown Expanded (CURRENT IMPLEMENTATION)

Implementation: Lines 577-581 in EventForm.tsx show simple MenuItem text values

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Event Type: [Full Day Event                                          β–Ό]       β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚              β”‚ βœ“ Full Day Event                                            β”‚   β”‚
β”‚              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚              β”‚   Afternoon Event                                            β”‚   β”‚
β”‚              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚              β”‚   Evening Event                                              β”‚   β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚

Current Implementation (lines 577-581):

tsx
<Select {...field} label={t('form.eventType')}>
  <MenuItem value="full_day">{t('form.eventTypes.fullDay')}</MenuItem>
  <MenuItem value="afternoon">{t('form.eventTypes.afternoon')}</MenuItem>
  <MenuItem value="evening">{t('form.eventTypes.evening')}</MenuItem>
</Select>

Translation Keys (from i18n):

  • form.eventTypes.fullDay β†’ β€œFull Day Event”
  • form.eventTypes.afternoon β†’ β€œAfternoon Event”
  • form.eventTypes.evening β†’ β€œEvening Event”

Material-UI Components: Standard MenuItem with text-only content

Story 5.1 Enhancement Opportunity: Add detailed slot information to MenuItem (secondary text) showing:

  • Slot count range (e.g., β€œ6-8 slots”)
  • Duration (e.g., β€œ45 min each”)
  • Typical timing (e.g., β€œ09:00-17:00”)

Enhanced MenuItem Example (Story 5.1 implementation):

tsx
<MenuItem value="full_day">
  <Box>
    <Typography variant="body1">Full Day Event</Typography>
    <Typography variant="caption" color="textSecondary">
      6-8 slots β€’ 45 min each β€’ 09:00-17:00
    </Typography>
  </Box>
</MenuItem>

Screen 3: Slot Template Preview Component

Context: Shown below event type selector, updates dynamically when event type changes

β”Œβ”€ SLOT CONFIGURATION PREVIEW ─────────────────────────────────────────────────┐
β”‚                                                                               β”‚
β”‚  πŸ“Š Afternoon Event                                                          β”‚
β”‚                                                                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ 🎯 Slots     β”‚ ⏱️ Duration       β”‚ πŸ‘₯ Capacity  β”‚ πŸ• Timing            β”‚  β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€  β”‚
β”‚  β”‚ 6-8 sessions β”‚ 30 min each      β”‚ 150 people   β”‚ 13:00 - 18:00        β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                               β”‚
β”‚  πŸ“… Example Timeline:                                                        β”‚
β”‚   13:00 - 13:30   Session 1 (Theoretical)                                   β”‚
β”‚   13:30 - 14:00   Session 2 (Theoretical)                                   β”‚
β”‚   14:00 - 14:30   Session 3 (Theoretical)                                   β”‚
β”‚   14:30 - 15:00   β˜• Break                                                    β”‚
β”‚   15:00 - 15:30   Session 4 (Practical)                                     β”‚
β”‚   15:30 - 16:00   Session 5 (Practical)                                     β”‚
β”‚   16:00 - 16:30   Session 6 (Practical)                                     β”‚
β”‚   16:30 - 17:00   Session 7 (Practical) [Optional]                          β”‚
β”‚   17:00 - 17:30   Session 8 (Practical) [Optional]                          β”‚
β”‚   17:30 - 18:00   🀝 Networking                                              β”‚
β”‚                                                                               β”‚
β”‚  ℹ️  Shorter sessions allow more topic diversity                            β”‚
β”‚                                                                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Component: SlotTemplatePreview

Material-UI Components: Card, CardContent, Typography, Chip, Stack, Table

Props:

typescript
interface SlotTemplatePreviewProps {
  eventType: EventType;
  slotConfiguration: EventSlotConfiguration;
}

Visual Elements:

  • Header with event type icon and name
  • 4-column info grid: Slots, Duration, Capacity, Timing
  • Example timeline with session breakdown
  • Footer info message explaining key characteristics

Screen 4: Event Type Configuration Admin Screen

Context: Admin-only screen for configuring event type templates (accessed via Quick Actions sidebar on Event Management Dashboard)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ← Back to Dashboard    Event Type Configuration                  [ADMIN ONLY]   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                  β”‚
β”‚  πŸ“‹ Event Type Templates                                                        β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ FULL DAY EVENT ────────────────────────────────────────────────────────┐   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  Status: ● Active                                           [Edit] [βš™οΈ] β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚ Min Slots    β”‚ Max Slots   β”‚ Duration     β”‚ Default Capacity    β”‚   β”‚   β”‚
β”‚  β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚   β”‚
β”‚  β”‚  β”‚ 6            β”‚ 8           β”‚ 45 min       β”‚ 200                 β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  πŸ• Typical Timing: 09:00 - 17:00                                       β”‚   β”‚
β”‚  β”‚  β˜• Break Slots: 2    🍽️ Lunch Slots: 1    πŸ”¬ Theoretical AM: βœ“ Yes   β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  Last Modified: 2025-01-15 by admin@batbern.ch                         β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ AFTERNOON EVENT ───────────────────────────────────────────────────────┐   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  Status: ● Active                                           [Edit] [βš™οΈ] β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚ Min Slots    β”‚ Max Slots   β”‚ Duration     β”‚ Default Capacity    β”‚   β”‚   β”‚
β”‚  β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚   β”‚
β”‚  β”‚  β”‚ 6            β”‚ 8           β”‚ 30 min       β”‚ 150                 β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  πŸ• Typical Timing: 13:00 - 18:00                                       β”‚   β”‚
β”‚  β”‚  β˜• Break Slots: 1    🍽️ Lunch Slots: 0    πŸ”¬ Theoretical AM: βœ— No    β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  Last Modified: 2025-01-15 by admin@batbern.ch                         β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ EVENING EVENT ─────────────────────────────────────────────────────────┐   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  Status: ● Active                                           [Edit] [βš™οΈ] β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚ Min Slots    β”‚ Max Slots   β”‚ Duration     β”‚ Default Capacity    β”‚   β”‚   β”‚
β”‚  β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚   β”‚
β”‚  β”‚  β”‚ 3            β”‚ 4           β”‚ 45 min       β”‚ 100                 β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  πŸ• Typical Timing: 18:00 - 21:00                                       β”‚   β”‚
β”‚  β”‚  β˜• Break Slots: 1    🍽️ Lunch Slots: 0    πŸ”¬ Theoretical AM: βœ— No    β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β”‚  Last Modified: 2025-01-10 by admin@batbern.ch                         β”‚   β”‚
β”‚  β”‚                                                                          β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                                  β”‚
β”‚  ⚠️ Changes to event type templates will affect future events only.             β”‚
β”‚     Existing events retain their original configuration.                        β”‚
β”‚                                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Access Control: ORGANIZER role only (admin organizers)

Material-UI Components: Card, CardHeader, CardContent, IconButton, Chip, Typography

Features:

  • Read-only view showing all 3 event types
  • Each type displayed in expandable card
  • [Edit] button opens modal for configuration
  • Warning message about changes affecting future events only

Screen 5: Edit Event Type Configuration Modal

Context: Admin clicks [Edit] button on an event type card

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Edit Event Type Configuration                                            βœ•    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                  β”‚
β”‚  Event Type: Full Day Event                                                     β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ SLOT CONFIGURATION ───────────────────────────────────────────────────┐    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Minimum Slots: [6                    ]  β“˜ Minimum sessions required  β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Maximum Slots: [8                    ]  β“˜ Maximum sessions allowed   β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Slot Duration: [45                   ] minutes                        β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  ⚠️ Validation: Min slots (6) must be ≀ Max slots (8)                 β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ TIMING TEMPLATE ──────────────────────────────────────────────────────┐    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Typical Start Time: [09:00   πŸ•]     Typical End Time: [17:00   πŸ•]  β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Break Slots: [2                    ]  β“˜ Coffee/networking breaks     β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Lunch Slots: [1                    ]  β“˜ Lunch break periods          β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  ☐ Theoretical Presentations in Morning                                β”‚    β”‚
β”‚  β”‚     When enabled, theoretical sessions scheduled before lunch          β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ CAPACITY PLANNING ────────────────────────────────────────────────────┐    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Default Capacity: [200                 ]  β“˜ Default attendee limit   β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Note: Organizers can override capacity when creating events           β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                                  β”‚
β”‚  β”Œβ”€ PREVIEW ──────────────────────────────────────────────────────────────┐    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  πŸ“… Example Timeline with Current Settings:                            β”‚    β”‚
β”‚  β”‚   09:00 - 09:45   Session 1 (45 min)                                  β”‚    β”‚
β”‚  β”‚   09:45 - 10:30   Session 2 (45 min)                                  β”‚    β”‚
β”‚  β”‚   10:30 - 11:00   β˜• Break                                              β”‚    β”‚
β”‚  β”‚   11:00 - 11:45   Session 3 (45 min)                                  β”‚    β”‚
β”‚  β”‚   11:45 - 12:30   Session 4 (45 min)                                  β”‚    β”‚
β”‚  β”‚   12:30 - 13:30   🍽️ Lunch                                             β”‚    β”‚
β”‚  β”‚   13:30 - 14:15   Session 5 (45 min)                                  β”‚    β”‚
β”‚  β”‚   14:15 - 15:00   Session 6 (45 min)                                  β”‚    β”‚
β”‚  β”‚   15:00 - 15:30   β˜• Break                                              β”‚    β”‚
β”‚  β”‚   15:30 - 16:15   Session 7 (45 min) [Optional]                       β”‚    β”‚
β”‚  β”‚   16:15 - 17:00   Session 8 (45 min) [Optional]                       β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β”‚  Total: 6 required + 2 optional = 6-8 slots βœ“                         β”‚    β”‚
β”‚  β”‚                                                                         β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                                  β”‚
β”‚  ⚠️ Warning: Changes will apply to future events only.                          β”‚
β”‚              54 existing events use the current configuration.                  β”‚
β”‚                                                                                  β”‚
β”‚  [Cancel]                                                 [Save Changes]        β”‚
β”‚                                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Component: EventTypeConfigurationForm

Material-UI Components: Dialog, DialogTitle, DialogContent, DialogActions, TextField, Switch, Button, Alert

Props:

typescript
interface EventTypeConfigurationFormProps {
  eventType: EventType;
  initialConfig?: EventSlotConfiguration;
  open: boolean;
  onClose: () => void;
  onSave: (config: EventSlotConfiguration) => Promise<void>;
}

Validation Rules:

  • Min Slots > 0
  • Max Slots β‰₯ Min Slots
  • Slot Duration β‰₯ 15 minutes
  • Default Capacity > 0
  • Start Time < End Time

Behavior:

  • Real-time preview updates as user changes values
  • Validation errors shown inline with red text
  • [Save Changes] disabled until all validation passes
  • Warning shows count of existing events using current config

Responsive Behavior

Mobile (< 768px)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Event Type                 β”‚
β”‚  [Full Day Event        β–Ό]  β”‚
β”‚                             β”‚
β”‚  β”Œβ”€ PREVIEW ───────────────┐│
β”‚  β”‚ πŸ“Š Full Day Event       β”‚β”‚
β”‚  β”‚                         β”‚β”‚
β”‚  β”‚ 🎯 6-8 slots            β”‚β”‚
β”‚  β”‚ ⏱️ 45 min each          β”‚β”‚
β”‚  β”‚ πŸ‘₯ 200 capacity         β”‚β”‚
β”‚  β”‚ πŸ• 09:00-17:00          β”‚β”‚
β”‚  β”‚                         β”‚β”‚
β”‚  β”‚ [View Timeline]         β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  • Preview cards stack vertically
  • Timeline collapsed behind [View Timeline] button
  • Configuration form becomes full-screen modal

Tablet (768px - 1024px)

  • Two-column layout: Selector left, Preview right
  • Timeline visible but scrollable
  • Configuration form as centered modal

Desktop (> 1024px)

  • Side-by-side layout as shown in wireframes
  • Full timeline visible without scrolling
  • Configuration form as wide modal

Accessibility (WCAG 2.1 AA)

Keyboard Navigation:

  • Tab through: Event Type dropdown β†’ each form field β†’ buttons
  • Enter/Space: Opens dropdown, activates buttons
  • Arrow keys: Navigate dropdown options
  • Escape: Closes dropdown or modal

Screen Reader:

  • aria-label on event type selector: β€œSelect event type format”
  • aria-describedby linking to preview section
  • Live region announces when preview updates
  • Form fields have proper labels and error messages

Visual:

  • Color contrast ratio β‰₯ 4.5:1 for all text
  • Focus indicators visible on all interactive elements
  • Icons supplemented with text labels
  • Error messages not conveyed by color alone

State Management

React Query Hooks:

typescript
// Fetch all event types (cached 1 hour)
const { data: eventTypes } = useEventTypes();

// Fetch specific event type
const { data: eventType } = useEventType(EventType.FULL_DAY);

// Update event type configuration (ORGANIZER only)
const updateMutation = useUpdateEventType();

Local State (Zustand):

typescript
interface EventCreationStore {
  selectedEventType: EventType;
  setEventType: (type: EventType) => void;
  slotConfiguration: EventSlotConfiguration | null;
}

API Integration

GET /api/events/types - List all event types

  • Used by: EventTypeSelector on load
  • Caching: 1 hour (types rarely change)
  • Response: Array of EventSlotConfiguration

GET /api/events/types/{type} - Get specific type

  • Used by: SlotTemplatePreview for detailed info
  • Caching: 1 hour
  • Response: EventSlotConfiguration

PUT /api/events/types/{type} - Update configuration

  • Used by: EventTypeConfigurationForm on save
  • Auth: ORGANIZER role required
  • Cache invalidation: Clears eventTypes cache
  • Response: Updated EventSlotConfiguration

Component Hierarchy

EventManagementDashboard
β”œβ”€β”€ QuickActions (NEW - Story 5.1)
β”‚   β”œβ”€β”€ Paper (Material-UI)
β”‚   β”œβ”€β”€ Typography (header)
β”‚   └── Stack (button list)
β”‚       β”œβ”€β”€ Button [+ New Event]
β”‚       β”œβ”€β”€ Button [βš™οΈ Event Types] β†’ Navigate to /organizer/event-types
β”‚       β”œβ”€β”€ Typography (helper text)
β”‚       └── Button [Future actions] (disabled)
β”‚
└── [Rest of dashboard components]

EventCreationForm
β”œβ”€β”€ EventTypeSelector
β”‚   β”œβ”€β”€ FormControl (Material-UI)
β”‚   β”œβ”€β”€ Select (Material-UI)
β”‚   └── MenuItem (Material-UI) x3
β”‚
└── SlotTemplatePreview
    β”œβ”€β”€ Card (Material-UI)
    β”œβ”€β”€ CardContent
    β”‚   β”œβ”€β”€ Typography (header)
    β”‚   β”œβ”€β”€ Stack (info chips)
    β”‚   β”‚   └── Chip x4
    β”‚   β”œβ”€β”€ Divider
    β”‚   β”œβ”€β”€ Typography (timeline header)
    β”‚   β”œβ”€β”€ List (timeline items)
    β”‚   β”‚   └── ListItem x10
    β”‚   └── Alert (info message)
    └── CardActions (optional)

EventTypeConfigurationAdmin (Route: /organizer/event-types)
β”œβ”€β”€ Card x3 (one per event type)
β”‚   β”œβ”€β”€ CardHeader
β”‚   β”œβ”€β”€ CardContent
β”‚   └── CardActions
β”‚       └── IconButton [Edit]
β”‚
└── EventTypeConfigurationModal
    β”œβ”€β”€ Dialog (Material-UI)
    β”œβ”€β”€ DialogTitle
    β”œβ”€β”€ DialogContent
    β”‚   β”œβ”€β”€ TextField x6 (form fields)
    β”‚   β”œβ”€β”€ Switch x1 (theoretical AM)
    β”‚   └── SlotTemplatePreview (live preview)
    └── DialogActions
        β”œβ”€β”€ Button [Cancel]
        └── Button [Save Changes]

Testing Scenarios

EventTypeSelector Tests:

  • βœ“ Displays 3 event type options
  • βœ“ Shows slot details in each option
  • βœ“ Calls onChange when type selected
  • βœ“ Disables when disabled prop is true
  • βœ“ Pre-selects current value

SlotTemplatePreview Tests:

  • βœ“ Displays correct info for each event type
  • βœ“ Shows timeline with correct slot count
  • βœ“ Updates when eventType prop changes
  • βœ“ Calculates correct timing based on duration
  • βœ“ Shows optional slots in gray

EventTypeConfigurationForm Tests:

  • βœ“ Validates min slots ≀ max slots
  • βœ“ Prevents saving with invalid data
  • βœ“ Updates preview in real-time
  • βœ“ Shows warning about existing events
  • βœ“ Calls onSave with correct data

E2E Test:

  • βœ“ Organizer creates event and selects type
  • βœ“ Preview updates to match selection
  • βœ“ Event saves with correct slot configuration
  • βœ“ Admin edits event type configuration
  • βœ“ Changes apply to new events only

Implementation Notes

  1. Event Type Selector goes in Event Creation/Edit form (Story 1.16)
  2. Slot Template Preview appears immediately below selector
  3. Admin Configuration accessible via System Settings β†’ Event Types
  4. All components use Material-UI for consistency
  5. Real-time preview uses React state (no API calls during editing)
  6. Configuration changes invalidate React Query cache
  7. Cache strategy: Aggressive (1 hour) because event types rarely change