@hrforte/react-pivottable 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/dist/PivotTableUI.js +4 -4
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/TableRenderers.js +35 -1
- package/dist/TableRenderers.js.map +1 -1
- package/dist/__tests__/PivotTableUI-processing-test.js +4 -4
- package/dist/__tests__/PivotTableUI-processing-test.js.map +1 -1
- package/dist/__tests__/TableRenderers-showNumericalOrder-test.js +178 -0
- package/dist/__tests__/TableRenderers-showNumericalOrder-test.js.map +1 -0
- package/dist/pivottable.css +3 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -127,10 +127,22 @@ but the main thread is used. Verify with `workerDebug`:
|
|
|
127
127
|
`[pivottable worker]` prefix. Logs emitted inside the worker thread are
|
|
128
128
|
forwarded to the page console as well. Can also be enabled globally with
|
|
129
129
|
`window.__PVT_WORKER_DEBUG__ = true`.
|
|
130
|
-
- `
|
|
130
|
+
- `showProcessing` (`bool`, default `false`): testing/debugging hook. When
|
|
131
131
|
`true` the loading overlay is forced on top of the table even if nothing is
|
|
132
132
|
being computed, so the `PivotLoadingOverlay` can be inspected without
|
|
133
133
|
generating a large dataset. The overlay shows only a spinner and a label;
|
|
134
134
|
during real computations it is turned off only after the worker has posted
|
|
135
135
|
its result event **and** PivotTableUI has rendered the new table (the
|
|
136
136
|
removal happens before the browser paints, so no empty frame is shown).
|
|
137
|
+
- `showNumericalOrder` (`bool`, default `false`): adds a "No." column in front
|
|
138
|
+
of the row attributes with the 1-based index of every data row (`1`, `2`,
|
|
139
|
+
`3`, …). The "No." header cell spans the header rows (row group labels,
|
|
140
|
+
column attribute rows, aggregator header rows), the row label columns keep
|
|
141
|
+
their `colSpan`/`rowSpan` alignment and the total rows extend their label
|
|
142
|
+
over the new column. When multiple aggregations are displayed as rows each
|
|
143
|
+
rendered row is numbered, so a record listing `Count` and `Sum` consumes two
|
|
144
|
+
numbers.
|
|
145
|
+
|
|
146
|
+
```jsx
|
|
147
|
+
<PivotTableUI data={rows} rows={['name']} showNumericalOrder />
|
|
148
|
+
```
|
package/dist/PivotTableUI.js
CHANGED
|
@@ -1818,10 +1818,10 @@ function PivotTableUI(props) {
|
|
|
1818
1818
|
return setAxisFromDrag('rows', order);
|
|
1819
1819
|
}, 'pvtAxisContainer pvtVertList pvtRows');
|
|
1820
1820
|
|
|
1821
|
-
// `
|
|
1821
|
+
// `showProcessing` is a testing hook: when true it forces the loading
|
|
1822
1822
|
// overlay on top of the table regardless of whether a worker computation
|
|
1823
1823
|
// is actually running.
|
|
1824
|
-
var showProcessing = (isProcessing || props.
|
|
1824
|
+
var showProcessing = (isProcessing || props.showProcessing) && !computeError;
|
|
1825
1825
|
// While recomputing, re-render the last valid table (old props matched to
|
|
1826
1826
|
// their own precomputed result) so the overlay sits on top of real content.
|
|
1827
1827
|
var staleView = showProcessing && !resultReady ? lastGoodViewRef.current : null;
|
|
@@ -1951,7 +1951,7 @@ PivotTableUI.propTypes = Object.assign({}, _PivotTable2.default.propTypes, {
|
|
|
1951
1951
|
workerThreshold: _propTypes2.default.number,
|
|
1952
1952
|
workerUrl: _propTypes2.default.string,
|
|
1953
1953
|
workerDebug: _propTypes2.default.bool,
|
|
1954
|
-
|
|
1954
|
+
showProcessing: _propTypes2.default.bool
|
|
1955
1955
|
});
|
|
1956
1956
|
|
|
1957
1957
|
PivotTableUI.defaultProps = Object.assign({}, _PivotTable2.default.defaultProps, {
|
|
@@ -1966,7 +1966,7 @@ PivotTableUI.defaultProps = Object.assign({}, _PivotTable2.default.defaultProps,
|
|
|
1966
1966
|
workerThreshold: _pivotCompute.DEFAULT_WORKER_THRESHOLD,
|
|
1967
1967
|
workerUrl: _PivotDataWorker.DEFAULT_WORKER_URL,
|
|
1968
1968
|
workerDebug: false,
|
|
1969
|
-
|
|
1969
|
+
showProcessing: false
|
|
1970
1970
|
});
|
|
1971
1971
|
|
|
1972
1972
|
exports.default = PivotTableUI;
|
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","isShowProcessing","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 // `isShowProcessing` is a testing hook: when true it forces the loading\n // overlay on top of the table regardless of whether a worker computation\n // is actually running.\n const showProcessing =\n (isProcessing || props.isShowProcessing) && !computeError;\n // While recomputing, re-render the last valid table (old props matched to\n // their own precomputed result) so the overlay sits on top of real content.\n const staleView =\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 isShowProcessing: PropTypes.bool,\n});\n\nPivotTableUI.defaultProps = Object.assign({}, PivotTable.defaultProps, {\n hiddenAttributes: [],\n hiddenFromAggregators: [],\n hiddenFromDragDrop: [],\n unusedOrientationCutoff: 85,\n menuLimit: 500,\n colSorts: {},\n rowSorts: {},\n enableWorker: true,\n workerThreshold: DEFAULT_WORKER_THRESHOLD,\n workerUrl: DEFAULT_WORKER_URL,\n workerDebug: false,\n isShowProcessing: false,\n});\n\nexport default PivotTableUI;\n"]}
|
|
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"]}
|