@ayd-ab/react-pivottable 0.12.0 → 0.12.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/dist/PivotTable.d.ts +27 -0
- package/dist/PivotTable.js.map +1 -0
- package/dist/PivotTableUI.d.ts +71 -0
- package/dist/PivotTableUI.js.map +1 -0
- package/dist/PlotlyRenderers.d.ts +19 -0
- package/dist/PlotlyRenderers.js.map +1 -0
- package/dist/TableRenderers.d.ts +14 -0
- package/dist/TableRenderers.js.map +1 -0
- package/dist/Utilities.d.ts +118 -0
- package/dist/Utilities.js.map +1 -0
- package/dist/__tests__/Utilities-test.js +413 -0
- package/dist/__tests__/Utilities-test.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/input.d.ts +38 -0
- package/package.json +9 -16
- package/PivotTable.js.map +0 -1
- package/PivotTableUI.js.map +0 -1
- package/PlotlyRenderers.js.map +0 -1
- package/TableRenderers.js.map +0 -1
- package/Utilities.js.map +0 -1
- /package/{PivotTable.js → dist/PivotTable.js} +0 -0
- /package/{PivotTableUI.js → dist/PivotTableUI.js} +0 -0
- /package/{PlotlyRenderers.js → dist/PlotlyRenderers.js} +0 -0
- /package/{TableRenderers.js → dist/TableRenderers.js} +0 -0
- /package/{Utilities.js → dist/Utilities.js} +0 -0
- /package/{pivottable.css → dist/pivottable.css} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { PlotParams } from "react-plotly.js";
|
|
3
|
+
import { TableRenderers } from "./TableRenderers";
|
|
4
|
+
import { Pivot, PivotData } from "./Utilities";
|
|
5
|
+
export interface PivotTableProps extends Pivot {
|
|
6
|
+
// maybe some generic can be implemented for the last two.
|
|
7
|
+
renderers?: TableRenderers;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* key to renderers object specifying the renderer to use
|
|
11
|
+
* @default "Table"
|
|
12
|
+
*/
|
|
13
|
+
rendererName?: string;
|
|
14
|
+
|
|
15
|
+
// plotly options
|
|
16
|
+
plotlyOptions?: PlotParams["layout"];
|
|
17
|
+
plotlyConfig?: PlotParams["config"];
|
|
18
|
+
onRendererUpdate?: PlotParams["onUpdate"];
|
|
19
|
+
|
|
20
|
+
// table options
|
|
21
|
+
tableColorScaleGenerator?: (values: number[]) => (x: number) => React.CSSProperties;
|
|
22
|
+
tableOptions?: {
|
|
23
|
+
clickCallback?: (e: React.MouseEvent, value: any, filters: Record<string, string>, data: PivotData) => void;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default class PivotTable extends React.PureComponent<PivotTableProps> {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/PivotTable.jsx"],"names":["PivotTable","Renderer","props","renderers","rendererName","Object","keys","React","PureComponent","propTypes","assign","PivotData","PropTypes","string","objectOf","func","defaultProps","TableRenderers"],"mappings":";;;;;;;;AAAA;;;;AACA;;;;AACA;;AACA;;;;;;;;;;;;AAEA;AACA;;IAEMA,U;;;;;;;;;;;6BACK;AACP,UAAMC,WAAW,KAAKC,KAAL,CAAWC,SAAX,CACf,KAAKD,KAAL,CAAWE,YAAX,IAA2B,KAAKF,KAAL,CAAWC,SAAtC,GACI,KAAKD,KAAL,CAAWE,YADf,GAEIC,OAAOC,IAAP,CAAY,KAAKJ,KAAL,CAAWC,SAAvB,EAAkC,CAAlC,CAHW,CAAjB;AAKA,aAAO,8BAAC,QAAD,EAAc,KAAKD,KAAnB,CAAP;AACD;;;;EARsBK,gBAAMC,a;;AAW/BR,WAAWS,SAAX,GAAuBJ,OAAOK,MAAP,CAAc,EAAd,EAAkBC,qBAAUF,SAA5B,EAAuC;AAC5DL,gBAAcQ,oBAAUC,MADoC;AAE5DV,aAAWS,oBAAUE,QAAV,CAAmBF,oBAAUG,IAA7B;AAFiD,CAAvC,CAAvB;;AAKAf,WAAWgB,YAAX,GAA0BX,OAAOK,MAAP,CAAc,EAAd,EAAkBC,qBAAUK,YAA5B,EAA0C;AAClEZ,gBAAc,OADoD;AAElED,aAAWc;AAFuD,CAA1C,CAA1B;;kBAKejB,U","file":"PivotTable.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {PivotData} from './Utilities';\nimport TableRenderers from './TableRenderers';\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nclass PivotTable extends React.PureComponent {\n render() {\n const Renderer = this.props.renderers[\n this.props.rendererName in this.props.renderers\n ? this.props.rendererName\n : Object.keys(this.props.renderers)[0]\n ];\n return <Renderer {...this.props} />;\n }\n}\n\nPivotTable.propTypes = Object.assign({}, PivotData.propTypes, {\n rendererName: PropTypes.string,\n renderers: PropTypes.objectOf(PropTypes.func),\n});\n\nPivotTable.defaultProps = Object.assign({}, PivotData.defaultProps, {\n rendererName: 'Table',\n renderers: TableRenderers,\n});\n\nexport default PivotTable;\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { PivotTableProps } from "./PivotTable";
|
|
3
|
+
import { TSorterFn } from "./Utilities";
|
|
4
|
+
|
|
5
|
+
export interface PivotTableUIProps extends PivotTableProps {
|
|
6
|
+
/**
|
|
7
|
+
* @summary
|
|
8
|
+
* This is required in the docs. The param exposes all the Api.
|
|
9
|
+
* @see function called every time anything changes in the UI,
|
|
10
|
+
* with the new value of the properties needed to render the new state.
|
|
11
|
+
* This function must be hooked into a state-management system in order
|
|
12
|
+
* for the "dumb" PivotTableUI component to work.
|
|
13
|
+
* @link https://github.com/plotly/react-pivottable/blob/master/README.md
|
|
14
|
+
*/
|
|
15
|
+
onChange(e: PivotTableUIProps): void;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* contains attribute names to omit from the UI
|
|
19
|
+
*/
|
|
20
|
+
hiddenAttributes?: string[];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* contains attribute names to omit from the aggregator arguments dropdowns
|
|
24
|
+
*/
|
|
25
|
+
hiddenFromAggregators?: string[];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* contains attribute names to omit from the drag'n'drop portion of the UI
|
|
29
|
+
*/
|
|
30
|
+
hiddenFromDragDrop?: string[];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* If the attributes' names' combined length in characters exceeds this value
|
|
34
|
+
* then the unused attributes area will be shown vertically to the left of
|
|
35
|
+
* the UI instead of horizontally above it. 0 therefore means 'always vertical',
|
|
36
|
+
* and Infinity means 'always horizontal'.
|
|
37
|
+
* @default 85
|
|
38
|
+
*/
|
|
39
|
+
unusedOrientationCutoff?: number;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* maximum number of values to list in the double-click menu.
|
|
43
|
+
* @default 500
|
|
44
|
+
*/
|
|
45
|
+
menuLimit?: number;
|
|
46
|
+
}
|
|
47
|
+
export default class PivotTableUI extends React.Component<PivotTableUIProps> {}
|
|
48
|
+
|
|
49
|
+
export interface DraggableAttributeProps {
|
|
50
|
+
name: string;
|
|
51
|
+
attrValues: { [K: string]: number };
|
|
52
|
+
addValuesToFilter: (param: string, val: string[]) => void;
|
|
53
|
+
removeValuesFromFilter: (param: string, val: string[]) => void;
|
|
54
|
+
moveFilterBoxToTop: (attr: string) => void;
|
|
55
|
+
sorter: TSorterFn;
|
|
56
|
+
valueFilter?: { [K: string]: boolean };
|
|
57
|
+
menuLimit?: number;
|
|
58
|
+
zIndex?: number;
|
|
59
|
+
}
|
|
60
|
+
export class DraggableAttribute extends React.Component<DraggableAttributeProps> {}
|
|
61
|
+
|
|
62
|
+
export interface DropdownProps {
|
|
63
|
+
toggle(): void;
|
|
64
|
+
open: boolean;
|
|
65
|
+
current: string;
|
|
66
|
+
values: string[];
|
|
67
|
+
zIndex?: number;
|
|
68
|
+
setValue(param: string): void;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export class Dropdown extends React.PureComponent<DropdownProps> {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/PivotTableUI.jsx"],"names":["DraggableAttribute","props","state","open","filterText","nodeRef","React","createRef","value","valueFilter","removeValuesFromFilter","name","addValuesToFilter","x","toLowerCase","trim","includes","e","stopPropagation","setValuesInFilter","Object","keys","attrValues","filter","y","showMenu","length","menuLimit","values","shown","matchesFilter","bind","sort","sorter","display","cursor","zIndex","moveFilterBoxToTop","setState","target","map","toggleValue","selectOnly","filtered","toggleFilterBox","getFilterBox","Component","defaultProps","propTypes","PropTypes","string","isRequired","func","objectOf","number","bool","Dropdown","toggle","current","r","setValue","PureComponent","PivotTableUI","unusedOrder","zIndices","maxZIndex","openDropdown","materializedInput","materializeInput","data","nextData","newState","recordsProcessed","PivotData","forEachRecord","derivedAttributes","record","push","attr","null","command","onChange","key","sendPropUpdate","$set","attribute","reduce","v","$unset","dropdown","items","classes","group","ghostClass","preventOnFilter","sorters","numValsAllowed","aggregators","aggregatorName","numInputs","aggregatorCellOutlet","outlet","rendererName","renderers","rendererCell","isOpen","propUpdater","sortIcons","key_a_to_z","rowSymbol","colSymbol","next","value_a_to_z","value_z_to_a","aggregatorCell","rowOrder","colOrder","Array","fill","n","i","vals","hiddenAttributes","hiddenFromAggregators","$splice","unusedAttrs","rows","cols","hiddenFromDragDrop","unusedLength","horizUnused","unusedOrientationCutoff","unusedAttrsCell","makeDnDCell","order","colAttrs","colAttrsCell","rowAttrs","rowAttrsCell","outputCell","assign","PivotTable","arrayOf"],"mappings":"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","file":"PivotTableUI.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport update from 'immutability-helper';\nimport {PivotData, sortAs, getSort} from './Utilities';\nimport PivotTable from './PivotTable';\nimport Sortable from 'react-sortablejs';\nimport Draggable from 'react-draggable';\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nexport class DraggableAttribute extends React.Component {\n constructor(props) {\n super(props);\n this.state = {open: false, filterText: ''};\n this.nodeRef = React.createRef();\n }\n\n toggleValue(value) {\n if (value in this.props.valueFilter) {\n this.props.removeValuesFromFilter(this.props.name, [value]);\n } else {\n this.props.addValuesToFilter(this.props.name, [value]);\n }\n }\n\n matchesFilter(x) {\n return x\n .toLowerCase()\n .trim()\n .includes(this.state.filterText.toLowerCase().trim());\n }\n\n selectOnly(e, value) {\n e.stopPropagation();\n this.props.setValuesInFilter(\n this.props.name,\n Object.keys(this.props.attrValues).filter(y => y !== value)\n );\n }\n\n getFilterBox() {\n const showMenu =\n Object.keys(this.props.attrValues).length < this.props.menuLimit;\n\n const values = Object.keys(this.props.attrValues);\n const shown = values\n .filter(this.matchesFilter.bind(this))\n .sort(this.props.sorter);\n\n return (\n <Draggable handle=\".pvtDragHandle\" nodeRef={this.nodeRef}>\n <div\n ref={this.nodeRef}\n className=\"pvtFilterBox\"\n style={{\n display: 'block',\n cursor: 'initial',\n zIndex: this.props.zIndex,\n }}\n onClick={() => this.props.moveFilterBoxToTop(this.props.name)}\n >\n <a onClick={() => this.setState({open: false})} className=\"pvtCloseX\">\n ×\n </a>\n <span className=\"pvtDragHandle\">☰</span>\n <h4>{this.props.name}</h4>\n\n {showMenu || <p>(too many values to show)</p>}\n\n {showMenu && (\n <p>\n <input\n type=\"text\"\n placeholder=\"Filter values\"\n className=\"pvtSearch\"\n value={this.state.filterText}\n onChange={e =>\n this.setState({\n filterText: e.target.value,\n })\n }\n />\n <br />\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n this.props.removeValuesFromFilter(\n this.props.name,\n Object.keys(this.props.attrValues).filter(\n this.matchesFilter.bind(this)\n )\n )\n }\n >\n Select {values.length === shown.length ? 'All' : shown.length}\n </a>{' '}\n <a\n role=\"button\"\n className=\"pvtButton\"\n onClick={() =>\n this.props.addValuesToFilter(\n this.props.name,\n Object.keys(this.props.attrValues).filter(\n this.matchesFilter.bind(this)\n )\n )\n }\n >\n Deselect {values.length === shown.length ? 'All' : shown.length}\n </a>\n </p>\n )}\n\n {showMenu && (\n <div className=\"pvtCheckContainer\">\n {shown.map(x => (\n <p\n key={x}\n onClick={() => this.toggleValue(x)}\n className={x in this.props.valueFilter ? '' : 'selected'}\n >\n <a className=\"pvtOnly\" onClick={e => this.selectOnly(e, x)}>\n only\n </a>\n <a className=\"pvtOnlySpacer\"> </a>\n\n {x === '' ? <em>null</em> : x}\n </p>\n ))}\n </div>\n )}\n </div>\n </Draggable>\n );\n }\n\n toggleFilterBox() {\n this.setState({open: !this.state.open});\n this.props.moveFilterBoxToTop(this.props.name);\n }\n\n render() {\n const filtered =\n Object.keys(this.props.valueFilter).length !== 0\n ? 'pvtFilteredAttribute'\n : '';\n return (\n <li data-id={this.props.name}>\n <span className={'pvtAttr ' + filtered}>\n {this.props.name}\n <span\n className=\"pvtTriangle\"\n onClick={this.toggleFilterBox.bind(this)}\n >\n {' '}\n ▾\n </span>\n </span>\n\n {this.state.open ? this.getFilterBox() : null}\n </li>\n );\n }\n}\n\nDraggableAttribute.defaultProps = {\n valueFilter: {},\n};\n\nDraggableAttribute.propTypes = {\n name: PropTypes.string.isRequired,\n addValuesToFilter: PropTypes.func.isRequired,\n removeValuesFromFilter: PropTypes.func.isRequired,\n attrValues: PropTypes.objectOf(PropTypes.number).isRequired,\n valueFilter: PropTypes.objectOf(PropTypes.bool),\n moveFilterBoxToTop: PropTypes.func.isRequired,\n sorter: PropTypes.func.isRequired,\n menuLimit: PropTypes.number,\n zIndex: PropTypes.number,\n};\n\nexport class Dropdown extends React.PureComponent {\n render() {\n return (\n <div className=\"pvtDropdown\" style={{zIndex: this.props.zIndex}}>\n <div\n onClick={e => {\n e.stopPropagation();\n this.props.toggle();\n }}\n className={\n 'pvtDropdownValue pvtDropdownCurrent ' +\n (this.props.open ? 'pvtDropdownCurrentOpen' : '')\n }\n role=\"button\"\n >\n <div className=\"pvtDropdownIcon\">{this.props.open ? '×' : '▾'}</div>\n {this.props.current || <span> </span>}\n </div>\n\n {this.props.open && (\n <div className=\"pvtDropdownMenu\">\n {this.props.values.map(r => (\n <div\n key={r}\n role=\"button\"\n onClick={e => {\n e.stopPropagation();\n if (this.props.current === r) {\n this.props.toggle();\n } else {\n this.props.setValue(r);\n }\n }}\n className={\n 'pvtDropdownValue ' +\n (r === this.props.current ? 'pvtDropdownActiveValue' : '')\n }\n >\n {r}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n\nclass PivotTableUI extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n unusedOrder: [],\n zIndices: {},\n maxZIndex: 1000,\n openDropdown: false,\n attrValues: {},\n materializedInput: [],\n };\n }\n\n componentDidMount() {\n this.materializeInput(this.props.data);\n }\n\n componentDidUpdate() {\n this.materializeInput(this.props.data);\n }\n\n materializeInput(nextData) {\n if (this.state.data === nextData) {\n return;\n }\n const newState = {\n data: nextData,\n attrValues: {},\n materializedInput: [],\n };\n let recordsProcessed = 0;\n PivotData.forEachRecord(\n newState.data,\n this.props.derivedAttributes,\n function(record) {\n newState.materializedInput.push(record);\n for (const attr of Object.keys(record)) {\n if (!(attr in newState.attrValues)) {\n newState.attrValues[attr] = {};\n if (recordsProcessed > 0) {\n newState.attrValues[attr].null = recordsProcessed;\n }\n }\n }\n for (const attr in newState.attrValues) {\n const value = attr in record ? record[attr] : 'null';\n if (!(value in newState.attrValues[attr])) {\n newState.attrValues[attr][value] = 0;\n }\n newState.attrValues[attr][value]++;\n }\n recordsProcessed++;\n }\n );\n this.setState(newState);\n }\n\n sendPropUpdate(command) {\n this.props.onChange(update(this.props, command));\n }\n\n propUpdater(key) {\n return value => this.sendPropUpdate({[key]: {$set: value}});\n }\n\n setValuesInFilter(attribute, values) {\n this.sendPropUpdate({\n valueFilter: {\n [attribute]: {\n $set: values.reduce((r, v) => {\n r[v] = true;\n return r;\n }, {}),\n },\n },\n });\n }\n\n addValuesToFilter(attribute, values) {\n if (attribute in this.props.valueFilter) {\n this.sendPropUpdate({\n valueFilter: {\n [attribute]: values.reduce((r, v) => {\n r[v] = {$set: true};\n return r;\n }, {}),\n },\n });\n } else {\n this.setValuesInFilter(attribute, values);\n }\n }\n\n removeValuesFromFilter(attribute, values) {\n this.sendPropUpdate({\n valueFilter: {[attribute]: {$unset: values}},\n });\n }\n\n moveFilterBoxToTop(attribute) {\n this.setState(\n update(this.state, {\n maxZIndex: {$set: this.state.maxZIndex + 1},\n zIndices: {[attribute]: {$set: this.state.maxZIndex + 1}},\n })\n );\n }\n\n isOpen(dropdown) {\n return this.state.openDropdown === dropdown;\n }\n\n makeDnDCell(items, onChange, classes) {\n return (\n <Sortable\n options={{\n group: 'shared',\n ghostClass: 'pvtPlaceholder',\n filter: '.pvtFilterBox',\n preventOnFilter: false,\n }}\n tag=\"td\"\n className={classes}\n onChange={onChange}\n >\n {items.map(x => (\n <DraggableAttribute\n name={x}\n key={x}\n attrValues={this.state.attrValues[x]}\n valueFilter={this.props.valueFilter[x] || {}}\n sorter={getSort(this.props.sorters, x)}\n menuLimit={this.props.menuLimit}\n setValuesInFilter={this.setValuesInFilter.bind(this)}\n addValuesToFilter={this.addValuesToFilter.bind(this)}\n moveFilterBoxToTop={this.moveFilterBoxToTop.bind(this)}\n removeValuesFromFilter={this.removeValuesFromFilter.bind(this)}\n zIndex={this.state.zIndices[x] || this.state.maxZIndex}\n />\n ))}\n </Sortable>\n );\n }\n\n render() {\n const numValsAllowed =\n this.props.aggregators[this.props.aggregatorName]([])().numInputs || 0;\n\n const aggregatorCellOutlet = this.props.aggregators[\n this.props.aggregatorName\n ]([])().outlet;\n\n const rendererName =\n this.props.rendererName in this.props.renderers\n ? this.props.rendererName\n : Object.keys(this.props.renderers)[0];\n\n const rendererCell = (\n <td className=\"pvtRenderers\">\n <Dropdown\n current={rendererName}\n values={Object.keys(this.props.renderers)}\n open={this.isOpen('renderer')}\n zIndex={this.isOpen('renderer') ? this.state.maxZIndex + 1 : 1}\n toggle={() =>\n this.setState({\n openDropdown: this.isOpen('renderer') ? false : 'renderer',\n })\n }\n setValue={this.propUpdater('rendererName')}\n />\n </td>\n );\n\n const sortIcons = {\n key_a_to_z: {\n rowSymbol: '↕',\n colSymbol: '↔',\n next: 'value_a_to_z',\n },\n value_a_to_z: {\n rowSymbol: '↓',\n colSymbol: '→',\n next: 'value_z_to_a',\n },\n value_z_to_a: {rowSymbol: '↑', colSymbol: '←', next: 'key_a_to_z'},\n };\n\n const aggregatorCell = (\n <td className=\"pvtVals\">\n <Dropdown\n current={this.props.aggregatorName}\n values={Object.keys(this.props.aggregators)}\n open={this.isOpen('aggregators')}\n zIndex={this.isOpen('aggregators') ? this.state.maxZIndex + 1 : 1}\n toggle={() =>\n this.setState({\n openDropdown: this.isOpen('aggregators') ? false : 'aggregators',\n })\n }\n setValue={this.propUpdater('aggregatorName')}\n />\n <a\n role=\"button\"\n className=\"pvtRowOrder\"\n onClick={() =>\n this.propUpdater('rowOrder')(sortIcons[this.props.rowOrder].next)\n }\n >\n {sortIcons[this.props.rowOrder].rowSymbol}\n </a>\n <a\n role=\"button\"\n className=\"pvtColOrder\"\n onClick={() =>\n this.propUpdater('colOrder')(sortIcons[this.props.colOrder].next)\n }\n >\n {sortIcons[this.props.colOrder].colSymbol}\n </a>\n {numValsAllowed > 0 && <br />}\n {new Array(numValsAllowed).fill().map((n, i) => [\n <Dropdown\n key={i}\n current={this.props.vals[i]}\n values={Object.keys(this.state.attrValues).filter(\n e =>\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromAggregators.includes(e)\n )}\n open={this.isOpen(`val${i}`)}\n zIndex={this.isOpen(`val${i}`) ? this.state.maxZIndex + 1 : 1}\n toggle={() =>\n this.setState({\n openDropdown: this.isOpen(`val${i}`) ? false : `val${i}`,\n })\n }\n setValue={value =>\n this.sendPropUpdate({\n vals: {$splice: [[i, 1, value]]},\n })\n }\n />,\n i + 1 !== numValsAllowed ? <br key={`br${i}`} /> : null,\n ])}\n {aggregatorCellOutlet && aggregatorCellOutlet(this.props.data)}\n </td>\n );\n\n const unusedAttrs = Object.keys(this.state.attrValues)\n .filter(\n e =>\n !this.props.rows.includes(e) &&\n !this.props.cols.includes(e) &&\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromDragDrop.includes(e)\n )\n .sort(sortAs(this.state.unusedOrder));\n\n const unusedLength = unusedAttrs.reduce((r, e) => r + e.length, 0);\n const horizUnused = unusedLength < this.props.unusedOrientationCutoff;\n\n const unusedAttrsCell = this.makeDnDCell(\n unusedAttrs,\n order => this.setState({unusedOrder: order}),\n `pvtAxisContainer pvtUnused ${\n horizUnused ? 'pvtHorizList' : 'pvtVertList'\n }`\n );\n\n const colAttrs = this.props.cols.filter(\n e =>\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromDragDrop.includes(e)\n );\n\n const colAttrsCell = this.makeDnDCell(\n colAttrs,\n this.propUpdater('cols'),\n 'pvtAxisContainer pvtHorizList pvtCols'\n );\n\n const rowAttrs = this.props.rows.filter(\n e =>\n !this.props.hiddenAttributes.includes(e) &&\n !this.props.hiddenFromDragDrop.includes(e)\n );\n const rowAttrsCell = this.makeDnDCell(\n rowAttrs,\n this.propUpdater('rows'),\n 'pvtAxisContainer pvtVertList pvtRows'\n );\n const outputCell = (\n <td className=\"pvtOutput\">\n <PivotTable\n {...update(this.props, {\n data: {$set: this.state.materializedInput},\n })}\n />\n </td>\n );\n\n if (horizUnused) {\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => this.setState({openDropdown: false})}>\n <tr>\n {rendererCell}\n {unusedAttrsCell}\n </tr>\n <tr>\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n }\n\n return (\n <table className=\"pvtUi\">\n <tbody onClick={() => this.setState({openDropdown: false})}>\n <tr>\n {rendererCell}\n {aggregatorCell}\n {colAttrsCell}\n </tr>\n <tr>\n {unusedAttrsCell}\n {rowAttrsCell}\n {outputCell}\n </tr>\n </tbody>\n </table>\n );\n }\n}\n\nPivotTableUI.propTypes = Object.assign({}, PivotTable.propTypes, {\n onChange: PropTypes.func.isRequired,\n hiddenAttributes: PropTypes.arrayOf(PropTypes.string),\n hiddenFromAggregators: PropTypes.arrayOf(PropTypes.string),\n hiddenFromDragDrop: PropTypes.arrayOf(PropTypes.string),\n unusedOrientationCutoff: PropTypes.number,\n menuLimit: PropTypes.number,\n});\n\nPivotTableUI.defaultProps = Object.assign({}, PivotTable.defaultProps, {\n hiddenAttributes: [],\n hiddenFromAggregators: [],\n hiddenFromDragDrop: [],\n unusedOrientationCutoff: 85,\n menuLimit: 500,\n});\n\nexport default PivotTableUI;\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type BuildInPlotlyRenderersNames =
|
|
2
|
+
| "Grouped Column Chart"
|
|
3
|
+
| "Stacked Column Chart"
|
|
4
|
+
| "Grouped Bar Chart"
|
|
5
|
+
| "Stacked Bar Chart"
|
|
6
|
+
| "Line Chart"
|
|
7
|
+
| "Dot Chart"
|
|
8
|
+
| "Area Chart"
|
|
9
|
+
| "Scatter Chart"
|
|
10
|
+
| "Multiple Pie Chart";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param PlotyComponent @types/plotly.js
|
|
14
|
+
*/
|
|
15
|
+
export function createPlotlyRenderer(
|
|
16
|
+
PlotyComponent: React.ComponentType<any>,
|
|
17
|
+
): Record<BuildInPlotlyRenderersNames, typeof PlotyComponent>;
|
|
18
|
+
|
|
19
|
+
export default createPlotlyRenderer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/PlotlyRenderers.jsx"],"names":["createPlotlyRenderers","makeRenderer","PlotlyComponent","traceOptions","layoutOptions","transpose","Renderer","pivotData","PivotData","props","rowKeys","getRowKeys","colKeys","getColKeys","traceKeys","length","push","datumKeys","fullAggName","aggregatorName","numInputs","aggregators","vals","slice","join","data","map","values","labels","datumKey","val","parseFloat","getAggregator","traceKey","value","isFinite","trace","name","type","x","y","Object","assign","titleText","hAxisTitle","rows","cols","groupByTitle","layout","title","hovermode","width","window","innerWidth","height","innerHeight","columns","Math","ceil","sqrt","grid","forEach","d","i","domain","row","floor","column","showlegend","xaxis","automargin","yaxis","plotlyOptions","plotlyConfig","onRendererUpdate","React","PureComponent","defaultProps","propTypes","PropTypes","object","func","makeScatterRenderer","text","mode","v","rowKey","colKey","barmode","orientation","stackgroup","scalegroup","hoverinfo","textinfo"],"mappings":"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","file":"PlotlyRenderers.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {PivotData} from './Utilities';\n\n/* eslint-disable react/prop-types */\n// eslint can't see inherited propTypes!\n\nfunction makeRenderer(\n PlotlyComponent,\n traceOptions = {},\n layoutOptions = {},\n transpose = false\n) {\n class Renderer extends React.PureComponent {\n render() {\n const pivotData = new PivotData(this.props);\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n const traceKeys = transpose ? colKeys : rowKeys;\n if (traceKeys.length === 0) {\n traceKeys.push([]);\n }\n const datumKeys = transpose ? rowKeys : colKeys;\n if (datumKeys.length === 0) {\n datumKeys.push([]);\n }\n\n let fullAggName = this.props.aggregatorName;\n const numInputs =\n this.props.aggregators[fullAggName]([])().numInputs || 0;\n if (numInputs !== 0) {\n fullAggName += ` of ${this.props.vals.slice(0, numInputs).join(', ')}`;\n }\n\n const data = traceKeys.map(traceKey => {\n const values = [];\n const labels = [];\n for (const datumKey of datumKeys) {\n const val = parseFloat(\n pivotData\n .getAggregator(\n transpose ? datumKey : traceKey,\n transpose ? traceKey : datumKey\n )\n .value()\n );\n values.push(isFinite(val) ? val : null);\n labels.push(datumKey.join('-') || ' ');\n }\n const trace = {name: traceKey.join('-') || fullAggName};\n if (traceOptions.type === 'pie') {\n trace.values = values;\n trace.labels = labels.length > 1 ? labels : [fullAggName];\n } else {\n trace.x = transpose ? values : labels;\n trace.y = transpose ? labels : values;\n }\n return Object.assign(trace, traceOptions);\n });\n\n let titleText = fullAggName;\n const hAxisTitle = transpose\n ? this.props.rows.join('-')\n : this.props.cols.join('-');\n const groupByTitle = transpose\n ? this.props.cols.join('-')\n : this.props.rows.join('-');\n if (hAxisTitle !== '') {\n titleText += ` vs ${hAxisTitle}`;\n }\n if (groupByTitle !== '') {\n titleText += ` by ${groupByTitle}`;\n }\n\n const layout = {\n title: titleText,\n hovermode: 'closest',\n /* eslint-disable no-magic-numbers */\n width: window.innerWidth / 1.5,\n height: window.innerHeight / 1.4 - 50,\n /* eslint-enable no-magic-numbers */\n };\n\n if (traceOptions.type === 'pie') {\n const columns = Math.ceil(Math.sqrt(data.length));\n const rows = Math.ceil(data.length / columns);\n layout.grid = {columns, rows};\n data.forEach((d, i) => {\n d.domain = {\n row: Math.floor(i / columns),\n column: i - columns * Math.floor(i / columns),\n };\n if (data.length > 1) {\n d.title = d.name;\n }\n });\n if (data[0].labels.length === 1) {\n layout.showlegend = false;\n }\n } else {\n layout.xaxis = {\n title: transpose ? fullAggName : null,\n automargin: true,\n };\n layout.yaxis = {\n title: transpose ? null : fullAggName,\n automargin: true,\n };\n }\n\n return (\n <PlotlyComponent\n data={data}\n layout={Object.assign(\n layout,\n layoutOptions,\n this.props.plotlyOptions\n )}\n config={this.props.plotlyConfig}\n onUpdate={this.props.onRendererUpdate}\n />\n );\n }\n }\n\n Renderer.defaultProps = Object.assign({}, PivotData.defaultProps, {\n plotlyOptions: {},\n plotlyConfig: {},\n });\n Renderer.propTypes = Object.assign({}, PivotData.propTypes, {\n plotlyOptions: PropTypes.object,\n plotlyConfig: PropTypes.object,\n onRendererUpdate: PropTypes.func,\n });\n\n return Renderer;\n}\n\nfunction makeScatterRenderer(PlotlyComponent) {\n class Renderer extends React.PureComponent {\n render() {\n const pivotData = new PivotData(this.props);\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n if (rowKeys.length === 0) {\n rowKeys.push([]);\n }\n if (colKeys.length === 0) {\n colKeys.push([]);\n }\n\n const data = {x: [], y: [], text: [], type: 'scatter', mode: 'markers'};\n\n rowKeys.map(rowKey => {\n colKeys.map(colKey => {\n const v = pivotData.getAggregator(rowKey, colKey).value();\n if (v !== null) {\n data.x.push(colKey.join('-'));\n data.y.push(rowKey.join('-'));\n data.text.push(v);\n }\n });\n });\n\n const layout = {\n title: this.props.rows.join('-') + ' vs ' + this.props.cols.join('-'),\n hovermode: 'closest',\n /* eslint-disable no-magic-numbers */\n xaxis: {title: this.props.cols.join('-'), automargin: true},\n yaxis: {title: this.props.rows.join('-'), automargin: true},\n width: window.innerWidth / 1.5,\n height: window.innerHeight / 1.4 - 50,\n /* eslint-enable no-magic-numbers */\n };\n\n return (\n <PlotlyComponent\n data={[data]}\n layout={Object.assign(layout, this.props.plotlyOptions)}\n config={this.props.plotlyConfig}\n onUpdate={this.props.onRendererUpdate}\n />\n );\n }\n }\n\n Renderer.defaultProps = Object.assign({}, PivotData.defaultProps, {\n plotlyOptions: {},\n plotlyConfig: {},\n });\n Renderer.propTypes = Object.assign({}, PivotData.propTypes, {\n plotlyOptions: PropTypes.object,\n plotlyConfig: PropTypes.object,\n onRendererUpdate: PropTypes.func,\n });\n\n return Renderer;\n}\n\nexport default function createPlotlyRenderers(PlotlyComponent) {\n return {\n 'Grouped Column Chart': makeRenderer(\n PlotlyComponent,\n {type: 'bar'},\n {barmode: 'group'}\n ),\n 'Stacked Column Chart': makeRenderer(\n PlotlyComponent,\n {type: 'bar'},\n {barmode: 'relative'}\n ),\n 'Grouped Bar Chart': makeRenderer(\n PlotlyComponent,\n {type: 'bar', orientation: 'h'},\n {barmode: 'group'},\n true\n ),\n 'Stacked Bar Chart': makeRenderer(\n PlotlyComponent,\n {type: 'bar', orientation: 'h'},\n {barmode: 'relative'},\n true\n ),\n 'Line Chart': makeRenderer(PlotlyComponent),\n 'Dot Chart': makeRenderer(PlotlyComponent, {mode: 'markers'}, {}, true),\n 'Area Chart': makeRenderer(PlotlyComponent, {stackgroup: 1}),\n 'Scatter Chart': makeScatterRenderer(PlotlyComponent),\n 'Multiple Pie Chart': makeRenderer(\n PlotlyComponent,\n {type: 'pie', scalegroup: 1, hoverinfo: 'label+value', textinfo: 'none'},\n {},\n true\n ),\n };\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PivotTableProps } from "./PivotTable";
|
|
2
|
+
|
|
3
|
+
export interface TableRenderers {
|
|
4
|
+
[k: string]: React.ComponentType<PivotTableProps>;
|
|
5
|
+
}
|
|
6
|
+
export type BuildInRenderersNames =
|
|
7
|
+
| "Table"
|
|
8
|
+
| "Table Heatmap"
|
|
9
|
+
| "Table Col Heatmap"
|
|
10
|
+
| "Table Row Heatmap"
|
|
11
|
+
| "Exportable TSV";
|
|
12
|
+
|
|
13
|
+
declare const defaultRenderers: Record<BuildInRenderersNames, React.ComponentType<PivotTableProps>>;
|
|
14
|
+
export default defaultRenderers;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/TableRenderers.jsx"],"names":["spanSize","arr","i","j","x","asc","end","noDraw","len","length","asc1","end1","stop","redColorScaleGenerator","values","min","Math","apply","max","nonRed","round","backgroundColor","makeRenderer","opts","TableRenderer","pivotData","PivotData","props","colAttrs","cols","rowAttrs","rows","rowKeys","getRowKeys","colKeys","getColKeys","grandTotalAggregator","getAggregator","valueCellColors","rowTotalColors","colTotalColors","heatmapMode","colorScaleGenerator","tableColorScaleGenerator","rowTotalValues","map","value","colTotalValues","allValues","push","r","c","colorScale","v","rowColorScales","rowValues","colColorScales","colValues","getClickHandler","tableOptions","clickCallback","filters","Object","keys","attr","e","colKey","rowKey","totalAggregator","txt","aggregator","format","React","PureComponent","defaultProps","propTypes","PropTypes","func","object","TSVExportRenderer","headerRow","aggregatorName","join","result","row","unshift","width","window","innerWidth","height","innerHeight","Table"],"mappings":"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","file":"TableRenderers.js","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {PivotData} from './Utilities';\n\n// helper function for setting row/col-span in pivotTableRenderer\nconst spanSize = function(arr, i, j) {\n let x;\n if (i !== 0) {\n let asc, end;\n let noDraw = true;\n for (\n x = 0, end = j, asc = end >= 0;\n asc ? x <= end : x >= end;\n asc ? x++ : x--\n ) {\n if (arr[i - 1][x] !== arr[i][x]) {\n noDraw = false;\n }\n }\n if (noDraw) {\n return -1;\n }\n }\n let len = 0;\n while (i + len < arr.length) {\n let asc1, end1;\n let stop = false;\n for (\n x = 0, end1 = j, asc1 = end1 >= 0;\n asc1 ? x <= end1 : x >= end1;\n asc1 ? x++ : x--\n ) {\n if (arr[i][x] !== arr[i + len][x]) {\n stop = true;\n }\n }\n if (stop) {\n break;\n }\n len++;\n }\n return len;\n};\n\nfunction redColorScaleGenerator(values) {\n const min = Math.min.apply(Math, values);\n const max = Math.max.apply(Math, values);\n return x => {\n // eslint-disable-next-line no-magic-numbers\n const nonRed = 255 - Math.round((255 * (x - min)) / (max - min));\n return {backgroundColor: `rgb(255,${nonRed},${nonRed})`};\n };\n}\n\nfunction makeRenderer(opts = {}) {\n class TableRenderer extends React.PureComponent {\n render() {\n const pivotData = new PivotData(this.props);\n const colAttrs = pivotData.props.cols;\n const rowAttrs = pivotData.props.rows;\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n const grandTotalAggregator = pivotData.getAggregator([], []);\n\n let valueCellColors = () => {};\n let rowTotalColors = () => {};\n let colTotalColors = () => {};\n if (opts.heatmapMode) {\n const colorScaleGenerator = this.props.tableColorScaleGenerator;\n const rowTotalValues = colKeys.map(x =>\n pivotData.getAggregator([], x).value()\n );\n rowTotalColors = colorScaleGenerator(rowTotalValues);\n const colTotalValues = rowKeys.map(x =>\n pivotData.getAggregator(x, []).value()\n );\n colTotalColors = colorScaleGenerator(colTotalValues);\n\n if (opts.heatmapMode === 'full') {\n const allValues = [];\n rowKeys.map(r =>\n colKeys.map(c =>\n allValues.push(pivotData.getAggregator(r, c).value())\n )\n );\n const colorScale = colorScaleGenerator(allValues);\n valueCellColors = (r, c, v) => colorScale(v);\n } else if (opts.heatmapMode === 'row') {\n const rowColorScales = {};\n rowKeys.map(r => {\n const rowValues = colKeys.map(x =>\n pivotData.getAggregator(r, x).value()\n );\n rowColorScales[r] = colorScaleGenerator(rowValues);\n });\n valueCellColors = (r, c, v) => rowColorScales[r](v);\n } else if (opts.heatmapMode === 'col') {\n const colColorScales = {};\n colKeys.map(c => {\n const colValues = rowKeys.map(x =>\n pivotData.getAggregator(x, c).value()\n );\n colColorScales[c] = colorScaleGenerator(colValues);\n });\n valueCellColors = (r, c, v) => colColorScales[c](v);\n }\n }\n\n const getClickHandler =\n this.props.tableOptions && this.props.tableOptions.clickCallback\n ? (value, rowValues, colValues) => {\n const filters = {};\n for (const i of Object.keys(colAttrs || {})) {\n const attr = colAttrs[i];\n if (colValues[i] !== null) {\n filters[attr] = colValues[i];\n }\n }\n for (const i of Object.keys(rowAttrs || {})) {\n const attr = rowAttrs[i];\n if (rowValues[i] !== null) {\n filters[attr] = rowValues[i];\n }\n }\n return e =>\n this.props.tableOptions.clickCallback(\n e,\n value,\n filters,\n pivotData\n );\n }\n : null;\n\n return (\n <table className=\"pvtTable\">\n <thead>\n {colAttrs.map(function(c, j) {\n return (\n <tr key={`colAttr${j}`}>\n {j === 0 && rowAttrs.length !== 0 && (\n <th colSpan={rowAttrs.length} rowSpan={colAttrs.length} />\n )}\n <th className=\"pvtAxisLabel\">{c}</th>\n {colKeys.map(function(colKey, i) {\n const x = spanSize(colKeys, i, j);\n if (x === -1) {\n return null;\n }\n return (\n <th\n className=\"pvtColLabel\"\n key={`colKey${i}`}\n colSpan={x}\n rowSpan={\n j === colAttrs.length - 1 && rowAttrs.length !== 0\n ? 2\n : 1\n }\n >\n {colKey[j]}\n </th>\n );\n })}\n\n {j === 0 && (\n <th\n className=\"pvtTotalLabel\"\n rowSpan={\n colAttrs.length + (rowAttrs.length === 0 ? 0 : 1)\n }\n >\n Totals\n </th>\n )}\n </tr>\n );\n })}\n\n {rowAttrs.length !== 0 && (\n <tr>\n {rowAttrs.map(function(r, i) {\n return (\n <th className=\"pvtAxisLabel\" key={`rowAttr${i}`}>\n {r}\n </th>\n );\n })}\n <th className=\"pvtTotalLabel\">\n {colAttrs.length === 0 ? 'Totals' : null}\n </th>\n </tr>\n )}\n </thead>\n\n <tbody>\n {rowKeys.map(function(rowKey, i) {\n const totalAggregator = pivotData.getAggregator(rowKey, []);\n return (\n <tr key={`rowKeyRow${i}`}>\n {rowKey.map(function(txt, j) {\n const x = spanSize(rowKeys, i, j);\n if (x === -1) {\n return null;\n }\n return (\n <th\n key={`rowKeyLabel${i}-${j}`}\n className=\"pvtRowLabel\"\n rowSpan={x}\n colSpan={\n j === rowAttrs.length - 1 && colAttrs.length !== 0\n ? 2\n : 1\n }\n >\n {txt}\n </th>\n );\n })}\n {colKeys.map(function(colKey, j) {\n const aggregator = pivotData.getAggregator(rowKey, colKey);\n return (\n <td\n className=\"pvtVal\"\n key={`pvtVal${i}-${j}`}\n onClick={\n getClickHandler &&\n getClickHandler(aggregator.value(), rowKey, colKey)\n }\n style={valueCellColors(\n rowKey,\n colKey,\n aggregator.value()\n )}\n >\n {aggregator.format(aggregator.value())}\n </td>\n );\n })}\n <td\n className=\"pvtTotal\"\n onClick={\n getClickHandler &&\n getClickHandler(totalAggregator.value(), rowKey, [null])\n }\n style={colTotalColors(totalAggregator.value())}\n >\n {totalAggregator.format(totalAggregator.value())}\n </td>\n </tr>\n );\n })}\n\n <tr>\n <th\n className=\"pvtTotalLabel\"\n colSpan={rowAttrs.length + (colAttrs.length === 0 ? 0 : 1)}\n >\n Totals\n </th>\n\n {colKeys.map(function(colKey, i) {\n const totalAggregator = pivotData.getAggregator([], colKey);\n return (\n <td\n className=\"pvtTotal\"\n key={`total${i}`}\n onClick={\n getClickHandler &&\n getClickHandler(totalAggregator.value(), [null], colKey)\n }\n style={rowTotalColors(totalAggregator.value())}\n >\n {totalAggregator.format(totalAggregator.value())}\n </td>\n );\n })}\n\n <td\n onClick={\n getClickHandler &&\n getClickHandler(grandTotalAggregator.value(), [null], [null])\n }\n className=\"pvtGrandTotal\"\n >\n {grandTotalAggregator.format(grandTotalAggregator.value())}\n </td>\n </tr>\n </tbody>\n </table>\n );\n }\n }\n\n TableRenderer.defaultProps = PivotData.defaultProps;\n TableRenderer.propTypes = PivotData.propTypes;\n TableRenderer.defaultProps.tableColorScaleGenerator = redColorScaleGenerator;\n TableRenderer.defaultProps.tableOptions = {};\n TableRenderer.propTypes.tableColorScaleGenerator = PropTypes.func;\n TableRenderer.propTypes.tableOptions = PropTypes.object;\n return TableRenderer;\n}\n\nclass TSVExportRenderer extends React.PureComponent {\n render() {\n const pivotData = new PivotData(this.props);\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n if (rowKeys.length === 0) {\n rowKeys.push([]);\n }\n if (colKeys.length === 0) {\n colKeys.push([]);\n }\n\n const headerRow = pivotData.props.rows.map(r => r);\n if (colKeys.length === 1 && colKeys[0].length === 0) {\n headerRow.push(this.props.aggregatorName);\n } else {\n colKeys.map(c => headerRow.push(c.join('-')));\n }\n\n const result = rowKeys.map(r => {\n const row = r.map(x => x);\n colKeys.map(c => {\n const v = pivotData.getAggregator(r, c).value();\n row.push(v ? v : '');\n });\n return row;\n });\n\n result.unshift(headerRow);\n\n return (\n <textarea\n value={result.map(r => r.join('\\t')).join('\\n')}\n style={{width: window.innerWidth / 2, height: window.innerHeight / 2}}\n readOnly={true}\n />\n );\n }\n}\n\nTSVExportRenderer.defaultProps = PivotData.defaultProps;\nTSVExportRenderer.propTypes = PivotData.propTypes;\n\nexport default {\n Table: makeRenderer(),\n 'Table Heatmap': makeRenderer({heatmapMode: 'full'}),\n 'Table Col Heatmap': makeRenderer({heatmapMode: 'col'}),\n 'Table Row Heatmap': makeRenderer({heatmapMode: 'row'}),\n 'Exportable TSV': TSVExportRenderer,\n};\n"]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { TableInput } from "./input";
|
|
2
|
+
|
|
3
|
+
type TSorterFn = Parameters<typeof Array.prototype.sort>[0];
|
|
4
|
+
type TQuerySort = "key_a_to_z" | "key_z_to_a" | "value_a_to_z" | "value_z_to_a";
|
|
5
|
+
|
|
6
|
+
declare function aggregators(tpl: unknown): object;
|
|
7
|
+
declare function naturalSort(a: any, b: any): number;
|
|
8
|
+
declare function numberFormat(opts_in: unknown): string;
|
|
9
|
+
declare function sortAs(order: { [k: string]: string | number }): TSorterFn;
|
|
10
|
+
declare function getSort(
|
|
11
|
+
sorters: { [k: string]: TSorterFn } | ((param: typeof attr) => TSorterFn | unknown),
|
|
12
|
+
attr: string,
|
|
13
|
+
): TSorterFn;
|
|
14
|
+
|
|
15
|
+
declare const aggregatorTemplates: Record<string, (...args: any[]) => any>;
|
|
16
|
+
declare const locales: object;
|
|
17
|
+
declare const derivers: object;
|
|
18
|
+
|
|
19
|
+
interface Pivot {
|
|
20
|
+
data: TableInput;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* attribute names to prepopulate in row area
|
|
24
|
+
*/
|
|
25
|
+
rows?: string[];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* attribute names to prepopulate in cols area
|
|
29
|
+
*/
|
|
30
|
+
cols?: string[];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* key to aggregators object specifying the aggregator to use for computations
|
|
34
|
+
*/
|
|
35
|
+
aggregatorName?: string;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @link https://github.com/nicolaskruchten/pivottable/wiki/Aggregators
|
|
39
|
+
*/
|
|
40
|
+
aggregators?: {
|
|
41
|
+
[K: string]: (
|
|
42
|
+
data: Pivot["data"],
|
|
43
|
+
rowKey: string,
|
|
44
|
+
colKey: string,
|
|
45
|
+
) => {
|
|
46
|
+
push?(record: object): void;
|
|
47
|
+
value?: () => string;
|
|
48
|
+
format?: (x: string) => string;
|
|
49
|
+
/**
|
|
50
|
+
* @default 0
|
|
51
|
+
*/
|
|
52
|
+
numInputs?: number;
|
|
53
|
+
[K: string]: any;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* attribute names used as arguments to aggregator (gets passed to aggregator generating function)
|
|
59
|
+
*/
|
|
60
|
+
vals?: string[];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* object whose keys are attribute names and values are objects of attribute
|
|
64
|
+
* value-boolean pairs which denote records to include or exclude from computation
|
|
65
|
+
* and rendering; used to prepopulate the filter menus that appear on double-click
|
|
66
|
+
*/
|
|
67
|
+
valueFilter?: {
|
|
68
|
+
[k: string]: { [k: string]: boolean };
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* accessed or called with an attribute name and can return a function
|
|
73
|
+
* which can be used as an argument to array.sort for output purposes.
|
|
74
|
+
* If no function is returned, the default sorting mechanism is a built-in
|
|
75
|
+
* "natural sort" implementation. Useful for sorting attributes like month names.
|
|
76
|
+
* @link http://nicolas.kruchten.com/pivottable/examples/mps_agg.html
|
|
77
|
+
* @link http://nicolas.kruchten.com/pivottable/examples/montreal_2014.html
|
|
78
|
+
*/
|
|
79
|
+
sorters?: TSorterFn | { [k: string]: TSorterFn };
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* the order in which row data is provided to the renderer
|
|
83
|
+
*/
|
|
84
|
+
rowOrder?: TQuerySort;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* the order in which column data is provided to the renderer
|
|
88
|
+
*/
|
|
89
|
+
colOrder?: TQuerySort;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @see original PivotTable.js documentation
|
|
93
|
+
*/
|
|
94
|
+
derivedAttributes?: { [k: string]: (p: string) => string };
|
|
95
|
+
}
|
|
96
|
+
declare class PivotData implements Pivot {
|
|
97
|
+
data: TableInput;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// PivotData is not an "utility" but the underlying implementation of the core entity,
|
|
101
|
+
// everything else depends on this. The exportables could be seen as actually part or
|
|
102
|
+
// private methods of this class. I don't know if they add value as exports, but
|
|
103
|
+
// properly typing all of them is time expensive.
|
|
104
|
+
|
|
105
|
+
export {
|
|
106
|
+
aggregators,
|
|
107
|
+
aggregatorTemplates,
|
|
108
|
+
derivers,
|
|
109
|
+
getSort,
|
|
110
|
+
locales,
|
|
111
|
+
naturalSort,
|
|
112
|
+
numberFormat,
|
|
113
|
+
Pivot,
|
|
114
|
+
PivotData,
|
|
115
|
+
sortAs,
|
|
116
|
+
TQuerySort,
|
|
117
|
+
TSorterFn,
|
|
118
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Utilities.js"],"names":["addSeparators","nStr","thousandsSep","decimalSep","x","String","split","x1","x2","length","rgx","test","replace","numberFormat","opts_in","defaults","digitsAfterDecimal","scaler","prefix","suffix","opts","Object","assign","isNaN","isFinite","result","toFixed","rx","rd","rz","naturalSort","as","bs","nas","Number","nbs","a","b","match","a1","shift","b1","sortAs","order","mapping","l_mapping","i","toLowerCase","getSort","sorters","attr","sort","usFmt","usFmtInt","usFmtPct","aggregatorTemplates","count","formatter","push","value","format","uniques","fn","uniq","record","Array","from","includes","numInputs","sum","parseFloat","extremes","mode","data","val","sorter","Math","quantile","q","vals","floor","ceil","runningStat","ddof","n","m","s","m_new","sqrt","Error","sumOverSum","num","denom","sumNum","sumDenom","fractionOf","wrapped","type","rowKey","colKey","selector","total","row","col","inner","getAggregator","countUnique","f","listUnique","join","max","min","first","last","median","average","var","stdev","aggregators","Count","tpl","Sum","Average","Median","Minimum","Maximum","First","Last","locales","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","mthNamesEn","dayNamesEn","zeroPad","number","substr","derivers","bin","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","utc","date","Date","parse","p","PivotData","inputProps","props","defaultProps","PropTypes","checkPropTypes","propTypes","aggregator","aggregatorName","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","sorted","forEachRecord","derivedAttributes","filter","processRecord","k","valueFilter","criteria","callback","v","attrs","sortersArr","keys","comparison","r","c","rowOrder","arrSort","rows","colOrder","cols","sortKeys","flatRowKey","fromCharCode","flatColKey","agg","input","addRecord","getOwnPropertyNames","derived","isArray","compactRecord","j","result1","oneOfType","array","object","func","isRequired","string","arrayOf","objectOf","bool","oneOf"],"mappings":"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","file":"Utilities.js","sourcesContent":["import PropTypes from 'prop-types';\n\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS104: Avoid inline assignments\n * DS201: Simplify complex destructure assignments\n * DS203: Remove `|| {}` from converted for-own loops\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nconst addSeparators = function(nStr, thousandsSep, decimalSep) {\n const x = String(nStr).split('.');\n let x1 = x[0];\n const x2 = x.length > 1 ? decimalSep + x[1] : '';\n const rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, `$1${thousandsSep}$2`);\n }\n return x1 + x2;\n};\n\nconst numberFormat = function(opts_in) {\n const defaults = {\n digitsAfterDecimal: 2,\n scaler: 1,\n thousandsSep: ',',\n decimalSep: '.',\n prefix: '',\n suffix: '',\n };\n const opts = Object.assign({}, defaults, opts_in);\n return function(x) {\n if (isNaN(x) || !isFinite(x)) {\n return '';\n }\n const result = addSeparators(\n (opts.scaler * x).toFixed(opts.digitsAfterDecimal),\n opts.thousandsSep,\n opts.decimalSep\n );\n return `${opts.prefix}${result}${opts.suffix}`;\n };\n};\n\nconst rx = /(\\d+)|(\\D+)/g;\nconst rd = /\\d/;\nconst rz = /^0/;\nconst naturalSort = (as, bs) => {\n // nulls first\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n\n // then raw NaNs\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n\n // numbers and numbery strings group together\n const nas = Number(as);\n const nbs = Number(bs);\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n\n // within that, true numbers before numbery strings\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n\n // 'Infinity' is a textual number, so less than 'A'\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n\n // finally, \"smart\" string sorting per http://stackoverflow.com/a/4373421/112871\n let a = String(as);\n let b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!rd.test(a) || !rd.test(b)) {\n return a > b ? 1 : -1;\n }\n\n // special treatment for strings containing digits\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n const a1 = a.shift();\n const b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return a1.replace(rz, '.0') - b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n};\n\nconst sortAs = function(order) {\n const mapping = {};\n\n // sort lowercased keys similarly\n const l_mapping = {};\n for (const i in order) {\n const x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n l_mapping[x.toLowerCase()] = i;\n }\n }\n return function(a, b) {\n if (a in mapping && b in mapping) {\n return mapping[a] - mapping[b];\n } else if (a in mapping) {\n return -1;\n } else if (b in mapping) {\n return 1;\n } else if (a in l_mapping && b in l_mapping) {\n return l_mapping[a] - l_mapping[b];\n } else if (a in l_mapping) {\n return -1;\n } else if (b in l_mapping) {\n return 1;\n }\n return naturalSort(a, b);\n };\n};\n\nconst getSort = function(sorters, attr) {\n if (sorters) {\n if (typeof sorters === 'function') {\n const sort = sorters(attr);\n if (typeof sort === 'function') {\n return sort;\n }\n } else if (attr in sorters) {\n return sorters[attr];\n }\n }\n return naturalSort;\n};\n\n// aggregator templates default to US number formatting but this is overrideable\nconst usFmt = numberFormat();\nconst usFmtInt = numberFormat({digitsAfterDecimal: 0});\nconst usFmtPct = numberFormat({\n digitsAfterDecimal: 1,\n scaler: 100,\n suffix: '%',\n});\n\nconst aggregatorTemplates = {\n count(formatter = usFmtInt) {\n return () =>\n function() {\n return {\n count: 0,\n push() {\n this.count++;\n },\n value() {\n return this.count;\n },\n format: formatter,\n };\n };\n },\n\n uniques(fn, formatter = usFmtInt) {\n return function([attr]) {\n return function() {\n return {\n uniq: [],\n push(record) {\n if (!Array.from(this.uniq).includes(record[attr])) {\n this.uniq.push(record[attr]);\n }\n },\n value() {\n return fn(this.uniq);\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sum(formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n sum: 0,\n push(record) {\n if (!isNaN(parseFloat(record[attr]))) {\n this.sum += parseFloat(record[attr]);\n }\n },\n value() {\n return this.sum;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n extremes(mode, formatter = usFmt) {\n return function([attr]) {\n return function(data) {\n return {\n val: null,\n sorter: getSort(\n typeof data !== 'undefined' ? data.sorters : null,\n attr\n ),\n push(record) {\n let x = record[attr];\n if (['min', 'max'].includes(mode)) {\n x = parseFloat(x);\n if (!isNaN(x)) {\n this.val = Math[mode](x, this.val !== null ? this.val : x);\n }\n }\n if (\n mode === 'first' &&\n this.sorter(x, this.val !== null ? this.val : x) <= 0\n ) {\n this.val = x;\n }\n if (\n mode === 'last' &&\n this.sorter(x, this.val !== null ? this.val : x) >= 0\n ) {\n this.val = x;\n }\n },\n value() {\n return this.val;\n },\n format(x) {\n if (isNaN(x)) {\n return x;\n }\n return formatter(x);\n },\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n quantile(q, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n vals: [],\n push(record) {\n const x = parseFloat(record[attr]);\n if (!isNaN(x)) {\n this.vals.push(x);\n }\n },\n value() {\n if (this.vals.length === 0) {\n return null;\n }\n this.vals.sort((a, b) => a - b);\n const i = (this.vals.length - 1) * q;\n return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n runningStat(mode = 'mean', ddof = 1, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n n: 0.0,\n m: 0.0,\n s: 0.0,\n push(record) {\n const x = parseFloat(record[attr]);\n if (isNaN(x)) {\n return;\n }\n this.n += 1.0;\n if (this.n === 1.0) {\n this.m = x;\n }\n const m_new = this.m + (x - this.m) / this.n;\n this.s = this.s + (x - this.m) * (x - m_new);\n this.m = m_new;\n },\n value() {\n if (mode === 'mean') {\n if (this.n === 0) {\n return 0 / 0;\n }\n return this.m;\n }\n if (this.n <= ddof) {\n return 0;\n }\n switch (mode) {\n case 'var':\n return this.s / (this.n - ddof);\n case 'stdev':\n return Math.sqrt(this.s / (this.n - ddof));\n default:\n throw new Error('unknown mode for runningStat');\n }\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sumOverSum(formatter = usFmt) {\n return function([num, denom]) {\n return function() {\n return {\n sumNum: 0,\n sumDenom: 0,\n push(record) {\n if (!isNaN(parseFloat(record[num]))) {\n this.sumNum += parseFloat(record[num]);\n }\n if (!isNaN(parseFloat(record[denom]))) {\n this.sumDenom += parseFloat(record[denom]);\n }\n },\n value() {\n return this.sumNum / this.sumDenom;\n },\n format: formatter,\n numInputs:\n typeof num !== 'undefined' && typeof denom !== 'undefined' ? 0 : 2,\n };\n };\n };\n },\n\n fractionOf(wrapped, type = 'total', formatter = usFmtPct) {\n return (...x) =>\n function(data, rowKey, colKey) {\n return {\n selector: {total: [[], []], row: [rowKey, []], col: [[], colKey]}[\n type\n ],\n inner: wrapped(...Array.from(x || []))(data, rowKey, colKey),\n push(record) {\n this.inner.push(record);\n },\n format: formatter,\n value() {\n return (\n this.inner.value() /\n data\n .getAggregator(...Array.from(this.selector || []))\n .inner.value()\n );\n },\n numInputs: wrapped(...Array.from(x || []))().numInputs,\n };\n };\n },\n};\n\naggregatorTemplates.countUnique = f =>\n aggregatorTemplates.uniques(x => x.length, f);\naggregatorTemplates.listUnique = s =>\n aggregatorTemplates.uniques(\n x => x.join(s),\n x => x\n );\naggregatorTemplates.max = f => aggregatorTemplates.extremes('max', f);\naggregatorTemplates.min = f => aggregatorTemplates.extremes('min', f);\naggregatorTemplates.first = f => aggregatorTemplates.extremes('first', f);\naggregatorTemplates.last = f => aggregatorTemplates.extremes('last', f);\naggregatorTemplates.median = f => aggregatorTemplates.quantile(0.5, f);\naggregatorTemplates.average = f =>\n aggregatorTemplates.runningStat('mean', 1, f);\naggregatorTemplates.var = (ddof, f) =>\n aggregatorTemplates.runningStat('var', ddof, f);\naggregatorTemplates.stdev = (ddof, f) =>\n aggregatorTemplates.runningStat('stdev', ddof, f);\n\n// default aggregators & renderers use US naming and number formatting\nconst aggregators = (tpl => ({\n Count: tpl.count(usFmtInt),\n 'Count Unique Values': tpl.countUnique(usFmtInt),\n 'List Unique Values': tpl.listUnique(', '),\n Sum: tpl.sum(usFmt),\n 'Integer Sum': tpl.sum(usFmtInt),\n Average: tpl.average(usFmt),\n Median: tpl.median(usFmt),\n 'Sample Variance': tpl.var(1, usFmt),\n 'Sample Standard Deviation': tpl.stdev(1, usFmt),\n Minimum: tpl.min(usFmt),\n Maximum: tpl.max(usFmt),\n First: tpl.first(usFmt),\n Last: tpl.last(usFmt),\n 'Sum over Sum': tpl.sumOverSum(usFmt),\n 'Sum as Fraction of Total': tpl.fractionOf(tpl.sum(), 'total', usFmtPct),\n 'Sum as Fraction of Rows': tpl.fractionOf(tpl.sum(), 'row', usFmtPct),\n 'Sum as Fraction of Columns': tpl.fractionOf(tpl.sum(), 'col', usFmtPct),\n 'Count as Fraction of Total': tpl.fractionOf(tpl.count(), 'total', usFmtPct),\n 'Count as Fraction of Rows': tpl.fractionOf(tpl.count(), 'row', usFmtPct),\n 'Count as Fraction of Columns': tpl.fractionOf(tpl.count(), 'col', usFmtPct),\n}))(aggregatorTemplates);\n\nconst locales = {\n en: {\n aggregators,\n localeStrings: {\n renderError: 'An error occurred rendering the PivotTable results.',\n computeError: 'An error occurred computing the PivotTable results.',\n uiRenderError: 'An error occurred rendering the PivotTable UI.',\n selectAll: 'Select All',\n selectNone: 'Select None',\n tooMany: '(too many to list)',\n filterResults: 'Filter values',\n apply: 'Apply',\n cancel: 'Cancel',\n totals: 'Totals',\n vs: 'vs',\n by: 'by',\n },\n },\n};\n\n// dateFormat deriver l10n requires month and day names to be passed in directly\nconst mthNamesEn = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst dayNamesEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst zeroPad = number => `0${number}`.substr(-2, 2); // eslint-disable-line no-magic-numbers\n\nconst derivers = {\n bin(col, binWidth) {\n return record => record[col] - (record[col] % binWidth);\n },\n dateFormat(\n col,\n formatString,\n utcOutput = false,\n mthNames = mthNamesEn,\n dayNames = dayNamesEn\n ) {\n const utc = utcOutput ? 'UTC' : '';\n return function(record) {\n const date = new Date(Date.parse(record[col]));\n if (isNaN(date)) {\n return '';\n }\n return formatString.replace(/%(.)/g, function(m, p) {\n switch (p) {\n case 'y':\n return date[`get${utc}FullYear`]();\n case 'm':\n return zeroPad(date[`get${utc}Month`]() + 1);\n case 'n':\n return mthNames[date[`get${utc}Month`]()];\n case 'd':\n return zeroPad(date[`get${utc}Date`]());\n case 'w':\n return dayNames[date[`get${utc}Day`]()];\n case 'x':\n return date[`get${utc}Day`]();\n case 'H':\n return zeroPad(date[`get${utc}Hours`]());\n case 'M':\n return zeroPad(date[`get${utc}Minutes`]());\n case 'S':\n return zeroPad(date[`get${utc}Seconds`]());\n default:\n return `%${p}`;\n }\n });\n };\n },\n};\n\n/*\nData Model class\n*/\n\nclass PivotData {\n constructor(inputProps = {}) {\n this.props = Object.assign({}, PivotData.defaultProps, inputProps);\n PropTypes.checkPropTypes(\n PivotData.propTypes,\n this.props,\n 'prop',\n 'PivotData'\n );\n\n this.aggregator = this.props.aggregators[this.props.aggregatorName](\n this.props.vals\n );\n this.tree = {};\n this.rowKeys = [];\n this.colKeys = [];\n this.rowTotals = {};\n this.colTotals = {};\n this.allTotal = this.aggregator(this, [], []);\n this.sorted = false;\n\n // iterate through input, accumulating data for cells\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (this.filter(record)) {\n this.processRecord(record);\n }\n }\n );\n }\n\n filter(record) {\n for (const k in this.props.valueFilter) {\n if (record[k] in this.props.valueFilter[k]) {\n return false;\n }\n }\n return true;\n }\n\n forEachMatchingRecord(criteria, callback) {\n return PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (!this.filter(record)) {\n return;\n }\n for (const k in criteria) {\n const v = criteria[k];\n if (v !== (k in record ? record[k] : 'null')) {\n return;\n }\n }\n callback(record);\n }\n );\n }\n\n arrSort(attrs) {\n let a;\n const sortersArr = (() => {\n const result = [];\n for (a of Array.from(attrs)) {\n result.push(getSort(this.props.sorters, a));\n }\n return result;\n })();\n return function(a, b) {\n for (const i of Object.keys(sortersArr || {})) {\n const sorter = sortersArr[i];\n const comparison = sorter(a[i], b[i]);\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n }\n\n sortKeys() {\n if (!this.sorted) {\n this.sorted = true;\n const v = (r, c) => this.getAggregator(r, c).value();\n switch (this.props.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort((a, b) => naturalSort(v(a, []), v(b, [])));\n break;\n case 'value_z_to_a':\n this.rowKeys.sort((a, b) => -naturalSort(v(a, []), v(b, [])));\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.props.rows));\n }\n switch (this.props.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort((a, b) => naturalSort(v([], a), v([], b)));\n break;\n case 'value_z_to_a':\n this.colKeys.sort((a, b) => -naturalSort(v([], a), v([], b)));\n break;\n default:\n this.colKeys.sort(this.arrSort(this.props.cols));\n }\n }\n }\n\n getColKeys() {\n this.sortKeys();\n return this.colKeys;\n }\n\n getRowKeys() {\n this.sortKeys();\n return this.rowKeys;\n }\n\n processRecord(record) {\n // this code is called in a tight loop\n const colKey = [];\n const rowKey = [];\n for (const x of Array.from(this.props.cols)) {\n colKey.push(x in record ? record[x] : 'null');\n }\n for (const x of Array.from(this.props.rows)) {\n rowKey.push(x in record ? record[x] : 'null');\n }\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n\n this.allTotal.push(record);\n\n if (rowKey.length !== 0) {\n if (!this.rowTotals[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowTotals[flatRowKey] = this.aggregator(this, rowKey, []);\n }\n this.rowTotals[flatRowKey].push(record);\n }\n\n if (colKey.length !== 0) {\n if (!this.colTotals[flatColKey]) {\n this.colKeys.push(colKey);\n this.colTotals[flatColKey] = this.aggregator(this, [], colKey);\n }\n this.colTotals[flatColKey].push(record);\n }\n\n if (colKey.length !== 0 && rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (!this.tree[flatRowKey][flatColKey]) {\n this.tree[flatRowKey][flatColKey] = this.aggregator(\n this,\n rowKey,\n colKey\n );\n }\n this.tree[flatRowKey][flatColKey].push(record);\n }\n }\n\n getAggregator(rowKey, colKey) {\n let agg;\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n if (rowKey.length === 0 && colKey.length === 0) {\n agg = this.allTotal;\n } else if (rowKey.length === 0) {\n agg = this.colTotals[flatColKey];\n } else if (colKey.length === 0) {\n agg = this.rowTotals[flatRowKey];\n } else {\n agg = this.tree[flatRowKey][flatColKey];\n }\n return (\n agg || {\n value() {\n return null;\n },\n format() {\n return '';\n },\n }\n );\n }\n}\n\n// can handle arrays or jQuery selections of tables\nPivotData.forEachRecord = function(input, derivedAttributes, f) {\n let addRecord, record;\n if (Object.getOwnPropertyNames(derivedAttributes).length === 0) {\n addRecord = f;\n } else {\n addRecord = function(record) {\n for (const k in derivedAttributes) {\n const derived = derivedAttributes[k](record);\n if (derived !== null) {\n record[k] = derived;\n }\n }\n return f(record);\n };\n }\n\n // if it's a function, have it call us back\n if (typeof input === 'function') {\n return input(addRecord);\n } else if (Array.isArray(input)) {\n if (Array.isArray(input[0])) {\n // array of arrays\n return (() => {\n const result = [];\n for (const i of Object.keys(input || {})) {\n const compactRecord = input[i];\n if (i > 0) {\n record = {};\n for (const j of Object.keys(input[0] || {})) {\n const k = input[0][j];\n record[k] = compactRecord[j];\n }\n result.push(addRecord(record));\n }\n }\n return result;\n })();\n }\n\n // array of objects\n return (() => {\n const result1 = [];\n for (record of Array.from(input)) {\n result1.push(addRecord(record));\n }\n return result1;\n })();\n }\n throw new Error('unknown input format');\n};\n\nPivotData.defaultProps = {\n aggregators: aggregators,\n cols: [],\n rows: [],\n vals: [],\n aggregatorName: 'Count',\n sorters: {},\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n derivedAttributes: {},\n};\n\nPivotData.propTypes = {\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.func])\n .isRequired,\n aggregatorName: PropTypes.string,\n cols: PropTypes.arrayOf(PropTypes.string),\n rows: PropTypes.arrayOf(PropTypes.string),\n vals: PropTypes.arrayOf(PropTypes.string),\n valueFilter: PropTypes.objectOf(PropTypes.objectOf(PropTypes.bool)),\n sorters: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.objectOf(PropTypes.func),\n ]),\n derivedAttributes: PropTypes.objectOf(PropTypes.func),\n rowOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n colOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n};\n\nexport {\n aggregatorTemplates,\n aggregators,\n derivers,\n locales,\n naturalSort,\n numberFormat,\n getSort,\n sortAs,\n PivotData,\n};\n"]}
|