diff --git a/lib/quick-pivot.js b/lib/quick-pivot.js index a9ecc9c..aada30d 100644 --- a/lib/quick-pivot.js +++ b/lib/quick-pivot.js @@ -105,6 +105,14 @@ return /******/ (function(modules) { // webpackBootstrap delete this.collapsedRows[this.data.table[rowNum].row]; return this; } + }, { + key: 'toggle', + value: function toggle(rowNum) { + if (rowNum in this.collapsedRows) { + return this.expand(rowNum); + } + return this.collapse(rowNum); + } }, { key: 'getData', value: function getData(rowNum) { diff --git a/lib/quick-pivot.js.map b/lib/quick-pivot.js.map index 40147f3..f2ba1c4 100644 --- a/lib/quick-pivot.js.map +++ b/lib/quick-pivot.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 68a5730efd7b3b6acae9","webpack:///./src/index.js","webpack:///./src/logic.js","webpack:///./src/progressiveDiscovery.js"],"names":["Pivot","data","rows","cols","agg","type","header","originalData","collapsedRows","rowNum","returnedData","table","row","collapsed","uncollapsed","rawData","fixDataFormat","groupByCategory","groupByCategories","createColumnHeaders","accumulator","checkPivotCategories","tableCreator","Array","isArray","length","reduce","dataCol","i","arr","push","acc","curr","index","groupBy","category","groups","filter","ele","groupCopy","Object","assign","groupedData","shift","groupedDataKeys","keys","children","map","el","firstColumn","columnHeaders","mapToHeader","mapPos","columnHeaderRecursion","pos","headerMap","currKeys","reqLength","currLength","concat","fill","accCat","accType","accValue","array","Number","actualCats","selectedCats","errMessage","forEach","indexOf","selectedCat","Error","join","accCatOrCB","accTypeOrInitVal","rowHeader","columnData","headerLength","formattedColumnHeaders","value","depth","dataRows","prevKey","rowRecurse","rowGroups","rowHeaders","key","recursedData","recurseThroughMap","dataPos","datum","rawDataDatum","innerKey","rowHeaderValue","dataGroups","slice","collapse","expand","selectedRow","count","currDepth","currData","splice"],"mappings":"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","file":"quick-pivot.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"quick-pivot\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"quick-pivot\"] = factory();\n\telse\n\t\troot[\"quick-pivot\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 68a5730efd7b3b6acae9\n **/","import { tableCreator } from './logic';\nimport { collapse, expand } from './progressiveDiscovery.js';\n\nexport default class Pivot {\n\n constructor(data, rows, cols, agg, type, header) {\n if (!data) {\n this.originalData = {};\n }else {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n }\n\n this.data = this.originalData;\n this.collapsedRows = {};\n }\n\n update(data, rows, cols, agg, type, header) {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n this.data = this.originalData;\n return this;\n }\n\n collapse(rowNum) {\n let returnedData = collapse(rowNum, this.data);\n\n this.collapsedRows[this.data.table[rowNum].row] =\n returnedData.collapsed;\n this.data = returnedData.uncollapsed;\n return this;\n }\n\n expand(rowNum) {\n this.data = expand(\n rowNum,\n this.data,\n this.collapsedRows[this.data.table[rowNum].row],\n );\n delete this.collapsedRows[this.data.table[rowNum].row];\n return this;\n }\n\n getData(rowNum) {\n if (!this.data.table[rowNum]) return null;\n if (this.collapsedRows[this.data.table[rowNum].row]) {\n return this.collapsedRows[this.data.table[rowNum].row].rawData;\n }\n\n return this.originalData.rawData[this.data.table[rowNum].row];\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/index.js\n **/","'use strict';\n\nexport function fixDataFormat(data) {\n if (!Array.isArray(data) || !data.length) return [];\n else if (typeof data[0] === 'object' && !Array.isArray(data[0])) return data;\n return data.reduce((dataCol, row, i, arr) => {\n if (i !== 0) {\n if (Array.isArray(row)) {\n dataCol.push(row.reduce((acc, curr, index) =>{\n acc[arr[0][index]] = curr;\n return acc;\n }, {}));\n } else {\n dataCol.push({[arr[0]]: row});\n }\n }\n return dataCol;\n }, []);\n}\n\nexport function groupByCategory(data, groupBy) {\n return data.reduce((acc, curr) =>{\n var category = curr[groupBy];\n\n if (!acc[category]) acc[category] = [];\n acc[category].push(curr);\n return acc;\n }, {});\n}\n\nexport function groupByCategories(data, groups = [], acc = {}) {\n if (!data.length) return [];\n\n groups = groups.filter(ele =>{\n return ele in data[0];\n });\n\n if (!groups.length) return data;\n\n var groupCopy = Object.assign([], groups);\n var groupedData = groupByCategory(data, groupCopy.shift());\n var groupedDataKeys = Object.keys(groupedData);\n var children = groupedDataKeys.map(el => {\n return groupedData[el];\n });\n\n for (let i = 0; i < children.length; i++) {\n acc[groupedDataKeys[i]] = groupCopy.length ? {} : [];\n acc[groupedDataKeys[i]] = groupByCategories(\n children[i], groupCopy, acc[groupedDataKeys[i]]);\n }\n\n return acc;\n}\n\nexport function createColumnHeaders(data, cols = [], firstColumn = '') {\n if (!cols.length) return {columnHeaders: [firstColumn], mapToHeader: 1};\n\n var groupedData = groupByCategories(data, cols);\n var columnHeaders = [];\n var mapToHeader = Object.assign({}, groupedData);\n var mapPos = 1;\n\n (function columnHeaderRecursion(data, pos = 0, headerMap) {\n if (typeof data !== 'object' || Array.isArray(data)) return 1;\n\n var currKeys = Object.keys(data);\n var reqLength = 0;\n\n for (let i = 0; i < currKeys.length; i++) {\n let currLength = columnHeaderRecursion(\n data[currKeys[i]], pos + 1, headerMap[currKeys[i]]);\n\n if (Array.isArray(data[currKeys[i]])) {\n headerMap[currKeys[i]] = mapPos;\n mapPos += 1;\n }\n reqLength += currLength;\n columnHeaders[pos] = !columnHeaders[pos] ?\n [firstColumn].concat(Array(currLength).fill(currKeys[i])) :\n columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));\n }\n return reqLength;\n\n })(groupedData, 0, mapToHeader);\n\n return {\n columnHeaders,\n mapToHeader,\n };\n}\n\n/**\n * accumulator has two different signatures\n * 1. it takes an array of objects, an accumulation category as a string\n * (like age), and supported accumulation type as a string (like count)\n * 2. it takes an array of objects, a callback function (which operates\n * the same as reduce), and an initial value\n */\nexport function accumulator(arr, accCat, accType, accValue) {\n if (!accCat && typeof accType !== 'function') accType = 'count';\n else if (typeof accCat === 'function') {\n accValue = accType || 0;\n accType = accCat;\n }\n\n return arr.reduce((acc, curr, index, array) => {\n if (typeof accType === 'function') {\n return accType(acc, typeof accCat === 'string' ? curr[accCat] :\n curr, index, array);\n }\n switch (accType) {\n case ('sum'): {\n acc += Number(curr[accCat]);\n return acc;\n }\n\n case ('count'): {\n acc += 1;\n return acc;\n }\n\n default: {\n acc += 1;\n return acc;\n }\n }\n }, accValue || 0);\n}\n\nexport function checkPivotCategories(actualCats, selectedCats) {\n var errMessage = [];\n\n selectedCats.forEach(selectedCat =>{\n if (actualCats.indexOf(selectedCat) === -1) errMessage.push(selectedCat);\n });\n if (errMessage.length) {\n throw new Error(\n `Check that these selected pivot categories exist: ${errMessage.join(\n ',')}`);\n }\n}\n\nexport function tableCreator(\n data, rows = [], cols = [], accCatOrCB, accTypeOrInitVal, rowHeader) {\n data = fixDataFormat(data);\n if (!data.length) return [];\n checkPivotCategories(Object.keys(data[0]), rows);\n checkPivotCategories(Object.keys(data[0]), cols);\n\n if (typeof rowHeader === 'undefined') {\n rowHeader = typeof accCatOrCB !== 'function' ?\n `${accTypeOrInitVal} ${accCatOrCB}` :\n 'Custom Agg';\n }\n\n const columnData = createColumnHeaders(data, cols, rowHeader);\n const columnHeaders = Array.isArray(columnData.columnHeaders[0]) ?\n columnData.columnHeaders :\n [columnData.columnHeaders.concat(rowHeader)];\n const mapToHeader = columnData.mapToHeader;\n const headerLength = columnHeaders[0].length;\n const formattedColumnHeaders = columnHeaders.map((value, depth) => {\n return {\n value,\n depth,\n type: 'colHeader',\n row: depth,\n };\n });\n\n let dataRows = [];\n let rawData = [];\n let prevKey = '';\n\n function rowRecurse(rowGroups, depth, rowHeaders = []) {\n for (let key in rowGroups) {\n if (Array.isArray(rowGroups[key])) {\n const recursedData = groupByCategories(rowGroups[key], cols);\n\n prevKey = '';\n\n (function recurseThroughMap(dataPos, map) {\n if (Array.isArray(dataPos)) {\n if (key === prevKey) {\n let datum = dataRows[dataRows.length - 1].value;\n\n datum[map] = accumulator(dataPos, accCatOrCB, accTypeOrInitVal);\n dataRows[dataRows.length - 1].value = datum;\n\n let rawDataDatum = rawData[rawData.length - 1].value;\n\n rawDataDatum[map] = dataPos;\n rawData[rawData.length - 1].value = rawDataDatum;\n } else {\n prevKey = key;\n let datum = [key].concat(\n Array(map - 1).fill(''),\n accumulator(dataPos, accCatOrCB, accTypeOrInitVal),\n Array(headerLength - (map + 1)).fill(''));\n let rawDataDatum = [key].concat(\n Array(map - 1).fill(''),\n [dataPos],\n Array(headerLength - (map + 1)).fill(''));\n\n rawData.push({\n value: rawDataDatum,\n type: 'data',\n depth,\n });\n dataRows.push({\n value: datum,\n type: 'data',\n depth,\n row: dataRows.length + formattedColumnHeaders.length,\n });\n }\n } else {\n for (let innerKey in dataPos) {\n recurseThroughMap(dataPos[innerKey], map[innerKey]);\n }\n }\n })(recursedData, mapToHeader || 1);\n\n } else {\n const rowHeaderValue = rowHeaders.shift();\n const value = rowHeaderValue ?\n rowHeaderValue.value :\n [key].concat(Array(headerLength - 1).fill(''));\n\n dataRows.push({\n value,\n depth,\n type: 'rowHeader',\n row: dataRows.length + formattedColumnHeaders.length,\n });\n rawData.push({\n value,\n depth,\n type: 'rowHeader',\n });\n\n rowRecurse(rowGroups[key], depth + 1, rowHeaders);\n }\n }\n }\n\n let dataGroups = [];\n\n if (rows.length > 0) {\n for (let i = 0; i < rows.length; i++) {\n // possible memoization opportunity\n rowRecurse(groupByCategories(data, rows.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < rows.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else if (cols.length > 0) {\n for (let i = 0; i < cols.length; i++) {\n rowRecurse(groupByCategories(data, cols.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < cols.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else {\n dataRows.push({\n value: [rowHeader, accumulator(data, accCatOrCB, accTypeOrInitVal)],\n type: 'data',\n row: 1,\n depth: 0,\n });\n rawData = data.map((value) => {\n return {\n value,\n type: 0,\n row: 1,\n depth: 0,\n };\n });\n }\n\n return {\n table: formattedColumnHeaders.concat(dataRows),\n rawData: formattedColumnHeaders.concat(rawData),\n };\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/logic.js\n **/","'use strict';\n\nexport function collapse(rowNum, data) {\n const selectedRow = data.table[rowNum];\n const {type, depth} = selectedRow;\n\n if (type !== 'rowHeader' && type !== 'colHeader') {\n return {\n uncollapsed: data,\n };\n }\n\n let count = rowNum + 1;\n let currDepth = data.table[count].depth;\n let uncollapsed = {\n table: data.table.slice(0, count),\n rawData: data.rawData.slice(0, count),\n };\n\n let collapsed = {\n table: [],\n rawData: [],\n };\n\n while (count < data.table.length && currDepth > depth) {\n collapsed.rawData.push(data.rawData[count]);\n collapsed.table.push(data.table[count]);\n count += 1;\n if (count < data.table.length) currDepth = data.table[count].depth;\n }\n\n uncollapsed.table = uncollapsed.table.concat(data.table.slice(count));\n uncollapsed.rawData = uncollapsed.rawData.concat(data.rawData.slice(count));\n\n return {\n uncollapsed,\n collapsed,\n };\n}\n\nexport function expand(rowNum, currData, collapsedRows) {\n if (!collapsedRows) return currData;\n currData.table.splice(rowNum + 1, 0, ...collapsedRows.table);\n currData.rawData.splice(rowNum + 1, 0, ...collapsedRows.rawData);\n return currData;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/progressiveDiscovery.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap eadbf50cccbf7efb0a07","webpack:///./src/index.js","webpack:///./src/logic.js","webpack:///./src/progressiveDiscovery.js"],"names":["Pivot","data","rows","cols","agg","type","header","originalData","collapsedRows","rowNum","returnedData","table","row","collapsed","uncollapsed","expand","collapse","rawData","fixDataFormat","groupByCategory","groupByCategories","createColumnHeaders","accumulator","checkPivotCategories","tableCreator","Array","isArray","length","reduce","dataCol","i","arr","push","acc","curr","index","groupBy","category","groups","filter","ele","groupCopy","Object","assign","groupedData","shift","groupedDataKeys","keys","children","map","el","firstColumn","columnHeaders","mapToHeader","mapPos","columnHeaderRecursion","pos","headerMap","currKeys","reqLength","currLength","concat","fill","accCat","accType","accValue","array","Number","actualCats","selectedCats","errMessage","forEach","indexOf","selectedCat","Error","join","accCatOrCB","accTypeOrInitVal","rowHeader","columnData","headerLength","formattedColumnHeaders","value","depth","dataRows","prevKey","rowRecurse","rowGroups","rowHeaders","key","recursedData","recurseThroughMap","dataPos","datum","rawDataDatum","innerKey","rowHeaderValue","dataGroups","slice","selectedRow","count","currDepth","currData","splice"],"mappings":"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","file":"quick-pivot.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"quick-pivot\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"quick-pivot\"] = factory();\n\telse\n\t\troot[\"quick-pivot\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap eadbf50cccbf7efb0a07\n **/","import { tableCreator } from './logic';\nimport { collapse, expand } from './progressiveDiscovery.js';\n\nexport default class Pivot {\n\n constructor(data, rows, cols, agg, type, header) {\n if (!data) {\n this.originalData = {};\n }else {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n }\n\n this.data = this.originalData;\n this.collapsedRows = {};\n }\n\n update(data, rows, cols, agg, type, header) {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n this.data = this.originalData;\n return this;\n }\n\n collapse(rowNum) {\n let returnedData = collapse(rowNum, this.data);\n\n this.collapsedRows[this.data.table[rowNum].row] =\n returnedData.collapsed;\n this.data = returnedData.uncollapsed;\n return this;\n }\n\n expand(rowNum) {\n this.data = expand(\n rowNum,\n this.data,\n this.collapsedRows[this.data.table[rowNum].row],\n );\n delete this.collapsedRows[this.data.table[rowNum].row];\n return this;\n }\n\n toggle(rowNum) {\n if (rowNum in this.collapsedRows) {\n return this.expand(rowNum);\n }\n return this.collapse(rowNum);\n }\n\n getData(rowNum) {\n if (!this.data.table[rowNum]) return null;\n if (this.collapsedRows[this.data.table[rowNum].row]) {\n return this.collapsedRows[this.data.table[rowNum].row].rawData;\n }\n\n return this.originalData.rawData[this.data.table[rowNum].row];\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/index.js\n **/","'use strict';\n\nexport function fixDataFormat(data) {\n if (!Array.isArray(data) || !data.length) return [];\n else if (typeof data[0] === 'object' && !Array.isArray(data[0])) return data;\n return data.reduce((dataCol, row, i, arr) => {\n if (i !== 0) {\n if (Array.isArray(row)) {\n dataCol.push(row.reduce((acc, curr, index) =>{\n acc[arr[0][index]] = curr;\n return acc;\n }, {}));\n } else {\n dataCol.push({[arr[0]]: row});\n }\n }\n return dataCol;\n }, []);\n}\n\nexport function groupByCategory(data, groupBy) {\n return data.reduce((acc, curr) =>{\n var category = curr[groupBy];\n\n if (!acc[category]) acc[category] = [];\n acc[category].push(curr);\n return acc;\n }, {});\n}\n\nexport function groupByCategories(data, groups = [], acc = {}) {\n if (!data.length) return [];\n\n groups = groups.filter(ele =>{\n return ele in data[0];\n });\n\n if (!groups.length) return data;\n\n var groupCopy = Object.assign([], groups);\n var groupedData = groupByCategory(data, groupCopy.shift());\n var groupedDataKeys = Object.keys(groupedData);\n var children = groupedDataKeys.map(el => {\n return groupedData[el];\n });\n\n for (let i = 0; i < children.length; i++) {\n acc[groupedDataKeys[i]] = groupCopy.length ? {} : [];\n acc[groupedDataKeys[i]] = groupByCategories(\n children[i], groupCopy, acc[groupedDataKeys[i]]);\n }\n\n return acc;\n}\n\nexport function createColumnHeaders(data, cols = [], firstColumn = '') {\n if (!cols.length) return {columnHeaders: [firstColumn], mapToHeader: 1};\n\n var groupedData = groupByCategories(data, cols);\n var columnHeaders = [];\n var mapToHeader = Object.assign({}, groupedData);\n var mapPos = 1;\n\n (function columnHeaderRecursion(data, pos = 0, headerMap) {\n if (typeof data !== 'object' || Array.isArray(data)) return 1;\n\n var currKeys = Object.keys(data);\n var reqLength = 0;\n\n for (let i = 0; i < currKeys.length; i++) {\n let currLength = columnHeaderRecursion(\n data[currKeys[i]], pos + 1, headerMap[currKeys[i]]);\n\n if (Array.isArray(data[currKeys[i]])) {\n headerMap[currKeys[i]] = mapPos;\n mapPos += 1;\n }\n reqLength += currLength;\n columnHeaders[pos] = !columnHeaders[pos] ?\n [firstColumn].concat(Array(currLength).fill(currKeys[i])) :\n columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));\n }\n return reqLength;\n\n })(groupedData, 0, mapToHeader);\n\n return {\n columnHeaders,\n mapToHeader,\n };\n}\n\n/**\n * accumulator has two different signatures\n * 1. it takes an array of objects, an accumulation category as a string\n * (like age), and supported accumulation type as a string (like count)\n * 2. it takes an array of objects, a callback function (which operates\n * the same as reduce), and an initial value\n */\nexport function accumulator(arr, accCat, accType, accValue) {\n if (!accCat && typeof accType !== 'function') accType = 'count';\n else if (typeof accCat === 'function') {\n accValue = accType || 0;\n accType = accCat;\n }\n\n return arr.reduce((acc, curr, index, array) => {\n if (typeof accType === 'function') {\n return accType(acc, typeof accCat === 'string' ? curr[accCat] :\n curr, index, array);\n }\n switch (accType) {\n case ('sum'): {\n acc += Number(curr[accCat]);\n return acc;\n }\n\n case ('count'): {\n acc += 1;\n return acc;\n }\n\n default: {\n acc += 1;\n return acc;\n }\n }\n }, accValue || 0);\n}\n\nexport function checkPivotCategories(actualCats, selectedCats) {\n var errMessage = [];\n\n selectedCats.forEach(selectedCat =>{\n if (actualCats.indexOf(selectedCat) === -1) errMessage.push(selectedCat);\n });\n if (errMessage.length) {\n throw new Error(\n `Check that these selected pivot categories exist: ${errMessage.join(\n ',')}`);\n }\n}\n\nexport function tableCreator(\n data, rows = [], cols = [], accCatOrCB, accTypeOrInitVal, rowHeader) {\n data = fixDataFormat(data);\n if (!data.length) return [];\n checkPivotCategories(Object.keys(data[0]), rows);\n checkPivotCategories(Object.keys(data[0]), cols);\n\n if (typeof rowHeader === 'undefined') {\n rowHeader = typeof accCatOrCB !== 'function' ?\n `${accTypeOrInitVal} ${accCatOrCB}` :\n 'Custom Agg';\n }\n\n const columnData = createColumnHeaders(data, cols, rowHeader);\n const columnHeaders = Array.isArray(columnData.columnHeaders[0]) ?\n columnData.columnHeaders :\n [columnData.columnHeaders.concat(rowHeader)];\n const mapToHeader = columnData.mapToHeader;\n const headerLength = columnHeaders[0].length;\n const formattedColumnHeaders = columnHeaders.map((value, depth) => {\n return {\n value,\n depth,\n type: 'colHeader',\n row: depth,\n };\n });\n\n let dataRows = [];\n let rawData = [];\n let prevKey = '';\n\n function rowRecurse(rowGroups, depth, rowHeaders = []) {\n for (let key in rowGroups) {\n if (Array.isArray(rowGroups[key])) {\n const recursedData = groupByCategories(rowGroups[key], cols);\n\n prevKey = '';\n\n (function recurseThroughMap(dataPos, map) {\n if (Array.isArray(dataPos)) {\n if (key === prevKey) {\n let datum = dataRows[dataRows.length - 1].value;\n\n datum[map] = accumulator(dataPos, accCatOrCB, accTypeOrInitVal);\n dataRows[dataRows.length - 1].value = datum;\n\n let rawDataDatum = rawData[rawData.length - 1].value;\n\n rawDataDatum[map] = dataPos;\n rawData[rawData.length - 1].value = rawDataDatum;\n } else {\n prevKey = key;\n let datum = [key].concat(\n Array(map - 1).fill(''),\n accumulator(dataPos, accCatOrCB, accTypeOrInitVal),\n Array(headerLength - (map + 1)).fill(''));\n let rawDataDatum = [key].concat(\n Array(map - 1).fill(''),\n [dataPos],\n Array(headerLength - (map + 1)).fill(''));\n\n rawData.push({\n value: rawDataDatum,\n type: 'data',\n depth,\n });\n dataRows.push({\n value: datum,\n type: 'data',\n depth,\n row: dataRows.length + formattedColumnHeaders.length,\n });\n }\n } else {\n for (let innerKey in dataPos) {\n recurseThroughMap(dataPos[innerKey], map[innerKey]);\n }\n }\n })(recursedData, mapToHeader || 1);\n\n } else {\n const rowHeaderValue = rowHeaders.shift();\n const value = rowHeaderValue ?\n rowHeaderValue.value :\n [key].concat(Array(headerLength - 1).fill(''));\n\n dataRows.push({\n value,\n depth,\n type: 'rowHeader',\n row: dataRows.length + formattedColumnHeaders.length,\n });\n rawData.push({\n value,\n depth,\n type: 'rowHeader',\n });\n\n rowRecurse(rowGroups[key], depth + 1, rowHeaders);\n }\n }\n }\n\n let dataGroups = [];\n\n if (rows.length > 0) {\n for (let i = 0; i < rows.length; i++) {\n // possible memoization opportunity\n rowRecurse(groupByCategories(data, rows.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < rows.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else if (cols.length > 0) {\n for (let i = 0; i < cols.length; i++) {\n rowRecurse(groupByCategories(data, cols.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < cols.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else {\n dataRows.push({\n value: [rowHeader, accumulator(data, accCatOrCB, accTypeOrInitVal)],\n type: 'data',\n row: 1,\n depth: 0,\n });\n rawData = data.map((value) => {\n return {\n value,\n type: 0,\n row: 1,\n depth: 0,\n };\n });\n }\n\n return {\n table: formattedColumnHeaders.concat(dataRows),\n rawData: formattedColumnHeaders.concat(rawData),\n };\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/logic.js\n **/","'use strict';\n\nexport function collapse(rowNum, data) {\n const selectedRow = data.table[rowNum];\n const {type, depth} = selectedRow;\n\n if (type !== 'rowHeader' && type !== 'colHeader') {\n return {\n uncollapsed: data,\n };\n }\n\n let count = rowNum + 1;\n let currDepth = data.table[count].depth;\n let uncollapsed = {\n table: data.table.slice(0, count),\n rawData: data.rawData.slice(0, count),\n };\n\n let collapsed = {\n table: [],\n rawData: [],\n };\n\n while (count < data.table.length && currDepth > depth) {\n collapsed.rawData.push(data.rawData[count]);\n collapsed.table.push(data.table[count]);\n count += 1;\n if (count < data.table.length) currDepth = data.table[count].depth;\n }\n\n uncollapsed.table = uncollapsed.table.concat(data.table.slice(count));\n uncollapsed.rawData = uncollapsed.rawData.concat(data.rawData.slice(count));\n\n return {\n uncollapsed,\n collapsed,\n };\n}\n\nexport function expand(rowNum, currData, collapsedRows) {\n if (!collapsedRows) return currData;\n currData.table.splice(rowNum + 1, 0, ...collapsedRows.table);\n currData.rawData.splice(rowNum + 1, 0, ...collapsedRows.rawData);\n return currData;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/progressiveDiscovery.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/quick-pivot.min.js b/lib/quick-pivot.min.js index beb69d9..4a78598 100644 --- a/lib/quick-pivot.min.js +++ b/lib/quick-pivot.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("quick-pivot",[],t):"object"==typeof exports?exports["quick-pivot"]=t():e["quick-pivot"]=t()}(this,function(){return function(e){function t(a){if(r[a])return r[a].exports;var n=r[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e.length)return[];if(t=t.filter(function(t){return t in e[0]}),!t.length)return e;for(var a=Object.assign([],t),i=n(e,a.shift()),l=Object.keys(i),u=l.map(function(e){return i[e]}),c=0;c1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(!t.length)return{columnHeaders:[r],mapToHeader:1};var a=o(e,t),n=[],i=Object.assign({},a),l=1;return function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=arguments[2];if("object"!==("undefined"==typeof e?"undefined":s(e))||Array.isArray(e))return 1;for(var o=Object.keys(e),i=0,c=0;c2&&void 0!==arguments[2]?arguments[2]:[],i=function(i){if(Array.isArray(e[i])){var u=o(e[i],n);w="",function d(e,t){if(Array.isArray(e))if(i===w){var a=b[b.length-1].value;a[t]=l(e,c,s),b[b.length-1].value=a;var n=g[g.length-1].value;n[t]=e,g[g.length-1].value=n}else{w=i;var o=[i].concat(Array(t-1).fill(""),l(e,c,s),Array(y-(t+1)).fill("")),u=[i].concat(Array(t-1).fill(""),[e],Array(y-(t+1)).fill(""));g.push({value:u,type:"data",depth:r}),b.push({value:o,type:"data",depth:r,row:b.length+v.length})}else for(var f in e)d(e[f],t[f])}(u,h||1)}else{var f=a.shift(),p=f?f.value:[i].concat(Array(y-1).fill(""));b.push({value:p,depth:r,type:"rowHeader",row:b.length+v.length}),g.push({value:p,depth:r,type:"rowHeader"}),t(e[i],r+1,a)}};for(var u in e)i(u)}var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],c=arguments[3],s=arguments[4],f=arguments[5];if(e=a(e),!e.length)return[];u(Object.keys(e[0]),r),u(Object.keys(e[0]),n),"undefined"==typeof f&&(f="function"!=typeof c?s+" "+c:"Custom Agg");var p=i(e,n,f),d=Array.isArray(p.columnHeaders[0])?p.columnHeaders:[p.columnHeaders.concat(f)],h=p.mapToHeader,y=d[0].length,v=d.map(function(e,t){return{value:e,depth:t,type:"colHeader",row:t}}),b=[],g=[],w="",m=[];if(r.length>0)for(var A=0;A0)for(var D=0;Dn;)u.rawData.push(t.rawData[o]),u.table.push(t.table[o]),o+=1,o1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e.length)return[];if(t=t.filter(function(t){return t in e[0]}),!t.length)return e;for(var r=Object.assign([],t),i=n(e,r.shift()),l=Object.keys(i),u=l.map(function(e){return i[e]}),c=0;c1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(!t.length)return{columnHeaders:[a],mapToHeader:1};var r=o(e,t),n=[],i=Object.assign({},r),l=1;return function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments[2];if("object"!==("undefined"==typeof e?"undefined":s(e))||Array.isArray(e))return 1;for(var o=Object.keys(e),i=0,c=0;c2&&void 0!==arguments[2]?arguments[2]:[],i=function(i){if(Array.isArray(e[i])){var u=o(e[i],n);w="",function h(e,t){if(Array.isArray(e))if(i===w){var r=g[g.length-1].value;r[t]=l(e,c,s),g[g.length-1].value=r;var n=b[b.length-1].value;n[t]=e,b[b.length-1].value=n}else{w=i;var o=[i].concat(Array(t-1).fill(""),l(e,c,s),Array(y-(t+1)).fill("")),u=[i].concat(Array(t-1).fill(""),[e],Array(y-(t+1)).fill(""));b.push({value:u,type:"data",depth:a}),g.push({value:o,type:"data",depth:a,row:g.length+v.length})}else for(var f in e)h(e[f],t[f])}(u,d||1)}else{var f=r.shift(),p=f?f.value:[i].concat(Array(y-1).fill(""));g.push({value:p,depth:a,type:"rowHeader",row:g.length+v.length}),b.push({value:p,depth:a,type:"rowHeader"}),t(e[i],a+1,r)}};for(var u in e)i(u)}var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],c=arguments[3],s=arguments[4],f=arguments[5];if(e=r(e),!e.length)return[];u(Object.keys(e[0]),a),u(Object.keys(e[0]),n),"undefined"==typeof f&&(f="function"!=typeof c?s+" "+c:"Custom Agg");var p=i(e,n,f),h=Array.isArray(p.columnHeaders[0])?p.columnHeaders:[p.columnHeaders.concat(f)],d=p.mapToHeader,y=h[0].length,v=h.map(function(e,t){return{value:e,depth:t,type:"colHeader",row:t}}),g=[],b=[],w="",m=[];if(a.length>0)for(var A=0;A0)for(var D=0;Dn;)u.rawData.push(t.rawData[o]),u.table.push(t.table[o]),o+=1,o 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t var acc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t if (!data.length) return [];\n\t\n\t groups = groups.filter(function (ele) {\n\t return ele in data[0];\n\t });\n\t\n\t if (!groups.length) return data;\n\t\n\t var groupCopy = Object.assign([], groups);\n\t var groupedData = groupByCategory(data, groupCopy.shift());\n\t var groupedDataKeys = Object.keys(groupedData);\n\t var children = groupedDataKeys.map(function (el) {\n\t return groupedData[el];\n\t });\n\t\n\t for (var i = 0; i < children.length; i++) {\n\t acc[groupedDataKeys[i]] = groupCopy.length ? {} : [];\n\t acc[groupedDataKeys[i]] = groupByCategories(children[i], groupCopy, acc[groupedDataKeys[i]]);\n\t }\n\t\n\t return acc;\n\t}\n\t\n\tfunction createColumnHeaders(data) {\n\t var cols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t var firstColumn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\t\n\t if (!cols.length) return { columnHeaders: [firstColumn], mapToHeader: 1 };\n\t\n\t var groupedData = groupByCategories(data, cols);\n\t var columnHeaders = [];\n\t var mapToHeader = Object.assign({}, groupedData);\n\t var mapPos = 1;\n\t\n\t (function columnHeaderRecursion(data) {\n\t var pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t var headerMap = arguments[2];\n\t\n\t if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object' || Array.isArray(data)) return 1;\n\t\n\t var currKeys = Object.keys(data);\n\t var reqLength = 0;\n\t\n\t for (var i = 0; i < currKeys.length; i++) {\n\t var currLength = columnHeaderRecursion(data[currKeys[i]], pos + 1, headerMap[currKeys[i]]);\n\t\n\t if (Array.isArray(data[currKeys[i]])) {\n\t headerMap[currKeys[i]] = mapPos;\n\t mapPos += 1;\n\t }\n\t reqLength += currLength;\n\t columnHeaders[pos] = !columnHeaders[pos] ? [firstColumn].concat(Array(currLength).fill(currKeys[i])) : columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));\n\t }\n\t return reqLength;\n\t })(groupedData, 0, mapToHeader);\n\t\n\t return {\n\t columnHeaders: columnHeaders,\n\t mapToHeader: mapToHeader\n\t };\n\t}\n\t\n\t/**\n\t * accumulator has two different signatures\n\t * 1. it takes an array of objects, an accumulation category as a string\n\t * (like age), and supported accumulation type as a string (like count)\n\t * 2. it takes an array of objects, a callback function (which operates\n\t * the same as reduce), and an initial value\n\t */\n\tfunction accumulator(arr, accCat, accType, accValue) {\n\t if (!accCat && typeof accType !== 'function') accType = 'count';else if (typeof accCat === 'function') {\n\t accValue = accType || 0;\n\t accType = accCat;\n\t }\n\t\n\t return arr.reduce(function (acc, curr, index, array) {\n\t if (typeof accType === 'function') {\n\t return accType(acc, typeof accCat === 'string' ? curr[accCat] : curr, index, array);\n\t }\n\t switch (accType) {\n\t case 'sum':\n\t {\n\t acc += Number(curr[accCat]);\n\t return acc;\n\t }\n\t\n\t case 'count':\n\t {\n\t acc += 1;\n\t return acc;\n\t }\n\t\n\t default:\n\t {\n\t acc += 1;\n\t return acc;\n\t }\n\t }\n\t }, accValue || 0);\n\t}\n\t\n\tfunction checkPivotCategories(actualCats, selectedCats) {\n\t var errMessage = [];\n\t\n\t selectedCats.forEach(function (selectedCat) {\n\t if (actualCats.indexOf(selectedCat) === -1) errMessage.push(selectedCat);\n\t });\n\t if (errMessage.length) {\n\t throw new Error('Check that these selected pivot categories exist: ' + errMessage.join(','));\n\t }\n\t}\n\t\n\tfunction tableCreator(data) {\n\t var rows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t var cols = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\t var accCatOrCB = arguments[3];\n\t var accTypeOrInitVal = arguments[4];\n\t var rowHeader = arguments[5];\n\t\n\t data = fixDataFormat(data);\n\t if (!data.length) return [];\n\t checkPivotCategories(Object.keys(data[0]), rows);\n\t checkPivotCategories(Object.keys(data[0]), cols);\n\t\n\t if (typeof rowHeader === 'undefined') {\n\t rowHeader = typeof accCatOrCB !== 'function' ? accTypeOrInitVal + ' ' + accCatOrCB : 'Custom Agg';\n\t }\n\t\n\t var columnData = createColumnHeaders(data, cols, rowHeader);\n\t var columnHeaders = Array.isArray(columnData.columnHeaders[0]) ? columnData.columnHeaders : [columnData.columnHeaders.concat(rowHeader)];\n\t var mapToHeader = columnData.mapToHeader;\n\t var headerLength = columnHeaders[0].length;\n\t var formattedColumnHeaders = columnHeaders.map(function (value, depth) {\n\t return {\n\t value: value,\n\t depth: depth,\n\t type: 'colHeader',\n\t row: depth\n\t };\n\t });\n\t\n\t var dataRows = [];\n\t var rawData = [];\n\t var prevKey = '';\n\t\n\t function rowRecurse(rowGroups, depth) {\n\t var rowHeaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\t\n\t var _loop = function _loop(key) {\n\t if (Array.isArray(rowGroups[key])) {\n\t var recursedData = groupByCategories(rowGroups[key], cols);\n\t\n\t prevKey = '';\n\t\n\t (function recurseThroughMap(dataPos, map) {\n\t if (Array.isArray(dataPos)) {\n\t if (key === prevKey) {\n\t var datum = dataRows[dataRows.length - 1].value;\n\t\n\t datum[map] = accumulator(dataPos, accCatOrCB, accTypeOrInitVal);\n\t dataRows[dataRows.length - 1].value = datum;\n\t\n\t var rawDataDatum = rawData[rawData.length - 1].value;\n\t\n\t rawDataDatum[map] = dataPos;\n\t rawData[rawData.length - 1].value = rawDataDatum;\n\t } else {\n\t prevKey = key;\n\t var _datum = [key].concat(Array(map - 1).fill(''), accumulator(dataPos, accCatOrCB, accTypeOrInitVal), Array(headerLength - (map + 1)).fill(''));\n\t var _rawDataDatum = [key].concat(Array(map - 1).fill(''), [dataPos], Array(headerLength - (map + 1)).fill(''));\n\t\n\t rawData.push({\n\t value: _rawDataDatum,\n\t type: 'data',\n\t depth: depth\n\t });\n\t dataRows.push({\n\t value: _datum,\n\t type: 'data',\n\t depth: depth,\n\t row: dataRows.length + formattedColumnHeaders.length\n\t });\n\t }\n\t } else {\n\t for (var innerKey in dataPos) {\n\t recurseThroughMap(dataPos[innerKey], map[innerKey]);\n\t }\n\t }\n\t })(recursedData, mapToHeader || 1);\n\t } else {\n\t var rowHeaderValue = rowHeaders.shift();\n\t var value = rowHeaderValue ? rowHeaderValue.value : [key].concat(Array(headerLength - 1).fill(''));\n\t\n\t dataRows.push({\n\t value: value,\n\t depth: depth,\n\t type: 'rowHeader',\n\t row: dataRows.length + formattedColumnHeaders.length\n\t });\n\t rawData.push({\n\t value: value,\n\t depth: depth,\n\t type: 'rowHeader'\n\t });\n\t\n\t rowRecurse(rowGroups[key], depth + 1, rowHeaders);\n\t }\n\t };\n\t\n\t for (var key in rowGroups) {\n\t _loop(key);\n\t }\n\t }\n\t\n\t var dataGroups = [];\n\t\n\t if (rows.length > 0) {\n\t for (var i = 0; i < rows.length; i++) {\n\t // possible memoization opportunity\n\t rowRecurse(groupByCategories(data, rows.slice(0, i + 1)), 0, dataGroups);\n\t dataGroups = Object.assign([], dataRows);\n\t if (i + 1 < rows.length) {\n\t dataRows = [];\n\t rawData = [];\n\t prevKey = '';\n\t }\n\t }\n\t } else if (cols.length > 0) {\n\t for (var _i = 0; _i < cols.length; _i++) {\n\t rowRecurse(groupByCategories(data, cols.slice(0, _i + 1)), 0, dataGroups);\n\t dataGroups = Object.assign([], dataRows);\n\t if (_i + 1 < cols.length) {\n\t dataRows = [];\n\t rawData = [];\n\t prevKey = '';\n\t }\n\t }\n\t } else {\n\t dataRows.push({\n\t value: [rowHeader, accumulator(data, accCatOrCB, accTypeOrInitVal)],\n\t type: 'data',\n\t row: 1,\n\t depth: 0\n\t });\n\t rawData = data.map(function (value) {\n\t return {\n\t value: value,\n\t type: 0,\n\t row: 1,\n\t depth: 0\n\t };\n\t });\n\t }\n\t\n\t return {\n\t table: formattedColumnHeaders.concat(dataRows),\n\t rawData: formattedColumnHeaders.concat(rawData)\n\t };\n\t}\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.collapse = collapse;\n\texports.expand = expand;\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tfunction collapse(rowNum, data) {\n\t var selectedRow = data.table[rowNum];\n\t var type = selectedRow.type,\n\t depth = selectedRow.depth;\n\t\n\t\n\t if (type !== 'rowHeader' && type !== 'colHeader') {\n\t return {\n\t uncollapsed: data\n\t };\n\t }\n\t\n\t var count = rowNum + 1;\n\t var currDepth = data.table[count].depth;\n\t var uncollapsed = {\n\t table: data.table.slice(0, count),\n\t rawData: data.rawData.slice(0, count)\n\t };\n\t\n\t var collapsed = {\n\t table: [],\n\t rawData: []\n\t };\n\t\n\t while (count < data.table.length && currDepth > depth) {\n\t collapsed.rawData.push(data.rawData[count]);\n\t collapsed.table.push(data.table[count]);\n\t count += 1;\n\t if (count < data.table.length) currDepth = data.table[count].depth;\n\t }\n\t\n\t uncollapsed.table = uncollapsed.table.concat(data.table.slice(count));\n\t uncollapsed.rawData = uncollapsed.rawData.concat(data.rawData.slice(count));\n\t\n\t return {\n\t uncollapsed: uncollapsed,\n\t collapsed: collapsed\n\t };\n\t}\n\t\n\tfunction expand(rowNum, currData, collapsedRows) {\n\t var _currData$table, _currData$rawData;\n\t\n\t if (!collapsedRows) return currData;\n\t (_currData$table = currData.table).splice.apply(_currData$table, [rowNum + 1, 0].concat(_toConsumableArray(collapsedRows.table)));\n\t (_currData$rawData = currData.rawData).splice.apply(_currData$rawData, [rowNum + 1, 0].concat(_toConsumableArray(collapsedRows.rawData)));\n\t return currData;\n\t}\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** quick-pivot.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 03b05172dd46e50fa24f\n **/","import { tableCreator } from './logic';\nimport { collapse, expand } from './progressiveDiscovery.js';\n\nexport default class Pivot {\n\n constructor(data, rows, cols, agg, type, header) {\n if (!data) {\n this.originalData = {};\n }else {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n }\n\n this.data = this.originalData;\n this.collapsedRows = {};\n }\n\n update(data, rows, cols, agg, type, header) {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n this.data = this.originalData;\n return this;\n }\n\n collapse(rowNum) {\n let returnedData = collapse(rowNum, this.data);\n\n this.collapsedRows[this.data.table[rowNum].row] =\n returnedData.collapsed;\n this.data = returnedData.uncollapsed;\n return this;\n }\n\n expand(rowNum) {\n this.data = expand(\n rowNum,\n this.data,\n this.collapsedRows[this.data.table[rowNum].row],\n );\n delete this.collapsedRows[this.data.table[rowNum].row];\n return this;\n }\n\n getData(rowNum) {\n if (!this.data.table[rowNum]) return null;\n if (this.collapsedRows[this.data.table[rowNum].row]) {\n return this.collapsedRows[this.data.table[rowNum].row].rawData;\n }\n\n return this.originalData.rawData[this.data.table[rowNum].row];\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/index.js\n **/","'use strict';\n\nexport function fixDataFormat(data) {\n if (!Array.isArray(data) || !data.length) return [];\n else if (typeof data[0] === 'object' && !Array.isArray(data[0])) return data;\n return data.reduce((dataCol, row, i, arr) => {\n if (i !== 0) {\n if (Array.isArray(row)) {\n dataCol.push(row.reduce((acc, curr, index) =>{\n acc[arr[0][index]] = curr;\n return acc;\n }, {}));\n } else {\n dataCol.push({[arr[0]]: row});\n }\n }\n return dataCol;\n }, []);\n}\n\nexport function groupByCategory(data, groupBy) {\n return data.reduce((acc, curr) =>{\n var category = curr[groupBy];\n\n if (!acc[category]) acc[category] = [];\n acc[category].push(curr);\n return acc;\n }, {});\n}\n\nexport function groupByCategories(data, groups = [], acc = {}) {\n if (!data.length) return [];\n\n groups = groups.filter(ele =>{\n return ele in data[0];\n });\n\n if (!groups.length) return data;\n\n var groupCopy = Object.assign([], groups);\n var groupedData = groupByCategory(data, groupCopy.shift());\n var groupedDataKeys = Object.keys(groupedData);\n var children = groupedDataKeys.map(el => {\n return groupedData[el];\n });\n\n for (let i = 0; i < children.length; i++) {\n acc[groupedDataKeys[i]] = groupCopy.length ? {} : [];\n acc[groupedDataKeys[i]] = groupByCategories(\n children[i], groupCopy, acc[groupedDataKeys[i]]);\n }\n\n return acc;\n}\n\nexport function createColumnHeaders(data, cols = [], firstColumn = '') {\n if (!cols.length) return {columnHeaders: [firstColumn], mapToHeader: 1};\n\n var groupedData = groupByCategories(data, cols);\n var columnHeaders = [];\n var mapToHeader = Object.assign({}, groupedData);\n var mapPos = 1;\n\n (function columnHeaderRecursion(data, pos = 0, headerMap) {\n if (typeof data !== 'object' || Array.isArray(data)) return 1;\n\n var currKeys = Object.keys(data);\n var reqLength = 0;\n\n for (let i = 0; i < currKeys.length; i++) {\n let currLength = columnHeaderRecursion(\n data[currKeys[i]], pos + 1, headerMap[currKeys[i]]);\n\n if (Array.isArray(data[currKeys[i]])) {\n headerMap[currKeys[i]] = mapPos;\n mapPos += 1;\n }\n reqLength += currLength;\n columnHeaders[pos] = !columnHeaders[pos] ?\n [firstColumn].concat(Array(currLength).fill(currKeys[i])) :\n columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));\n }\n return reqLength;\n\n })(groupedData, 0, mapToHeader);\n\n return {\n columnHeaders,\n mapToHeader,\n };\n}\n\n/**\n * accumulator has two different signatures\n * 1. it takes an array of objects, an accumulation category as a string\n * (like age), and supported accumulation type as a string (like count)\n * 2. it takes an array of objects, a callback function (which operates\n * the same as reduce), and an initial value\n */\nexport function accumulator(arr, accCat, accType, accValue) {\n if (!accCat && typeof accType !== 'function') accType = 'count';\n else if (typeof accCat === 'function') {\n accValue = accType || 0;\n accType = accCat;\n }\n\n return arr.reduce((acc, curr, index, array) => {\n if (typeof accType === 'function') {\n return accType(acc, typeof accCat === 'string' ? curr[accCat] :\n curr, index, array);\n }\n switch (accType) {\n case ('sum'): {\n acc += Number(curr[accCat]);\n return acc;\n }\n\n case ('count'): {\n acc += 1;\n return acc;\n }\n\n default: {\n acc += 1;\n return acc;\n }\n }\n }, accValue || 0);\n}\n\nexport function checkPivotCategories(actualCats, selectedCats) {\n var errMessage = [];\n\n selectedCats.forEach(selectedCat =>{\n if (actualCats.indexOf(selectedCat) === -1) errMessage.push(selectedCat);\n });\n if (errMessage.length) {\n throw new Error(\n `Check that these selected pivot categories exist: ${errMessage.join(\n ',')}`);\n }\n}\n\nexport function tableCreator(\n data, rows = [], cols = [], accCatOrCB, accTypeOrInitVal, rowHeader) {\n data = fixDataFormat(data);\n if (!data.length) return [];\n checkPivotCategories(Object.keys(data[0]), rows);\n checkPivotCategories(Object.keys(data[0]), cols);\n\n if (typeof rowHeader === 'undefined') {\n rowHeader = typeof accCatOrCB !== 'function' ?\n `${accTypeOrInitVal} ${accCatOrCB}` :\n 'Custom Agg';\n }\n\n const columnData = createColumnHeaders(data, cols, rowHeader);\n const columnHeaders = Array.isArray(columnData.columnHeaders[0]) ?\n columnData.columnHeaders :\n [columnData.columnHeaders.concat(rowHeader)];\n const mapToHeader = columnData.mapToHeader;\n const headerLength = columnHeaders[0].length;\n const formattedColumnHeaders = columnHeaders.map((value, depth) => {\n return {\n value,\n depth,\n type: 'colHeader',\n row: depth,\n };\n });\n\n let dataRows = [];\n let rawData = [];\n let prevKey = '';\n\n function rowRecurse(rowGroups, depth, rowHeaders = []) {\n for (let key in rowGroups) {\n if (Array.isArray(rowGroups[key])) {\n const recursedData = groupByCategories(rowGroups[key], cols);\n\n prevKey = '';\n\n (function recurseThroughMap(dataPos, map) {\n if (Array.isArray(dataPos)) {\n if (key === prevKey) {\n let datum = dataRows[dataRows.length - 1].value;\n\n datum[map] = accumulator(dataPos, accCatOrCB, accTypeOrInitVal);\n dataRows[dataRows.length - 1].value = datum;\n\n let rawDataDatum = rawData[rawData.length - 1].value;\n\n rawDataDatum[map] = dataPos;\n rawData[rawData.length - 1].value = rawDataDatum;\n } else {\n prevKey = key;\n let datum = [key].concat(\n Array(map - 1).fill(''),\n accumulator(dataPos, accCatOrCB, accTypeOrInitVal),\n Array(headerLength - (map + 1)).fill(''));\n let rawDataDatum = [key].concat(\n Array(map - 1).fill(''),\n [dataPos],\n Array(headerLength - (map + 1)).fill(''));\n\n rawData.push({\n value: rawDataDatum,\n type: 'data',\n depth,\n });\n dataRows.push({\n value: datum,\n type: 'data',\n depth,\n row: dataRows.length + formattedColumnHeaders.length,\n });\n }\n } else {\n for (let innerKey in dataPos) {\n recurseThroughMap(dataPos[innerKey], map[innerKey]);\n }\n }\n })(recursedData, mapToHeader || 1);\n\n } else {\n const rowHeaderValue = rowHeaders.shift();\n const value = rowHeaderValue ?\n rowHeaderValue.value :\n [key].concat(Array(headerLength - 1).fill(''));\n\n dataRows.push({\n value,\n depth,\n type: 'rowHeader',\n row: dataRows.length + formattedColumnHeaders.length,\n });\n rawData.push({\n value,\n depth,\n type: 'rowHeader',\n });\n\n rowRecurse(rowGroups[key], depth + 1, rowHeaders);\n }\n }\n }\n\n let dataGroups = [];\n\n if (rows.length > 0) {\n for (let i = 0; i < rows.length; i++) {\n // possible memoization opportunity\n rowRecurse(groupByCategories(data, rows.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < rows.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else if (cols.length > 0) {\n for (let i = 0; i < cols.length; i++) {\n rowRecurse(groupByCategories(data, cols.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < cols.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else {\n dataRows.push({\n value: [rowHeader, accumulator(data, accCatOrCB, accTypeOrInitVal)],\n type: 'data',\n row: 1,\n depth: 0,\n });\n rawData = data.map((value) => {\n return {\n value,\n type: 0,\n row: 1,\n depth: 0,\n };\n });\n }\n\n return {\n table: formattedColumnHeaders.concat(dataRows),\n rawData: formattedColumnHeaders.concat(rawData),\n };\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/logic.js\n **/","'use strict';\n\nexport function collapse(rowNum, data) {\n const selectedRow = data.table[rowNum];\n const {type, depth} = selectedRow;\n\n if (type !== 'rowHeader' && type !== 'colHeader') {\n return {\n uncollapsed: data,\n };\n }\n\n let count = rowNum + 1;\n let currDepth = data.table[count].depth;\n let uncollapsed = {\n table: data.table.slice(0, count),\n rawData: data.rawData.slice(0, count),\n };\n\n let collapsed = {\n table: [],\n rawData: [],\n };\n\n while (count < data.table.length && currDepth > depth) {\n collapsed.rawData.push(data.rawData[count]);\n collapsed.table.push(data.table[count]);\n count += 1;\n if (count < data.table.length) currDepth = data.table[count].depth;\n }\n\n uncollapsed.table = uncollapsed.table.concat(data.table.slice(count));\n uncollapsed.rawData = uncollapsed.rawData.concat(data.rawData.slice(count));\n\n return {\n uncollapsed,\n collapsed,\n };\n}\n\nexport function expand(rowNum, currData, collapsedRows) {\n if (!collapsedRows) return currData;\n currData.table.splice(rowNum + 1, 0, ...collapsedRows.table);\n currData.rawData.splice(rowNum + 1, 0, ...collapsedRows.rawData);\n return currData;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/progressiveDiscovery.js\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///quick-pivot.min.js","webpack:///webpack/bootstrap cfe60d8425851e878c90","webpack:///./src/index.js","webpack:///./src/logic.js","webpack:///./src/progressiveDiscovery.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_logic","_progressiveDiscovery","Pivot","data","rows","cols","agg","type","header","originalData","tableCreator","collapsedRows","rowNum","returnedData","collapse","table","row","collapsed","uncollapsed","expand","rawData","_defineProperty","obj","fixDataFormat","Array","isArray","_typeof","reduce","dataCol","arr","push","acc","curr","index","groupByCategory","groupBy","category","groupByCategories","groups","arguments","undefined","filter","ele","groupCopy","assign","groupedData","shift","groupedDataKeys","keys","children","map","el","createColumnHeaders","firstColumn","columnHeaders","mapToHeader","mapPos","columnHeaderRecursion","pos","headerMap","currKeys","reqLength","currLength","concat","fill","accumulator","accCat","accType","accValue","array","Number","checkPivotCategories","actualCats","selectedCats","errMessage","forEach","selectedCat","indexOf","Error","join","rowRecurse","rowGroups","depth","rowHeaders","_loop","recursedData","prevKey","recurseThroughMap","dataPos","datum","dataRows","accCatOrCB","accTypeOrInitVal","rawDataDatum","headerLength","formattedColumnHeaders","innerKey","rowHeaderValue","rowHeader","columnData","dataGroups","slice","Symbol","iterator","constructor","_toConsumableArray","arr2","from","selectedRow","count","currDepth","currData","_currData$table","_currData$rawData","splice","apply"],"mappings":"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","file":"quick-pivot.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"quick-pivot\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"quick-pivot\"] = factory();\n\telse\n\t\troot[\"quick-pivot\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"quick-pivot\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"quick-pivot\"] = factory();\n\telse\n\t\troot[\"quick-pivot\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _logic = __webpack_require__(1);\n\t\n\tvar _progressiveDiscovery = __webpack_require__(2);\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar Pivot = function () {\n\t function Pivot(data, rows, cols, agg, type, header) {\n\t _classCallCheck(this, Pivot);\n\t\n\t if (!data) {\n\t this.originalData = {};\n\t } else {\n\t this.originalData = (0, _logic.tableCreator)(data, rows, cols, agg, type, header);\n\t }\n\t\n\t this.data = this.originalData;\n\t this.collapsedRows = {};\n\t }\n\t\n\t _createClass(Pivot, [{\n\t key: 'update',\n\t value: function update(data, rows, cols, agg, type, header) {\n\t this.originalData = (0, _logic.tableCreator)(data, rows, cols, agg, type, header);\n\t this.data = this.originalData;\n\t return this;\n\t }\n\t }, {\n\t key: 'collapse',\n\t value: function collapse(rowNum) {\n\t var returnedData = (0, _progressiveDiscovery.collapse)(rowNum, this.data);\n\t\n\t this.collapsedRows[this.data.table[rowNum].row] = returnedData.collapsed;\n\t this.data = returnedData.uncollapsed;\n\t return this;\n\t }\n\t }, {\n\t key: 'expand',\n\t value: function expand(rowNum) {\n\t this.data = (0, _progressiveDiscovery.expand)(rowNum, this.data, this.collapsedRows[this.data.table[rowNum].row]);\n\t delete this.collapsedRows[this.data.table[rowNum].row];\n\t return this;\n\t }\n\t }, {\n\t key: 'toggle',\n\t value: function toggle(rowNum) {\n\t if (rowNum in this.collapsedRows) {\n\t return this.expand(rowNum);\n\t }\n\t return this.collapse(rowNum);\n\t }\n\t }, {\n\t key: 'getData',\n\t value: function getData(rowNum) {\n\t if (!this.data.table[rowNum]) return null;\n\t if (this.collapsedRows[this.data.table[rowNum].row]) {\n\t return this.collapsedRows[this.data.table[rowNum].row].rawData;\n\t }\n\t\n\t return this.originalData.rawData[this.data.table[rowNum].row];\n\t }\n\t }]);\n\t\n\t return Pivot;\n\t}();\n\t\n\texports.default = Pivot;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\texports.fixDataFormat = fixDataFormat;\n\texports.groupByCategory = groupByCategory;\n\texports.groupByCategories = groupByCategories;\n\texports.createColumnHeaders = createColumnHeaders;\n\texports.accumulator = accumulator;\n\texports.checkPivotCategories = checkPivotCategories;\n\texports.tableCreator = tableCreator;\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\tfunction fixDataFormat(data) {\n\t if (!Array.isArray(data) || !data.length) return [];else if (_typeof(data[0]) === 'object' && !Array.isArray(data[0])) return data;\n\t return data.reduce(function (dataCol, row, i, arr) {\n\t if (i !== 0) {\n\t if (Array.isArray(row)) {\n\t dataCol.push(row.reduce(function (acc, curr, index) {\n\t acc[arr[0][index]] = curr;\n\t return acc;\n\t }, {}));\n\t } else {\n\t dataCol.push(_defineProperty({}, arr[0], row));\n\t }\n\t }\n\t return dataCol;\n\t }, []);\n\t}\n\t\n\tfunction groupByCategory(data, groupBy) {\n\t return data.reduce(function (acc, curr) {\n\t var category = curr[groupBy];\n\t\n\t if (!acc[category]) acc[category] = [];\n\t acc[category].push(curr);\n\t return acc;\n\t }, {});\n\t}\n\t\n\tfunction groupByCategories(data) {\n\t var groups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t var acc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\n\t if (!data.length) return [];\n\t\n\t groups = groups.filter(function (ele) {\n\t return ele in data[0];\n\t });\n\t\n\t if (!groups.length) return data;\n\t\n\t var groupCopy = Object.assign([], groups);\n\t var groupedData = groupByCategory(data, groupCopy.shift());\n\t var groupedDataKeys = Object.keys(groupedData);\n\t var children = groupedDataKeys.map(function (el) {\n\t return groupedData[el];\n\t });\n\t\n\t for (var i = 0; i < children.length; i++) {\n\t acc[groupedDataKeys[i]] = groupCopy.length ? {} : [];\n\t acc[groupedDataKeys[i]] = groupByCategories(children[i], groupCopy, acc[groupedDataKeys[i]]);\n\t }\n\t\n\t return acc;\n\t}\n\t\n\tfunction createColumnHeaders(data) {\n\t var cols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t var firstColumn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\t\n\t if (!cols.length) return { columnHeaders: [firstColumn], mapToHeader: 1 };\n\t\n\t var groupedData = groupByCategories(data, cols);\n\t var columnHeaders = [];\n\t var mapToHeader = Object.assign({}, groupedData);\n\t var mapPos = 1;\n\t\n\t (function columnHeaderRecursion(data) {\n\t var pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\t var headerMap = arguments[2];\n\t\n\t if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object' || Array.isArray(data)) return 1;\n\t\n\t var currKeys = Object.keys(data);\n\t var reqLength = 0;\n\t\n\t for (var i = 0; i < currKeys.length; i++) {\n\t var currLength = columnHeaderRecursion(data[currKeys[i]], pos + 1, headerMap[currKeys[i]]);\n\t\n\t if (Array.isArray(data[currKeys[i]])) {\n\t headerMap[currKeys[i]] = mapPos;\n\t mapPos += 1;\n\t }\n\t reqLength += currLength;\n\t columnHeaders[pos] = !columnHeaders[pos] ? [firstColumn].concat(Array(currLength).fill(currKeys[i])) : columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));\n\t }\n\t return reqLength;\n\t })(groupedData, 0, mapToHeader);\n\t\n\t return {\n\t columnHeaders: columnHeaders,\n\t mapToHeader: mapToHeader\n\t };\n\t}\n\t\n\t/**\n\t * accumulator has two different signatures\n\t * 1. it takes an array of objects, an accumulation category as a string\n\t * (like age), and supported accumulation type as a string (like count)\n\t * 2. it takes an array of objects, a callback function (which operates\n\t * the same as reduce), and an initial value\n\t */\n\tfunction accumulator(arr, accCat, accType, accValue) {\n\t if (!accCat && typeof accType !== 'function') accType = 'count';else if (typeof accCat === 'function') {\n\t accValue = accType || 0;\n\t accType = accCat;\n\t }\n\t\n\t return arr.reduce(function (acc, curr, index, array) {\n\t if (typeof accType === 'function') {\n\t return accType(acc, typeof accCat === 'string' ? curr[accCat] : curr, index, array);\n\t }\n\t switch (accType) {\n\t case 'sum':\n\t {\n\t acc += Number(curr[accCat]);\n\t return acc;\n\t }\n\t\n\t case 'count':\n\t {\n\t acc += 1;\n\t return acc;\n\t }\n\t\n\t default:\n\t {\n\t acc += 1;\n\t return acc;\n\t }\n\t }\n\t }, accValue || 0);\n\t}\n\t\n\tfunction checkPivotCategories(actualCats, selectedCats) {\n\t var errMessage = [];\n\t\n\t selectedCats.forEach(function (selectedCat) {\n\t if (actualCats.indexOf(selectedCat) === -1) errMessage.push(selectedCat);\n\t });\n\t if (errMessage.length) {\n\t throw new Error('Check that these selected pivot categories exist: ' + errMessage.join(','));\n\t }\n\t}\n\t\n\tfunction tableCreator(data) {\n\t var rows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\t var cols = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\t var accCatOrCB = arguments[3];\n\t var accTypeOrInitVal = arguments[4];\n\t var rowHeader = arguments[5];\n\t\n\t data = fixDataFormat(data);\n\t if (!data.length) return [];\n\t checkPivotCategories(Object.keys(data[0]), rows);\n\t checkPivotCategories(Object.keys(data[0]), cols);\n\t\n\t if (typeof rowHeader === 'undefined') {\n\t rowHeader = typeof accCatOrCB !== 'function' ? accTypeOrInitVal + ' ' + accCatOrCB : 'Custom Agg';\n\t }\n\t\n\t var columnData = createColumnHeaders(data, cols, rowHeader);\n\t var columnHeaders = Array.isArray(columnData.columnHeaders[0]) ? columnData.columnHeaders : [columnData.columnHeaders.concat(rowHeader)];\n\t var mapToHeader = columnData.mapToHeader;\n\t var headerLength = columnHeaders[0].length;\n\t var formattedColumnHeaders = columnHeaders.map(function (value, depth) {\n\t return {\n\t value: value,\n\t depth: depth,\n\t type: 'colHeader',\n\t row: depth\n\t };\n\t });\n\t\n\t var dataRows = [];\n\t var rawData = [];\n\t var prevKey = '';\n\t\n\t function rowRecurse(rowGroups, depth) {\n\t var rowHeaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\t\n\t var _loop = function _loop(key) {\n\t if (Array.isArray(rowGroups[key])) {\n\t var recursedData = groupByCategories(rowGroups[key], cols);\n\t\n\t prevKey = '';\n\t\n\t (function recurseThroughMap(dataPos, map) {\n\t if (Array.isArray(dataPos)) {\n\t if (key === prevKey) {\n\t var datum = dataRows[dataRows.length - 1].value;\n\t\n\t datum[map] = accumulator(dataPos, accCatOrCB, accTypeOrInitVal);\n\t dataRows[dataRows.length - 1].value = datum;\n\t\n\t var rawDataDatum = rawData[rawData.length - 1].value;\n\t\n\t rawDataDatum[map] = dataPos;\n\t rawData[rawData.length - 1].value = rawDataDatum;\n\t } else {\n\t prevKey = key;\n\t var _datum = [key].concat(Array(map - 1).fill(''), accumulator(dataPos, accCatOrCB, accTypeOrInitVal), Array(headerLength - (map + 1)).fill(''));\n\t var _rawDataDatum = [key].concat(Array(map - 1).fill(''), [dataPos], Array(headerLength - (map + 1)).fill(''));\n\t\n\t rawData.push({\n\t value: _rawDataDatum,\n\t type: 'data',\n\t depth: depth\n\t });\n\t dataRows.push({\n\t value: _datum,\n\t type: 'data',\n\t depth: depth,\n\t row: dataRows.length + formattedColumnHeaders.length\n\t });\n\t }\n\t } else {\n\t for (var innerKey in dataPos) {\n\t recurseThroughMap(dataPos[innerKey], map[innerKey]);\n\t }\n\t }\n\t })(recursedData, mapToHeader || 1);\n\t } else {\n\t var rowHeaderValue = rowHeaders.shift();\n\t var value = rowHeaderValue ? rowHeaderValue.value : [key].concat(Array(headerLength - 1).fill(''));\n\t\n\t dataRows.push({\n\t value: value,\n\t depth: depth,\n\t type: 'rowHeader',\n\t row: dataRows.length + formattedColumnHeaders.length\n\t });\n\t rawData.push({\n\t value: value,\n\t depth: depth,\n\t type: 'rowHeader'\n\t });\n\t\n\t rowRecurse(rowGroups[key], depth + 1, rowHeaders);\n\t }\n\t };\n\t\n\t for (var key in rowGroups) {\n\t _loop(key);\n\t }\n\t }\n\t\n\t var dataGroups = [];\n\t\n\t if (rows.length > 0) {\n\t for (var i = 0; i < rows.length; i++) {\n\t // possible memoization opportunity\n\t rowRecurse(groupByCategories(data, rows.slice(0, i + 1)), 0, dataGroups);\n\t dataGroups = Object.assign([], dataRows);\n\t if (i + 1 < rows.length) {\n\t dataRows = [];\n\t rawData = [];\n\t prevKey = '';\n\t }\n\t }\n\t } else if (cols.length > 0) {\n\t for (var _i = 0; _i < cols.length; _i++) {\n\t rowRecurse(groupByCategories(data, cols.slice(0, _i + 1)), 0, dataGroups);\n\t dataGroups = Object.assign([], dataRows);\n\t if (_i + 1 < cols.length) {\n\t dataRows = [];\n\t rawData = [];\n\t prevKey = '';\n\t }\n\t }\n\t } else {\n\t dataRows.push({\n\t value: [rowHeader, accumulator(data, accCatOrCB, accTypeOrInitVal)],\n\t type: 'data',\n\t row: 1,\n\t depth: 0\n\t });\n\t rawData = data.map(function (value) {\n\t return {\n\t value: value,\n\t type: 0,\n\t row: 1,\n\t depth: 0\n\t };\n\t });\n\t }\n\t\n\t return {\n\t table: formattedColumnHeaders.concat(dataRows),\n\t rawData: formattedColumnHeaders.concat(rawData)\n\t };\n\t}\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.collapse = collapse;\n\texports.expand = expand;\n\t\n\tfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\t\n\tfunction collapse(rowNum, data) {\n\t var selectedRow = data.table[rowNum];\n\t var type = selectedRow.type,\n\t depth = selectedRow.depth;\n\t\n\t\n\t if (type !== 'rowHeader' && type !== 'colHeader') {\n\t return {\n\t uncollapsed: data\n\t };\n\t }\n\t\n\t var count = rowNum + 1;\n\t var currDepth = data.table[count].depth;\n\t var uncollapsed = {\n\t table: data.table.slice(0, count),\n\t rawData: data.rawData.slice(0, count)\n\t };\n\t\n\t var collapsed = {\n\t table: [],\n\t rawData: []\n\t };\n\t\n\t while (count < data.table.length && currDepth > depth) {\n\t collapsed.rawData.push(data.rawData[count]);\n\t collapsed.table.push(data.table[count]);\n\t count += 1;\n\t if (count < data.table.length) currDepth = data.table[count].depth;\n\t }\n\t\n\t uncollapsed.table = uncollapsed.table.concat(data.table.slice(count));\n\t uncollapsed.rawData = uncollapsed.rawData.concat(data.rawData.slice(count));\n\t\n\t return {\n\t uncollapsed: uncollapsed,\n\t collapsed: collapsed\n\t };\n\t}\n\t\n\tfunction expand(rowNum, currData, collapsedRows) {\n\t var _currData$table, _currData$rawData;\n\t\n\t if (!collapsedRows) return currData;\n\t (_currData$table = currData.table).splice.apply(_currData$table, [rowNum + 1, 0].concat(_toConsumableArray(collapsedRows.table)));\n\t (_currData$rawData = currData.rawData).splice.apply(_currData$rawData, [rowNum + 1, 0].concat(_toConsumableArray(collapsedRows.rawData)));\n\t return currData;\n\t}\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** quick-pivot.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap cfe60d8425851e878c90\n **/","import { tableCreator } from './logic';\nimport { collapse, expand } from './progressiveDiscovery.js';\n\nexport default class Pivot {\n\n constructor(data, rows, cols, agg, type, header) {\n if (!data) {\n this.originalData = {};\n }else {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n }\n\n this.data = this.originalData;\n this.collapsedRows = {};\n }\n\n update(data, rows, cols, agg, type, header) {\n this.originalData = tableCreator(data, rows, cols, agg, type, header);\n this.data = this.originalData;\n return this;\n }\n\n collapse(rowNum) {\n let returnedData = collapse(rowNum, this.data);\n\n this.collapsedRows[this.data.table[rowNum].row] =\n returnedData.collapsed;\n this.data = returnedData.uncollapsed;\n return this;\n }\n\n expand(rowNum) {\n this.data = expand(\n rowNum,\n this.data,\n this.collapsedRows[this.data.table[rowNum].row],\n );\n delete this.collapsedRows[this.data.table[rowNum].row];\n return this;\n }\n\n toggle(rowNum) {\n if (rowNum in this.collapsedRows) {\n return this.expand(rowNum);\n }\n return this.collapse(rowNum);\n }\n\n getData(rowNum) {\n if (!this.data.table[rowNum]) return null;\n if (this.collapsedRows[this.data.table[rowNum].row]) {\n return this.collapsedRows[this.data.table[rowNum].row].rawData;\n }\n\n return this.originalData.rawData[this.data.table[rowNum].row];\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/index.js\n **/","'use strict';\n\nexport function fixDataFormat(data) {\n if (!Array.isArray(data) || !data.length) return [];\n else if (typeof data[0] === 'object' && !Array.isArray(data[0])) return data;\n return data.reduce((dataCol, row, i, arr) => {\n if (i !== 0) {\n if (Array.isArray(row)) {\n dataCol.push(row.reduce((acc, curr, index) =>{\n acc[arr[0][index]] = curr;\n return acc;\n }, {}));\n } else {\n dataCol.push({[arr[0]]: row});\n }\n }\n return dataCol;\n }, []);\n}\n\nexport function groupByCategory(data, groupBy) {\n return data.reduce((acc, curr) =>{\n var category = curr[groupBy];\n\n if (!acc[category]) acc[category] = [];\n acc[category].push(curr);\n return acc;\n }, {});\n}\n\nexport function groupByCategories(data, groups = [], acc = {}) {\n if (!data.length) return [];\n\n groups = groups.filter(ele =>{\n return ele in data[0];\n });\n\n if (!groups.length) return data;\n\n var groupCopy = Object.assign([], groups);\n var groupedData = groupByCategory(data, groupCopy.shift());\n var groupedDataKeys = Object.keys(groupedData);\n var children = groupedDataKeys.map(el => {\n return groupedData[el];\n });\n\n for (let i = 0; i < children.length; i++) {\n acc[groupedDataKeys[i]] = groupCopy.length ? {} : [];\n acc[groupedDataKeys[i]] = groupByCategories(\n children[i], groupCopy, acc[groupedDataKeys[i]]);\n }\n\n return acc;\n}\n\nexport function createColumnHeaders(data, cols = [], firstColumn = '') {\n if (!cols.length) return {columnHeaders: [firstColumn], mapToHeader: 1};\n\n var groupedData = groupByCategories(data, cols);\n var columnHeaders = [];\n var mapToHeader = Object.assign({}, groupedData);\n var mapPos = 1;\n\n (function columnHeaderRecursion(data, pos = 0, headerMap) {\n if (typeof data !== 'object' || Array.isArray(data)) return 1;\n\n var currKeys = Object.keys(data);\n var reqLength = 0;\n\n for (let i = 0; i < currKeys.length; i++) {\n let currLength = columnHeaderRecursion(\n data[currKeys[i]], pos + 1, headerMap[currKeys[i]]);\n\n if (Array.isArray(data[currKeys[i]])) {\n headerMap[currKeys[i]] = mapPos;\n mapPos += 1;\n }\n reqLength += currLength;\n columnHeaders[pos] = !columnHeaders[pos] ?\n [firstColumn].concat(Array(currLength).fill(currKeys[i])) :\n columnHeaders[pos].concat(Array(currLength).fill(currKeys[i]));\n }\n return reqLength;\n\n })(groupedData, 0, mapToHeader);\n\n return {\n columnHeaders,\n mapToHeader,\n };\n}\n\n/**\n * accumulator has two different signatures\n * 1. it takes an array of objects, an accumulation category as a string\n * (like age), and supported accumulation type as a string (like count)\n * 2. it takes an array of objects, a callback function (which operates\n * the same as reduce), and an initial value\n */\nexport function accumulator(arr, accCat, accType, accValue) {\n if (!accCat && typeof accType !== 'function') accType = 'count';\n else if (typeof accCat === 'function') {\n accValue = accType || 0;\n accType = accCat;\n }\n\n return arr.reduce((acc, curr, index, array) => {\n if (typeof accType === 'function') {\n return accType(acc, typeof accCat === 'string' ? curr[accCat] :\n curr, index, array);\n }\n switch (accType) {\n case ('sum'): {\n acc += Number(curr[accCat]);\n return acc;\n }\n\n case ('count'): {\n acc += 1;\n return acc;\n }\n\n default: {\n acc += 1;\n return acc;\n }\n }\n }, accValue || 0);\n}\n\nexport function checkPivotCategories(actualCats, selectedCats) {\n var errMessage = [];\n\n selectedCats.forEach(selectedCat =>{\n if (actualCats.indexOf(selectedCat) === -1) errMessage.push(selectedCat);\n });\n if (errMessage.length) {\n throw new Error(\n `Check that these selected pivot categories exist: ${errMessage.join(\n ',')}`);\n }\n}\n\nexport function tableCreator(\n data, rows = [], cols = [], accCatOrCB, accTypeOrInitVal, rowHeader) {\n data = fixDataFormat(data);\n if (!data.length) return [];\n checkPivotCategories(Object.keys(data[0]), rows);\n checkPivotCategories(Object.keys(data[0]), cols);\n\n if (typeof rowHeader === 'undefined') {\n rowHeader = typeof accCatOrCB !== 'function' ?\n `${accTypeOrInitVal} ${accCatOrCB}` :\n 'Custom Agg';\n }\n\n const columnData = createColumnHeaders(data, cols, rowHeader);\n const columnHeaders = Array.isArray(columnData.columnHeaders[0]) ?\n columnData.columnHeaders :\n [columnData.columnHeaders.concat(rowHeader)];\n const mapToHeader = columnData.mapToHeader;\n const headerLength = columnHeaders[0].length;\n const formattedColumnHeaders = columnHeaders.map((value, depth) => {\n return {\n value,\n depth,\n type: 'colHeader',\n row: depth,\n };\n });\n\n let dataRows = [];\n let rawData = [];\n let prevKey = '';\n\n function rowRecurse(rowGroups, depth, rowHeaders = []) {\n for (let key in rowGroups) {\n if (Array.isArray(rowGroups[key])) {\n const recursedData = groupByCategories(rowGroups[key], cols);\n\n prevKey = '';\n\n (function recurseThroughMap(dataPos, map) {\n if (Array.isArray(dataPos)) {\n if (key === prevKey) {\n let datum = dataRows[dataRows.length - 1].value;\n\n datum[map] = accumulator(dataPos, accCatOrCB, accTypeOrInitVal);\n dataRows[dataRows.length - 1].value = datum;\n\n let rawDataDatum = rawData[rawData.length - 1].value;\n\n rawDataDatum[map] = dataPos;\n rawData[rawData.length - 1].value = rawDataDatum;\n } else {\n prevKey = key;\n let datum = [key].concat(\n Array(map - 1).fill(''),\n accumulator(dataPos, accCatOrCB, accTypeOrInitVal),\n Array(headerLength - (map + 1)).fill(''));\n let rawDataDatum = [key].concat(\n Array(map - 1).fill(''),\n [dataPos],\n Array(headerLength - (map + 1)).fill(''));\n\n rawData.push({\n value: rawDataDatum,\n type: 'data',\n depth,\n });\n dataRows.push({\n value: datum,\n type: 'data',\n depth,\n row: dataRows.length + formattedColumnHeaders.length,\n });\n }\n } else {\n for (let innerKey in dataPos) {\n recurseThroughMap(dataPos[innerKey], map[innerKey]);\n }\n }\n })(recursedData, mapToHeader || 1);\n\n } else {\n const rowHeaderValue = rowHeaders.shift();\n const value = rowHeaderValue ?\n rowHeaderValue.value :\n [key].concat(Array(headerLength - 1).fill(''));\n\n dataRows.push({\n value,\n depth,\n type: 'rowHeader',\n row: dataRows.length + formattedColumnHeaders.length,\n });\n rawData.push({\n value,\n depth,\n type: 'rowHeader',\n });\n\n rowRecurse(rowGroups[key], depth + 1, rowHeaders);\n }\n }\n }\n\n let dataGroups = [];\n\n if (rows.length > 0) {\n for (let i = 0; i < rows.length; i++) {\n // possible memoization opportunity\n rowRecurse(groupByCategories(data, rows.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < rows.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else if (cols.length > 0) {\n for (let i = 0; i < cols.length; i++) {\n rowRecurse(groupByCategories(data, cols.slice(0, i + 1)), 0, dataGroups);\n dataGroups = Object.assign([], dataRows);\n if (i + 1 < cols.length) {\n dataRows = [];\n rawData = [];\n prevKey = '';\n }\n }\n } else {\n dataRows.push({\n value: [rowHeader, accumulator(data, accCatOrCB, accTypeOrInitVal)],\n type: 'data',\n row: 1,\n depth: 0,\n });\n rawData = data.map((value) => {\n return {\n value,\n type: 0,\n row: 1,\n depth: 0,\n };\n });\n }\n\n return {\n table: formattedColumnHeaders.concat(dataRows),\n rawData: formattedColumnHeaders.concat(rawData),\n };\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/logic.js\n **/","'use strict';\n\nexport function collapse(rowNum, data) {\n const selectedRow = data.table[rowNum];\n const {type, depth} = selectedRow;\n\n if (type !== 'rowHeader' && type !== 'colHeader') {\n return {\n uncollapsed: data,\n };\n }\n\n let count = rowNum + 1;\n let currDepth = data.table[count].depth;\n let uncollapsed = {\n table: data.table.slice(0, count),\n rawData: data.rawData.slice(0, count),\n };\n\n let collapsed = {\n table: [],\n rawData: [],\n };\n\n while (count < data.table.length && currDepth > depth) {\n collapsed.rawData.push(data.rawData[count]);\n collapsed.table.push(data.table[count]);\n count += 1;\n if (count < data.table.length) currDepth = data.table[count].depth;\n }\n\n uncollapsed.table = uncollapsed.table.concat(data.table.slice(count));\n uncollapsed.rawData = uncollapsed.rawData.concat(data.rawData.slice(count));\n\n return {\n uncollapsed,\n collapsed,\n };\n}\n\nexport function expand(rowNum, currData, collapsedRows) {\n if (!collapsedRows) return currData;\n currData.table.splice(rowNum + 1, 0, ...collapsedRows.table);\n currData.rawData.splice(rowNum + 1, 0, ...collapsedRows.rawData);\n return currData;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./~/eslint-loader!./src/progressiveDiscovery.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/src/index.js b/src/index.js index 3d516f0..899d00f 100644 --- a/src/index.js +++ b/src/index.js @@ -39,6 +39,13 @@ export default class Pivot { return this; } + toggle(rowNum) { + if (rowNum in this.collapsedRows) { + return this.expand(rowNum); + } + return this.collapse(rowNum); + } + getData(rowNum) { if (!this.data.table[rowNum]) return null; if (this.collapsedRows[this.data.table[rowNum].row]) { diff --git a/test/index.spec.js b/test/index.spec.js index 9882d03..09074a5 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -348,6 +348,22 @@ describe('pivot', () => { expect(pivot.getData(1)).to.deep.equal(uncollapsedData); }); + it('should return table to normal state when toggled twice', () => { + const pivot = new Pivot( + dataArray, + rowsToPivot, + colsToPivot, + aggregationCategory, + aggregationType, + ); + + const startState = pivot.data.table; + + pivot.toggle(1).toggle(1); + + expect(startState).to.deep.equal(pivot.data.table); + }); + it('should expand correct rows', () => { const pivot = new Pivot( dataArray,