Skip to content

Commit 01537bc

Browse files
committed
refactor: Refactors file type handling using enums
Centralizes and strengthens file type management by using enums for categories, MIME types, and extensions. This improves code maintainability and type safety when dealing with different file types across the application. It also enforces a consistent approach for file type detection.
1 parent ceb3d81 commit 01537bc

File tree

9 files changed

+469
-29
lines changed

9 files changed

+469
-29
lines changed

tools/server/webui/src/lib/components/app/chat/ChatAttachments/ChatAttachmentPreviewDialog.svelte

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { FileText, Image, Music, FileIcon, Eye } from '@lucide/svelte';
44
import { convertPDFToImage } from '$lib/utils/pdf-processing';
55
import { Button } from '$lib/components/ui/button';
6+
import { FileTypeCategory, PdfMimeType, getFileTypeCategory } from '$lib/constants/supported-file-types';
67
78
interface Props {
89
open: boolean;
@@ -59,10 +60,10 @@
5960
: textContent)
6061
);
6162
62-
let isImage = $derived(displayType.startsWith('image/') || displayType === 'image');
63-
let isText = $derived(displayType.startsWith('text/') || displayType === 'text');
64-
let isPdf = $derived(displayType === 'application/pdf');
65-
let isAudio = $derived(displayType.startsWith('audio/') || displayType === 'audio');
63+
let isImage = $derived(getFileTypeCategory(displayType) === FileTypeCategory.IMAGE || displayType === 'image');
64+
let isText = $derived(getFileTypeCategory(displayType) === FileTypeCategory.TEXT || displayType === 'text');
65+
let isPdf = $derived(displayType === PdfMimeType.PDF);
66+
let isAudio = $derived(getFileTypeCategory(displayType) === FileTypeCategory.AUDIO || displayType === 'audio');
6667
6768
// PDF preview state
6869
let pdfViewMode = $state<'text' | 'pages'>('pages'); // Default to pages view
@@ -120,7 +121,7 @@
120121
byteNumbers[i] = byteCharacters.charCodeAt(i);
121122
}
122123
const byteArray = new Uint8Array(byteNumbers);
123-
file = new File([byteArray], displayName, { type: 'application/pdf' });
124+
file = new File([byteArray], displayName, { type: PdfMimeType.PDF });
124125
if (import.meta.env.DEV) console.log('Created file from base64 data, size:', file.size);
125126
}
126127
}

tools/server/webui/src/lib/components/app/chat/ChatAttachments/ChatAttachmentsList.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import { ChatAttachmentImagePreview, ChatAttachmentFilePreview } from '$lib/components/app';
33
import ChatAttachmentPreviewDialog from './ChatAttachmentPreviewDialog.svelte';
4+
import { FileTypeCategory, PdfMimeType, getFileTypeCategory } from '$lib/constants/supported-file-types';
45
56
interface Props {
67
class?: string;
@@ -77,7 +78,7 @@
7778
size: file.size,
7879
preview: file.preview,
7980
type: file.type,
80-
isImage: file.type.startsWith('image/'),
81+
isImage: getFileTypeCategory(file.type) === FileTypeCategory.IMAGE,
8182
uploadedFile: file,
8283
textContent: file.textContent
8384
});

tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormFileInputInvisible.svelte

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
<script lang="ts">
2+
import { ALL_SUPPORTED_EXTENSIONS, ALL_SUPPORTED_MIME_TYPES } from '$lib/constants/supported-file-types';
3+
24
interface Props {
35
accept?: string;
46
multiple?: boolean;
57
onFileSelect?: (files: File[]) => void;
68
class?: string;
79
}
810
11+
// Generate accept string from our enum-based supported file types
12+
const defaultAccept = [
13+
...ALL_SUPPORTED_EXTENSIONS,
14+
...ALL_SUPPORTED_MIME_TYPES,
15+
].join(',');
16+
917
let {
10-
accept = "image/*,audio/*,video/*,.pdf,.txt,.doc,.docx",
18+
accept = defaultAccept,
1119
multiple = true,
1220
onFileSelect,
1321
class: className = ''

0 commit comments

Comments
 (0)