mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
* add document service * add file item * add file content for direct upload file * fix tests * fix tests * fix tests * add debug log for file-loaders * add debug log and test * improve loading * update tests * fix pdf parser * fix pdf version * fix pdf worker url * fix pdf worker url * fix test
88 lines
2.3 KiB
TypeScript
88 lines
2.3 KiB
TypeScript
import { ActionIcon } from '@lobehub/ui';
|
|
import { Typography } from 'antd';
|
|
import { createStyles } from 'antd-style';
|
|
import { Trash2Icon } from 'lucide-react';
|
|
import { memo } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { Center, Flexbox } from 'react-layout-kit';
|
|
|
|
import { useFileStore } from '@/store/file';
|
|
import { UploadFileItem } from '@/types/files/upload';
|
|
|
|
import UploadDetail from '../../../components/UploadDetail';
|
|
import Content from './Content';
|
|
|
|
const useStyles = createStyles(({ css, token }) => ({
|
|
actions: css`
|
|
position: absolute;
|
|
z-index: 10;
|
|
inset-block-start: -4px;
|
|
inset-inline-end: -4px;
|
|
|
|
border-radius: 5px;
|
|
|
|
background: ${token.colorBgElevated};
|
|
box-shadow:
|
|
0 0 0 0.5px ${token.colorFillSecondary} inset,
|
|
${token.boxShadowTertiary};
|
|
`,
|
|
container: css`
|
|
position: relative;
|
|
|
|
width: 180px;
|
|
height: 64px;
|
|
border-radius: 8px;
|
|
|
|
background: ${token.colorBgContainer};
|
|
|
|
:hover {
|
|
background: ${token.colorBgElevated};
|
|
}
|
|
`,
|
|
image: css`
|
|
margin-block: 0 !important;
|
|
`,
|
|
status: css`
|
|
&.ant-tag {
|
|
padding-inline: 0;
|
|
background: none;
|
|
}
|
|
`,
|
|
}));
|
|
|
|
type FileItemProps = UploadFileItem;
|
|
|
|
const FileItem = memo<FileItemProps>((props) => {
|
|
const { file, uploadState, status, id, tasks } = props;
|
|
const { t } = useTranslation(['chat', 'common']);
|
|
const { styles } = useStyles();
|
|
const [removeChatUploadFile] = useFileStore((s) => [s.removeChatUploadFile]);
|
|
|
|
return (
|
|
<Flexbox align={'center'} className={styles.container} horizontal>
|
|
<Center flex={1} height={64} padding={4} style={{ maxWidth: 64 }}>
|
|
<Content {...props} />
|
|
</Center>
|
|
<Flexbox flex={1} gap={4} style={{ paddingBottom: 4, paddingInline: 4 }}>
|
|
<Typography.Text ellipsis={{ tooltip: true }} style={{ fontSize: 12, maxWidth: 100 }}>
|
|
{file.name}
|
|
</Typography.Text>
|
|
|
|
<UploadDetail size={file.size} status={status} tasks={tasks} uploadState={uploadState} />
|
|
</Flexbox>
|
|
<Flexbox className={styles.actions}>
|
|
<ActionIcon
|
|
color={'red'}
|
|
icon={Trash2Icon}
|
|
onClick={() => {
|
|
removeChatUploadFile(id);
|
|
}}
|
|
size={'small'}
|
|
title={t('delete', { ns: 'common' })}
|
|
/>
|
|
</Flexbox>
|
|
</Flexbox>
|
|
);
|
|
});
|
|
|
|
export default FileItem;
|