import { ReactNode } from "react"; import { Header } from "./Header"; import { LoadingState } from "./LoadingState"; import { ErrorDisplay } from "./ErrorDisplay"; import { layoutStyles } from "../styles/shared"; type PageId = | "profile" | "invites" | "exchange" | "trades" | "admin-invites" | "admin-availability" | "admin-trades" | "admin-price-history" | "admin-pricing"; interface PageLayoutProps { /** Current page ID for navigation highlighting */ currentPage: PageId; /** Whether the page is loading (shows loading state) */ isLoading?: boolean; /** Whether the user is authorized (hides page if false) */ isAuthorized?: boolean; /** Error message to display */ error?: string | null; /** Page content */ children: ReactNode; /** Custom content wrapper style */ contentStyle?: React.CSSProperties; } /** * Standard page layout component that handles common page structure: * - Loading state * - Authorization check * - Header navigation * - Error banner * - Content wrapper */ export function PageLayout({ currentPage, isLoading = false, isAuthorized = true, error, children, contentStyle, }: PageLayoutProps) { if (isLoading) { return ; } if (!isAuthorized) { return null; } return (
{children}
); }