import copy from "copy-to-clipboard"; import { ExternalLinkIcon, LayoutListIcon, type LucideIcon, MapIcon } from "lucide-react"; import { lazy, Suspense } from "react"; import { toast } from "react-hot-toast"; import { useParams, useSearchParams } from "react-router-dom"; import MemoView from "@/components/MemoView"; import PagedMemoList from "@/components/PagedMemoList"; import UserAvatar from "@/components/UserAvatar"; import { Button } from "@/components/ui/button"; import { useMemoFilters, useMemoSorting } from "@/hooks"; import { useUser } from "@/hooks/useUserQueries"; import { cn } from "@/lib/utils"; import { State } from "@/types/proto/api/v1/common_pb"; import { Memo } from "@/types/proto/api/v1/memo_service_pb"; import { useTranslate } from "@/utils/i18n"; type TabView = "memos" | "map"; const UserMemoMap = lazy(() => import("@/components/UserMemoMap")); const TabButton = ({ icon: Icon, label, isActive, onClick, }: { icon: LucideIcon; label: string; isActive: boolean; onClick: () => void; }) => ( ); interface User { name: string; username: string; displayName: string; avatarUrl?: string; description?: string; } const ProfileHeader = ({ user, onCopyProfileLink, shareLabel }: { user: User; onCopyProfileLink: () => void; shareLabel: string }) => (
@{user.username}
}{user.description}
}{t("message.user-not-found")}