@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.
- package/README.md +45 -0
- package/dist/PivotDataWorker.js +164 -0
- package/dist/PivotDataWorker.js.map +1 -0
- package/dist/PivotTableUI.js +1734 -1612
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/PlotlyRenderers.js +3 -1
- package/dist/PlotlyRenderers.js.map +1 -1
- package/dist/TableRenderers.js +8 -9
- package/dist/TableRenderers.js.map +1 -1
- package/dist/Utilities.js +134 -24
- package/dist/Utilities.js.map +1 -1
- package/dist/__tests__/PivotTableUI-processing-test.js +114 -0
- package/dist/__tests__/PivotTableUI-processing-test.js.map +1 -0
- package/dist/__tests__/pivotCompute-test.js +215 -0
- package/dist/__tests__/pivotCompute-test.js.map +1 -0
- package/dist/pivot-worker.js +3387 -0
- package/dist/pivotCompute.js +274 -0
- package/dist/pivotCompute.js.map +1 -0
- package/dist/pivotWorker.js +91 -0
- package/dist/pivotWorker.js.map +1 -0
- package/dist/pivottable.css +74 -0
- package/package.json +7 -4
|
@@ -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"]}
|
package/dist/TableRenderers.js
CHANGED
|
@@ -76,18 +76,13 @@ function buildHeaderGroupSegments(rowAttrs, rowGroupConfig) {
|
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
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
|