From 83c232ecb525cd425d2b7360bdd6659d09b017ab Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 5 Apr 2017 11:37:22 -0400 Subject: [PATCH] edit logins from subvaults page --- src/app/vault/vaultController.js | 10 ++- .../vault/vaultLoginSubvaultsController.js | 5 +- src/app/vault/vaultSubvaultsController.js | 71 ++++++++++++++++++- src/app/vault/views/vault.html | 10 +++ src/app/vault/views/vaultSubvaults.html | 12 +++- 5 files changed, 102 insertions(+), 6 deletions(-) diff --git a/src/app/vault/vaultController.js b/src/app/vault/vaultController.js index be12b5760b..3af5f9766f 100644 --- a/src/app/vault/vaultController.js +++ b/src/app/vault/vaultController.js @@ -72,7 +72,7 @@ controller: 'vaultEditLoginController', resolve: { loginId: function () { return login.id; }, - folders: function () { return $scope.folders; } + folders: getFoldersPromise() } }); @@ -116,7 +116,7 @@ templateUrl: 'app/vault/views/vaultAddLogin.html', controller: 'vaultAddLoginController', resolve: { - folders: function () { return $scope.folders; }, + folders: getFoldersPromise(), selectedFolder: function () { return folder; }, checkedFavorite: function () { return favorite; } } @@ -227,4 +227,10 @@ }); }; + + function getFoldersPromise() { + var deferred = $q.defer(); + deferred.resolve($scope.folders); + return deferred.promise; + } }); diff --git a/src/app/vault/vaultLoginSubvaultsController.js b/src/app/vault/vaultLoginSubvaultsController.js index 7f6374b633..923779d793 100644 --- a/src/app/vault/vaultLoginSubvaultsController.js +++ b/src/app/vault/vaultLoginSubvaultsController.js @@ -9,6 +9,7 @@ $scope.loadingLogin = true; $scope.loadingSubvaults = true; $scope.selectedSubvaults = {}; + $scope.subvaults = []; $uibModalInstance.opened.then(function () { apiService.ciphers.getFullDetails({ id: loginId }).$promise.then(function (cipher) { @@ -82,12 +83,12 @@ return Object.keys($scope.selectedSubvaults).length === $scope.subvaults.length; }; - $scope.save = function (model) { + $scope.submit = function (model) { var request = { subvaultIds: model.subvaultIds }; - $scope.savePromise = apiService.ciphers.putSubvaults({ id: loginId }, request, function (response) { + $scope.submitPromise = apiService.ciphers.putSubvaults({ id: loginId }, request, function (response) { $analytics.eventTrack('Edited Login Subvaults'); $uibModalInstance.close({ action: 'subvaultsEdit' diff --git a/src/app/vault/vaultSubvaultsController.js b/src/app/vault/vaultSubvaultsController.js index e3cd66be60..8fd85e064c 100644 --- a/src/app/vault/vaultSubvaultsController.js +++ b/src/app/vault/vaultSubvaultsController.js @@ -1,9 +1,11 @@ angular .module('bit.vault') - .controller('vaultSubvaultsController', function ($scope, apiService, cipherService, $analytics, $q, $localStorage) { + .controller('vaultSubvaultsController', function ($scope, apiService, cipherService, $analytics, $q, $localStorage, + $uibModal, $filter) { $scope.logins = []; $scope.subvaults = []; + $scope.folders = []; $scope.loading = true; $scope.$on('$viewContentLoaded', function () { @@ -56,4 +58,71 @@ $localStorage.collapsedSubvaults[subvault.id] = true; } }; + + $scope.editLogin = function (login) { + var editModel = $uibModal.open({ + animation: true, + templateUrl: 'app/vault/views/vaultEditLogin.html', + controller: 'vaultEditLoginController', + resolve: { + loginId: function () { return login.id; }, + folders: getFoldersPromise() + } + }); + + editModel.result.then(function (returnVal) { + var loginToUpdate; + if (returnVal.action === 'edit') { + loginToUpdate = $filter('filter')($scope.logins, { id: returnVal.data.id }, true); + if (loginToUpdate && loginToUpdate.length > 0) { + loginToUpdate[0].folderId = returnVal.data.folderId; + loginToUpdate[0].name = returnVal.data.name; + loginToUpdate[0].username = returnVal.data.username; + loginToUpdate[0].favorite = returnVal.data.favorite; + } + } + else if (returnVal.action === 'partialEdit') { + loginToUpdate = $filter('filter')($scope.logins, { id: returnVal.data.id }, true); + if (loginToUpdate && loginToUpdate.length > 0) { + loginToUpdate[0].folderId = returnVal.data.folderId; + loginToUpdate[0].favorite = returnVal.data.favorite; + } + } + else if (returnVal.action === 'delete') { + var loginToDelete = $filter('filter')($scope.logins, { id: returnVal.data }, true); + if (loginToDelete && loginToDelete.length > 0) { + var index = $scope.logins.indexOf(loginToDelete[0]); + if (index > -1) { + $scope.logins.splice(index, 1); + } + } + } + }); + }; + + function getFoldersPromise() { + var deferred = $q.defer(); + + if (!$scope.folders || !$scope.folders.length) { + apiService.folders.list({}).$promise.then(function (folders) { + var decFolders = [{ + id: null, + name: 'No Folder' + }]; + + for (var i = 0; i < folders.Data.length; i++) { + var decFolder = cipherService.decryptFolderPreview(folders.Data[i]); + decFolders.push(decFolder); + } + + $scope.folders = decFolders; + deferred.resolve($scope.folders); + }); + } + else { + deferred.resolve($scope.folders); + } + + return deferred.promise; + } }); diff --git a/src/app/vault/views/vault.html b/src/app/vault/views/vault.html index 707f1a67eb..1b0913deb2 100644 --- a/src/app/vault/views/vault.html +++ b/src/app/vault/views/vault.html @@ -51,6 +51,11 @@