Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(charts): Declarative chart component to render chart using plotly json schema #33348

Merged
merged 39 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
f194a8f
Create declarative chart component
AtishayMsft Nov 24, 2024
8902f85
Update data processing
AtishayMsft Nov 24, 2024
99e2c23
Add examples for test schema
AtishayMsft Nov 25, 2024
1c25e07
Fix vertical bar histogram schema
AtishayMsft Nov 25, 2024
5f68f16
Update donut chart plotly adapter (#33337)
krkshitij Nov 25, 2024
d336150
Line chart plotly adapter (#33334)
srmukher Nov 26, 2024
c515b12
Add heatmap chart plotly adapter (#33343)
krkshitij Nov 26, 2024
1cc9936
Add Sankey chart Plotly Adapter (#33345)
Anush2303 Nov 26, 2024
cfb35bf
Fix format
AtishayMsft Nov 26, 2024
9fb2512
Add change file
AtishayMsft Nov 26, 2024
d262be4
Update name
AtishayMsft Nov 26, 2024
3ccae08
Fix build
AtishayMsft Nov 26, 2024
80076f4
Add declarative chart to docsite
AtishayMsft Nov 27, 2024
6fa2476
Update tsconfig for examples
AtishayMsft Nov 27, 2024
3d6b38d
Applying styles to horizontal bar chart with axis using plotly data (…
srmukher Nov 27, 2024
54db5ea
Fix tslint
AtishayMsft Nov 27, 2024
bcd2da9
Add gauge chart plotly adapter and example (#33352)
krkshitij Nov 27, 2024
45bd286
Merge branch 'charting/declarativeCharts' of https://github.com/micro…
AtishayMsft Nov 27, 2024
40ae2ac
Change relative imports to absolute
AtishayMsft Nov 27, 2024
4aba25e
Rename schema files to test
AtishayMsft Nov 27, 2024
4f58b97
Allow deep imports
AtishayMsft Nov 27, 2024
4f4f60f
Update schema files
AtishayMsft Nov 27, 2024
71c1ed2
Update example path
AtishayMsft Nov 27, 2024
caaefd9
Adding color mappings and handling opacity
srmukher Nov 27, 2024
e4c8e02
Merge branches 'users/srmukher/plotlyColors' and 'charting/declarativ…
srmukher Nov 28, 2024
44fc687
Adding color changes to gauge chart
srmukher Nov 28, 2024
63292f6
Update schema interface
AtishayMsft Dec 1, 2024
bb5a688
Revert docsite changes
AtishayMsft Dec 1, 2024
06207c3
Merge branch 'master' of https://github.com/microsoft/fluentui
AtishayMsft Dec 1, 2024
8b65972
Merge branch 'master' into charting/declarativeCharts
AtishayMsft Dec 1, 2024
cf950bc
Resolve format issues
AtishayMsft Dec 1, 2024
b138449
Remove unused function
AtishayMsft Dec 1, 2024
ab9f8b0
Merge branch 'charting/declarativeCharts' of https://github.com/micro…
AtishayMsft Dec 1, 2024
f6974ce
Remove commented code
AtishayMsft Dec 1, 2024
6738baf
Color related changes for plotly schema (#33370)
srmukher Dec 2, 2024
8c21759
Fix build errors
AtishayMsft Dec 2, 2024
6374370
Update json format
AtishayMsft Dec 2, 2024
b18d086
Fix vertical chart series not present issue
AtishayMsft Dec 2, 2024
c7a7d7a
Merge branch 'master' into charting/declarativeCharts
AtishayMsft Dec 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions packages/charts/react-charting/etc/react-charting.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,14 @@ export const DataVizPalette: {
highSuccess: string;
AtishayMsft marked this conversation as resolved.
Show resolved Hide resolved
};

// @public (undocumented)
export const DeclarativeChart: React_2.FunctionComponent<DeclarativeChartProps>;

// @public (undocumented)
export interface DeclarativeChartProps extends React_2.RefAttributes<HTMLDivElement> {
chartSchema: any;
}

// @public
export const DonutChart: React_2.FunctionComponent<IDonutChartProps>;

Expand Down
1 change: 1 addition & 0 deletions packages/charts/react-charting/src/DeclarativeChart.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './components/DeclarativeChart/DeclarativeChart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/* eslint-disable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/no-explicit-any */
import * as React from 'react';
import { DonutChart } from '../DonutChart/index';
import { VerticalStackedBarChart } from '../VerticalStackedBarChart/index';
import {
transformPlotlyJsonToDonutProps,
transformPlotlyJsonToColumnProps,
transformPlotlyJsonToScatterChartProps,
transformPlotlyJsonToHorizontalBarWithAxisProps,
transformPlotlyJsonToHeatmapProps,
transformPlotlyJsonToSankeyProps,
} from './PlotlySchemaAdapter';
import { LineChart } from '../LineChart/index';
import { HorizontalBarChartWithAxis } from '../HorizontalBarChartWithAxis/index';
import { AreaChart } from '../AreaChart/index';
import { HeatMapChart } from '../HeatMapChart/index';

const isDate = (value: any): boolean => !isNaN(Date.parse(value));
const isNumber = (value: any): boolean => !isNaN(parseFloat(value)) && isFinite(value);
export const isDateArray = (array: any[]): boolean => Array.isArray(array) && array.every(isDate);
export const isNumberArray = (array: any[]): boolean => Array.isArray(array) && array.every(isNumber);
import { SankeyChart } from '../SankeyChart/SankeyChart';

export interface DeclarativeChartProps extends React.RefAttributes<HTMLDivElement> {
/**
* The schema representing the chart
*/
chartSchema: any;
}

export const DeclarativeChart: React.FunctionComponent<DeclarativeChartProps> = React.forwardRef<
HTMLDivElement,
DeclarativeChartProps
>((props, forwardedRef) => {
const xValues = props.chartSchema.data[0].x;
const isXDate = isDateArray(xValues);
const isXNumber = isNumberArray(xValues);

switch (props.chartSchema.data[0].type) {
case 'pie':
return <DonutChart {...transformPlotlyJsonToDonutProps(props.chartSchema)} />;
case 'bar':
const orientation = props.chartSchema.data[0].orientation;
if (orientation === 'h') {
return <HorizontalBarChartWithAxis {...transformPlotlyJsonToHorizontalBarWithAxisProps(props.chartSchema)} />;
} else {
return <VerticalStackedBarChart {...transformPlotlyJsonToColumnProps(props.chartSchema)} />;
}
case 'scatter':
const isAreaChart = props.chartSchema.data.some((series: any) => series.fill === 'tonexty');
if (isXDate || isXNumber) {
if (isAreaChart) {
return <AreaChart {...transformPlotlyJsonToScatterChartProps(props.chartSchema, true)} />;
}
return <LineChart {...transformPlotlyJsonToScatterChartProps(props.chartSchema, false)} />;
}
return <VerticalStackedBarChart {...transformPlotlyJsonToColumnProps(props.chartSchema)} />;
case 'heatmap':
return <HeatMapChart {...transformPlotlyJsonToHeatmapProps(props.chartSchema)} />;
case 'sankey':
return <SankeyChart {...transformPlotlyJsonToSankeyProps(props.chartSchema)} />;
default:
return <div>Unsupported Schema</div>;
}
});
DeclarativeChart.displayName = 'DeclarativeChart';
Loading
Loading