From 8a290784aa6da93d1b4b41229db44aa4e618d7d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20H=C3=AEncu?= Date: Mon, 7 Oct 2019 21:43:34 +0300 Subject: [PATCH] Add ability to duplicate environments (#1706) --- 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 af86c6c3af..3387348edb 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 10fa01324f..f6e522fe96 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 { + +