UNPKG

angular-pivot-table

Version:

Angular Pivot Table is a simple pivot table built in Angular. If data needs to be grouped by fields then check out this <a href="https://github.com/debabratapatra/ngtreegrid" target="_blank">ngtreegrid</a> Package. If header needs to be fixed/freezed and

65 lines 8.6 kB
export class Store { constructor() { this.processed_data = []; this.processed_headers = []; } getRawData() { return this.raw_data; } setRawData(raw_data) { this.raw_data = raw_data; } getProcessedData() { return this.processed_data; } setProcessedData(processed_data) { this.processed_data = processed_data; } getProcessedHeaders() { return this.processed_headers; } processData(source, configs) { this.setRawData(source); const rows = this.findUnique(this.pluck(source, configs.rows)); const columns = this.findUnique(this.pluck(source, configs.columns)); this.processed_headers = [...columns]; for (let i = 0; i < rows.length; i++) { const row = rows[i]; const processed_row = [row]; let row_count = 0; for (let j = 0; j < columns.length; j++) { const column = columns[j]; let count = 0; for (let k = 0; k < source.length; k++) { const data = source[k]; if (data[configs.rows] == row && data[configs.columns] == column) { count++; } } processed_row.push(count); row_count += count; } processed_row.push(row_count); this.processed_data.push(processed_row); } const summary_row = ['Total']; for (let index = 1; index < this.processed_data[0].length; index++) { this.addSummaryColumn(summary_row, index); } this.processed_data.push(summary_row); } addSummaryColumn(summary_row, index) { summary_row.push(this.processed_data.map(data => data[index]).reduce((a, b) => a + b, 0)); } findUnique(a) { return a.filter(function (item, pos) { return a.indexOf(item) == pos; }); } pluck(array, key) { return array.map(function (obj) { return obj[key]; }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXBpdm90LXRhYmxlL3NyYy9saWIvc3RvcmUvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLEtBQUs7SUEwQmQ7UUF6QkEsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFFM0Isc0JBQWlCLEdBQVUsRUFBRSxDQUFDO0lBdUJkLENBQUM7SUFwQmpCLFVBQVU7UUFDTixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFRO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsY0FBYztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUlELFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBZ0I7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUV0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUVkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXZCLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUU7d0JBQzdELEtBQUssRUFBRSxDQUFDO3FCQUNYO2lCQUNKO2dCQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLFNBQVMsSUFBSSxLQUFLLENBQUM7YUFDdEI7WUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsS0FBSztRQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBQztRQUNSLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFTLElBQUksRUFBRSxHQUFHO1lBQzlCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHO1FBQ1osT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVMsR0FBRztZQUMzQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQ29uZmlncyB9IGZyb20gJy4uL21vZGVscy9Db25maWdzLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFN0b3JlIHtcbiAgICBwcm9jZXNzZWRfZGF0YTogYW55W10gPSBbXTtcbiAgICByYXdfZGF0YTogYW55W107XG4gICAgcHJvY2Vzc2VkX2hlYWRlcnM6IGFueVtdID0gW107XG4gICAgY29uZmlnczogQ29uZmlncztcblxuICAgIGdldFJhd0RhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhd19kYXRhO1xuICAgIH1cblxuICAgIHNldFJhd0RhdGEocmF3X2RhdGEpIHtcbiAgICAgICAgdGhpcy5yYXdfZGF0YSA9IHJhd19kYXRhO1xuICAgIH1cblxuICAgIGdldFByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZF9kYXRhO1xuICAgIH1cblxuICAgIHNldFByb2Nlc3NlZERhdGEocHJvY2Vzc2VkX2RhdGEpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRfZGF0YSA9IHByb2Nlc3NlZF9kYXRhO1xuICAgIH1cblxuICAgIGdldFByb2Nlc3NlZEhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZF9oZWFkZXJzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBwcm9jZXNzRGF0YShzb3VyY2UsIGNvbmZpZ3M6IENvbmZpZ3MpIHtcbiAgICAgICAgdGhpcy5zZXRSYXdEYXRhKHNvdXJjZSk7XG5cbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuZmluZFVuaXF1ZSh0aGlzLnBsdWNrKHNvdXJjZSwgY29uZmlncy5yb3dzKSk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmZpbmRVbmlxdWUodGhpcy5wbHVjayhzb3VyY2UsIGNvbmZpZ3MuY29sdW1ucykpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkX2hlYWRlcnMgPSBbLi4uY29sdW1uc107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkX3JvdyA9IFtyb3ddO1xuICAgICAgICAgICAgbGV0IHJvd19jb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2pdO1xuICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBzb3VyY2UubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHNvdXJjZVtrXTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFbY29uZmlncy5yb3dzXSA9PSByb3cgJiYgZGF0YVtjb25maWdzLmNvbHVtbnNdID09IGNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRfcm93LnB1c2goY291bnQpO1xuICAgICAgICAgICAgICAgIHJvd19jb3VudCArPSBjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2Nlc3NlZF9yb3cucHVzaChyb3dfY291bnQpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRfZGF0YS5wdXNoKHByb2Nlc3NlZF9yb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VtbWFyeV9yb3cgPSBbJ1RvdGFsJ107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCB0aGlzLnByb2Nlc3NlZF9kYXRhWzBdLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRTdW1tYXJ5Q29sdW1uKHN1bW1hcnlfcm93LCBpbmRleCk7ICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzZWRfZGF0YS5wdXNoKHN1bW1hcnlfcm93KTtcbiAgICB9XG5cbiAgICBhZGRTdW1tYXJ5Q29sdW1uKHN1bW1hcnlfcm93LCBpbmRleCkge1xuICAgICAgICBzdW1tYXJ5X3Jvdy5wdXNoKHRoaXMucHJvY2Vzc2VkX2RhdGEubWFwKGRhdGEgPT4gZGF0YVtpbmRleF0pLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApKTtcbiAgICB9XG5cbiAgICBmaW5kVW5pcXVlKGEpIHtcbiAgICAgICAgcmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xuICAgICAgICAgICAgcmV0dXJuIGEuaW5kZXhPZihpdGVtKSA9PSBwb3M7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBsdWNrKGFycmF5LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICByZXR1cm4gb2JqW2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIl19