import { useShallow } from 'zustand/react/shallow'; import { useFileStore } from '../store'; import { useEffect } from 'react'; import path from 'path-browserify'; import prettyBytes from 'pretty-bytes'; import clsx from 'clsx'; import { isObjectNull } from '@/utils/is-null'; 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 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(); }; return (
{userAppStore.list.map((item, index) => { if (item.prefix) { let showPrefix = item.prefix.replace(userAppStore.path, ''); showPrefix = showPrefix.replace('/', ''); return (
{ onDirectoryClick(item.prefix); }}>
Directory:
{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)}
); };