Commit 63a7e7bd authored by tom's avatar tom

show profile menu if email is not confirmed

parent 46e795fe
...@@ -8,22 +8,27 @@ import useNavItems from 'lib/hooks/useNavItems'; ...@@ -8,22 +8,27 @@ import useNavItems from 'lib/hooks/useNavItems';
import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps'; import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps';
import NavLink from 'ui/snippets/navigation/NavLink'; import NavLink from 'ui/snippets/navigation/NavLink';
type Props = UserInfo; type Props = {
data?: UserInfo;
};
const ProfileMenuContent = ({ name, nickname, email }: Props) => { const ProfileMenuContent = ({ data }: Props) => {
const { accountNavItems, profileItem } = useNavItems(); const { accountNavItems, profileItem } = useNavItems();
const primaryTextColor = useColorModeValue('blackAlpha.800', 'whiteAlpha.800'); const primaryTextColor = useColorModeValue('blackAlpha.800', 'whiteAlpha.800');
return ( return (
<Box> <Box>
{ (data?.name || data?.nickname) && (
<Text <Text
fontSize="sm" fontSize="sm"
fontWeight={ 500 } fontWeight={ 500 }
color={ primaryTextColor } color={ primaryTextColor }
{ ...getDefaultTransitionProps() } { ...getDefaultTransitionProps() }
> >
Signed in as { name || nickname } Signed in as { data.name || data.nickname }
</Text> </Text>
) }
{ data?.email && (
<Text <Text
fontSize="sm" fontSize="sm"
mb={ 1 } mb={ 1 }
...@@ -31,8 +36,9 @@ const ProfileMenuContent = ({ name, nickname, email }: Props) => { ...@@ -31,8 +36,9 @@ const ProfileMenuContent = ({ name, nickname, email }: Props) => {
color="gray.500" color="gray.500"
{ ...getDefaultTransitionProps() } { ...getDefaultTransitionProps() }
> >
{ email } { data.email }
</Text> </Text>
) }
<NavLink item={ profileItem } isActive={ undefined } px="0px" isCollapsed={ false }/> <NavLink item={ profileItem } isActive={ undefined } px="0px" isCollapsed={ false }/>
<Box as="nav" mt={ 2 } pt={ 2 } borderTopColor="divider" borderTopWidth="1px" { ...getDefaultTransitionProps() }> <Box as="nav" mt={ 2 } pt={ 2 } borderTopColor="divider" borderTopWidth="1px" { ...getDefaultTransitionProps() }>
<VStack as="ul" spacing="0" alignItems="flex-start" overflow="hidden"> <VStack as="ul" spacing="0" alignItems="flex-start" overflow="hidden">
......
import type { ButtonProps } from '@chakra-ui/react'; import type { ButtonProps } from '@chakra-ui/react';
import { Popover, PopoverContent, PopoverBody, PopoverTrigger, Button } from '@chakra-ui/react'; import { Popover, PopoverContent, PopoverBody, PopoverTrigger, Button } from '@chakra-ui/react';
import { route } from 'nextjs-routes';
import React from 'react'; import React from 'react';
import useFetchProfileInfo from 'lib/hooks/useFetchProfileInfo'; import useFetchProfileInfo from 'lib/hooks/useFetchProfileInfo';
...@@ -9,25 +8,25 @@ import UserAvatar from 'ui/shared/UserAvatar'; ...@@ -9,25 +8,25 @@ import UserAvatar from 'ui/shared/UserAvatar';
import ProfileMenuContent from 'ui/snippets/profileMenu/ProfileMenuContent'; import ProfileMenuContent from 'ui/snippets/profileMenu/ProfileMenuContent';
const ProfileMenuDesktop = () => { const ProfileMenuDesktop = () => {
const { data, error } = useFetchProfileInfo(); const { data, error, isLoading } = useFetchProfileInfo();
const loginUrl = useLoginUrl(); const loginUrl = useLoginUrl();
const [ hasMenu, setHasMenu ] = React.useState(false);
React.useEffect(() => {
if (!isLoading) {
setHasMenu(Boolean(data) || error?.status === 403);
}
}, [ data, error?.status, isLoading ]);
const buttonProps: Partial<ButtonProps> = (() => { const buttonProps: Partial<ButtonProps> = (() => {
if (error?.status === 403) { if (hasMenu) {
return { return {};
as: 'a',
href: route({ pathname: '/auth/profile' }),
};
} }
if (!data) {
return { return {
as: 'a', as: 'a',
href: loginUrl, href: loginUrl,
}; };
}
return {};
})(); })();
return ( return (
...@@ -43,10 +42,10 @@ const ProfileMenuDesktop = () => { ...@@ -43,10 +42,10 @@ const ProfileMenuDesktop = () => {
<UserAvatar size={ 50 }/> <UserAvatar size={ 50 }/>
</Button> </Button>
</PopoverTrigger> </PopoverTrigger>
{ data && ( { hasMenu && (
<PopoverContent w="212px"> <PopoverContent w="212px">
<PopoverBody padding="24px 16px 16px 16px"> <PopoverBody padding="24px 16px 16px 16px">
<ProfileMenuContent { ...data }/> <ProfileMenuContent data={ data }/>
</PopoverBody> </PopoverBody>
</PopoverContent> </PopoverContent>
) } ) }
......
import { Box, Drawer, DrawerOverlay, DrawerContent, DrawerBody, useDisclosure, Button } from '@chakra-ui/react'; import { Box, Drawer, DrawerOverlay, DrawerContent, DrawerBody, useDisclosure, Button } from '@chakra-ui/react';
import type { ButtonProps } from '@chakra-ui/react'; import type { ButtonProps } from '@chakra-ui/react';
import { route } from 'nextjs-routes';
import React from 'react'; import React from 'react';
import useFetchProfileInfo from 'lib/hooks/useFetchProfileInfo'; import useFetchProfileInfo from 'lib/hooks/useFetchProfileInfo';
...@@ -11,30 +10,30 @@ import ProfileMenuContent from 'ui/snippets/profileMenu/ProfileMenuContent'; ...@@ -11,30 +10,30 @@ import ProfileMenuContent from 'ui/snippets/profileMenu/ProfileMenuContent';
const ProfileMenuMobile = () => { const ProfileMenuMobile = () => {
const { isOpen, onOpen, onClose } = useDisclosure(); const { isOpen, onOpen, onClose } = useDisclosure();
const { data, error } = useFetchProfileInfo(); const { data, error, isLoading } = useFetchProfileInfo();
const loginUrl = useLoginUrl(); const loginUrl = useLoginUrl();
const [ hasMenu, setHasMenu ] = React.useState(false);
React.useEffect(() => {
if (!isLoading) {
setHasMenu(Boolean(data) || error?.status === 403);
}
}, [ data, error?.status, isLoading ]);
const buttonProps: Partial<ButtonProps> = (() => { const buttonProps: Partial<ButtonProps> = (() => {
if (error?.status === 403) { if (hasMenu) {
return { return {};
as: 'a',
href: route({ pathname: '/auth/profile' }),
};
} }
if (!data) {
return { return {
as: 'a', as: 'a',
href: loginUrl, href: loginUrl,
}; };
}
return {};
})(); })();
return ( return (
<> <>
<Box padding={ 2 } onClick={ data ? onOpen : undefined }> <Box padding={ 2 } onClick={ hasMenu ? onOpen : undefined }>
<Button <Button
variant="unstyled" variant="unstyled"
height="auto" height="auto"
...@@ -43,7 +42,7 @@ const ProfileMenuMobile = () => { ...@@ -43,7 +42,7 @@ const ProfileMenuMobile = () => {
<UserAvatar size={ 24 }/> <UserAvatar size={ 24 }/>
</Button> </Button>
</Box> </Box>
{ data && ( { hasMenu && (
<Drawer <Drawer
isOpen={ isOpen } isOpen={ isOpen }
placement="right" placement="right"
...@@ -53,7 +52,7 @@ const ProfileMenuMobile = () => { ...@@ -53,7 +52,7 @@ const ProfileMenuMobile = () => {
<DrawerOverlay/> <DrawerOverlay/>
<DrawerContent maxWidth="260px"> <DrawerContent maxWidth="260px">
<DrawerBody p={ 6 }> <DrawerBody p={ 6 }>
<ProfileMenuContent { ...data }/> <ProfileMenuContent data={ data }/>
</DrawerBody> </DrawerBody>
</DrawerContent> </DrawerContent>
</Drawer> </Drawer>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment