【AgGridReact】Custom Edit Componentを作成する
こんにちは、フリーランスエンジニアの太田雅昭です。
AgGridのCustom Edit Component
AgGridでは、カスタムの編集コンポーネントを作成できます。ただもともと情報が少ない上に、バージョンアップで古い方法が使えなかったりするので、今回簡単にまとめてみます。
使用バージョンは、Ag Grid 33です。
なお以下の方法は、バージョンアップに伴って使えなくなっているようです。多分。
- useImperativeHandleによるgetValue
あとはクラスによる実装が紹介されていたりしますが、今時のReactのスタイルと離れているためこれも却下かと思います。
案外簡単に作れる
公式で紹介されているコードを、TypeScriptで書き換えてみました
function MyEdit ({ value, onValueChange }: CustomCellEditorProps) {
return (
<input
type="text"
value={value || ''}
onChange={({ target: { value }}) => onValueChange(value === '' ? null : value)}
/>
);
}
ChatGPTとどれだけ格闘したと思ってるんだ。。。シンプルですね。
実用的なサンプル
以下は実用的なサンプルです。といいつつシンプルです。
const columns: ColDef[] = [{
editable: true,
cellEditor: TestSelector,
cellEditorParams: {
values: ["orange", "apple", "banana"]
},
}];
function MyEditor(props: CustomCellEditorProps & { values: string[] }) {
const { value, values, onValueChange, stopEditing } = props;
return <Select
open={true} // 自動で開く
onClose={() => stopEditing()} // 自動で閉じる
value={value}
onChange={(e) => {
onValueChange(e.target.value);
stopEditing();
}}>
{values.map((s) => <MenuItem key={s} value={s}>{s}</MenuItem>)}
</Select>
}
ここまでいければ、あとはどうにでもなりそうですね。