{"version":3,"sources":["../../../src/primitives/Scheduling/MyBookingsList.tsx"],"names":[],"mappings":"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","file":"MyBookingsList.mjs","sourcesContent":["import {\n  createContext,\n  useContext,\n  type ReactNode,\n} from 'react';\nimport {\n  useMyBookings,\n  type UseMyBookingsOptions,\n  type UseMyBookingsResult,\n} from '../../hooks/useMyBookings';\nimport type { SchedulingMyBookingRow } from '../../types/scheduling';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nconst MyBookingsListContext = createContext<UseMyBookingsResult | null>(null);\n\nfunction useMyBookingsListContext(): UseMyBookingsResult {\n  const ctx = useContext(MyBookingsListContext);\n  if (!ctx) {\n    throw new Error('<MyBookingsList.*> must be rendered inside <MyBookingsList>.');\n  }\n  return ctx;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\nexport interface MyBookingsListProps extends UseMyBookingsOptions {\n  className?: string;\n  children: ReactNode;\n  /**\n   * Optionally pass an externally-managed bookings result (e.g. when the\n   * parent island already calls useMyBookings to drive a header summary).\n   * When omitted, the root creates its own via useMyBookings().\n   */\n  bookings?: UseMyBookingsResult;\n}\n\nfunction MyBookingsListRoot({\n  className,\n  children,\n  bookings: external,\n  ...hookOpts\n}: MyBookingsListProps) {\n  // Hooks can't be called conditionally, so the internal hook always runs.\n  // When an external hook is supplied, suppress its initial fetch so the\n  // network call doesn't fire twice.\n  const internal = useMyBookings(\n    external ? { skipInitialLoad: true } : hookOpts,\n  );\n  const value = external ?? internal;\n  return (\n    <MyBookingsListContext.Provider value={value}>\n      <div className={className}>{children}</div>\n    </MyBookingsListContext.Provider>\n  );\n}\n\n// ─── Loading ──────────────────────────────────────────────────────────────────\n\nexport interface MyBookingsListLoadingProps {\n  className?: string;\n  children?: ReactNode;\n}\n\nfunction Loading({ className, children }: MyBookingsListLoadingProps) {\n  const { loading } = useMyBookingsListContext();\n  if (!loading) return null;\n  return <div className={className}>{children ?? 'Loading…'}</div>;\n}\n\n// ─── Error ────────────────────────────────────────────────────────────────────\n\nexport interface MyBookingsListErrorProps {\n  className?: string;\n  /** Render override receiving the error message. */\n  children?: (message: string) => ReactNode;\n}\n\nfunction ErrorMessage({ className, children }: MyBookingsListErrorProps) {\n  const { error } = useMyBookingsListContext();\n  if (!error) return null;\n  return (\n    <div className={className} role=\"alert\">\n      {children ? children(error) : error}\n    </div>\n  );\n}\n\n// ─── Empty ────────────────────────────────────────────────────────────────────\n\nexport interface MyBookingsListEmptyProps {\n  className?: string;\n  children?: ReactNode;\n}\n\nfunction Empty({ className, children }: MyBookingsListEmptyProps) {\n  const { upcoming, past, loading, error } = useMyBookingsListContext();\n  // Hide the empty state while we're still resolving — otherwise it flashes\n  // before the first fetch resolves.\n  if (loading || error) return null;\n  if (upcoming.length > 0 || past.length > 0) return null;\n  return <div className={className}>{children}</div>;\n}\n\n// ─── Item render-prop ─────────────────────────────────────────────────────────\n\nexport interface MyBookingsItemHelpers {\n  /** Initiate cancellation of this row. */\n  cancel: () => void;\n  /** True while THIS row's cancellation is in flight. */\n  cancelling: boolean;\n}\n\nexport type MyBookingsItemRenderer = (\n  booking: SchedulingMyBookingRow,\n  helpers: MyBookingsItemHelpers,\n) => ReactNode;\n\n// ─── Upcoming ─────────────────────────────────────────────────────────────────\n\nexport interface MyBookingsListUpcomingProps {\n  className?: string;\n  /** Render each upcoming booking. Receives { cancel, cancelling }. */\n  renderItem: MyBookingsItemRenderer;\n  /** Wrapper around the item list (e.g. a section header). */\n  children?: ReactNode;\n  /**\n   * If true, the section renders even when there are no upcoming bookings —\n   * useful when `children` carries a heading you want shown regardless.\n   * Defaults to false (whole section hides when empty).\n   */\n  renderEmpty?: boolean;\n}\n\nfunction Upcoming({\n  className,\n  renderItem,\n  children,\n  renderEmpty = false,\n}: MyBookingsListUpcomingProps) {\n  const { upcoming, cancelling, cancel } = useMyBookingsListContext();\n  if (!renderEmpty && upcoming.length === 0) return null;\n  return (\n    <div className={className}>\n      {children}\n      {upcoming.map((b) => renderItem(b, {\n        cancel: () => cancel(b.id),\n        cancelling: cancelling === b.id,\n      }))}\n    </div>\n  );\n}\n\n// ─── Past ─────────────────────────────────────────────────────────────────────\n\nexport interface MyBookingsListPastProps {\n  className?: string;\n  renderItem: MyBookingsItemRenderer;\n  children?: ReactNode;\n  renderEmpty?: boolean;\n}\n\nfunction Past({\n  className,\n  renderItem,\n  children,\n  renderEmpty = false,\n}: MyBookingsListPastProps) {\n  const { past, cancelling, cancel } = useMyBookingsListContext();\n  if (!renderEmpty && past.length === 0) return null;\n  return (\n    <div className={className}>\n      {children}\n      {past.map((b) => renderItem(b, {\n        cancel: () => cancel(b.id),\n        cancelling: cancelling === b.id,\n      }))}\n    </div>\n  );\n}\n\n// ─── Compound export ──────────────────────────────────────────────────────────\n\nexport const MyBookingsList = Object.assign(MyBookingsListRoot, {\n  Loading,\n  Error: ErrorMessage,\n  Empty,\n  Upcoming,\n  Past,\n});\n"]}