mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-07 03:48:44 +08:00
Feat: add MDX file support #12057 ### What problem does this PR solve? <img width="1055" height="270" alt="image" src="https://github.com/user-attachments/assets/a0ab49f9-7806-41cd-8a96-f593591ab36b" /> The page states that MDX files are supported, but uploading fails with the error: "x.mdx: This type of file has not been supported yet!" <img width="381" height="110" alt="image" src="https://github.com/user-attachments/assets/4bbb7d08-cb47-416a-95fc-bc90b90fcc39" /> ### Type of change - [x] New Feature (non-breaking change which adds functionality)
116 lines
2.2 KiB
TypeScript
116 lines
2.2 KiB
TypeScript
import { useSelectParserList } from '@/hooks/use-user-setting-request';
|
|
import { useCallback, useMemo } from 'react';
|
|
|
|
const ParserListMap = new Map([
|
|
[
|
|
['pdf'],
|
|
[
|
|
'naive',
|
|
'resume',
|
|
'manual',
|
|
'paper',
|
|
'book',
|
|
'laws',
|
|
'presentation',
|
|
'one',
|
|
'qa',
|
|
'knowledge_graph',
|
|
],
|
|
],
|
|
[
|
|
['doc', 'docx'],
|
|
[
|
|
'naive',
|
|
'resume',
|
|
'book',
|
|
'laws',
|
|
'one',
|
|
'qa',
|
|
'manual',
|
|
'knowledge_graph',
|
|
],
|
|
],
|
|
[
|
|
['xlsx', 'xls'],
|
|
['naive', 'qa', 'table', 'one', 'knowledge_graph'],
|
|
],
|
|
[['ppt', 'pptx'], ['presentation']],
|
|
[
|
|
['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tif', 'tiff', 'webp', 'svg', 'ico'],
|
|
['picture'],
|
|
],
|
|
[
|
|
['txt'],
|
|
[
|
|
'naive',
|
|
'resume',
|
|
'book',
|
|
'laws',
|
|
'one',
|
|
'qa',
|
|
'table',
|
|
'knowledge_graph',
|
|
],
|
|
],
|
|
[
|
|
['csv'],
|
|
[
|
|
'naive',
|
|
'resume',
|
|
'book',
|
|
'laws',
|
|
'one',
|
|
'qa',
|
|
'table',
|
|
'knowledge_graph',
|
|
],
|
|
],
|
|
[
|
|
['md', 'mdx'],
|
|
['naive', 'qa', 'knowledge_graph'],
|
|
],
|
|
[['json'], ['naive', 'knowledge_graph']],
|
|
[['eml'], ['email']],
|
|
]);
|
|
|
|
const getParserList = (
|
|
values: string[],
|
|
parserList: Array<{
|
|
value: string;
|
|
label: string;
|
|
}>,
|
|
) => {
|
|
return parserList.filter((x) => values?.some((y) => y === x.value));
|
|
};
|
|
|
|
export const useFetchParserListOnMount = (documentExtension: string) => {
|
|
const parserList = useSelectParserList();
|
|
|
|
const nextParserList = useMemo(() => {
|
|
const key = [...ParserListMap.keys()].find((x) =>
|
|
x.some((y) => y === documentExtension),
|
|
);
|
|
if (key) {
|
|
const values = ParserListMap.get(key);
|
|
return getParserList(values ?? [], parserList);
|
|
}
|
|
|
|
return getParserList(
|
|
['naive', 'resume', 'book', 'laws', 'one', 'qa', 'table'],
|
|
parserList,
|
|
);
|
|
}, [parserList, documentExtension]);
|
|
|
|
return { parserList: nextParserList };
|
|
};
|
|
|
|
const hideAutoKeywords = ['qa', 'table', 'resume', 'knowledge_graph', 'tag'];
|
|
|
|
export const useShowAutoKeywords = () => {
|
|
const showAutoKeywords = useCallback((selectedTag: string) => {
|
|
return hideAutoKeywords.every((x) => selectedTag !== x);
|
|
}, []);
|
|
|
|
return showAutoKeywords;
|
|
};
|