Filter disabled experiments from settings view
When showing the list of default columns which user can enable/disable in the settings view, filter out columns which are not enabled for the user or are behind an experiment flag. Issue: Bug 13843 Change-Id: Ibc20ced747759dbab50bc1a63488ef6288a5ad0c
This commit is contained in:
@@ -24,7 +24,9 @@ import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mix
|
||||
import {PolymerElement} from '@polymer/polymer/polymer-element';
|
||||
import {htmlTemplate} from './gr-change-table-editor_html';
|
||||
import {ChangeTableMixin} from '../../../mixins/gr-change-table-mixin/gr-change-table-mixin';
|
||||
import {customElement, property} from '@polymer/decorators';
|
||||
import {customElement, property, observe} from '@polymer/decorators';
|
||||
import {ServerInfo} from '../../../types/common';
|
||||
import {appContext} from '../../../services/app-context';
|
||||
|
||||
@customElement('gr-change-table-editor')
|
||||
class GrChangeTableEditor extends ChangeTableMixin(
|
||||
@@ -40,6 +42,27 @@ class GrChangeTableEditor extends ChangeTableMixin(
|
||||
@property({type: Boolean, notify: true})
|
||||
showNumber?: boolean;
|
||||
|
||||
@property({type: Object})
|
||||
serverConfig?: ServerInfo;
|
||||
|
||||
@property({type: Array})
|
||||
defaultColumns?: string[];
|
||||
|
||||
flagsService = appContext.flagsService;
|
||||
|
||||
@observe('serverConfig')
|
||||
_configChanged(config: ServerInfo) {
|
||||
this.defaultColumns = this.getEnabledColumns(
|
||||
this.columnNames,
|
||||
config,
|
||||
this.flagsService.enabledExperiments
|
||||
);
|
||||
if (!this.displayedColumns) return;
|
||||
this.displayedColumns = this.displayedColumns.filter(column =>
|
||||
this.isColumnEnabled(column, config, this.flagsService.enabledExperiments)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of enabled column names from whichever checkboxes are
|
||||
* checked (excluding the number checkbox).
|
||||
|
||||
@@ -61,7 +61,7 @@ export const htmlTemplate = html`
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
<template is="dom-repeat" items="[[columnNames]]">
|
||||
<template is="dom-repeat" items="[[defaultColumns]]">
|
||||
<tr>
|
||||
<td>[[item]]</td>
|
||||
<td
|
||||
|
||||
@@ -41,6 +41,9 @@ suite('gr-change-table-editor tests', () => {
|
||||
|
||||
element.set('displayedColumns', columns);
|
||||
element.showNumber = false;
|
||||
element.serverConfig = {
|
||||
change: {},
|
||||
};
|
||||
flush();
|
||||
});
|
||||
|
||||
@@ -51,13 +54,25 @@ suite('gr-change-table-editor tests', () => {
|
||||
|
||||
// The `+ 1` is for the number column, which isn't included in the change
|
||||
// table behavior's list.
|
||||
assert.equal(rows.length, element.columnNames.length + 1);
|
||||
for (let i = 0; i < columns.length; i++) {
|
||||
assert.equal(rows.length, element.defaultColumns.length + 1);
|
||||
for (let i = 0; i < element.defaultColumns.length; i++) {
|
||||
tds = rows[i + 1].querySelectorAll('td');
|
||||
assert.equal(tds[0].textContent, columns[i]);
|
||||
assert.equal(tds[0].textContent, element.defaultColumns[i]);
|
||||
}
|
||||
});
|
||||
|
||||
test('disabled experiments are hidden', () => {
|
||||
assert.isFalse(element.displayedColumns.includes('Assignee'));
|
||||
element.set('displayedColumns', columns);
|
||||
element.serverConfig = {
|
||||
change: {
|
||||
enable_assignee: true,
|
||||
},
|
||||
};
|
||||
flush();
|
||||
assert.isTrue(element.displayedColumns.includes('Assignee'));
|
||||
});
|
||||
|
||||
test('hide item', () => {
|
||||
const checkbox = element.shadowRoot
|
||||
.querySelector('table tr:nth-child(2) input');
|
||||
@@ -80,6 +95,10 @@ suite('gr-change-table-editor tests', () => {
|
||||
'Branch',
|
||||
'Updated',
|
||||
]);
|
||||
// trigger computation of enabled displayed columns
|
||||
element.serverConfig = {
|
||||
change: {},
|
||||
};
|
||||
flush();
|
||||
const checkbox = element.shadowRoot
|
||||
.querySelector('table tr:nth-child(2) input');
|
||||
@@ -97,12 +116,15 @@ suite('gr-change-table-editor tests', () => {
|
||||
});
|
||||
|
||||
test('_getDisplayedColumns', () => {
|
||||
assert.deepEqual(element._getDisplayedColumns(), columns);
|
||||
const enabledColumns = columns.filter(column => element.isColumnEnabled(
|
||||
column, element.serverConfig, []
|
||||
));
|
||||
assert.deepEqual(element._getDisplayedColumns(), enabledColumns);
|
||||
MockInteractions.tap(
|
||||
element.shadowRoot
|
||||
.querySelector('.checkboxContainer input[name=Assignee]'));
|
||||
.querySelector('.checkboxContainer input[name=Subject]'));
|
||||
assert.deepEqual(element._getDisplayedColumns(),
|
||||
columns.filter(c => c !== 'Assignee'));
|
||||
enabledColumns.filter(c => c !== 'Subject'));
|
||||
});
|
||||
|
||||
test('_handleCheckboxContainerClick relays taps to checkboxes', () => {
|
||||
@@ -140,12 +162,12 @@ suite('gr-change-table-editor tests', () => {
|
||||
|
||||
test('_handleTargetClick', () => {
|
||||
sinon.spy(element, '_handleTargetClick');
|
||||
assert.include(element.displayedColumns, 'Assignee');
|
||||
assert.include(element.displayedColumns, 'Subject');
|
||||
MockInteractions
|
||||
.tap(element.shadowRoot
|
||||
.querySelector('.checkboxContainer input[name=Assignee]'));
|
||||
.querySelector('.checkboxContainer input[name=Subject]'));
|
||||
assert.isTrue(element._handleTargetClick.calledOnce);
|
||||
assert.notInclude(element.displayedColumns, 'Assignee');
|
||||
assert.notInclude(element.displayedColumns, 'Subject');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -340,6 +340,7 @@ export const htmlTemplate = html`
|
||||
<fieldset id="changeTableColumns">
|
||||
<gr-change-table-editor
|
||||
show-number="{{_showNumber}}"
|
||||
server-config="[[_serverConfig]]"
|
||||
displayed-columns="{{_localChangeTableColumns}}"
|
||||
>
|
||||
</gr-change-table-editor>
|
||||
|
||||
Reference in New Issue
Block a user