mirror of
https://github.com/labring/FastGPT.git
synced 2025-08-02 12:48:30 +00:00

* perf: redirect request and err log replace perf: dataset openapi feat: session fix: retry input error feat: 468 doc sub page feat: standard sub perf: rerank tip perf: rerank tip perf: api sdk perf: openapi sub plan perf: sub ui fix: ts * perf: init log * fix: variable select * sub page * icon * perf: llm model config * perf: menu ux * perf: system store * perf: publish app name * fix: init data * perf: flow edit ux * fix: value type format and ux * fix prompt editor default value (#13) * fix prompt editor default value * fix prompt editor update when not focus * add key with variable --------- Co-authored-by: Archer <545436317@qq.com> * fix: value type * doc * i18n * import path * home page * perf: mongo session running * fix: ts * perf: use toast * perf: flow edit * perf: sse response * slider ui * fetch error * fix prompt editor rerender when not focus by key defaultvalue (#14) * perf: prompt editor * feat: dataset search concat * perf: doc * fix:ts * perf: doc * fix json editor onblur value (#15) * faq * vector model default config * ipv6 --------- Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
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<HTMLInputElement>(null);
|
|
const openSign = useRef<any>();
|
|
|
|
const File = useCallback(
|
|
({ onSelect }: { onSelect: (e: File[], sign?: any) => void }) => (
|
|
<Box position={'absolute'} w={0} h={0} overflow={'hidden'}>
|
|
<input
|
|
ref={SelectFileDom}
|
|
type="file"
|
|
accept={fileType}
|
|
multiple={multiple}
|
|
onChange={(e) => {
|
|
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);
|
|
}}
|
|
/>
|
|
</Box>
|
|
),
|
|
[fileType, maxCount, multiple, t, toast]
|
|
);
|
|
|
|
const onOpen = useCallback((sign?: any) => {
|
|
openSign.current = sign;
|
|
SelectFileDom.current && SelectFileDom.current.click();
|
|
}, []);
|
|
|
|
return {
|
|
File,
|
|
onOpen
|
|
};
|
|
};
|