Facility booking-mode redesign, Classes tab, and calendar quick-book

Implements the facility-classes-booking-dashboard plan (frontend):

- Facility create/edit replaces the single Booking Mode dropdown with
  two independent checkboxes (Classes / Walk-in booking), showing both
  capacity fields when both apply.
- New Classes tab (Memberships): create/edit recurring classes
  (Daily/Weekly/Monthly/Custom), view occurrence history, mark an
  occurrence not held, and a "Manage Plan" action that creates a
  membership plan linked to that class (with an optional "also grant
  gym access" toggle). Old Sessions tab/dialog removed from Bookings,
  superseded by this.
- Booking Dashboard calendar now shows class occurrences as distinct
  blocks (capacity/booked count, muted+dashed when not held and open
  again), clicking any event opens a status/payment detail dialog, and
  dragging a time range in Day/Week view jumps to Book Now with the
  time pre-filled (snapped to 15-minute marks).
- Renamed adhoc-booking-tab.tsx to walkin-booking-tab.tsx (component
  WalkInBookingTab, tab key "book-now") and every other "AdHoc"
  reference to "WalkIn" for a clearer, simpler name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-09 14:27:17 +05:30
parent 6263c99767
commit 0d2b0d553d
15 changed files with 1282 additions and 504 deletions
@@ -1,5 +1,6 @@
"use client"
import { ClassesView } from "@/components/hexa/views/classes-view"
import { FacilitiesView } from "@/components/hexa/views/facilities-view"
import { GymPlansView } from "@/components/hexa/views/gym-plans-view"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
@@ -10,6 +11,7 @@ function MembershipsView() {
<TabsList>
<TabsTrigger value="plans">Plans</TabsTrigger>
<TabsTrigger value="facilities">Facilities</TabsTrigger>
<TabsTrigger value="classes">Classes</TabsTrigger>
</TabsList>
<TabsContent value="plans">
@@ -18,6 +20,9 @@ function MembershipsView() {
<TabsContent value="facilities">
<FacilitiesView />
</TabsContent>
<TabsContent value="classes">
<ClassesView />
</TabsContent>
</Tabs>
)
}