Skip to content
Snippets Groups Projects
Commit b13566e8 authored by Chif Gergő's avatar Chif Gergő
Browse files

Remove logout function and modify me query return type

parent a8efdd61
No related branches found
No related tags found
2 merge requests!19fix type imports,!17Authentication
import Axios, { AxiosRequestConfig } from 'axios';
import { UserResponse } from './types';
import { IProfile } from '../types/Profile';
type MeQuery = () => Promise<UserResponse>;
type LogoutQuery = () => Promise<any>;
type MeQuery = () => Promise<Partial<IProfile>>;
type RegisterQuery = (data: ProfileData) => Promise<any>;
export type ProfileData = {
......@@ -12,7 +11,6 @@ export type ProfileData = {
export type AuthClient = {
me: MeQuery;
logout: LogoutQuery;
register: RegisterQuery;
};
......@@ -22,12 +20,8 @@ export function auth(config: AxiosRequestConfig): AuthClient {
baseURL: `${config.baseURL}/api/v1/`,
});
const me: MeQuery = async (): Promise<UserResponse> => {
return (await axios.get<UserResponse>('/users/me')).data;
};
const logout: LogoutQuery = async (): Promise<any> => {
return (await axios.get<any>('/logout')).data;
const me: MeQuery = async (): Promise<Partial<IProfile>> => {
return (await axios.get<Partial<IProfile>>('/users/me')).data;
};
const register: RegisterQuery = async (data: ProfileData): Promise<any> => {
......@@ -36,7 +30,6 @@ export function auth(config: AxiosRequestConfig): AuthClient {
return {
me,
logout,
register,
};
}
......@@ -17,7 +17,6 @@ import React, { useState } from 'react';
import { useHistory } from 'react-router';
import { useUserContext } from '../hooks/useUserContext';
import SCHBodyIcon from '../svg/SCHBodyIcon';
import WrapperLink from './WrapperLink';
export interface AppBarMenuItem {
id: number;
......@@ -90,10 +89,9 @@ const useStyles = makeStyles((theme) => ({
export type HeaderProps = {
customToolbar?: React.ReactElement;
menuItems?: AppBarMenuItem[];
handleLogout?: () => void;
};
const Header: React.FC<HeaderProps> = ({ customToolbar, handleLogout, menuItems = MENU_ITEMS }) => {
const Header: React.FC<HeaderProps> = ({ customToolbar, menuItems = MENU_ITEMS }) => {
const classes = useStyles();
const history = useHistory();
const { profile } = useUserContext();
......@@ -167,14 +165,14 @@ const Header: React.FC<HeaderProps> = ({ customToolbar, handleLogout, menuItems
<>
<IconButton size="medium">
<Badge
badgeContent={profile.notices.filter((item) => !item.isSeen).length}
badgeContent={profile.notices?.filter((item) => !item.isSeen).length ?? 0}
color="error"
>
<MailOutline style={{ color: 'white' }} />
</Badge>
</IconButton>
{profile.warnings.length > 0 && (
{profile.warnings && profile.warnings.length > 0 && (
<IconButton size="medium" disableRipple>
<Report color="error" />
</IconButton>
......@@ -182,18 +180,20 @@ const Header: React.FC<HeaderProps> = ({ customToolbar, handleLogout, menuItems
<Typography variant="h6" align="center" className={classes.texts}>
{profile.name}
</Typography>
<a href="/api/v1/logout">
<Box color="secondary.main">
<IconButton color="inherit" size="medium" onClick={handleLogout}>
<IconButton color="inherit" size="medium">
<ExitToApp />
</IconButton>
</Box>
</a>
</>
) : (
<WrapperLink to="/api/v1/login">
<a href="/api/v1/login">
<Button color="secondary" variant="contained">
Belépés
</Button>
</WrapperLink>
</a>
)}
</Toolbar>
)}
......
......@@ -10,7 +10,7 @@ const RememberMe: React.FC = ({ children }) => {
useEffect(() => {
if (me) {
setProfile(me.user);
setProfile(me);
} else {
setProfile(undefined);
}
......
import React, { createContext, useState } from 'react';
import { IProfile, Role } from '../types/Profile';
import { IProfile } from '../types/Profile';
export interface UserContextType {
profile: IProfile | undefined;
setProfile: (profile: IProfile | undefined) => void;
profile: Partial<IProfile> | undefined;
setProfile: (profile: Partial<IProfile> | undefined) => void;
}
// Context
/* // Context
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const initialState: IProfile = {
externalId: 'abcd',
......@@ -17,14 +17,14 @@ const initialState: IProfile = {
name: 'Nagy Gizike',
warnings: [],
notices: [{ _id: '123', text: 'Asd', isSeen: false }],
};
}; */
export const UserContext = createContext({} as UserContextType);
const { Provider } = UserContext;
export const UserStateProvider: React.FC = ({ children }) => {
const [profile, setProfile] = useState<IProfile | undefined>();
const [profile, setProfile] = useState<Partial<IProfile> | undefined>();
return <Provider value={{ profile, setProfile }}>{children}</Provider>;
};
......
import { useQuery, UseQueryOptions, UseQueryResult } from 'react-query';
import useClientContext from './useClientContext';
export default function useLogout(
options?: UseQueryOptions<any, Error>,
): UseQueryResult<any, Error> {
const client = useClientContext();
return useQuery<any, Error>('Logout', async () => client.client.auth.logout(), options);
}
import { useQuery, UseQueryResult } from 'react-query';
import { UserResponse } from '../client/types';
import { IProfile } from '../types/Profile';
import useClientContext from './useClientContext';
export default function useMe(): UseQueryResult<UserResponse, Error> {
export default function useMe(): UseQueryResult<Partial<IProfile>, Error> {
const client = useClientContext();
return useQuery<UserResponse, Error>('me', async () => client.client.auth.me());
return useQuery<Partial<IProfile>, Error>('me', async () => client.client.auth.me());
}
import { Box, makeStyles, Theme, useMediaQuery } from '@material-ui/core';
import React, { useEffect } from 'react';
import React from 'react';
import DrawerMenu from '../components/DrawerMenu';
import Footer from '../components/Footer';
import Header from '../components/Header';
import MobileHeader from '../components/MobileHeader';
import useLogout from '../hooks/useLogout';
import useRegister from '../hooks/useRegister';
import { useToggle } from '../hooks/useToggle';
const useStyles = makeStyles((theme) => ({
......@@ -20,26 +18,17 @@ const useStyles = makeStyles((theme) => ({
const Page: React.FC = ({ children }) => {
const [openDrawer, { toggleOn, toggleOff }] = useToggle(false);
const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('xs'));
const { refetch: logout } = useLogout({ enabled: false });
const classes = useStyles();
const { mutate } = useRegister();
/* const { mutate } = useRegister();
useEffect(() => {
mutate({ roomNumber: 1300, studentCardNumber: '122223455' });
}, [mutate]);
const handleLogout = (): void => {
logout();
};
}, [mutate]); */
return (
<Box className={classes.root}>
{isMobile ? (
<MobileHeader onMenuClick={toggleOn} handleLogout={handleLogout} />
) : (
<Header handleLogout={handleLogout} />
)}
{isMobile ? <MobileHeader onMenuClick={toggleOn} /> : <Header />}
{isMobile && (
<DrawerMenu open={openDrawer} toggleOpen={toggleOff} handleLogout={(): void => {}} />
)}
......
......@@ -18,6 +18,7 @@ export interface IWarning {
}
export interface IProfile {
_id: string;
externalId: string;
studentCardNumber?: string;
roomNumber?: Number;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment