@hrforte/react-pivottable 2.2.1 → 2.2.2
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/dist/PivotTableUI.js +160 -36
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/TableRenderers.js +73 -24
- package/dist/TableRenderers.js.map +1 -1
- package/dist/__tests__/PivotTableUI-processing-test.js +1 -1
- package/dist/__tests__/PivotTableUI-processing-test.js.map +1 -1
- package/dist/__tests__/PivotTableUI-rerender-test.js +314 -0
- package/dist/__tests__/PivotTableUI-rerender-test.js.map +1 -0
- package/dist/pivot-worker.js +1 -0
- package/dist/pivotCompute.js +1 -0
- package/dist/pivotCompute.js.map +1 -1
- package/dist/pivottable.css +38 -4
- package/package.json +1 -1
package/dist/PivotTableUI.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","PivotTableUI","unusedOrder","setUnusedOrder","zIndices","setZIndices","maxZIndex","setMaxZIndex","openDropdown","setOpenDropdown","setAttrValues","materializedInput","setMaterializedInput","lastDataRef","undefined","enabled","enableWorker","threshold","workerThreshold","isProcessing","setIsProcessing","resultReady","setResultReady","precomputed","setPrecomputed","computeError","setComputeError","precomputedRef","unmountedRef","activeRequestRef","dataVersionRef","versionedDataRef","instanceIdRef","workerEligible","data","computeSignature","rows","cols","aggregatorName","aggregations","vals","sorters","rowOrder","colOrder","rowSorts","colSorts","materializeInput","nextData","materialized","derivedAttributes","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","aggregators","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","Math","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","staleView","outputContent","precomputedData","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, {\n useState,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} 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\n// Loading overlay shown while a worker computation is running. It is removed\n// only when both conditions hold: the worker posted its `pivot:result` event\n// AND PivotTableUI has committed the freshly computed table to the DOM (see\n// the resultReady/useLayoutEffect handshake below), so content never appears\n// after the overlay disappears.\nexport function PivotLoadingOverlay() {\n return (\n <div className=\"pvtLoadingOverlay\" role=\"status\">\n <div className=\"pvtLoadingSpinner\" aria-hidden=\"true\" />\n <div className=\"pvtLoadingText\">Processing…</div>\n </div>\n );\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 // True once the worker result has been applied but the overlay is still\n // showing: the fresh table renders underneath first, then a layout effect\n // clears `isProcessing` before the browser paints.\n const [resultReady, setResultReady] = useState(false);\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 [props.data, props.enableWorker, props.workerThreshold]\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 // The loading overlay may only be turned off once the new result has been\n // rendered: the worker's `.then` sets `resultReady` (which makes this\n // render output the fresh table underneath the still-visible overlay), and\n // this layout effect runs after that DOM commit but before the browser\n // paints - so the overlay disappears exactly when the table is on screen.\n useLayoutEffect(() => {\n if (resultReady && isProcessing) {\n setIsProcessing(false);\n }\n }, [resultReady, isProcessing]);\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 (versionedDataRef.current !== props.data) {\n versionedDataRef.current = props.data;\n dataVersionRef.current += 1;\n }\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\n configureWorkerUrl(props.workerUrl || DEFAULT_WORKER_URL);\n setIsProcessing(true);\n setResultReady(false);\n setComputeError(null);\n\n const timer = setTimeout(() => {\n const requestId = activeRequestRef.current;\n const dataKey = `${instanceIdRef.current}-data-${dataVersionRef.current}`;\n computePivotWithFallback(props.data, dataKey, createWorkerConfig(props))\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 // Keep the overlay up for one more render: `resultReady` makes the\n // fresh table render underneath, and the layout effect above turns\n // `isProcessing` off only after that render has been committed.\n setResultReady(true);\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 }, [props.data, 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 // `showProcessing` 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.showProcessing) && !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 =\n showProcessing && !resultReady ? 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 && !resultReady) {\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 const outputCell = <td className=\"pvtOutput\">{outputContent}</td>;\n\n if (horizUnused) {\n return (\n <React.Fragment>\n {showProcessing ? <PivotLoadingOverlay /> : null}\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 </React.Fragment>\n );\n }\n\n return (\n <React.Fragment>\n {showProcessing ? <PivotLoadingOverlay /> : null}\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 </React.Fragment>\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 showProcessing: 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 showProcessing: false,\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","EMPTY_SORTS","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","PivotTableUI","unusedOrder","setUnusedOrder","zIndices","setZIndices","maxZIndex","setMaxZIndex","openDropdown","setOpenDropdown","setAttrValues","materializedInput","setMaterializedInput","lastDataRef","undefined","enabled","enableWorker","threshold","workerThreshold","isProcessing","setIsProcessing","resultReady","setResultReady","precomputed","setPrecomputed","computeError","setComputeError","precomputedRef","unmountedRef","activeRequestRef","dataVersionRef","versionedDataRef","instanceIdRef","propsRef","workerEligible","data","computeSignature","rows","cols","aggregatorName","aggregations","vals","sorters","rowOrder","colOrder","rowSorts","colSorts","currentSignature","precomputedMatches","Boolean","signature","pendingCompute","materializeInput","nextData","materialized","derivedAttributes","workerDebug","lastGoodViewRef","workerUrl","DEFAULT_WORKER_URL","timer","setTimeout","requestId","dataKey","then","result","catch","error","message","WORKER_DEBOUNCE_MS","clearTimeout","sendPropUpdate","currentProps","command","propUpdater","key","hasExternalAggregations","Array","isArray","numInputsForAggregator","aggregators","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","Math","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","staleView","staleViewElement","liveViewElement","precomputedData","outputContent","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, {\n useCallback,\n useState,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} 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// Shared, identity-stable fallback for the `colSorts`/`rowSorts` props. An\n// inline `{}` literal would be a new object on every render, which makes the\n// rendered table re-render even when nothing about the pivot changed.\nconst EMPTY_SORTS = {};\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\n// Loading overlay shown while a worker computation is running. It is removed\n// only when both conditions hold: the worker posted its `pivot:result` event\n// AND PivotTableUI has committed the freshly computed table to the DOM (see\n// the resultReady/useLayoutEffect handshake below), so content never appears\n// after the overlay disappears.\nexport function PivotLoadingOverlay() {\n return (\n <div className=\"pvtLoadingOverlay\" role=\"status\">\n <div className=\"pvtLoadingSpinner\" aria-hidden=\"true\" />\n <div className=\"pvtLoadingText\">\n <span>P</span>\n <span>r</span>\n <span>o</span>\n <span>c</span>\n <span>e</span>\n <span>s</span>\n <span>s</span>\n <span>i</span>\n <span>n</span>\n <span>g</span>\n <span>…</span>\n </div>\n </div>\n );\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 // True once the worker result has been applied but the overlay is still\n // showing: the fresh table renders underneath first, then a layout effect\n // clears `isProcessing` before the browser paints.\n const [resultReady, setResultReady] = useState(false);\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 // Latest props, readable from identity-stable event handlers. Layout effects\n // run synchronously after every commit, so this is always up to date before\n // the next user event is dispatched (unlike a render-time assignment).\n const propsRef = useRef(props);\n useLayoutEffect(() => {\n propsRef.current = props;\n });\n\n const workerEligible = useMemo(\n () =>\n canComputeInWorker(props, {\n enabled: props.enableWorker,\n threshold: props.workerThreshold,\n }),\n [props.data, props.enableWorker, props.workerThreshold]\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 // Version the dataset during render instead of inside the compute effect.\n // The effect runs *after* the render, so bumping the version there left one\n // render in which the new props were combined with the previous precomputed\n // result: a full (and wasted) re-render of the whole table on every change.\n if (versionedDataRef.current !== props.data) {\n versionedDataRef.current = props.data;\n dataVersionRef.current += 1;\n }\n\n // Signature of the pivot result the current props + data require, and whether\n // the precomputed result we hold actually belongs to it.\n const currentSignature = `${computeSignature}#${dataVersionRef.current}`;\n const precomputedMatches = Boolean(\n precomputedRef.current &&\n precomputedRef.current.signature === currentSignature\n );\n\n // Worker-eligible props whose result has not arrived yet. While this is true\n // the previous, consistent table stays on screen (never a mix of new props\n // with old results), so rendering and worker computation never overlap.\n const pendingCompute = workerEligible && !precomputedMatches;\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 // `pendingCompute` keeps an inconsistent pair (new props, old result) out of\n // the snapshot: it may only ever hold a view that was actually rendered.\n const lastGoodViewRef = useRef(null);\n\n useEffect(() => {\n if (!isProcessing && !computeError && !pendingCompute) {\n lastGoodViewRef.current = {\n props,\n materializedInput,\n precomputed: workerEligible && precomputed ? precomputed : null,\n };\n }\n });\n\n // The loading overlay may only be turned off once the new result has been\n // rendered: the worker's `.then` sets `resultReady` (which makes this\n // render output the fresh table underneath the still-visible overlay), and\n // this layout effect runs after that DOM commit but before the browser\n // paints - so the overlay disappears exactly when the table is on screen.\n useLayoutEffect(() => {\n if (resultReady && isProcessing) {\n setIsProcessing(false);\n }\n }, [resultReady, isProcessing]);\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 // Classic main-thread path (small dataset, worker disabled or unavailable):\n // the renderer builds its own PivotData synchronously, so precomputing the\n // same aggregation here would only duplicate the work and keep the loading\n // overlay on screen for a result nothing is going to read. `attrValues` and\n // `materializedInput` are handled by the effect above.\n if (!workerEligible) {\n setIsProcessing(false);\n setResultReady(false);\n setComputeError(null);\n return undefined;\n }\n\n // The result for the current props + data is already available (the data\n // version was bumped during render, see above).\n if (precomputedMatches) {\n setIsProcessing(false);\n return undefined;\n }\n\n configureWorkerUrl(props.workerUrl || DEFAULT_WORKER_URL);\n setIsProcessing(true);\n setResultReady(false);\n setComputeError(null);\n\n const timer = setTimeout(() => {\n const requestId = activeRequestRef.current;\n const dataKey = `${instanceIdRef.current}-data-${dataVersionRef.current}`;\n computePivotWithFallback(props.data, dataKey, createWorkerConfig(props))\n .then(result => {\n if (unmountedRef.current || requestId !== activeRequestRef.current) {\n return;\n }\n precomputedRef.current = {signature: currentSignature, data: result};\n setPrecomputed(precomputedRef.current);\n setAttrValues(result.attrValues);\n setMaterializedInput(result.materializedInput);\n setComputeError(null);\n // Keep the overlay up for one more render: `resultReady` makes the\n // fresh table render underneath, and the layout effect above turns\n // `isProcessing` off only after that render has been committed.\n setResultReady(true);\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 }, [props.data, computeSignature]);\n\n // Event handlers are referentially stable (they read the latest props from\n // `propsRef`): a new handler identity on every render would defeat\n // PivotTable's PureComponent check and re-render the entire table - which is\n // what makes drag and drop feel frozen on large datasets.\n const sendPropUpdate = useCallback(command => {\n const currentProps = propsRef.current;\n currentProps.onChange(update(currentProps, 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 = useCallback(\n (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 [sendPropUpdate]\n );\n\n const handleRowSort = useCallback(\n (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 [sendPropUpdate]\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 // `showProcessing` 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. `pendingCompute` means the props/data on screen\n // already changed while the worker result is still on its way, so the\n // previous table has to stay visible (with the overlay) until it arrives.\n const showProcessing =\n (isProcessing || pendingCompute || props.showProcessing) && !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 // `pendingCompute` - and not the leftover `resultReady` flag of the previous\n // computation - is what decides this. Relying on `resultReady` let the render\n // that received new props fall through to the live branch and draw the whole\n // table with the *previous* result, only to throw it away again on the next\n // render: two extra full re-renders per change on every drag event.\n // The element is memoized on purpose: re-creating it on every parent render\n // would make React re-render every cell of the (potentially huge) table on\n // each drag event and keystroke, which is what made drag & drop feel frozen.\n const staleView = pendingCompute ? lastGoodViewRef.current : null;\n const staleViewElement = useMemo(() => {\n if (!staleView) {\n return null;\n }\n return (\n <PivotTable\n {...staleView.props}\n data={staleView.materializedInput}\n precomputedData={\n staleView.precomputed ? staleView.precomputed.data : null\n }\n colSorts={staleView.props.colSorts || EMPTY_SORTS}\n rowSorts={staleView.props.rowSorts || EMPTY_SORTS}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\n }, [staleView, handleColSort, handleRowSort]);\n\n // Stable identities for the sort maps: an inline `{}` fallback would be a new\n // object on every render and invalidate PivotTable's PureComponent check.\n const colSorts = props.colSorts || EMPTY_SORTS;\n const rowSorts = props.rowSorts || EMPTY_SORTS;\n const liveViewElement = (\n <PivotTable\n {...props}\n data={materializedInput}\n precomputedData={\n workerEligible && precomputed\n ? precomputed.data\n : props.precomputedData || null\n }\n colSorts={colSorts}\n rowSorts={rowSorts}\n onColSort={handleColSort}\n onRowSort={handleRowSort}\n />\n );\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 = staleViewElement;\n } else if (pendingCompute) {\n // First computation, or a change without any previous table to keep\n // visible: nothing consistent exists yet, so leave the area empty.\n outputContent = <div className=\"pvtOutputPlaceholder\" />;\n } else {\n outputContent = liveViewElement;\n }\n\n const outputCell = <td className=\"pvtOutput\">{outputContent}</td>;\n\n if (horizUnused) {\n return (\n <React.Fragment>\n {showProcessing ? <PivotLoadingOverlay /> : null}\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 </React.Fragment>\n );\n }\n\n return (\n <React.Fragment>\n {showProcessing ? <PivotLoadingOverlay /> : null}\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 </React.Fragment>\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 showProcessing: 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 showProcessing: false,\n});\n\nexport default PivotTableUI;\n"]}
|