@perses-dev/pie-chart-plugin 0.8.1 → 0.9.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/__mf/js/PieChart.684c09d1.js +5 -0
- package/__mf/js/async/109.77dcc7d9.js +73 -0
- package/__mf/js/async/{845.1b2e72ed.js.LICENSE.txt → 109.77dcc7d9.js.LICENSE.txt} +16 -0
- package/__mf/js/async/173.c694e6f7.js +2 -0
- package/__mf/js/async/214.a7648318.js +1 -0
- package/__mf/js/async/224.43460380.js +1 -0
- package/__mf/js/async/238.3e689a99.js +1 -0
- package/__mf/js/async/288.4cad0403.js +7 -0
- package/__mf/js/async/289.c295f73f.js +38 -0
- package/__mf/js/async/292.67519c5b.js +1 -0
- package/__mf/js/async/298.707087d2.js +1 -0
- package/__mf/js/async/409.9c48d616.js +1 -0
- package/__mf/js/async/470.1e913aa7.js +2 -0
- package/__mf/js/async/488.a0bde6cf.js +1 -0
- package/__mf/js/async/651.9c74cbf3.js +1 -0
- package/__mf/js/async/656.13055e59.js +1 -0
- package/__mf/js/async/680.f1da299d.js +110 -0
- package/__mf/js/async/{331.067ac3da.js.LICENSE.txt → 680.f1da299d.js.LICENSE.txt} +28 -0
- package/__mf/js/async/694.011b21e8.js +1 -0
- package/__mf/js/async/707.c77cb775.js +1 -0
- package/__mf/js/async/708.77a1c1f6.js +1 -0
- package/__mf/js/async/738.5a36e399.js +1 -0
- package/__mf/js/async/740.254a5697.js +1 -0
- package/__mf/js/async/75.a825d10b.js +1 -0
- package/__mf/js/async/770.73dda090.js +1 -0
- package/__mf/js/async/863.2d634113.js +2 -0
- package/__mf/js/async/960.021d7634.js +2 -0
- package/__mf/js/async/964.7fdfdfd5.js +2 -0
- package/__mf/js/async/981.e6f0d188.js +2 -0
- package/__mf/js/async/__federation_expose_PieChart.3d887a98.js +1 -0
- package/__mf/js/async/lib-router.5205dc27.js +2 -0
- package/__mf/js/main.b15063c5.js +5 -0
- package/lib/PieChartBase.d.ts +1 -0
- package/lib/PieChartBase.d.ts.map +1 -1
- package/lib/PieChartBase.js.map +1 -1
- package/lib/PieChartOptionsEditorSettings.js +1 -0
- package/lib/PieChartOptionsEditorSettings.js.map +1 -1
- package/lib/PieChartPanel.d.ts.map +1 -1
- package/lib/PieChartPanel.js +50 -15
- package/lib/PieChartPanel.js.map +1 -1
- package/lib/cjs/PieChartOptionsEditorSettings.js +1 -0
- package/lib/cjs/PieChartPanel.js +49 -14
- package/lib/utils.d.ts +1 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js.map +1 -1
- package/mf-manifest.json +40 -88
- package/mf-stats.json +40 -88
- package/package.json +5 -5
- package/__mf/js/693.bc1093ac.js +0 -5
- package/__mf/js/PieChart.a1d90662.js +0 -5
- package/__mf/js/async/105.7a85ee04.js +0 -1
- package/__mf/js/async/173.ee70b493.js +0 -2
- package/__mf/js/async/214.df2e7807.js +0 -1
- package/__mf/js/async/224.dbeed4db.js +0 -1
- package/__mf/js/async/238.5287310b.js +0 -1
- package/__mf/js/async/292.f278784e.js +0 -1
- package/__mf/js/async/331.067ac3da.js +0 -2
- package/__mf/js/async/470.be19e17e.js +0 -2
- package/__mf/js/async/488.0fc5dcbb.js +0 -1
- package/__mf/js/async/503.28e7e4f1.js +0 -1
- package/__mf/js/async/530.f071fc6b.js +0 -7
- package/__mf/js/async/620.9a73a66b.js +0 -2
- package/__mf/js/async/651.a1042e18.js +0 -1
- package/__mf/js/async/656.5efccb26.js +0 -1
- package/__mf/js/async/694.b227b636.js +0 -1
- package/__mf/js/async/707.55fda5d1.js +0 -1
- package/__mf/js/async/738.4ac98841.js +0 -1
- package/__mf/js/async/740.b86dfa00.js +0 -1
- package/__mf/js/async/75.905151a5.js +0 -1
- package/__mf/js/async/770.93415255.js +0 -1
- package/__mf/js/async/845.1b2e72ed.js +0 -73
- package/__mf/js/async/925.92a059f1.js +0 -38
- package/__mf/js/async/960.208437e1.js +0 -2
- package/__mf/js/async/964.6df60c3e.js +0 -2
- package/__mf/js/async/973.74031340.js +0 -110
- package/__mf/js/async/973.74031340.js.LICENSE.txt +0 -27
- package/__mf/js/async/981.3ecbf5ea.js +0 -2
- package/__mf/js/async/__federation_expose_PieChart.869001bb.js +0 -1
- package/__mf/js/async/lib-router.d29f3ef0.js +0 -2
- package/__mf/js/main.d6c64ff1.js +0 -1
- /package/__mf/js/async/{173.ee70b493.js.LICENSE.txt → 173.c694e6f7.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{530.f071fc6b.js.LICENSE.txt → 288.4cad0403.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{470.be19e17e.js.LICENSE.txt → 470.1e913aa7.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{620.9a73a66b.js.LICENSE.txt → 863.2d634113.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{960.208437e1.js.LICENSE.txt → 960.021d7634.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{964.6df60c3e.js.LICENSE.txt → 964.7fdfdfd5.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{981.3ecbf5ea.js.LICENSE.txt → 981.e6f0d188.js.LICENSE.txt} +0 -0
- /package/__mf/js/async/{lib-router.d29f3ef0.js.LICENSE.txt → lib-router.5205dc27.js.LICENSE.txt} +0 -0
package/lib/PieChartPanel.js
CHANGED
|
@@ -14,23 +14,24 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
14
14
|
import { Box, useTheme } from '@mui/material';
|
|
15
15
|
import { ContentWithLegend, useChartsTheme, useId } from '@perses-dev/components';
|
|
16
16
|
import { CalculationsMap, DEFAULT_LEGEND } from '@perses-dev/core';
|
|
17
|
-
import { validateLegendSpec } from '@perses-dev/plugin-system';
|
|
17
|
+
import { comparisonLegends, validateLegendSpec } from '@perses-dev/plugin-system';
|
|
18
18
|
import merge from 'lodash/merge';
|
|
19
19
|
import { useMemo, useRef, useState } from 'react';
|
|
20
20
|
import { getSeriesColor } from './palette-gen';
|
|
21
21
|
import { calculatePercentages, sortSeriesData } from './utils';
|
|
22
22
|
import { PieChartBase } from './PieChartBase';
|
|
23
23
|
export function PieChartPanel(props) {
|
|
24
|
-
const { spec: { calculation, sort, mode }, contentDimensions, queryResults } = props;
|
|
24
|
+
const { spec: { calculation, sort, mode, legend: pieChartLegend }, contentDimensions, queryResults } = props;
|
|
25
25
|
const chartsTheme = useChartsTheme();
|
|
26
26
|
const muiTheme = useTheme();
|
|
27
27
|
const PADDING = chartsTheme.container.padding.default;
|
|
28
28
|
const chartId = useId('time-series-panel');
|
|
29
29
|
const categoricalPalette = chartsTheme.echartsTheme.color;
|
|
30
|
-
const { pieChartData, legendItems } = useMemo(()=>{
|
|
30
|
+
const { pieChartData, legendItems, legendColumns } = useMemo(()=>{
|
|
31
31
|
const calculate = CalculationsMap[calculation];
|
|
32
32
|
const pieChartData = [];
|
|
33
33
|
const legendItems = [];
|
|
34
|
+
const legendColumns = [];
|
|
34
35
|
for(let queryIndex = 0; queryIndex < queryResults.length; queryIndex++){
|
|
35
36
|
const result = queryResults[queryIndex];
|
|
36
37
|
let seriesIndex = 0;
|
|
@@ -40,7 +41,9 @@ export function PieChartPanel(props) {
|
|
|
40
41
|
muiPrimaryColor: muiTheme.palette.primary.main,
|
|
41
42
|
seriesName: seriesData.name
|
|
42
43
|
});
|
|
44
|
+
const seriesId = `${chartId}${seriesData.name}${seriesIndex}`;
|
|
43
45
|
const series = {
|
|
46
|
+
id: seriesId,
|
|
44
47
|
value: calculate(seriesData.values) ?? null,
|
|
45
48
|
name: seriesData.formattedName ?? '',
|
|
46
49
|
itemStyle: {
|
|
@@ -48,25 +51,56 @@ export function PieChartPanel(props) {
|
|
|
48
51
|
}
|
|
49
52
|
};
|
|
50
53
|
pieChartData.push(series);
|
|
51
|
-
const seriesId = chartId + seriesData.name + seriesIndex;
|
|
52
54
|
legendItems.push({
|
|
53
55
|
id: seriesId,
|
|
54
56
|
label: series.name,
|
|
55
|
-
color: seriesColor
|
|
57
|
+
color: seriesColor,
|
|
58
|
+
data: {}
|
|
56
59
|
});
|
|
57
60
|
seriesIndex++;
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
const sortedPieChartData = sortSeriesData(pieChartData, sort);
|
|
61
|
-
if (mode === '
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
if (pieChartLegend?.values?.length && pieChartLegend?.mode === 'table') {
|
|
65
|
+
const { values } = pieChartLegend;
|
|
66
|
+
[
|
|
67
|
+
...values
|
|
68
|
+
].sort().forEach((v)=>{
|
|
69
|
+
/* First, create a column for the current legend value */ legendColumns.push({
|
|
70
|
+
accessorKey: `data.${v}`,
|
|
71
|
+
header: comparisonLegends[v]?.label || v,
|
|
72
|
+
headerDescription: comparisonLegends[v]?.description,
|
|
73
|
+
width: 90,
|
|
74
|
+
align: 'right',
|
|
75
|
+
cellDescription: true,
|
|
76
|
+
enableSorting: true
|
|
77
|
+
});
|
|
78
|
+
/* Then, settle the legend items related to this legend value */ switch(v){
|
|
79
|
+
case 'abs':
|
|
80
|
+
legendItems.forEach((li)=>{
|
|
81
|
+
const { value: itemAbsoluteValue } = pieChartData.find((pd)=>li.id === pd.id) || {};
|
|
82
|
+
if (typeof itemAbsoluteValue === 'number' && li.data) {
|
|
83
|
+
li.data['abs'] = itemAbsoluteValue;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
break;
|
|
87
|
+
case 'relative':
|
|
88
|
+
legendItems.forEach((li)=>{
|
|
89
|
+
const { value: itemPercentageValue } = calculatePercentages(sortedPieChartData).find((ppd)=>li.id === ppd.id) || {};
|
|
90
|
+
if (typeof itemPercentageValue === 'number' && li.data) {
|
|
91
|
+
li.data['relative'] = `${itemPercentageValue.toFixed(2)}%`;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
break;
|
|
95
|
+
default:
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
66
99
|
}
|
|
67
100
|
return {
|
|
68
|
-
pieChartData: sortedPieChartData,
|
|
69
|
-
legendItems
|
|
101
|
+
pieChartData: mode === 'percentage' ? calculatePercentages(sortedPieChartData) : sortedPieChartData,
|
|
102
|
+
legendItems,
|
|
103
|
+
legendColumns
|
|
70
104
|
};
|
|
71
105
|
}, [
|
|
72
106
|
calculation,
|
|
@@ -75,7 +109,8 @@ export function PieChartPanel(props) {
|
|
|
75
109
|
queryResults,
|
|
76
110
|
categoricalPalette,
|
|
77
111
|
muiTheme.palette.primary.main,
|
|
78
|
-
chartId
|
|
112
|
+
chartId,
|
|
113
|
+
pieChartLegend
|
|
79
114
|
]);
|
|
80
115
|
const contentPadding = chartsTheme.container.padding.default;
|
|
81
116
|
const adjustedContentDimensions = contentDimensions ? {
|
|
@@ -92,7 +127,7 @@ export function PieChartPanel(props) {
|
|
|
92
127
|
const chartRef = useRef(null);
|
|
93
128
|
// ensures there are fallbacks for unset properties since most
|
|
94
129
|
// users should not need to customize visual display
|
|
95
|
-
if (contentDimensions
|
|
130
|
+
if (!contentDimensions) return null;
|
|
96
131
|
return /*#__PURE__*/ _jsx(Box, {
|
|
97
132
|
sx: {
|
|
98
133
|
padding: `${PADDING}px`
|
|
@@ -110,7 +145,7 @@ export function PieChartPanel(props) {
|
|
|
110
145
|
selectedItems: selectedLegendItems,
|
|
111
146
|
onSelectedItemsChange: setSelectedLegendItems,
|
|
112
147
|
tableProps: {
|
|
113
|
-
columns:
|
|
148
|
+
columns: legendColumns,
|
|
114
149
|
sorting: legendSorting,
|
|
115
150
|
onSortingChange: setLegendSorting
|
|
116
151
|
},
|
package/lib/PieChartPanel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/PieChartPanel.tsx"],"sourcesContent":["//Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, useTheme } from '@mui/material';\nimport {\n ChartInstance,\n ContentWithLegend,\n LegendItem,\n LegendProps,\n SelectedLegendItemState,\n useChartsTheme,\n useId,\n} from '@perses-dev/components';\nimport { CalculationType, CalculationsMap, DEFAULT_LEGEND, TimeSeriesData } from '@perses-dev/core';\nimport { PanelProps, validateLegendSpec } from '@perses-dev/plugin-system';\nimport merge from 'lodash/merge';\nimport { ReactElement, useMemo, useRef, useState } from 'react';\nimport { getSeriesColor } from './palette-gen';\nimport { PieChartOptions } from './pie-chart-model';\nimport { calculatePercentages, sortSeriesData } from './utils';\nimport { PieChartBase, PieChartData } from './PieChartBase';\n\nexport type PieChartPanelProps = PanelProps<PieChartOptions, TimeSeriesData>;\n\nexport function PieChartPanel(props: PieChartPanelProps): ReactElement | null {\n const {\n spec: { calculation, sort, mode },\n contentDimensions,\n queryResults,\n } = props;\n const chartsTheme = useChartsTheme();\n const muiTheme = useTheme();\n const PADDING = chartsTheme.container.padding.default;\n const chartId = useId('time-series-panel');\n const categoricalPalette = chartsTheme.echartsTheme.color;\n\n const { pieChartData, legendItems } = useMemo(() => {\n const calculate = CalculationsMap[calculation as CalculationType];\n const pieChartData: PieChartData[] = [];\n const legendItems: LegendItem[] = [];\n\n for (let queryIndex = 0; queryIndex < queryResults.length; queryIndex++) {\n const result = queryResults[queryIndex];\n\n let seriesIndex = 0;\n for (const seriesData of result?.data.series ?? []) {\n const seriesColor = getSeriesColor({\n categoricalPalette: categoricalPalette as string[],\n muiPrimaryColor: muiTheme.palette.primary.main,\n seriesName: seriesData.name,\n });\n const series = {\n value: calculate(seriesData.values) ?? null,\n name: seriesData.formattedName ?? '',\n itemStyle: {\n color: seriesColor,\n },\n };\n pieChartData.push(series);\n\n const seriesId = chartId + seriesData.name + seriesIndex;\n legendItems.push({\n id: seriesId,\n label: series.name,\n color: seriesColor,\n });\n seriesIndex++;\n }\n }\n\n const sortedPieChartData = sortSeriesData(pieChartData, sort);\n if (mode === 'percentage') {\n return {\n pieChartData: calculatePercentages(sortedPieChartData),\n legendItems,\n };\n }\n return {\n pieChartData: sortedPieChartData,\n legendItems,\n };\n }, [calculation, sort, mode, queryResults, categoricalPalette, muiTheme.palette.primary.main, chartId]);\n\n const contentPadding = chartsTheme.container.padding.default;\n const adjustedContentDimensions: typeof contentDimensions = contentDimensions\n ? {\n width: contentDimensions.width - contentPadding * 2,\n height: contentDimensions.height - contentPadding * 2,\n }\n : undefined;\n\n const legend = useMemo(() => {\n return props.spec.legend && validateLegendSpec(props.spec.legend)\n ? merge({}, DEFAULT_LEGEND, props.spec.legend)\n : undefined;\n }, [props.spec.legend]);\n\n const [selectedLegendItems, setSelectedLegendItems] = useState<SelectedLegendItemState>('ALL');\n\n const [legendSorting, setLegendSorting] = useState<NonNullable<LegendProps['tableProps']>['sorting']>();\n\n const chartRef = useRef<ChartInstance>(null);\n\n // ensures there are fallbacks for unset properties since most\n // users should not need to customize visual display\n\n if (contentDimensions === undefined) return null;\n\n return (\n <Box sx={{ padding: `${PADDING}px` }}>\n <ContentWithLegend\n width={adjustedContentDimensions?.width ?? 400}\n height={adjustedContentDimensions?.height ?? 1000}\n // Making this small enough that the medium size doesn't get\n // responsive-handling-ed away when in the panel options editor.\n minChildrenHeight={50}\n legendSize={legend?.size}\n legendProps={\n legend && {\n options: legend,\n data: legendItems,\n selectedItems: selectedLegendItems,\n onSelectedItemsChange: setSelectedLegendItems,\n tableProps: {\n columns: [],\n sorting: legendSorting,\n onSortingChange: setLegendSorting,\n },\n onItemMouseOver: (e, { id }): void => {\n chartRef.current?.highlightSeries({ name: id });\n },\n onItemMouseOut: (): void => {\n chartRef.current?.clearHighlightedSeries();\n },\n }\n }\n >\n {({ height, width }) => {\n return (\n <Box style={{ height, width }}>\n <PieChartBase\n data={pieChartData}\n width={contentDimensions.width - PADDING * 2}\n height={contentDimensions.height - PADDING * 2}\n />\n </Box>\n );\n }}\n </ContentWithLegend>\n </Box>\n );\n}\n"],"names":["Box","useTheme","ContentWithLegend","useChartsTheme","useId","CalculationsMap","DEFAULT_LEGEND","validateLegendSpec","merge","useMemo","useRef","useState","getSeriesColor","calculatePercentages","sortSeriesData","PieChartBase","PieChartPanel","props","spec","calculation","sort","mode","contentDimensions","queryResults","chartsTheme","muiTheme","PADDING","container","padding","default","chartId","categoricalPalette","echartsTheme","color","pieChartData","legendItems","calculate","queryIndex","length","result","seriesIndex","seriesData","data","series","seriesColor","muiPrimaryColor","palette","primary","main","seriesName","name","value","values","formattedName","itemStyle","push","seriesId","id","label","sortedPieChartData","contentPadding","adjustedContentDimensions","width","height","undefined","legend","selectedLegendItems","setSelectedLegendItems","legendSorting","setLegendSorting","chartRef","sx","minChildrenHeight","legendSize","size","legendProps","options","selectedItems","onSelectedItemsChange","tableProps","columns","sorting","onSortingChange","onItemMouseOver","e","current","highlightSeries","onItemMouseOut","clearHighlightedSeries","style"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/PieChartPanel.tsx"],"sourcesContent":["//Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { Box, useTheme } from '@mui/material';\nimport {\n ChartInstance,\n ContentWithLegend,\n LegendItem,\n LegendProps,\n SelectedLegendItemState,\n TableColumnConfig,\n useChartsTheme,\n useId,\n} from '@perses-dev/components';\nimport { CalculationType, CalculationsMap, DEFAULT_LEGEND, TimeSeriesData } from '@perses-dev/core';\nimport { comparisonLegends, ComparisonValues, PanelProps, validateLegendSpec } from '@perses-dev/plugin-system';\nimport merge from 'lodash/merge';\nimport { ReactElement, useMemo, useRef, useState } from 'react';\nimport { getSeriesColor } from './palette-gen';\nimport { PieChartOptions } from './pie-chart-model';\nimport { calculatePercentages, sortSeriesData } from './utils';\nimport { PieChartBase, PieChartData } from './PieChartBase';\n\nexport type PieChartPanelProps = PanelProps<PieChartOptions, TimeSeriesData>;\n\nexport function PieChartPanel(props: PieChartPanelProps): ReactElement | null {\n const {\n spec: { calculation, sort, mode, legend: pieChartLegend },\n contentDimensions,\n queryResults,\n } = props;\n const chartsTheme = useChartsTheme();\n const muiTheme = useTheme();\n const PADDING = chartsTheme.container.padding.default;\n const chartId = useId('time-series-panel');\n const categoricalPalette = chartsTheme.echartsTheme.color;\n\n const { pieChartData, legendItems, legendColumns } = useMemo(() => {\n const calculate = CalculationsMap[calculation as CalculationType];\n const pieChartData: PieChartData[] = [];\n const legendItems: LegendItem[] = [];\n const legendColumns: Array<TableColumnConfig<LegendItem>> = [];\n\n for (let queryIndex = 0; queryIndex < queryResults.length; queryIndex++) {\n const result = queryResults[queryIndex];\n\n let seriesIndex = 0;\n for (const seriesData of result?.data.series ?? []) {\n const seriesColor = getSeriesColor({\n categoricalPalette: categoricalPalette as string[],\n muiPrimaryColor: muiTheme.palette.primary.main,\n seriesName: seriesData.name,\n });\n\n const seriesId = `${chartId}${seriesData.name}${seriesIndex}`;\n\n const series = {\n id: seriesId,\n value: calculate(seriesData.values) ?? null,\n name: seriesData.formattedName ?? '',\n itemStyle: {\n color: seriesColor,\n },\n };\n pieChartData.push(series);\n\n legendItems.push({\n id: seriesId,\n label: series.name,\n color: seriesColor,\n data: {},\n });\n seriesIndex++;\n }\n }\n\n const sortedPieChartData = sortSeriesData(pieChartData, sort);\n\n if (pieChartLegend?.values?.length && pieChartLegend?.mode === 'table') {\n const { values } = pieChartLegend;\n [...values].sort().forEach((v) => {\n /* First, create a column for the current legend value */\n legendColumns.push({\n accessorKey: `data.${v}`,\n header: comparisonLegends[v as ComparisonValues]?.label || v,\n headerDescription: comparisonLegends[v as ComparisonValues]?.description,\n width: 90,\n align: 'right',\n cellDescription: true,\n enableSorting: true,\n });\n /* Then, settle the legend items related to this legend value */\n switch (v) {\n case 'abs':\n legendItems.forEach((li) => {\n const { value: itemAbsoluteValue } = pieChartData.find((pd) => li.id === pd.id) || {};\n if (typeof itemAbsoluteValue === 'number' && li.data) {\n li.data['abs'] = itemAbsoluteValue;\n }\n });\n break;\n case 'relative':\n legendItems.forEach((li) => {\n const { value: itemPercentageValue } =\n calculatePercentages(sortedPieChartData).find((ppd) => li.id === ppd.id) || {};\n if (typeof itemPercentageValue === 'number' && li.data) {\n li.data['relative'] = `${itemPercentageValue.toFixed(2)}%`;\n }\n });\n break;\n default:\n break;\n }\n });\n }\n\n return {\n pieChartData: mode === 'percentage' ? calculatePercentages(sortedPieChartData) : sortedPieChartData,\n legendItems,\n legendColumns,\n };\n }, [\n calculation,\n sort,\n mode,\n queryResults,\n categoricalPalette,\n muiTheme.palette.primary.main,\n chartId,\n pieChartLegend,\n ]);\n\n const contentPadding = chartsTheme.container.padding.default;\n const adjustedContentDimensions: typeof contentDimensions = contentDimensions\n ? {\n width: contentDimensions.width - contentPadding * 2,\n height: contentDimensions.height - contentPadding * 2,\n }\n : undefined;\n\n const legend = useMemo(() => {\n return props.spec.legend && validateLegendSpec(props.spec.legend)\n ? merge({}, DEFAULT_LEGEND, props.spec.legend)\n : undefined;\n }, [props.spec.legend]);\n\n const [selectedLegendItems, setSelectedLegendItems] = useState<SelectedLegendItemState>('ALL');\n\n const [legendSorting, setLegendSorting] = useState<NonNullable<LegendProps['tableProps']>['sorting']>();\n\n const chartRef = useRef<ChartInstance>(null);\n\n // ensures there are fallbacks for unset properties since most\n // users should not need to customize visual display\n\n if (!contentDimensions) return null;\n\n return (\n <Box sx={{ padding: `${PADDING}px` }}>\n <ContentWithLegend\n width={adjustedContentDimensions?.width ?? 400}\n height={adjustedContentDimensions?.height ?? 1000}\n // Making this small enough that the medium size doesn't get\n // responsive-handling-ed away when in the panel options editor.\n minChildrenHeight={50}\n legendSize={legend?.size}\n legendProps={\n legend && {\n options: legend,\n data: legendItems,\n selectedItems: selectedLegendItems,\n onSelectedItemsChange: setSelectedLegendItems,\n tableProps: {\n columns: legendColumns,\n sorting: legendSorting,\n onSortingChange: setLegendSorting,\n },\n onItemMouseOver: (e, { id }): void => {\n chartRef.current?.highlightSeries({ name: id });\n },\n onItemMouseOut: (): void => {\n chartRef.current?.clearHighlightedSeries();\n },\n }\n }\n >\n {({ height, width }) => {\n return (\n <Box style={{ height, width }}>\n <PieChartBase\n data={pieChartData}\n width={contentDimensions.width - PADDING * 2}\n height={contentDimensions.height - PADDING * 2}\n />\n </Box>\n );\n }}\n </ContentWithLegend>\n </Box>\n );\n}\n"],"names":["Box","useTheme","ContentWithLegend","useChartsTheme","useId","CalculationsMap","DEFAULT_LEGEND","comparisonLegends","validateLegendSpec","merge","useMemo","useRef","useState","getSeriesColor","calculatePercentages","sortSeriesData","PieChartBase","PieChartPanel","props","spec","calculation","sort","mode","legend","pieChartLegend","contentDimensions","queryResults","chartsTheme","muiTheme","PADDING","container","padding","default","chartId","categoricalPalette","echartsTheme","color","pieChartData","legendItems","legendColumns","calculate","queryIndex","length","result","seriesIndex","seriesData","data","series","seriesColor","muiPrimaryColor","palette","primary","main","seriesName","name","seriesId","id","value","values","formattedName","itemStyle","push","label","sortedPieChartData","forEach","v","accessorKey","header","headerDescription","description","width","align","cellDescription","enableSorting","li","itemAbsoluteValue","find","pd","itemPercentageValue","ppd","toFixed","contentPadding","adjustedContentDimensions","height","undefined","selectedLegendItems","setSelectedLegendItems","legendSorting","setLegendSorting","chartRef","sx","minChildrenHeight","legendSize","size","legendProps","options","selectedItems","onSelectedItemsChange","tableProps","columns","sorting","onSortingChange","onItemMouseOver","e","current","highlightSeries","onItemMouseOut","clearHighlightedSeries","style"],"mappings":"AAAA,mCAAmC;AACnC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAEjC,SAASA,GAAG,EAAEC,QAAQ,QAAQ,gBAAgB;AAC9C,SAEEC,iBAAiB,EAKjBC,cAAc,EACdC,KAAK,QACA,yBAAyB;AAChC,SAA0BC,eAAe,EAAEC,cAAc,QAAwB,mBAAmB;AACpG,SAASC,iBAAiB,EAAgCC,kBAAkB,QAAQ,4BAA4B;AAChH,OAAOC,WAAW,eAAe;AACjC,SAAuBC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAChE,SAASC,cAAc,QAAQ,gBAAgB;AAE/C,SAASC,oBAAoB,EAAEC,cAAc,QAAQ,UAAU;AAC/D,SAASC,YAAY,QAAsB,iBAAiB;AAI5D,OAAO,SAASC,cAAcC,KAAyB;IACrD,MAAM,EACJC,MAAM,EAAEC,WAAW,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQC,cAAc,EAAE,EACzDC,iBAAiB,EACjBC,YAAY,EACb,GAAGR;IACJ,MAAMS,cAAcxB;IACpB,MAAMyB,WAAW3B;IACjB,MAAM4B,UAAUF,YAAYG,SAAS,CAACC,OAAO,CAACC,OAAO;IACrD,MAAMC,UAAU7B,MAAM;IACtB,MAAM8B,qBAAqBP,YAAYQ,YAAY,CAACC,KAAK;IAEzD,MAAM,EAAEC,YAAY,EAAEC,WAAW,EAAEC,aAAa,EAAE,GAAG7B,QAAQ;QAC3D,MAAM8B,YAAYnC,eAAe,CAACe,YAA+B;QACjE,MAAMiB,eAA+B,EAAE;QACvC,MAAMC,cAA4B,EAAE;QACpC,MAAMC,gBAAsD,EAAE;QAE9D,IAAK,IAAIE,aAAa,GAAGA,aAAaf,aAAagB,MAAM,EAAED,aAAc;YACvE,MAAME,SAASjB,YAAY,CAACe,WAAW;YAEvC,IAAIG,cAAc;YAClB,KAAK,MAAMC,cAAcF,QAAQG,KAAKC,UAAU,EAAE,CAAE;gBAClD,MAAMC,cAAcnC,eAAe;oBACjCqB,oBAAoBA;oBACpBe,iBAAiBrB,SAASsB,OAAO,CAACC,OAAO,CAACC,IAAI;oBAC9CC,YAAYR,WAAWS,IAAI;gBAC7B;gBAEA,MAAMC,WAAW,GAAGtB,UAAUY,WAAWS,IAAI,GAAGV,aAAa;gBAE7D,MAAMG,SAAS;oBACbS,IAAID;oBACJE,OAAOjB,UAAUK,WAAWa,MAAM,KAAK;oBACvCJ,MAAMT,WAAWc,aAAa,IAAI;oBAClCC,WAAW;wBACTxB,OAAOY;oBACT;gBACF;gBACAX,aAAawB,IAAI,CAACd;gBAElBT,YAAYuB,IAAI,CAAC;oBACfL,IAAID;oBACJO,OAAOf,OAAOO,IAAI;oBAClBlB,OAAOY;oBACPF,MAAM,CAAC;gBACT;gBACAF;YACF;QACF;QAEA,MAAMmB,qBAAqBhD,eAAesB,cAAchB;QAExD,IAAIG,gBAAgBkC,QAAQhB,UAAUlB,gBAAgBF,SAAS,SAAS;YACtE,MAAM,EAAEoC,MAAM,EAAE,GAAGlC;YACnB;mBAAIkC;aAAO,CAACrC,IAAI,GAAG2C,OAAO,CAAC,CAACC;gBAC1B,uDAAuD,GACvD1B,cAAcsB,IAAI,CAAC;oBACjBK,aAAa,CAAC,KAAK,EAAED,GAAG;oBACxBE,QAAQ5D,iBAAiB,CAAC0D,EAAsB,EAAEH,SAASG;oBAC3DG,mBAAmB7D,iBAAiB,CAAC0D,EAAsB,EAAEI;oBAC7DC,OAAO;oBACPC,OAAO;oBACPC,iBAAiB;oBACjBC,eAAe;gBACjB;gBACA,8DAA8D,GAC9D,OAAQR;oBACN,KAAK;wBACH3B,YAAY0B,OAAO,CAAC,CAACU;4BACnB,MAAM,EAAEjB,OAAOkB,iBAAiB,EAAE,GAAGtC,aAAauC,IAAI,CAAC,CAACC,KAAOH,GAAGlB,EAAE,KAAKqB,GAAGrB,EAAE,KAAK,CAAC;4BACpF,IAAI,OAAOmB,sBAAsB,YAAYD,GAAG5B,IAAI,EAAE;gCACpD4B,GAAG5B,IAAI,CAAC,MAAM,GAAG6B;4BACnB;wBACF;wBACA;oBACF,KAAK;wBACHrC,YAAY0B,OAAO,CAAC,CAACU;4BACnB,MAAM,EAAEjB,OAAOqB,mBAAmB,EAAE,GAClChE,qBAAqBiD,oBAAoBa,IAAI,CAAC,CAACG,MAAQL,GAAGlB,EAAE,KAAKuB,IAAIvB,EAAE,KAAK,CAAC;4BAC/E,IAAI,OAAOsB,wBAAwB,YAAYJ,GAAG5B,IAAI,EAAE;gCACtD4B,GAAG5B,IAAI,CAAC,WAAW,GAAG,GAAGgC,oBAAoBE,OAAO,CAAC,GAAG,CAAC,CAAC;4BAC5D;wBACF;wBACA;oBACF;wBACE;gBACJ;YACF;QACF;QAEA,OAAO;YACL3C,cAAcf,SAAS,eAAeR,qBAAqBiD,sBAAsBA;YACjFzB;YACAC;QACF;IACF,GAAG;QACDnB;QACAC;QACAC;QACAI;QACAQ;QACAN,SAASsB,OAAO,CAACC,OAAO,CAACC,IAAI;QAC7BnB;QACAT;KACD;IAED,MAAMyD,iBAAiBtD,YAAYG,SAAS,CAACC,OAAO,CAACC,OAAO;IAC5D,MAAMkD,4BAAsDzD,oBACxD;QACE6C,OAAO7C,kBAAkB6C,KAAK,GAAGW,iBAAiB;QAClDE,QAAQ1D,kBAAkB0D,MAAM,GAAGF,iBAAiB;IACtD,IACAG;IAEJ,MAAM7D,SAASb,QAAQ;QACrB,OAAOQ,MAAMC,IAAI,CAACI,MAAM,IAAIf,mBAAmBU,MAAMC,IAAI,CAACI,MAAM,IAC5Dd,MAAM,CAAC,GAAGH,gBAAgBY,MAAMC,IAAI,CAACI,MAAM,IAC3C6D;IACN,GAAG;QAAClE,MAAMC,IAAI,CAACI,MAAM;KAAC;IAEtB,MAAM,CAAC8D,qBAAqBC,uBAAuB,GAAG1E,SAAkC;IAExF,MAAM,CAAC2E,eAAeC,iBAAiB,GAAG5E;IAE1C,MAAM6E,WAAW9E,OAAsB;IAEvC,8DAA8D;IAC9D,oDAAoD;IAEpD,IAAI,CAACc,mBAAmB,OAAO;IAE/B,qBACE,KAACzB;QAAI0F,IAAI;YAAE3D,SAAS,GAAGF,QAAQ,EAAE,CAAC;QAAC;kBACjC,cAAA,KAAC3B;YACCoE,OAAOY,2BAA2BZ,SAAS;YAC3Ca,QAAQD,2BAA2BC,UAAU;YAC7C,4DAA4D;YAC5D,gEAAgE;YAChEQ,mBAAmB;YACnBC,YAAYrE,QAAQsE;YACpBC,aACEvE,UAAU;gBACRwE,SAASxE;gBACTuB,MAAMR;gBACN0D,eAAeX;gBACfY,uBAAuBX;gBACvBY,YAAY;oBACVC,SAAS5D;oBACT6D,SAASb;oBACTc,iBAAiBb;gBACnB;gBACAc,iBAAiB,CAACC,GAAG,EAAE/C,EAAE,EAAE;oBACzBiC,SAASe,OAAO,EAAEC,gBAAgB;wBAAEnD,MAAME;oBAAG;gBAC/C;gBACAkD,gBAAgB;oBACdjB,SAASe,OAAO,EAAEG;gBACpB;YACF;sBAGD,CAAC,EAAExB,MAAM,EAAEb,KAAK,EAAE;gBACjB,qBACE,KAACtE;oBAAI4G,OAAO;wBAAEzB;wBAAQb;oBAAM;8BAC1B,cAAA,KAACtD;wBACC8B,MAAMT;wBACNiC,OAAO7C,kBAAkB6C,KAAK,GAAGzC,UAAU;wBAC3CsD,QAAQ1D,kBAAkB0D,MAAM,GAAGtD,UAAU;;;YAIrD;;;AAIR"}
|
|
@@ -68,6 +68,7 @@ function PieChartOptionsEditorSettings(props) {
|
|
|
68
68
|
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_components.OptionsEditorColumn, {
|
|
69
69
|
children: [
|
|
70
70
|
/*#__PURE__*/ (0, _jsxruntime.jsx)(_pluginsystem.LegendOptionsEditor, {
|
|
71
|
+
calculation: "comparison",
|
|
71
72
|
value: value.legend,
|
|
72
73
|
onChange: handleLegendChange
|
|
73
74
|
}),
|
package/lib/cjs/PieChartPanel.js
CHANGED
|
@@ -36,16 +36,17 @@ function _interop_require_default(obj) {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
function PieChartPanel(props) {
|
|
39
|
-
const { spec: { calculation, sort, mode }, contentDimensions, queryResults } = props;
|
|
39
|
+
const { spec: { calculation, sort, mode, legend: pieChartLegend }, contentDimensions, queryResults } = props;
|
|
40
40
|
const chartsTheme = (0, _components.useChartsTheme)();
|
|
41
41
|
const muiTheme = (0, _material.useTheme)();
|
|
42
42
|
const PADDING = chartsTheme.container.padding.default;
|
|
43
43
|
const chartId = (0, _components.useId)('time-series-panel');
|
|
44
44
|
const categoricalPalette = chartsTheme.echartsTheme.color;
|
|
45
|
-
const { pieChartData, legendItems } = (0, _react.useMemo)(()=>{
|
|
45
|
+
const { pieChartData, legendItems, legendColumns } = (0, _react.useMemo)(()=>{
|
|
46
46
|
const calculate = _core.CalculationsMap[calculation];
|
|
47
47
|
const pieChartData = [];
|
|
48
48
|
const legendItems = [];
|
|
49
|
+
const legendColumns = [];
|
|
49
50
|
for(let queryIndex = 0; queryIndex < queryResults.length; queryIndex++){
|
|
50
51
|
const result = queryResults[queryIndex];
|
|
51
52
|
let seriesIndex = 0;
|
|
@@ -55,7 +56,9 @@ function PieChartPanel(props) {
|
|
|
55
56
|
muiPrimaryColor: muiTheme.palette.primary.main,
|
|
56
57
|
seriesName: seriesData.name
|
|
57
58
|
});
|
|
59
|
+
const seriesId = `${chartId}${seriesData.name}${seriesIndex}`;
|
|
58
60
|
const series = {
|
|
61
|
+
id: seriesId,
|
|
59
62
|
value: calculate(seriesData.values) ?? null,
|
|
60
63
|
name: seriesData.formattedName ?? '',
|
|
61
64
|
itemStyle: {
|
|
@@ -63,25 +66,56 @@ function PieChartPanel(props) {
|
|
|
63
66
|
}
|
|
64
67
|
};
|
|
65
68
|
pieChartData.push(series);
|
|
66
|
-
const seriesId = chartId + seriesData.name + seriesIndex;
|
|
67
69
|
legendItems.push({
|
|
68
70
|
id: seriesId,
|
|
69
71
|
label: series.name,
|
|
70
|
-
color: seriesColor
|
|
72
|
+
color: seriesColor,
|
|
73
|
+
data: {}
|
|
71
74
|
});
|
|
72
75
|
seriesIndex++;
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
const sortedPieChartData = (0, _utils.sortSeriesData)(pieChartData, sort);
|
|
76
|
-
if (mode === '
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
if (pieChartLegend?.values?.length && pieChartLegend?.mode === 'table') {
|
|
80
|
+
const { values } = pieChartLegend;
|
|
81
|
+
[
|
|
82
|
+
...values
|
|
83
|
+
].sort().forEach((v)=>{
|
|
84
|
+
/* First, create a column for the current legend value */ legendColumns.push({
|
|
85
|
+
accessorKey: `data.${v}`,
|
|
86
|
+
header: _pluginsystem.comparisonLegends[v]?.label || v,
|
|
87
|
+
headerDescription: _pluginsystem.comparisonLegends[v]?.description,
|
|
88
|
+
width: 90,
|
|
89
|
+
align: 'right',
|
|
90
|
+
cellDescription: true,
|
|
91
|
+
enableSorting: true
|
|
92
|
+
});
|
|
93
|
+
/* Then, settle the legend items related to this legend value */ switch(v){
|
|
94
|
+
case 'abs':
|
|
95
|
+
legendItems.forEach((li)=>{
|
|
96
|
+
const { value: itemAbsoluteValue } = pieChartData.find((pd)=>li.id === pd.id) || {};
|
|
97
|
+
if (typeof itemAbsoluteValue === 'number' && li.data) {
|
|
98
|
+
li.data['abs'] = itemAbsoluteValue;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
break;
|
|
102
|
+
case 'relative':
|
|
103
|
+
legendItems.forEach((li)=>{
|
|
104
|
+
const { value: itemPercentageValue } = (0, _utils.calculatePercentages)(sortedPieChartData).find((ppd)=>li.id === ppd.id) || {};
|
|
105
|
+
if (typeof itemPercentageValue === 'number' && li.data) {
|
|
106
|
+
li.data['relative'] = `${itemPercentageValue.toFixed(2)}%`;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
81
114
|
}
|
|
82
115
|
return {
|
|
83
|
-
pieChartData: sortedPieChartData,
|
|
84
|
-
legendItems
|
|
116
|
+
pieChartData: mode === 'percentage' ? (0, _utils.calculatePercentages)(sortedPieChartData) : sortedPieChartData,
|
|
117
|
+
legendItems,
|
|
118
|
+
legendColumns
|
|
85
119
|
};
|
|
86
120
|
}, [
|
|
87
121
|
calculation,
|
|
@@ -90,7 +124,8 @@ function PieChartPanel(props) {
|
|
|
90
124
|
queryResults,
|
|
91
125
|
categoricalPalette,
|
|
92
126
|
muiTheme.palette.primary.main,
|
|
93
|
-
chartId
|
|
127
|
+
chartId,
|
|
128
|
+
pieChartLegend
|
|
94
129
|
]);
|
|
95
130
|
const contentPadding = chartsTheme.container.padding.default;
|
|
96
131
|
const adjustedContentDimensions = contentDimensions ? {
|
|
@@ -107,7 +142,7 @@ function PieChartPanel(props) {
|
|
|
107
142
|
const chartRef = (0, _react.useRef)(null);
|
|
108
143
|
// ensures there are fallbacks for unset properties since most
|
|
109
144
|
// users should not need to customize visual display
|
|
110
|
-
if (contentDimensions
|
|
145
|
+
if (!contentDimensions) return null;
|
|
111
146
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_material.Box, {
|
|
112
147
|
sx: {
|
|
113
148
|
padding: `${PADDING}px`
|
|
@@ -125,7 +160,7 @@ function PieChartPanel(props) {
|
|
|
125
160
|
selectedItems: selectedLegendItems,
|
|
126
161
|
onSelectedItemsChange: setSelectedLegendItems,
|
|
127
162
|
tableProps: {
|
|
128
|
-
columns:
|
|
163
|
+
columns: legendColumns,
|
|
129
164
|
sorting: legendSorting,
|
|
130
165
|
onSortingChange: setLegendSorting
|
|
131
166
|
},
|
package/lib/utils.d.ts
CHANGED
package/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAS9G;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,SAAS,GAAE,UAAyB,GAAG,YAAY,EAAE,CA8BzG"}
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { SortOption } from '@perses-dev/components';\nimport { DEFAULT_SORT } from './pie-chart-model';\nimport { PieChartData } from './PieChartBase';\n\nexport function calculatePercentages(data: PieChartData[]): Array<{ name: string; value: number }> {\n const sum = data.reduce((accumulator, { value }) => accumulator + (value ?? 0), 0);\n return data.map((seriesData) => {\n const percentage = ((seriesData.value ?? 0) / sum) * 100;\n return {\n ...seriesData,\n value: percentage,\n };\n });\n}\n\nexport function sortSeriesData(data: PieChartData[], sortOrder: SortOption = DEFAULT_SORT): PieChartData[] {\n if (sortOrder === 'asc') {\n // sort in ascending order by value\n return data.sort((a, b) => {\n if (a.value === null) {\n return 1;\n }\n if (b.value === null) {\n return -1;\n }\n if (a.value === b.value) {\n return 0;\n }\n return a.value < b.value ? 1 : -1;\n });\n } else {\n // sort in descending order by value\n return data.sort((a, b) => {\n if (a.value === null) {\n return -1;\n }\n if (b.value === null) {\n return 1;\n }\n if (a.value === b.value) {\n return 0;\n }\n return a.value < b.value ? -1 : 1;\n });\n }\n}\n"],"names":["DEFAULT_SORT","calculatePercentages","data","sum","reduce","accumulator","value","map","seriesData","percentage","sortSeriesData","sortOrder","sort","a","b"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAASA,YAAY,QAAQ,oBAAoB;AAGjD,OAAO,SAASC,qBAAqBC,IAAoB;IACvD,MAAMC,MAAMD,KAAKE,MAAM,CAAC,CAACC,aAAa,EAAEC,KAAK,EAAE,GAAKD,cAAeC,CAAAA,SAAS,CAAA,GAAI;IAChF,OAAOJ,KAAKK,GAAG,CAAC,CAACC;QACf,MAAMC,aAAa,AAAED,CAAAA,WAAWF,KAAK,IAAI,CAAA,IAAKH,MAAO;QACrD,OAAO;YACL,GAAGK,UAAU;YACbF,OAAOG;QACT;IACF;AACF;AAEA,OAAO,SAASC,eAAeR,IAAoB,EAAES,YAAwBX,YAAY;IACvF,IAAIW,cAAc,OAAO;QACvB,mCAAmC;QACnC,OAAOT,KAAKU,IAAI,CAAC,CAACC,GAAGC;YACnB,IAAID,EAAEP,KAAK,KAAK,MAAM;gBACpB,OAAO;YACT;YACA,IAAIQ,EAAER,KAAK,KAAK,MAAM;gBACpB,OAAO,CAAC;YACV;YACA,IAAIO,EAAEP,KAAK,KAAKQ,EAAER,KAAK,EAAE;gBACvB,OAAO;YACT;YACA,OAAOO,EAAEP,KAAK,GAAGQ,EAAER,KAAK,GAAG,IAAI,CAAC;QAClC;IACF,OAAO;QACL,oCAAoC;QACpC,OAAOJ,KAAKU,IAAI,CAAC,CAACC,GAAGC;YACnB,IAAID,EAAEP,KAAK,KAAK,MAAM;gBACpB,OAAO,CAAC;YACV;YACA,IAAIQ,EAAER,KAAK,KAAK,MAAM;gBACpB,OAAO;YACT;YACA,IAAIO,EAAEP,KAAK,KAAKQ,EAAER,KAAK,EAAE;gBACvB,OAAO;YACT;YACA,OAAOO,EAAEP,KAAK,GAAGQ,EAAER,KAAK,GAAG,CAAC,IAAI;QAClC;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["// Copyright 2024 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { SortOption } from '@perses-dev/components';\nimport { DEFAULT_SORT } from './pie-chart-model';\nimport { PieChartData } from './PieChartBase';\n\nexport function calculatePercentages(data: PieChartData[]): Array<{ id?: string; name: string; value: number }> {\n const sum = data.reduce((accumulator, { value }) => accumulator + (value ?? 0), 0);\n return data.map((seriesData) => {\n const percentage = ((seriesData.value ?? 0) / sum) * 100;\n return {\n ...seriesData,\n value: percentage,\n };\n });\n}\n\nexport function sortSeriesData(data: PieChartData[], sortOrder: SortOption = DEFAULT_SORT): PieChartData[] {\n if (sortOrder === 'asc') {\n // sort in ascending order by value\n return data.sort((a, b) => {\n if (a.value === null) {\n return 1;\n }\n if (b.value === null) {\n return -1;\n }\n if (a.value === b.value) {\n return 0;\n }\n return a.value < b.value ? 1 : -1;\n });\n } else {\n // sort in descending order by value\n return data.sort((a, b) => {\n if (a.value === null) {\n return -1;\n }\n if (b.value === null) {\n return 1;\n }\n if (a.value === b.value) {\n return 0;\n }\n return a.value < b.value ? -1 : 1;\n });\n }\n}\n"],"names":["DEFAULT_SORT","calculatePercentages","data","sum","reduce","accumulator","value","map","seriesData","percentage","sortSeriesData","sortOrder","sort","a","b"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAASA,YAAY,QAAQ,oBAAoB;AAGjD,OAAO,SAASC,qBAAqBC,IAAoB;IACvD,MAAMC,MAAMD,KAAKE,MAAM,CAAC,CAACC,aAAa,EAAEC,KAAK,EAAE,GAAKD,cAAeC,CAAAA,SAAS,CAAA,GAAI;IAChF,OAAOJ,KAAKK,GAAG,CAAC,CAACC;QACf,MAAMC,aAAa,AAAED,CAAAA,WAAWF,KAAK,IAAI,CAAA,IAAKH,MAAO;QACrD,OAAO;YACL,GAAGK,UAAU;YACbF,OAAOG;QACT;IACF;AACF;AAEA,OAAO,SAASC,eAAeR,IAAoB,EAAES,YAAwBX,YAAY;IACvF,IAAIW,cAAc,OAAO;QACvB,mCAAmC;QACnC,OAAOT,KAAKU,IAAI,CAAC,CAACC,GAAGC;YACnB,IAAID,EAAEP,KAAK,KAAK,MAAM;gBACpB,OAAO;YACT;YACA,IAAIQ,EAAER,KAAK,KAAK,MAAM;gBACpB,OAAO,CAAC;YACV;YACA,IAAIO,EAAEP,KAAK,KAAKQ,EAAER,KAAK,EAAE;gBACvB,OAAO;YACT;YACA,OAAOO,EAAEP,KAAK,GAAGQ,EAAER,KAAK,GAAG,IAAI,CAAC;QAClC;IACF,OAAO;QACL,oCAAoC;QACpC,OAAOJ,KAAKU,IAAI,CAAC,CAACC,GAAGC;YACnB,IAAID,EAAEP,KAAK,KAAK,MAAM;gBACpB,OAAO,CAAC;YACV;YACA,IAAIQ,EAAER,KAAK,KAAK,MAAM;gBACpB,OAAO;YACT;YACA,IAAIO,EAAEP,KAAK,KAAKQ,EAAER,KAAK,EAAE;gBACvB,OAAO;YACT;YACA,OAAOO,EAAEP,KAAK,GAAGQ,EAAER,KAAK,GAAG,CAAC,IAAI;QAClC;IACF;AACF"}
|
package/mf-manifest.json
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
"name": "PieChart",
|
|
6
6
|
"type": "app",
|
|
7
7
|
"buildInfo": {
|
|
8
|
-
"buildVersion": "0.
|
|
8
|
+
"buildVersion": "0.9.1",
|
|
9
9
|
"buildName": "@perses-dev/pie-chart-plugin"
|
|
10
10
|
},
|
|
11
11
|
"remoteEntry": {
|
|
12
|
-
"name": "__mf/js/PieChart.
|
|
12
|
+
"name": "__mf/js/PieChart.684c09d1.js",
|
|
13
13
|
"path": "",
|
|
14
14
|
"type": "global"
|
|
15
15
|
},
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"api": ""
|
|
21
21
|
},
|
|
22
22
|
"globalName": "PieChart",
|
|
23
|
-
"pluginVersion": "0.
|
|
23
|
+
"pluginVersion": "0.19.1",
|
|
24
24
|
"prefetchInterface": false,
|
|
25
25
|
"publicPath": "/plugins/PieChart/"
|
|
26
26
|
},
|
|
@@ -33,11 +33,9 @@
|
|
|
33
33
|
"requiredVersion": "^11.11.3",
|
|
34
34
|
"assets": {
|
|
35
35
|
"js": {
|
|
36
|
-
"async": [
|
|
37
|
-
"__mf/js/async/964.6df60c3e.js"
|
|
38
|
-
],
|
|
36
|
+
"async": [],
|
|
39
37
|
"sync": [
|
|
40
|
-
"__mf/js/async/960.
|
|
38
|
+
"__mf/js/async/960.021d7634.js"
|
|
41
39
|
]
|
|
42
40
|
},
|
|
43
41
|
"css": {
|
|
@@ -54,13 +52,10 @@
|
|
|
54
52
|
"requiredVersion": "^11.14.0",
|
|
55
53
|
"assets": {
|
|
56
54
|
"js": {
|
|
57
|
-
"async": [
|
|
58
|
-
"__mf/js/async/964.6df60c3e.js",
|
|
59
|
-
"__mf/js/async/960.208437e1.js"
|
|
60
|
-
],
|
|
55
|
+
"async": [],
|
|
61
56
|
"sync": [
|
|
62
|
-
"__mf/js/async/694.
|
|
63
|
-
"__mf/js/async/770.
|
|
57
|
+
"__mf/js/async/694.011b21e8.js",
|
|
58
|
+
"__mf/js/async/770.73dda090.js"
|
|
64
59
|
]
|
|
65
60
|
},
|
|
66
61
|
"css": {
|
|
@@ -77,12 +72,10 @@
|
|
|
77
72
|
"requiredVersion": "^3.10.0",
|
|
78
73
|
"assets": {
|
|
79
74
|
"js": {
|
|
80
|
-
"async": [
|
|
81
|
-
"__mf/js/async/964.6df60c3e.js"
|
|
82
|
-
],
|
|
75
|
+
"async": [],
|
|
83
76
|
"sync": [
|
|
84
|
-
"__mf/js/async/214.
|
|
85
|
-
"__mf/js/async/738.
|
|
77
|
+
"__mf/js/async/214.a7648318.js",
|
|
78
|
+
"__mf/js/async/738.5a36e399.js"
|
|
86
79
|
]
|
|
87
80
|
},
|
|
88
81
|
"css": {
|
|
@@ -94,21 +87,14 @@
|
|
|
94
87
|
{
|
|
95
88
|
"id": "PieChart:@perses-dev/components",
|
|
96
89
|
"name": "@perses-dev/components",
|
|
97
|
-
"version": "0.
|
|
90
|
+
"version": "0.52.0",
|
|
98
91
|
"singleton": true,
|
|
99
|
-
"requiredVersion": "^0.
|
|
92
|
+
"requiredVersion": "^0.52.0",
|
|
100
93
|
"assets": {
|
|
101
94
|
"js": {
|
|
102
|
-
"async": [
|
|
103
|
-
"__mf/js/async/964.6df60c3e.js",
|
|
104
|
-
"__mf/js/async/173.ee70b493.js",
|
|
105
|
-
"__mf/js/async/960.208437e1.js",
|
|
106
|
-
"__mf/js/async/770.93415255.js",
|
|
107
|
-
"__mf/js/async/75.905151a5.js",
|
|
108
|
-
"__mf/js/async/740.b86dfa00.js"
|
|
109
|
-
],
|
|
95
|
+
"async": [],
|
|
110
96
|
"sync": [
|
|
111
|
-
"__mf/js/async/
|
|
97
|
+
"__mf/js/async/288.4cad0403.js"
|
|
112
98
|
]
|
|
113
99
|
},
|
|
114
100
|
"css": {
|
|
@@ -120,36 +106,18 @@
|
|
|
120
106
|
{
|
|
121
107
|
"id": "PieChart:@perses-dev/plugin-system",
|
|
122
108
|
"name": "@perses-dev/plugin-system",
|
|
123
|
-
"version": "0.
|
|
109
|
+
"version": "0.52.0",
|
|
124
110
|
"singleton": true,
|
|
125
|
-
"requiredVersion": "^0.
|
|
111
|
+
"requiredVersion": "^0.52.0",
|
|
126
112
|
"assets": {
|
|
127
113
|
"js": {
|
|
128
|
-
"async": [
|
|
129
|
-
"__mf/js/async/964.6df60c3e.js",
|
|
130
|
-
"__mf/js/async/173.ee70b493.js",
|
|
131
|
-
"__mf/js/async/960.208437e1.js",
|
|
132
|
-
"__mf/js/async/770.93415255.js",
|
|
133
|
-
"__mf/js/async/238.5287310b.js",
|
|
134
|
-
"__mf/js/async/224.dbeed4db.js",
|
|
135
|
-
"__mf/js/async/75.905151a5.js",
|
|
136
|
-
"__mf/js/async/740.b86dfa00.js",
|
|
137
|
-
"__mf/js/async/470.be19e17e.js",
|
|
138
|
-
"__mf/js/async/105.7a85ee04.js",
|
|
139
|
-
"__mf/js/async/530.f071fc6b.js",
|
|
140
|
-
"__mf/js/async/331.067ac3da.js",
|
|
141
|
-
"__mf/js/async/738.4ac98841.js",
|
|
142
|
-
"__mf/js/async/503.28e7e4f1.js",
|
|
143
|
-
"__mf/js/async/981.3ecbf5ea.js"
|
|
144
|
-
],
|
|
114
|
+
"async": [],
|
|
145
115
|
"sync": [
|
|
146
|
-
"__mf/js/async/
|
|
116
|
+
"__mf/js/async/109.77dcc7d9.js"
|
|
147
117
|
]
|
|
148
118
|
},
|
|
149
119
|
"css": {
|
|
150
|
-
"async": [
|
|
151
|
-
"__mf/css/async/263.80005a4a.css"
|
|
152
|
-
],
|
|
120
|
+
"async": [],
|
|
153
121
|
"sync": []
|
|
154
122
|
}
|
|
155
123
|
}
|
|
@@ -164,7 +132,7 @@
|
|
|
164
132
|
"js": {
|
|
165
133
|
"async": [],
|
|
166
134
|
"sync": [
|
|
167
|
-
"__mf/js/async/75.
|
|
135
|
+
"__mf/js/async/75.a825d10b.js"
|
|
168
136
|
]
|
|
169
137
|
},
|
|
170
138
|
"css": {
|
|
@@ -183,7 +151,7 @@
|
|
|
183
151
|
"js": {
|
|
184
152
|
"async": [],
|
|
185
153
|
"sync": [
|
|
186
|
-
"__mf/js/async/
|
|
154
|
+
"__mf/js/async/409.9c48d616.js"
|
|
187
155
|
]
|
|
188
156
|
},
|
|
189
157
|
"css": {
|
|
@@ -202,7 +170,7 @@
|
|
|
202
170
|
"js": {
|
|
203
171
|
"async": [],
|
|
204
172
|
"sync": [
|
|
205
|
-
"__mf/js/async/981.
|
|
173
|
+
"__mf/js/async/981.e6f0d188.js"
|
|
206
174
|
]
|
|
207
175
|
},
|
|
208
176
|
"css": {
|
|
@@ -219,11 +187,9 @@
|
|
|
219
187
|
"requiredVersion": "18.2.0",
|
|
220
188
|
"assets": {
|
|
221
189
|
"js": {
|
|
222
|
-
"async": [
|
|
223
|
-
"__mf/js/async/964.6df60c3e.js"
|
|
224
|
-
],
|
|
190
|
+
"async": [],
|
|
225
191
|
"sync": [
|
|
226
|
-
"__mf/js/async/173.
|
|
192
|
+
"__mf/js/async/173.c694e6f7.js"
|
|
227
193
|
]
|
|
228
194
|
},
|
|
229
195
|
"css": {
|
|
@@ -242,7 +208,7 @@
|
|
|
242
208
|
"js": {
|
|
243
209
|
"async": [],
|
|
244
210
|
"sync": [
|
|
245
|
-
"__mf/js/async/964.
|
|
211
|
+
"__mf/js/async/964.7fdfdfd5.js"
|
|
246
212
|
]
|
|
247
213
|
},
|
|
248
214
|
"css": {
|
|
@@ -259,12 +225,9 @@
|
|
|
259
225
|
"requiredVersion": "^3.2.0",
|
|
260
226
|
"assets": {
|
|
261
227
|
"js": {
|
|
262
|
-
"async": [
|
|
263
|
-
"__mf/js/async/238.5287310b.js",
|
|
264
|
-
"__mf/js/async/75.905151a5.js"
|
|
265
|
-
],
|
|
228
|
+
"async": [],
|
|
266
229
|
"sync": [
|
|
267
|
-
"__mf/js/async/740.
|
|
230
|
+
"__mf/js/async/740.254a5697.js"
|
|
268
231
|
]
|
|
269
232
|
},
|
|
270
233
|
"css": {
|
|
@@ -282,31 +245,20 @@
|
|
|
282
245
|
"assets": {
|
|
283
246
|
"js": {
|
|
284
247
|
"sync": [
|
|
285
|
-
"__mf/js/async/470.
|
|
286
|
-
"__mf/js/async/
|
|
287
|
-
"__mf/js/async/
|
|
288
|
-
"__mf/js/async/707.
|
|
289
|
-
"__mf/js/async/__federation_expose_PieChart.
|
|
248
|
+
"__mf/js/async/470.1e913aa7.js",
|
|
249
|
+
"__mf/js/async/680.f1da299d.js",
|
|
250
|
+
"__mf/js/async/298.707087d2.js",
|
|
251
|
+
"__mf/js/async/707.c77cb775.js",
|
|
252
|
+
"__mf/js/async/__federation_expose_PieChart.3d887a98.js"
|
|
290
253
|
],
|
|
291
254
|
"async": [
|
|
292
|
-
"__mf/js/async/
|
|
293
|
-
"__mf/js/async/
|
|
294
|
-
"__mf/js/async/
|
|
295
|
-
"__mf/js/async/
|
|
296
|
-
"__mf/js/async/
|
|
297
|
-
"__mf/js/async/
|
|
298
|
-
"__mf/js/async/
|
|
299
|
-
"__mf/js/async/488.0fc5dcbb.js",
|
|
300
|
-
"__mf/js/async/238.5287310b.js",
|
|
301
|
-
"__mf/js/async/224.dbeed4db.js",
|
|
302
|
-
"__mf/js/async/105.7a85ee04.js",
|
|
303
|
-
"__mf/js/async/530.f071fc6b.js",
|
|
304
|
-
"__mf/js/async/738.4ac98841.js",
|
|
305
|
-
"__mf/js/async/173.ee70b493.js",
|
|
306
|
-
"__mf/js/async/75.905151a5.js",
|
|
307
|
-
"__mf/js/async/503.28e7e4f1.js",
|
|
308
|
-
"__mf/js/async/740.b86dfa00.js",
|
|
309
|
-
"__mf/js/async/981.3ecbf5ea.js"
|
|
255
|
+
"__mf/js/async/lib-router.5205dc27.js",
|
|
256
|
+
"__mf/js/async/292.67519c5b.js",
|
|
257
|
+
"__mf/js/async/289.c295f73f.js",
|
|
258
|
+
"__mf/js/async/488.a0bde6cf.js",
|
|
259
|
+
"__mf/js/async/238.3e689a99.js",
|
|
260
|
+
"__mf/js/async/224.43460380.js",
|
|
261
|
+
"__mf/js/async/708.77a1c1f6.js"
|
|
310
262
|
]
|
|
311
263
|
},
|
|
312
264
|
"css": {
|