mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-03 10:33:58 +00:00
improt into archive improvement
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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]])}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user