197 lines
5.6 KiB
TypeScript
197 lines
5.6 KiB
TypeScript
import React, { useRef, useState } from 'react';
|
|
import useSWR from 'swr';
|
|
import { Link } from 'react-router-dom';
|
|
import toast, { Toaster } from 'react-hot-toast';
|
|
import {TUser} from '../context/UserContext';
|
|
import {getProfilData, updateDog} from '../services/PhpApi';
|
|
import CreateQr from '../services/CreateQr';
|
|
import Img from './Img';
|
|
import './InputForm.css';
|
|
import './Profil.css';
|
|
import { TextInput } from '@mantine/core';
|
|
|
|
function Profil()
|
|
{
|
|
const [formData, setFormData] = useState({
|
|
email:'',
|
|
name:'',
|
|
phone:'',
|
|
qr_code: ''
|
|
});
|
|
|
|
// const { data, error, isLoading } = useSWR( user?.qr_id, getDog);
|
|
const { data, error, isLoading, mutate } = useSWR( "profilData", getProfilData);
|
|
|
|
const edit = useRef(false);
|
|
const formDataSave = useRef(formData); // just to fill it
|
|
// data ist dogdata, logindata holt sich getProfilData.php aus $_SESSION
|
|
if (error) return (<div>failed to load</div>);
|
|
if (isLoading) return (<div>loading...</div>);
|
|
|
|
const user: TUser =
|
|
{
|
|
id: data.data.id,
|
|
qr_id: data.data.qr_id,
|
|
email: data.data.email,
|
|
name: data.data.name
|
|
};
|
|
console.log('Profil data');
|
|
console.log(data);
|
|
console.log('Profil user');
|
|
console.log(user);
|
|
|
|
if(data.data.qr_code === null && document.getElementById("canvas") != null)
|
|
{
|
|
// qrcode generieren und in der Datenbank speichern
|
|
CreateQr({qr_id: user?.qr_id})
|
|
.catch(err =>
|
|
{
|
|
console.log('Profil CreateQr Error');
|
|
console.error(err);
|
|
});
|
|
}
|
|
|
|
let formData_loc =
|
|
{
|
|
email: '',
|
|
name: '',
|
|
phone: '',
|
|
qr_code: ''
|
|
};
|
|
|
|
if (edit.current)
|
|
{
|
|
formData_loc = {...formDataSave.current}; // copy constructor
|
|
}
|
|
else
|
|
{
|
|
formData_loc =
|
|
{
|
|
email: data.data.email as string,
|
|
name: data.data.name as string,
|
|
phone: data.data.phone as string,
|
|
qr_code: data.data.qr_code as string
|
|
};
|
|
}
|
|
|
|
const onChangeInput = (e: React.FormEvent<HTMLInputElement> ) =>
|
|
{
|
|
formData_loc =
|
|
{
|
|
...formData_loc,
|
|
[e.currentTarget.name]:e.currentTarget.value
|
|
};
|
|
setFormData(formData_loc);
|
|
edit.current = true;
|
|
formDataSave.current = {...formData_loc};
|
|
}
|
|
|
|
function showData(data: any/*, e: React.FormEvent<HTMLFormElement> | React.MouseEvent<HTMLButtonElement>*/)
|
|
{
|
|
if(data.success)
|
|
{
|
|
toast.success('Daten geändert!');
|
|
}
|
|
else if(!data.success && data.message)
|
|
{
|
|
toast.error(data.message);
|
|
}
|
|
}
|
|
|
|
const submitForm = async (e: React.FormEvent<HTMLFormElement>) =>
|
|
{
|
|
e.preventDefault();
|
|
|
|
if(!Object.values(formData).every(val => val?.trim() !== ''))
|
|
{
|
|
toast.error('Bitte alle Felder ausfüllen!');
|
|
return;
|
|
}
|
|
setFormData(formData);
|
|
|
|
const data = await updateDog(formData);
|
|
mutate();
|
|
showData(data);
|
|
}
|
|
|
|
const qr_refresh = (e: React.MouseEvent<HTMLButtonElement>) =>
|
|
{
|
|
e.preventDefault();
|
|
formData.qr_code = '';
|
|
setFormData(formData);
|
|
showData(data/*, e*/);
|
|
|
|
if(document.getElementById("canvas") != null)
|
|
{
|
|
// qrcode generieren und in der Datenbank speichern
|
|
CreateQr({qr_id: user?.qr_id})
|
|
.catch(err =>
|
|
{
|
|
console.log('qr_refresh CreateQr Error');
|
|
console.error(err);
|
|
});
|
|
|
|
}
|
|
// update data with phpapi
|
|
mutate();
|
|
}
|
|
|
|
console.log('Profil formData');
|
|
console.log(formData);
|
|
console.log('Profil formData_loc');
|
|
console.log(formData_loc);
|
|
|
|
return (
|
|
<div className='InputForm'>
|
|
<Toaster toastOptions={{ position: "top-center" }} />
|
|
<h2>Profil</h2>
|
|
<div className='frameCenter'>
|
|
<div className='frame'>
|
|
<div className='neben'>
|
|
<div className='margin'>
|
|
{data.data && <Img pth={data.data.picture} className=''/>}
|
|
<Link to={'/upload'}>Bild ändern</Link>
|
|
</div>
|
|
<div className='margin'>
|
|
{data.data && <Img pth={data.data.qr_code} className=''/>}
|
|
<button className='QRakt' onClick={qr_refresh}>QR aktualisieren</button>
|
|
</div>
|
|
<div id="canvas"></div>
|
|
</div>
|
|
<form onSubmit={submitForm}>
|
|
<TextInput
|
|
label = 'Email:'
|
|
type="email"
|
|
name="email"
|
|
onChange={onChangeInput}
|
|
placeholder="Deine Email"
|
|
id="email"
|
|
value={formData_loc.email}
|
|
required />
|
|
<TextInput
|
|
label = 'Name:'
|
|
type="text"
|
|
name="name"
|
|
onChange={onChangeInput}
|
|
placeholder="Name des Tieres"
|
|
id="name"
|
|
value={formData_loc.name}
|
|
required />
|
|
<TextInput
|
|
label = 'Telefon:'
|
|
type="text"
|
|
name="phone"
|
|
onChange={onChangeInput}
|
|
id="phone"
|
|
value={formData_loc.phone}
|
|
required />
|
|
<button type="submit">Update</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<Link to={"/qr"}>QR-Code drucken</Link>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default Profil |