/** * @license * Copyright (C) 2018 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-change-requirements', properties: { /** @type {?} */ change: Object, account: Object, mutable: Boolean, _requirements: { type: Array, computed: '_computeRequirements(change)', }, _requiredLabels: { type: Array, value: () => [], }, _optionalLabels: { type: Array, value: () => [], }, _showWip: { type: Boolean, computed: '_computeShowWip(change)', }, _showOptionalLabels: { type: Boolean, value: true, }, }, behaviors: [ Gerrit.RESTClientBehavior, ], observers: [ '_computeLabels(change.labels.*)', ], _computeShowWip(change) { return change.work_in_progress; }, _computeRequirements(change) { const _requirements = []; if (change.requirements) { for (const requirement of change.requirements) { requirement.satisfied = requirement.status === 'OK'; requirement.style = this._computeRequirementClass(requirement); _requirements.push(requirement); } } if (change.work_in_progress) { _requirements.push({ fallback_text: 'Work-in-progress', tooltip: 'Change must not be in \'Work in Progress\' state.', }); } return _requirements; }, _computeRequirementClass(requirementStatus) { return requirementStatus ? 'approved' : ''; }, _computeRequirementIcon(requirementStatus) { return requirementStatus ? 'gr-icons:check' : 'gr-icons:hourglass'; }, _computeLabels(labelsRecord) { const labels = labelsRecord.base; this._optionalLabels = []; this._requiredLabels = []; for (const label in labels) { if (!labels.hasOwnProperty(label)) { continue; } const labelInfo = labels[label]; const icon = this._computeLabelIcon(labelInfo); const style = this._computeLabelClass(labelInfo); const path = labelInfo.optional ? '_optionalLabels' : '_requiredLabels'; this.push(path, {label, icon, style, labelInfo}); } }, /** * @param {Object} labelInfo * @return {string} The icon name, or undefined if no icon should * be used. */ _computeLabelIcon(labelInfo) { if (labelInfo.approved) { return 'gr-icons:check'; } if (labelInfo.rejected) { return 'gr-icons:close'; } return 'gr-icons:hourglass'; }, /** * @param {Object} labelInfo */ _computeLabelClass(labelInfo) { if (labelInfo.approved) { return 'approved'; } if (labelInfo.rejected) { return 'rejected'; } return ''; }, _computeShowOptional(optionalFieldsRecord) { return optionalFieldsRecord.base.length ? '' : 'hidden'; }, _computeLabelValue(value) { return (value > 0 ? '+' : '') + value; }, _computeShowHideIcon(showOptionalLabels) { return showOptionalLabels ? 'gr-icons:expand-less' : 'gr-icons:expand-more'; }, _computeSectionClass(show) { return show ? '' : 'hidden'; }, _handleShowHide(e) { this._showOptionalLabels = !this._showOptionalLabels; }, }); })();