UNPKG

membros-react-sdk

Version:

React authentication library for Membros platform with subscription management and plan-based access control

48 lines 2.51 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withAdminAuth = withAdminAuth; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const AuthContext_1 = require("../AuthContext.cjs"); const LoadingScreen_1 = require("../components/LoadingScreen.cjs"); const AuthScreen_1 = require("../components/AuthScreen.cjs"); const InadimplentScreen_1 = require("../components/InadimplentScreen.cjs"); function withAdminAuth(Component, options) { return function AdminAuthWrapped(props) { const [mounted, setMounted] = (0, react_1.useState)(false); // Ensure component only renders on client side (0, react_1.useEffect)(() => { setMounted(true); }, []); if (!mounted) { return ((0, jsx_runtime_1.jsx)("div", { className: "min-h-screen flex items-center justify-center", children: (0, jsx_runtime_1.jsxs)("div", { className: "text-center", children: [(0, jsx_runtime_1.jsx)("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900 mx-auto" }), (0, jsx_runtime_1.jsx)("p", { className: "mt-2 text-sm text-gray-600", children: "Loading..." })] }) })); } const { user, originalUser, isLoading, adimplent } = (0, AuthContext_1.useAuth)(); const { adminUserId, useToast, LoadingComponent = LoadingScreen_1.LoadingScreen, AuthComponent, InadimplentComponent = InadimplentScreen_1.InadimplentScreen, UnauthorizedComponent } = options; if (isLoading) return (0, jsx_runtime_1.jsx)(LoadingComponent, {}); if (!user) { if (AuthComponent) { return (0, jsx_runtime_1.jsx)(AuthComponent, {}); } return ((0, jsx_runtime_1.jsx)(AuthScreen_1.AuthScreen, { useToast: useToast })); } if (!adimplent) return (0, jsx_runtime_1.jsx)(InadimplentComponent, {}); // Check if user is admin const isAdmin = user.id === adminUserId || (originalUser && originalUser.id === adminUserId); if (!isAdmin) { if (UnauthorizedComponent) { return (0, jsx_runtime_1.jsx)(UnauthorizedComponent, {}); } // Redirect to home if (typeof window !== "undefined") { window.location.href = "/"; } return null; } return (0, jsx_runtime_1.jsx)(Component, { ...props }); }; } //# sourceMappingURL=withAdminAuth.js.map