syncfusion-react-pivot-table — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-react-pivot-table (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The Syncfusion React PivotView component enables powerful data analysis and reporting capabilities. It allows users to organize, analyze, and summarize multidimensional data through interactive pivot tables with features like grouping, filtering, aggregation, drill-down analysis, and export functionality.
⚠️ Important: Always verify API class names, properties, and method signatures by consulting the reference files in this skill (references/*.md). These are maintained with verified, working examples. Do not assume API details from other sources.CRITICAL SECURITY NOTICE: When implementing pivot tables, always use trusted data sources. Never fetch or bind data from untrusted or user-provided URLs without proper validation and sanitization.
✅ DO: Use controlled, authenticated backend APIs ✅ DO: Implement server-side data validation ✅ DO: Use environment variables for API endpoints ✅ DO: Whitelist allowed data sources
❌ DON'T: Accept user-provided URLs ❌ DON'T: Bind to public, untrusted endpoints ❌ DON'T: Skip data validation and sanitization ❌ DON'T: Use HTTP for sensitive data
Use this skill when you need to:
📄 Read: references/getting-started.md
📄 Read (optional): references/nextjs-integration.md
📄 Read: references/data-binding.md
📄 Read: references/connecting-to-databases.md
📄 Read: references/connecting-to-data-source.md
📄 Read: references/pivot-chart.md
📄 Read: references/classic-layout.md
📄 Read: references/drill.md
📄 Read: references/field-list.md
📄 Read: references/grouping-bar.md
📄 Read: references/data-shaping.md
📄 Read: references/aggregation.md
📄 Read: references/calculated-field.md
📄 Read: references/grouping.md
📄 Read: references/data-formatting.md
📄 Read: references/grid-customization.md
📄 Read: references/row-and-column.md
📄 Read: references/filtering-and-sorting.md
📄 Read separately if needed:
📄 Read: references/show-hide-totals.md
📄 Read: references/state-persistence.md
📄 Read: references/toolbar.md
📄 Read: references/tooltip.md
📄 Read: references/hyperlink.md
📄 Read: references/drill.md
📄 Read separately if needed:
📄 Read: references/export.md
📄 Read separately if needed:
📄 Read: references/print.md
📄 Read: references/defer-update.md
📄 Read: references/performance.md
📄 Read separately if needed:
/* App.css */
@import '../node_modules/@syncfusion/ej2-base/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-grids/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-lists/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-splitbuttons/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-calendars/styles/tailwind3.css';
@import '../node_modules/@syncfusion/ej2-react-pivotview/styles/tailwind3.css';import { PivotViewComponent, Inject, GroupingBar, FieldList, IDataSet } from '@syncfusion/ej2-react-pivotview';
import './App.css';
const pivotData: IDataSet[] = [
{ Country: 'USA', Product: 'Laptops', Sales: 5000, Year: 2020 },
{ Country: 'USA', Product: 'Mobiles', Sales: 3000, Year: 2020 },
{ Country: 'Canada', Product: 'Laptops', Sales: 2500, Year: 2020 },
{ Country: 'Canada', Product: 'Mobiles', Sales: 1500, Year: 2020 }
];
function cellTemplate(props: any): JSX.Element {
return (
<span style={{ fontWeight: 'bold', color: '#333' }}>
{props.cellInfo?.value}
</span>
);
}
function App() {
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: pivotData as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [{ name: 'Sales', caption: 'Total Sales' }],
showGrandTotals: true
};
return (
<PivotViewComponent
id="pivotview"
dataSourceSettings={dataSourceSettings}
cellTemplate={cellTemplate}
showGroupingBar={true}
showFieldList={true}
height={350}
>
<Inject services={[GroupingBar, FieldList]} />
</PivotViewComponent>
);
}
export default App;const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }, { name: 'Region' }],
columns: [{ name: 'Year' }, { name: 'Quarter' }],
values: [{ name: 'Sales', caption: 'Total Sales' }]
};const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [
{ name: 'Sales', type: 'Sum' },
{ name: 'Quantity', type: 'Avg' }
],
filters: [{ name: 'Year' }]
};import { PivotViewComponent, Inject, CalculatedField, FieldList } from '@syncfusion/ej2-react-pivotview';
import { DataSourceSettingsModel } from '@syncfusion/ej2-pivotview/src/model/datasourcesettings-model';
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [
{ name: 'Sold', caption: 'Units Sold' },
{ name: 'Amount', caption: 'Amount' },
{ name: 'Total', caption: 'Total', type: 'CalculatedField' } // ← Must add to values
],
calculatedFieldSettings: [
{
name: 'Total',
formula: '"Sum(Amount)"+"Sum(Sold)"' // ← Formula with aggregation functions
}
]
};function cellTemplate(props: any): JSX.Element {
const value = props.cellInfo?.value;
const isTotal = props.cellInfo?.isGrandTotal || props.cellInfo?.isDeserialized;
const getStyle = () => {
const numValue = parseFloat(value);
if (numValue > 4000) return { color: '#4CAF50', fontWeight: 'bold' }; // Green for high values
if (numValue < 1000) return { color: '#f44336', fontWeight: 'bold' }; // Red for low values
return { color: '#333' };
};
return (
<span style={getStyle()}>
{isTotal ? <strong>{value}</strong> : value}
</span>
);
}
const dataSourceSettings: DataSourceSettingsModel = {
dataSource: data as IDataSet[],
rows: [{ name: 'Country' }],
columns: [{ name: 'Product' }],
values: [{ name: 'Sales' }]
};| Property | Type | Description |
|---|---|---|
dataSourceSettings | object | Configures data source, fields, rows, columns, values, filters, aggregations, calculated fields, and formatting |
cellTemplate | function | Custom cell rendering function that returns JSX.Element for value cells |
gridSettings | GridSettings | Configures row height, column width, text wrapping, resizing, reordering |
height | string/number | Component height in pixels or percentage |
width | string/number | Component width in pixels or percentage |
showGroupingBar | boolean | Shows/hides the grouping bar for drag-and-drop field management |
showFieldList | boolean | Shows/hides the field list panel (built-in or side panel) |
allowCalculatedField | boolean | Enables calculated field creation and editing via Field List dialog |
allowExcelExport | boolean | Enables Excel export functionality |
allowPdfExport | boolean | Enables PDF export functionality |
allowMemberFilter | boolean | Enables member filtering in Field List (select/deselect members) |
allowLabelFilter | boolean | Enables label filtering (filter by text/label values) |
allowValueFilter | boolean | Enables value filtering (filter by aggregated values) |
allowDrillThrough | boolean | Enables drill-through functionality to view pivot data |
allowConditionalFormatting | boolean | Enables conditional formatting for cells based on values |
allowDeferLayoutUpdate | boolean | Batches field operations in Field List, apply only on "Apply" click |
enableVirtualization | boolean | Enables virtual scrolling for large datasets |
enablePaging | boolean | Enables paging for row/column distribution |
showToolbar | boolean | Shows/hides the toolbar with preset actions |
pageSettings | PageSettings | Configures row and column page sizes for paging |
rowHeight: Specifies row height in pixelscolumnWidth: Sets default column widthallowResizing: Enables column/row resizingallowReordering: Allows drag-and-drop field reorderingallowTextWrap: Enables text wrapping in cellscolumnRender: Event handler for column customization (e.g., text alignment)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.