From f1190400a5db887a853146d3b6fafef7e12da59e Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sat, 13 Nov 2021 17:57:22 +0100 Subject: [PATCH] better archive tools --- packages/api/src/controllers/archive.js | 17 ++++++++--- .../src/appobj/ArchiveFileAppObject.svelte | 21 ++++++++++++-- .../src/appobj/ArchiveFolderAppObject.svelte | 28 ++++++++++++++++++- .../web/src/appobj/DatabaseAppObject.svelte | 4 ++- 4 files changed, 61 insertions(+), 9 deletions(-) diff --git a/packages/api/src/controllers/archive.js b/packages/api/src/controllers/archive.js index e8fead0a4..a4d42852b 100644 --- a/packages/api/src/controllers/archive.js +++ b/packages/api/src/controllers/archive.js @@ -79,17 +79,26 @@ module.exports = { }, deleteFile_meta: 'post', - async deleteFile({ folder, file }) { - await fs.unlink(path.join(resolveArchiveFolder(folder), `${file}.jsonl`)); + async deleteFile({ folder, file, fileType }) { + await fs.unlink(path.join(resolveArchiveFolder(folder), `${file}.${fileType}`)); socket.emitChanged(`archive-files-changed-${folder}`); }, renameFile_meta: 'post', - async renameFile({ folder, file, newFile }) { - await fs.rename(path.join(resolveArchiveFolder(folder), `${file}.jsonl`), path.join(resolveArchiveFolder(folder), `${newFile}.jsonl`)); + async renameFile({ folder, file, newFile, fileType }) { + await fs.rename( + path.join(resolveArchiveFolder(folder), `${file}.${fileType}`), + path.join(resolveArchiveFolder(folder), `${newFile}.${fileType}`) + ); socket.emitChanged(`archive-files-changed-${folder}`); }, + renameFolder_meta: 'post', + async renameFolder({ folder, newFolder }) { + await fs.rename(path.join(resolveArchiveFolder(folder)), path.join(resolveArchiveFolder(newFolder))); + socket.emitChanged(`archive-folders-changed`); + }, + deleteFolder_meta: 'post', async deleteFolder({ folder }) { if (!folder) throw new Error('Missing folder parameter'); diff --git a/packages/web/src/appobj/ArchiveFileAppObject.svelte b/packages/web/src/appobj/ArchiveFileAppObject.svelte index a0a0a69dd..5e7344b53 100644 --- a/packages/web/src/appobj/ArchiveFileAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFileAppObject.svelte @@ -68,22 +68,37 @@ import AppObjectCore from './AppObjectCore.svelte'; import getConnectionLabel from '../utility/getConnectionLabel'; import InputTextModal from '../modals/InputTextModal.svelte'; + import ConfirmModal from '../modals/ConfirmModal.svelte'; export let data; const handleRename = () => { showModal(InputTextModal, { - value: data.file, + value: data.fileName, label: 'New file name', header: 'Rename file', onConfirm: newFile => { - axiosInstance.post('archive/rename-file', { file: data.fileName, folder: data.folderName, newFile }); + axiosInstance.post('archive/rename-file', { + file: data.fileName, + folder: data.folderName, + fileType: data.fileType, + newFile, + }); }, }); }; const handleDelete = () => { - axiosInstance.post('archive/delete-file', { file: data.fileName, folder: data.folderName }); + showModal(ConfirmModal, { + message: `Really delete file ${data.fileName}?`, + onConfirm: () => { + axiosInstance.post('archive/delete-file', { + file: data.fileName, + folder: data.folderName, + fileType: data.fileType, + }); + }, + }); }; const handleOpenRead = () => { openArchive(data.fileName, data.folderName); diff --git a/packages/web/src/appobj/ArchiveFolderAppObject.svelte b/packages/web/src/appobj/ArchiveFolderAppObject.svelte index 48675165e..8474e1e6a 100644 --- a/packages/web/src/appobj/ArchiveFolderAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFolderAppObject.svelte @@ -13,11 +13,36 @@ import openNewTab from '../utility/openNewTab'; import AppObjectCore from './AppObjectCore.svelte'; import newQuery from '../query/newQuery'; + import { showModal } from '../modals/modalTools'; + import ConfirmModal from '../modals/ConfirmModal.svelte'; + import InputTextModal from '../modals/InputTextModal.svelte'; export let data; const handleDelete = () => { - axiosInstance.post('archive/delete-folder', { folder: data.name }); + showModal(ConfirmModal, { + message: `Really delete folder ${data.name}?`, + onConfirm: () => { + axiosInstance.post('archive/delete-folder', { folder: data.name }); + }, + }); + }; + + const handleRename = () => { + showModal(InputTextModal, { + value: data.name, + label: 'New folder name', + header: 'Rename folder', + onConfirm: async newFolder => { + await axiosInstance.post('archive/rename-folder', { + folder: data.name, + newFolder, + }); + if ($currentArchive == data.name) { + $currentArchive = newFolder; + } + }, + }); }; const handleGenerateDeployScript = () => { @@ -58,6 +83,7 @@ await dbgateApi.deployDb(${JSON.stringify( function createMenu() { return [ data.name != 'default' && { text: 'Delete', onClick: handleDelete }, + data.name != 'default' && { text: 'Rename', onClick: handleRename }, data.name != 'default' && $currentDatabase && [ { text: 'Generate deploy DB SQL', onClick: handleGenerateDeploySql }, diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte index 991a72d52..2ebc458a9 100644 --- a/packages/web/src/appobj/DatabaseAppObject.svelte +++ b/packages/web/src/appobj/DatabaseAppObject.svelte @@ -58,6 +58,8 @@ conid: connection._id, database: name, }); + currentArchive.set(resp.data.archiveFolder); + selectedWidget.set('archive'); showSnackbarSuccess(`Saved to archive ${resp.data.archiveFolder}`); }; @@ -107,7 +109,7 @@ import { showModal } from '../modals/modalTools'; import SqlGeneratorModal from '../modals/SqlGeneratorModal.svelte'; import { getDefaultFileFormat } from '../plugins/fileformats'; - import { currentDatabase, extensions } from '../stores'; + import { currentArchive, currentDatabase, extensions, selectedWidget } from '../stores'; import axiosInstance from '../utility/axiosInstance'; import getElectron from '../utility/getElectron'; import openNewTab from '../utility/openNewTab';