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

textinput updates

parent 210e7a12
No related branches found
No related tags found
No related merge requests found
import React, { ChangeEvent, Dispatch } from "react"; import React, { ChangeEvent, Dispatch, FocusEvent, useState } from "react";
import './text-input.scss'; import './text-input.scss';
...@@ -7,17 +7,28 @@ interface Props { ...@@ -7,17 +7,28 @@ interface Props {
name: string, name: string,
color?: 'dark' color?: 'dark'
type?: 'password' | 'textarea' | 'text', type?: 'password' | 'textarea' | 'text',
valueSetter?: Dispatch<string>, onChange: Dispatch<string>,
error?: string validateFn: (arg0: string) => string | null;
} }
export default function TextInput({ label, name, type, color, valueSetter, error }: Props) { export default function TextInput({ label, name, type, color, onChange, validateFn }: Props) {
const [error, setError] = useState('');
type = type ?? 'text'; type = type ?? 'text';
const setValue = (e: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>): void => { const setValue = (e: ChangeEvent<HTMLTextAreaElement | HTMLInputElement>): void => {
if (valueSetter) onChange(e.target.value);
valueSetter(e.target.value); }
const validateField = (e: FocusEvent<HTMLTextAreaElement | HTMLInputElement>): void => {
if (validateFn) {
let error = validateFn(e.target.value);
if (error)
setError(error);
else
setError('');
}
} }
const errorTag = error ? (<div className="error">{error}</div>) : null; const errorTag = error ? (<div className="error">{error}</div>) : null;
...@@ -28,8 +39,8 @@ export default function TextInput({ label, name, type, color, valueSetter, error ...@@ -28,8 +39,8 @@ export default function TextInput({ label, name, type, color, valueSetter, error
<label htmlFor={name}>{label}</label> <label htmlFor={name}>{label}</label>
{ {
type === 'textarea' ? type === 'textarea' ?
(<textarea onChange={(e) => setValue(e)} name={name} id={name}></textarea>) (<textarea onChange={setValue} name={name} id={name} onBlur={validateField}></textarea>)
: (<input onChange={(e) => setValue(e)} type={type} name={name} id={name} />) : (<input onChange={setValue} type={type} name={name} id={name} onBlur={validateField} />)
} }
</div > </div >
{errorTag} {errorTag}
......
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
.error { .error {
color: s.$error-color; color: s.$error-color;
margin-top: 5px; margin-top: 10px;
padding-left: 15px;
} }
.input-field { .input-field {
......
import Project from 'components/ui/Project'; import Project from 'components/ui/Project';
import ButtonLink from 'components/ui/ButtonLink'; import ButtonLink from 'components/ui/ButtonLink';
import Button from 'components/ui/Button'; import Button from 'components/ui/Button';
import TextInput from 'components/ui/TextInput'; //import TextInput from 'components/ui/TextInput';
import Page from 'components/ui/Page'; import Page from 'components/ui/Page';
import './home.scss'; import './home.scss';
...@@ -150,11 +150,11 @@ export default function Home() { ...@@ -150,11 +150,11 @@ export default function Home() {
to help you resolve the issue. to help you resolve the issue.
</p> </p>
<form className="contact-form" action="mailto:dplanoetscher@unibz.it" method="GET"> <form className="contact-form" action="mailto:dplanoetscher@unibz.it" method="GET">
<TextInput label="Fistname" name="firstname" /> {/* <TextInput label="Fistname" name="firstname" />
<TextInput label="Lastname" name="lastname" /> <TextInput label="Lastname" name="lastname" />
<TextInput label="Email" name="email" /> <TextInput label="Email" name="email" />
<TextInput label="Subject" name="subject" /> <TextInput label="Subject" name="subject" />
<TextInput label="Message" name="message" type="textarea" /> <TextInput label="Message" name="message" type="textarea" />*/}
<div className="button-container"> <div className="button-container">
<Button type="submit">Send</Button> <Button type="submit">Send</Button>
</div> </div>
......
...@@ -7,20 +7,17 @@ import { registerUser } from 'adapters/api'; ...@@ -7,20 +7,17 @@ import { registerUser } from 'adapters/api';
import './register.scss'; import './register.scss';
function usernameIsValid(username: string) { function usernameIsValid(username: string) {
return (username && username.length > 3); return (username && username.length > 3) ? null : 'Username has to be at least 4 characters long.';
} }
function passwordIsValid(password: string) { function passwordIsValid(password: string) {
return (password && password.length > 5); return (password && password.length > 5) ? null : 'Password has to be at least 6 characters long';
} }
export default function Register() { export default function Register() {
const [username, setUsername] = useState<string>(''); const [username, setUsername] = useState<string>('');
const [usernameError, setUsernameError] = useState<string>('');
const [password, setPassword] = useState<string>(''); const [password, setPassword] = useState<string>('');
const [passwordError, setPasswordError] = useState<string>('');
const history = useHistory(); const history = useHistory();
...@@ -28,28 +25,11 @@ export default function Register() { ...@@ -28,28 +25,11 @@ export default function Register() {
e.preventDefault(); e.preventDefault();
if (usernameIsValid(username) && passwordIsValid(password)) { if (usernameIsValid(username) && passwordIsValid(password)) {
setPasswordError('');
setUsernameError('');
await registerUser(username, password).then((data) => { await registerUser(username, password).then((data) => {
console.log(data);
history.push('/tasks'); history.push('/tasks');
}).catch(() => { }).catch(() => {
setUsernameError('This username is already used.');
}); });
} else {
if (!usernameIsValid(username))
setUsernameError('Your username has to be at least 4 characters long');
else
setUsernameError('');
if (!passwordIsValid(password))
setPasswordError('Your password has to be at least 6 characters long');
else
setPasswordError('');
} }
} }
...@@ -62,16 +42,16 @@ export default function Register() { ...@@ -62,16 +42,16 @@ export default function Register() {
label="Username" label="Username"
name="username" name="username"
color="dark" color="dark"
valueSetter={setUsername} onChange={setUsername}
error={usernameError} validateFn={usernameIsValid}
/> />
<TextInput <TextInput
label="Password" label="Password"
name="password" name="password"
color="dark" color="dark"
type="password" type="password"
valueSetter={setPassword} onChange={setPassword}
error={passwordError} validateFn={passwordIsValid}
/> />
<Button type="submit"> <Button type="submit">
Register now Register now
......
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