| 'use client' |
|
|
| import { useEffect, useState } from 'react' |
| import Image from 'next/image' |
| import { toast } from 'react-hot-toast' |
| import { Button } from '@/components/ui/button' |
| import pkg from '../../package.json' |
| import { |
| DropdownMenu, |
| DropdownMenuContent, |
| DropdownMenuItem, |
| DropdownMenuSeparator, |
| DropdownMenuTrigger |
| } from '@/components/ui/dropdown-menu' |
| import { IconCopy, IconExternalLink, IconGitHub } from '@/components/ui/icons' |
| import SettingIcon from '@/assets/images/settings.svg' |
| import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard' |
|
|
| export function UserMenu() { |
| const [host, setHost] = useState('') |
| const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 }) |
| useEffect(() => { |
| setHost(location.host) |
| }, []) |
|
|
| useEffect(() => { |
| if (isCopied) { |
| toast.success('复制成功') |
| } |
| }, [isCopied]) |
| return ( |
| <div className="flex items-center justify-between"> |
| <DropdownMenu> |
| <DropdownMenuTrigger asChild> |
| <Button className="pl-0"> |
| <div className="flex items-center justify-center text-xs font-medium uppercase rounded-full select-none h-7 w-7 shrink-0 bg-muted/50 text-muted-foreground"> |
| <Image alt="settings" src={SettingIcon} width={20} /> |
| </div> |
| <span className="ml-2">设置</span> |
| </Button> |
| </DropdownMenuTrigger> |
| <DropdownMenuContent sideOffset={8} align="start" className="w-[180px] bg-background"> |
| <DropdownMenuItem |
| onClick={() => |
| location.href='#dialog="settings"' |
| } |
| className="cursor-pointer" |
| > |
| 设置用户 |
| </DropdownMenuItem> |
| <DropdownMenuSeparator /> |
| <DropdownMenuItem |
| onClick={() => |
| location.href='#dialog="voice"' |
| } |
| className="cursor-pointer" |
| > |
| 语音设置 |
| </DropdownMenuItem> |
| <DropdownMenuSeparator /> |
| <DropdownMenuItem asChild> |
| <a |
| href="https://github.com/weaigc/bingo/" |
| target="_blank" |
| rel="noopener noreferrer" |
| className="inline-flex items-center justify-between w-full gap-2 cursor-pointer" |
| > |
| 开源地址 |
| <IconGitHub /> |
| <IconExternalLink className="w-3 h-3 ml-auto" /> |
| </a> |
| </DropdownMenuItem> |
| <DropdownMenuSeparator /> |
| <DropdownMenuItem asChild> |
| <a |
| href="https://huggingface.co/spaces/hf4all/bingo" |
| target="_blank" |
| rel="noopener noreferrer" |
| className="inline-flex items-center justify-between w-full gap-2 cursor-pointer" |
| > |
| 托管地址 |
| 🤗 |
| <IconExternalLink className="w-3 h-3 ml-auto" /> |
| </a> |
| </DropdownMenuItem> |
| <DropdownMenuSeparator /> |
| <DropdownMenuItem asChild> |
| <a |
| href="https://huggingface.co/login?next=%2Fspaces%2Fhf4all%2Fbingo%3Fduplicate%3Dtrue%26visibility%3Dpublic" |
| target="_blank" |
| rel="noopener noreferrer" |
| className="inline-flex items-center justify-between w-full gap-2 cursor-pointer" |
| > |
| 复制站点 |
| <IconExternalLink className="w-3 h-3 ml-auto" /> |
| </a> |
| </DropdownMenuItem> |
| <DropdownMenuSeparator /> |
| <DropdownMenuItem className="flex-col items-start"> |
| <div className="font-medium">版本信息 {pkg.version}</div> |
| </DropdownMenuItem> |
| <DropdownMenuSeparator /> |
| <DropdownMenuItem className="flex-col items-start"> |
| <div className="font-medium">站点域名</div> |
| <div onClick={() => copyToClipboard(host)} className="flex gap-1 text-xs text-zinc-500 cursor-pointer"> |
| {host} <IconCopy /> |
| </div> |
| </DropdownMenuItem> |
| </DropdownMenuContent> |
| </DropdownMenu> |
| </div> |
| ) |
| } |
|
|