Skip to content
Snippets Groups Projects
Commit 74e6a1d2 authored by Planoetscher Daniel (Student Com20)'s avatar Planoetscher Daniel (Student Com20)
Browse files

changes for avatar

parent cadc8256
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,7 @@ import TextInput from 'components/ui/TextInput'; ...@@ -5,7 +5,7 @@ import TextInput from 'components/ui/TextInput';
import Button from 'components/ui/Button'; import Button from 'components/ui/Button';
interface Props { interface Props {
onSubmit?: (name?: string, email?: string,) => void; onSubmit?: (name?: string, email?: string, avatar?: File) => void;
user: User user: User
} }
...@@ -21,15 +21,29 @@ function validateEmail(email?: string): string | null { ...@@ -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) { export default function UserForm({ user, onSubmit }: Props) {
const [name, setName] = useState(user.realname); const [name, setName] = useState(user.realname);
const [email, setEmail] = useState(user.email); const [email, setEmail] = useState(user.email);
const [avatar, setAvatar] = useState<File>();
const handleSubmit = useCallback(async (e: FormEvent) => { const handleSubmit = useCallback(async (e: FormEvent) => {
e.preventDefault(); e.preventDefault();
if (validateEmail(email) === null) { if (validateEmail(email) === null || validateAvatar(avatar) === null) {
onSubmit?.(name, email); onSubmit?.(name, email, avatar);
} }
}, [onSubmit, name, email]); }, [onSubmit, name, email, avatar]);
return ( return (
<form onSubmit={handleSubmit} className="user-form"> <form onSubmit={handleSubmit} className="user-form">
<div className="fields"> <div className="fields">
...@@ -49,7 +63,11 @@ export default function UserForm({ user, onSubmit }: Props) { ...@@ -49,7 +63,11 @@ export default function UserForm({ user, onSubmit }: Props) {
<div className="avatar-upload"> <div className="avatar-upload">
<div className="label">Avatar</div> <div className="label">Avatar</div>
<label htmlFor="avatar" className="avatar-field"> <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> </label>
</div> </div>
</div> </div>
......
import './settings.scss'; import './settings.scss';
import { useCallback, useEffect, useState } from 'react'; 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 LoadingScreen from 'components/ui/LoadingScreen';
import UserForm from 'components/forms/UserForm'; import UserForm from 'components/forms/UserForm';
import { useHistory } from 'react-router'; import { useHistory } from 'react-router';
...@@ -14,12 +14,18 @@ export default function Settings() { ...@@ -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 { try {
if (user && updateUser({realname: name, email })) { if (user && updateUser({realname: name, email })) {
if(avatar) {
console.log(avatar);
updateUserImage(avatar);
}
history.push('/tasks'); history.push('/tasks');
} }
} catch (e) { } catch (e) {
console.log(e);
} }
}, [history, user]); }, [history, user]);
......
import './task-start.scss'; import './task-start.scss';
import Tag from 'components/ui/Tag'; import Tag from 'components/ui/Tag';
import DetailGrid from 'components/layout/DetailGrid'; import DetailGrid from 'components/layout/DetailGrid';
import ButtonLink from 'components/navigation/ButtonLink';
import { useHistory, useParams } from 'react-router'; import { useHistory, useParams } from 'react-router';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { getTask, StatusColors, Task } from 'adapters/task'; import { getTask, StatusColors, Task } from 'adapters/task';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment