AG Studio is an embedded analytics component for building interactive dashboards. The minimum setup is a single data source and a blank canvas.
1. Install Copy Link
Install the ag-studio-react package from npm:
npm install ag-studio-react 2. Create Studio Copy Link
Studio works with arrays of plain objects, where each array becomes a data source.
Render the AgStudio component inside a sized parent (it automatically fills the available space) and set mode to "edit" so users can build and modify reports:
import { AgStudio } from 'ag-studio-react';
// Data to display in Studio (can also be loaded asynchronously)
const productData = [
{
productName: 'Printer',
category: 'Printing & Imaging',
brand: 'CleanSlate Office',
listPrice: 109.09,
unitCost: 92.26,
},
{
productName: 'Notebook',
category: 'Paper & Notebooks',
brand: 'PaperLine',
listPrice: 24.70,
unitCost: 14.19,
},
{
productName: 'Highlighters',
category: 'Writing Instruments',
brand: 'PaperLine',
listPrice: 10.34,
unitCost: 5.03,
},
// ... more rows
];
const App = () => {
const data = {
sources: [{
id: 'products',
data: productData,
}],
};
return (
<div style={{ height: '100%', width: '100%' }}>
<AgStudio data={data} mode="edit" />
</div>
);
}; 3. Run your app Copy Link
The result is an empty AG Studio component that users can begin building reports with:
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgStudio, AgStudioRef } from "ag-studio-react";
import {
AgDataEngine,
AgDataSourcesDefinition,
AgStudioApi,
AgStudioMode,
AgStudioProperties,
enableStudioDevValidations,
} from "ag-studio";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableStudioDevValidations();
}
const productData = [
{
productName: "Printer",
category: "Printing & Imaging",
brand: "CleanSlate Office",
listPrice: 109.09,
unitCost: 92.26,
},
{
productName: "Notebook",
category: "Paper & Notebooks",
brand: "PaperLine",
listPrice: 24.7,
unitCost: 14.19,
},
{
productName: "Highlighters",
category: "Writing Instruments",
brand: "PaperLine",
listPrice: 10.34,
unitCost: 5.03,
},
// ... more rows
];
const StudioExample = () => {
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const studioStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [data, setData] = useState<AgDataSource>({
sources: [
{
id: "products",
data: productData,
},
],
});
return (
<div style={containerStyle}>
<div style={{ display: "flex", flexDirection: "column", height: "100%" }}>
<AgStudio
style={studioStyle}
className="my-studio-container"
data={data}
mode={"edit"}
/>
</div>
</div>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<StudioExample />
</StrictMode>,
);