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' &&
}
);
};