From 225268afe50b7349ec00639b91c2850109f0581e Mon Sep 17 00:00:00 2001 From: Alex Hincu Date: Sun, 6 Oct 2019 16:34:26 +0300 Subject: [PATCH] Add ability to duplicate environments --- packages/insomnia-app/app/models/environment.js | 14 ++++++++++++++ .../modals/workspace-environments-edit-modal.js | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/packages/insomnia-app/app/models/environment.js b/packages/insomnia-app/app/models/environment.js index af86c6c3afd..254995f338a 100644 --- a/packages/insomnia-app/app/models/environment.js +++ b/packages/insomnia-app/app/models/environment.js @@ -82,6 +82,20 @@ export function getById(id: string): Promise { return db.get(type, id); } +export async function duplicate(environment: Environment): Promise { + const name = `${environment.name} (Copy)`; + + // Get sort key of next environment + const q = { metaSortKey: { $gt: environment.metaSortKey } }; + const [nextEnvironment] = await db.find(type, q, { metaSortKey: 1 }); + const nextSortKey = nextEnvironment ? nextEnvironment.metaSortKey : environment.metaSortKey + 100; + + // Calculate new sort key + const metaSortKey = (environment.metaSortKey + nextSortKey) / 2; + + return db.duplicate(environment, { name, metaSortKey }); +} + export function remove(environment: Environment): Promise { return db.remove(environment); } diff --git a/packages/insomnia-app/app/ui/components/modals/workspace-environments-edit-modal.js b/packages/insomnia-app/app/ui/components/modals/workspace-environments-edit-modal.js index 10fa01324f4..f6e522fe969 100644 --- a/packages/insomnia-app/app/ui/components/modals/workspace-environments-edit-modal.js +++ b/packages/insomnia-app/app/ui/components/modals/workspace-environments-edit-modal.js @@ -205,6 +205,12 @@ class WorkspaceEnvironmentsEditModal extends React.PureComponent { await this._load(workspace, environment); } + async _handleDuplicateEnvironment(environment: Environment) { + const { workspace } = this.state; + const newEnvironment = await models.environment.duplicate(environment); + this._load(workspace, newEnvironment); + } + async _handleDeleteEnvironment(environment: Environment) { const { rootEnvironment, workspace } = this.state; @@ -484,6 +490,13 @@ class WorkspaceEnvironmentsEditModal extends React.PureComponent { + +