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:
Dhruv Srivastava
2020-12-23 11:44:13 +01:00
parent e92afa5fa8
commit e77b66c79c
4 changed files with 57 additions and 11 deletions

View File

@@ -24,7 +24,9 @@ import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mix
import {PolymerElement} from '@polymer/polymer/polymer-element'; import {PolymerElement} from '@polymer/polymer/polymer-element';
import {htmlTemplate} from './gr-change-table-editor_html'; import {htmlTemplate} from './gr-change-table-editor_html';
import {ChangeTableMixin} from '../../../mixins/gr-change-table-mixin/gr-change-table-mixin'; 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') @customElement('gr-change-table-editor')
class GrChangeTableEditor extends ChangeTableMixin( class GrChangeTableEditor extends ChangeTableMixin(
@@ -40,6 +42,27 @@ class GrChangeTableEditor extends ChangeTableMixin(
@property({type: Boolean, notify: true}) @property({type: Boolean, notify: true})
showNumber?: boolean; 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 * Get the list of enabled column names from whichever checkboxes are
* checked (excluding the number checkbox). * checked (excluding the number checkbox).

View File

@@ -61,7 +61,7 @@ export const htmlTemplate = html`
/> />
</td> </td>
</tr> </tr>
<template is="dom-repeat" items="[[columnNames]]"> <template is="dom-repeat" items="[[defaultColumns]]">
<tr> <tr>
<td>[[item]]</td> <td>[[item]]</td>
<td <td

View File

@@ -41,6 +41,9 @@ suite('gr-change-table-editor tests', () => {
element.set('displayedColumns', columns); element.set('displayedColumns', columns);
element.showNumber = false; element.showNumber = false;
element.serverConfig = {
change: {},
};
flush(); 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 // The `+ 1` is for the number column, which isn't included in the change
// table behavior's list. // table behavior's list.
assert.equal(rows.length, element.columnNames.length + 1); assert.equal(rows.length, element.defaultColumns.length + 1);
for (let i = 0; i < columns.length; i++) { for (let i = 0; i < element.defaultColumns.length; i++) {
tds = rows[i + 1].querySelectorAll('td'); 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', () => { test('hide item', () => {
const checkbox = element.shadowRoot const checkbox = element.shadowRoot
.querySelector('table tr:nth-child(2) input'); .querySelector('table tr:nth-child(2) input');
@@ -80,6 +95,10 @@ suite('gr-change-table-editor tests', () => {
'Branch', 'Branch',
'Updated', 'Updated',
]); ]);
// trigger computation of enabled displayed columns
element.serverConfig = {
change: {},
};
flush(); flush();
const checkbox = element.shadowRoot const checkbox = element.shadowRoot
.querySelector('table tr:nth-child(2) input'); .querySelector('table tr:nth-child(2) input');
@@ -97,12 +116,15 @@ suite('gr-change-table-editor tests', () => {
}); });
test('_getDisplayedColumns', () => { test('_getDisplayedColumns', () => {
assert.deepEqual(element._getDisplayedColumns(), columns); const enabledColumns = columns.filter(column => element.isColumnEnabled(
column, element.serverConfig, []
));
assert.deepEqual(element._getDisplayedColumns(), enabledColumns);
MockInteractions.tap( MockInteractions.tap(
element.shadowRoot element.shadowRoot
.querySelector('.checkboxContainer input[name=Assignee]')); .querySelector('.checkboxContainer input[name=Subject]'));
assert.deepEqual(element._getDisplayedColumns(), assert.deepEqual(element._getDisplayedColumns(),
columns.filter(c => c !== 'Assignee')); enabledColumns.filter(c => c !== 'Subject'));
}); });
test('_handleCheckboxContainerClick relays taps to checkboxes', () => { test('_handleCheckboxContainerClick relays taps to checkboxes', () => {
@@ -140,12 +162,12 @@ suite('gr-change-table-editor tests', () => {
test('_handleTargetClick', () => { test('_handleTargetClick', () => {
sinon.spy(element, '_handleTargetClick'); sinon.spy(element, '_handleTargetClick');
assert.include(element.displayedColumns, 'Assignee'); assert.include(element.displayedColumns, 'Subject');
MockInteractions MockInteractions
.tap(element.shadowRoot .tap(element.shadowRoot
.querySelector('.checkboxContainer input[name=Assignee]')); .querySelector('.checkboxContainer input[name=Subject]'));
assert.isTrue(element._handleTargetClick.calledOnce); assert.isTrue(element._handleTargetClick.calledOnce);
assert.notInclude(element.displayedColumns, 'Assignee'); assert.notInclude(element.displayedColumns, 'Subject');
}); });
}); });

View File

@@ -340,6 +340,7 @@ export const htmlTemplate = html`
<fieldset id="changeTableColumns"> <fieldset id="changeTableColumns">
<gr-change-table-editor <gr-change-table-editor
show-number="{{_showNumber}}" show-number="{{_showNumber}}"
server-config="[[_serverConfig]]"
displayed-columns="{{_localChangeTableColumns}}" displayed-columns="{{_localChangeTableColumns}}"
> >
</gr-change-table-editor> </gr-change-table-editor>