@hrforte/react-pivottable 1.1.0 → 2.1.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.
- package/README.md +134 -0
- package/dist/PivotDataWorker.js +264 -0
- package/dist/PivotDataWorker.js.map +1 -0
- package/dist/PivotTableUI.js +1742 -1612
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/PlotlyRenderers.js +3 -1
- package/dist/PlotlyRenderers.js.map +1 -1
- package/dist/Utilities.js +134 -24
- package/dist/Utilities.js.map +1 -1
- package/dist/__tests__/PivotDataWorker-test.js +170 -0
- package/dist/__tests__/PivotDataWorker-test.js.map +1 -0
- package/dist/__tests__/PivotTableUI-processing-test.js +114 -0
- package/dist/__tests__/PivotTableUI-processing-test.js.map +1 -0
- package/dist/__tests__/pivotCompute-test.js +215 -0
- package/dist/__tests__/pivotCompute-test.js.map +1 -0
- package/dist/pivot-worker.js +3397 -0
- package/dist/pivotCompute.js +274 -0
- package/dist/pivotCompute.js.map +1 -0
- package/dist/pivotWorker.js +101 -0
- package/dist/pivotWorker.js.map +1 -0
- package/dist/pivottable.css +74 -0
- package/package.json +4 -3
package/dist/PivotTableUI.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PivotTableUI.jsx"],"names":["AGG_KEY_RADIX","AGG_KEY_OFFSET","AGG_KEY_LENGTH","DraggableAttribute","props","state","open","filterText","value","valueFilter","removeValuesFromFilter","name","addValuesToFilter","x","toLowerCase","trim","includes","e","stopPropagation","setValuesInFilter","Object","keys","attrValues","filter","y","showMenu","length","menuLimit","values","shown","matchesFilter","bind","sort","sorter","display","cursor","zIndex","moveFilterBoxToTop","setState","target","map","toggleValue","selectOnly","filtered","toggleFilterBox","getFilterBox","React","Component","defaultProps","propTypes","PropTypes","string","isRequired","func","objectOf","number","bool","Dropdown","toggle","current","r","setValue","PureComponent","ConditionalFormattingUI","tableOptions","conditionalFormatting","rules","currentTableOptions","assign","onChange","$set","cf","getConditionalFormatting","newRule","condition","type","style","backgroundColor","updateConditionalFormatting","slice","concat","index","newRules","_","i","field","startsWith","conditionField","replace","newCondition","styleField","newStyle","moveToTop","conditionTypes","label","needsValue","marginTop","minWidth","position","fontStyle","color","rule","border","padding","marginBottom","justifyContent","removeRule","fontSize","newType","width","ct","val","numVal","isNaN","parseFloat","updateRule","fontWeight","addRule","object","CellFormattingUI","cellFormatting","getCellFormatting","format","thousandsSep","decimalSep","decimalPlaces","prefix","suffix","updateCellFormatting","formatField","newFormat","parseInt","alignItems","showOriginal","checked","marginRight","PivotTableUI","unusedOrder","zIndices","maxZIndex","openDropdown","materializedInput","materializeInput","data","nextData","newState","recordsProcessed","PivotData","forEachRecord","derivedAttributes","record","push","attr","null","command","key","sendPropUpdate","Array","isArray","aggregations","fallbackAggregator","aggregatorName","aggregators","fallbackVals","vals","aggregationsProvided","hasExternalAggregations","defaultAggregations","source","agg","idx","baseVals","defaultValsForAggregator","instance","numInputs","hiddenAttributes","hiddenFromAggregators","currentVals","required","numInputsForAggregator","options","getAttributeOptions","next","timestamp","Date","now","toString","randomPart","Math","random","nextAggregations","sanitized","primary","getCurrentAggregations","updateAggregations","valIndex","mode","allowedModes","normalizedMode","aggregationDisplayMode","defaultAggregator","generateAggregationKey","splice","attribute","reduce","v","$unset","sortDir","colSorts","rowSorts","dropdown","items","classes","group","ghostClass","preventOnFilter","sorters","primaryAggregation","aggregatorCellOutlet","outlet","rendererName","renderers","rendererCell","isOpen","propUpdater","sortIcons","key_a_to_z","rowSymbol","colSymbol","value_a_to_z","value_z_to_a","attributeOptions","aggregatorCell","aggDropdownKey","numValsAllowed","setAggregationAggregator","fill","n","valDropdownKey","setAggregationVal","removeAggregationRow","setAggregationDisplayMode","addAggregationRow","rowOrder","colOrder","unusedAttrs","rows","cols","hiddenFromDragDrop","unusedLength","horizUnused","unusedOrientationCutoff","unusedAttrsCell","makeDnDCell","order","colAttrs","colAttrsCell","rowAttrs","rowAttrsCell","outputCell","handleColSort","handleRowSort","PivotTable","arrayOf","oneOf"],"mappings":"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","file":"PivotTableUI.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport update from 'immutability-helper';\nimport {PivotData, sortAs, getSort} from './Utilities';\nimport PivotTable from './PivotTable';\nimport Sortable from 'react-sortablejs';\nimport Draggable from 'react-draggable';\n\nconst AGG_KEY_RADIX = 36;\nconst AGG_KEY_OFFSET = 2;\nconst AGG_KEY_LENGTH = 7;\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nexport class DraggableAttribute extends React.Component {\n constructor(props) {\n super(props);\n this.state = {open: false, filterText: ''};\n }\n\n toggleValue(value) {\n if (value in this.props.valueFilter) {\n this.props.removeValuesFromFilter(this.props.name, [value]);\n } else {\n this.props.addValuesToFilter(this.props.name, [value]);\n }\n }\n\n matchesFilter(x) {\n return x\n .toLowerCase()\n .trim()\n .includes(this.state.filterText.toLowerCase().trim());\n }\n\n selectOnly(e, value) {\n e.stopPropagation();\n this.props.setValuesInFilter(\n this.props.name,\n Object.keys(this.props.attrValues).filter(y => y !== value)\n );\n }\n\n getFilterBox() {\n const showMenu =\n Object.keys(this.props.attrValues).length < this.props.menuLimit;\n\n const values = Object.keys(this.props.attrValues);\n const shown = values\n .filter(this.matchesFilter.bind(this))\n .sort(this.props.sorter);\n\n return (\n <Draggable handle=\".pvtDragHandle\">\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: this.props.zIndex,\n }}\n onClick={() => this.props.moveFilterBoxToTop(this.props.name)}\n >\n <a onClick={() => this.setState({open: false})} className=\"pvtCloseX\">\n ×\n </a>\n <span className=\"pvtDragHandle\">☰</span>\n <h4>{this.props.name}</h4>\n\n {showMenu || <p>(too many values to show)</p>}\n\n {showMenu && (\n <p>\n <input\n type=\"text\"\n placeholder=\"Filter values\"\n className=\"pvtSearch\"\n value={this.state.filterText}\n onChange={e =>\n this.setState({\n filterText: e.target.value,\n })\n }\n />\n <br />\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n this.props.removeValuesFromFilter(\n this.props.name,\n Object.keys(this.props.attrValues).filter(\n this.matchesFilter.bind(this)\n )\n )\n }\n >\n Select {values.length === shown.length ? 'All' : shown.length}\n </a>{' '}\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n this.props.addValuesToFilter(\n this.props.name,\n Object.keys(this.props.attrValues).filter(\n this.matchesFilter.bind(this)\n )\n )\n }\n >\n Deselect {values.length === shown.length ? 'All' : shown.length}\n </a>\n </p>\n )}\n\n {showMenu && (\n <div className=\"pvtCheckContainer\">\n {shown.map(x => (\n <p\n key={x}\n onClick={() => this.toggleValue(x)}\n className={x in this.props.valueFilter ? '' : 'selected'}\n >\n <a className=\"pvtOnly\" onClick={e => this.selectOnly(e, x)}>\n only\n </a>\n <a className=\"pvtOnlySpacer\"> </a>\n\n {x === '' ? <em>null</em> : x}\n </p>\n ))}\n </div>\n )}\n </div>\n </Draggable>\n );\n }\n\n toggleFilterBox() {\n this.setState({open: !this.state.open});\n this.props.moveFilterBoxToTop(this.props.name);\n }\n\n render() {\n const filtered =\n Object.keys(this.props.valueFilter).length !== 0\n ? 'pvtFilteredAttribute'\n : '';\n return (\n <li data-id={this.props.name}>\n <span className={'pvtAttr ' + filtered}>\n {this.props.name}\n <span\n className=\"pvtTriangle\"\n onClick={this.toggleFilterBox.bind(this)}\n >\n {' '}\n ▾\n </span>\n </span>\n\n {this.state.open ? this.getFilterBox() : null}\n </li>\n );\n }\n}\n\nDraggableAttribute.defaultProps = {\n valueFilter: {},\n};\n\nDraggableAttribute.propTypes = {\n name: PropTypes.string.isRequired,\n addValuesToFilter: PropTypes.func.isRequired,\n removeValuesFromFilter: PropTypes.func.isRequired,\n attrValues: PropTypes.objectOf(PropTypes.number).isRequired,\n valueFilter: PropTypes.objectOf(PropTypes.bool),\n moveFilterBoxToTop: PropTypes.func.isRequired,\n sorter: PropTypes.func.isRequired,\n menuLimit: PropTypes.number,\n zIndex: PropTypes.number,\n};\n\nexport class Dropdown extends React.PureComponent {\n render() {\n return (\n <div className=\"pvtDropdown\" style={{zIndex: this.props.zIndex}}>\n <div\n onClick={e => {\n e.stopPropagation();\n this.props.toggle();\n }}\n className={\n 'pvtDropdownValue pvtDropdownCurrent ' +\n (this.props.open ? 'pvtDropdownCurrentOpen' : '')\n }\n role=\"button\"\n >\n <div className=\"pvtDropdownIcon\">{this.props.open ? '×' : '▾'}</div>\n {this.props.current || <span> </span>}\n </div>\n\n {this.props.open && (\n <div className=\"pvtDropdownMenu\">\n {this.props.values.map(r => (\n <div\n key={r}\n role=\"button\"\n onClick={e => {\n e.stopPropagation();\n if (this.props.current === r) {\n this.props.toggle();\n } else {\n this.props.setValue(r);\n }\n }}\n className={\n 'pvtDropdownValue ' +\n (r === this.props.current ? 'pvtDropdownActiveValue' : '')\n }\n >\n {r}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport class ConditionalFormattingUI extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n open: false,\n };\n }\n\n getConditionalFormatting() {\n const tableOptions = this.props.tableOptions || {};\n return tableOptions.conditionalFormatting\n ? tableOptions.conditionalFormatting\n : {rules: []};\n }\n\n updateConditionalFormatting(conditionalFormatting) {\n const currentTableOptions = this.props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n conditionalFormatting,\n });\n this.props.onChange({\n tableOptions: {$set: tableOptions},\n });\n }\n\n addRule() {\n const cf = this.getConditionalFormatting();\n const newRule = {\n condition: {\n type: 'greaterThan',\n value: 0,\n },\n style: {\n backgroundColor: '#FFFFE0',\n },\n };\n this.updateConditionalFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n }\n\n removeRule(index) {\n const cf = this.getConditionalFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n this.updateConditionalFormatting({\n rules: newRules,\n });\n }\n\n updateRule(index, field, value) {\n const cf = this.getConditionalFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('condition.')) {\n const conditionField = field.replace('condition.', '');\n const newCondition = Object.assign({}, newRules[index].condition);\n if (value === null) {\n delete newCondition[conditionField];\n } else {\n newCondition[conditionField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n } else if (field.startsWith('style.')) {\n const styleField = field.replace('style.', '');\n const newStyle = Object.assign({}, newRules[index].style || {});\n if (value === null || value === '') {\n delete newStyle[styleField];\n } else {\n newStyle[styleField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n style: newStyle,\n });\n }\n this.updateConditionalFormatting({\n rules: newRules,\n });\n }\n\n toggle() {\n this.setState({open: !this.state.open});\n if (this.props.moveToTop) {\n this.props.moveToTop();\n }\n }\n\n render() {\n const cf = this.getConditionalFormatting();\n const conditionTypes = [\n {value: 'greaterThan', label: 'Greater Than'},\n {value: 'lessThan', label: 'Less Than'},\n {value: 'greaterThanOrEqual', label: 'Greater Than Or Equal'},\n {value: 'lessThanOrEqual', label: 'Less Than Or Equal'},\n {value: 'equal', label: 'Equal'},\n {value: 'notEqual', label: 'Not Equal'},\n {value: 'empty', label: 'Empty'},\n {value: 'notEmpty', label: 'Not Empty'},\n {value: 'contains', label: 'Contains'},\n {value: 'notContains', label: 'Not Contains'},\n ];\n\n const needsValue = type => {\n return !['empty', 'notEmpty'].includes(type);\n };\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n this.toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {this.state.open ? '▼' : '▶'} Conditional Formatting\n </button>\n\n {this.state.open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: this.props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => this.props.moveToTop && this.props.moveToTop()}\n >\n <a\n onClick={() => this.setState({open: false})}\n className=\"pvtCloseX\"\n >\n ×\n </a>\n <h4>Conditional Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cells based on\n conditions.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n this.removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Type:\n </label>\n <select\n value={rule.condition.type || 'greaterThan'}\n onChange={e => {\n e.stopPropagation();\n const newType = e.target.value;\n const cf = this.getConditionalFormatting();\n const newRules = cf.rules.slice();\n const newCondition = Object.assign({}, newRules[index].condition, {\n type: newType,\n });\n // Remove value field if condition type doesn't need it\n if (!needsValue(newType)) {\n delete newCondition.value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n this.updateConditionalFormatting({\n rules: newRules,\n });\n }}\n style={{width: '100%', padding: '4px'}}\n >\n {conditionTypes.map(ct => (\n <option key={ct.value} value={ct.value}>\n {ct.label}\n </option>\n ))}\n </select>\n </div>\n\n {needsValue(rule.condition.type) && (\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Value:\n </label>\n <input\n type=\"text\"\n value={\n typeof rule.condition.value !== 'undefined' &&\n rule.condition.value !== null\n ? rule.condition.value\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n const val = e.target.value;\n // Try to parse as number, otherwise use as string\n const numVal =\n val === ''\n ? null\n : isNaN(val)\n ? val\n : parseFloat(val);\n this.updateRule(index, 'condition.value', numVal);\n }}\n placeholder=\"Enter value\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n )}\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Background Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.backgroundColor\n ? rule.style.backgroundColor\n : '#FFFFFF'\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(\n index,\n 'style.backgroundColor',\n e.target.value\n );\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Text Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.color\n ? rule.style.color\n : '#000000'\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(index, 'style.color', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Weight:\n </label>\n <select\n value={\n rule.style && rule.style.fontWeight\n ? rule.style.fontWeight\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(\n index,\n 'style.fontWeight',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"bold\">Bold</option>\n <option value=\"lighter\">Lighter</option>\n </select>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Style:\n </label>\n <select\n value={\n rule.style && rule.style.fontStyle\n ? rule.style.fontStyle\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(\n index,\n 'style.fontStyle',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"italic\">Italic</option>\n <option value=\"oblique\">Oblique</option>\n </select>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n this.addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nConditionalFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nConditionalFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\nexport class CellFormattingUI extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n open: false,\n };\n }\n\n getCellFormatting() {\n const tableOptions = this.props.tableOptions || {};\n return tableOptions.cellFormatting\n ? tableOptions.cellFormatting\n : {rules: []};\n }\n\n updateCellFormatting(cellFormatting) {\n const currentTableOptions = this.props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n cellFormatting,\n });\n this.props.onChange({\n tableOptions: {$set: tableOptions},\n });\n }\n\n addRule() {\n const cf = this.getCellFormatting();\n const newRule = {\n format: {\n thousandsSep: ',',\n decimalSep: '.',\n decimalPlaces: 2,\n prefix: '',\n suffix: '',\n },\n };\n this.updateCellFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n }\n\n removeRule(index) {\n const cf = this.getCellFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n this.updateCellFormatting({\n rules: newRules,\n });\n }\n\n updateRule(index, field, value) {\n const cf = this.getCellFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('format.')) {\n const formatField = field.replace('format.', '');\n const newFormat = Object.assign({}, newRules[index].format || {});\n if (value === null || value === '') {\n delete newFormat[formatField];\n } else {\n newFormat[formatField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n format: newFormat,\n });\n } else {\n newRules[index] = Object.assign({}, newRules[index], {\n [field]: value,\n });\n }\n this.updateCellFormatting({\n rules: newRules,\n });\n }\n\n toggle() {\n this.setState({open: !this.state.open});\n if (this.props.moveToTop) {\n this.props.moveToTop();\n }\n }\n\n render() {\n const cf = this.getCellFormatting();\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n this.toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {this.state.open ? '▼' : '▶'} Cell Formatting\n </button>\n\n {this.state.open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: this.props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => this.props.moveToTop && this.props.moveToTop()}\n >\n <a\n onClick={() => this.setState({open: false})}\n className=\"pvtCloseX\"\n >\n ×\n </a>\n <h4>Cell Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cell values.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n this.removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Thousand Separator (empty = no separator, decimal formatting still applies):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'thousandsSep' in rule.format\n ? rule.format.thousandsSep\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(\n index,\n 'format.thousandsSep',\n e.target.value\n );\n }}\n placeholder=\",\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Separator:\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'decimalSep' in rule.format\n ? rule.format.decimalSep\n : '.'\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(\n index,\n 'format.decimalSep',\n e.target.value\n );\n }}\n placeholder=\".\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Places:\n </label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"9\"\n value={\n rule.format && 'decimalPlaces' in rule.format\n ? rule.format.decimalPlaces\n : 2\n }\n onChange={e => {\n e.stopPropagation();\n const val = parseInt(e.target.value, 10);\n this.updateRule(\n index,\n 'format.decimalPlaces',\n isNaN(val) ? 2 : val\n );\n }}\n placeholder=\"2\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Prefix (e.g., $, €):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'prefix' in rule.format\n ? rule.format.prefix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(index, 'format.prefix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Suffix (e.g., %, units):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'suffix' in rule.format\n ? rule.format.suffix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(index, 'format.suffix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'flex',\n alignItems: 'center',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n <input\n type=\"checkbox\"\n checked={\n rule.format && 'showOriginal' in rule.format\n ? rule.format.showOriginal\n : false\n }\n onChange={e => {\n e.stopPropagation();\n this.updateRule(\n index,\n 'format.showOriginal',\n e.target.checked\n );\n }}\n style={{marginRight: '6px'}}\n />\n Show Original Value (no formatting)\n </label>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n this.addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n }\n}\n\nCellFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nCellFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\nclass PivotTableUI extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n unusedOrder: [],\n zIndices: {},\n maxZIndex: 1000,\n openDropdown: false,\n attrValues: {},\n materializedInput: [],\n };\n }\n\n componentDidMount() {\n this.materializeInput(this.props.data);\n }\n\n componentDidUpdate() {\n this.materializeInput(this.props.data);\n }\n\n materializeInput(nextData) {\n if (this.state.data === nextData) {\n return;\n }\n const newState = {\n data: nextData,\n attrValues: {},\n materializedInput: [],\n };\n let recordsProcessed = 0;\n PivotData.forEachRecord(\n newState.data,\n this.props.derivedAttributes,\n function(record) {\n newState.materializedInput.push(record);\n for (const attr of Object.keys(record)) {\n if (!(attr in newState.attrValues)) {\n newState.attrValues[attr] = {};\n if (recordsProcessed > 0) {\n newState.attrValues[attr].null = recordsProcessed;\n }\n }\n }\n for (const attr in newState.attrValues) {\n const value = attr in record ? record[attr] : 'null';\n if (!(value in newState.attrValues[attr])) {\n newState.attrValues[attr][value] = 0;\n }\n newState.attrValues[attr][value]++;\n }\n recordsProcessed++;\n }\n );\n this.setState(newState);\n }\n\n sendPropUpdate(command) {\n this.props.onChange(update(this.props, command));\n }\n\n propUpdater(key) {\n return value => this.sendPropUpdate({[key]: {$set: value}});\n }\n\n hasExternalAggregations() {\n return Array.isArray(this.props.aggregations);\n }\n\n getCurrentAggregations() {\n const fallbackAggregator =\n this.props.aggregatorName || Object.keys(this.props.aggregators)[0];\n const fallbackVals = Array.isArray(this.props.vals)\n ? this.props.vals.slice()\n : [];\n const aggregationsProvided = this.hasExternalAggregations();\n const defaultAggregations = [\n {\n key: 'agg-default',\n aggregatorName: fallbackAggregator,\n vals: fallbackVals,\n },\n ];\n const source = aggregationsProvided\n ? this.props.aggregations\n : defaultAggregations;\n return source.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n const baseVals = Array.isArray(agg.vals)\n ? agg.vals.slice()\n : aggregationsProvided\n ? []\n : fallbackVals;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: this.defaultValsForAggregator(aggregatorName, baseVals),\n };\n });\n }\n\n numInputsForAggregator(name) {\n if (!name || !(name in this.props.aggregators)) {\n return 0;\n }\n const instance = this.props.aggregators[name]([])();\n return instance.numInputs || 0;\n }\n\n getAttributeOptions() {\n return Object.keys(this.state.attrValues).filter(\n e =>\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromAggregators.includes(e)\n );\n }\n\n defaultValsForAggregator(name, currentVals = []) {\n const required = this.numInputsForAggregator(name);\n if (required === 0) {\n return [];\n }\n const options = this.getAttributeOptions();\n const next = currentVals.slice(0, required);\n for (let i = 0; i < required; i++) {\n if (!next[i]) {\n next[i] = options[i % options.length] || null;\n }\n }\n return next;\n }\n\n generateAggregationKey() {\n const timestamp = Date.now().toString(AGG_KEY_RADIX);\n const randomPart = Math.random()\n .toString(AGG_KEY_RADIX)\n .slice(AGG_KEY_OFFSET, AGG_KEY_OFFSET + AGG_KEY_LENGTH);\n return `agg-${timestamp}-${randomPart}`;\n }\n\n updateAggregations(nextAggregations) {\n if (!nextAggregations.length) {\n return;\n }\n const fallbackAggregator =\n this.props.aggregatorName || Object.keys(this.props.aggregators)[0];\n const sanitized = nextAggregations.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: this.defaultValsForAggregator(\n aggregatorName,\n Array.isArray(agg.vals) ? agg.vals.slice() : []\n ),\n };\n });\n const primary = sanitized[0];\n const command = {\n aggregations: {$set: sanitized},\n };\n if (!this.hasExternalAggregations()) {\n command.aggregatorName = {$set: primary.aggregatorName};\n command.vals = {$set: primary.vals};\n }\n this.sendPropUpdate(command);\n }\n\n setAggregationAggregator(index, aggregatorName) {\n const aggregations = this.getCurrentAggregations();\n const next = Object.assign({}, aggregations[index], {\n aggregatorName,\n });\n next.vals = this.defaultValsForAggregator(aggregatorName, next.vals);\n aggregations[index] = next;\n this.updateAggregations(aggregations);\n }\n\n setAggregationVal(index, valIndex, value) {\n const aggregations = this.getCurrentAggregations();\n const next = Object.assign({}, aggregations[index]);\n const vals = Array.isArray(next.vals) ? next.vals.slice() : [];\n vals[valIndex] = value;\n next.vals = vals;\n aggregations[index] = next;\n this.updateAggregations(aggregations);\n }\n\n setAggregationDisplayMode(mode) {\n const allowedModes = ['row', 'column'];\n const normalizedMode = allowedModes.includes(mode) ? mode : 'row';\n const tableOptions = Object.assign({}, this.props.tableOptions || {}, {\n aggregationDisplayMode: normalizedMode,\n });\n this.sendPropUpdate({\n tableOptions: {$set: tableOptions},\n });\n }\n\n addAggregationRow() {\n const aggregations = this.getCurrentAggregations();\n const defaultAggregator =\n this.props.aggregatorName || Object.keys(this.props.aggregators)[0];\n const key = this.generateAggregationKey();\n aggregations.push({\n key,\n aggregatorName: defaultAggregator,\n vals: this.defaultValsForAggregator(defaultAggregator),\n });\n this.updateAggregations(aggregations);\n }\n\n removeAggregationRow(index) {\n const aggregations = this.getCurrentAggregations();\n if (aggregations.length === 1) {\n return;\n }\n aggregations.splice(index, 1);\n this.updateAggregations(aggregations);\n }\n\n setValuesInFilter(attribute, values) {\n this.sendPropUpdate({\n valueFilter: {\n [attribute]: {\n $set: values.reduce((r, v) => {\n r[v] = true;\n return r;\n }, {}),\n },\n },\n });\n }\n\n addValuesToFilter(attribute, values) {\n if (attribute in this.props.valueFilter) {\n this.sendPropUpdate({\n valueFilter: {\n [attribute]: values.reduce((r, v) => {\n r[v] = {$set: true};\n return r;\n }, {}),\n },\n });\n } else {\n this.setValuesInFilter(attribute, values);\n }\n }\n\n removeValuesFromFilter(attribute, values) {\n this.sendPropUpdate({\n valueFilter: {[attribute]: {$unset: values}},\n });\n }\n\n moveFilterBoxToTop(attribute) {\n this.setState(\n update(this.state, {\n maxZIndex: {$set: this.state.maxZIndex + 1},\n zIndices: {[attribute]: {$set: this.state.maxZIndex + 1}},\n })\n );\n }\n\n handleColSort(attr, sortDir) {\n // Only allow sorting 1 column at a time - clear all other column sorts\n const colSorts = {};\n if (sortDir !== null) {\n colSorts[attr] = sortDir;\n }\n this.sendPropUpdate({colSorts: {$set: colSorts}});\n }\n\n handleRowSort(attr, sortDir) {\n // Only allow sorting 1 row at a time - clear all other row sorts\n const rowSorts = {};\n if (sortDir !== null) {\n rowSorts[attr] = sortDir;\n }\n this.sendPropUpdate({rowSorts: {$set: rowSorts}});\n }\n\n isOpen(dropdown) {\n return this.state.openDropdown === dropdown;\n }\n\n makeDnDCell(items, onChange, classes) {\n return (\n <Sortable\n options={{\n group: 'shared',\n ghostClass: 'pvtPlaceholder',\n filter: '.pvtFilterBox',\n preventOnFilter: false,\n }}\n tag=\"td\"\n className={classes}\n onChange={onChange}\n >\n {items.map(x => (\n <DraggableAttribute\n name={x}\n key={x}\n attrValues={this.state.attrValues[x]}\n valueFilter={this.props.valueFilter[x] || {}}\n sorter={getSort(this.props.sorters, x, this.state.attrValues[x])}\n menuLimit={this.props.menuLimit}\n setValuesInFilter={this.setValuesInFilter.bind(this)}\n addValuesToFilter={this.addValuesToFilter.bind(this)}\n moveFilterBoxToTop={this.moveFilterBoxToTop.bind(this)}\n removeValuesFromFilter={this.removeValuesFromFilter.bind(this)}\n zIndex={this.state.zIndices[x] || this.state.maxZIndex}\n />\n ))}\n </Sortable>\n );\n }\n\n render() {\n const aggregations = this.getCurrentAggregations();\n const primaryAggregation = aggregations[0];\n const tableOptions = this.props.tableOptions || {};\n const aggregationDisplayMode =\n tableOptions.aggregationDisplayMode === 'column' ? 'column' : 'row';\n const aggregatorCellOutlet =\n primaryAggregation &&\n this.props.aggregators[primaryAggregation.aggregatorName] &&\n this.props.aggregators[primaryAggregation.aggregatorName]([])().outlet;\n\n const rendererName =\n this.props.rendererName in this.props.renderers\n ? this.props.rendererName\n : Object.keys(this.props.renderers)[0];\n\n const rendererCell = (\n <td className=\"pvtRenderers\">\n <Dropdown\n current={rendererName}\n values={Object.keys(this.props.renderers)}\n open={this.isOpen('renderer')}\n zIndex={this.isOpen('renderer') ? this.state.maxZIndex + 1 : 1}\n toggle={() =>\n this.setState({\n openDropdown: this.isOpen('renderer') ? false : 'renderer',\n })\n }\n setValue={this.propUpdater('rendererName')}\n />\n </td>\n );\n\n const sortIcons = {\n key_a_to_z: {\n rowSymbol: '↕',\n colSymbol: '↔',\n next: 'value_a_to_z',\n },\n value_a_to_z: {\n rowSymbol: '↓',\n colSymbol: '→',\n next: 'value_z_to_a',\n },\n value_z_to_a: {rowSymbol: '↑', colSymbol: '←', next: 'key_a_to_z'},\n };\n\n const attributeOptions = this.getAttributeOptions();\n const aggregatorCell = (\n <td className=\"pvtVals\">\n {aggregations.map((agg, idx) => {\n const aggDropdownKey = `aggregation-${agg.key}-agg`;\n const numValsAllowed = this.numInputsForAggregator(\n agg.aggregatorName\n );\n const vals = this.defaultValsForAggregator(\n agg.aggregatorName,\n agg.vals\n );\n return (\n <div className=\"pvtAggregatorRow\" key={agg.key || idx}>\n <Dropdown\n current={agg.aggregatorName}\n values={Object.keys(this.props.aggregators)}\n open={this.isOpen(aggDropdownKey)}\n zIndex={\n this.isOpen(aggDropdownKey) ? this.state.maxZIndex + 1 : 1\n }\n toggle={() =>\n this.setState({\n openDropdown: this.isOpen(aggDropdownKey)\n ? false\n : aggDropdownKey,\n })\n }\n setValue={value => this.setAggregationAggregator(idx, value)}\n />\n {numValsAllowed > 0 && (\n <div className=\"pvtAggregatorVals\">\n {new Array(numValsAllowed).fill().map((n, i) => {\n const valDropdownKey = `aggregation-${agg.key}-val-${i}`;\n return (\n <Dropdown\n key={`agg-val-${agg.key}-${i}`}\n current={vals[i]}\n values={attributeOptions}\n open={this.isOpen(valDropdownKey)}\n zIndex={\n this.isOpen(valDropdownKey)\n ? this.state.maxZIndex + 1\n : 1\n }\n toggle={() =>\n this.setState({\n openDropdown: this.isOpen(valDropdownKey)\n ? false\n : valDropdownKey,\n })\n }\n setValue={value =>\n this.setAggregationVal(idx, i, value)\n }\n />\n );\n })}\n </div>\n )}\n {aggregations.length > 1 && (\n <button\n type=\"button\"\n className=\"pvtButton pvtRemoveAggregator\"\n onClick={e => {\n e.stopPropagation();\n this.removeAggregationRow(idx);\n }}\n >\n Remove\n </button>\n )}\n </div>\n );\n })}\n <div className=\"pvtAggregationModeToggle\">\n <label\n htmlFor=\"pvtAggregationMode\"\n style={{marginRight: '6px', fontSize: '12px'}}\n >\n Aggregation values on:\n </label>\n <select\n id=\"pvtAggregationMode\"\n value={aggregationDisplayMode}\n onChange={e => this.setAggregationDisplayMode(e.target.value)}\n >\n <option value=\"row\">Rows</option>\n <option value=\"column\">Columns</option>\n </select>\n </div>\n <button\n type=\"button\"\n className=\"pvtButton pvtAddAggregator\"\n onClick={e => {\n e.stopPropagation();\n this.addAggregationRow();\n }}\n >\n + Add Value\n </button>\n <a\n role=\"button\"\n className=\"pvtRowOrder\"\n onClick={() =>\n this.propUpdater('rowOrder')(sortIcons[this.props.rowOrder].next)\n }\n >\n {sortIcons[this.props.rowOrder].rowSymbol}\n </a>\n <a\n role=\"button\"\n className=\"pvtColOrder\"\n onClick={() =>\n this.propUpdater('colOrder')(sortIcons[this.props.colOrder].next)\n }\n >\n {sortIcons[this.props.colOrder].colSymbol}\n </a>\n {aggregatorCellOutlet && aggregatorCellOutlet(this.props.data)}\n <ConditionalFormattingUI\n tableOptions={tableOptions}\n onChange={this.sendPropUpdate.bind(this)}\n moveToTop={this.moveFilterBoxToTop.bind(\n this,\n 'conditionalFormatting'\n )}\n zIndex={\n this.state.zIndices.conditionalFormatting || this.state.maxZIndex\n }\n />\n <CellFormattingUI\n tableOptions={tableOptions}\n onChange={this.sendPropUpdate.bind(this)}\n moveToTop={this.moveFilterBoxToTop.bind(this, 'cellFormatting')}\n zIndex={this.state.zIndices.cellFormatting || this.state.maxZIndex}\n />\n </td>\n );\n\n const unusedAttrs = Object.keys(this.state.attrValues)\n .filter(\n e =>\n !this.props.rows.includes(e) &&\n !this.props.cols.includes(e) &&\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromDragDrop.includes(e)\n )\n .sort(sortAs(this.state.unusedOrder));\n\n const unusedLength = unusedAttrs.reduce((r, e) => r + e.length, 0);\n const horizUnused = unusedLength < this.props.unusedOrientationCutoff;\n\n const unusedAttrsCell = this.makeDnDCell(\n unusedAttrs,\n order => this.setState({unusedOrder: order}),\n `pvtAxisContainer pvtUnused ${\n horizUnused ? 'pvtHorizList' : 'pvtVertList'\n }`\n );\n\n const colAttrs = this.props.cols.filter(\n e =>\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromDragDrop.includes(e)\n );\n\n const colAttrsCell = this.makeDnDCell(\n colAttrs,\n this.propUpdater('cols'),\n 'pvtAxisContainer pvtHorizList pvtCols'\n );\n\n const rowAttrs = this.props.rows.filter(\n e =>\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromDragDrop.includes(e)\n );\n const rowAttrsCell = this.makeDnDCell(\n rowAttrs,\n this.propUpdater('rows'),\n 'pvtAxisContainer pvtVertList pvtRows'\n );\n const outputCell = (\n <td className=\"pvtOutput\">\n <PivotTable\n {...update(this.props, {\n data: {$set: this.state.materializedInput},\n })}\n colSorts={this.props.colSorts || {}}\n rowSorts={this.props.rowSorts || {}}\n onColSort={this.handleColSort.bind(this)}\n onRowSort={this.handleRowSort.bind(this)}\n />\n </td>\n );\n\n if (horizUnused) {\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => this.setState({openDropdown: false})}>\n <tr>\n {rendererCell}\n {unusedAttrsCell}\n </tr>\n <tr>\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n }\n\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => this.setState({openDropdown: false})}>\n <tr>\n {rendererCell}\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {unusedAttrsCell}\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n }\n}\n\nPivotTableUI.propTypes = Object.assign({}, PivotTable.propTypes, {\n onChange: PropTypes.func.isRequired,\n hiddenAttributes: PropTypes.arrayOf(PropTypes.string),\n hiddenFromAggregators: PropTypes.arrayOf(PropTypes.string),\n hiddenFromDragDrop: PropTypes.arrayOf(PropTypes.string),\n unusedOrientationCutoff: PropTypes.number,\n menuLimit: PropTypes.number,\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n});\n\nPivotTableUI.defaultProps = Object.assign({}, PivotTable.defaultProps, {\n hiddenAttributes: [],\n hiddenFromAggregators: [],\n hiddenFromDragDrop: [],\n unusedOrientationCutoff: 85,\n menuLimit: 500,\n colSorts: {},\n rowSorts: {},\n});\n\nexport default PivotTableUI;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/PivotTableUI.jsx"],"names":["DraggableAttribute","Dropdown","ConditionalFormattingUI","CellFormattingUI","PivotLoadingOverlay","AGG_KEY_RADIX","AGG_KEY_OFFSET","AGG_KEY_LENGTH","props","name","addValuesToFilter","removeValuesFromFilter","attrValues","valueFilter","moveFilterBoxToTop","sorter","menuLimit","zIndex","open","setOpen","filterText","setFilterText","toggleValue","value","matchesFilter","x","toLowerCase","trim","includes","selectOnly","e","stopPropagation","setValuesInFilter","Object","keys","filter","y","toggleFilterBox","getFilterBox","showMenu","length","values","shown","sort","display","cursor","target","map","filtered","defaultProps","propTypes","PropTypes","string","isRequired","func","objectOf","number","bool","toggle","current","r","setValue","getConditionalFormatting","tableOptions","conditionalFormatting","rules","updateConditionalFormatting","currentTableOptions","assign","onChange","$set","addRule","cf","newRule","condition","type","style","backgroundColor","slice","concat","removeRule","newRules","_","i","index","updateRule","field","startsWith","conditionField","replace","newCondition","styleField","newStyle","moveToTop","conditionTypes","label","needsValue","marginTop","minWidth","position","fontStyle","color","rule","border","padding","marginBottom","justifyContent","fontSize","newType","cfNow","width","ct","val","numVal","isNaN","parseFloat","fontWeight","object","getCellFormatting","cellFormatting","updateCellFormatting","format","thousandsSep","decimalSep","decimalPlaces","prefix","suffix","formatField","newFormat","parseInt","alignItems","showOriginal","checked","marginRight","pivotWorkerInstanceCounter","progress","percent","total","Math","min","round","processed","phaseLabels","materialize","aggregate","phaseLabel","phase","PivotTableUI","unusedOrder","setUnusedOrder","zIndices","setZIndices","maxZIndex","setMaxZIndex","openDropdown","setOpenDropdown","setAttrValues","materializedInput","setMaterializedInput","lastDataRef","undefined","enabled","enableWorker","threshold","workerThreshold","isProcessing","setIsProcessing","setProgress","precomputed","setPrecomputed","computeError","setComputeError","precomputedRef","unmountedRef","activeRequestRef","dataVersionRef","versionedDataRef","instanceIdRef","workerEligible","data","derivedAttributes","aggregators","computeSignature","rows","cols","aggregatorName","aggregations","vals","sorters","rowOrder","colOrder","rowSorts","colSorts","materializeInput","nextData","materialized","workerDebug","lastGoodViewRef","signature","workerUrl","DEFAULT_WORKER_URL","timer","setTimeout","requestId","dataKey","then","result","catch","error","message","WORKER_DEBOUNCE_MS","clearTimeout","sendPropUpdate","command","propUpdater","key","hasExternalAggregations","Array","isArray","numInputsForAggregator","instance","numInputs","getAttributeOptions","hiddenAttributes","hiddenFromAggregators","defaultValsForAggregator","currentVals","required","options","next","getCurrentAggregations","fallbackAggregator","fallbackVals","aggregationsProvided","defaultAggregations","source","agg","idx","baseVals","generateAggregationKey","timestamp","Date","now","toString","randomPart","random","updateAggregations","nextAggregations","sanitized","primary","setAggregationAggregator","setAggregationVal","valIndex","setAggregationDisplayMode","allowedModes","normalizedMode","mode","aggregationDisplayMode","addAggregationRow","defaultAggregator","push","removeAggregationRow","splice","attribute","reduce","v","$unset","nextMax","prevMax","prevZ","handleColSort","attr","sortDir","handleRowSort","isOpen","dropdown","setAxisFromDrag","listKey","order","uniqueOrder","from","Set","otherKey","otherList","overlap","$apply","makeDnDCell","items","classes","group","ghostClass","preventOnFilter","primaryAggregation","aggregatorCellOutlet","outlet","rendererName","renderers","rendererCell","sortIcons","key_a_to_z","rowSymbol","colSymbol","value_a_to_z","value_z_to_a","attributeOptions","aggregatorCell","aggDropdownKey","numValsAllowed","fill","n","valDropdownKey","unusedAttrs","hiddenFromDragDrop","unusedLength","horizUnused","unusedOrientationCutoff","unusedAttrsCell","colAttrs","colAttrsCell","rowAttrs","rowAttrsCell","showProcessing","isShowProcessing","staleView","outputContent","precomputedData","overlayProgress","outputCell","PivotTable","arrayOf","oneOf","DEFAULT_WORKER_THRESHOLD"],"mappings":"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","file":"PivotTableUI.js","sourcesContent":["/* eslint-disable no-magic-numbers */\n/* eslint-disable no-undefined */\nimport React, {useState, useEffect, useMemo, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport update from 'immutability-helper';\nimport {sortAs, getSort} from './Utilities';\nimport {\n canComputeInWorker,\n createComputeSignature,\n createWorkerConfig,\n materializeData,\n DEFAULT_WORKER_THRESHOLD,\n WORKER_DEBOUNCE_MS,\n} from './pivotCompute';\nimport {\n computePivotWithFallback,\n configureWorkerUrl,\n setWorkerDebug,\n DEFAULT_WORKER_URL,\n} from './PivotDataWorker';\nimport PivotTable from './PivotTable';\nimport Sortable from 'react-sortablejs';\nimport Draggable from 'react-draggable';\n\nconst AGG_KEY_RADIX = 36;\nconst AGG_KEY_OFFSET = 2;\nconst AGG_KEY_LENGTH = 7;\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nexport function DraggableAttribute(props) {\n const {\n name,\n addValuesToFilter,\n removeValuesFromFilter,\n attrValues,\n valueFilter,\n moveFilterBoxToTop,\n sorter,\n menuLimit,\n zIndex,\n } = props;\n\n const [open, setOpen] = useState(false);\n const [filterText, setFilterText] = useState('');\n\n const toggleValue = value => {\n if (value in valueFilter) {\n removeValuesFromFilter(name, [value]);\n } else {\n addValuesToFilter(name, [value]);\n }\n };\n\n const matchesFilter = x =>\n x\n .toLowerCase()\n .trim()\n .includes(filterText.toLowerCase().trim());\n\n const selectOnly = (e, value) => {\n e.stopPropagation();\n props.setValuesInFilter(\n name,\n Object.keys(attrValues).filter(y => y !== value)\n );\n };\n\n const toggleFilterBox = () => {\n setOpen(!open);\n moveFilterBoxToTop(name);\n };\n\n const getFilterBox = () => {\n const showMenu = Object.keys(attrValues).length < menuLimit;\n\n const values = Object.keys(attrValues);\n const shown = values.filter(matchesFilter).sort(sorter);\n\n return (\n <Draggable handle=\".pvtDragHandle\">\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: zIndex,\n }}\n onClick={() => moveFilterBoxToTop(name)}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <span className=\"pvtDragHandle\">☰</span>\n <h4>{name}</h4>\n\n {showMenu || <p>(too many values to show)</p>}\n\n {showMenu && (\n <p>\n <input\n type=\"text\"\n placeholder=\"Filter values\"\n className=\"pvtSearch\"\n value={filterText}\n onChange={e => setFilterText(e.target.value)}\n />\n <br />\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n removeValuesFromFilter(\n name,\n Object.keys(attrValues).filter(matchesFilter)\n )\n }\n >\n Select {values.length === shown.length ? 'All' : shown.length}\n </a>{' '}\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n addValuesToFilter(\n name,\n Object.keys(attrValues).filter(matchesFilter)\n )\n }\n >\n Deselect {values.length === shown.length ? 'All' : shown.length}\n </a>\n </p>\n )}\n\n {showMenu && (\n <div className=\"pvtCheckContainer\">\n {shown.map(x => (\n <p\n key={x}\n onClick={() => toggleValue(x)}\n className={x in valueFilter ? '' : 'selected'}\n >\n <a className=\"pvtOnly\" onClick={e => selectOnly(e, x)}>\n only\n </a>\n <a className=\"pvtOnlySpacer\"> </a>\n\n {x === '' ? <em>null</em> : x}\n </p>\n ))}\n </div>\n )}\n </div>\n </Draggable>\n );\n };\n\n const filtered =\n Object.keys(valueFilter).length !== 0 ? 'pvtFilteredAttribute' : '';\n\n return (\n <li data-id={name}>\n <span className={'pvtAttr ' + filtered}>\n {name}\n <span className=\"pvtTriangle\" onClick={toggleFilterBox}>\n {' '}\n ▾\n </span>\n </span>\n\n {open ? getFilterBox() : null}\n </li>\n );\n}\n\nDraggableAttribute.defaultProps = {\n valueFilter: {},\n};\n\nDraggableAttribute.propTypes = {\n name: PropTypes.string.isRequired,\n addValuesToFilter: PropTypes.func.isRequired,\n removeValuesFromFilter: PropTypes.func.isRequired,\n attrValues: PropTypes.objectOf(PropTypes.number).isRequired,\n valueFilter: PropTypes.objectOf(PropTypes.bool),\n moveFilterBoxToTop: PropTypes.func.isRequired,\n sorter: PropTypes.func.isRequired,\n menuLimit: PropTypes.number,\n zIndex: PropTypes.number,\n};\n\nexport function Dropdown(props) {\n return (\n <div className=\"pvtDropdown\" style={{zIndex: props.zIndex}}>\n <div\n onClick={e => {\n e.stopPropagation();\n props.toggle();\n }}\n className={\n 'pvtDropdownValue pvtDropdownCurrent ' +\n (props.open ? 'pvtDropdownCurrentOpen' : '')\n }\n role=\"button\"\n >\n <div className=\"pvtDropdownIcon\">{props.open ? '×' : '▾'}</div>\n {props.current || <span> </span>}\n </div>\n\n {props.open && (\n <div className=\"pvtDropdownMenu\">\n {props.values.map(r => (\n <div\n key={r}\n role=\"button\"\n onClick={e => {\n e.stopPropagation();\n if (props.current === r) {\n props.toggle();\n } else {\n props.setValue(r);\n }\n }}\n className={\n 'pvtDropdownValue ' +\n (r === props.current ? 'pvtDropdownActiveValue' : '')\n }\n >\n {r}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function ConditionalFormattingUI(props) {\n const [open, setOpen] = useState(false);\n\n const getConditionalFormatting = () => {\n const tableOptions = props.tableOptions || {};\n return tableOptions.conditionalFormatting\n ? tableOptions.conditionalFormatting\n : {rules: []};\n };\n\n const updateConditionalFormatting = conditionalFormatting => {\n const currentTableOptions = props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n conditionalFormatting,\n });\n props.onChange({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addRule = () => {\n const cf = getConditionalFormatting();\n const newRule = {\n condition: {\n type: 'greaterThan',\n value: 0,\n },\n style: {\n backgroundColor: '#FFFFE0',\n },\n };\n updateConditionalFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n };\n\n const removeRule = index => {\n const cf = getConditionalFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n updateConditionalFormatting({\n rules: newRules,\n });\n };\n\n const updateRule = (index, field, value) => {\n const cf = getConditionalFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('condition.')) {\n const conditionField = field.replace('condition.', '');\n const newCondition = Object.assign({}, newRules[index].condition);\n if (value === null) {\n delete newCondition[conditionField];\n } else {\n newCondition[conditionField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n } else if (field.startsWith('style.')) {\n const styleField = field.replace('style.', '');\n const newStyle = Object.assign({}, newRules[index].style || {});\n if (value === null || value === '') {\n delete newStyle[styleField];\n } else {\n newStyle[styleField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n style: newStyle,\n });\n }\n updateConditionalFormatting({\n rules: newRules,\n });\n };\n\n const toggle = () => {\n setOpen(!open);\n if (props.moveToTop) {\n props.moveToTop();\n }\n };\n\n const cf = getConditionalFormatting();\n const conditionTypes = [\n {value: 'greaterThan', label: 'Greater Than'},\n {value: 'lessThan', label: 'Less Than'},\n {value: 'greaterThanOrEqual', label: 'Greater Than Or Equal'},\n {value: 'lessThanOrEqual', label: 'Less Than Or Equal'},\n {value: 'equal', label: 'Equal'},\n {value: 'notEqual', label: 'Not Equal'},\n {value: 'empty', label: 'Empty'},\n {value: 'notEmpty', label: 'Not Empty'},\n {value: 'contains', label: 'Contains'},\n {value: 'notContains', label: 'Not Contains'},\n ];\n\n const needsValue = type => {\n return !['empty', 'notEmpty'].includes(type);\n };\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {open ? '▼' : '▶'} Conditional Formatting\n </button>\n\n {open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => props.moveToTop && props.moveToTop()}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <h4>Conditional Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cells based on conditions.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Type:\n </label>\n <select\n value={rule.condition.type || 'greaterThan'}\n onChange={e => {\n e.stopPropagation();\n const newType = e.target.value;\n const cfNow = getConditionalFormatting();\n const newRules = cfNow.rules.slice();\n const newCondition = Object.assign(\n {},\n newRules[index].condition,\n {\n type: newType,\n }\n );\n // Remove value field if condition type doesn't need it\n if (!needsValue(newType)) {\n delete newCondition.value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n condition: newCondition,\n });\n updateConditionalFormatting({\n rules: newRules,\n });\n }}\n style={{width: '100%', padding: '4px'}}\n >\n {conditionTypes.map(ct => (\n <option key={ct.value} value={ct.value}>\n {ct.label}\n </option>\n ))}\n </select>\n </div>\n\n {needsValue(rule.condition.type) && (\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Condition Value:\n </label>\n <input\n type=\"text\"\n value={\n typeof rule.condition.value !== 'undefined' &&\n rule.condition.value !== null\n ? rule.condition.value\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n const val = e.target.value;\n // Try to parse as number, otherwise use as string\n const numVal =\n val === '' ? null : isNaN(val) ? val : parseFloat(val);\n updateRule(index, 'condition.value', numVal);\n }}\n placeholder=\"Enter value\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n )}\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Background Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.backgroundColor\n ? rule.style.backgroundColor\n : '#FFFFFF'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'style.backgroundColor', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Text Color:\n </label>\n <input\n type=\"color\"\n value={\n rule.style && rule.style.color\n ? rule.style.color\n : '#000000'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'style.color', e.target.value);\n }}\n style={{width: '100%', padding: '2px'}}\n />\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Weight:\n </label>\n <select\n value={\n rule.style && rule.style.fontWeight\n ? rule.style.fontWeight\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'style.fontWeight',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"bold\">Bold</option>\n <option value=\"lighter\">Lighter</option>\n </select>\n </div>\n\n <div\n style={{marginBottom: '8px'}}\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n >\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Font Style:\n </label>\n <select\n value={\n rule.style && rule.style.fontStyle\n ? rule.style.fontStyle\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'style.fontStyle',\n e.target.value || null\n );\n }}\n style={{width: '100%', padding: '4px'}}\n >\n <option value=\"\">Normal</option>\n <option value=\"italic\">Italic</option>\n <option value=\"oblique\">Oblique</option>\n </select>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n}\n\nConditionalFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nConditionalFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\nexport function CellFormattingUI(props) {\n const [open, setOpen] = useState(false);\n\n const getCellFormatting = () => {\n const tableOptions = props.tableOptions || {};\n return tableOptions.cellFormatting\n ? tableOptions.cellFormatting\n : {rules: []};\n };\n\n const updateCellFormatting = cellFormatting => {\n const currentTableOptions = props.tableOptions || {};\n const tableOptions = Object.assign({}, currentTableOptions, {\n cellFormatting,\n });\n props.onChange({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addRule = () => {\n const cf = getCellFormatting();\n const newRule = {\n format: {\n thousandsSep: ',',\n decimalSep: '.',\n decimalPlaces: 2,\n prefix: '',\n suffix: '',\n },\n };\n updateCellFormatting({\n rules: cf.rules.slice().concat([newRule]),\n });\n };\n\n const removeRule = index => {\n const cf = getCellFormatting();\n const newRules = cf.rules.filter((_, i) => i !== index);\n updateCellFormatting({\n rules: newRules,\n });\n };\n\n const updateRule = (index, field, value) => {\n const cf = getCellFormatting();\n const newRules = cf.rules.slice();\n if (field.startsWith('format.')) {\n const formatField = field.replace('format.', '');\n const newFormat = Object.assign({}, newRules[index].format || {});\n if (value === null || value === '') {\n delete newFormat[formatField];\n } else {\n newFormat[formatField] = value;\n }\n newRules[index] = Object.assign({}, newRules[index], {\n format: newFormat,\n });\n } else {\n newRules[index] = Object.assign({}, newRules[index], {\n [field]: value,\n });\n }\n updateCellFormatting({\n rules: newRules,\n });\n };\n\n const toggle = () => {\n setOpen(!open);\n if (props.moveToTop) {\n props.moveToTop();\n }\n };\n\n const cf = getCellFormatting();\n\n return (\n <div>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n toggle();\n }}\n style={{marginTop: '5px'}}\n >\n {open ? '▼' : '▶'} Cell Formatting\n </button>\n\n {open && (\n <div\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: props.zIndex,\n marginTop: '5px',\n minWidth: '400px',\n position: 'relative',\n }}\n onClick={() => props.moveToTop && props.moveToTop()}\n >\n <a onClick={() => setOpen(false)} className=\"pvtCloseX\">\n ×\n </a>\n <h4>Cell Formatting Rules</h4>\n\n {cf.rules.length === 0 && (\n <p style={{fontStyle: 'italic', color: '#666'}}>\n No rules defined. Add a rule to format cell values.\n </p>\n )}\n\n {cf.rules.map((rule, index) => (\n <div\n key={index}\n style={{\n border: '1px solid #c8d4e3',\n padding: '10px',\n marginBottom: '10px',\n backgroundColor: '#f9f9f9',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n }}\n >\n <strong>Rule {index + 1}</strong>\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n removeRule(index);\n }}\n style={{fontSize: '10px', padding: '2px 6px'}}\n >\n Remove\n </button>\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Thousand Separator (empty = no separator, decimal formatting\n still applies):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'thousandsSep' in rule.format\n ? rule.format.thousandsSep\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.thousandsSep', e.target.value);\n }}\n placeholder=\",\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Separator:\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'decimalSep' in rule.format\n ? rule.format.decimalSep\n : '.'\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.decimalSep', e.target.value);\n }}\n placeholder=\".\"\n maxLength=\"1\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Decimal Places:\n </label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"9\"\n value={\n rule.format && 'decimalPlaces' in rule.format\n ? rule.format.decimalPlaces\n : 2\n }\n onChange={e => {\n e.stopPropagation();\n const val = parseInt(e.target.value, 10);\n updateRule(\n index,\n 'format.decimalPlaces',\n isNaN(val) ? 2 : val\n );\n }}\n placeholder=\"2\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Prefix (e.g., $, €):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'prefix' in rule.format\n ? rule.format.prefix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.prefix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'block',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n Suffix (e.g., %, units):\n </label>\n <input\n type=\"text\"\n value={\n rule.format && 'suffix' in rule.format\n ? rule.format.suffix\n : ''\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(index, 'format.suffix', e.target.value);\n }}\n placeholder=\"\"\n style={{width: '100%', padding: '4px'}}\n />\n </div>\n\n <div style={{marginBottom: '8px'}}>\n <label\n style={{\n display: 'flex',\n alignItems: 'center',\n marginBottom: '4px',\n fontSize: '11px',\n }}\n >\n <input\n type=\"checkbox\"\n checked={\n rule.format && 'showOriginal' in rule.format\n ? rule.format.showOriginal\n : false\n }\n onChange={e => {\n e.stopPropagation();\n updateRule(\n index,\n 'format.showOriginal',\n e.target.checked\n );\n }}\n style={{marginRight: '6px'}}\n />\n Show Original Value (no formatting)\n </label>\n </div>\n </div>\n ))}\n\n <button\n type=\"button\"\n className=\"pvtButton\"\n onClick={e => {\n e.stopPropagation();\n addRule();\n }}\n style={{width: '100%', marginTop: '10px'}}\n >\n + Add Rule\n </button>\n </div>\n )}\n </div>\n );\n}\n\nCellFormattingUI.propTypes = {\n tableOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n moveToTop: PropTypes.func,\n zIndex: PropTypes.number,\n};\n\nCellFormattingUI.defaultProps = {\n tableOptions: {},\n moveToTop: () => {},\n zIndex: 1,\n};\n\n// Used to namespace worker-side cached datasets when multiple PivotTableUI\n// instances share the same Web Worker.\nlet pivotWorkerInstanceCounter = 0;\n\nexport function PivotLoadingOverlay(props) {\n const progress = props.progress || {};\n const percent =\n progress.total > 0\n ? Math.min(100, Math.round((progress.processed / progress.total) * 100))\n : null;\n const phaseLabels = {\n materialize: 'Reading data',\n aggregate: 'Aggregating data',\n };\n const phaseLabel = phaseLabels[progress.phase] || 'Processing';\n return (\n <div className=\"pvtLoadingOverlay\" role=\"status\">\n <div className=\"pvtLoadingSpinner\" aria-hidden=\"true\" />\n <div className=\"pvtLoadingText\">{phaseLabel}…</div>\n {percent !== null ? (\n <div className=\"pvtLoadingBarWrap\">\n <div className=\"pvtLoadingBar\" style={{width: `${percent}%`}} />\n </div>\n ) : null}\n {percent !== null ? (\n <div className=\"pvtLoadingPercent\">{percent}%</div>\n ) : null}\n </div>\n );\n}\n\nPivotLoadingOverlay.propTypes = {\n progress: PropTypes.object,\n};\n\nfunction PivotTableUI(props) {\n const [unusedOrder, setUnusedOrder] = useState([]);\n const [zIndices, setZIndices] = useState({});\n const [maxZIndex, setMaxZIndex] = useState(1000);\n const [openDropdown, setOpenDropdown] = useState(false);\n const [attrValues, setAttrValues] = useState({});\n const [materializedInput, setMaterializedInput] = useState([]);\n\n // Tracks the last `data` prop that was materialized, mirroring the old\n // `this.state.data` check used to skip redundant work.\n const lastDataRef = useRef(undefined);\n\n // Worker orchestration state. `precomputed` holds the serialized pivot\n // state produced by the worker (or the synchronous fallback) together with\n // the exact compute signature it belongs to.\n const [isProcessing, setIsProcessing] = useState(() =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n })\n );\n const [progress, setProgress] = useState(null);\n const [precomputed, setPrecomputed] = useState(null);\n const [computeError, setComputeError] = useState(null);\n\n const precomputedRef = useRef(null);\n const unmountedRef = useRef(false);\n const activeRequestRef = useRef(0);\n const dataVersionRef = useRef(0);\n const versionedDataRef = useRef(undefined);\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = `pvt-${pivotWorkerInstanceCounter++}`;\n }\n\n const workerEligible = useMemo(\n () =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n }),\n [\n props.data,\n props.enableWorker,\n props.workerThreshold,\n props.derivedAttributes,\n props.aggregators,\n ]\n );\n\n const computeSignature = useMemo(() => createComputeSignature(props), [\n props.rows,\n props.cols,\n props.aggregatorName,\n props.aggregations,\n props.vals,\n props.valueFilter,\n props.sorters,\n props.rowOrder,\n props.colOrder,\n props.rowSorts,\n props.colSorts,\n ]);\n\n const materializeInput = nextData => {\n if (lastDataRef.current === nextData) {\n return;\n }\n lastDataRef.current = nextData;\n\n const materialized = materializeData(nextData, props.derivedAttributes);\n setAttrValues(materialized.attrValues);\n setMaterializedInput(materialized.materializedInput);\n };\n\n useEffect(() => {\n if (workerEligible) {\n // The worker (or its synchronous fallback) computes attrValues and the\n // materialized input; scanning 200k+ records here would block the\n // main thread again.\n return undefined;\n }\n materializeInput(props.data);\n return undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.data, workerEligible]);\n\n useEffect(\n () => () => {\n unmountedRef.current = true;\n },\n []\n );\n\n // Forward the `workerDebug` prop to the worker client so the whole\n // worker pipeline can be traced from the browser console.\n useEffect(() => {\n setWorkerDebug(props.workerDebug);\n }, [props.workerDebug]);\n\n // Snapshot of the last consistently rendered pivot view: the props that\n // match the currently applied precomputed result. While a new computation\n // runs, this snapshot is rendered underneath the loading overlay so the\n // user still sees the previous table (dimmed) instead of a blank area.\n const lastGoodViewRef = useRef(null);\n\n useEffect(() => {\n if (!isProcessing && !computeError) {\n lastGoodViewRef.current = {\n props,\n materializedInput,\n precomputed: workerEligible && precomputed ? precomputed : null,\n };\n }\n });\n\n // Schedule an off-main-thread computation whenever the data or the pivot\n // configuration changes. Rapid consecutive changes are debounced and\n // stale responses are discarded.\n useEffect(() => {\n // Invalidate any in-flight request from a previous effect run so its\n // result is never applied to the new configuration or dataset.\n activeRequestRef.current += 1;\n\n if (!workerEligible) {\n setIsProcessing(false);\n return undefined;\n }\n if (versionedDataRef.current !== props.data) {\n versionedDataRef.current = props.data;\n dataVersionRef.current += 1;\n }\n const signature = `${computeSignature}#${dataVersionRef.current}`;\n if (\n precomputedRef.current &&\n precomputedRef.current.signature === signature\n ) {\n setIsProcessing(false);\n return undefined;\n }\n configureWorkerUrl(props.workerUrl || DEFAULT_WORKER_URL);\n setIsProcessing(true);\n setComputeError(null);\n setProgress({processed: 0, total: props.data.length, phase: 'queued'});\n const timer = setTimeout(() => {\n const requestId = activeRequestRef.current;\n const dataKey = `${instanceIdRef.current}-data-${dataVersionRef.current}`;\n computePivotWithFallback(\n props.data,\n dataKey,\n createWorkerConfig(props),\n (processed, total, phase) => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n setProgress({processed, total, phase});\n }\n )\n .then(result => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n precomputedRef.current = {signature, data: result};\n setPrecomputed(precomputedRef.current);\n setAttrValues(result.attrValues);\n setMaterializedInput(result.materializedInput);\n setComputeError(null);\n setIsProcessing(false);\n })\n .catch(error => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n setComputeError(\n (error && error.message) || 'Failed to compute pivot table'\n );\n setIsProcessing(false);\n });\n }, WORKER_DEBOUNCE_MS);\n return () => {\n clearTimeout(timer);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.data, workerEligible, computeSignature]);\n\n const sendPropUpdate = command => {\n props.onChange(update(props, command));\n };\n\n const propUpdater = key => value => sendPropUpdate({[key]: {$set: value}});\n\n const hasExternalAggregations = () => Array.isArray(props.aggregations);\n\n const numInputsForAggregator = name => {\n if (!name || !(name in props.aggregators)) {\n return 0;\n }\n const instance = props.aggregators[name]([])();\n return instance.numInputs || 0;\n };\n\n const getAttributeOptions = () =>\n Object.keys(attrValues).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromAggregators.includes(e)\n );\n\n const defaultValsForAggregator = (name, currentVals = []) => {\n const required = numInputsForAggregator(name);\n if (required === 0) {\n return [];\n }\n const options = getAttributeOptions();\n const next = currentVals.slice(0, required);\n for (let i = 0; i < required; i++) {\n if (!next[i]) {\n next[i] = options[i % options.length] || null;\n }\n }\n return next;\n };\n\n const getCurrentAggregations = () => {\n const fallbackAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const fallbackVals = Array.isArray(props.vals) ? props.vals.slice() : [];\n const aggregationsProvided = hasExternalAggregations();\n const defaultAggregations = [\n {\n key: 'agg-default',\n aggregatorName: fallbackAggregator,\n vals: fallbackVals,\n },\n ];\n const source = aggregationsProvided\n ? props.aggregations\n : defaultAggregations;\n return source.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n const baseVals = Array.isArray(agg.vals)\n ? agg.vals.slice()\n : aggregationsProvided\n ? []\n : fallbackVals;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: defaultValsForAggregator(aggregatorName, baseVals),\n };\n });\n };\n\n const generateAggregationKey = () => {\n const timestamp = Date.now().toString(AGG_KEY_RADIX);\n const randomPart = Math.random()\n .toString(AGG_KEY_RADIX)\n .slice(AGG_KEY_OFFSET, AGG_KEY_OFFSET + AGG_KEY_LENGTH);\n return `agg-${timestamp}-${randomPart}`;\n };\n\n const updateAggregations = nextAggregations => {\n if (!nextAggregations.length) {\n return;\n }\n const fallbackAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const sanitized = nextAggregations.map((agg, idx) => {\n const aggregatorName = agg.aggregatorName || fallbackAggregator;\n return {\n key: agg.key || `agg-${idx}`,\n aggregatorName,\n vals: defaultValsForAggregator(\n aggregatorName,\n Array.isArray(agg.vals) ? agg.vals.slice() : []\n ),\n };\n });\n const primary = sanitized[0];\n const command = {\n aggregations: {$set: sanitized},\n };\n if (!hasExternalAggregations()) {\n command.aggregatorName = {$set: primary.aggregatorName};\n command.vals = {$set: primary.vals};\n }\n sendPropUpdate(command);\n };\n\n const setAggregationAggregator = (index, aggregatorName) => {\n const aggregations = getCurrentAggregations();\n const next = Object.assign({}, aggregations[index], {\n aggregatorName,\n });\n next.vals = defaultValsForAggregator(aggregatorName, next.vals);\n aggregations[index] = next;\n updateAggregations(aggregations);\n };\n\n const setAggregationVal = (index, valIndex, value) => {\n const aggregations = getCurrentAggregations();\n const next = Object.assign({}, aggregations[index]);\n const vals = Array.isArray(next.vals) ? next.vals.slice() : [];\n vals[valIndex] = value;\n next.vals = vals;\n aggregations[index] = next;\n updateAggregations(aggregations);\n };\n\n const setAggregationDisplayMode = mode => {\n const allowedModes = ['row', 'column'];\n const normalizedMode = allowedModes.includes(mode) ? mode : 'row';\n const tableOptions = Object.assign({}, props.tableOptions || {}, {\n aggregationDisplayMode: normalizedMode,\n });\n sendPropUpdate({\n tableOptions: {$set: tableOptions},\n });\n };\n\n const addAggregationRow = () => {\n const aggregations = getCurrentAggregations();\n const defaultAggregator =\n props.aggregatorName || Object.keys(props.aggregators)[0];\n const key = generateAggregationKey();\n aggregations.push({\n key,\n aggregatorName: defaultAggregator,\n vals: defaultValsForAggregator(defaultAggregator),\n });\n updateAggregations(aggregations);\n };\n\n const removeAggregationRow = index => {\n const aggregations = getCurrentAggregations();\n if (aggregations.length === 1) {\n return;\n }\n aggregations.splice(index, 1);\n updateAggregations(aggregations);\n };\n\n const setValuesInFilter = (attribute, values) => {\n sendPropUpdate({\n valueFilter: {\n [attribute]: {\n $set: values.reduce((r, v) => {\n r[v] = true;\n return r;\n }, {}),\n },\n },\n });\n };\n\n const addValuesToFilter = (attribute, values) => {\n if (attribute in props.valueFilter) {\n sendPropUpdate({\n valueFilter: {\n [attribute]: values.reduce((r, v) => {\n r[v] = {$set: true};\n return r;\n }, {}),\n },\n });\n } else {\n setValuesInFilter(attribute, values);\n }\n };\n\n const removeValuesFromFilter = (attribute, values) => {\n sendPropUpdate({\n valueFilter: {[attribute]: {$unset: values}},\n });\n };\n\n const moveFilterBoxToTop = attribute => {\n setMaxZIndex(prevMax => {\n const nextMax = prevMax + 1;\n setZIndices(prevZ => Object.assign({}, prevZ, {[attribute]: nextMax}));\n return nextMax;\n });\n };\n\n const handleColSort = (attr, sortDir) => {\n // Only allow sorting 1 column at a time - clear all other column sorts\n const colSorts = {};\n if (sortDir !== null) {\n colSorts[attr] = sortDir;\n }\n sendPropUpdate({colSorts: {$set: colSorts}});\n };\n\n const handleRowSort = (attr, sortDir) => {\n // Only allow sorting 1 row at a time - clear all other row sorts\n const rowSorts = {};\n if (sortDir !== null) {\n rowSorts[attr] = sortDir;\n }\n sendPropUpdate({rowSorts: {$set: rowSorts}});\n };\n\n const isOpen = dropdown => openDropdown === dropdown;\n\n /*\n * Drag-and-drop updates must stay consistent even though SortableJS\n * manipulates the DOM directly (the dragged node can transiently exist in\n * two containers while React reconciles). Two guards are applied:\n * 1. duplicate entries delivered by onChange are dropped (first wins), and\n * 2. rows/cols are kept mutually exclusive: dragging a field into one\n * axis removes it from the other one ($apply keeps whatever order the\n * axis currently has, even if another update landed in the same batch).\n */\n const setAxisFromDrag = (listKey, order) => {\n const uniqueOrder = Array.from(new Set(order));\n const otherKey = listKey === 'rows' ? 'cols' : 'rows';\n const otherList = Array.from(new Set(props[otherKey] || []));\n const overlap = uniqueOrder.filter(name => otherList.includes(name));\n const command = {[listKey]: {$set: uniqueOrder}};\n if (overlap.length > 0) {\n command[otherKey] = {\n $apply: current =>\n Array.from(new Set(current || [])).filter(\n name => !overlap.includes(name)\n ),\n };\n }\n sendPropUpdate(command);\n };\n\n const makeDnDCell = (items, onChange, classes) => (\n <Sortable\n options={{\n group: 'shared',\n ghostClass: 'pvtPlaceholder',\n filter: '.pvtFilterBox',\n preventOnFilter: false,\n }}\n tag=\"td\"\n className={classes}\n onChange={order => onChange(Array.from(new Set(order)))}\n >\n {items.map(x => (\n <DraggableAttribute\n name={x}\n key={x}\n attrValues={attrValues[x]}\n valueFilter={props.valueFilter[x] || {}}\n sorter={getSort(props.sorters, x, attrValues[x])}\n menuLimit={props.menuLimit}\n setValuesInFilter={setValuesInFilter}\n addValuesToFilter={addValuesToFilter}\n moveFilterBoxToTop={moveFilterBoxToTop}\n removeValuesFromFilter={removeValuesFromFilter}\n zIndex={zIndices[x] || maxZIndex}\n />\n ))}\n </Sortable>\n );\n\n const aggregations = getCurrentAggregations();\n const primaryAggregation = aggregations[0];\n const tableOptions = props.tableOptions || {};\n const aggregationDisplayMode =\n tableOptions.aggregationDisplayMode === 'column' ? 'column' : 'row';\n const aggregatorCellOutlet =\n primaryAggregation &&\n props.aggregators[primaryAggregation.aggregatorName] &&\n props.aggregators[primaryAggregation.aggregatorName]([])().outlet;\n\n const rendererName =\n props.rendererName in props.renderers\n ? props.rendererName\n : Object.keys(props.renderers)[0];\n\n const rendererCell = (\n <td className=\"pvtRenderers\">\n <Dropdown\n current={rendererName}\n values={Object.keys(props.renderers)}\n open={isOpen('renderer')}\n zIndex={isOpen('renderer') ? maxZIndex + 1 : 1}\n toggle={() => setOpenDropdown(isOpen('renderer') ? false : 'renderer')}\n setValue={propUpdater('rendererName')}\n />\n </td>\n );\n\n const sortIcons = {\n key_a_to_z: {\n rowSymbol: '↕',\n colSymbol: '↔',\n next: 'value_a_to_z',\n },\n value_a_to_z: {\n rowSymbol: '↓',\n colSymbol: '→',\n next: 'value_z_to_a',\n },\n value_z_to_a: {rowSymbol: '↑', colSymbol: '←', next: 'key_a_to_z'},\n };\n\n const attributeOptions = getAttributeOptions();\n const aggregatorCell = (\n <td className=\"pvtVals\">\n {aggregations.map((agg, idx) => {\n const aggDropdownKey = `aggregation-${agg.key}-agg`;\n const numValsAllowed = numInputsForAggregator(agg.aggregatorName);\n const vals = defaultValsForAggregator(agg.aggregatorName, agg.vals);\n return (\n <div className=\"pvtAggregatorRow\" key={agg.key || idx}>\n <Dropdown\n current={agg.aggregatorName}\n values={Object.keys(props.aggregators)}\n open={isOpen(aggDropdownKey)}\n zIndex={isOpen(aggDropdownKey) ? maxZIndex + 1 : 1}\n toggle={() =>\n setOpenDropdown(isOpen(aggDropdownKey) ? false : aggDropdownKey)\n }\n setValue={value => setAggregationAggregator(idx, value)}\n />\n {numValsAllowed > 0 && (\n <div className=\"pvtAggregatorVals\">\n {new Array(numValsAllowed).fill().map((n, i) => {\n const valDropdownKey = `aggregation-${agg.key}-val-${i}`;\n return (\n <Dropdown\n key={`agg-val-${agg.key}-${i}`}\n current={vals[i]}\n values={attributeOptions}\n open={isOpen(valDropdownKey)}\n zIndex={isOpen(valDropdownKey) ? maxZIndex + 1 : 1}\n toggle={() =>\n setOpenDropdown(\n isOpen(valDropdownKey) ? false : valDropdownKey\n )\n }\n setValue={value => setAggregationVal(idx, i, value)}\n />\n );\n })}\n </div>\n )}\n {aggregations.length > 1 && (\n <button\n type=\"button\"\n className=\"pvtButton pvtRemoveAggregator\"\n onClick={e => {\n e.stopPropagation();\n removeAggregationRow(idx);\n }}\n >\n Remove\n </button>\n )}\n </div>\n );\n })}\n <div className=\"pvtAggregationModeToggle\">\n <label\n htmlFor=\"pvtAggregationMode\"\n style={{marginRight: '6px', fontSize: '12px'}}\n >\n Aggregation values on:\n </label>\n <select\n id=\"pvtAggregationMode\"\n value={aggregationDisplayMode}\n onChange={e => setAggregationDisplayMode(e.target.value)}\n >\n <option value=\"row\">Rows</option>\n <option value=\"column\">Columns</option>\n </select>\n </div>\n <button\n type=\"button\"\n className=\"pvtButton pvtAddAggregator\"\n onClick={e => {\n e.stopPropagation();\n addAggregationRow();\n }}\n >\n + Add Value\n </button>\n <a\n role=\"button\"\n className=\"pvtRowOrder\"\n onClick={() => propUpdater('rowOrder')(sortIcons[props.rowOrder].next)}\n >\n {sortIcons[props.rowOrder].rowSymbol}\n </a>\n <a\n role=\"button\"\n className=\"pvtColOrder\"\n onClick={() => propUpdater('colOrder')(sortIcons[props.colOrder].next)}\n >\n {sortIcons[props.colOrder].colSymbol}\n </a>\n {aggregatorCellOutlet && aggregatorCellOutlet(props.data)}\n <ConditionalFormattingUI\n tableOptions={tableOptions}\n onChange={sendPropUpdate}\n moveToTop={() => moveFilterBoxToTop('conditionalFormatting')}\n zIndex={zIndices.conditionalFormatting || maxZIndex}\n />\n <CellFormattingUI\n tableOptions={tableOptions}\n onChange={sendPropUpdate}\n moveToTop={() => moveFilterBoxToTop('cellFormatting')}\n zIndex={zIndices.cellFormatting || maxZIndex}\n />\n </td>\n );\n\n const unusedAttrs = Object.keys(attrValues)\n .filter(\n e =>\n !props.rows.includes(e) &&\n !props.cols.includes(e) &&\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n )\n .sort(sortAs(unusedOrder));\n\n const unusedLength = unusedAttrs.reduce((r, e) => r + e.length, 0);\n const horizUnused = unusedLength < props.unusedOrientationCutoff;\n\n const unusedAttrsCell = makeDnDCell(\n unusedAttrs,\n order => setUnusedOrder(order),\n `pvtAxisContainer pvtUnused ${horizUnused ? 'pvtHorizList' : 'pvtVertList'}`\n );\n\n const colAttrs = Array.from(new Set(props.cols)).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n );\n\n const colAttrsCell = makeDnDCell(\n colAttrs,\n order => setAxisFromDrag('cols', order),\n 'pvtAxisContainer pvtHorizList pvtCols'\n );\n\n const rowAttrs = Array.from(new Set(props.rows)).filter(\n e =>\n !props.hiddenAttributes.includes(e) &&\n !props.hiddenFromDragDrop.includes(e)\n );\n const rowAttrsCell = makeDnDCell(\n rowAttrs,\n order => setAxisFromDrag('rows', order),\n 'pvtAxisContainer pvtVertList pvtRows'\n );\n\n // `isShowProcessing` is a testing hook: when true it forces the loading\n // overlay on top of the table regardless of whether a worker computation\n // is actually running.\n const showProcessing =\n (isProcessing || props.isShowProcessing) && !computeError;\n // While recomputing, re-render the last valid table (old props matched to\n // their own precomputed result) so the overlay sits on top of real content.\n const staleView = showProcessing ? lastGoodViewRef.current : null;\n\n let outputContent;\n if (computeError) {\n outputContent = (\n <div className=\"pvtComputeError\">\n <p>\n <strong>PivotTable error: </strong>\n {computeError}\n </p>\n </div>\n );\n } else if (staleView) {\n outputContent = (\n <PivotTable\n {...staleView.props}\n data={staleView.materializedInput}\n precomputedData={\n staleView.precomputed ? staleView.precomputed.data : null\n }\n colSorts={staleView.props.colSorts || {}}\n rowSorts={staleView.props.rowSorts || {}}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n } else if (showProcessing) {\n // First computation: no previous table to keep visible yet.\n outputContent = <div className=\"pvtOutputPlaceholder\" />;\n } else {\n outputContent = (\n <PivotTable\n {...props}\n data={materializedInput}\n precomputedData={\n workerEligible && precomputed\n ? precomputed.data\n : props.precomputedData || null\n }\n colSorts={props.colSorts || {}}\n rowSorts={props.rowSorts || {}}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n }\n\n // With the `isShowProcessing` testing hook active and no real computation\n // running there is no progress to report, so feed the overlay a sample\n // value to exercise its progress-bar and percentage branch as well.\n const overlayProgress =\n props.isShowProcessing && !isProcessing\n ? progress || {processed: 60, total: 100, phase: 'aggregate'}\n : progress;\n\n const outputCell = (\n <td className=\"pvtOutput\">\n {outputContent}\n {showProcessing ? (\n <PivotLoadingOverlay progress={overlayProgress} />\n ) : null}\n </td>\n );\n\n if (horizUnused) {\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => setOpenDropdown(false)}>\n <tr>\n {rendererCell}\n {unusedAttrsCell}\n </tr>\n <tr>\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n }\n\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => setOpenDropdown(false)}>\n <tr>\n {rendererCell}\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {unusedAttrsCell}\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n}\n\nPivotTableUI.propTypes = Object.assign({}, PivotTable.propTypes, {\n onChange: PropTypes.func.isRequired,\n hiddenAttributes: PropTypes.arrayOf(PropTypes.string),\n hiddenFromAggregators: PropTypes.arrayOf(PropTypes.string),\n hiddenFromDragDrop: PropTypes.arrayOf(PropTypes.string),\n unusedOrientationCutoff: PropTypes.number,\n menuLimit: PropTypes.number,\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n enableWorker: PropTypes.bool,\n workerThreshold: PropTypes.number,\n workerUrl: PropTypes.string,\n workerDebug: PropTypes.bool,\n isShowProcessing: PropTypes.bool,\n});\n\nPivotTableUI.defaultProps = Object.assign({}, PivotTable.defaultProps, {\n hiddenAttributes: [],\n hiddenFromAggregators: [],\n hiddenFromDragDrop: [],\n unusedOrientationCutoff: 85,\n menuLimit: 500,\n colSorts: {},\n rowSorts: {},\n enableWorker: true,\n workerThreshold: DEFAULT_WORKER_THRESHOLD,\n workerUrl: DEFAULT_WORKER_URL,\n workerDebug: false,\n isShowProcessing: false,\n});\n\nexport default PivotTableUI;\n"]}
|
package/dist/PlotlyRenderers.js
CHANGED
|
@@ -30,7 +30,9 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
|
|
30
30
|
|
|
31
31
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
32
32
|
|
|
33
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
33
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* eslint-disable valid-jsdoc */
|
|
34
|
+
/* eslint-disable no-inline-comments */
|
|
35
|
+
|
|
34
36
|
|
|
35
37
|
var CHART_WIDTH_RATIO = 1.5; // Ratio to scale down from full window width
|
|
36
38
|
var CHART_HEIGHT_RATIO = 1.4; // Ratio to scale down from full window height
|