@hrforte/react-pivottable 1.0.1 → 2.0.0

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.
@@ -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":["import 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// ============================================================================\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"]}
@@ -76,18 +76,13 @@ function buildHeaderGroupSegments(rowAttrs, rowGroupConfig) {
76
76
  });
77
77
  });
78
78
 
79
- var segments = [];
80
- rowAttrs.forEach(function (name) {
79
+ // Mỗi attribute luôn là 1 segment riêng — không gộp colSpan nữa,
80
+ // để label nhóm (vd "AAA") hiện lặp lại trên từng cột con.
81
+ return rowAttrs.map(function (name) {
81
82
  // eslint-disable-next-line no-undefined
82
83
  var group = attrToGroup[name] !== undefined ? attrToGroup[name] : null;
83
- var last = segments[segments.length - 1];
84
- if (group !== null && last && last.group === group) {
85
- last.span += 1;
86
- } else {
87
- segments.push({ group: group, span: 1 });
88
- }
84
+ return { group: group, span: 1 };
89
85
  });
90
- return segments;
91
86
  }
92
87
 
93
88
  // Style cho ô có nhãn nhóm trong group header
@@ -138,6 +133,7 @@ function evaluateCondition(value, condition) {
138
133
  return isNaN(numValue) || isNaN(numConditionValue) || numValue !== numConditionValue;
139
134
  case 'empty':
140
135
  // Check for null, undefined, empty string, whitespace-only strings, or NaN
136
+ // eslint-disable-next-line no-undefined
141
137
  if (value === null || value === undefined) {
142
138
  return true;
143
139
  }
@@ -150,6 +146,7 @@ function evaluateCondition(value, condition) {
150
146
  return false;
151
147
  case 'notEmpty':
152
148
  // Check that value is not null, undefined, empty/whitespace string, or NaN
149
+ // eslint-disable-next-line no-undefined
153
150
  if (value === null || value === undefined) {
154
151
  return false;
155
152
  }
@@ -161,6 +158,7 @@ function evaluateCondition(value, condition) {
161
158
  }
162
159
  // Other types (boolean, object, etc.) are considered not empty
163
160
  return true;
161
+ // eslint-disable-next-line no-case-declarations
164
162
  case 'contains':
165
163
  // Convert both values to strings for comparison
166
164
  // This handles cases where values are numbers (from aggregators) or conditionValue is parsed as number
@@ -170,6 +168,7 @@ function evaluateCondition(value, condition) {
170
168
  return valueStr.toLowerCase().includes(conditionValueStr.toLowerCase());
171
169
  }
172
170
  return false;
171
+ // eslint-disable-next-line no-case-declarations
173
172
  case 'notContains':
174
173
  // Convert both values to strings for comparison
175
174
  // This handles cases where values are numbers (from aggregators) or conditionValue is parsed as number