import { lazy, Suspense, useCallback, useState } from 'react'; import { CompactRow } from '@/features/item/CompactRow'; import { useDownload } from '@/features/item/download'; import { formatRemaining } from '@/lib/format'; import { useShareSession } from '@/store/shareSession'; import { Button } from '@/ui/Button'; import { CopyButton } from '@/ui/CopyButton'; import { Icon } from '@/ui/Icon'; import { QrCode } from '@/ui/QrCode'; import { ShareBar } from './ShareBar'; import styles from './ShareView.module.css'; const PreviewSheet = lazy(() => import('@/features/item/PreviewSheet')); const noop = () => {}; /** 已封存的分享:只读。访客与创建者看到的清单相同,创建者多一张「分享给别人」卡片 */ export function ShareView() { const share = useShareSession((s) => s.share); const ids = useShareSession((s) => s.order); const integrityError = useShareSession((s) => s.integrityError); const error = useShareSession((s) => s.error); const download = useDownload(); const [sheetId, setSheetId] = useState(); const [showQr, setShowQr] = useState(true); const closeSheet = useCallback(() => setSheetId(undefined), []); if (!share) return null; const remaining = formatRemaining(share.expiresAt); async function downloadAll() { const { byId } = useShareSession.getState(); for (const id of ids) { const item = byId[id]; if (item) await download(item); await new Promise((r) => setTimeout(r, 300)); // 浏览器会拦截太密集的多文件下载 } } return (
已封存 · 只读} />
{integrityError ?

{integrityError}

: null} {error ?

{error}

: null} {share.mine ? (

分享给别人

{share.link}
{showQr ? : null}

访客只能预览和下载。内容已封存,你也不能再修改或删除,{remaining}后自动清除。持有链接的人都能下载。

) : (

这是一个只读分享:内容不会再被修改,{remaining}后自动清除。

)}
{ids.length} 项内容
    {ids.map((id) => ( ))}
{sheetId ? : null}
); }