import { useResourceFileStore } from '@kevisual/resources/pages/store/resource-file'; import { useSettingsStore } from '@kevisual/resources/pages/store/settings'; import { Button, Tooltip, useTheme } from '@mui/material'; import { useShallow } from 'zustand/shallow'; import { Accordion, AccordionSummary, AccordionDetails } from '@mui/material'; import { ChevronDown } from 'lucide-react'; import { useMemo } from 'react'; import { getFileType } from '../../FileIcon'; import { toast } from 'react-toastify'; import clsx from 'clsx'; type AccordionItem = { title?: string; key?: string; url?: string; content?: any; clickCopy?: boolean; }; export const QuickPreview = () => { const { resource } = useResourceFileStore( useShallow((state) => ({ resource: state.resource, })), ); const { settings, baseUrl } = useSettingsStore( useShallow((state) => ({ settings: state.settings, baseUrl: state.baseUrl, })), ); const fileType = useMemo(() => getFileType(resource?.name), [resource]); const accordionList = useMemo(() => { const username = settings?.username; if (!username) { toast.error('请先登录'); return []; } const _url = new URL(`${baseUrl}/api/s1/share/${username}/${resource?.name}`); const meta = resource?.metaData ?? {}; if (meta.password) { _url.searchParams.set('p', meta.password); } const url = _url.toString(); let accordionList: AccordionItem[] = []; const encodeUrl = encodeURIComponent(url); const previewUrl = `${baseUrl}/app/preview?fileUrl=${encodeUrl}&fileType=${fileType}`; accordionList.push({ title: '文件预览', key: 'preview-file', url: previewUrl, content: (