mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-09-23 23:10:34 +00:00
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
import React, { useState, useEffect } from "react";
|
|
|
|
import { getUser, UserResponse } from "api/npm";
|
|
import { useAuthState } from "context";
|
|
|
|
// Context
|
|
const initalValue = null;
|
|
const UserContext = React.createContext<UserResponse | null>(initalValue);
|
|
|
|
// Provider
|
|
interface Props {
|
|
children?: JSX.Element;
|
|
}
|
|
function UserProvider({ children }: Props) {
|
|
const [userData, setUserData] = useState<UserResponse>({
|
|
id: 0,
|
|
name: "",
|
|
nickname: "",
|
|
email: "",
|
|
createdOn: 0,
|
|
updatedOn: 0,
|
|
roles: [],
|
|
gravatarUrl: "",
|
|
isDisabled: false,
|
|
});
|
|
const { authenticated } = useAuthState();
|
|
|
|
const fetchUserData = async () => {
|
|
const response = await getUser();
|
|
setUserData({ ...userData, ...response });
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (authenticated) {
|
|
fetchUserData();
|
|
}
|
|
/* eslint-disable-next-line */
|
|
}, [authenticated]);
|
|
|
|
return (
|
|
<UserContext.Provider value={userData}>{children}</UserContext.Provider>
|
|
);
|
|
}
|
|
|
|
function useUserState() {
|
|
const context = React.useContext(UserContext);
|
|
if (!context) {
|
|
throw new Error(`useUserState must be used within a UserProvider`);
|
|
}
|
|
return context;
|
|
}
|
|
|
|
export { UserProvider, useUserState };
|
|
export default UserContext;
|