The grid comes with some cell editors provided out of the box. These cell editors are listed here.
- Text Cell Editor
- Large Text Cell Editor
- Select Cell Editor
- Rich Select Cell Editor (e)
- Formula Cell Editor (e)
There are also some additional cell editors that are generally used with Cell Data Types:
Example - Provided Cell Editors Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import {
ClientSideRowModelModule,
ColDef,
ColGroupDef,
GridApi,
GridOptions,
ILargeTextEditorParams,
IRichCellEditorParams,
ISelectCellEditorParams,
ITextCellEditorParams,
LargeTextEditorModule,
ModuleRegistry,
SelectEditorModule,
TextEditorModule,
enableDevValidations,
} from "ag-grid-community";
import { RichSelectModule } from "ag-grid-enterprise";
import { colors } from "./colors";
import ColourCellRenderer from "./colourCellRenderer.tsx";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
RichSelectModule,
SelectEditorModule,
TextEditorModule,
LargeTextEditorModule,
];
function getRandomNumber(min: number, max: number) {
// min and max included
return Math.floor(window.agRandom() * (max - min + 1) + min);
}
const data = Array.from(Array(20).keys()).map(() => {
const color = colors[getRandomNumber(0, colors.length - 1)];
return {
color1: color,
color2: color,
color3: color,
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
};
});
const GridExample = () => {
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>(data);
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
headerName: "Text Editor",
field: "color1",
cellRenderer: ColourCellRenderer,
cellEditor: "agTextCellEditor",
cellEditorParams: {
maxLength: 20,
} as ITextCellEditorParams,
},
{
headerName: "Select Editor",
field: "color2",
cellRenderer: ColourCellRenderer,
cellEditor: "agSelectCellEditor",
cellEditorParams: {
values: colors,
} as ISelectCellEditorParams,
},
{
headerName: "Rich Select Editor",
field: "color3",
cellRenderer: ColourCellRenderer,
cellEditor: "agRichSelectCellEditor",
cellEditorParams: {
values: colors,
cellRenderer: ColourCellRenderer,
filterList: true,
searchType: "match",
allowTyping: true,
valueListMaxHeight: 220,
} as IRichCellEditorParams,
},
{
headerName: "Large Text Editor",
field: "description",
cellEditorPopup: true,
cellEditor: "agLargeTextCellEditor",
cellEditorParams: {
maxLength: 250,
rows: 10,
cols: 50,
} as ILargeTextEditorParams,
flex: 2,
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
editable: true,
};
}, []);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div style={gridStyle}>
<AgGridReact
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
/>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);
Example - Cell Data Types Cell Editors Copy Link
"use client";
import React, {
useCallback,
useMemo,
useRef,
useState,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact, AgGridProvider } from "ag-grid-react";
import {
CheckboxEditorModule,
ClientSideRowModelModule,
ColDef,
ColGroupDef,
DateEditorModule,
GridApi,
GridOptions,
INumberCellEditorParams,
ModuleRegistry,
NumberEditorModule,
ValueFormatterParams,
enableDevValidations,
} from "ag-grid-community";
if (process.env.NODE_ENV !== "production") {
// Enable extended validations only for development
enableDevValidations();
}
const modules = [
ClientSideRowModelModule,
NumberEditorModule,
DateEditorModule,
CheckboxEditorModule,
];
const data = Array.from(Array(20).keys()).map((val: any, index: number) => ({
number: index,
date: new Date(2023, 5, index + 1),
dateString: `2023-06-${index < 9 ? "0" + (index + 1) : index + 1}`,
boolean: !!(index % 2),
}));
const GridExample = () => {
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<any[]>(data);
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
headerName: "Number Editor",
field: "number",
cellEditor: "agNumberCellEditor",
cellEditorParams: {
precision: 0,
} as INumberCellEditorParams,
},
{
headerName: "Date Editor",
field: "date",
valueFormatter: (params: ValueFormatterParams<any, Date>) => {
if (!params.value) {
return "";
}
const month = params.value.getMonth() + 1;
const day = params.value.getDate();
return `${params.value.getFullYear()}-${month < 10 ? "0" + month : month}-${day < 10 ? "0" + day : day}`;
},
cellEditor: "agDateCellEditor",
},
{
headerName: "Date as String Editor",
field: "dateString",
cellEditor: "agDateStringCellEditor",
},
{
headerName: "Checkbox Cell Editor",
field: "boolean",
cellEditor: "agCheckboxCellEditor",
},
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
flex: 1,
editable: true,
};
}, []);
return (
<AgGridProvider modules={modules}>
<div style={containerStyle}>
<div style={gridStyle}>
<AgGridReact
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
/>
</div>
</div>
</AgGridProvider>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>,
);