refactor: avatar uploader

This commit is contained in:
Tristan Yang
2022-12-16 21:22:55 +08:00
parent e8cefda0c2
commit af231fc1d5
14 changed files with 49 additions and 39 deletions
+15 -16
View File
@@ -1,17 +1,16 @@
import { useState, useEffect, memo, SyntheticEvent, FC } from "react";
import { getInitials, getInitialsAvatar } from "../utils";
interface Props {
className?: string;
alt?: string;
url?: string;
name?: string;
interface Props extends Partial<HTMLImageElement> {
// className?: string;
// alt?: string;
// src?: string;
// name?: string;
type?: "user" | "channel";
}
const Avatar: FC<Props> = ({ url = "", name = "Deleted User", type = "user", ...rest }) => {
const [src, setSrc] = useState("");
const Avatar: FC<Props> = ({ src = "", name = "Deleted User", type = "user", ...rest }) => {
const [url, setUrl] = useState("");
const handleError = (err: SyntheticEvent<HTMLImageElement>) => {
console.error("load avatar error", err);
const tmp = getInitialsAvatar({
@@ -19,26 +18,26 @@ const Avatar: FC<Props> = ({ url = "", name = "Deleted User", type = "user", ...
background: type == "channel" ? "#EAECF0" : undefined,
foreground: type == "channel" ? "#475467" : undefined
});
setSrc(tmp);
setUrl(tmp);
};
useEffect(() => {
if (!url) {
if (!src) {
const tmp = getInitialsAvatar({
initials: getInitials(name),
background: type == "channel" ? "#EAECF0" : undefined,
foreground: type == "channel" ? "#475467" : undefined
});
setSrc(tmp);
setUrl(tmp);
} else {
setSrc(url);
setUrl(src);
}
}, [url, name]);
if (!src) return null;
}, [src, name]);
if (!url) return null;
return <img src={src} onError={handleError} {...rest} />;
return <img src={url} onError={handleError} {...rest} />;
};
export default memo(Avatar, (prev, next) => {
return prev.url == next.url;
return prev.src == next.src;
});