import React, { useRef, useCallback } from 'react'; import { Box } from '@chakra-ui/react'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useTranslation } from 'next-i18next'; export const useSelectFile = (props?: { fileType?: string; multiple?: boolean; maxCount?: number; }) => { const { t } = useTranslation(); const { fileType = '*', multiple = false, maxCount = 10 } = props || {}; const { toast } = useToast(); const SelectFileDom = useRef(null); const openSign = useRef(); const File = useCallback( ({ onSelect }: { onSelect: (e: File[], sign?: any) => void }) => ( { if (!e.target.files || e.target.files?.length === 0) return; if (e.target.files.length > maxCount) { return toast({ status: 'warning', title: t('common.file.Select file amount limit', { max: maxCount }) }); } onSelect(Array.from(e.target.files), openSign.current); }} /> ), [fileType, maxCount, multiple, t, toast] ); const onOpen = useCallback((sign?: any) => { openSign.current = sign; SelectFileDom.current && SelectFileDom.current.click(); }, []); return { File, onOpen }; };