json export in configurator, prepare for table mapping

This commit is contained in:
Jan Prochazka
2020-06-11 21:26:35 +02:00
parent b520501d1f
commit b873dd75d3
2 changed files with 66 additions and 22 deletions

View File

@@ -13,6 +13,9 @@ import {
FormTablesSelect, FormTablesSelect,
} from '../utility/forms'; } from '../utility/forms';
import { useConnectionList, useDatabaseList } from '../utility/metadataLoaders'; import { useConnectionList, useDatabaseList } from '../utility/metadataLoaders';
import TableControl, { TableColumn } from '../utility/TableControl';
const Container = styled.div``;
const Wrapper = styled.div` const Wrapper = styled.div`
display: flex; display: flex;
@@ -67,7 +70,7 @@ function SourceTargetConfig({ direction, storageTypeField, connectionIdField, da
const types = [ const types = [
{ value: 'database', label: 'Database', directions: ['source'] }, { value: 'database', label: 'Database', directions: ['source'] },
{ value: 'csv', label: 'CSV file(s)', directions: ['target'] }, { value: 'csv', label: 'CSV file(s)', directions: ['target'] },
{ value: 'json', label: 'JSON file(s)', directions: [] }, { value: 'jsonl', label: 'JSON lines file(s)', directions: ['target'] },
]; ];
const { values } = useFormikContext(); const { values } = useFormikContext();
return ( return (
@@ -81,8 +84,12 @@ function SourceTargetConfig({ direction, storageTypeField, connectionIdField, da
<FormConnectionSelect name={connectionIdField} /> <FormConnectionSelect name={connectionIdField} />
<Label>Database</Label> <Label>Database</Label>
<FormDatabaseSelect conidName={connectionIdField} name={databaseNameField} /> <FormDatabaseSelect conidName={connectionIdField} name={databaseNameField} />
<Label>Tables/views</Label> {direction == 'source' && (
<FormTablesSelect conidName={connectionIdField} databaseName={databaseNameField} name={tablesField} /> <>
<Label>Tables/views</Label>
<FormTablesSelect conidName={connectionIdField} databaseName={databaseNameField} name={tablesField} />
</>
)}
</> </>
)} )}
</Column> </Column>
@@ -90,22 +97,52 @@ function SourceTargetConfig({ direction, storageTypeField, connectionIdField, da
} }
export default function ImportExportConfigurator() { export default function ImportExportConfigurator() {
const { values } = useFormikContext();
const sources = values.sourceTables;
const actionOptions = [
{
label: 'Create file',
value: 'createFile',
},
{
label: 'Create table',
value: 'createTable',
},
{
label: 'Drop and create table',
value: 'dropCreateFile',
},
{
label: 'Append data',
value: 'appendData',
},
];
return ( return (
<Wrapper> <Container>
<SourceTargetConfig <Wrapper>
direction="source" <SourceTargetConfig
storageTypeField="sourceStorageType" direction="source"
connectionIdField="sourceConnectionId" storageTypeField="sourceStorageType"
databaseNameField="sourceDatabaseName" connectionIdField="sourceConnectionId"
tablesField="sourceTables" databaseNameField="sourceDatabaseName"
/> tablesField="sourceTables"
<SourceTargetConfig />
direction="target" <SourceTargetConfig
storageTypeField="targetStorageType" direction="target"
connectionIdField="targetConnectionId" storageTypeField="targetStorageType"
databaseNameField="targetDatabaseName" connectionIdField="targetConnectionId"
tablesField="targetTables" databaseNameField="targetDatabaseName"
/> tablesField="targetTables"
</Wrapper> />
</Wrapper>
{/* <TableControl rows={sources || []}>
<TableColumn fieldName="source" header="Source" formatter={(row) => row} />
<TableColumn
fieldName="action"
header="Action"
formatter={(row) => <FormReactSelect name={`action_${row}`} options={actionOptions} />}
/>
</TableControl> */}
</Container>
); );
} }

View File

@@ -24,9 +24,16 @@ export default async function createImpExpScript(values) {
}); });
const targetVar = script.allocVariable(); const targetVar = script.allocVariable();
script.assign(targetVar, 'csvWriter', { if (values.targetStorageType == 'csv') {
fileName: `${fullName.pureName}.csv`, script.assign(targetVar, 'csvWriter', {
}); fileName: `${fullName.pureName}.csv`,
});
}
if (values.targetStorageType == 'jsonl') {
script.assign(targetVar, 'jsonLinesWriter', {
fileName: `${fullName.pureName}.jsonl`,
});
}
script.copyStream(sourceVar, targetVar); script.copyStream(sourceVar, targetVar);
script.put(); script.put();