@hrforte/react-pivottable 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Utilities.js"],"names":["addSeparators","nStr","thousandsSep","decimalSep","x","String","split","x1","x2","length","rgx","test","replace","numberFormat","opts_in","defaults","digitsAfterDecimal","scaler","prefix","suffix","showOriginal","opts","Object","assign","isNaN","isFinite","scaledValue","fixedValue","toFixed","result","rx","rd","rz","naturalSort","as","bs","nas","Number","nbs","a","b","match","a1","shift","b1","sortAs","order","mapping","l_mapping","i","toLowerCase","builtInSorters","number","undefined","numA","parseFloat","numB","date","dateA","Date","dateB","getTime","string","strA","strB","stringCaseInsensitive","natural","detectDataType","values","sampleSize","Math","min","samples","slice","numberCount","dateCount","stringCount","val","parse","createSorterByType","dataType","Array","isArray","detectedType","getSort","sorters","attr","attrValues","sort","sorter","keys","usFmt","usFmtInt","usFmtPct","aggregatorTemplates","count","formatter","push","value","format","uniques","fn","uniq","record","from","includes","numInputs","sum","extremes","mode","data","quantile","q","vals","floor","ceil","runningStat","ddof","n","m","s","m_new","sqrt","Error","sumOverSum","num","denom","sumNum","sumDenom","fractionOf","wrapped","type","rowKey","colKey","selector","total","row","col","inner","aggregator","getAggregator","countUnique","f","listUnique","join","max","first","last","median","average","var","stdev","AggregatorCell","instances","primaryKey","forEach","key","targetKey","aggregators","Count","tpl","Sum","Average","Median","Minimum","Maximum","First","Last","locales","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","mthNamesEn","dayNamesEn","zeroPad","substr","derivers","bin","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","utc","p","PivotData","inputProps","props","defaultProps","PropTypes","checkPropTypes","propTypes","aggregations","normalizeAggregations","aggregationKeyLookup","agg","aggregatorName","primaryAggregation","primaryAggregatorName","aggregatorFactories","buildAggregatorFactories","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","createAggregatorCell","sorted","forEachRecord","derivedAttributes","filter","processRecord","k","valueFilter","criteria","callback","v","attrs","sortersArr","comparison","r","c","rowSorts","rows","sortDir","arrSort","rowOrder","colSorts","cols","colOrder","sortKeys","flatRowKey","fromCharCode","flatColKey","aggregationKey","resolvedKey","cell","getAggregatorCell","emptyAggregator","getInstance","map","grouped","aggName","defaultAggregatorName","aggregationsProvided","legacyAggregatorName","fallbackAggregatorName","fallbackVals","idx","normalizedVals","label","factories","input","addRecord","getOwnPropertyNames","derived","compactRecord","j","result1","oneOfType","array","object","func","isRequired","arrayOf","shape","objectOf","bool","oneOf"],"mappings":"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","file":"Utilities.js","sourcesContent":["/* eslint-disable no-undefined */\nimport PropTypes from 'prop-types';\n\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS104: Avoid inline assignments\n * DS201: Simplify complex destructure assignments\n * DS203: Remove `|| {}` from converted for-own loops\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nconst addSeparators = function(nStr, thousandsSep, decimalSep) {\n const x = String(nStr).split('.');\n let x1 = x[0];\n const x2 = x.length > 1 ? decimalSep + x[1] : '';\n const rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, `$1${thousandsSep}$2`);\n }\n return x1 + x2;\n};\n\nconst numberFormat = function(opts_in) {\n const defaults = {\n digitsAfterDecimal: 2,\n scaler: 1,\n thousandsSep: ',',\n decimalSep: '.',\n prefix: '',\n suffix: '',\n showOriginal: false,\n };\n const opts = Object.assign({}, defaults, opts_in);\n return function(x) {\n if (isNaN(x) || !isFinite(x)) {\n return '';\n }\n // Show completely original value if showOriginal is true\n if (opts.showOriginal) {\n return String(opts.scaler * x);\n }\n // When thousandsSep is empty, apply decimal formatting but skip thousand separator\n if (opts.thousandsSep === '') {\n const scaledValue = opts.scaler * x;\n const fixedValue = scaledValue.toFixed(opts.digitsAfterDecimal);\n // Apply decimal separator if needed\n const result = fixedValue.replace('.', opts.decimalSep);\n return `${opts.prefix}${result}${opts.suffix}`;\n }\n // Normal formatting with thousand separator\n const result = addSeparators(\n (opts.scaler * x).toFixed(opts.digitsAfterDecimal),\n opts.thousandsSep,\n opts.decimalSep\n );\n return `${opts.prefix}${result}${opts.suffix}`;\n };\n};\n\nconst rx = /(\\d+)|(\\D+)/g;\nconst rd = /\\d/;\nconst rz = /^0/;\nconst naturalSort = (as, bs) => {\n // nulls first\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n\n // then raw NaNs\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n\n // numbers and numbery strings group together\n const nas = Number(as);\n const nbs = Number(bs);\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n\n // within that, true numbers before numbery strings\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n\n // 'Infinity' is a textual number, so less than 'A'\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n\n // finally, \"smart\" string sorting per http://stackoverflow.com/a/4373421/112871\n let a = String(as);\n let b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!rd.test(a) || !rd.test(b)) {\n return a > b ? 1 : -1;\n }\n\n // special treatment for strings containing digits\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n const a1 = a.shift();\n const b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return a1.replace(rz, '.0') - b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n};\n\nconst sortAs = function(order) {\n const mapping = {};\n\n // sort lowercased keys similarly\n const l_mapping = {};\n for (const i in order) {\n const x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n l_mapping[x.toLowerCase()] = i;\n }\n }\n return function(a, b) {\n if (a in mapping && b in mapping) {\n return mapping[a] - mapping[b];\n } else if (a in mapping) {\n return -1;\n } else if (b in mapping) {\n return 1;\n } else if (a in l_mapping && b in l_mapping) {\n return l_mapping[a] - l_mapping[b];\n } else if (a in l_mapping) {\n return -1;\n } else if (b in l_mapping) {\n return 1;\n }\n return naturalSort(a, b);\n };\n};\n\n// Built-in sort functions for different data types\nconst builtInSorters = {\n // Number sorter - handles numeric values\n number: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const numA = typeof a === 'number' ? a : parseFloat(a);\n const numB = typeof b === 'number' ? b : parseFloat(b);\n if (isNaN(numA) && isNaN(numB)) {\n return 0;\n }\n if (isNaN(numA)) {\n return -1;\n }\n if (isNaN(numB)) {\n return 1;\n }\n return numA - numB;\n },\n\n // Date sorter - handles date values\n date: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const dateA = a instanceof Date ? a : new Date(a);\n const dateB = b instanceof Date ? b : new Date(b);\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) {\n return 0;\n }\n if (isNaN(dateA.getTime())) {\n return -1;\n }\n if (isNaN(dateB.getTime())) {\n return 1;\n }\n return dateA.getTime() - dateB.getTime();\n },\n\n // String sorter - case-sensitive\n string: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a);\n const strB = String(b);\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // String sorter - case-insensitive\n stringCaseInsensitive: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a).toLowerCase();\n const strB = String(b).toLowerCase();\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // Natural sort (default)\n natural: naturalSort,\n};\n\n// Alias for backward compatibility\n// const sorters = builtInSorters;\n\n// Auto-detect data type from sample values\nconst detectDataType = function(values) {\n if (!values || values.length === 0) {\n return 'natural';\n }\n\n const sampleSize = Math.min(10, values.length);\n const samples = values.slice(0, sampleSize);\n\n let numberCount = 0;\n let dateCount = 0;\n let stringCount = 0;\n\n for (const val of samples) {\n if (val === null || val === undefined || val === '') {\n continue;\n }\n\n // Check if it's a number\n if (typeof val === 'number' || (!isNaN(parseFloat(val)) && isFinite(val))) {\n numberCount++;\n }\n // Check if it's a date\n else if (\n val instanceof Date ||\n (!isNaN(Date.parse(val)) && String(val).match(/^\\d{4}-\\d{2}-\\d{2}/))\n ) {\n dateCount++;\n }\n // Otherwise it's a string\n else {\n stringCount++;\n }\n }\n\n // Determine the most common type\n if (numberCount > dateCount && numberCount > stringCount) {\n return 'number';\n } else if (dateCount > stringCount) {\n return 'date';\n } else if (stringCount > 0) {\n return 'string';\n }\n\n return 'natural';\n};\n\n// Create a sorter based on data type\nconst createSorterByType = function(dataType) {\n if (typeof dataType === 'function') {\n return dataType;\n }\n\n if (typeof dataType === 'string' && dataType in builtInSorters) {\n return builtInSorters[dataType];\n }\n\n // Auto-detect if dataType is an array of values\n if (Array.isArray(dataType)) {\n const detectedType = detectDataType(dataType);\n return builtInSorters[detectedType] || naturalSort;\n }\n\n return naturalSort;\n};\n\n// Get sorter for an attribute, with auto-detection support\nconst getSort = function(sorters, attr, attrValues = null) {\n if (sorters) {\n if (typeof sorters === 'function') {\n const sort = sorters(attr);\n if (typeof sort === 'function') {\n return sort;\n }\n } else if (attr in sorters) {\n const sorter = sorters[attr];\n // If it's a string (data type name) or array (sample values), create appropriate sorter\n if (typeof sorter === 'string' || Array.isArray(sorter)) {\n return createSorterByType(sorter);\n }\n // If it's already a function, use it\n if (typeof sorter === 'function') {\n return sorter;\n }\n }\n }\n\n // Auto-detect if attrValues are provided\n if (attrValues && typeof attrValues === 'object') {\n const values = Object.keys(attrValues);\n if (values.length > 0) {\n const detectedType = detectDataType(values);\n return builtInSorters[detectedType] || naturalSort;\n }\n }\n\n return naturalSort;\n};\n\n// aggregator templates default to US number formatting but this is overrideable\nconst usFmt = numberFormat();\nconst usFmtInt = numberFormat({digitsAfterDecimal: 0});\nconst usFmtPct = numberFormat({\n digitsAfterDecimal: 1,\n scaler: 100,\n suffix: '%',\n});\n\nconst aggregatorTemplates = {\n count(formatter = usFmtInt) {\n return () =>\n function() {\n return {\n count: 0,\n push() {\n this.count++;\n },\n value() {\n return this.count;\n },\n format: formatter,\n };\n };\n },\n\n uniques(fn, formatter = usFmtInt) {\n return function([attr]) {\n return function() {\n return {\n uniq: [],\n push(record) {\n if (!Array.from(this.uniq).includes(record[attr])) {\n this.uniq.push(record[attr]);\n }\n },\n value() {\n return fn(this.uniq);\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sum(formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n sum: 0,\n push(record) {\n if (!isNaN(parseFloat(record[attr]))) {\n this.sum += parseFloat(record[attr]);\n }\n },\n value() {\n return this.sum;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n extremes(mode, formatter = usFmt) {\n return function([attr]) {\n return function(data) {\n return {\n val: null,\n sorter: getSort(\n typeof data !== 'undefined' ? data.sorters : null,\n attr\n ),\n push(record) {\n let x = record[attr];\n if (['min', 'max'].includes(mode)) {\n x = parseFloat(x);\n if (!isNaN(x)) {\n this.val = Math[mode](x, this.val !== null ? this.val : x);\n }\n }\n if (\n mode === 'first' &&\n this.sorter(x, this.val !== null ? this.val : x) <= 0\n ) {\n this.val = x;\n }\n if (\n mode === 'last' &&\n this.sorter(x, this.val !== null ? this.val : x) >= 0\n ) {\n this.val = x;\n }\n },\n value() {\n return this.val;\n },\n format(x) {\n if (isNaN(x)) {\n return x;\n }\n return formatter(x);\n },\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n quantile(q, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n vals: [],\n push(record) {\n const x = parseFloat(record[attr]);\n if (!isNaN(x)) {\n this.vals.push(x);\n }\n },\n value() {\n if (this.vals.length === 0) {\n return null;\n }\n this.vals.sort((a, b) => a - b);\n const i = (this.vals.length - 1) * q;\n return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n runningStat(mode = 'mean', ddof = 1, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n n: 0.0,\n m: 0.0,\n s: 0.0,\n push(record) {\n const x = parseFloat(record[attr]);\n if (isNaN(x)) {\n return;\n }\n this.n += 1.0;\n if (this.n === 1.0) {\n this.m = x;\n }\n const m_new = this.m + (x - this.m) / this.n;\n this.s = this.s + (x - this.m) * (x - m_new);\n this.m = m_new;\n },\n value() {\n if (mode === 'mean') {\n if (this.n === 0) {\n return 0 / 0;\n }\n return this.m;\n }\n if (this.n <= ddof) {\n return 0;\n }\n switch (mode) {\n case 'var':\n return this.s / (this.n - ddof);\n case 'stdev':\n return Math.sqrt(this.s / (this.n - ddof));\n default:\n throw new Error('unknown mode for runningStat');\n }\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sumOverSum(formatter = usFmt) {\n return function([num, denom]) {\n return function() {\n return {\n sumNum: 0,\n sumDenom: 0,\n push(record) {\n if (!isNaN(parseFloat(record[num]))) {\n this.sumNum += parseFloat(record[num]);\n }\n if (!isNaN(parseFloat(record[denom]))) {\n this.sumDenom += parseFloat(record[denom]);\n }\n },\n value() {\n return this.sumNum / this.sumDenom;\n },\n format: formatter,\n numInputs:\n typeof num !== 'undefined' && typeof denom !== 'undefined' ? 0 : 2,\n };\n };\n };\n },\n\n fractionOf(wrapped, type = 'total', formatter = usFmtPct) {\n return (...x) =>\n function(data, rowKey, colKey) {\n return {\n selector: {total: [[], []], row: [rowKey, []], col: [[], colKey]}[\n type\n ],\n inner: wrapped(...Array.from(x || []))(data, rowKey, colKey),\n push(record) {\n this.inner.push(record);\n },\n format: formatter,\n value() {\n const aggregator = data\n .getAggregator(...Array.from(this.selector || []))\n \n return (\n this.inner.value() /\n ((aggregator.inner && aggregator.inner.value()) || 0)\n );\n },\n numInputs: wrapped(...Array.from(x || []))().numInputs,\n };\n };\n },\n};\n\naggregatorTemplates.countUnique = f =>\n aggregatorTemplates.uniques(x => x.length, f);\naggregatorTemplates.listUnique = s =>\n aggregatorTemplates.uniques(\n x => x.join(s),\n x => x\n );\naggregatorTemplates.max = f => aggregatorTemplates.extremes('max', f);\naggregatorTemplates.min = f => aggregatorTemplates.extremes('min', f);\naggregatorTemplates.first = f => aggregatorTemplates.extremes('first', f);\naggregatorTemplates.last = f => aggregatorTemplates.extremes('last', f);\naggregatorTemplates.median = f => aggregatorTemplates.quantile(0.5, f);\naggregatorTemplates.average = f =>\n aggregatorTemplates.runningStat('mean', 1, f);\naggregatorTemplates.var = (ddof, f) =>\n aggregatorTemplates.runningStat('var', ddof, f);\naggregatorTemplates.stdev = (ddof, f) =>\n aggregatorTemplates.runningStat('stdev', ddof, f);\n\nclass AggregatorCell {\n constructor(instances, primaryKey) {\n this.instances = instances;\n this.primaryKey = primaryKey;\n }\n\n push(record) {\n Object.keys(this.instances).forEach(key => {\n this.instances[key].push(record);\n });\n }\n\n getInstance(key) {\n const targetKey = key || this.primaryKey;\n if (targetKey && this.instances[targetKey]) {\n return this.instances[targetKey];\n }\n const first =\n this.instances[this.primaryKey] ||\n this.instances[Object.keys(this.instances)[0]];\n return first || null;\n }\n}\n\n// default aggregators & renderers use US naming and number formatting\nconst aggregators = (tpl => ({\n Count: tpl.count(usFmtInt),\n 'Count Unique Values': tpl.countUnique(usFmtInt),\n 'List Unique Values': tpl.listUnique(', '),\n Sum: tpl.sum(usFmt),\n 'Integer Sum': tpl.sum(usFmtInt),\n Average: tpl.average(usFmt),\n Median: tpl.median(usFmt),\n 'Sample Variance': tpl.var(1, usFmt),\n 'Sample Standard Deviation': tpl.stdev(1, usFmt),\n Minimum: tpl.min(usFmt),\n Maximum: tpl.max(usFmt),\n First: tpl.first(usFmt),\n Last: tpl.last(usFmt),\n 'Sum over Sum': tpl.sumOverSum(usFmt),\n 'Sum as Fraction of Total': tpl.fractionOf(tpl.sum(), 'total', usFmtPct),\n 'Sum as Fraction of Rows': tpl.fractionOf(tpl.sum(), 'row', usFmtPct),\n 'Sum as Fraction of Columns': tpl.fractionOf(tpl.sum(), 'col', usFmtPct),\n 'Count as Fraction of Total': tpl.fractionOf(tpl.count(), 'total', usFmtPct),\n 'Count as Fraction of Rows': tpl.fractionOf(tpl.count(), 'row', usFmtPct),\n 'Count as Fraction of Columns': tpl.fractionOf(tpl.count(), 'col', usFmtPct),\n}))(aggregatorTemplates);\n\nconst locales = {\n en: {\n aggregators,\n localeStrings: {\n renderError: 'An error occurred rendering the PivotTable results.',\n computeError: 'An error occurred computing the PivotTable results.',\n uiRenderError: 'An error occurred rendering the PivotTable UI.',\n selectAll: 'Select All',\n selectNone: 'Select None',\n tooMany: '(too many to list)',\n filterResults: 'Filter values',\n apply: 'Apply',\n cancel: 'Cancel',\n totals: 'Totals',\n vs: 'vs',\n by: 'by',\n },\n },\n};\n\n// dateFormat deriver l10n requires month and day names to be passed in directly\nconst mthNamesEn = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst dayNamesEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst zeroPad = number => `0${number}`.substr(-2, 2); // eslint-disable-line no-magic-numbers\n\nconst derivers = {\n bin(col, binWidth) {\n return record => record[col] - (record[col] % binWidth);\n },\n dateFormat(\n col,\n formatString,\n utcOutput = false,\n mthNames = mthNamesEn,\n dayNames = dayNamesEn\n ) {\n const utc = utcOutput ? 'UTC' : '';\n return function(record) {\n const date = new Date(Date.parse(record[col]));\n if (isNaN(date)) {\n return '';\n }\n return formatString.replace(/%(.)/g, function(m, p) {\n switch (p) {\n case 'y':\n return date[`get${utc}FullYear`]();\n case 'm':\n return zeroPad(date[`get${utc}Month`]() + 1);\n case 'n':\n return mthNames[date[`get${utc}Month`]()];\n case 'd':\n return zeroPad(date[`get${utc}Date`]());\n case 'w':\n return dayNames[date[`get${utc}Day`]()];\n case 'x':\n return date[`get${utc}Day`]();\n case 'H':\n return zeroPad(date[`get${utc}Hours`]());\n case 'M':\n return zeroPad(date[`get${utc}Minutes`]());\n case 'S':\n return zeroPad(date[`get${utc}Seconds`]());\n default:\n return `%${p}`;\n }\n });\n };\n },\n};\n\n/*\nData Model class\n*/\n\nclass PivotData {\n constructor(inputProps = {}) {\n this.props = Object.assign({}, PivotData.defaultProps, inputProps);\n PropTypes.checkPropTypes(\n PivotData.propTypes,\n this.props,\n 'prop',\n 'PivotData'\n );\n\n this.aggregations = this.normalizeAggregations();\n this.aggregationKeyLookup = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.aggregationKeyLookup)) {\n this.aggregationKeyLookup[agg.aggregatorName] = agg.key;\n }\n });\n if (this.aggregations.length === 0) {\n throw new Error('PivotData requires at least one aggregation');\n }\n this.primaryAggregation = this.aggregations[0];\n this.primaryAggregatorName = this.primaryAggregation.aggregatorName;\n\n this.aggregatorFactories = this.buildAggregatorFactories();\n this.tree = {};\n this.rowKeys = [];\n this.colKeys = [];\n this.rowTotals = {};\n this.colTotals = {};\n this.allTotal = this.createAggregatorCell([], []);\n this.sorted = false;\n\n // iterate through input, accumulating data for cells\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (this.filter(record)) {\n this.processRecord(record);\n }\n }\n );\n }\n\n filter(record) {\n for (const k in this.props.valueFilter) {\n if (record[k] in this.props.valueFilter[k]) {\n return false;\n }\n }\n return true;\n }\n\n forEachMatchingRecord(criteria, callback) {\n return PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (!this.filter(record)) {\n return;\n }\n for (const k in criteria) {\n const v = criteria[k];\n if (v !== (k in record ? record[k] : 'null')) {\n return;\n }\n }\n callback(record);\n }\n );\n }\n\n arrSort(attrs) {\n let a;\n const sortersArr = (() => {\n const result = [];\n for (a of Array.from(attrs)) {\n result.push(getSort(this.props.sorters, a));\n }\n return result;\n })();\n return function(a, b) {\n for (const i of Object.keys(sortersArr || {})) {\n const sorter = sortersArr[i];\n const comparison = sorter(a[i], b[i]);\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n }\n\n sortKeys() {\n if (!this.sorted) {\n this.sorted = true;\n const v = (r, c) => this.getAggregator(r, c).value();\n\n // Handle per-row sorting\n if (this.props.rowSorts && Object.keys(this.props.rowSorts).length > 0) {\n const rowSorts = this.props.rowSorts;\n this.rowKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.rows.length; i++) {\n const attr = this.props.rows[i];\n if (attr && rowSorts[attr]) {\n const sortDir = rowSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.rows)(a, b);\n });\n } else {\n // Use global row order\n switch (this.props.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort((a, b) => naturalSort(v(a, []), v(b, [])));\n break;\n case 'value_z_to_a':\n this.rowKeys.sort((a, b) => -naturalSort(v(a, []), v(b, [])));\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.props.rows));\n }\n }\n\n // Handle per-column sorting\n if (this.props.colSorts && Object.keys(this.props.colSorts).length > 0) {\n const colSorts = this.props.colSorts;\n this.colKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.cols.length; i++) {\n const attr = this.props.cols[i];\n if (attr && colSorts[attr]) {\n const sortDir = colSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.cols)(a, b);\n });\n } else {\n // Use global col order\n switch (this.props.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort((a, b) => naturalSort(v([], a), v([], b)));\n break;\n case 'value_z_to_a':\n this.colKeys.sort((a, b) => -naturalSort(v([], a), v([], b)));\n break;\n default:\n this.colKeys.sort(this.arrSort(this.props.cols));\n }\n }\n }\n }\n\n getColKeys() {\n this.sortKeys();\n return this.colKeys;\n }\n\n getRowKeys() {\n this.sortKeys();\n return this.rowKeys;\n }\n\n processRecord(record) {\n // this code is called in a tight loop\n const colKey = [];\n const rowKey = [];\n for (const x of Array.from(this.props.cols)) {\n colKey.push(x in record ? record[x] : 'null');\n }\n for (const x of Array.from(this.props.rows)) {\n rowKey.push(x in record ? record[x] : 'null');\n }\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n\n this.allTotal.push(record);\n\n if (rowKey.length !== 0) {\n if (!this.rowTotals[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowTotals[flatRowKey] = this.createAggregatorCell(rowKey, []);\n }\n this.rowTotals[flatRowKey].push(record);\n }\n\n if (colKey.length !== 0) {\n if (!this.colTotals[flatColKey]) {\n this.colKeys.push(colKey);\n this.colTotals[flatColKey] = this.createAggregatorCell([], colKey);\n }\n this.colTotals[flatColKey].push(record);\n }\n\n if (colKey.length !== 0 && rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (!this.tree[flatRowKey][flatColKey]) {\n this.tree[flatRowKey][flatColKey] = this.createAggregatorCell(\n rowKey,\n colKey\n );\n }\n this.tree[flatRowKey][flatColKey].push(record);\n }\n }\n\n getAggregator(rowKey, colKey, aggregationKey = this.primaryAggregation.key) {\n let resolvedKey = aggregationKey;\n if (\n resolvedKey &&\n !(resolvedKey in this.aggregatorFactories) &&\n this.aggregationKeyLookup[resolvedKey]\n ) {\n resolvedKey = this.aggregationKeyLookup[resolvedKey];\n }\n const cell = this.getAggregatorCell(rowKey, colKey);\n if (!cell) {\n return PivotData.emptyAggregator;\n }\n return cell.getInstance(resolvedKey) || PivotData.emptyAggregator;\n }\n\n getAggregatorCell(rowKey, colKey) {\n let cell;\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n if (rowKey.length === 0 && colKey.length === 0) {\n cell = this.allTotal;\n } else if (rowKey.length === 0) {\n cell = this.colTotals[flatColKey];\n } else if (colKey.length === 0) {\n cell = this.rowTotals[flatRowKey];\n } else {\n cell =\n this.tree[flatRowKey] && this.tree[flatRowKey][flatColKey]\n ? this.tree[flatRowKey][flatColKey]\n : null;\n }\n return cell || null;\n }\n\n getAggregatorNames() {\n return this.aggregations.map(agg => agg.aggregatorName);\n }\n\n getAggregations() {\n return this.aggregations.map(agg => Object.assign({}, agg));\n }\n\n getPrimaryAggregatorName() {\n return this.primaryAggregatorName;\n }\n\n getPrimaryAggregation() {\n return Object.assign({}, this.primaryAggregation);\n }\n\n /**\n * Groups aggregations by their aggregatorName\n * @returns {Object} Object mapping aggregator names to arrays of aggregations\n * Example: { 'Count': [agg1, agg2], 'Sum': [agg3] }\n */\n groupAggregationsByType() {\n const grouped = {};\n this.aggregations.forEach(agg => {\n const aggName = agg.aggregatorName;\n if (!grouped[aggName]) {\n grouped[aggName] = [];\n }\n grouped[aggName].push(agg);\n });\n return grouped;\n }\n\n /**\n * Gets aggregations for a specific aggregator type\n * @param {string} aggregatorName - The aggregator name (e.g., 'Count', 'Sum')\n * @returns {Array} Array of aggregation configurations\n */\n getAggregationsByType(aggregatorName) {\n return this.aggregations.filter(agg => agg.aggregatorName === aggregatorName);\n }\n\n normalizeAggregations() {\n const defaultAggregatorName = Object.keys(this.props.aggregators)[0];\n const aggregationsProvided =\n Array.isArray(this.props.aggregations) &&\n this.props.aggregations.length > 0;\n const legacyAggregatorName =\n typeof this.props.aggregatorName === 'string'\n ? this.props.aggregatorName\n : null;\n const fallbackAggregatorName =\n legacyAggregatorName || defaultAggregatorName;\n const fallbackVals = Array.isArray(this.props.vals) ? this.props.vals : [];\n let aggregations = [];\n if (aggregationsProvided) {\n aggregations = this.props.aggregations;\n } else {\n aggregations = [\n {\n aggregatorName: fallbackAggregatorName,\n vals: fallbackVals,\n },\n ];\n }\n return aggregations.map((agg, idx) => {\n const aggregatorName =\n agg.aggregatorName ||\n (aggregationsProvided ? defaultAggregatorName : fallbackAggregatorName);\n const vals =\n typeof agg.vals !== 'undefined'\n ? agg.vals\n : aggregationsProvided\n ? []\n : fallbackVals.slice();\n const normalizedVals = Array.isArray(vals) ? vals : [];\n const key =\n agg.key ||\n `${aggregatorName || 'agg'}-${\n normalizedVals.length ? normalizedVals.join('|') : ''\n }-${idx}`;\n const label =\n agg.label ||\n (normalizedVals.length\n ? `${aggregatorName} of ${normalizedVals.join(', ')}`\n : aggregatorName);\n return {\n key,\n aggregatorName,\n vals: normalizedVals,\n label,\n };\n });\n }\n\n buildAggregatorFactories() {\n const factories = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.props.aggregators)) {\n throw new Error(`unknown aggregator ${agg.aggregatorName}`);\n }\n factories[agg.key] = this.props.aggregators[agg.aggregatorName](agg.vals);\n });\n return factories;\n }\n\n createAggregatorCell(rowKey, colKey) {\n const instances = {};\n this.aggregations.forEach(agg => {\n instances[agg.key] = this.aggregatorFactories[agg.key](\n this,\n rowKey,\n colKey\n );\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n }\n}\n\nPivotData.emptyAggregator = {\n push() {},\n value() {\n return null;\n },\n format() {\n return '';\n },\n};\n\n// can handle arrays or jQuery selections of tables\nPivotData.forEachRecord = function(input, derivedAttributes, f) {\n let addRecord, record;\n if (Object.getOwnPropertyNames(derivedAttributes).length === 0) {\n addRecord = f;\n } else {\n addRecord = function(record) {\n for (const k in derivedAttributes) {\n const derived = derivedAttributes[k](record);\n if (derived !== null) {\n record[k] = derived;\n }\n }\n return f(record);\n };\n }\n\n // if it's a function, have it call us back\n if (typeof input === 'function') {\n return input(addRecord);\n } else if (Array.isArray(input)) {\n if (Array.isArray(input[0])) {\n // array of arrays\n return (() => {\n const result = [];\n for (const i of Object.keys(input || {})) {\n const compactRecord = input[i];\n if (i > 0) {\n record = {};\n for (const j of Object.keys(input[0] || {})) {\n const k = input[0][j];\n record[k] = compactRecord[j];\n }\n result.push(addRecord(record));\n }\n }\n return result;\n })();\n }\n\n // array of objects\n return (() => {\n const result1 = [];\n for (record of Array.from(input)) {\n result1.push(addRecord(record));\n }\n return result1;\n })();\n }\n throw new Error('unknown input format');\n};\n\nPivotData.defaultProps = {\n aggregators: aggregators,\n cols: [],\n rows: [],\n vals: [],\n aggregatorName: Object.keys(aggregators)[0],\n aggregations: [],\n sorters: {},\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n rowSorts: {},\n colSorts: {},\n derivedAttributes: {},\n};\n\nPivotData.propTypes = {\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.func])\n .isRequired,\n aggregatorName: PropTypes.string,\n aggregations: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string,\n aggregatorName: PropTypes.string,\n vals: PropTypes.arrayOf(PropTypes.string),\n label: PropTypes.string,\n })\n ),\n cols: PropTypes.arrayOf(PropTypes.string),\n rows: PropTypes.arrayOf(PropTypes.string),\n vals: PropTypes.arrayOf(PropTypes.string),\n valueFilter: PropTypes.objectOf(PropTypes.objectOf(PropTypes.bool)),\n sorters: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.objectOf(PropTypes.func),\n ]),\n derivedAttributes: PropTypes.objectOf(PropTypes.func),\n rowOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n colOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n};\n\nexport {\n aggregatorTemplates,\n aggregators,\n derivers,\n locales,\n naturalSort,\n numberFormat,\n getSort,\n sortAs,\n builtInSorters,\n detectDataType,\n createSorterByType,\n PivotData,\n};\n"]}
1
+ {"version":3,"sources":["../src/Utilities.js"],"names":["addSeparators","nStr","thousandsSep","decimalSep","x","String","split","x1","x2","length","rgx","test","replace","numberFormat","opts_in","defaults","digitsAfterDecimal","scaler","prefix","suffix","showOriginal","opts","Object","assign","isNaN","isFinite","scaledValue","fixedValue","toFixed","result","rx","rd","rz","naturalSort","as","bs","nas","Number","nbs","a","b","match","a1","shift","b1","sortAs","order","mapping","l_mapping","i","toLowerCase","builtInSorters","number","undefined","numA","parseFloat","numB","date","dateA","Date","dateB","getTime","string","strA","strB","stringCaseInsensitive","natural","detectDataType","values","sampleSize","Math","min","samples","slice","numberCount","dateCount","stringCount","val","parse","createSorterByType","dataType","Array","isArray","detectedType","getSort","sorters","attr","attrValues","sort","sorter","keys","usFmt","usFmtInt","usFmtPct","RECORD_PROGRESS_BATCH_SIZE","sortersHaveFunctions","some","aggregatorTemplates","count","formatter","push","value","format","uniques","fn","uniq","record","from","includes","numInputs","sum","extremes","mode","data","quantile","q","vals","floor","ceil","runningStat","ddof","n","m","s","m_new","sqrt","Error","sumOverSum","num","denom","sumNum","sumDenom","fractionOf","wrapped","type","rowKey","colKey","selector","total","row","col","inner","aggregator","getAggregator","countUnique","f","listUnique","join","max","first","last","median","average","var","stdev","AggregatorCell","instances","primaryKey","forEach","key","targetKey","aggregators","Count","tpl","Sum","Average","Median","Minimum","Maximum","First","Last","locales","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","mthNamesEn","dayNamesEn","zeroPad","substr","derivers","bin","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","utc","p","PivotData","inputProps","props","defaultProps","PropTypes","checkPropTypes","propTypes","aggregations","normalizeAggregations","aggregationKeyLookup","agg","aggregatorName","primaryAggregation","primaryAggregatorName","aggregatorFactories","buildAggregatorFactories","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","createAggregatorCell","sorted","precomputedData","hydrateFromPrecomputed","progressHook","onRecordProcessed","recordHandler","filter","processRecord","recordsProcessed","forEachRecord","derivedAttributes","precomputed","formatSources","makeCell","serializedCell","source","outlet","hydrateTotals","target","flatKey","map","flatRowKey","k","valueFilter","criteria","callback","v","attrs","sortersArr","comparison","r","c","rowSorts","rows","sortDir","arrSort","rowOrder","colSorts","cols","colOrder","sortKeys","fromCharCode","flatColKey","aggregationKey","resolvedKey","cell","getAggregatorCell","emptyAggregator","getInstance","grouped","aggName","defaultAggregatorName","aggregationsProvided","legacyAggregatorName","fallbackAggregatorName","fallbackVals","idx","normalizedVals","label","factories","input","addRecord","getOwnPropertyNames","derived","compactRecord","j","result1","oneOfType","array","object","func","isRequired","arrayOf","shape","objectOf","bool","oneOf"],"mappings":"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","file":"Utilities.js","sourcesContent":["/* eslint-disable no-undefined */\nimport PropTypes from 'prop-types';\n\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS104: Avoid inline assignments\n * DS201: Simplify complex destructure assignments\n * DS203: Remove `|| {}` from converted for-own loops\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nconst addSeparators = function(nStr, thousandsSep, decimalSep) {\n const x = String(nStr).split('.');\n let x1 = x[0];\n const x2 = x.length > 1 ? decimalSep + x[1] : '';\n const rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, `$1${thousandsSep}$2`);\n }\n return x1 + x2;\n};\n\nconst numberFormat = function(opts_in) {\n const defaults = {\n digitsAfterDecimal: 2,\n scaler: 1,\n thousandsSep: ',',\n decimalSep: '.',\n prefix: '',\n suffix: '',\n showOriginal: false,\n };\n const opts = Object.assign({}, defaults, opts_in);\n return function(x) {\n if (isNaN(x) || !isFinite(x)) {\n return '';\n }\n // Show completely original value if showOriginal is true\n if (opts.showOriginal) {\n return String(opts.scaler * x);\n }\n // When thousandsSep is empty, apply decimal formatting but skip thousand separator\n if (opts.thousandsSep === '') {\n const scaledValue = opts.scaler * x;\n const fixedValue = scaledValue.toFixed(opts.digitsAfterDecimal);\n // Apply decimal separator if needed\n const result = fixedValue.replace('.', opts.decimalSep);\n return `${opts.prefix}${result}${opts.suffix}`;\n }\n // Normal formatting with thousand separator\n const result = addSeparators(\n (opts.scaler * x).toFixed(opts.digitsAfterDecimal),\n opts.thousandsSep,\n opts.decimalSep\n );\n return `${opts.prefix}${result}${opts.suffix}`;\n };\n};\n\nconst rx = /(\\d+)|(\\D+)/g;\nconst rd = /\\d/;\nconst rz = /^0/;\nconst naturalSort = (as, bs) => {\n // nulls first\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n\n // then raw NaNs\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n\n // numbers and numbery strings group together\n const nas = Number(as);\n const nbs = Number(bs);\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n\n // within that, true numbers before numbery strings\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n\n // 'Infinity' is a textual number, so less than 'A'\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n\n // finally, \"smart\" string sorting per http://stackoverflow.com/a/4373421/112871\n let a = String(as);\n let b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!rd.test(a) || !rd.test(b)) {\n return a > b ? 1 : -1;\n }\n\n // special treatment for strings containing digits\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n const a1 = a.shift();\n const b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return a1.replace(rz, '.0') - b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n};\n\nconst sortAs = function(order) {\n const mapping = {};\n\n // sort lowercased keys similarly\n const l_mapping = {};\n for (const i in order) {\n const x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n l_mapping[x.toLowerCase()] = i;\n }\n }\n return function(a, b) {\n if (a in mapping && b in mapping) {\n return mapping[a] - mapping[b];\n } else if (a in mapping) {\n return -1;\n } else if (b in mapping) {\n return 1;\n } else if (a in l_mapping && b in l_mapping) {\n return l_mapping[a] - l_mapping[b];\n } else if (a in l_mapping) {\n return -1;\n } else if (b in l_mapping) {\n return 1;\n }\n return naturalSort(a, b);\n };\n};\n\n// Built-in sort functions for different data types\nconst builtInSorters = {\n // Number sorter - handles numeric values\n number: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const numA = typeof a === 'number' ? a : parseFloat(a);\n const numB = typeof b === 'number' ? b : parseFloat(b);\n if (isNaN(numA) && isNaN(numB)) {\n return 0;\n }\n if (isNaN(numA)) {\n return -1;\n }\n if (isNaN(numB)) {\n return 1;\n }\n return numA - numB;\n },\n\n // Date sorter - handles date values\n date: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const dateA = a instanceof Date ? a : new Date(a);\n const dateB = b instanceof Date ? b : new Date(b);\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) {\n return 0;\n }\n if (isNaN(dateA.getTime())) {\n return -1;\n }\n if (isNaN(dateB.getTime())) {\n return 1;\n }\n return dateA.getTime() - dateB.getTime();\n },\n\n // String sorter - case-sensitive\n string: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a);\n const strB = String(b);\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // String sorter - case-insensitive\n stringCaseInsensitive: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a).toLowerCase();\n const strB = String(b).toLowerCase();\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // Natural sort (default)\n natural: naturalSort,\n};\n\n// Alias for backward compatibility\n// const sorters = builtInSorters;\n\n// Auto-detect data type from sample values\nconst detectDataType = function(values) {\n if (!values || values.length === 0) {\n return 'natural';\n }\n\n const sampleSize = Math.min(10, values.length);\n const samples = values.slice(0, sampleSize);\n\n let numberCount = 0;\n let dateCount = 0;\n let stringCount = 0;\n\n for (const val of samples) {\n if (val === null || val === undefined || val === '') {\n continue;\n }\n\n // Check if it's a number\n if (typeof val === 'number' || (!isNaN(parseFloat(val)) && isFinite(val))) {\n numberCount++;\n }\n // Check if it's a date\n else if (\n val instanceof Date ||\n (!isNaN(Date.parse(val)) && String(val).match(/^\\d{4}-\\d{2}-\\d{2}/))\n ) {\n dateCount++;\n }\n // Otherwise it's a string\n else {\n stringCount++;\n }\n }\n\n // Determine the most common type\n if (numberCount > dateCount && numberCount > stringCount) {\n return 'number';\n } else if (dateCount > stringCount) {\n return 'date';\n } else if (stringCount > 0) {\n return 'string';\n }\n\n return 'natural';\n};\n\n// Create a sorter based on data type\nconst createSorterByType = function(dataType) {\n if (typeof dataType === 'function') {\n return dataType;\n }\n\n if (typeof dataType === 'string' && dataType in builtInSorters) {\n return builtInSorters[dataType];\n }\n\n // Auto-detect if dataType is an array of values\n if (Array.isArray(dataType)) {\n const detectedType = detectDataType(dataType);\n return builtInSorters[detectedType] || naturalSort;\n }\n\n return naturalSort;\n};\n\n// Get sorter for an attribute, with auto-detection support\nconst getSort = function(sorters, attr, attrValues = null) {\n if (sorters) {\n if (typeof sorters === 'function') {\n const sort = sorters(attr);\n if (typeof sort === 'function') {\n return sort;\n }\n } else if (attr in sorters) {\n const sorter = sorters[attr];\n // If it's a string (data type name) or array (sample values), create appropriate sorter\n if (typeof sorter === 'string' || Array.isArray(sorter)) {\n return createSorterByType(sorter);\n }\n // If it's already a function, use it\n if (typeof sorter === 'function') {\n return sorter;\n }\n }\n }\n\n // Auto-detect if attrValues are provided\n if (attrValues && typeof attrValues === 'object') {\n const values = Object.keys(attrValues);\n if (values.length > 0) {\n const detectedType = detectDataType(values);\n return builtInSorters[detectedType] || naturalSort;\n }\n }\n\n return naturalSort;\n};\n\n// aggregator templates default to US number formatting but this is overrideable\nconst usFmt = numberFormat();\nconst usFmtInt = numberFormat({digitsAfterDecimal: 0});\nconst usFmtPct = numberFormat({\n digitsAfterDecimal: 1,\n scaler: 100,\n suffix: '%',\n});\n\n// Emit a progress callback every N processed records without adding\n// measurable overhead to the per-record loop.\nconst RECORD_PROGRESS_BATCH_SIZE = 25000;\n\n// Returns true when the sorters prop itself, or any of its entries, is a\n// function. Function-based sorters cannot be transferred to a Web Worker, so\n// PivotData re-applies them on the main thread after worker hydration.\nconst sortersHaveFunctions = function(sorters) {\n if (typeof sorters === 'function') {\n return true;\n }\n if (!sorters || typeof sorters !== 'object') {\n return false;\n }\n return Object.keys(sorters).some(attr => typeof sorters[attr] === 'function');\n};\n\nconst aggregatorTemplates = {\n count(formatter = usFmtInt) {\n return () =>\n function() {\n return {\n count: 0,\n push() {\n this.count++;\n },\n value() {\n return this.count;\n },\n format: formatter,\n };\n };\n },\n\n uniques(fn, formatter = usFmtInt) {\n return function([attr]) {\n return function() {\n return {\n uniq: [],\n push(record) {\n if (!Array.from(this.uniq).includes(record[attr])) {\n this.uniq.push(record[attr]);\n }\n },\n value() {\n return fn(this.uniq);\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sum(formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n sum: 0,\n push(record) {\n if (!isNaN(parseFloat(record[attr]))) {\n this.sum += parseFloat(record[attr]);\n }\n },\n value() {\n return this.sum;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n extremes(mode, formatter = usFmt) {\n return function([attr]) {\n return function(data) {\n return {\n val: null,\n sorter: getSort(\n typeof data !== 'undefined' ? data.sorters : null,\n attr\n ),\n push(record) {\n let x = record[attr];\n if (['min', 'max'].includes(mode)) {\n x = parseFloat(x);\n if (!isNaN(x)) {\n this.val = Math[mode](x, this.val !== null ? this.val : x);\n }\n }\n if (\n mode === 'first' &&\n this.sorter(x, this.val !== null ? this.val : x) <= 0\n ) {\n this.val = x;\n }\n if (\n mode === 'last' &&\n this.sorter(x, this.val !== null ? this.val : x) >= 0\n ) {\n this.val = x;\n }\n },\n value() {\n return this.val;\n },\n format(x) {\n if (isNaN(x)) {\n return x;\n }\n return formatter(x);\n },\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n quantile(q, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n vals: [],\n push(record) {\n const x = parseFloat(record[attr]);\n if (!isNaN(x)) {\n this.vals.push(x);\n }\n },\n value() {\n if (this.vals.length === 0) {\n return null;\n }\n this.vals.sort((a, b) => a - b);\n const i = (this.vals.length - 1) * q;\n return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n runningStat(mode = 'mean', ddof = 1, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n n: 0.0,\n m: 0.0,\n s: 0.0,\n push(record) {\n const x = parseFloat(record[attr]);\n if (isNaN(x)) {\n return;\n }\n this.n += 1.0;\n if (this.n === 1.0) {\n this.m = x;\n }\n const m_new = this.m + (x - this.m) / this.n;\n this.s = this.s + (x - this.m) * (x - m_new);\n this.m = m_new;\n },\n value() {\n if (mode === 'mean') {\n if (this.n === 0) {\n return 0 / 0;\n }\n return this.m;\n }\n if (this.n <= ddof) {\n return 0;\n }\n switch (mode) {\n case 'var':\n return this.s / (this.n - ddof);\n case 'stdev':\n return Math.sqrt(this.s / (this.n - ddof));\n default:\n throw new Error('unknown mode for runningStat');\n }\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sumOverSum(formatter = usFmt) {\n return function([num, denom]) {\n return function() {\n return {\n sumNum: 0,\n sumDenom: 0,\n push(record) {\n if (!isNaN(parseFloat(record[num]))) {\n this.sumNum += parseFloat(record[num]);\n }\n if (!isNaN(parseFloat(record[denom]))) {\n this.sumDenom += parseFloat(record[denom]);\n }\n },\n value() {\n return this.sumNum / this.sumDenom;\n },\n format: formatter,\n numInputs:\n typeof num !== 'undefined' && typeof denom !== 'undefined' ? 0 : 2,\n };\n };\n };\n },\n\n fractionOf(wrapped, type = 'total', formatter = usFmtPct) {\n return (...x) =>\n function(data, rowKey, colKey) {\n return {\n selector: {total: [[], []], row: [rowKey, []], col: [[], colKey]}[\n type\n ],\n inner: wrapped(...Array.from(x || []))(data, rowKey, colKey),\n push(record) {\n this.inner.push(record);\n },\n format: formatter,\n value() {\n const aggregator = data.getAggregator(\n ...Array.from(this.selector || [])\n );\n\n return (\n this.inner.value() /\n ((aggregator.inner && aggregator.inner.value()) || 0)\n );\n },\n numInputs: wrapped(...Array.from(x || []))().numInputs,\n };\n };\n },\n};\n\naggregatorTemplates.countUnique = f =>\n aggregatorTemplates.uniques(x => x.length, f);\naggregatorTemplates.listUnique = s =>\n aggregatorTemplates.uniques(\n x => x.join(s),\n x => x\n );\naggregatorTemplates.max = f => aggregatorTemplates.extremes('max', f);\naggregatorTemplates.min = f => aggregatorTemplates.extremes('min', f);\naggregatorTemplates.first = f => aggregatorTemplates.extremes('first', f);\naggregatorTemplates.last = f => aggregatorTemplates.extremes('last', f);\naggregatorTemplates.median = f => aggregatorTemplates.quantile(0.5, f);\naggregatorTemplates.average = f =>\n aggregatorTemplates.runningStat('mean', 1, f);\naggregatorTemplates.var = (ddof, f) =>\n aggregatorTemplates.runningStat('var', ddof, f);\naggregatorTemplates.stdev = (ddof, f) =>\n aggregatorTemplates.runningStat('stdev', ddof, f);\n\nclass AggregatorCell {\n constructor(instances, primaryKey) {\n this.instances = instances;\n this.primaryKey = primaryKey;\n }\n\n push(record) {\n Object.keys(this.instances).forEach(key => {\n this.instances[key].push(record);\n });\n }\n\n getInstance(key) {\n const targetKey = key || this.primaryKey;\n if (targetKey && this.instances[targetKey]) {\n return this.instances[targetKey];\n }\n const first =\n this.instances[this.primaryKey] ||\n this.instances[Object.keys(this.instances)[0]];\n return first || null;\n }\n}\n\n// default aggregators & renderers use US naming and number formatting\nconst aggregators = (tpl => ({\n Count: tpl.count(usFmtInt),\n 'Count Unique Values': tpl.countUnique(usFmtInt),\n 'List Unique Values': tpl.listUnique(', '),\n Sum: tpl.sum(usFmt),\n 'Integer Sum': tpl.sum(usFmtInt),\n Average: tpl.average(usFmt),\n Median: tpl.median(usFmt),\n 'Sample Variance': tpl.var(1, usFmt),\n 'Sample Standard Deviation': tpl.stdev(1, usFmt),\n Minimum: tpl.min(usFmt),\n Maximum: tpl.max(usFmt),\n First: tpl.first(usFmt),\n Last: tpl.last(usFmt),\n 'Sum over Sum': tpl.sumOverSum(usFmt),\n 'Sum as Fraction of Total': tpl.fractionOf(tpl.sum(), 'total', usFmtPct),\n 'Sum as Fraction of Rows': tpl.fractionOf(tpl.sum(), 'row', usFmtPct),\n 'Sum as Fraction of Columns': tpl.fractionOf(tpl.sum(), 'col', usFmtPct),\n 'Count as Fraction of Total': tpl.fractionOf(tpl.count(), 'total', usFmtPct),\n 'Count as Fraction of Rows': tpl.fractionOf(tpl.count(), 'row', usFmtPct),\n 'Count as Fraction of Columns': tpl.fractionOf(tpl.count(), 'col', usFmtPct),\n}))(aggregatorTemplates);\n\nconst locales = {\n en: {\n aggregators,\n localeStrings: {\n renderError: 'An error occurred rendering the PivotTable results.',\n computeError: 'An error occurred computing the PivotTable results.',\n uiRenderError: 'An error occurred rendering the PivotTable UI.',\n selectAll: 'Select All',\n selectNone: 'Select None',\n tooMany: '(too many to list)',\n filterResults: 'Filter values',\n apply: 'Apply',\n cancel: 'Cancel',\n totals: 'Totals',\n vs: 'vs',\n by: 'by',\n },\n },\n};\n\n// dateFormat deriver l10n requires month and day names to be passed in directly\nconst mthNamesEn = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst dayNamesEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst zeroPad = number => `0${number}`.substr(-2, 2); // eslint-disable-line no-magic-numbers\n\nconst derivers = {\n bin(col, binWidth) {\n return record => record[col] - (record[col] % binWidth);\n },\n dateFormat(\n col,\n formatString,\n utcOutput = false,\n mthNames = mthNamesEn,\n dayNames = dayNamesEn\n ) {\n const utc = utcOutput ? 'UTC' : '';\n return function(record) {\n const date = new Date(Date.parse(record[col]));\n if (isNaN(date)) {\n return '';\n }\n return formatString.replace(/%(.)/g, function(m, p) {\n switch (p) {\n case 'y':\n return date[`get${utc}FullYear`]();\n case 'm':\n return zeroPad(date[`get${utc}Month`]() + 1);\n case 'n':\n return mthNames[date[`get${utc}Month`]()];\n case 'd':\n return zeroPad(date[`get${utc}Date`]());\n case 'w':\n return dayNames[date[`get${utc}Day`]()];\n case 'x':\n return date[`get${utc}Day`]();\n case 'H':\n return zeroPad(date[`get${utc}Hours`]());\n case 'M':\n return zeroPad(date[`get${utc}Minutes`]());\n case 'S':\n return zeroPad(date[`get${utc}Seconds`]());\n default:\n return `%${p}`;\n }\n });\n };\n },\n};\n\n/*\nData Model class\n*/\n\nclass PivotData {\n constructor(inputProps = {}) {\n this.props = Object.assign({}, PivotData.defaultProps, inputProps);\n PropTypes.checkPropTypes(\n PivotData.propTypes,\n this.props,\n 'prop',\n 'PivotData'\n );\n\n this.aggregations = this.normalizeAggregations();\n this.aggregationKeyLookup = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.aggregationKeyLookup)) {\n this.aggregationKeyLookup[agg.aggregatorName] = agg.key;\n }\n });\n if (this.aggregations.length === 0) {\n throw new Error('PivotData requires at least one aggregation');\n }\n this.primaryAggregation = this.aggregations[0];\n this.primaryAggregatorName = this.primaryAggregation.aggregatorName;\n\n this.aggregatorFactories = this.buildAggregatorFactories();\n this.tree = {};\n this.rowKeys = [];\n this.colKeys = [];\n this.rowTotals = {};\n this.colTotals = {};\n this.allTotal = this.createAggregatorCell([], []);\n this.sorted = false;\n\n if (this.props.precomputedData) {\n // Results computed by the Web Worker (or any previous pass) are\n // hydrated instead of re-scanning every record on the main thread.\n this.hydrateFromPrecomputed(this.props.precomputedData);\n return;\n }\n\n const progressHook = this.props.onRecordProcessed;\n const recordHandler = record => {\n if (this.filter(record)) {\n this.processRecord(record);\n }\n };\n if (typeof progressHook === 'function') {\n let recordsProcessed = 0;\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n recordHandler(record);\n recordsProcessed++;\n if (recordsProcessed % RECORD_PROGRESS_BATCH_SIZE === 0) {\n progressHook(recordsProcessed);\n }\n }\n );\n } else {\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n recordHandler\n );\n }\n }\n\n /*\n * Rebuilds tree/totals from a serialized PivotData payload (as produced by\n * `serializePivotData` inside the worker). Aggregated values are final, so\n * only lightweight stub aggregators with the correct `value()` and\n * `format()` behavior are created per cell.\n */\n hydrateFromPrecomputed(precomputed) {\n // One real aggregator instance per aggregation provides `format()` and\n // `numInputs` for every hydrated stub cell.\n const formatSources = {};\n this.aggregations.forEach(agg => {\n formatSources[agg.key] = this.aggregatorFactories[agg.key](this, [], []);\n });\n\n const makeCell = serializedCell => {\n const values = (serializedCell && serializedCell.values) || {};\n const instances = {};\n this.aggregations.forEach(agg => {\n const source = formatSources[agg.key];\n const value = values[agg.key];\n instances[agg.key] = {\n push() {},\n value() {\n return value;\n },\n format(x) {\n return source.format(x);\n },\n numInputs: source.numInputs,\n outlet: source.outlet,\n };\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n };\n\n const hydrateTotals = (source, target) => {\n Object.keys(source || {}).forEach(flatKey => {\n target[flatKey] = makeCell(source[flatKey]);\n });\n };\n\n this.rowKeys = (precomputed.rowKeys || []).map(key => key.slice());\n this.colKeys = (precomputed.colKeys || []).map(key => key.slice());\n this.rowTotals = {};\n hydrateTotals(precomputed.rowTotals, this.rowTotals);\n this.colTotals = {};\n hydrateTotals(precomputed.colTotals, this.colTotals);\n this.tree = {};\n Object.keys(precomputed.tree || {}).forEach(flatRowKey => {\n this.tree[flatRowKey] = {};\n hydrateTotals(precomputed.tree[flatRowKey], this.tree[flatRowKey]);\n });\n this.allTotal = makeCell(precomputed.allTotal);\n\n // Keys were already sorted inside the worker; only re-sort on the main\n // thread when a sorter could not cross the worker boundary (functions).\n this.sorted = !sortersHaveFunctions(this.props.sorters);\n }\n\n filter(record) {\n for (const k in this.props.valueFilter) {\n if (record[k] in this.props.valueFilter[k]) {\n return false;\n }\n }\n return true;\n }\n\n forEachMatchingRecord(criteria, callback) {\n return PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (!this.filter(record)) {\n return;\n }\n for (const k in criteria) {\n const v = criteria[k];\n if (v !== (k in record ? record[k] : 'null')) {\n return;\n }\n }\n callback(record);\n }\n );\n }\n\n arrSort(attrs) {\n let a;\n const sortersArr = (() => {\n const result = [];\n for (a of Array.from(attrs)) {\n result.push(getSort(this.props.sorters, a));\n }\n return result;\n })();\n return function(a, b) {\n for (const i of Object.keys(sortersArr || {})) {\n const sorter = sortersArr[i];\n const comparison = sorter(a[i], b[i]);\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n }\n\n sortKeys() {\n if (!this.sorted) {\n this.sorted = true;\n const v = (r, c) => this.getAggregator(r, c).value();\n\n // Handle per-row sorting\n if (this.props.rowSorts && Object.keys(this.props.rowSorts).length > 0) {\n const rowSorts = this.props.rowSorts;\n this.rowKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.rows.length; i++) {\n const attr = this.props.rows[i];\n if (attr && rowSorts[attr]) {\n const sortDir = rowSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.rows)(a, b);\n });\n } else {\n // Use global row order\n switch (this.props.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort((a, b) => naturalSort(v(a, []), v(b, [])));\n break;\n case 'value_z_to_a':\n this.rowKeys.sort((a, b) => -naturalSort(v(a, []), v(b, [])));\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.props.rows));\n }\n }\n\n // Handle per-column sorting\n if (this.props.colSorts && Object.keys(this.props.colSorts).length > 0) {\n const colSorts = this.props.colSorts;\n this.colKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.cols.length; i++) {\n const attr = this.props.cols[i];\n if (attr && colSorts[attr]) {\n const sortDir = colSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.cols)(a, b);\n });\n } else {\n // Use global col order\n switch (this.props.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort((a, b) => naturalSort(v([], a), v([], b)));\n break;\n case 'value_z_to_a':\n this.colKeys.sort((a, b) => -naturalSort(v([], a), v([], b)));\n break;\n default:\n this.colKeys.sort(this.arrSort(this.props.cols));\n }\n }\n }\n }\n\n getColKeys() {\n this.sortKeys();\n return this.colKeys;\n }\n\n getRowKeys() {\n this.sortKeys();\n return this.rowKeys;\n }\n\n processRecord(record) {\n // this code is called in a tight loop\n const colKey = [];\n const rowKey = [];\n for (const x of Array.from(this.props.cols)) {\n colKey.push(x in record ? record[x] : 'null');\n }\n for (const x of Array.from(this.props.rows)) {\n rowKey.push(x in record ? record[x] : 'null');\n }\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n\n this.allTotal.push(record);\n\n if (rowKey.length !== 0) {\n if (!this.rowTotals[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowTotals[flatRowKey] = this.createAggregatorCell(rowKey, []);\n }\n this.rowTotals[flatRowKey].push(record);\n }\n\n if (colKey.length !== 0) {\n if (!this.colTotals[flatColKey]) {\n this.colKeys.push(colKey);\n this.colTotals[flatColKey] = this.createAggregatorCell([], colKey);\n }\n this.colTotals[flatColKey].push(record);\n }\n\n if (colKey.length !== 0 && rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (!this.tree[flatRowKey][flatColKey]) {\n this.tree[flatRowKey][flatColKey] = this.createAggregatorCell(\n rowKey,\n colKey\n );\n }\n this.tree[flatRowKey][flatColKey].push(record);\n }\n }\n\n getAggregator(rowKey, colKey, aggregationKey = this.primaryAggregation.key) {\n let resolvedKey = aggregationKey;\n if (\n resolvedKey &&\n !(resolvedKey in this.aggregatorFactories) &&\n this.aggregationKeyLookup[resolvedKey]\n ) {\n resolvedKey = this.aggregationKeyLookup[resolvedKey];\n }\n const cell = this.getAggregatorCell(rowKey, colKey);\n if (!cell) {\n return PivotData.emptyAggregator;\n }\n return cell.getInstance(resolvedKey) || PivotData.emptyAggregator;\n }\n\n getAggregatorCell(rowKey, colKey) {\n let cell;\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n if (rowKey.length === 0 && colKey.length === 0) {\n cell = this.allTotal;\n } else if (rowKey.length === 0) {\n cell = this.colTotals[flatColKey];\n } else if (colKey.length === 0) {\n cell = this.rowTotals[flatRowKey];\n } else {\n cell =\n this.tree[flatRowKey] && this.tree[flatRowKey][flatColKey]\n ? this.tree[flatRowKey][flatColKey]\n : null;\n }\n return cell || null;\n }\n\n getAggregatorNames() {\n return this.aggregations.map(agg => agg.aggregatorName);\n }\n\n getAggregations() {\n return this.aggregations.map(agg => Object.assign({}, agg));\n }\n\n getPrimaryAggregatorName() {\n return this.primaryAggregatorName;\n }\n\n getPrimaryAggregation() {\n return Object.assign({}, this.primaryAggregation);\n }\n\n /**\n * Groups aggregations by their aggregatorName\n * @returns {Object} Object mapping aggregator names to arrays of aggregations\n * Example: { 'Count': [agg1, agg2], 'Sum': [agg3] }\n */\n groupAggregationsByType() {\n const grouped = {};\n this.aggregations.forEach(agg => {\n const aggName = agg.aggregatorName;\n if (!grouped[aggName]) {\n grouped[aggName] = [];\n }\n grouped[aggName].push(agg);\n });\n return grouped;\n }\n\n /**\n * Gets aggregations for a specific aggregator type\n * @param {string} aggregatorName - The aggregator name (e.g., 'Count', 'Sum')\n * @returns {Array} Array of aggregation configurations\n */\n getAggregationsByType(aggregatorName) {\n return this.aggregations.filter(\n agg => agg.aggregatorName === aggregatorName\n );\n }\n\n normalizeAggregations() {\n const defaultAggregatorName = Object.keys(this.props.aggregators)[0];\n const aggregationsProvided =\n Array.isArray(this.props.aggregations) &&\n this.props.aggregations.length > 0;\n const legacyAggregatorName =\n typeof this.props.aggregatorName === 'string'\n ? this.props.aggregatorName\n : null;\n const fallbackAggregatorName =\n legacyAggregatorName || defaultAggregatorName;\n const fallbackVals = Array.isArray(this.props.vals) ? this.props.vals : [];\n let aggregations = [];\n if (aggregationsProvided) {\n aggregations = this.props.aggregations;\n } else {\n aggregations = [\n {\n aggregatorName: fallbackAggregatorName,\n vals: fallbackVals,\n },\n ];\n }\n return aggregations.map((agg, idx) => {\n const aggregatorName =\n agg.aggregatorName ||\n (aggregationsProvided ? defaultAggregatorName : fallbackAggregatorName);\n const vals =\n typeof agg.vals !== 'undefined'\n ? agg.vals\n : aggregationsProvided\n ? []\n : fallbackVals.slice();\n const normalizedVals = Array.isArray(vals) ? vals : [];\n const key =\n agg.key ||\n `${aggregatorName || 'agg'}-${\n normalizedVals.length ? normalizedVals.join('|') : ''\n }-${idx}`;\n const label =\n agg.label ||\n (normalizedVals.length\n ? `${aggregatorName} of ${normalizedVals.join(', ')}`\n : aggregatorName);\n return {\n key,\n aggregatorName,\n vals: normalizedVals,\n label,\n };\n });\n }\n\n buildAggregatorFactories() {\n const factories = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.props.aggregators)) {\n throw new Error(`unknown aggregator ${agg.aggregatorName}`);\n }\n factories[agg.key] = this.props.aggregators[agg.aggregatorName](agg.vals);\n });\n return factories;\n }\n\n createAggregatorCell(rowKey, colKey) {\n const instances = {};\n this.aggregations.forEach(agg => {\n instances[agg.key] = this.aggregatorFactories[agg.key](\n this,\n rowKey,\n colKey\n );\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n }\n}\n\nPivotData.emptyAggregator = {\n push() {},\n value() {\n return null;\n },\n format() {\n return '';\n },\n};\n\n// can handle arrays or jQuery selections of tables\nPivotData.forEachRecord = function(input, derivedAttributes, f) {\n let addRecord, record;\n if (Object.getOwnPropertyNames(derivedAttributes).length === 0) {\n addRecord = f;\n } else {\n addRecord = function(record) {\n for (const k in derivedAttributes) {\n const derived = derivedAttributes[k](record);\n if (derived !== null) {\n record[k] = derived;\n }\n }\n return f(record);\n };\n }\n\n // if it's a function, have it call us back\n if (typeof input === 'function') {\n return input(addRecord);\n } else if (Array.isArray(input)) {\n if (Array.isArray(input[0])) {\n // array of arrays\n return (() => {\n const result = [];\n for (const i of Object.keys(input || {})) {\n const compactRecord = input[i];\n if (i > 0) {\n record = {};\n for (const j of Object.keys(input[0] || {})) {\n const k = input[0][j];\n record[k] = compactRecord[j];\n }\n result.push(addRecord(record));\n }\n }\n return result;\n })();\n }\n\n // array of objects\n return (() => {\n const result1 = [];\n for (record of Array.from(input)) {\n result1.push(addRecord(record));\n }\n return result1;\n })();\n }\n throw new Error('unknown input format');\n};\n\nPivotData.defaultProps = {\n aggregators: aggregators,\n cols: [],\n rows: [],\n vals: [],\n aggregatorName: Object.keys(aggregators)[0],\n aggregations: [],\n sorters: {},\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n rowSorts: {},\n colSorts: {},\n derivedAttributes: {},\n};\n\nPivotData.propTypes = {\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.func])\n .isRequired,\n aggregatorName: PropTypes.string,\n aggregations: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string,\n aggregatorName: PropTypes.string,\n vals: PropTypes.arrayOf(PropTypes.string),\n label: PropTypes.string,\n })\n ),\n cols: PropTypes.arrayOf(PropTypes.string),\n rows: PropTypes.arrayOf(PropTypes.string),\n vals: PropTypes.arrayOf(PropTypes.string),\n valueFilter: PropTypes.objectOf(PropTypes.objectOf(PropTypes.bool)),\n sorters: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.objectOf(\n PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.array])\n ),\n ]),\n derivedAttributes: PropTypes.objectOf(PropTypes.func),\n precomputedData: PropTypes.object,\n onRecordProcessed: PropTypes.func,\n rowOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n colOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n};\n\nexport {\n aggregatorTemplates,\n aggregators,\n derivers,\n locales,\n naturalSort,\n numberFormat,\n getSort,\n sortAs,\n builtInSorters,\n detectDataType,\n createSorterByType,\n sortersHaveFunctions,\n PivotData,\n};\n"]}
@@ -0,0 +1,114 @@
1
+ 'use strict';
2
+
3
+ var _react = require('react');
4
+
5
+ var _react2 = _interopRequireDefault(_react);
6
+
7
+ var _client = require('react-dom/client');
8
+
9
+ var _PivotTableUI = require('../PivotTableUI');
10
+
11
+ var _PivotTableUI2 = _interopRequireDefault(_PivotTableUI);
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ /* eslint-disable no-magic-numbers */
16
+
17
+ // React 19 needs to be told that this environment supports `act`.
18
+ global.IS_REACT_ACT_ENVIRONMENT = true;
19
+
20
+ // `isShowProcessing` is a debugging/testing hook that forces the loading
21
+ // overlay on top of the rendered table without running a real worker
22
+ // computation, so the overlay can be inspected while consuming the package.
23
+ var records = [{ name: 'Nick', gender: 'male', colour: 'blue', trials: 103 }, { name: 'Jane', gender: 'female', colour: 'red', trials: 95 }, { name: 'John', gender: 'male', colour: 'blue', trials: 112 }, { name: 'Carol', gender: 'female', colour: 'yellow', trials: 102 }];
24
+
25
+ var baseProps = {
26
+ data: records,
27
+ rows: ['name'],
28
+ cols: [],
29
+ aggregatorName: 'Count',
30
+ vals: [],
31
+ rendererName: 'Table'
32
+ };
33
+
34
+ function rerenderPivot(root, props) {
35
+ (0, _react.act)(function () {
36
+ root.render(_react2.default.createElement(_PivotTableUI2.default, props));
37
+ });
38
+ }
39
+
40
+ describe(' PivotTableUI isShowProcessing', function () {
41
+ var containers = void 0;
42
+
43
+ beforeEach(function () {
44
+ containers = [];
45
+ });
46
+
47
+ afterEach(function () {
48
+ containers.forEach(function (container) {
49
+ (0, _react.act)(function () {
50
+ container.root.unmount();
51
+ });
52
+ container.node.remove();
53
+ });
54
+ });
55
+
56
+ var mount = function mount(props) {
57
+ var node = document.createElement('div');
58
+ document.body.appendChild(node);
59
+ var root = (0, _client.createRoot)(node);
60
+ (0, _react.act)(function () {
61
+ root.render(_react2.default.createElement(_PivotTableUI2.default, props));
62
+ });
63
+ var entry = { node: node, root: root };
64
+ containers.push(entry);
65
+ return entry;
66
+ };
67
+
68
+ it('does not render the overlay by default', function () {
69
+ var _mount = mount(baseProps),
70
+ node = _mount.node;
71
+
72
+ expect(node.querySelector('.pvtLoadingOverlay')).toBeNull();
73
+ expect(node.querySelector('.pvtTable')).not.toBeNull();
74
+ });
75
+
76
+ it('renders the overlay on top of the table when isShowProcessing is true', function () {
77
+ var _mount2 = mount(baseProps),
78
+ node = _mount2.node,
79
+ root = _mount2.root;
80
+ // Table is rendered from the real data first (no overlay).
81
+
82
+
83
+ expect(node.querySelector('.pvtTable')).not.toBeNull();
84
+ expect(node.querySelector('.pvtLoadingOverlay')).toBeNull();
85
+
86
+ rerenderPivot(root, Object.assign({}, baseProps, { isShowProcessing: true }));
87
+
88
+ var overlay = node.querySelector('.pvtLoadingOverlay');
89
+ expect(overlay).not.toBeNull();
90
+ // The overlay is layered on top of the table: the table must survive.
91
+ expect(node.querySelector('.pvtTable')).not.toBeNull();
92
+ // Nothing was actually being computed, so a sample progress is supplied
93
+ // to exercise the progress bar/percentage branch of the overlay.
94
+ expect(overlay.querySelector('.pvtLoadingSpinner')).not.toBeNull();
95
+ expect(overlay.querySelector('.pvtLoadingBar').style.width).toBe('60%');
96
+ expect(overlay.querySelector('.pvtLoadingPercent').textContent).toBe('60%');
97
+
98
+ // Turning the flag back off removes the overlay.
99
+ rerenderPivot(root, baseProps);
100
+ expect(node.querySelector('.pvtLoadingOverlay')).toBeNull();
101
+ });
102
+
103
+ it('renders an indeterminate overlay when progress.total is unavailable', function () {
104
+ var node = document.createElement('div');
105
+ (0, _react.act)(function () {
106
+ (0, _client.createRoot)(node).render(_react2.default.createElement(_PivotTableUI.PivotLoadingOverlay, {
107
+ progress: { phase: 'aggregate' }
108
+ }));
109
+ });
110
+ expect(node.querySelector('.pvtLoadingBarWrap')).toBeNull();
111
+ expect(node.querySelector('.pvtLoadingText').textContent).toBe('Aggregating data…');
112
+ });
113
+ });
114
+ //# sourceMappingURL=PivotTableUI-processing-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/__tests__/PivotTableUI-processing-test.js"],"names":["global","IS_REACT_ACT_ENVIRONMENT","records","name","gender","colour","trials","baseProps","data","rows","cols","aggregatorName","vals","rendererName","rerenderPivot","root","props","render","React","createElement","PivotTableUI","describe","containers","beforeEach","afterEach","forEach","container","unmount","node","remove","mount","document","body","appendChild","entry","push","it","expect","querySelector","toBeNull","not","Object","assign","isShowProcessing","overlay","style","width","toBe","textContent","PivotLoadingOverlay","progress","phase"],"mappings":"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","file":"PivotTableUI-processing-test.js","sourcesContent":["import React, {act} from 'react';\nimport {createRoot} from 'react-dom/client';\nimport PivotTableUI, {PivotLoadingOverlay} from '../PivotTableUI';\n/* eslint-disable no-magic-numbers */\n\n// React 19 needs to be told that this environment supports `act`.\nglobal.IS_REACT_ACT_ENVIRONMENT = true;\n\n// `isShowProcessing` is a debugging/testing hook that forces the loading\n// overlay on top of the rendered table without running a real worker\n// computation, so the overlay can be inspected while consuming the package.\nconst records = [\n {name: 'Nick', gender: 'male', colour: 'blue', trials: 103},\n {name: 'Jane', gender: 'female', colour: 'red', trials: 95},\n {name: 'John', gender: 'male', colour: 'blue', trials: 112},\n {name: 'Carol', gender: 'female', colour: 'yellow', trials: 102},\n];\n\nconst baseProps = {\n data: records,\n rows: ['name'],\n cols: [],\n aggregatorName: 'Count',\n vals: [],\n rendererName: 'Table',\n};\n\nfunction rerenderPivot(root, props) {\n act(() => {\n root.render(React.createElement(PivotTableUI, props));\n });\n}\n\ndescribe(' PivotTableUI isShowProcessing', function() {\n let containers;\n\n beforeEach(function() {\n containers = [];\n });\n\n afterEach(function() {\n containers.forEach(container => {\n act(() => {\n container.root.unmount();\n });\n container.node.remove();\n });\n });\n\n const mount = props => {\n const node = document.createElement('div');\n document.body.appendChild(node);\n const root = createRoot(node);\n act(() => {\n root.render(React.createElement(PivotTableUI, props));\n });\n const entry = {node, root};\n containers.push(entry);\n return entry;\n };\n\n it('does not render the overlay by default', function() {\n const {node} = mount(baseProps);\n expect(node.querySelector('.pvtLoadingOverlay')).toBeNull();\n expect(node.querySelector('.pvtTable')).not.toBeNull();\n });\n\n it('renders the overlay on top of the table when isShowProcessing is true', function() {\n const {node, root} = mount(baseProps);\n // Table is rendered from the real data first (no overlay).\n expect(node.querySelector('.pvtTable')).not.toBeNull();\n expect(node.querySelector('.pvtLoadingOverlay')).toBeNull();\n\n rerenderPivot(root, Object.assign({}, baseProps, {isShowProcessing: true}));\n\n const overlay = node.querySelector('.pvtLoadingOverlay');\n expect(overlay).not.toBeNull();\n // The overlay is layered on top of the table: the table must survive.\n expect(node.querySelector('.pvtTable')).not.toBeNull();\n // Nothing was actually being computed, so a sample progress is supplied\n // to exercise the progress bar/percentage branch of the overlay.\n expect(overlay.querySelector('.pvtLoadingSpinner')).not.toBeNull();\n expect(overlay.querySelector('.pvtLoadingBar').style.width).toBe('60%');\n expect(overlay.querySelector('.pvtLoadingPercent').textContent).toBe('60%');\n\n // Turning the flag back off removes the overlay.\n rerenderPivot(root, baseProps);\n expect(node.querySelector('.pvtLoadingOverlay')).toBeNull();\n });\n\n it('renders an indeterminate overlay when progress.total is unavailable', function() {\n const node = document.createElement('div');\n act(() => {\n createRoot(node).render(\n React.createElement(PivotLoadingOverlay, {\n progress: {phase: 'aggregate'},\n })\n );\n });\n expect(node.querySelector('.pvtLoadingBarWrap')).toBeNull();\n expect(node.querySelector('.pvtLoadingText').textContent).toBe(\n 'Aggregating data…'\n );\n });\n});\n"]}