import { useEffect, useMemo, useState } from 'react' import { QrCodeIcon, WrenchIcon, InfoIcon, HeartHandshakeIcon, ShieldCheckIcon, Code2Icon, CopyIcon } from 'lucide-react' import { QRCodeSVG } from 'qrcode.react' import { useTranslation } from 'react-i18next' import { useNavigate } from '@tanstack/react-router' import { SHOW_MAIN_PAGE_DONATION, SHOW_MAIN_PAGE_QRCODE } from '#/events/constants' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { getConfig, getPicBeds, openURL } from '@/utils/dataSender' import { clipboard, ipc } from '@/utils/bridge' import { toast } from 'sonner' import { mainMoreAdapter } from '@/adapters/main-more' interface MainMoreDialogProps { open: boolean onOpenChange: (open: boolean) => void } export function MainMoreDialog ({ open, onOpenChange }: MainMoreDialogProps) { const { t } = useTranslation() const navigate = useNavigate() const [donationOpen, setDonationOpen] = useState(false) const [qrcodeOpen, setQrcodeOpen] = useState(false) const [picBeds, setPicBeds] = useState([]) const [selectedPicBeds, setSelectedPicBeds] = useState([]) const [picBedConfigString, setPicBedConfigString] = useState('') useEffect(() => { const handleDonation = () => { setDonationOpen(true) } const handleQrcode = () => { setQrcodeOpen(true) } const donationCleanup = ipc.on(SHOW_MAIN_PAGE_DONATION, handleDonation) const qrcodeCleanup = ipc.on(SHOW_MAIN_PAGE_QRCODE, handleQrcode) return () => { donationCleanup() qrcodeCleanup() } }, []) useEffect(() => { if (!open && !qrcodeOpen) { return } async function loadPicBeds () { const nextPicBeds = await getPicBeds() setPicBeds(nextPicBeds.filter((item) => item.visible !== false)) } loadPicBeds() }, [open, qrcodeOpen]) useEffect(() => { async function syncQrcodeConfig () { if (selectedPicBeds.length === 0) { setPicBedConfigString('') return } const picBedConfig = await getConfig>('picBed') if (!picBedConfig) { setPicBedConfigString('') return } const selectedConfig = Object.fromEntries( selectedPicBeds .filter((key) => key in picBedConfig) .map((key) => [key, picBedConfig[key]]) ) setPicBedConfigString(JSON.stringify(selectedConfig)) } syncQrcodeConfig() }, [selectedPicBeds]) const moreItems = useMemo(() => [ { key: 'about', label: t('ABOUT'), icon: , action: () => { onOpenChange(false) navigate({ to: '/main/settings/settings', search: { section: 'about' } }) } }, { key: 'donation', label: t('SPONSOR_PICGO'), icon: , action: () => { onOpenChange(false) setDonationOpen(true) } }, { key: 'qrcode', label: t('SHOW_PICBED_QRCODE'), icon: , action: () => { onOpenChange(false) setQrcodeOpen(true) } }, { key: 'toolbox', label: t('OPEN_TOOLBOX'), icon: , action: () => { onOpenChange(false) mainMoreAdapter.openToolboxWindow() } }, { key: 'devtools', label: t('SHOW_DEVTOOLS'), icon: , action: () => { onOpenChange(false) mainMoreAdapter.openDevtools() } }, { key: 'privacy', label: t('PRIVACY_TERMS_AGREEMENT'), icon: , action: () => { onOpenChange(false) mainMoreAdapter.openPrivacyTerms() } } ], [navigate, onOpenChange, t]) return ( <> {t('ABOUT')}
{moreItems.map((item) => ( ))}
{t('SPONSOR_PICGO')} {t('PICGO_SPONSOR_TEXT')}
{t('ALIPAY')}

{t('ALIPAY')}

{t('WECHATPAY')}

{t('WECHATPAY')}

{t('PICBED_QRCODE')} {t('CHOOSE_PICBED')}
{picBeds.map((item) => { const selected = selectedPicBeds.includes(item.type) return ( ) })}
{picBedConfigString ? (
) : null}
) }