diff --git a/packages/api/src/shell/archiveWriter.js b/packages/api/src/shell/archiveWriter.js index f195f2fd9..20e1573d9 100644 --- a/packages/api/src/shell/archiveWriter.js +++ b/packages/api/src/shell/archiveWriter.js @@ -1,11 +1,16 @@ 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 jsonLinesWriter = require('./jsonLinesWriter'); function archiveWriter({ folderName, fileName }) { - if (folderName == 'default') ensureDirectory(path.join(archivedir(), folderName)); - const jsonlFile = path.join(archivedir(), folderName, `${fileName}.jsonl`); + const dir = path.join(archivedir(), folderName); + if (!fs.existsSync(dir)) { + console.log(`Creating directory ${dir}`); + fs.mkdirSync(dir); + } + const jsonlFile = path.join(dir, `${fileName}.jsonl`); const res = jsonLinesWriter({ fileName: jsonlFile }); // socket.emitChanged(`archive-files-changed-${folderName}`); return res; diff --git a/packages/web/src/impexp/ImportExportConfigurator.js b/packages/web/src/impexp/ImportExportConfigurator.js index 84594b526..1582aaab0 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.js +++ b/packages/web/src/impexp/ImportExportConfigurator.js @@ -262,7 +262,10 @@ function SourceTargetConfig({ {storageType == 'archive' && ( <> - + )} diff --git a/packages/web/src/modals/ImportExportModal.js b/packages/web/src/modals/ImportExportModal.js index aead0d510..0f8334151 100644 --- a/packages/web/src/modals/ImportExportModal.js +++ b/packages/web/src/modals/ImportExportModal.js @@ -1,4 +1,5 @@ -import React, { useState } from 'react'; +import React from 'react'; +import moment from 'moment'; import ModalBase from './ModalBase'; import FormStyledButton from '../widgets/FormStyledButton'; import { Formik, Form, useFormikContext } from 'formik'; @@ -102,12 +103,18 @@ function GenerateSctriptButton({ modalState }) { return ; } -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 [runnerId, setRunnerId] = React.useState(null); const archive = useCurrentArchive(); 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 script = await createImpExpScript(values); @@ -126,9 +133,9 @@ export default function ImportExportModal({ modalState, initialValues, uploadedF onSubmit={handleExecute} initialValues={{ sourceStorageType: 'database', - targetStorageType: 'csv', + targetStorageType: importToArchive ? 'archive' : 'csv', sourceArchiveFolder: archive, - targetArchiveFolder: archive, + targetArchiveFolder, ...initialValues, }} > diff --git a/packages/web/src/utility/UploadsProvider.js b/packages/web/src/utility/UploadsProvider.js index 83ad73201..f700f4caf 100644 --- a/packages/web/src/utility/UploadsProvider.js +++ b/packages/web/src/utility/UploadsProvider.js @@ -47,6 +47,7 @@ export function useUploadsZone() { ; } -export function FormArchiveFolderSelect({ name, ...other }) { +export function FormArchiveFolderSelect({ name, additionalFolders = [], ...other }) { const { setFieldValue } = useFormikContext(); const folders = useArchiveFolders(); const folderOptions = React.useMemo( - () => - (folders || []).map((folder) => ({ + () => [ + ...(folders || []).map((folder) => ({ value: folder.name, label: folder.name, })), + ...additionalFolders + .filter((x) => !(folders || []).find((y) => y.name == x)) + .map((folder) => ({ + value: folder, + label: folder, + })), + ], [folders] ); diff --git a/packages/web/src/widgets/Toolbar.js b/packages/web/src/widgets/Toolbar.js index f457dc3c6..dfb654b0b 100644 --- a/packages/web/src/widgets/Toolbar.js +++ b/packages/web/src/widgets/Toolbar.js @@ -38,6 +38,7 @@ export default function ToolBar({ toolbarPortalRef }) { showModal((modalState) => (