import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { useLocationStore, useMemoStore, useUserStore } from "../store/module"; import { getMemoStats } from "../helpers/api"; import * as utils from "../helpers/utils"; import Icon from "./Icon"; import Dropdown from "./common/Dropdown"; import showResourcesDialog from "./ResourcesDialog"; import showArchivedMemoDialog from "./ArchivedMemoDialog"; import showAboutSiteDialog from "./AboutSiteDialog"; import "../less/user-banner.less"; const UserBanner = () => { const { t } = useTranslation(); const navigate = useNavigate(); const locationStore = useLocationStore(); const userStore = useUserStore(); const memoStore = useMemoStore(); const { user, owner } = userStore.state; const { memos, tags } = memoStore.state; const [username, setUsername] = useState("Memos"); const [memoAmount, setMemoAmount] = useState(0); const [createdDays, setCreatedDays] = useState(0); const isVisitorMode = userStore.isVisitorMode(); useEffect(() => { if (isVisitorMode) { if (!owner) { return; } setUsername(owner.nickname || owner.username); setCreatedDays(Math.ceil((Date.now() - utils.getTimeStampByDate(owner.createdTs)) / 1000 / 3600 / 24)); } else if (user) { setUsername(user.nickname || user.username); setCreatedDays(Math.ceil((Date.now() - utils.getTimeStampByDate(user.createdTs)) / 1000 / 3600 / 24)); } }, [isVisitorMode, user, owner]); useEffect(() => { getMemoStats(userStore.getCurrentUserId()) .then(({ data: { data } }) => { setMemoAmount(data.length); }) .catch((error) => { console.error(error); }); }, [memos]); const handleUsernameClick = useCallback(() => { locationStore.clearQuery(); }, []); const handleResourcesBtnClick = () => { showResourcesDialog(); }; const handleArchivedBtnClick = () => { showArchivedMemoDialog(); }; const handleAboutBtnClick = () => { showAboutSiteDialog(); }; const handleSignOutBtnClick = async () => { navigate("/auth"); }; return ( <>
{username} {!isVisitorMode && user?.role === "HOST" ? MOD : null}
} actionsClassName="min-w-36" actions={ <> {!userStore.isVisitorMode() && ( <> )} {!userStore.isVisitorMode() && ( )} } />
{memoAmount} {t("amount-text.memo")}
{tags.length} {t("amount-text.tag")}
{createdDays} {t("amount-text.day")}
); }; export default UserBanner;