UNPKG

bananas-commerce-admin

Version:

What's this, an admin for apes?

58 lines 2.25 kB
import React, { useEffect, useState } from "react"; import { useSessionStorage } from "../hooks/useStorage"; import { useApi } from "./ApiContext"; const UserContext = React.createContext(undefined); export const useUser = () => React.useContext(UserContext); export const UserContextProvider = ({ children }) => { const api = useApi(); const [user, setUser] = useSessionStorage("bcom-admin.user"); const [hasTriedToFetchUser, setHasTriedToFetchUser] = useState(false); useEffect(() => { const getInitialUser = async () => { if (api == null) return; const user = (await api.getAuthenticatedUser()) ?? undefined; // `undefined` has meaning here! It resets the sessionStorage. setUser(user); setHasTriedToFetchUser(true); }; if (!hasTriedToFetchUser) getInitialUser(); }, [hasTriedToFetchUser, user, api]); const login = async (username, password) => { const response = await api?.operations["bananas.login:create"].call({ body: { username, password }, }); if (response?.ok) { const user = await response.json(); setUser(user); return user; } else { setUser(undefined); return null; } }; const changePassword = async (oldPassword, newPassword1, newPassword2) => { const response = await api?.operations["bananas.change_password:create"].call({ body: { old_password: oldPassword, new_password1: newPassword1, new_password2: newPassword2, }, }); if (!response?.ok) { throw new Error("Failed to change password"); } }; const logout = async () => { const response = await api?.operations["bananas.logout:create"].call(); if (response?.ok) { setUser(undefined); return; } throw new Error("Could not log out"); }; return (React.createElement(UserContext.Provider, { value: { user, login, logout, changePassword, hasTriedToFetchUser } }, children)); }; export default UserContext; //# sourceMappingURL=UserContext.js.map