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 {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).
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user