file formats refactor

This commit is contained in:
Jan Prochazka
2020-11-19 07:59:03 +01:00
parent ef3c96f574
commit ac049f43a3
11 changed files with 76 additions and 33 deletions

View File

@@ -25,6 +25,7 @@ import SqlEditor from '../sqleditor/SqlEditor';
import { useUploadsProvider } from '../utility/UploadsProvider';
import { FontIcon } from '../icons';
import useTheme from '../theme/useTheme';
import { fileformats, findFileFormat, getFileFormatDirections } from '../fileformats';
const Container = styled.div`
// max-height: 50vh;
@@ -89,9 +90,8 @@ const Title = styled.div`
function getFileFilters(storageType) {
const res = [];
if (storageType == 'csv') res.push({ name: 'CSV files', extensions: ['csv'] });
if (storageType == 'jsonl') res.push({ name: 'JSON lines', extensions: ['jsonl'] });
if (storageType == 'excel') res.push({ name: 'MS Excel files', extensions: ['xlsx'] });
const format = findFileFormat(storageType);
if (format) res.push({ name: format.filesTitle, extensions: [format.extension] });
res.push({ name: 'All Files', extensions: ['*'] });
return res;
}
@@ -193,9 +193,11 @@ function SourceTargetConfig({
? [{ value: 'jsldata', label: 'Query result data', directions: ['source'] }]
: [
{ value: 'database', label: 'Database', directions: ['source', 'target'] },
{ value: 'csv', label: 'CSV file(s)', directions: ['source', 'target'] },
{ value: 'jsonl', label: 'JSON lines file(s)', directions: ['source', 'target'] },
{ value: 'excel', label: 'MS Excel file(s)', directions: ['source'] },
...fileformats.map((format) => ({
value: format.storageType,
label: format.filesTitle,
directions: getFileFormatDirections(format),
})),
{ value: 'query', label: 'SQL Query', directions: ['source'] },
{ value: 'archive', label: 'Archive', directions: ['source', 'target'] },
];
@@ -374,7 +376,7 @@ export default function ImportExportConfigurator({ uploadedFile = undefined, onC
}
}, []);
const supportsPreview = ['csv', 'jsonl', 'excel'].includes(values.sourceStorageType);
const supportsPreview = !!findFileFormat(values.sourceStorageType);
const handleChangePreviewSource = async () => {
if (previewSource && supportsPreview) {

View File

@@ -4,17 +4,18 @@ import getAsArray from '../utility/getAsArray';
import { getConnectionInfo } from '../utility/metadataLoaders';
import engines from 'dbgate-engines';
import { findObjectLike } from 'dbgate-tools';
import { findFileFormat } from '../fileformats';
export function getTargetName(source, values) {
const key = `targetName_${source}`;
if (values[key]) return values[key];
if (values.targetStorageType == 'csv') return `${source}.csv`;
if (values.targetStorageType == 'jsonl') return `${source}.jsonl`;
const format = findFileFormat(values.targetStorageType);
if (format) return `${source}.${format.extension}`;
return source;
}
export function isFileStorage(storageType) {
return storageType == 'csv' || storageType == 'jsonl' || storageType == 'excel';
return !!findFileFormat(storageType);
}
async function getConnection(storageType, conid, database) {
@@ -55,14 +56,9 @@ function getSourceExpr(sourceName, values, sourceConnection, sourceDriver) {
}
if (isFileStorage(sourceStorageType)) {
const sourceFile = values[`sourceFile_${sourceName}`];
if (sourceStorageType == 'excel') {
return ['excelSheetReader', sourceFile];
}
if (sourceStorageType == 'jsonl') {
return ['jsonLinesReader', sourceFile];
}
if (sourceStorageType == 'csv') {
return ['csvReader', sourceFile];
const format = findFileFormat(sourceStorageType);
if (format && format.readerFunc) {
return [format.readerFunc, sourceFile];
}
}
if (sourceStorageType == 'jsldata') {
@@ -101,21 +97,15 @@ function getFlagsFroAction(action) {
function getTargetExpr(sourceName, values, targetConnection, targetDriver) {
const { targetStorageType } = values;
if (targetStorageType == 'csv') {
const format = findFileFormat(targetStorageType);
if (format && format.writerFunc) {
return [
'csvWriter',
{
fileName: getTargetName(sourceName, values),
},
];
}
if (targetStorageType == 'jsonl') {
return [
'jsonLinesWriter',
format.writerFunc,
{
fileName: getTargetName(sourceName, values),
},
];
}
if (targetStorageType == 'database') {
return [