membros-react-sdk
Version:
React authentication library for Membros platform with subscription management and plan-based access control
48 lines • 2.51 kB
JavaScript
;
"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