Skip to content

Commit 176e197

Browse files
committed
Material Avatar
1 parent f654223 commit 176e197

File tree

2 files changed

+22
-24
lines changed

2 files changed

+22
-24
lines changed

frontend/src/components/ProfileImage.jsx

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import {useEffect, useState} from "react";
2-
import {Button, Dropdown, DropdownButton} from "react-bootstrap";
3-
import {faCamera, faTrash, faUpload,} from "@fortawesome/free-solid-svg-icons";
4-
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
1+
import React, { useState, useEffect } from "react";
2+
import { Button, Dropdown, DropdownButton } from "react-bootstrap";
3+
import { faCamera, faTrash, faUpload } from "@fortawesome/free-solid-svg-icons";
4+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
55
import { toast } from 'react-toastify';
66
import 'react-toastify/dist/ReactToastify.css';
7-
8-
import { handleProfileImageError } from '../utils/ImageUtils';
7+
import Avatar from '@mui/material/Avatar';
98

109
function ProfileImage({
1110
imageSrc,
@@ -40,7 +39,7 @@ function ProfileImage({
4039
setIsHovered(false);
4140
const timeout = setTimeout(() => {
4241
setShowDropdown(false);
43-
}, 300);
42+
}, 300);
4443
setHideDropdownTimeout(timeout);
4544
};
4645

@@ -64,7 +63,7 @@ function ProfileImage({
6463
return () => {
6564
document.removeEventListener("click", handleDocumentClick);
6665
};
67-
}, [showDropdown]);
66+
}, [showDropdown]);
6867

6968
return (
7069
<div
@@ -82,14 +81,14 @@ function ProfileImage({
8281
cursor: showOptions ? "pointer" : "default",
8382
}}
8483
>
85-
<img
84+
<Avatar
8685
src={imageSrc}
87-
className={`rounded-circle shadow ${isHovered ? "opacity-50" : ""}`}
8886
alt={imageAlt}
89-
width={width}
90-
height={height}
91-
onError={handleProfileImageError}
92-
/>
87+
sx={{ width, height }}
88+
className={`shadow ${isHovered ? "opacity-50" : ""}`}
89+
>
90+
{imageAlt.charAt(0).toUpperCase()}
91+
</Avatar>
9392
</Button>
9493
{isHovered && showOptions && (
9594
<div className="position-absolute top-50 start-50 translate-middle">

frontend/src/components/navbar.jsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, {useContext} from "react";
22
import {Link, useLocation} from "react-router-dom";
3-
import {Button, ButtonGroup, Dropdown, Image, Nav, Navbar} from "react-bootstrap";
3+
import {Button, ButtonGroup, Dropdown, Nav, Navbar} from "react-bootstrap";
44
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
55
import {
66
faBookOpen,
@@ -13,12 +13,12 @@ import {
1313
faSun,
1414
faUser,
1515
} from "@fortawesome/free-solid-svg-icons";
16+
import Avatar from '@mui/material/Avatar';
1617

1718
import { useDarkMode } from "./contexts/DarkModeContext";
1819
import UserContext from "./contexts/UserContext";
1920
import styles from "../styles/NavigationBar.module.css";
2021
import { handleLogout } from '../utils/auth';
21-
import { handleProfileImageError } from '../utils/ImageUtils';
2222

2323
function NavigationBar() {
2424
const {isDarkMode, toggleDarkMode, modeClasses} = useDarkMode();
@@ -57,14 +57,13 @@ function NavigationBar() {
5757
className={`${modeClasses.bgClass} ${modeClasses.textClass}`}
5858
id="dropdown-basic"
5959
>
60-
<Image
61-
src={`${user.image}`}
62-
roundedCircle
63-
width="24"
64-
height="24"
65-
className="me-2"
66-
onError={handleProfileImageError}
67-
/>
60+
<Avatar
61+
src={user.image}
62+
alt={user.username}
63+
sx={{ width: 24, height: 24 }}
64+
>
65+
{user.username.charAt(0).toUpperCase()}
66+
</Avatar>
6867
</Dropdown.Toggle>
6968

7069
<Dropdown.Menu align="end"> {/* Aligns dropdown to the end (right side) of the toggle to prevent overflow */}

0 commit comments

Comments
 (0)