From 74e6a1d20f9e955ca5a09ea0926534f8c9b7a351 Mon Sep 17 00:00:00 2001
From: "Planoetscher Daniel (Student Com20)"
 <daniel.planoetscher@stud-inf.unibz.it>
Date: Thu, 20 May 2021 23:09:50 +0200
Subject: [PATCH] changes for avatar

---
 .../src/components/forms/UserForm/index.tsx   | 28 +++++++++++++++----
 client/src/pages/Settings/index.tsx           | 10 +++++--
 client/src/pages/Tasks/TaskStart/index.tsx    |  1 -
 3 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/client/src/components/forms/UserForm/index.tsx b/client/src/components/forms/UserForm/index.tsx
index 898c178..69eadca 100644
--- a/client/src/components/forms/UserForm/index.tsx
+++ b/client/src/components/forms/UserForm/index.tsx
@@ -5,7 +5,7 @@ import TextInput from 'components/ui/TextInput';
 import Button from 'components/ui/Button';
 
 interface Props {
-    onSubmit?: (name?: string, email?: string,) => void;
+    onSubmit?: (name?: string, email?: string, avatar?: File) => void;
     user: User
 }
 
@@ -21,15 +21,29 @@ function validateEmail(email?: string): string | null {
     }
 }
 
+function validateAvatar(avatar?: File): string | null {
+    const validTypes = ['image/jpg', 'image/png', 'image/gif']
+    if (avatar) {
+        if (validTypes.find((type) => type === avatar.type)) {
+            return null;
+        } else {
+            return 'Only files from type jpg, png or gif are allowed'
+        }
+    } else {
+        return null;
+    }
+}
+
 export default function UserForm({ user, onSubmit }: Props) {
     const [name, setName] = useState(user.realname);
     const [email, setEmail] = useState(user.email);
+    const [avatar, setAvatar] = useState<File>();
     const handleSubmit = useCallback(async (e: FormEvent) => {
         e.preventDefault();
-        if (validateEmail(email) === null) {
-            onSubmit?.(name, email);
+        if (validateEmail(email) === null || validateAvatar(avatar) === null) {
+            onSubmit?.(name, email, avatar);
         }
-    }, [onSubmit, name, email]);
+    }, [onSubmit, name, email, avatar]);
     return (
         <form onSubmit={handleSubmit} className="user-form">
             <div className="fields">
@@ -49,7 +63,11 @@ export default function UserForm({ user, onSubmit }: Props) {
                 <div className="avatar-upload">
                     <div className="label">Avatar</div>
                     <label htmlFor="avatar" className="avatar-field">
-                        <input type="file" id="avatar" name="avatar" />
+                        <input type="file" id="avatar" name="avatar" onChange={(e) => {
+                            if (e.target.files && e.target.files.length > 0) {
+                                setAvatar(e.target.files[0])
+                            }
+                        }} />
                     </label>
                 </div>
             </div>
diff --git a/client/src/pages/Settings/index.tsx b/client/src/pages/Settings/index.tsx
index 3097213..204a830 100644
--- a/client/src/pages/Settings/index.tsx
+++ b/client/src/pages/Settings/index.tsx
@@ -1,6 +1,6 @@
 import './settings.scss';
 import { useCallback, useEffect, useState } from 'react';
-import { getCurrentUser, updateUser, User } from 'adapters/user';
+import { getCurrentUser, updateUser, updateUserImage, User } from 'adapters/user';
 import LoadingScreen from 'components/ui/LoadingScreen';
 import UserForm from 'components/forms/UserForm';
 import { useHistory } from 'react-router';
@@ -14,12 +14,18 @@ export default function Settings() {
     }, []);
 
 
-    const handleSubmit = useCallback(async (name?: string, email?: string) => {
+    const handleSubmit = useCallback(async (name?: string, email?: string, avatar?: File) => {
         try {
             if (user && updateUser({realname: name, email })) {
+                if(avatar) {
+                    console.log(avatar);
+                    updateUserImage(avatar);
+                }
                 history.push('/tasks');
             }
         } catch (e) {
+            console.log(e);
+            
         }
     }, [history, user]);
 
diff --git a/client/src/pages/Tasks/TaskStart/index.tsx b/client/src/pages/Tasks/TaskStart/index.tsx
index 9489f19..ee07faa 100644
--- a/client/src/pages/Tasks/TaskStart/index.tsx
+++ b/client/src/pages/Tasks/TaskStart/index.tsx
@@ -1,7 +1,6 @@
 import './task-start.scss';
 import Tag from 'components/ui/Tag';
 import DetailGrid from 'components/layout/DetailGrid';
-import ButtonLink from 'components/navigation/ButtonLink';
 import { useHistory, useParams } from 'react-router';
 import { useEffect, useState } from 'react';
 import { getTask, StatusColors, Task } from 'adapters/task';
-- 
GitLab