import { hasValue } from '../empty.util'; import { ResponsiveColumnSizes } from './responsive-column-sizes'; /** * A helper class storing the sizes in which to render a table * It stores a list of columns, which in turn store their own bootstrap column sizes */ export class ResponsiveTableSizes { /** * A list of all the columns and their responsive sizes within this table */ columns: ResponsiveColumnSizes[]; constructor(columns: ResponsiveColumnSizes[]) { this.columns = columns; } /** * Combine the values of multiple columns into a single ResponsiveColumnSizes * Useful when a row element stretches over multiple columns * @param start Index of the first column * @param end Index of the last column (inclusive) */ combineColumns(start: number, end: number): ResponsiveColumnSizes { if (start < end && hasValue(this.columns[start]) && hasValue(this.columns[end])) { let xs = this.columns[start].xs; let sm = this.columns[start].sm; let md = this.columns[start].md; let lg = this.columns[start].lg; let xl = this.columns[start].xl; for (let i = start + 1; i < end + 1; i++) { xs += this.columns[i].xs; sm += this.columns[i].sm; md += this.columns[i].md; lg += this.columns[i].lg; xl += this.columns[i].xl; } return new ResponsiveColumnSizes(xs, sm, md, lg, xl); } return undefined; } }