freshyo/apps/web-ui/.output/server/_ssr/auth-context-DzjwonUC.mjs
2026-05-10 16:45:39 +05:30

104 lines
2.9 KiB
JavaScript

import { o as __toESM } from "../_runtime.mjs";
import { h as require_react, m as require_jsx_runtime } from "../_libs/react+tanstack__react-query.mjs";
import { n as trpc } from "./trpc-client-CQOIB5UU.mjs";
import { l as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
//#region node_modules/.nitro/vite/services/ssr/assets/auth-context-DzjwonUC.js
var import_react = /* @__PURE__ */ __toESM(require_react());
var import_jsx_runtime = require_jsx_runtime();
var AuthContext = (0, import_react.createContext)(void 0);
function AuthProvider({ children }) {
const [state, setState] = (0, import_react.useState)({
user: null,
userDetails: null,
isAuthenticated: false,
isLoading: true,
token: null
});
const navigate = useNavigate();
(0, import_react.useEffect)(() => {
const storedToken = localStorage.getItem("auth_token");
const storedUserId = localStorage.getItem("user_id");
if (storedToken && storedUserId) setState((prev) => ({
...prev,
token: storedToken,
isAuthenticated: true
}));
else setState((prev) => ({
...prev,
isLoading: false
}));
}, []);
const { data: selfData } = trpc.user.user.getSelfData.useQuery(void 0, {
enabled: !!state.token && state.isAuthenticated,
retry: 1
});
(0, import_react.useEffect)(() => {
if (selfData?.data) setState((prev) => ({
...prev,
user: selfData.data,
userDetails: selfData.data,
isLoading: false
}));
else if (selfData === void 0 && state.token) {}
}, [selfData, state.token]);
const login = (0, import_react.useCallback)((token, user) => {
localStorage.setItem("auth_token", token);
localStorage.setItem("user_id", String(user.id));
setState({
user,
userDetails: user,
isAuthenticated: true,
isLoading: false,
token
});
}, []);
const loginWithToken = (0, import_react.useCallback)((token, user) => {
login(token, user);
}, [login]);
const register = (0, import_react.useCallback)((token, user) => {
login(token, user);
}, [login]);
const logout = (0, import_react.useCallback)(() => {
localStorage.removeItem("auth_token");
localStorage.removeItem("user_id");
setState({
user: null,
userDetails: null,
isAuthenticated: false,
isLoading: false,
token: null
});
navigate({ to: "/login" });
}, [navigate]);
const updateUser = (0, import_react.useCallback)((user) => {
setState((prev) => ({
...prev,
user
}));
}, []);
const updateUserDetails = (0, import_react.useCallback)((details) => {
setState((prev) => ({
...prev,
userDetails: details
}));
}, []);
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AuthContext.Provider, {
value: {
...state,
login,
loginWithToken,
register,
logout,
updateUser,
updateUserDetails
},
children
});
}
function useAuth() {
const context = (0, import_react.useContext)(AuthContext);
if (!context) throw new Error("useAuth must be used within AuthProvider");
return context;
}
//#endregion
export { useAuth as n, AuthProvider as t };