@hrforte/react-pivottable 2.1.2 → 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 +18 -4
- package/dist/PivotDataWorker.js +11 -16
- package/dist/PivotDataWorker.js.map +1 -1
- package/dist/PivotTableUI.js +63 -74
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/PlotlyRenderers.js +9 -5
- package/dist/PlotlyRenderers.js.map +1 -1
- package/dist/TableRenderers.js +35 -2
- package/dist/TableRenderers.js.map +1 -1
- package/dist/Utilities.js +2 -20
- package/dist/Utilities.js.map +1 -1
- package/dist/__tests__/PivotDataWorker-test.js +7 -8
- package/dist/__tests__/PivotDataWorker-test.js.map +1 -1
- package/dist/__tests__/PivotTableUI-processing-test.js +108 -13
- 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/__tests__/pivotCompute-test.js +7 -7
- package/dist/__tests__/pivotCompute-test.js.map +1 -1
- package/dist/pivot-worker.js +8 -60
- package/dist/pivotCompute.js +5 -22
- package/dist/pivotCompute.js.map +1 -1
- package/dist/pivotWorker.js +2 -18
- package/dist/pivotWorker.js.map +1 -1
- package/dist/pivottable.css +3 -20
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PlotlyRenderers.jsx"],"names":["createPlotlyRenderers","CHART_WIDTH_RATIO","CHART_HEIGHT_RATIO","CHART_HEIGHT_OFFSET","ensureNonEmptyKeys","keys","length","combineCategoryLabels","categoryKey","datumKey","categoryLabel","join","datumLabel","buildAxisTitle","categoryTitle","datumTitle","defaultTitle","collectAggregationData","pivotData","categoryKeys","datumKeys","aggregationKey","values","labels","val","parseFloat","getAggregator","value","push","isFinite","getChartDimensions","rowMultiplier","width","window","innerWidth","height","innerHeight","createRendererProps","defaultProps","Object","assign","PivotData","plotlyOptions","plotlyConfig","propTypes","PropTypes","object","onRendererUpdate","func","getChartRenderingStrategy","traceOptions","type","mode","includes","makeRenderer","PlotlyComponent","layoutOptions","transpose","Renderer","props","rowKeys","getRowKeys","colKeys","getColKeys","traceKeys","primaryAggregation","getPrimaryAggregation","fallbackAggregator","aggregators","aggregatorName","aggregationVals","vals","fullAggName","label","data","map","textValues","aggregator","traceKey","cellFormatting","finalFormattedValue","format","bind","trace","name","text","hovertemplate","textinfo","textposition","x","y","orientation","textmode","stackgroup","titleText","hAxisTitle","rows","cols","groupByTitle","dimensions","layout","title","hovermode","columns","Math","ceil","sqrt","grid","forEach","d","i","domain","row","floor","column","showlegend","xaxis","automargin","yaxis","React","PureComponent","rendererProps","createPieCategoryTrace","aggregation","subplotIndex","key","mergedTrace","createCategoryDataTraces","aggregations","groupIndex","traces","displayText","createGroupedSubplotAxes","rowsTitle","colsTitle","showXAxisTitle","primaryAgg","aggName","xAxisTitle","showticklabels","makeGroupedRenderer","renderingStrategy","allAggregations","getAggregations","pattern","index","groupedAggregations","groupAggregationsByType","groupNames","groupName","makeScatterRenderer","rowKey","colKey","v","barmode","scalegroup","hoverinfo"],"mappings":"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","file":"PlotlyRenderers.js","sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable no-inline-comments */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { PivotData } from './Utilities';\nimport { applyCellFormatting } from './TableRenderers';\n\nconst CHART_WIDTH_RATIO = 1.5; // Ratio to scale down from full window width\nconst CHART_HEIGHT_RATIO = 1.4; // Ratio to scale down from full window height\nconst CHART_HEIGHT_OFFSET = 50; // Fixed offset to subtract from height calculation\n\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Ensures keys array is not empty by adding an empty array if needed\n */\nfunction ensureNonEmptyKeys(keys) {\n return keys.length > 0 ? keys : [[]];\n}\n\n/**\n * Combines category and datum labels into a single display label\n */\nfunction combineCategoryLabels(categoryKey, datumKey) {\n const categoryLabel = categoryKey.join(' ') || '';\n const datumLabel = datumKey.join(' ') || '';\n\n // if (categoryLabel && datumLabel) {\n // return `${categoryLabel} - ${datumLabel}`;\n // }\n return categoryLabel || datumLabel || ' ';\n}\n\n/**\n * Builds axis title from row and column titles\n */\nfunction buildAxisTitle(categoryTitle, datumTitle, defaultTitle = 'Categories') {\n if (categoryTitle && datumTitle) {\n return `${categoryTitle} - ${datumTitle}`;\n }\n return categoryTitle || datumTitle || defaultTitle;\n}\n\n/**\n * Collects aggregation values and labels across all categories\n */\nfunction collectAggregationData(pivotData, categoryKeys, datumKeys, aggregationKey) {\n const values = [];\n const labels = [];\n\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const val = parseFloat(\n pivotData\n .getAggregator(categoryKey, datumKey, aggregationKey)\n .value()\n );\n values.push(isFinite(val) ? val : null);\n labels.push(combineCategoryLabels(categoryKey, datumKey));\n }\n }\n\n return { values, labels };\n}\n\n/**\n * Calculates chart dimensions\n */\nfunction getChartDimensions(rowMultiplier = 1) {\n return {\n width: window.innerWidth / CHART_WIDTH_RATIO,\n height: (window.innerHeight / CHART_HEIGHT_RATIO - CHART_HEIGHT_OFFSET) * rowMultiplier,\n };\n}\n\n/**\n * Creates common renderer props\n */\nfunction createRendererProps() {\n return {\n defaultProps: Object.assign({}, PivotData.defaultProps, {\n plotlyOptions: {},\n plotlyConfig: {},\n }),\n propTypes: Object.assign({}, PivotData.propTypes, {\n plotlyOptions: PropTypes.object,\n plotlyConfig: PropTypes.object,\n onRendererUpdate: PropTypes.func,\n }),\n };\n}\n\n/**\n * Determines chart rendering strategy based on trace options\n */\nfunction getChartRenderingStrategy(traceOptions) {\n if (traceOptions.type === 'pie') {\n return 'pie-totals';\n }\n if (traceOptions.mode && traceOptions.mode.includes('lines')) {\n return 'category-data';\n }\n // Bar, area, scatter charts also need category data\n return 'category-data';\n}\n\n// ============================================================================\n// Renderer Factory Functions\n// ============================================================================\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 = ensureNonEmptyKeys(transpose ? colKeys : rowKeys);\n const datumKeys = ensureNonEmptyKeys(transpose ? rowKeys : colKeys);\n\n const primaryAggregation = pivotData.getPrimaryAggregation();\n const fallbackAggregator =\n Object.keys(this.props.aggregators)[0] || 'Value';\n const aggregatorName =\n (primaryAggregation && primaryAggregation.aggregatorName) ||\n fallbackAggregator;\n const aggregationVals =\n (primaryAggregation && primaryAggregation.vals) || [];\n const fullAggName =\n (primaryAggregation && primaryAggregation.label) ||\n (aggregationVals.length\n ? `${aggregatorName} of ${aggregationVals.join(', ')}`\n : aggregatorName);\n\n const data = traceKeys.map(traceKey => {\n const values = [];\n const labels = [];\n const textValues = [];\n\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(\n transpose ? datumKey : traceKey,\n transpose ? traceKey : datumKey\n );\n const val = parseFloat(aggregator.value());\n // Get cell formatting from plotlyOptions (similar to tableOptions)\n const cellFormatting = (this.props.plotlyOptions && this.props.plotlyOptions.cellFormatting) || null;\n\n // Apply cell formatting to the formatted value\n const finalFormattedValue = applyCellFormatting(\n aggregator.value(),\n cellFormatting,\n aggregator.format.bind(aggregator),\n aggregatorName\n );\n values.push(isFinite(val) ? val : null);\n labels.push(datumKey.join('-') || ' ');\n textValues.push(finalFormattedValue);\n }\n\n const trace = {\n name: traceKey.join('-') || fullAggName,\n text: textValues,\n };\n\n if (traceOptions.type === 'pie') {\n trace.values = values;\n trace.labels = labels.length > 1 ? labels : [fullAggName];\n trace.hovertemplate = '<b>%{label}</b><br>' + fullAggName + '<br><b>%{value}</b><extra></extra>';\n trace.textinfo = 'value';\n trace.textposition = 'inside';\n } else {\n trace.x = transpose ? values : labels;\n trace.y = transpose ? labels : values;\n trace.hovertemplate = transpose\n ? '<b>%{y}</b><br>' + fullAggName + '<br><b>%{x}</b><extra></extra>'\n : '<b>%{x}</b><br>' + fullAggName + '<br><b>%{y}</b><extra></extra>';\n\n // Configure text display based on chart type\n if (traceOptions.type === 'bar') {\n trace.textposition = traceOptions.orientation === 'h' ? 'middle right' : 'outside';\n trace.textmode = 'text';\n } else if (traceOptions.mode && traceOptions.mode.includes('lines')) {\n trace.textposition = 'top center';\n trace.textmode = 'lines+markers+text'; // Show text on markers for line charts\n } else if (traceOptions.mode === 'markers') {\n trace.textposition = 'middle right';\n trace.textmode = 'text+markers'; // Show text with markers\n } else if (traceOptions.stackgroup) {\n trace.textposition = 'middle center';\n trace.textmode = 'text';\n } else {\n trace.textposition = 'outside';\n trace.textmode = 'text';\n }\n }\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 dimensions = getChartDimensions();\n const layout = {\n title: titleText,\n hovermode: 'closest',\n width: dimensions.width,\n height: dimensions.height,\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 const rendererProps = createRendererProps();\n Renderer.defaultProps = rendererProps.defaultProps;\n Renderer.propTypes = rendererProps.propTypes;\n\n return Renderer;\n}\n\n/**\n * Creates a pie chart trace showing category-level breakdown for a single aggregation\n */\nfunction createPieCategoryTrace(\n pivotData,\n aggregation,\n categoryKeys,\n datumKeys,\n subplotIndex,\n traceOptions,\n cellFormatting = null\n) {\n const values = [];\n const labels = [];\n\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(categoryKey, datumKey, aggregation.key);\n const val = parseFloat(aggregator.value());\n if (isFinite(val) && val !== null) {\n values.push(val);\n labels.push(combineCategoryLabels(categoryKey, datumKey));\n }\n }\n }\n\n const textValues = [];\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(categoryKey, datumKey, aggregation.key);\n\n const finalFormattedValue = applyCellFormatting(\n aggregator.value(),\n cellFormatting,\n aggregator.format.bind(aggregator),\n aggregation.aggregatorName\n );\n\n textValues.push(finalFormattedValue);\n }\n }\n\n const trace = {\n name: aggregation.label || aggregation.key,\n values: values.length > 0 ? values : [0],\n labels: labels.length > 0 ? labels : ['No Data'],\n text: textValues.length > 0 ? textValues : ['No Data'],\n title: {\n text: aggregation.label || aggregation.key,\n },\n hovertemplate: '<b>%{label}</b><br>' + (aggregation.label || aggregation.key) + '<br><b>%{text}</b><extra></extra>',\n };\n\n const mergedTrace = Object.assign({}, traceOptions, trace);\n mergedTrace.textinfo = 'text';\n mergedTrace.textposition = 'inside';\n\n return mergedTrace;\n}\n\n/**\n * Creates traces for charts showing category-level data\n */\nfunction createCategoryDataTraces(\n pivotData,\n aggregations,\n categoryKeys,\n datumKeys,\n groupIndex,\n traceOptions,\n plotlyOptions\n) {\n const traces = [];\n\n aggregations.forEach((aggregation) => {\n const { values, labels } = collectAggregationData(\n pivotData,\n categoryKeys,\n datumKeys,\n aggregation.key\n );\n\n // Get formatted text values for display\n const textValues = [];\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(categoryKey, datumKey, aggregation.key);\n const finalFormattedValue = applyCellFormatting(\n aggregator.value(),\n plotlyOptions && plotlyOptions.cellFormatting,\n aggregator.format.bind(aggregator),\n aggregation.aggregatorName\n );\n textValues.push(finalFormattedValue);\n }\n }\n\n const trace = {\n name: aggregation.label || aggregation.key,\n xaxis: `x${groupIndex + 1}`,\n yaxis: `y${groupIndex + 1}`,\n x: labels,\n y: values,\n text: textValues,\n hovertemplate: `<b>%{x}</b><br>${aggregation.label || aggregation.key}<br><b>%{text}</b><extra></extra>`,\n };\n\n if (plotlyOptions && plotlyOptions.displayText) {\n \n if (traceOptions.type === 'bar') {\n trace.textposition = traceOptions.orientation === 'h' ? 'middle right' : 'outside';\n traceOptions.mode = 'text';\n } else if (traceOptions.mode && traceOptions.mode.includes('lines')) {\n trace.textposition = 'top';\n traceOptions.mode = 'lines+markers+text';\n } else if (traceOptions.mode && traceOptions.mode.includes('markers')) {\n trace.textposition = 'top center';\n traceOptions.mode = 'markers+text';\n } else {\n trace.textposition = 'top center';\n traceOptions.mode = 'text';\n }\n }\n \n\n traces.push(Object.assign(trace, traceOptions));\n });\n\n return traces;\n}\n\n/**\n * Creates axis configuration for a subplot group\n */\nfunction createGroupedSubplotAxes(\n groupIndex,\n aggregations,\n rowsTitle,\n colsTitle,\n showXAxisTitle = true\n) {\n const primaryAgg = aggregations[0];\n const aggName = primaryAgg.aggregatorName;\n const xAxisTitle = showXAxisTitle\n ? buildAxisTitle(rowsTitle, colsTitle)\n : null;\n\n return {\n [`xaxis${groupIndex + 1}`]: {\n title: xAxisTitle,\n showticklabels: false,\n automargin: true,\n },\n [`yaxis${groupIndex + 1}`]: {\n title: aggName,\n automargin: true,\n },\n };\n}\n\nfunction makeGroupedRenderer(\n PlotlyComponent,\n traceOptions = {},\n layoutOptions = {}\n) {\n class Renderer extends React.PureComponent {\n render() {\n const pivotData = new PivotData(this.props);\n const renderingStrategy = getChartRenderingStrategy(traceOptions);\n\n // For pie charts, treat each aggregation as a separate subplot\n if (renderingStrategy === 'pie-totals') {\n const allAggregations = pivotData.getAggregations();\n\n if (allAggregations.length === 0) {\n return <div>No aggregations to display</div>;\n }\n\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n const categoryKeys = ensureNonEmptyKeys(rowKeys);\n const datumKeys = ensureNonEmptyKeys(colKeys);\n\n const data = [];\n const columns = Math.ceil(Math.sqrt(allAggregations.length));\n const rows = Math.ceil(allAggregations.length / columns);\n const dimensions = getChartDimensions(rows);\n\n const layout = {\n title: 'Aggregations',\n grid: { rows, columns, pattern: 'independent' },\n width: dimensions.width,\n height: dimensions.height,\n showlegend: true,\n hovermode: 'closest',\n };\n\n // Create a separate subplot for each aggregation\n allAggregations.forEach((aggregation, index) => {\n const trace = createPieCategoryTrace(\n pivotData,\n aggregation,\n categoryKeys,\n datumKeys,\n index,\n traceOptions,\n this.props.plotlyOptions && this.props.plotlyOptions.cellFormatting\n );\n\n trace.domain = {\n row: Math.floor(index / columns),\n column: index % columns,\n };\n\n data.push(trace);\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 // For non-pie charts, group by aggregation type\n const groupedAggregations = pivotData.groupAggregationsByType();\n const groupNames = Object.keys(groupedAggregations);\n\n if (groupNames.length === 0) {\n return <div>No aggregations to display</div>;\n }\n\n const rows = groupNames.length;\n\n const data = [];\n const dimensions = getChartDimensions(rows);\n const layout = {\n title: 'Grouped Aggregations by Type',\n grid: { rows, columns: 1, pattern: 'independent' },\n width: dimensions.width,\n height: dimensions.height,\n hovermode: 'closest',\n };\n\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n const categoryKeys = ensureNonEmptyKeys(rowKeys);\n const datumKeys = ensureNonEmptyKeys(colKeys);\n\n groupNames.forEach((groupName, groupIndex) => {\n const aggregations = groupedAggregations[groupName];\n\n const traces = createCategoryDataTraces(\n pivotData,\n aggregations,\n categoryKeys,\n datumKeys,\n groupIndex,\n traceOptions,\n this.props.plotlyOptions\n );\n data.push(...traces);\n\n Object.assign(\n layout,\n createGroupedSubplotAxes(\n groupIndex,\n aggregations,\n this.props.rows.join('-'),\n this.props.cols.join('-'),\n false\n )\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 const rendererProps = createRendererProps();\n Renderer.defaultProps = rendererProps.defaultProps;\n Renderer.propTypes = rendererProps.propTypes;\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 = ensureNonEmptyKeys(pivotData.getRowKeys());\n const colKeys = ensureNonEmptyKeys(pivotData.getColKeys());\n\n const data = {\n x: [],\n y: [],\n text: [],\n type: 'scatter',\n mode: 'markers+text',\n textposition: 'middle right',\n hovertemplate: '<b>%{x}</b><br>%{y}<br><b>%{text}</b><extra></extra>',\n };\n\n // Use forEach instead of map since we're not returning values\n rowKeys.forEach(rowKey => {\n colKeys.forEach(colKey => {\n const aggregator = pivotData.getAggregator(rowKey, colKey);\n const v = aggregator.value();\n if (v !== null) {\n data.x.push(colKey.join('-'));\n data.y.push(rowKey.join('-'));\n data.text.push(aggregator.format(v));\n }\n });\n });\n\n const dimensions = getChartDimensions();\n const layout = {\n title: `${this.props.rows.join('-')} vs ${this.props.cols.join('-')}`,\n hovermode: 'closest',\n xaxis: { title: this.props.cols.join('-'), automargin: true },\n yaxis: { title: this.props.rows.join('-'), automargin: true },\n width: dimensions.width,\n height: dimensions.height,\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 const rendererProps = createRendererProps();\n Renderer.defaultProps = rendererProps.defaultProps;\n Renderer.propTypes = rendererProps.propTypes;\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 'Grouped Bars by Type': makeGroupedRenderer(\n PlotlyComponent,\n { type: 'bar', orientation: 'h' },\n { barmode: 'group', }\n ),\n 'Grouped Columns by Type': makeGroupedRenderer(\n PlotlyComponent,\n { type: 'bar' },\n { barmode: 'group' }\n ),\n 'Grouped Lines by Type': makeGroupedRenderer(\n PlotlyComponent,\n { mode: 'lines+markers' }\n ),\n 'Grouped Areas by Type': makeGroupedRenderer(\n PlotlyComponent,\n { stackgroup: 1 }\n ),\n 'Grouped Scatters by Type': makeGroupedRenderer(\n PlotlyComponent,\n { mode: 'markers' }\n ),\n 'Grouped Pies by Type': makeGroupedRenderer(\n PlotlyComponent,\n { type: 'pie' }\n ),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/PlotlyRenderers.jsx"],"names":["createPlotlyRenderers","CHART_WIDTH_RATIO","CHART_HEIGHT_RATIO","CHART_HEIGHT_OFFSET","ensureNonEmptyKeys","keys","length","combineCategoryLabels","categoryKey","datumKey","categoryLabel","join","datumLabel","buildAxisTitle","categoryTitle","datumTitle","defaultTitle","collectAggregationData","pivotData","categoryKeys","datumKeys","aggregationKey","values","labels","val","parseFloat","getAggregator","value","push","isFinite","getChartDimensions","rowMultiplier","width","window","innerWidth","height","innerHeight","createRendererProps","defaultProps","Object","assign","PivotData","plotlyOptions","plotlyConfig","propTypes","PropTypes","object","onRendererUpdate","func","getChartRenderingStrategy","traceOptions","type","mode","includes","makeRenderer","PlotlyComponent","layoutOptions","transpose","Renderer","props","rowKeys","getRowKeys","colKeys","getColKeys","traceKeys","primaryAggregation","getPrimaryAggregation","fallbackAggregator","aggregators","aggregatorName","aggregationVals","vals","fullAggName","label","data","map","textValues","aggregator","traceKey","cellFormatting","finalFormattedValue","format","bind","trace","name","text","hovertemplate","textinfo","textposition","x","y","orientation","textmode","stackgroup","titleText","hAxisTitle","rows","cols","groupByTitle","dimensions","layout","title","hovermode","columns","Math","ceil","sqrt","grid","forEach","d","i","domain","row","floor","column","showlegend","xaxis","automargin","yaxis","React","PureComponent","rendererProps","createPieCategoryTrace","aggregation","subplotIndex","key","mergedTrace","createCategoryDataTraces","aggregations","groupIndex","traces","displayText","createGroupedSubplotAxes","rowsTitle","colsTitle","showXAxisTitle","primaryAgg","aggName","xAxisTitle","showticklabels","makeGroupedRenderer","renderingStrategy","allAggregations","getAggregations","pattern","index","groupedAggregations","groupAggregationsByType","groupNames","groupName","makeScatterRenderer","rowKey","colKey","v","barmode","scalegroup","hoverinfo"],"mappings":"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","file":"PlotlyRenderers.js","sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable no-inline-comments */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport {PivotData} from './Utilities';\nimport {applyCellFormatting} from './TableRenderers';\n\nconst CHART_WIDTH_RATIO = 1.5; // Ratio to scale down from full window width\nconst CHART_HEIGHT_RATIO = 1.4; // Ratio to scale down from full window height\nconst CHART_HEIGHT_OFFSET = 50; // Fixed offset to subtract from height calculation\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Ensures keys array is not empty by adding an empty array if needed\n */\nfunction ensureNonEmptyKeys(keys) {\n return keys.length > 0 ? keys : [[]];\n}\n\n/**\n * Combines category and datum labels into a single display label\n */\nfunction combineCategoryLabels(categoryKey, datumKey) {\n const categoryLabel = categoryKey.join(' ') || '';\n const datumLabel = datumKey.join(' ') || '';\n\n // if (categoryLabel && datumLabel) {\n // return `${categoryLabel} - ${datumLabel}`;\n // }\n return categoryLabel || datumLabel || ' ';\n}\n\n/**\n * Builds axis title from row and column titles\n */\nfunction buildAxisTitle(\n categoryTitle,\n datumTitle,\n defaultTitle = 'Categories'\n) {\n if (categoryTitle && datumTitle) {\n return `${categoryTitle} - ${datumTitle}`;\n }\n return categoryTitle || datumTitle || defaultTitle;\n}\n\n/**\n * Collects aggregation values and labels across all categories\n */\nfunction collectAggregationData(\n pivotData,\n categoryKeys,\n datumKeys,\n aggregationKey\n) {\n const values = [];\n const labels = [];\n\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const val = parseFloat(\n pivotData.getAggregator(categoryKey, datumKey, aggregationKey).value()\n );\n values.push(isFinite(val) ? val : null);\n labels.push(combineCategoryLabels(categoryKey, datumKey));\n }\n }\n\n return {values, labels};\n}\n\n/**\n * Calculates chart dimensions\n */\nfunction getChartDimensions(rowMultiplier = 1) {\n return {\n width: window.innerWidth / CHART_WIDTH_RATIO,\n height:\n (window.innerHeight / CHART_HEIGHT_RATIO - CHART_HEIGHT_OFFSET) *\n rowMultiplier,\n };\n}\n\n/**\n * Creates common renderer props\n */\nfunction createRendererProps() {\n return {\n defaultProps: Object.assign({}, PivotData.defaultProps, {\n plotlyOptions: {},\n plotlyConfig: {},\n }),\n propTypes: Object.assign({}, PivotData.propTypes, {\n plotlyOptions: PropTypes.object,\n plotlyConfig: PropTypes.object,\n onRendererUpdate: PropTypes.func,\n }),\n };\n}\n\n/**\n * Determines chart rendering strategy based on trace options\n */\nfunction getChartRenderingStrategy(traceOptions) {\n if (traceOptions.type === 'pie') {\n return 'pie-totals';\n }\n if (traceOptions.mode && traceOptions.mode.includes('lines')) {\n return 'category-data';\n }\n // Bar, area, scatter charts also need category data\n return 'category-data';\n}\n\n// ============================================================================\n// Renderer Factory Functions\n// ============================================================================\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 = ensureNonEmptyKeys(transpose ? colKeys : rowKeys);\n const datumKeys = ensureNonEmptyKeys(transpose ? rowKeys : colKeys);\n\n const primaryAggregation = pivotData.getPrimaryAggregation();\n const fallbackAggregator =\n Object.keys(this.props.aggregators)[0] || 'Value';\n const aggregatorName =\n (primaryAggregation && primaryAggregation.aggregatorName) ||\n fallbackAggregator;\n const aggregationVals =\n (primaryAggregation && primaryAggregation.vals) || [];\n const fullAggName =\n (primaryAggregation && primaryAggregation.label) ||\n (aggregationVals.length\n ? `${aggregatorName} of ${aggregationVals.join(', ')}`\n : aggregatorName);\n\n const data = traceKeys.map(traceKey => {\n const values = [];\n const labels = [];\n const textValues = [];\n\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(\n transpose ? datumKey : traceKey,\n transpose ? traceKey : datumKey\n );\n const val = parseFloat(aggregator.value());\n // Get cell formatting from plotlyOptions (similar to tableOptions)\n const cellFormatting =\n (this.props.plotlyOptions &&\n this.props.plotlyOptions.cellFormatting) ||\n null;\n\n // Apply cell formatting to the formatted value\n const finalFormattedValue = applyCellFormatting(\n aggregator.value(),\n cellFormatting,\n aggregator.format.bind(aggregator),\n aggregatorName\n );\n values.push(isFinite(val) ? val : null);\n labels.push(datumKey.join('-') || ' ');\n textValues.push(finalFormattedValue);\n }\n\n const trace = {\n name: traceKey.join('-') || fullAggName,\n text: textValues,\n };\n\n if (traceOptions.type === 'pie') {\n trace.values = values;\n trace.labels = labels.length > 1 ? labels : [fullAggName];\n trace.hovertemplate =\n '<b>%{label}</b><br>' +\n fullAggName +\n '<br><b>%{value}</b><extra></extra>';\n trace.textinfo = 'value';\n trace.textposition = 'inside';\n } else {\n trace.x = transpose ? values : labels;\n trace.y = transpose ? labels : values;\n trace.hovertemplate = transpose\n ? '<b>%{y}</b><br>' + fullAggName + '<br><b>%{x}</b><extra></extra>'\n : '<b>%{x}</b><br>' +\n fullAggName +\n '<br><b>%{y}</b><extra></extra>';\n\n // Configure text display based on chart type\n if (traceOptions.type === 'bar') {\n trace.textposition =\n traceOptions.orientation === 'h' ? 'middle right' : 'outside';\n trace.textmode = 'text';\n } else if (traceOptions.mode && traceOptions.mode.includes('lines')) {\n trace.textposition = 'top center';\n trace.textmode = 'lines+markers+text'; // Show text on markers for line charts\n } else if (traceOptions.mode === 'markers') {\n trace.textposition = 'middle right';\n trace.textmode = 'text+markers'; // Show text with markers\n } else if (traceOptions.stackgroup) {\n trace.textposition = 'middle center';\n trace.textmode = 'text';\n } else {\n trace.textposition = 'outside';\n trace.textmode = 'text';\n }\n }\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 dimensions = getChartDimensions();\n const layout = {\n title: titleText,\n hovermode: 'closest',\n width: dimensions.width,\n height: dimensions.height,\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 const rendererProps = createRendererProps();\n Renderer.defaultProps = rendererProps.defaultProps;\n Renderer.propTypes = rendererProps.propTypes;\n\n return Renderer;\n}\n\n/**\n * Creates a pie chart trace showing category-level breakdown for a single aggregation\n */\nfunction createPieCategoryTrace(\n pivotData,\n aggregation,\n categoryKeys,\n datumKeys,\n subplotIndex,\n traceOptions,\n cellFormatting = null\n) {\n const values = [];\n const labels = [];\n\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(\n categoryKey,\n datumKey,\n aggregation.key\n );\n const val = parseFloat(aggregator.value());\n if (isFinite(val) && val !== null) {\n values.push(val);\n labels.push(combineCategoryLabels(categoryKey, datumKey));\n }\n }\n }\n\n const textValues = [];\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(\n categoryKey,\n datumKey,\n aggregation.key\n );\n\n const finalFormattedValue = applyCellFormatting(\n aggregator.value(),\n cellFormatting,\n aggregator.format.bind(aggregator),\n aggregation.aggregatorName\n );\n\n textValues.push(finalFormattedValue);\n }\n }\n\n const trace = {\n name: aggregation.label || aggregation.key,\n values: values.length > 0 ? values : [0],\n labels: labels.length > 0 ? labels : ['No Data'],\n text: textValues.length > 0 ? textValues : ['No Data'],\n title: {\n text: aggregation.label || aggregation.key,\n },\n hovertemplate:\n '<b>%{label}</b><br>' +\n (aggregation.label || aggregation.key) +\n '<br><b>%{text}</b><extra></extra>',\n };\n\n const mergedTrace = Object.assign({}, traceOptions, trace);\n mergedTrace.textinfo = 'text';\n mergedTrace.textposition = 'inside';\n\n return mergedTrace;\n}\n\n/**\n * Creates traces for charts showing category-level data\n */\nfunction createCategoryDataTraces(\n pivotData,\n aggregations,\n categoryKeys,\n datumKeys,\n groupIndex,\n traceOptions,\n plotlyOptions\n) {\n const traces = [];\n\n aggregations.forEach(aggregation => {\n const {values, labels} = collectAggregationData(\n pivotData,\n categoryKeys,\n datumKeys,\n aggregation.key\n );\n\n // Get formatted text values for display\n const textValues = [];\n for (const categoryKey of categoryKeys) {\n for (const datumKey of datumKeys) {\n const aggregator = pivotData.getAggregator(\n categoryKey,\n datumKey,\n aggregation.key\n );\n const finalFormattedValue = applyCellFormatting(\n aggregator.value(),\n plotlyOptions && plotlyOptions.cellFormatting,\n aggregator.format.bind(aggregator),\n aggregation.aggregatorName\n );\n textValues.push(finalFormattedValue);\n }\n }\n\n const trace = {\n name: aggregation.label || aggregation.key,\n xaxis: `x${groupIndex + 1}`,\n yaxis: `y${groupIndex + 1}`,\n x: labels,\n y: values,\n text: textValues,\n hovertemplate: `<b>%{x}</b><br>${aggregation.label ||\n aggregation.key}<br><b>%{text}</b><extra></extra>`,\n };\n\n if (plotlyOptions && plotlyOptions.displayText) {\n if (traceOptions.type === 'bar') {\n trace.textposition =\n traceOptions.orientation === 'h' ? 'middle right' : 'outside';\n traceOptions.mode = 'text';\n } else if (traceOptions.mode && traceOptions.mode.includes('lines')) {\n trace.textposition = 'top';\n traceOptions.mode = 'lines+markers+text';\n } else if (traceOptions.mode && traceOptions.mode.includes('markers')) {\n trace.textposition = 'top center';\n traceOptions.mode = 'markers+text';\n } else {\n trace.textposition = 'top center';\n traceOptions.mode = 'text';\n }\n }\n\n traces.push(Object.assign(trace, traceOptions));\n });\n\n return traces;\n}\n\n/**\n * Creates axis configuration for a subplot group\n */\nfunction createGroupedSubplotAxes(\n groupIndex,\n aggregations,\n rowsTitle,\n colsTitle,\n showXAxisTitle = true\n) {\n const primaryAgg = aggregations[0];\n const aggName = primaryAgg.aggregatorName;\n const xAxisTitle = showXAxisTitle\n ? buildAxisTitle(rowsTitle, colsTitle)\n : null;\n\n return {\n [`xaxis${groupIndex + 1}`]: {\n title: xAxisTitle,\n showticklabels: false,\n automargin: true,\n },\n [`yaxis${groupIndex + 1}`]: {\n title: aggName,\n automargin: true,\n },\n };\n}\n\nfunction makeGroupedRenderer(\n PlotlyComponent,\n traceOptions = {},\n layoutOptions = {}\n) {\n class Renderer extends React.PureComponent {\n render() {\n const pivotData = new PivotData(this.props);\n const renderingStrategy = getChartRenderingStrategy(traceOptions);\n\n // For pie charts, treat each aggregation as a separate subplot\n if (renderingStrategy === 'pie-totals') {\n const allAggregations = pivotData.getAggregations();\n\n if (allAggregations.length === 0) {\n return <div>No aggregations to display</div>;\n }\n\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n const categoryKeys = ensureNonEmptyKeys(rowKeys);\n const datumKeys = ensureNonEmptyKeys(colKeys);\n\n const data = [];\n const columns = Math.ceil(Math.sqrt(allAggregations.length));\n const rows = Math.ceil(allAggregations.length / columns);\n const dimensions = getChartDimensions(rows);\n\n const layout = {\n title: 'Aggregations',\n grid: {rows, columns, pattern: 'independent'},\n width: dimensions.width,\n height: dimensions.height,\n showlegend: true,\n hovermode: 'closest',\n };\n\n // Create a separate subplot for each aggregation\n allAggregations.forEach((aggregation, index) => {\n const trace = createPieCategoryTrace(\n pivotData,\n aggregation,\n categoryKeys,\n datumKeys,\n index,\n traceOptions,\n this.props.plotlyOptions && this.props.plotlyOptions.cellFormatting\n );\n\n trace.domain = {\n row: Math.floor(index / columns),\n column: index % columns,\n };\n\n data.push(trace);\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 // For non-pie charts, group by aggregation type\n const groupedAggregations = pivotData.groupAggregationsByType();\n const groupNames = Object.keys(groupedAggregations);\n\n if (groupNames.length === 0) {\n return <div>No aggregations to display</div>;\n }\n\n const rows = groupNames.length;\n\n const data = [];\n const dimensions = getChartDimensions(rows);\n const layout = {\n title: 'Grouped Aggregations by Type',\n grid: {rows, columns: 1, pattern: 'independent'},\n width: dimensions.width,\n height: dimensions.height,\n hovermode: 'closest',\n };\n\n const rowKeys = pivotData.getRowKeys();\n const colKeys = pivotData.getColKeys();\n const categoryKeys = ensureNonEmptyKeys(rowKeys);\n const datumKeys = ensureNonEmptyKeys(colKeys);\n\n groupNames.forEach((groupName, groupIndex) => {\n const aggregations = groupedAggregations[groupName];\n\n const traces = createCategoryDataTraces(\n pivotData,\n aggregations,\n categoryKeys,\n datumKeys,\n groupIndex,\n traceOptions,\n this.props.plotlyOptions\n );\n data.push(...traces);\n\n Object.assign(\n layout,\n createGroupedSubplotAxes(\n groupIndex,\n aggregations,\n this.props.rows.join('-'),\n this.props.cols.join('-'),\n false\n )\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 const rendererProps = createRendererProps();\n Renderer.defaultProps = rendererProps.defaultProps;\n Renderer.propTypes = rendererProps.propTypes;\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 = ensureNonEmptyKeys(pivotData.getRowKeys());\n const colKeys = ensureNonEmptyKeys(pivotData.getColKeys());\n\n const data = {\n x: [],\n y: [],\n text: [],\n type: 'scatter',\n mode: 'markers+text',\n textposition: 'middle right',\n hovertemplate: '<b>%{x}</b><br>%{y}<br><b>%{text}</b><extra></extra>',\n };\n\n // Use forEach instead of map since we're not returning values\n rowKeys.forEach(rowKey => {\n colKeys.forEach(colKey => {\n const aggregator = pivotData.getAggregator(rowKey, colKey);\n const v = aggregator.value();\n if (v !== null) {\n data.x.push(colKey.join('-'));\n data.y.push(rowKey.join('-'));\n data.text.push(aggregator.format(v));\n }\n });\n });\n\n const dimensions = getChartDimensions();\n const layout = {\n title: `${this.props.rows.join('-')} vs ${this.props.cols.join('-')}`,\n hovermode: 'closest',\n xaxis: {title: this.props.cols.join('-'), automargin: true},\n yaxis: {title: this.props.rows.join('-'), automargin: true},\n width: dimensions.width,\n height: dimensions.height,\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 const rendererProps = createRendererProps();\n Renderer.defaultProps = rendererProps.defaultProps;\n Renderer.propTypes = rendererProps.propTypes;\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 'Grouped Bars by Type': makeGroupedRenderer(\n PlotlyComponent,\n {type: 'bar', orientation: 'h'},\n {barmode: 'group'}\n ),\n 'Grouped Columns by Type': makeGroupedRenderer(\n PlotlyComponent,\n {type: 'bar'},\n {barmode: 'group'}\n ),\n 'Grouped Lines by Type': makeGroupedRenderer(PlotlyComponent, {\n mode: 'lines+markers',\n }),\n 'Grouped Areas by Type': makeGroupedRenderer(PlotlyComponent, {\n stackgroup: 1,\n }),\n 'Grouped Scatters by Type': makeGroupedRenderer(PlotlyComponent, {\n mode: 'markers',\n }),\n 'Grouped Pies by Type': makeGroupedRenderer(PlotlyComponent, {type: 'pie'}),\n };\n}\n"]}
|
package/dist/TableRenderers.js
CHANGED
|
@@ -398,6 +398,28 @@ function makeRenderer() {
|
|
|
398
398
|
};
|
|
399
399
|
// --- End row group header ---
|
|
400
400
|
|
|
401
|
+
// --- Optional "No." column (showNumericalOrder) ---
|
|
402
|
+
// When enabled every data row is prefixed with its 1-based index, in a
|
|
403
|
+
// column labelled "No." placed before the row attribute columns.
|
|
404
|
+
var showNumericalOrder = Boolean(this.props.showNumericalOrder);
|
|
405
|
+
var hasNumberColumn = showNumericalOrder && (rowAttrsToRender.length !== 0 || colAttrsToRender.length !== 0);
|
|
406
|
+
var numberColumnLabel = 'No.';
|
|
407
|
+
var renderedAggregationHeaderRow = isColumnAggregationMode && hasColumnAttributes;
|
|
408
|
+
// The "No." header cell is rendered in the first header row and spans
|
|
409
|
+
// every header row, so the repeated header rows (column attributes,
|
|
410
|
+
// aggregator labels, row group labels) stay aligned with the body.
|
|
411
|
+
var numberColumnHeaderRowSpan = colAttrsToRender.length + (renderedAggregationHeaderRow ? 1 : 0) + (rowAttrsToRender.length !== 0 && !renderedAggregationHeaderRow ? 1 : 0) + (hasHeaderGroup && colAttrsToRender.length === 0 && rowAttrsToRender.length !== 0 ? 1 : 0);
|
|
412
|
+
var numberColumnInGroupRow = hasHeaderGroup && colAttrsToRender.length === 0 && rowAttrsToRender.length !== 0;
|
|
413
|
+
var renderNumberHeaderCell = function renderNumberHeaderCell() {
|
|
414
|
+
var rowSpan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : numberColumnHeaderRowSpan;
|
|
415
|
+
return _react2.default.createElement(
|
|
416
|
+
'th',
|
|
417
|
+
{ className: 'pvtAxisLabel pvtRowNumber', rowSpan: rowSpan },
|
|
418
|
+
numberColumnLabel
|
|
419
|
+
);
|
|
420
|
+
};
|
|
421
|
+
// --- End "No." column ---
|
|
422
|
+
|
|
401
423
|
var rowKeys = pivotData.getRowKeys();
|
|
402
424
|
var baseRowKeys = hasMultipleAggregators && !isColumnAggregationMode && rowKeys.length === 0 ? [[]] : rowKeys;
|
|
403
425
|
var renderedRows = hasMultipleAggregators && !isColumnAggregationMode ? baseRowKeys.reduce(function (acc, rowKey) {
|
|
@@ -752,10 +774,10 @@ function makeRenderer() {
|
|
|
752
774
|
'thead',
|
|
753
775
|
null,
|
|
754
776
|
colAttrsToRender.map(function (c, j) {
|
|
755
|
-
|
|
756
777
|
return _react2.default.createElement(
|
|
757
778
|
'tr',
|
|
758
779
|
{ key: 'colAttr' + j },
|
|
780
|
+
hasNumberColumn && j === 0 && renderNumberHeaderCell(),
|
|
759
781
|
shouldRenderRowHeaderPlaceholder && (isColumnAggregationMode || j === 0) && !(isColumnAggregationMode && hasColumnAttributes && rowAttrsToRender.length === 1) && (hasHeaderGroup && j === 0 && !isColumnAggregationMode ? renderGroupSegments(colAttrsToRender.length, headerGroupExtraSpan) : _react2.default.createElement('th', {
|
|
760
782
|
colSpan: isColumnAggregationMode && hasColumnAttributes ? rowAttrsToRender.length - 1 : rowAttrsToRender.length,
|
|
761
783
|
rowSpan: isColumnAggregationMode && hasColumnAttributes ? 1 : colAttrsToRender.length
|
|
@@ -798,6 +820,7 @@ function makeRenderer() {
|
|
|
798
820
|
hasHeaderGroup && colAttrsToRender.length === 0 && rowAttrsToRender.length !== 0 && _react2.default.createElement(
|
|
799
821
|
'tr',
|
|
800
822
|
null,
|
|
823
|
+
hasNumberColumn && renderNumberHeaderCell(),
|
|
801
824
|
renderGroupSegments(1, headerGroupExtraSpan),
|
|
802
825
|
_react2.default.createElement('th', null)
|
|
803
826
|
),
|
|
@@ -819,6 +842,7 @@ function makeRenderer() {
|
|
|
819
842
|
rowAttrsToRender.length !== 0 && !(isColumnAggregationMode && hasColumnAttributes) && _react2.default.createElement(
|
|
820
843
|
'tr',
|
|
821
844
|
null,
|
|
845
|
+
hasNumberColumn && colAttrsToRender.length === 0 && !numberColumnInGroupRow && renderNumberHeaderCell(),
|
|
822
846
|
rowAttrsToRender.map(function (r, i) {
|
|
823
847
|
var isRowAttr = i < rowAttrs.length;
|
|
824
848
|
var attr = isRowAttr ? rowAttrs[i] : null;
|
|
@@ -846,6 +870,11 @@ function makeRenderer() {
|
|
|
846
870
|
return _react2.default.createElement(
|
|
847
871
|
'tr',
|
|
848
872
|
{ key: 'rowKeyRow' + i },
|
|
873
|
+
hasNumberColumn && _react2.default.createElement(
|
|
874
|
+
'th',
|
|
875
|
+
{ className: 'pvtRowNumber', key: 'rowNumber' + i },
|
|
876
|
+
i + 1
|
|
877
|
+
),
|
|
849
878
|
displayKey.map(function (txt, j) {
|
|
850
879
|
var x = spanSize(rowKeyValues, i, j);
|
|
851
880
|
if (x === -1) {
|
|
@@ -901,7 +930,7 @@ function makeRenderer() {
|
|
|
901
930
|
'th',
|
|
902
931
|
{
|
|
903
932
|
className: 'pvtTotalLabel',
|
|
904
|
-
colSpan: rowAttrsToRender.length + (colAttrs.length === 0 || isColumnAggregationMode && hasColumnAttributes ? 0 : 1)
|
|
933
|
+
colSpan: rowAttrsToRender.length + (colAttrs.length === 0 || isColumnAggregationMode && hasColumnAttributes ? 0 : 1) + (hasNumberColumn ? 1 : 0)
|
|
905
934
|
},
|
|
906
935
|
totalLabel
|
|
907
936
|
),
|
|
@@ -975,6 +1004,10 @@ function makeRenderer() {
|
|
|
975
1004
|
DESC: _propTypes2.default.node,
|
|
976
1005
|
DEFAULT: _propTypes2.default.node
|
|
977
1006
|
});
|
|
1007
|
+
// When true, a "No." column with the 1-based index of each data row is
|
|
1008
|
+
// rendered before the row attribute columns.
|
|
1009
|
+
TableRenderer.defaultProps.showNumericalOrder = false;
|
|
1010
|
+
TableRenderer.propTypes.showNumericalOrder = _propTypes2.default.bool;
|
|
978
1011
|
return TableRenderer;
|
|
979
1012
|
}
|
|
980
1013
|
|