diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.html b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.html index 350df7de5e..a6faace8a4 100644 --- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.html +++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.html @@ -66,7 +66,7 @@ limitations under the License. .deleted #mainContainer, .global, #addPermission, - #updateBtns, + #deleteBtn, .editingRef .header, .editContainer { display: none; @@ -74,13 +74,19 @@ limitations under the License. .editing #editBtn { display: flex; } - /* TODO @beckysiegel add back when editing allowed */ - /* .deleted #deletedContainer, + .deleted #deletedContainer { + display: flex; + } + /* TODO @beckysiegel add back when adding permission allowed */ + /* .editing #addPermission, */ #mainContainer, - .editing #addPermission, - .editing #updateBtns { + .editing #deleteBtn { display: block; - } */ + } + .editing #deleteBtn, + #undoRemoveBtn { + padding-right: .7em; + } .editingRef .editContainer { display: flex; } @@ -100,11 +106,10 @@ limitations under the License. -
Remove -
+ link + id="deleteBtn" + on-tap="_handleRemoveReference">Remove
- [[_computeSectionName(section.id)]] was deleted + [[_computeSectionName(section.id)]] was deleted Undo
diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.js b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.js index c603828c05..128c9965a1 100644 --- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.js +++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.js @@ -14,6 +14,12 @@ (function() { 'use strict'; + /** + * Fired when the section has been modified or removed. + * + * @event access-modified + */ + const GLOBAL_NAME = 'GLOBAL_CAPABILITIES'; // The name that gets automatically input when a new reference is added. @@ -85,6 +91,8 @@ // Restore original values if no longer editing. if (!editing) { this._editingRef = false; + this._deleted = false; + delete this.section.value.deleted; // Restore section ref. this.set(['section', 'id'], this._originalId); } @@ -159,7 +167,8 @@ _handleRemoveReference() { this._deleted = true; - this.set('section.value.deleted', true); + this.section.value.deleted = true; + this.dispatchEvent(new CustomEvent('access-modified', {bubbles: true})); }, _handleUndoRemove() { diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.html b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.html index fb07f7ad83..80161fb599 100644 --- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.html +++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.html @@ -462,9 +462,11 @@ limitations under the License. test('remove section', () => { element.editing = true; assert.isFalse(element._deleted); + assert.isNotOk(element.section.value.deleted); MockInteractions.tap(element.$.deleteBtn); flushAsynchronousOperations(); assert.isTrue(element._deleted); + assert.isTrue(element.section.value.deleted); assert.isTrue(element.$.section.classList.contains('deleted')); assert.isTrue(element.section.value.deleted); @@ -472,6 +474,13 @@ limitations under the License. flushAsynchronousOperations(); assert.isFalse(element._deleted); assert.isNotOk(element.section.value.deleted); + + MockInteractions.tap(element.$.deleteBtn); + assert.isTrue(element._deleted); + assert.isTrue(element.section.value.deleted); + element.editing = false; + assert.isFalse(element._deleted); + assert.isNotOk(element.section.value.deleted); }); }); }); diff --git a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.js b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.js index cfb0ad542c..c8559ad2b1 100644 --- a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.js +++ b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.js @@ -99,6 +99,7 @@ // Restore original values if no longer editing. if (!editing) { this._deleted = false; + delete this.permission.value.deleted; this._groupFilter = ''; this._rules = this._rules.filter(rule => !rule.value.added); diff --git a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.html b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.html index ec93a5c509..55aa4f4bb0 100644 --- a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.html +++ b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.html @@ -237,10 +237,15 @@ limitations under the License. }); test('_handleRemovePermission', () => { + element.editing = true; element.permission = {value: {rules: {}}}; element._handleRemovePermission(); assert.isTrue(element._deleted); assert.isTrue(element.permission.value.deleted); + + element.editing = false; + assert.isFalse(element._deleted); + assert.isNotOk(element.permission.value.deleted); }); test('_handleUndoRemove', () => { diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html index 12d2e4a58a..9d876cb9aa 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html +++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.html @@ -367,7 +367,7 @@ limitations under the License. assert.deepEqual(element._computeAddAndRemove(), {add: {}, remove: {}}); element._local['refs/*'].updatedId = 'refs/for/bar'; element._local['refs/*'].modified = true; - const expectedInput = { + let expectedInput = { add: { 'refs/for/bar': { modified: true, @@ -394,6 +394,16 @@ limitations under the License. }, }; assert.deepEqual(element._computeAddAndRemove(), expectedInput); + element._local['refs/*'].deleted = true; + expectedInput = { + add: {}, + remove: { + 'refs/*': { + permissions: {}, + }, + }, + }; + assert.deepEqual(element._computeAddAndRemove(), expectedInput); }); test('_computeAddAndRemove combinations', () => { @@ -500,6 +510,17 @@ limitations under the License. }, }; assert.deepEqual(element._computeAddAndRemove(), expectedInput); + + expectedInput = { + add: {}, + remove: { + 'refs/*': { + permissions: {}, + }, + }, + }; + element._local['refs/*'].deleted = true; + assert.deepEqual(element._computeAddAndRemove(), expectedInput); }); test('_handleSaveForReview', done => {