navbar
This commit is contained in:
45
src/App.tsx
45
src/App.tsx
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, { useState } from 'react';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import { BrowserRouter, Routes, Route } from 'react-router-dom';
|
import { BrowserRouter, Routes, Route } from 'react-router-dom';
|
||||||
import Login from './components/Login';
|
import Login from './components/Login';
|
||||||
@ -12,7 +12,7 @@ import "bootstrap/dist/css/bootstrap.min.css";
|
|||||||
import FileUpload from './components/FileUpload';
|
import FileUpload from './components/FileUpload';
|
||||||
import Profil from './components/Profil';
|
import Profil from './components/Profil';
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
import {getUser} from './services/PhpApi'
|
import {getUser, logOut} from './services/PhpApi'
|
||||||
import { TUser } from './context/UserContext';
|
import { TUser } from './context/UserContext';
|
||||||
import PasswordReset from './components/PasswordReset';
|
import PasswordReset from './components/PasswordReset';
|
||||||
import WantNewPw from './components/WantNewPw';
|
import WantNewPw from './components/WantNewPw';
|
||||||
@ -21,21 +21,33 @@ import
|
|||||||
MantineProvider,
|
MantineProvider,
|
||||||
AppShell,
|
AppShell,
|
||||||
Navbar,
|
Navbar,
|
||||||
Header,
|
Text,
|
||||||
Aside,
|
Aside,
|
||||||
Footer
|
Footer
|
||||||
} from '@mantine/core';
|
} from '@mantine/core';
|
||||||
import { NotificationsProvider } from '@mantine/notifications';
|
import { NotificationsProvider } from '@mantine/notifications';
|
||||||
import { notificationError } from './services/Notifications';
|
import { notificationAlert, notificationError, notificationSuccess } from './services/Notifications';
|
||||||
import DogNavbar from './components/DogNavbar';
|
import DogNavbar from './components/DogNavbar';
|
||||||
|
|
||||||
const App: React.FC = () =>
|
const App: React.FC = () =>
|
||||||
{
|
{
|
||||||
const {data, error, isLoading} = useSWR("/user", getUser);
|
const {data, error, isLoading, mutate} = useSWR("/user", getUser);
|
||||||
|
|
||||||
console.log('App getUser');
|
console.log('App getUser');
|
||||||
console.log(data);
|
console.log(data);
|
||||||
|
|
||||||
|
|
||||||
|
async function userLogout()
|
||||||
|
{
|
||||||
|
await logOut();
|
||||||
|
mutate();
|
||||||
|
notificationSuccess('Abgemeldet!');
|
||||||
|
console.log('userLogout');
|
||||||
|
|
||||||
|
window.location.href = '/dog/';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
notificationError(error.message);
|
notificationError(error.message);
|
||||||
@ -47,26 +59,29 @@ const App: React.FC = () =>
|
|||||||
if (isLoading) return (<div>loading...</div>);
|
if (isLoading) return (<div>loading...</div>);
|
||||||
|
|
||||||
let user: TUser | null;
|
let user: TUser | null;
|
||||||
|
let hasUser: boolean;
|
||||||
if(data.success)
|
if(data.success)
|
||||||
{
|
{
|
||||||
user = data.data;
|
user = data.data;
|
||||||
|
hasUser = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
user = null;
|
user = null;
|
||||||
|
hasUser = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MantineProvider withNormalizeCSS withGlobalStyles>
|
<MantineProvider withNormalizeCSS withGlobalStyles>
|
||||||
<NotificationsProvider position="top-center" >
|
<NotificationsProvider position="top-center" >
|
||||||
<AppShell
|
|
||||||
padding={0}
|
|
||||||
navbarOffsetBreakpoint={500}
|
|
||||||
navbar={<DogNavbar hasUser={user ? true : false} />}
|
|
||||||
>
|
|
||||||
<div className="App">
|
<div className="App">
|
||||||
<div className="col middle">
|
|
||||||
<BrowserRouter basename='/dog/'>
|
<BrowserRouter basename='/dog/'>
|
||||||
|
<AppShell
|
||||||
|
padding={0}
|
||||||
|
fixed
|
||||||
|
navbarOffsetBreakpoint={700}
|
||||||
|
navbar={<DogNavbar hasUser={user ? true : false} onLogout={userLogout}/>}
|
||||||
|
>
|
||||||
<Routes>
|
<Routes>
|
||||||
{user && <Route index path="/" element={<Profil/>} />}
|
{user && <Route index path="/" element={<Profil/>} />}
|
||||||
{/* {user && <Route index path="/" element={<Home/>} />} */}
|
{/* {user && <Route index path="/" element={<Home/>} />} */}
|
||||||
@ -82,12 +97,10 @@ const App: React.FC = () =>
|
|||||||
{user && <Route path="/upload" element={<FileUpload/>} />}
|
{user && <Route path="/upload" element={<FileUpload/>} />}
|
||||||
{user && <Route path="/profil" element={<Profil/>} />}
|
{user && <Route path="/profil" element={<Profil/>} />}
|
||||||
</Routes>
|
</Routes>
|
||||||
|
</AppShell>
|
||||||
</BrowserRouter>
|
</BrowserRouter>
|
||||||
</div>
|
</div>
|
||||||
|
</NotificationsProvider>
|
||||||
</div>
|
|
||||||
</AppShell>
|
|
||||||
</NotificationsProvider>
|
|
||||||
</MantineProvider>
|
</MantineProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,25 +1,40 @@
|
|||||||
import { Navbar, Text } from '@mantine/core'
|
import { Button, Navbar, Text } from '@mantine/core'
|
||||||
import React from 'react'
|
import React, { useState } from 'react'
|
||||||
|
import { Link } from 'react-router-dom'
|
||||||
|
import { logOut } from '../services/PhpApi'
|
||||||
import Footer2 from './Footer2'
|
import Footer2 from './Footer2'
|
||||||
|
|
||||||
function DogNavbar({hasUser}:{hasUser: boolean})
|
function DogNavbar({hasUser, onLogout}:{hasUser: boolean, onLogout: () => void})
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
<Navbar
|
<Navbar
|
||||||
width={{ base: 100 }}
|
width={{ base: 100 }}
|
||||||
height={500}
|
height='100%'
|
||||||
hiddenBreakpoint={500}
|
hiddenBreakpoint={700}
|
||||||
hidden={true}
|
hidden={true}
|
||||||
p="xs">
|
p="xs"
|
||||||
|
|
||||||
|
sx={{ backgroundColor: 'rgb(243, 97, 12)'}}
|
||||||
|
>
|
||||||
|
|
||||||
<Navbar.Section><Text>Titel</Text></Navbar.Section>
|
<Navbar.Section><Text>Titel</Text></Navbar.Section>
|
||||||
<Navbar.Section grow mt="md">{/* Links sections */}</Navbar.Section>
|
<Navbar.Section grow mt="md">
|
||||||
<Navbar.Section><Text>Login</Text></Navbar.Section>
|
<div style={{display: 'flex', flexDirection:'column' }}>
|
||||||
<Navbar.Section><Text>Register</Text></Navbar.Section>
|
{!hasUser && <Text component={Link} variant='link' to='/login'>Login</Text>}
|
||||||
{hasUser && <Navbar.Section><Text>Profil</Text></Navbar.Section>}
|
{!hasUser && <Text component={Link} variant='link' to='/reg'>Register</Text>}
|
||||||
{hasUser && <Navbar.Section><Text>QrCode</Text></Navbar.Section>}
|
{!hasUser && <Text component={Link} variant='link' to='/wantnewpw'>PW neu</Text>}
|
||||||
{hasUser && <Navbar.Section><Text>Logout</Text></Navbar.Section>}
|
{hasUser && <Text component={Link} variant='link' to='/profil'>Profil</Text>}
|
||||||
<Navbar.Section>Footer</Navbar.Section>
|
{hasUser && <Text component={Link} variant='link' to='/qr'>QrCode</Text>}
|
||||||
|
</div>
|
||||||
|
</Navbar.Section>
|
||||||
|
<Navbar.Section className='InputForm' >
|
||||||
|
{hasUser && <Button sx = {{ padding: '0px 6px;'}} onClick={(e)=>{}}>Account löschen</Button>}
|
||||||
|
</Navbar.Section>
|
||||||
|
<Navbar.Section className='InputForm' >
|
||||||
|
{hasUser && <Button sx = {{ padding: '0px 6px;'}} onClick={(e)=>{onLogout()}}>Logout</Button>}
|
||||||
|
</Navbar.Section>
|
||||||
|
<Navbar.Section> </Navbar.Section>
|
||||||
|
<Navbar.Section><Text component={Link} variant='link' to='/impressum'>Impressum</Text></Navbar.Section>
|
||||||
</Navbar> )
|
</Navbar> )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,10 @@ function Profil()
|
|||||||
const edit = useRef(false);
|
const edit = useRef(false);
|
||||||
const formDataSave = useRef(formData); // just to fill it
|
const formDataSave = useRef(formData); // just to fill it
|
||||||
// data ist dogdata, logindata holt sich getProfilData.php aus $_SESSION
|
// data ist dogdata, logindata holt sich getProfilData.php aus $_SESSION
|
||||||
|
|
||||||
|
const WWW_ROOT: string = process.env.REACT_APP_WWW_ROOT!;
|
||||||
|
|
||||||
|
|
||||||
if (error) return (<div>failed to load</div>);
|
if (error) return (<div>failed to load</div>);
|
||||||
if (isLoading) return (<div>loading...</div>);
|
if (isLoading) return (<div>loading...</div>);
|
||||||
|
|
||||||
@ -177,6 +181,7 @@ function Profil()
|
|||||||
<Link to={'/upload'}>Bild ändern</Link>
|
<Link to={'/upload'}>Bild ändern</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className='margin'>
|
<div className='margin'>
|
||||||
|
<Link to={'/' + data.data.qr_id}>{WWW_ROOT + data.data.qr_id}</Link>
|
||||||
{data.data && <Img pth={data.data.qr_code} className=''/>}
|
{data.data && <Img pth={data.data.qr_code} className=''/>}
|
||||||
<button className='QRakt' onClick={qr_refresh}>QR aktualisieren</button>
|
<button className='QRakt' onClick={qr_refresh}>QR aktualisieren</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -229,9 +229,9 @@ export const upload = (file: File, qr: string = '', onUploadProgress: any = null
|
|||||||
// return data;
|
// return data;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
export const logOut = () =>
|
export const logOut = async () =>
|
||||||
{
|
{
|
||||||
Axios.post('logout.php')
|
await Axios.post('logout.php')
|
||||||
.then((res) =>
|
.then((res) =>
|
||||||
{
|
{
|
||||||
console.log('Header logout');
|
console.log('Header logout');
|
||||||
|
|||||||
Reference in New Issue
Block a user