diff --git a/packages/types/fileformat.d.ts b/packages/types/fileformat.d.ts new file mode 100644 index 000000000..ccc569085 --- /dev/null +++ b/packages/types/fileformat.d.ts @@ -0,0 +1,20 @@ +export interface FileFormatDefinition { + storageType: string; + extension: string; + name: string; + readerFunc?: string; + writerFunc?: string; + args?: any[]; + addFilesToSourceList: ( + file: { + full: string; + }, + newSources: string[], + newValues: { + [key: string]: any; + } + ) => void; + getDefaultOutputName?: (sourceName, values) => string; + getOutputParams?: (sourceName, values) => any; + } + \ No newline at end of file diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts index c8c9c73d8..12530325e 100644 --- a/packages/types/index.d.ts +++ b/packages/types/index.d.ts @@ -39,3 +39,4 @@ export * from './query'; export * from './dialect'; export * from './dumper'; export * from './dbtypes'; +export * from './fileformat'; diff --git a/packages/web/src/fileformats/csv.ts b/packages/web/src/fileformats/csv.ts index 1e7cd655d..595aa203b 100644 --- a/packages/web/src/fileformats/csv.ts +++ b/packages/web/src/fileformats/csv.ts @@ -1,8 +1,6 @@ -import fileFormatBase from './fileFormatBase'; import { FileFormatDefinition } from './types'; const csvFormat: FileFormatDefinition = { - ...fileFormatBase, storageType: 'csv', extension: 'csv', name: 'CSV', diff --git a/packages/web/src/fileformats/excel.ts b/packages/web/src/fileformats/excel.ts index 3b1920e80..847f201ad 100644 --- a/packages/web/src/fileformats/excel.ts +++ b/packages/web/src/fileformats/excel.ts @@ -1,9 +1,7 @@ import axios from '../utility/axios'; -import fileFormatBase from './fileFormatBase'; import { FileFormatDefinition } from './types'; const excelFormat: FileFormatDefinition = { - ...fileFormatBase, storageType: 'excel', extension: 'xlsx', name: 'MS Excel', diff --git a/packages/web/src/fileformats/fileFormatBase.ts b/packages/web/src/fileformats/fileFormatBase.ts deleted file mode 100644 index cb7bc1265..000000000 --- a/packages/web/src/fileformats/fileFormatBase.ts +++ /dev/null @@ -1,11 +0,0 @@ -const fileFormatBase = { - addFilesToSourceList: async (file, newSources, newValues) => { - const sourceName = file.name; - newSources.push(sourceName); - newValues[`sourceFile_${sourceName}`] = { - fileName: file.full, - }; - }, -}; - -export default fileFormatBase; diff --git a/packages/web/src/fileformats/jsonl.ts b/packages/web/src/fileformats/jsonl.ts index 02882140c..944f5fef7 100644 --- a/packages/web/src/fileformats/jsonl.ts +++ b/packages/web/src/fileformats/jsonl.ts @@ -1,8 +1,6 @@ -import fileFormatBase from './fileFormatBase'; import { FileFormatDefinition } from './types'; const jsonlFormat: FileFormatDefinition = { - ...fileFormatBase, storageType: 'jsonl', extension: 'jsonl', name: 'JSON lines', diff --git a/packages/web/src/fileformats/types.ts b/packages/web/src/fileformats/types.ts index de9929955..c669c63fd 100644 --- a/packages/web/src/fileformats/types.ts +++ b/packages/web/src/fileformats/types.ts @@ -5,7 +5,7 @@ export interface FileFormatDefinition { readerFunc?: string; writerFunc?: string; args?: any[]; - addFilesToSourceList: ( + addFilesToSourceList?: ( file: { full: string; }, diff --git a/packages/web/src/impexp/ImportExportConfigurator.js b/packages/web/src/impexp/ImportExportConfigurator.js index b416f3ca5..ac137b503 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.js +++ b/packages/web/src/impexp/ImportExportConfigurator.js @@ -97,14 +97,22 @@ function getFileFilters(storageType) { return res; } +async function addFilesToSourceListDefault(file, newSources, newValues) { + const sourceName = file.name; + newSources.push(sourceName); + newValues[`sourceFile_${sourceName}`] = { + fileName: file.full, + }; +} + async function addFilesToSourceList(files, values, setValues, preferedStorageType, setPreviewSource) { const newSources = []; const newValues = {}; const storage = preferedStorageType || values.sourceStorageType; for (const file of getAsArray(files)) { const format = findFileFormat(storage); - if (format && format.addFilesToSourceList) { - await format.addFilesToSourceList(file, newSources, newValues); + if (format) { + await (format.addFilesToSourceList || addFilesToSourceListDefault)(file, newSources, newValues); } } newValues['sourceList'] = [...(values.sourceList || []).filter((x) => !newSources.includes(x)), ...newSources]; diff --git a/packages/web/src/utility/fileformats.js b/packages/web/src/utility/fileformats.js new file mode 100644 index 000000000..2cf6b4578 --- /dev/null +++ b/packages/web/src/utility/fileformats.js @@ -0,0 +1,6 @@ +import { usePlugins } from '../plugins/PluginsProvider'; + +export function useFileFormats() { + const plugins = usePlugins(); + return []; +}