-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFile.tsx
62 lines (55 loc) · 1.9 KB
/
File.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import {
FileTextOutlined,
FilePdfOutlined,
FileGifOutlined,
FileJpgOutlined,
FileExcelOutlined,
FileWordOutlined,
FileMarkdownOutlined,
FilePptOutlined,
FileZipOutlined,
FileUnknownOutlined
} from '@ant-design/icons';
import { FileDto } from "../../api/file";
import { FileType } from '../../api/fileType';
type FileTypeToIconMapping = {
[key in FileType]: JSX.Element
}
type FileTypeToColorMapping = {
[key in FileType]: string
}
const fileTypeToIcon: FileTypeToIconMapping = {
[FileType.TXT]: <FileTextOutlined style={{ padding: '0 10px' }} />,
[FileType.PDF]: <FilePdfOutlined style={{ padding: '0 10px' }} />,
[FileType.GIF]: <FileGifOutlined style={{ padding: '0 10px' }} />,
[FileType.JPG]: <FileJpgOutlined style={{ padding: '0 10px' }} />,
[FileType.XLSX]: <FileExcelOutlined style={{ padding: '0 10px' }} />,
[FileType.DOCX]: <FileWordOutlined style={{ padding: '0 10px' }} />,
[FileType.MD]: <FileMarkdownOutlined style={{ padding: '0 10px' }} />,
[FileType.PPT]: <FilePptOutlined style={{ padding: '0 10px' }} />,
[FileType.ZIP]: <FileZipOutlined style={{ padding: '0 10px' }} />,
[FileType.UNKNOWN]: <FileUnknownOutlined style={{ padding: '0 10px' }} />,
}
const fileTypeToColor: FileTypeToColorMapping = {
[FileType.TXT]: 'blue',
[FileType.PDF]: 'red',
[FileType.GIF]: 'orange',
[FileType.JPG]: 'green',
[FileType.XLSX]: 'purple',
[FileType.DOCX]: 'cyan',
[FileType.MD]: 'magenta',
[FileType.PPT]: 'gold',
[FileType.ZIP]: 'lime',
[FileType.UNKNOWN]: 'gray',
}
const FileTypeIcon: React.FC<{ type: FileType }> = ({ type }) => {
return fileTypeToIcon[type];
}
export const File: React.FC<{ file: FileDto }> = ({ file }) => {
return (
<span style={{ color: fileTypeToColor[file.type] }}>
<FileTypeIcon type={file.type} />
{file.name}
</span>
);
}