UNPKG

pivot-chart

Version:

pivot table react component

91 lines 5.58 kB
var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spread = (this && this.__spread) || function () { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; }; import React, { useMemo, useRef, useState, useEffect } from 'react'; import { DimensionArea } from './common'; import { createCube, sum } from 'cube-core'; import LeftNestGrid from './leftNestGrid'; import TopNestGrid from './topNestGrid'; import CrossTable from './crossTable'; import { getPureNestTree, getCossMatrix, getNestFields } from './utils'; import { StyledTable } from './components/styledTable'; import { getTheme } from './theme'; var theme = getTheme(); function useMetaTransform(rowList, columnList, measureList) { var rows = useMemo(function () { return rowList.map(function (f) { return f.id; }); }, [rowList]); var columns = useMemo(function () { return columnList.map(function (f) { return f.id; }); }, [columnList]); var measures = useMemo(function () { return measureList.map(function (f) { return f.id; }); }, [measureList]); return { rows: rows, columns: columns, measures: measures }; } var PivotChart = function (props) { var _a; var _b = props.rows, rowList = _b === void 0 ? [] : _b, _c = props.columns, columnList = _c === void 0 ? [] : _c, _d = props.measures, measureList = _d === void 0 ? [] : _d, _e = props.dataSource, dataSource = _e === void 0 ? [] : _e, _f = props.visType, visType = _f === void 0 ? 'number' : _f, _g = props.defaultExpandedDepth, defaultExpandedDepth = _g === void 0 ? { rowDepth: 0, columnDepth: 1 } : _g, _h = props.showAggregatedNode, showAggregatedNode = _h === void 0 ? (_a = {}, _a[DimensionArea.row] = true, _a[DimensionArea.column] = true, _a) : _h; var _j = defaultExpandedDepth.rowDepth, defaultRowDepth = _j === void 0 ? 1 : _j, _k = defaultExpandedDepth.columnDepth, defaultColumnDepth = _k === void 0 ? 1 : _k; var cubeRef = useRef(); var _l = __read(useState(0), 2), emptyGridHeight = _l[0], setEmptyGridHeight = _l[1]; var _m = __read(useState([]), 2), rowLPList = _m[0], setRowLPList = _m[1]; var _o = __read(useState([]), 2), columnLPList = _o[0], setColumnLPList = _o[1]; var _p = useMetaTransform(rowList, columnList, measureList), rows = _p.rows, columns = _p.columns, measures = _p.measures; var _q = useMemo(function () { return getNestFields(visType, rowList, columnList, measureList); }, [rowList, columnList, measureList, visType]), nestRows = _q.nestRows, nestColumns = _q.nestColumns, dimensionsInView = _q.dimensionsInView, facetMeasures = _q.facetMeasures, viewMeasures = _q.viewMeasures; useEffect(function () { cubeRef.current = createCube({ type: 'moment', factTable: dataSource, dimensions: __spread(rows, columns), measures: measures, aggFunc: sum }); }, [dataSource, rows, columns, measures]); // {rows, columns, dimsInVis} = getNestDimensions(visType) // getCell(path.concat(dimsInVis)) var leftNestTree = useMemo(function () { return getPureNestTree(dataSource, nestRows.map(function (r) { return r.id; })); }, [dataSource, nestRows]); var topNestTree = useMemo(function () { return getPureNestTree(dataSource, nestColumns.map(function (c) { return c.id; })); }, [dataSource, nestColumns]); var crossMatrix = useMemo(function () { return getCossMatrix(visType, cubeRef.current, rowLPList, columnLPList, rows, columns, measureList, dimensionsInView.map(function (d) { return d.id; })); }, [dataSource, rows, columns, measures, rowLPList, columnLPList, visType]); return (React.createElement("div", { style: { border: "1px solid " + theme.table.borderColor, overflowX: "auto" } }, React.createElement("div", { style: { display: "flex", flexWrap: "nowrap" } }, React.createElement("div", null, React.createElement("div", { style: { height: emptyGridHeight, backgroundColor: theme.table.thead.backgroundColor } }), React.createElement(LeftNestGrid, { defaultExpandedDepth: defaultRowDepth, visType: visType, depth: nestRows.length, data: leftNestTree, onExpandChange: function (lpList) { setRowLPList(lpList); }, showAggregatedNode: showAggregatedNode.row })), React.createElement(StyledTable, null, React.createElement(TopNestGrid, { defaultExpandedDepth: defaultColumnDepth, depth: nestColumns.length, measures: measureList, data: topNestTree, onSizeChange: function (w, h) { setEmptyGridHeight(h); }, onExpandChange: function (lpList) { setColumnLPList(lpList); }, showAggregatedNode: showAggregatedNode.column }), React.createElement(CrossTable, { visType: visType, matrix: crossMatrix, measures: facetMeasures, dimensionsInView: dimensionsInView, measuresInView: viewMeasures }))))); }; export default PivotChart; //# sourceMappingURL=pivotChart.js.map