Open2

MUI X DataGridのカスタマイズ

itoito

operatorのカスタマイズ

前提の話

DataGridはデフォルトでフィルタリング用のoperatorを複数提供してくれている。

https://mui.com/x/react-data-grid/filtering/

columnがstring値なら文字列用の、number値なら数値用のoperatorがそれぞれ存在する。
例えばstring値ならcontainsequalsstartsWithendsWithisEmptyisNotEmptyisAnyOfが提供されていて、文字列の完全一致や部分一致、空かどうかなど様々な条件でフィルタリングできるようになっている。

しかしアプリケーションの仕様によっては、必ずしもすべてのoperatorが必要なわけではない。
例えばcontainsequals以外が不要だとすれば、UI上の選択肢からも排除すべきである。

本題

要するに、デフォルトで提供されるフィルタリング用のoperatorから必要なoperatorのみを使いたい。

MUI XではgetGridStringOperatorsgetGridNumericOperators という形でデフォルトのoperator情報を提供してくれているので、この中から必要なoperatorのみを使えばよさそう。

https://mui.com/x/react-data-grid/filtering/customization/#customize-the-operators

以下、string値の例

import { getGridStringOperators } from '@mui/x-data-grid';

type DataGridOperator =
  | 'contains'
  | 'equals'
  | 'startsWith'
  | 'endsWith'
  | 'isEmpty'
  | 'isNotEmpty'
  | 'isAnyOf';

export const getDataGridStringOperators = (values: DataGridOperator[]) => {
  return getGridStringOperators().filter((operator) =>
    values.includes(operator.value as DataGridOperator)
  );
};
getDataGridStringOperators(['contains', 'equals'])
itoito

各種メニューのi18n対応

カラムヘッダーと0件表示

<MuiDataGrid
  localeText={{
    noRowsLabel: '該当するデータが存在しません',
    columnMenuLabel: 'メニュー',
    columnHeaderFiltersTooltipActive: (count) => `${count}件の有効な絞り込み`,
    columnHeaderSortIconLabel: '並び替え',
  }}
/>

カラムヘッダー内のアイコンボタンをhoverしたときに表示されるTooltip

カラムメニュー

<MuiDataGrid
  localeText={{
    columnMenuManageColumns: 'カラム管理',
    columnMenuFilter: '絞り込み',
    columnMenuHideColumn: 'カラムを非表示',
    columnMenuUnsort: '並び替えを解除',
    columnMenuSortAsc: '昇順に並び替え',
    columnMenuSortDesc: '降順に並び替え',
  }}
/>

カラムヘッダー内のメニューアイコンをクリックしたときに表示されるメニュー

カラムパネル

<MuiDataGrid
  localeText={{
    columnsPanelTextFieldLabel: 'カラムを検索',
    columnsPanelTextFieldPlaceholder: 'カラム名',
    columnsPanelShowAllButton: '全て表示',
    columnsPanelHideAllButton: '全て非表示',
  }}
/>

カラムメニュー>カラム管理をクリックしたときに表示されるメニュー

フィルターパネル

<MuiDataGrid
  localeText={{
    filterPanelDeleteIconLabel: '削除',
    filterPanelOperator: '演算子',
    filterPanelColumns: 'カラム',
    filterPanelInputLabel: '値',
    filterPanelInputPlaceholder: '絞り込む値',
    filterOperatorContains: '部分一致',
    filterOperatorEquals: '完全一致',
  }}
/>

カラムメニュー>絞り込みをクリックしたときに表示されるメニュー