blob: eb0fa17f5c6850828ee1be3ceec4cf858e3eee39 [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
(function() {
'use strict';
Polymer({
is: 'gr-confirm-rebase-dialog',
/**
* Fired when the confirm button is pressed.
*
* @event confirm
*/
/**
* Fired when the cancel button is pressed.
*
* @event cancel
*/
properties: {
/**
* Weird API usage requires this to be String or Null. Add this so
* the closure compiler doesn't complain.
* @type {?string} */
base: String,
branch: String,
hasParent: Boolean,
rebaseOnCurrent: Boolean,
},
observers: [
'_updateSelectedOption(rebaseOnCurrent, hasParent)',
],
_displayParentOption(rebaseOnCurrent, hasParent) {
return hasParent && rebaseOnCurrent;
},
_displayParentUpToDateMsg(rebaseOnCurrent, hasParent) {
return hasParent && !rebaseOnCurrent;
},
_displayTipOption(rebaseOnCurrent, hasParent) {
return !(!rebaseOnCurrent && !hasParent);
},
_handleConfirmTap(e) {
e.preventDefault();
this.fire('confirm', null, {bubbles: false});
},
_handleCancelTap(e) {
e.preventDefault();
this.fire('cancel', null, {bubbles: false});
},
_handleRebaseOnOther() {
this.$.parentInput.focus();
},
/**
* There is a subtle but important difference between setting the base to an
* empty string and omitting it entirely from the payload. An empty string
* implies that the parent should be cleared and the change should be
* rebased on top of the target branch. Leaving out the base implies that it
* should be rebased on top of its current parent.
*/
_handleRebaseOnTip() {
this.base = '';
},
_handleRebaseOnParent() {
this.base = null;
},
_handleEnterChangeNumberTap() {
this.$.rebaseOnOtherInput.checked = true;
},
/**
* Sets the default radio button based on the state of the app and
* the corresponding value to be submitted.
*/
_updateSelectedOption(rebaseOnCurrent, hasParent) {
if (this._displayParentOption(rebaseOnCurrent, hasParent)) {
this.$.rebaseOnParentInput.checked = true;
this._handleRebaseOnParent();
} else if (this._displayTipOption(rebaseOnCurrent, hasParent)) {
this.$.rebaseOnTipInput.checked = true;
this._handleRebaseOnTip();
} else {
this.$.rebaseOnOtherInput.checked = true;
this._handleRebaseOnOther();
}
},
});
})();