Skip to content

Commit 4ad7968

Browse files
committed
chore/ui: Add user dropdown
Signed-off-by: SeeuSim <[email protected]>
1 parent 80f9959 commit 4ad7968

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

frontend/src/components/common/user-dropdown.tsx

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@ import {
77
DropdownMenu,
88
DropdownMenuContent,
99
DropdownMenuItem,
10+
DropdownMenuLabel,
11+
DropdownMenuSeparator,
1012
DropdownMenuTrigger,
1113
} from '@/components/ui/dropdown-menu';
1214
import { logout } from '@/services/user-service';
15+
import { useAuthedRoute } from '@/stores/auth-store';
16+
17+
import { Badge } from '../ui/badge';
1318

1419
export const UserDropdown = () => {
20+
const { email, username, isAdmin } = useAuthedRoute();
1521
const navigate = useNavigate();
1622

1723
const { mutate: sendLogoutRequest } = useMutation({
@@ -32,9 +38,24 @@ export const UserDropdown = () => {
3238
<PersonIcon />
3339
</Button>
3440
</DropdownMenuTrigger>
35-
<DropdownMenuContent className='translate-x-[-40px]'>
41+
<DropdownMenuContent className='border-border translate-x-[-40px]'>
42+
<DropdownMenuLabel className='font-normal'>
43+
<div className='flex flex-col space-y-1'>
44+
<p className='text-sm font-medium leading-none'>{username}</p>
45+
<p className='text-muted-foreground text-xs leading-none'>{email}</p>
46+
{isAdmin && (
47+
<>
48+
<div className='h-1' />
49+
<Badge className='w-min uppercase' variant='easy'>
50+
Admin
51+
</Badge>
52+
</>
53+
)}
54+
</div>
55+
</DropdownMenuLabel>
56+
<DropdownMenuSeparator />
3657
<DropdownMenuItem className='hover:cursor-pointer' onClick={handleLogout}>
37-
Logout
58+
Log&nbsp;out
3859
</DropdownMenuItem>
3960
</DropdownMenuContent>
4061
</DropdownMenu>

frontend/src/services/user-service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export const checkIsAuthed = (param?: { signal: AbortSignal }) => {
4343
isAuthed: true,
4444
expiresAt: response.data ? new Date(response.data.expiresAt) : new Date(),
4545
userId: response.data ? response.data.userId : undefined,
46-
username: response.data ? response.data.userName : undefined,
46+
username: response.data ? response.data.username : undefined,
4747
email: response.data ? response.data.email : undefined,
4848
isAdmin: response.data?.isAdmin ?? undefined,
4949
};

frontend/vite.config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,39 +26,39 @@ export default defineConfig(({ mode }) => {
2626
proxy: {
2727
'/user-service': {
2828
target: env.VITE_USER_SERVICE,
29-
rewrite: (path) => path.replace(/^\/user-service/, ''),
29+
rewrite: (path: string) => path.replace(/^\/user-service/, ''),
3030
changeOrigin: true,
3131
cookiePathRewrite: {
3232
'*': '/',
3333
},
3434
},
3535
'/question-service': {
3636
target: env.VITE_QUESTION_SERVICE,
37-
rewrite: (path) => path.replace(/^\/question-service/, ''),
37+
rewrite: (path: string) => path.replace(/^\/question-service/, ''),
3838
changeOrigin: true,
3939
cookiePathRewrite: {
4040
'*': '/',
4141
},
4242
},
4343
'/collaboration-service': {
4444
target: env.VITE_COLLAB_SERVICE,
45-
rewrite: (path) => path.replace(/^\/collaboration-service/, ''),
45+
rewrite: (path: string) => path.replace(/^\/collaboration-service/, ''),
4646
changeOrigin: true,
4747
cookiePathRewrite: {
4848
'*': '/',
4949
},
5050
},
5151
'/matching-service': {
5252
target: env.VITE_MATCHING_SERVICE,
53-
rewrite: (path) => path.replace(/^\/matching-service/, ''),
53+
rewrite: (path: string) => path.replace(/^\/matching-service/, ''),
5454
changeOrigin: true,
5555
cookiePathRewrite: {
5656
'*': '/',
5757
},
5858
},
5959
'/collab-ws': {
6060
target: `${env.VITE_COLLAB_SERVICE.replace('http', 'ws')}`,
61-
rewrite: (path) => path.replace(/\/collab-ws/, ''),
61+
rewrite: (path: string) => path.replace(/\/collab-ws/, ''),
6262
ws: true,
6363
},
6464
'/matching-socket/': {

0 commit comments

Comments
 (0)