expect(called).toBeTruthy();
});
});
+
+ describe('hide empty items', () => {
+ beforeEach(() => {
+ component.data = {
+ string: '',
+ array: [],
+ object: {},
+ emptyObject: {
+ string: '',
+ array: [],
+ object: {}
+ },
+ someNumber: 0,
+ someDifferentNumber: 1,
+ someArray: [0, 1],
+ someString: '0',
+ someObject: {
+ empty: {},
+ something: 0.1
+ }
+ };
+ component.renderObjects = true;
+ });
+
+ it('should show all items as default', () => {
+ expect(component.hideEmpty).toBe(false);
+ component.ngOnInit();
+ expect(component.tableData).toEqual([
+ { key: 'array', value: '' },
+ { key: 'emptyObject array', value: '' },
+ { key: 'emptyObject object', value: '' },
+ { key: 'emptyObject string', value: '' },
+ { key: 'object', value: '' },
+ { key: 'someArray', value: '0, 1' },
+ { key: 'someDifferentNumber', value: 1 },
+ { key: 'someNumber', value: 0 },
+ { key: 'someObject empty', value: '' },
+ { key: 'someObject something', value: 0.1 },
+ { key: 'someString', value: '0' },
+ { key: 'string', value: '' }
+ ]);
+ });
+
+ it('should hide all empty items', () => {
+ component.hideEmpty = true;
+ component.ngOnInit();
+ expect(component.tableData).toEqual([
+ { key: 'someArray', value: '0, 1' },
+ { key: 'someDifferentNumber', value: 1 },
+ { key: 'someNumber', value: 0 },
+ { key: 'someObject something', value: 0.1 },
+ { key: 'someString', value: '0' }
+ ]);
+ });
+ });
});
import { CdTableColumn } from '../../models/cd-table-column';
import { TableComponent } from '../table/table.component';
+class Item {
+ key: string;
+ value: any;
+}
+
/**
* Display the given data in a 2 column data table. The left column
* shows the 'key' attribute, the right column the 'value' attribute.
// Only used if objects are rendered
@Input()
appendParentKey = true;
+ @Input()
+ hideEmpty = false;
columns: Array<CdTableColumn> = [];
- tableData: {
- key: string;
- value: any;
- }[];
+ tableData: Item[];
/**
* The function that will be called to update the input data.
this.tableData = this._makePairs(this.data);
}
- _makePairs(data: any) {
+ _makePairs(data: any): Item[] {
let temp = [];
if (!data) {
return; // Wait for data
return this.renderObjects ? this._insertFlattenObjects(temp) : temp;
}
- _makePairsFromArray(data: any[]) {
+ _makePairsFromArray(data: any[]): Item[] {
let temp = [];
const first = data[0];
if (_.isArray(first)) {
return temp;
}
- _makePairsFromObject(data: object) {
+ _makePairsFromObject(data: object): Item[] {
return Object.keys(data).map((k) => ({
key: k,
value: data[k]
return temp;
}
- _convertValue(v: any) {
+ _convertValue(v: Item): Item {
if (_.isArray(v.value)) {
v.value = v.value.map((item) => (_.isObject(item) ? JSON.stringify(item) : item)).join(', ');
- } else if (_.isObject(v.value) && !this.renderObjects) {
+ }
+ const isEmpty = _.isEmpty(v.value) && !_.isNumber(v.value);
+ if ((this.hideEmpty && isEmpty) || (_.isObject(v.value) && !this.renderObjects)) {
return;
+ } else if (isEmpty && !this.hideEmpty && v.value !== '') {
+ v.value = '';
}
return v;
}