| import { useState } from 'react'; | |
| import { useToastContext } from '@librechat/client'; | |
| import { useLocalize } from '~/hooks'; | |
| export const useDelayedUploadToast = () => { | |
| const localize = useLocalize(); | |
| const { showToast } = useToastContext(); | |
| const [uploadTimers, setUploadTimers] = useState<Record<string, NodeJS.Timeout>>({}); | |
| const determineDelay = (fileSize: number): number => { | |
| const baseDelay = 5000; | |
| const additionalDelay = Math.floor(fileSize / 1000000) * 2000; | |
| return baseDelay + additionalDelay; | |
| }; | |
| const startUploadTimer = (fileId: string, fileName: string, fileSize: number) => { | |
| const delay = determineDelay(fileSize); | |
| if (uploadTimers[fileId]) { | |
| clearTimeout(uploadTimers[fileId]); | |
| } | |
| const timer = setTimeout(() => { | |
| const message = localize('com_ui_upload_delay', { 0: fileName }); | |
| showToast({ | |
| message, | |
| status: 'warning', | |
| duration: 10000, | |
| }); | |
| }, delay); | |
| setUploadTimers((prev) => ({ ...prev, [fileId]: timer })); | |
| }; | |
| const clearUploadTimer = (fileId: string) => { | |
| if (uploadTimers[fileId]) { | |
| clearTimeout(uploadTimers[fileId]); | |
| setUploadTimers((prev) => { | |
| const { [fileId]: _, ...rest } = prev; | |
| return rest; | |
| }); | |
| } | |
| }; | |
| return { startUploadTimer, clearUploadTimer }; | |
| }; | |