You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Guillermo Pages 13097541f1
continuous-integration/drone/push Build is passing Details
feat(bookings): add provider-aware UI components for booking management
Implemented complete UI foundation for booking drawer with provider gating:

**Components Created:**

1. **ProviderBanner** (src/components/bookings/ProviderBanner.tsx)
   - Displays informational banner for FairPlay clubs
   - "This club is managed by {provider}" messaging
   - Only shows for non-local providers
   - Blue theme with Info icon

2. **CapacityDisplay** (src/components/bookings/CapacityDisplay.tsx)
   - Shows "X / Y booked · Z remaining" format
   - Three variants: default, compact, inline
   - Color-coded availability (red=full, orange=low, gray=available)
   - Responsive text sizing

3. **NotifyPlayersToggle** (src/components/bookings/NotifyPlayersToggle.tsx)
   - Toggle for controlling player notifications
   - Defaults to ON (true)
   - Persists preference to localStorage (key: booking_admin_notify_players)
   - SSR-safe with hydration protection
   - Bell/BellOff icon feedback
   - Exports getStoredNotifyPreference() helper

4. **BookingDrawer** (src/components/bookings/BookingDrawer.tsx)
   - Main booking management UI (360+ lines)
   - Provider-aware: disables actions for FairPlay clubs
   - Displays: time, location, capacity, attendees, booked_by
   - Status badges (confirmed/cancelled/no_show)
   - Attendee type badges (app_user/guest/remote_member)
   - Action buttons: Move, Edit Attendees, Cancel (hidden for FairPlay)
   - ETag support for optimistic concurrency
   - Loading and error states
   - Integrates all sub-components

**Features:**
- Read-only mode for FairPlay bookings (provider.manages_slot_storage === false)
- Capacity display with color-coded availability
- Notification toggle with localStorage persistence
- Professional slate theme matching existing UI
- Fully typed with BookingDetail interface
- Error handling with user-friendly messages

**TODO Placeholders:**
- Move booking flow (button wired, implementation pending)
- Edit attendees flow (button wired, implementation pending)
- Cancel booking flow (button wired, implementation pending)

Related: Phase 3, Booking Admin API v1.1, BUILD #22
1 month ago
..
app fix(admin): duration validation + sport variation display 1 month ago
assets feat(phase-0): integrate admin clubs API with staging backend 1 month ago
components feat(bookings): add provider-aware UI components for booking management 1 month ago
config feat(phase-0): integrate admin clubs API with staging backend 1 month ago
constants feat(phase-0): integrate admin clubs API with staging backend 1 month ago
contexts feat(phase-0): integrate admin clubs API with staging backend 1 month ago
hooks feat(phase-0): integrate admin clubs API with staging backend 1 month ago
lib feat(bookings): add TypeScript types and API client for Booking Admin v1.1 1 month ago
services feat(phase-0): integrate admin clubs API with staging backend 1 month ago
styles feat(phase-0): integrate admin clubs API with staging backend 1 month ago
types feat(bookings): add TypeScript types and API client for Booking Admin v1.1 1 month ago
utils feat(phase-0): integrate admin clubs API with staging backend 1 month ago
index.css feat(phase-0): integrate admin clubs API with staging backend 1 month ago
middleware.ts fix(middleware): handle invalid locale values in Accept-Language header 1 month ago