diff --git a/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.js b/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.js index f2dfefdc34c61..74746adaa6f96 100644 --- a/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.js +++ b/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.js @@ -1,74 +1,90 @@ import * as React from 'react'; import Box from '@mui/material/Box'; -import { DataGrid, GridToolbar } from '@mui/x-data-grid'; -import { randomTraderName, randomEmail } from '@mui/x-data-grid-generator'; -import FormControlLabel from '@mui/material/FormControlLabel'; import Switch from '@mui/material/Switch'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import { DataGrid, GridToolbar } from '@mui/x-data-grid'; +import { useMovieData } from '@mui/x-data-grid-generator'; -const columns = [ - { field: 'id', headerName: 'ID', width: 80 }, - { field: 'name', headerName: 'Name', width: 150 }, - { field: 'email', headerName: 'Email', width: 150 }, - { field: 'age', headerName: 'Age', type: 'number' }, -]; - -const rows = [ - { id: 1, name: randomTraderName(), email: randomEmail(), age: 25 }, - { id: 2, name: randomTraderName(), email: randomEmail(), age: 36 }, - { id: 3, name: randomTraderName(), email: randomEmail(), age: 19 }, - { id: 4, name: randomTraderName(), email: randomEmail(), age: 28 }, - { id: 5, name: randomTraderName(), email: randomEmail(), age: 23 }, - { id: 6, name: randomTraderName(), email: randomEmail(), age: 27 }, - { id: 7, name: randomTraderName(), email: randomEmail(), age: 18 }, - { id: 8, name: randomTraderName(), email: randomEmail(), age: 31 }, - { id: 9, name: randomTraderName(), email: randomEmail(), age: 24 }, - { id: 10, name: randomTraderName(), email: randomEmail(), age: 35 }, -]; +const VISIBLE_FIELDS = ['title', 'company', 'director', 'year', 'cinematicUniverse']; export default function QuickFilteringExcludeHiddenColumns() { + const data = useMovieData(); + + const columns = React.useMemo( + () => data.columns.filter((column) => VISIBLE_FIELDS.includes(column.field)), + [data.columns], + ); + const [filterModel, setFilterModel] = React.useState({ items: [], quickFilterExcludeHiddenColumns: true, - quickFilterValues: ['1'], + quickFilterValues: ['War'], }); - const [columnVisibilityModel, setColumnVisibilityModel] = React.useState({}); + const [columnVisibilityModel, setColumnVisibilityModel] = React.useState({ + company: false, + }); + + const handleFilterModelChange = React.useCallback( + (newModel) => setFilterModel(newModel), + [], + ); + + const handleColumnVisibilityChange = React.useCallback( + (newModel) => setColumnVisibilityModel(newModel), + [], + ); + + const toggleYearColumn = React.useCallback( + (event) => setColumnVisibilityModel(() => ({ company: event.target.checked })), + [], + ); + + const toggleExcludeHiddenColumns = React.useCallback( + (event) => + setFilterModel((model) => ({ + ...model, + quickFilterExcludeHiddenColumns: event.target.checked, + })), + [], + ); return ( - setColumnVisibilityModel(() => ({ id: event.target.checked })) - } + checked={columnVisibilityModel.year} + onChange={toggleYearColumn} control={} - label="Show ID column" + label="Show company column" /> - setFilterModel((model) => ({ - ...model, - quickFilterExcludeHiddenColumns: event.target.checked, - })) - } + onChange={toggleExcludeHiddenColumns} control={} label="Exclude hidden columns" /> setFilterModel(newModel)} - slotProps={{ toolbar: { showQuickFilter: true } }} + onFilterModelChange={handleFilterModelChange} columnVisibilityModel={columnVisibilityModel} - onColumnVisibilityModelChange={(newModel) => - setColumnVisibilityModel(newModel) - } + onColumnVisibilityModelChange={handleColumnVisibilityChange} /> diff --git a/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.tsx b/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.tsx index 46597a6ecba94..07ae5379b7eff 100644 --- a/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.tsx +++ b/docs/data/data-grid/filtering/QuickFilteringExcludeHiddenColumns.tsx @@ -1,82 +1,95 @@ import * as React from 'react'; import Box from '@mui/material/Box'; +import Switch from '@mui/material/Switch'; +import FormControlLabel from '@mui/material/FormControlLabel'; import { DataGrid, - GridToolbar, - GridRowsProp, - GridColDef, - GridFilterModel, GridColumnVisibilityModel, + GridFilterModel, + GridToolbar, } from '@mui/x-data-grid'; -import { randomTraderName, randomEmail } from '@mui/x-data-grid-generator'; -import FormControlLabel from '@mui/material/FormControlLabel'; -import Switch from '@mui/material/Switch'; +import { useMovieData } from '@mui/x-data-grid-generator'; -const columns: GridColDef[] = [ - { field: 'id', headerName: 'ID', width: 80 }, - { field: 'name', headerName: 'Name', width: 150 }, - { field: 'email', headerName: 'Email', width: 150 }, - { field: 'age', headerName: 'Age', type: 'number' }, -]; - -const rows: GridRowsProp = [ - { id: 1, name: randomTraderName(), email: randomEmail(), age: 25 }, - { id: 2, name: randomTraderName(), email: randomEmail(), age: 36 }, - { id: 3, name: randomTraderName(), email: randomEmail(), age: 19 }, - { id: 4, name: randomTraderName(), email: randomEmail(), age: 28 }, - { id: 5, name: randomTraderName(), email: randomEmail(), age: 23 }, - { id: 6, name: randomTraderName(), email: randomEmail(), age: 27 }, - { id: 7, name: randomTraderName(), email: randomEmail(), age: 18 }, - { id: 8, name: randomTraderName(), email: randomEmail(), age: 31 }, - { id: 9, name: randomTraderName(), email: randomEmail(), age: 24 }, - { id: 10, name: randomTraderName(), email: randomEmail(), age: 35 }, -]; +const VISIBLE_FIELDS = ['title', 'company', 'director', 'year', 'cinematicUniverse']; export default function QuickFilteringExcludeHiddenColumns() { + const data = useMovieData(); + + const columns = React.useMemo( + () => data.columns.filter((column) => VISIBLE_FIELDS.includes(column.field)), + [data.columns], + ); + const [filterModel, setFilterModel] = React.useState({ items: [], quickFilterExcludeHiddenColumns: true, - quickFilterValues: ['1'], + quickFilterValues: ['War'], }); const [columnVisibilityModel, setColumnVisibilityModel] = - React.useState({}); + React.useState({ company: false }); + + const handleFilterModelChange = React.useCallback( + (newModel: GridFilterModel) => setFilterModel(newModel), + [], + ); + + const handleColumnVisibilityChange = React.useCallback( + (newModel: GridColumnVisibilityModel) => setColumnVisibilityModel(newModel), + [], + ); + + const toggleYearColumn = React.useCallback( + (event: React.SyntheticEvent) => + setColumnVisibilityModel(() => ({ company: (event.target as any).checked })), + [], + ); + + const toggleExcludeHiddenColumns = React.useCallback( + (event: React.SyntheticEvent) => + setFilterModel((model) => ({ + ...model, + quickFilterExcludeHiddenColumns: (event.target as any).checked, + })), + [], + ); return ( - setColumnVisibilityModel(() => ({ id: (event.target as any).checked })) - } + checked={columnVisibilityModel.year} + onChange={toggleYearColumn} control={} - label="Show ID column" + label="Show company column" /> - setFilterModel((model) => ({ - ...model, - quickFilterExcludeHiddenColumns: (event.target as any).checked, - })) - } + onChange={toggleExcludeHiddenColumns} control={} label="Exclude hidden columns" /> setFilterModel(newModel)} - slotProps={{ toolbar: { showQuickFilter: true } }} + onFilterModelChange={handleFilterModelChange} columnVisibilityModel={columnVisibilityModel} - onColumnVisibilityModelChange={(newModel) => - setColumnVisibilityModel(newModel) - } + onColumnVisibilityModelChange={handleColumnVisibilityChange} /> diff --git a/docs/data/data-grid/filtering/QuickFilteringGrid.js b/docs/data/data-grid/filtering/QuickFilteringGrid.js index c55663c35e259..219d0c42f4cb5 100644 --- a/docs/data/data-grid/filtering/QuickFilteringGrid.js +++ b/docs/data/data-grid/filtering/QuickFilteringGrid.js @@ -1,16 +1,12 @@ import * as React from 'react'; import Box from '@mui/material/Box'; import { DataGrid, GridToolbar } from '@mui/x-data-grid'; -import { useDemoData } from '@mui/x-data-grid-generator'; +import { useMovieData } from '@mui/x-data-grid-generator'; -const VISIBLE_FIELDS = ['name', 'rating', 'country', 'dateCreated', 'isAdmin']; +const VISIBLE_FIELDS = ['title', 'company', 'director', 'year', 'cinematicUniverse']; export default function QuickFilteringGrid() { - const { data } = useDemoData({ - dataSet: 'Employee', - visibleFields: VISIBLE_FIELDS, - rowLength: 100, - }); + const data = useMovieData(); // Otherwise filter will be applied on fields such as the hidden column id const columns = React.useMemo( diff --git a/docs/data/data-grid/filtering/QuickFilteringGrid.tsx b/docs/data/data-grid/filtering/QuickFilteringGrid.tsx index c55663c35e259..219d0c42f4cb5 100644 --- a/docs/data/data-grid/filtering/QuickFilteringGrid.tsx +++ b/docs/data/data-grid/filtering/QuickFilteringGrid.tsx @@ -1,16 +1,12 @@ import * as React from 'react'; import Box from '@mui/material/Box'; import { DataGrid, GridToolbar } from '@mui/x-data-grid'; -import { useDemoData } from '@mui/x-data-grid-generator'; +import { useMovieData } from '@mui/x-data-grid-generator'; -const VISIBLE_FIELDS = ['name', 'rating', 'country', 'dateCreated', 'isAdmin']; +const VISIBLE_FIELDS = ['title', 'company', 'director', 'year', 'cinematicUniverse']; export default function QuickFilteringGrid() { - const { data } = useDemoData({ - dataSet: 'Employee', - visibleFields: VISIBLE_FIELDS, - rowLength: 100, - }); + const data = useMovieData(); // Otherwise filter will be applied on fields such as the hidden column id const columns = React.useMemo( diff --git a/docs/data/data-grid/filtering/QuickFilteringInitialize.js b/docs/data/data-grid/filtering/QuickFilteringInitialize.js index d71f54958e77d..6038f7153a4da 100644 --- a/docs/data/data-grid/filtering/QuickFilteringInitialize.js +++ b/docs/data/data-grid/filtering/QuickFilteringInitialize.js @@ -1,16 +1,12 @@ import * as React from 'react'; import Box from '@mui/material/Box'; import { DataGrid, GridToolbar } from '@mui/x-data-grid'; -import { useDemoData } from '@mui/x-data-grid-generator'; +import { useMovieData } from '@mui/x-data-grid-generator'; -const VISIBLE_FIELDS = ['name', 'rating', 'country', 'dateCreated', 'isAdmin']; +const VISIBLE_FIELDS = ['title', 'company', 'director', 'year', 'cinematicUniverse']; export default function QuickFilteringInitialize() { - const { data } = useDemoData({ - dataSet: 'Employee', - visibleFields: VISIBLE_FIELDS, - rowLength: 100, - }); + const data = useMovieData(); // Otherwise filter will be applied on fields such as the hidden column id const columns = React.useMemo( @@ -23,11 +19,10 @@ export default function QuickFilteringInitialize() {