blob: e3b9f201547273ed7102aaa6ee05da8a856f0c49 [file] [log] [blame]
/**
* @license
* 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.
*/
import {dedupingMixin} from '@polymer/polymer/lib/utils/mixin.js';
/**
* @polymer
* @mixinFunction
*/
export const ChangeTableMixin = dedupingMixin(superClass => {
/**
* @polymer
* @mixinClass
*/
class Mixin extends superClass {
static get properties() {
return {
columnNames: {
type: Array,
value: [
'Subject',
'Status',
'Owner',
'Assignee',
'Reviewers',
'Comments',
'Repo',
'Branch',
'Updated',
'Size',
],
readOnly: true,
},
};
}
/**
* Returns the complement to the given column array
*
* @param {Array} columns
* @return {!Array}
*/
getComplementColumns(columns) {
return this.columnNames.filter(column => !columns.includes(column));
}
/**
* @param {string} columnToCheck
* @param {!Array} columnsToDisplay
* @return {boolean}
*/
isColumnHidden(columnToCheck, columnsToDisplay) {
if ([columnsToDisplay, columnToCheck].includes(undefined)) {
return false;
}
return !columnsToDisplay.includes(columnToCheck);
}
/**
* Is the column disabled by a server config or experiment? For example the
* assignee feature might be disabled and thus the corresponding column is
* also disabled.
*
* @param {string} column
* @param {Object} config
* @param {!Array<string>} experiments
* @return {boolean}
*/
isColumnEnabled(column, config, experiments) {
if (!config || !config.change) return true;
if (column === 'Assignee') return !!config.change.enable_assignee;
if (column === 'Comments') return experiments.includes('comments-column');
if (column === 'Reviewers') return !!config.change.enable_attention_set;
return true;
}
/**
* @param {!Array<string>} columns
* @param {Object} config
* @param {!Array<string>} experiments
* @return {!Array<string>} enabled columns, see isColumnEnabled().
*/
getEnabledColumns(columns, config, experiments) {
return columns.filter(
col => this.isColumnEnabled(col, config, experiments));
}
/**
* The Project column was renamed to Repo, but some users may have
* preferences that use its old name. If that column is found, rename it
* before use.
*
* @param {!Array<string>} columns
* @return {!Array<string>} If the column was renamed, returns a new array
* with the corrected name. Otherwise, it returns the original param.
*/
getVisibleColumns(columns) {
const projectIndex = columns.indexOf('Project');
if (projectIndex === -1) { return columns; }
const newColumns = columns.slice(0);
newColumns[projectIndex] = 'Repo';
return newColumns;
}
}
return Mixin;
});