Tatiana Inama пре 4 година
родитељ
комит
9fcbd3dd9b
4 измењених фајлова са 22 додато и 17 уклоњено
  1. 4 7
      context/UserContext.tsx
  2. 4 5
      pages/login.tsx
  3. 0 4
      pages/settings.tsx
  4. 14 1
      utils/api.ts

+ 4 - 7
context/UserContext.tsx

@@ -2,22 +2,19 @@ import React, { useState, FC } from "react";
 
 interface UserContextInterface {
   user?: User;
-  logged: boolean;
-  setLogged: React.Dispatch<React.SetStateAction<boolean>>;
-  setUser: React.Dispatch<React.SetStateAction<User | undefined>>;
+  setUser:
+    | React.Dispatch<React.SetStateAction<User | undefined>>
+    | ((value: React.SetStateAction<User | undefined>) => void);
 }
 
 export const UserContext = React.createContext<UserContextInterface>({
-  logged: false,
-  setLogged: () => {},
   setUser: () => {},
 });
 
 const UserContextProvider: FC = ({ children }) => {
   const [user, setUser] = useState<User>();
-  const [logged, setLogged] = useState<boolean>(false);
   return (
-    <UserContext.Provider value={{ user, setUser, logged, setLogged }}>
+    <UserContext.Provider value={{ user, setUser }}>
       {children}
     </UserContext.Provider>
   );

+ 4 - 5
pages/login.tsx

@@ -7,20 +7,19 @@ import { useRouter } from "next/router";
 import api from "../utils/api";
 
 const Login: NextPage = () => {
-  const context = useContext(UserContext);
+  const { setUser } = useContext(UserContext);
   const router = useRouter();
 
   const { error, submitHandler, success } = useForm(api.login);
 
   useEffect(() => {
-    if (success && context) {
-      context.setLogged(true);
-      context.setUser(success.result);
+    if (success) {
+      setUser(success.result);
       setTimeout(() => {
         router.push("/");
       }, 1000);
     }
-  }, [success, context, router]);
+  }, [success, setUser, router]);
 
   return (
     <Layout>

+ 0 - 4
pages/settings.tsx

@@ -3,11 +3,9 @@ import { useContext, useEffect } from "react";
 import Layout from "../components/Layout";
 import { UserContext } from "../context/UserContext";
 import useForm from "../hooks/useForm";
-import useRedirect from "../hooks/useRedirect";
 import api from "../utils/api";
 
 const Settings: NextPage = () => {
-  const _ = useRedirect();
   const { user, setUser } = useContext(UserContext);
 
   const { error, submitHandler, success } = useForm(api.updateUser);
@@ -27,8 +25,6 @@ const Settings: NextPage = () => {
       </Layout>
     );
   }
-
-  console.log(user);
   return (
     <Layout>
       <form className="form" onSubmit={submitHandler}>

+ 14 - 1
utils/api.ts

@@ -76,7 +76,20 @@ export const register: FetchApiInterface<
 export const updateUser: FetchApiInterface<
   Partial<User> & Pick<User, "id">
 > = async ({ id, ...body }) => {
-  return fetchApi(`/user/${JSON.stringify(id)}`, ApiMethods.PUT, body);
+  const response = await fetchApi(`/user/${id}`, ApiMethods.PUT, body);
+  switch (response.state) {
+    case ApiResulState.SUCCESS: {
+      return {
+        ...response,
+        user: {
+          ...response.user,
+          id: id,
+        },
+      };
+    }
+    default:
+      return response;
+  }
 };
 
 const fetchUsers = async (): Promise<Array<User>> => {