This section provides an overview of the chart types available in Integrated Charts.
Column / Bar Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "recurring", "individual"],
},
chartType: "groupedColumn",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("groupedColumn")}>
Grouped Column
</button>
<button onClick={() => updateChart("stackedColumn")}>
Stacked Column
</button>
<button onClick={() => updateChart("normalizedColumn")}>
Normalized Column
</button>
<button onClick={() => updateChart("groupedBar")}>
Grouped Bar
</button>
<button onClick={() => updateChart("stackedBar")}>
Stacked Bar
</button>
<button onClick={() => updateChart("normalizedBar")}>
Normalized Bar
</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Pie / Donut Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const chartConfig: Record<
"pie" | "donut",
{
chartColumns: string[];
}
> = {
pie: {
chartColumns: ["period", "individual"],
},
donut: {
chartColumns: ["period", "recurring", "individual"],
},
};
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback(
(params: FirstDataRenderedEvent) => {
const chartType = "pie";
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
chartType,
cellRange: {
rowStartIndex: 0,
rowEndIndex: 3,
columns: chartConfig[chartType].chartColumns,
},
})!;
},
[chartConfig],
);
const updateChart = useCallback(
(chartType: "pie" | "donut") => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType,
cellRange: {
rowStartIndex: 0,
rowEndIndex: 3,
columns: chartConfig[chartType].chartColumns,
},
});
},
[chartRef, chartConfig],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("pie")}>Pie</button>
<button onClick={() => updateChart("donut")}>Donut</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Line / Area Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "recurring", "individual"],
},
chartType: "line",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("line")}>Line</button>
<button onClick={() => updateChart("stackedLine")}>
Stacked Line
</button>
<button onClick={() => updateChart("normalizedLine")}>
Normalized Line
</button>
<button onClick={() => updateChart("area")}>Grouped Area</button>
<button onClick={() => updateChart("stackedArea")}>
Stacked Area
</button>
<button onClick={() => updateChart("normalizedArea")}>
Normalized Area
</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Scatter / Bubble Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{ field: "division", width: 150, chartDataType: "category" },
{ field: "resource", width: 150, chartDataType: "category" },
{ field: "revenue", chartDataType: "series" },
{ field: "expenses", chartDataType: "series" },
{ field: "headcount", chartDataType: "series" },
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["resource", "revenue", "expenses", "headcount"],
},
chartType: "scatter",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("scatter")}>Scatter</button>
<button onClick={() => updateChart("bubble")}>Bubble</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Polar Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{ field: "division", chartDataType: "category", width: 150 },
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["division", "recurring", "individual"],
},
chartType: "radarLine",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("radarLine")}>Radar Line</button>
<button onClick={() => updateChart("radarArea")}>Radar Area</button>
<button onClick={() => updateChart("nightingale")}>
Nightingale
</button>
<button onClick={() => updateChart("radialColumn")}>
Radial Column
</button>
<button onClick={() => updateChart("radialBar")}>Radial Bar</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Statistical Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{ field: "client", chartDataType: "category", headerName: "Client name" },
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "client", "recurring", "individual"],
},
chartType: "boxPlot",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("boxPlot")}>Box Plot</button>
<button onClick={() => updateChart("histogram")}>Histogram</button>
<button onClick={() => updateChart("rangeBar")}>Range Bar</button>
<button onClick={() => updateChart("rangeArea")}>Range Area</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Hierarchical Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{ field: "division", width: 150, chartDataType: "category" },
{ field: "resource", width: 150, chartDataType: "category" },
{ field: "revenue", chartDataType: "series" },
{ field: "expenses", chartDataType: "series" },
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["division", "resource", "revenue", "expenses"],
},
chartType: "treemap",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("treemap")}>Treemap</button>
<button onClick={() => updateChart("sunburst")}>Sunburst</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Specialized Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const heatmapColIds: string[] = [
"year",
"jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jul",
"aug",
"sep",
"oct",
"nov",
"dec",
];
const heatmapColDefs: ColDef[] = [
{ field: "year", width: 150, chartDataType: "category" },
{ field: "jan" },
{ field: "feb" },
{ field: "mar" },
{ field: "apr" },
{ field: "may" },
{ field: "jun" },
{ field: "jul" },
{ field: "aug" },
{ field: "sep" },
{ field: "oct" },
{ field: "nov" },
{ field: "dec" },
];
const waterfallColIds: string[] = ["financials", "amount"];
const waterfallColDefs: ColDef[] = [
{ field: "financials", width: 150, chartDataType: "category" },
{ field: "amount", chartDataType: "series" },
];
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>(heatmapColDefs);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData("heatmap").then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback(
(params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
chartType: "heatmap",
cellRange: {
columns: heatmapColIds,
},
})!;
},
[heatmapColIds],
);
const updateChart = useCallback(
(chartType: "heatmap" | "waterfall") => {
getData(chartType).then((rowData) => {
gridRef.current!.api.updateGridOptions({
columnDefs:
chartType === "heatmap" ? heatmapColDefs : waterfallColDefs,
rowData,
});
setTimeout(() => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: chartRef.chartId,
chartType,
cellRange: {
columns:
chartType === "heatmap" ? heatmapColIds : waterfallColIds,
},
});
});
});
},
[
getData,
heatmapColDefs,
waterfallColDefs,
chartRef,
heatmapColIds,
waterfallColIds,
],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("heatmap")}>Heatmap</button>
<button onClick={() => updateChart("waterfall")}>Waterfall</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Funnel Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "group",
chartDataType: "category",
headerName: "Group",
width: 150,
},
{ field: "count", chartDataType: "series", headerName: "Count" },
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["group", "count"],
},
chartType: "funnel",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("funnel")}>Funnel</button>
<button onClick={() => updateChart("coneFunnel")}>
Cone Funnel
</button>
<button onClick={() => updateChart("pyramid")}>Pyramid</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details:
Combination Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
useEffect,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import "./style.css";
import { AgChartsEnterpriseModule } from "ag-charts-enterprise";
import {
CellSelectionOptions,
ChartRef,
ChartToolPanelsDef,
ChartType,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
FirstDataRenderedEvent,
GridApi,
GridOptions,
GridReadyEvent,
ModuleRegistry,
enableDevValidations,
} from "ag-grid-community";
import {
ColumnMenuModule,
ContextMenuModule,
IntegratedChartsModule,
RowGroupingModule,
} from "ag-grid-enterprise";
import { getData } from "./data";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
IntegratedChartsModule.with(AgChartsEnterpriseModule),
ColumnMenuModule,
ContextMenuModule,
RowGroupingModule,
];
let chartRef: ChartRef;
const GridExample = () => {
const gridRef = useRef<AgGridReact>(null);
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "period",
chartDataType: "category",
headerName: "Financial Period",
width: 150,
},
{
field: "recurring",
chartDataType: "series",
headerName: "Recurring revenue",
},
{
field: "individual",
chartDataType: "series",
headerName: "Individual sales",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
minWidth: 100,
};
}, []);
const popupParent = useMemo<HTMLElement | null>(() => {
return document.body;
}, []);
const chartToolPanelsDef = useMemo<ChartToolPanelsDef>(() => {
return {
defaultToolPanel: "settings",
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
getData().then((rowData) => setRowData(rowData));
}, []);
const onFirstDataRendered = useCallback((params: FirstDataRenderedEvent) => {
chartRef = params.api.createRangeChart({
chartContainer: document.querySelector("#myChart") as any,
cellRange: {
columns: ["period", "recurring", "individual"],
},
chartType: "columnLineCombo",
})!;
}, []);
const updateChart = useCallback(
(chartType: ChartType) => {
gridRef.current!.api.updateChart({
type: "rangeChartUpdate",
chartId: `${chartRef.chartId}`,
chartType: chartType,
});
},
[chartRef],
);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div className="wrapper">
<div className="button-container">
<button onClick={() => updateChart("columnLineCombo")}>
Column Line Combo
</button>
<button onClick={() => updateChart("areaColumnCombo")}>
Area Column Combo
</button>
</div>
<div style={gridStyle}>
<AgGridReact
ref={gridRef}
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
popupParent={popupParent}
cellSelection={true}
enableCharts={true}
chartToolPanelsDef={chartToolPanelsDef}
onGridReady={onGridReady}
onFirstDataRendered={onFirstDataRendered}
/>
</div>
<div id="myChart"></div>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
More Details: