improvement(list-widget): support filtering entries in list widget (#1578)

This commit is contained in:
Jason Butz
2018-10-23 21:51:11 -04:00
committed by Shawn Erquhart
parent deaac3d78b
commit cdcd51157f
4 changed files with 128 additions and 4 deletions

View File

@ -0,0 +1,111 @@
import { resolveBackend } from '../backend';
import registry from 'Lib/registry';
jest.mock('Lib/registry');
const configWrapper = inputObject => ({
get: prop => inputObject[prop],
});
describe('Backend', () => {
describe('filterEntries', () => {
let backend;
beforeEach(() => {
registry.getBackend.mockReturnValue({
init: jest.fn(),
});
backend = resolveBackend({
getIn: jest.fn().mockReturnValue('git-gateway'),
});
});
it('filters string values', () => {
const result = backend.filterEntries(
{
entries: [
{
data: {
testField: 'testValue',
},
},
{
data: {
testField: 'testValue2',
},
},
],
},
configWrapper({ field: 'testField', value: 'testValue' }),
);
expect(result.length).toBe(1);
});
it('filters number values', () => {
const result = backend.filterEntries(
{
entries: [
{
data: {
testField: 42,
},
},
{
data: {
testField: 5,
},
},
],
},
configWrapper({ field: 'testField', value: 42 }),
);
expect(result.length).toBe(1);
});
it('filters boolean values', () => {
const result = backend.filterEntries(
{
entries: [
{
data: {
testField: false,
},
},
{
data: {
testField: true,
},
},
],
},
configWrapper({ field: 'testField', value: false }),
);
expect(result.length).toBe(1);
});
it('filters list values', () => {
const result = backend.filterEntries(
{
entries: [
{
data: {
testField: ['valueOne', 'valueTwo', 'testValue'],
},
},
{
data: {
testField: ['valueThree'],
},
},
],
},
configWrapper({ field: 'testField', value: 'testValue' }),
);
expect(result.length).toBe(1);
});
});
});

View File

@ -495,9 +495,13 @@ class Backend {
}
filterEntries(collection, filterRule) {
return collection.entries.filter(
entry => entry.data[filterRule.get('field')] === filterRule.get('value'),
);
return collection.entries.filter(entry => {
const fieldValue = entry.data[filterRule.get('field')];
if (Array.isArray(fieldValue)) {
return fieldValue.includes(filterRule.get('value'));
}
return fieldValue === filterRule.get('value');
});
}
}