diff --git a/app/src/electron.js b/app/src/electron.js index bc8ba5449..f6d1cd4f0 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -50,7 +50,7 @@ function buildMenu() { commandItem('new.sqliteDatabase'), { type: 'separator' }, commandItem('file.open'), - // commandItem('file.openArchive'), + commandItem('file.openArchive'), { type: 'separator' }, commandItem('group.save'), commandItem('group.saveAs'), diff --git a/packages/api/src/controllers/archive.js b/packages/api/src/controllers/archive.js index f20582b77..89c5d9bf8 100644 --- a/packages/api/src/controllers/archive.js +++ b/packages/api/src/controllers/archive.js @@ -97,7 +97,8 @@ module.exports = { renameFolder_meta: 'post', async renameFolder({ folder, newFolder }) { - await fs.rename(path.join(resolveArchiveFolder(folder)), path.join(resolveArchiveFolder(newFolder))); + const uniqueName = await this.getNewArchiveFolder({ database: newFolder }); + await fs.rename(path.join(archivedir(), folder), path.join(archivedir(), uniqueName)); socket.emitChanged(`archive-folders-changed`); }, @@ -140,11 +141,14 @@ module.exports = { }, async getNewArchiveFolder({ database }) { + const isLink = database.endsWith(database); + const name = isLink ? database.slice(0, -5) : database; + const suffix = isLink ? '.link' : ''; if (!(await fs.exists(path.join(archivedir(), database)))) return database; let index = 2; - while (await fs.exists(path.join(archivedir(), `${database}${index}`))) { + while (await fs.exists(path.join(archivedir(), `${name}${index}${suffix}`))) { index += 1; } - return `${database}${index}`; + return `${name}${index}${suffix}`; }, }; diff --git a/packages/web/src/appobj/ArchiveFolderAppObject.svelte b/packages/web/src/appobj/ArchiveFolderAppObject.svelte index 891ef2788..1e95c90cc 100644 --- a/packages/web/src/appobj/ArchiveFolderAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFolderAppObject.svelte @@ -31,17 +31,21 @@ }; const handleRename = () => { + const isLink = data.name.endsWith(data.name); + const name = isLink ? data.name.slice(0, -5) : data.name; + const suffix = isLink ? '.link' : ''; + showModal(InputTextModal, { - value: data.name, + value: name, label: 'New folder name', header: 'Rename folder', onConfirm: async newFolder => { await axiosInstance.post('archive/rename-folder', { folder: data.name, - newFolder, + newFolder: newFolder + suffix, }); if ($currentArchive == data.name) { - $currentArchive = newFolder; + $currentArchive = newFolder + suffix; } }, }); @@ -122,8 +126,8 @@ await dbgateApi.deployDb(${JSON.stringify( ($currentArchive = data.name)} menu={createMenu} diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index 31e25130d..0805b0988 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -252,12 +252,12 @@ if (electron) { onClick: openElectronFile, }); - // registerCommand({ - // id: 'file.openArchive', - // category: 'File', - // name: 'Open DB Model/Archive', - // onClick: openArchiveFolder, - // }); + registerCommand({ + id: 'file.openArchive', + category: 'File', + name: 'Open DB Model/Archive', + onClick: openArchiveFolder, + }); } registerCommand({