import { useShallow } from 'zustand/react/shallow'; import { useFileStore } from '../store'; import { useEffect, useMemo, useRef, useState } from 'react'; import path from 'path-browserify'; import prettyBytes from 'pretty-bytes'; import clsx from 'clsx'; import { isObjectNull } from '@/utils/is-null'; import FileOutlined from '@ant-design/icons/FileOutlined'; import FolderOutlined from '@ant-design/icons/FolderOutlined'; import { IconButton } from '@kevisual/center-components/button/index.tsx'; import { render, unmount } from '@kevisual/resources/pages/Bootstrap.tsx'; import UploadOutlined from '@ant-design/icons/lib/icons/UploadOutlined'; import { Tooltip } from '@mui/material'; export const CardPath = ({ children }: any) => { const userAppStore = useFileStore( useShallow((state) => { return { list: state.list, getList: state.getList, setPath: state.setPath, path: state.path, }; }), ); const paths = ['root', ...userAppStore.path.split('/').filter((item) => item)]; const onDirectoryClick = (prefix: string) => { if (prefix === 'root') { userAppStore.setPath(''); userAppStore.getList(); return; } userAppStore.setPath(prefix.replace('root/', '') + '/'); userAppStore.getList(); }; return (
Path:
{paths.map((item, index) => { const isLast = index === paths.length - 1; return (
{ if (!isLast) { onDirectoryClick(paths.slice(0, index + 1).join('/')); } }}> {item}/
); })}
{children}
); }; export const List = () => { const [tab, setTab] = useState<'folder' | 'upload'>('folder'); const uploadRef = useRef(null); const userAppStore = useFileStore( useShallow((state) => { return { list: state.list, getList: state.getList, setPath: state.setPath, path: state.path, getFile: state.getFile, file: state.file, }; }), ); useEffect(() => { userAppStore.getList(); }, []); const onDirectoryClick = (prefix: string) => { userAppStore.setPath(prefix); userAppStore.getList(); }; const allFolderApp = useMemo(() => { return ( <>
{userAppStore.list.map((item, index) => { if (item.prefix) { let showPrefix = item.prefix.replace(userAppStore.path, ''); showPrefix = showPrefix.replace('/', ''); return (
{ onDirectoryClick(item.prefix); }}>
{showPrefix}
); } const name = path.basename(item.name); const size = prettyBytes(item.size); return (
{ userAppStore.getFile(item.name); }}>
{name}
size: {size}
); })}
{!isObjectNull(userAppStore.file) && JSON.stringify(userAppStore.file, null, 2)}
); }, [userAppStore.list, userAppStore.path]); useEffect(() => { if (tab === 'upload') { render(uploadRef.current!); } else { uploadRef.current && unmount(uploadRef.current!); } console.log('unmount', tab, uploadRef.current); }, [tab]); return (
setTab('folder')}> setTab('upload')}>
{tab === 'folder' &&
{allFolderApp}
} {tab === 'upload' &&
}
); };