improt into archive improvement

This commit is contained in:
Jan Prochazka
2020-11-15 17:18:33 +01:00
parent 075146403a
commit eaf45d8768
6 changed files with 36 additions and 12 deletions

View File

@@ -1,11 +1,16 @@
const path = require('path'); const path = require('path');
const { archivedir, ensureDirectory } = require('../utility/directories'); const fs = require('fs');
const { archivedir } = require('../utility/directories');
// const socket = require('../utility/socket'); // const socket = require('../utility/socket');
const jsonLinesWriter = require('./jsonLinesWriter'); const jsonLinesWriter = require('./jsonLinesWriter');
function archiveWriter({ folderName, fileName }) { function archiveWriter({ folderName, fileName }) {
if (folderName == 'default') ensureDirectory(path.join(archivedir(), folderName)); const dir = path.join(archivedir(), folderName);
const jsonlFile = path.join(archivedir(), folderName, `${fileName}.jsonl`); if (!fs.existsSync(dir)) {
console.log(`Creating directory ${dir}`);
fs.mkdirSync(dir);
}
const jsonlFile = path.join(dir, `${fileName}.jsonl`);
const res = jsonLinesWriter({ fileName: jsonlFile }); const res = jsonLinesWriter({ fileName: jsonlFile });
// socket.emitChanged(`archive-files-changed-${folderName}`); // socket.emitChanged(`archive-files-changed-${folderName}`);
return res; return res;

View File

@@ -262,7 +262,10 @@ function SourceTargetConfig({
{storageType == 'archive' && ( {storageType == 'archive' && (
<> <>
<Label theme={theme}>Archive folder</Label> <Label theme={theme}>Archive folder</Label>
<FormArchiveFolderSelect name={archiveFolderField} /> <FormArchiveFolderSelect
name={archiveFolderField}
additionalFolders={_.compact([values[archiveFolderField]])}
/>
</> </>
)} )}

View File

@@ -1,4 +1,5 @@
import React, { useState } from 'react'; import React from 'react';
import moment from 'moment';
import ModalBase from './ModalBase'; import ModalBase from './ModalBase';
import FormStyledButton from '../widgets/FormStyledButton'; import FormStyledButton from '../widgets/FormStyledButton';
import { Formik, Form, useFormikContext } from 'formik'; import { Formik, Form, useFormikContext } from 'formik';
@@ -102,12 +103,18 @@ function GenerateSctriptButton({ modalState }) {
return <FormStyledButton type="button" value="Generate script" onClick={handleGenerateScript} />; return <FormStyledButton type="button" value="Generate script" onClick={handleGenerateScript} />;
} }
export default function ImportExportModal({ modalState, initialValues, uploadedFile = undefined }) { export default function ImportExportModal({
modalState,
initialValues,
uploadedFile = undefined,
importToArchive = false,
}) {
const [executeNumber, setExecuteNumber] = React.useState(0); const [executeNumber, setExecuteNumber] = React.useState(0);
const [runnerId, setRunnerId] = React.useState(null); const [runnerId, setRunnerId] = React.useState(null);
const archive = useCurrentArchive(); const archive = useCurrentArchive();
const theme = useTheme(); const theme = useTheme();
const [previewReader, setPreviewReader] = useState(0); const [previewReader, setPreviewReader] = React.useState(0);
const targetArchiveFolder = importToArchive ? `import-${moment().format('YYYY-MM-DD-hh-mm-ss')}` : archive;
const handleExecute = async (values) => { const handleExecute = async (values) => {
const script = await createImpExpScript(values); const script = await createImpExpScript(values);
@@ -126,9 +133,9 @@ export default function ImportExportModal({ modalState, initialValues, uploadedF
onSubmit={handleExecute} onSubmit={handleExecute}
initialValues={{ initialValues={{
sourceStorageType: 'database', sourceStorageType: 'database',
targetStorageType: 'csv', targetStorageType: importToArchive ? 'archive' : 'csv',
sourceArchiveFolder: archive, sourceArchiveFolder: archive,
targetArchiveFolder: archive, targetArchiveFolder,
...initialValues, ...initialValues,
}} }}
> >

View File

@@ -47,6 +47,7 @@ export function useUploadsZone() {
<ImportExportModal <ImportExportModal
uploadedFile={fileData} uploadedFile={fileData}
modalState={modalState} modalState={modalState}
importToArchive
initialValues={{ initialValues={{
sourceStorageType: fileData.storageType, sourceStorageType: fileData.storageType,
// sourceConnectionId: data.conid, // sourceConnectionId: data.conid,

View File

@@ -240,15 +240,22 @@ export function FormArchiveFilesSelect({ folderName, name }) {
return <FormReactSelect options={filesOptions} name={name} isMulti />; return <FormReactSelect options={filesOptions} name={name} isMulti />;
} }
export function FormArchiveFolderSelect({ name, ...other }) { export function FormArchiveFolderSelect({ name, additionalFolders = [], ...other }) {
const { setFieldValue } = useFormikContext(); const { setFieldValue } = useFormikContext();
const folders = useArchiveFolders(); const folders = useArchiveFolders();
const folderOptions = React.useMemo( const folderOptions = React.useMemo(
() => () => [
(folders || []).map((folder) => ({ ...(folders || []).map((folder) => ({
value: folder.name, value: folder.name,
label: folder.name, label: folder.name,
})), })),
...additionalFolders
.filter((x) => !(folders || []).find((y) => y.name == x))
.map((folder) => ({
value: folder,
label: folder,
})),
],
[folders] [folders]
); );

View File

@@ -38,6 +38,7 @@ export default function ToolBar({ toolbarPortalRef }) {
showModal((modalState) => ( showModal((modalState) => (
<ImportExportModal <ImportExportModal
modalState={modalState} modalState={modalState}
importToArchive
initialValues={{ initialValues={{
sourceStorageType: 'csv', sourceStorageType: 'csv',
// sourceConnectionId: data.conid, // sourceConnectionId: data.conid,